Skip to main content

A simple resolver to analyze wynntils' encoded equipment in chat.

Project description

Wynntils Resolver

A simple resolver to analyze Artemis' encoded items in chat.

Requires

Python >= 3.8

Install

pip install wynntilsresolver -U

Usage

Use Predefined Resolvers

from wynntilsresolver import GearItemResolver

shiny_warp = "󰀀󰄀󰉗󶅲󷀀󰌉󰀘󵜢󴵅󶈑󴝑󷐙󵀄󶸥󵠦󶠄󰌃󿞼󰘄󸨁􏿮"
sw = GearItemResolver.from_utf16(shiny_warp)

assert sw.name == "Warp"
assert sw.identifications
assert sw.identifications == [
    Identification(id="rawAgility", internal_id=41, base=20, roll=-1, value=20),
    Identification(id="healthRegen", internal_id=24, base=-200, roll=87, value=-174),
    Identification(id="manaRegen", internal_id=34, base=-45, roll=77, value=-35),
    Identification(id="reflection", internal_id=69, base=90, roll=98, value=88),
    Identification(id="exploding", internal_id=17, base=50, roll=71, value=36),
    Identification(id="walkSpeed", internal_id=81, base=180, roll=116, value=209),
    Identification(id="healthRegenRaw", internal_id=25, base=-600, roll=80, value=-480),
    Identification(id="airDamage", internal_id=4, base=15, roll=110, value=16),
    Identification(id="raw1stSpellCost", internal_id=37, base=4, roll=88, value=4),
    Identification(id="raw2ndSpellCost", internal_id=38, base=-299, roll=104, value=-311),
]
assert sw.powder
assert sw.powder.powder_slots == 3
assert sw.powder.powders == ["A6", "A6", "A6"]
assert sw.shiny
assert sw.shiny.name == "warsWon"
assert sw.shiny.value == 69
assert sw.shiny.display_name == "Wars Won"
assert sw.shiny.internal_id == 4
assert sw.reroll == 0

Create your own resolver

from typing import Optional

from wynntilsresolver.blocks import GearItem, Name,Identifications, Reroll, Powder, Shiny
from wynntilsresolver.resolver import Resolver

# Create a custom resolver like this
class MyResolver2(Resolver):
    item_type: GearItem
    name: Name
    identifications: Optional[Identifications]
    reroll: Optional[Reroll]
    powder: Optional[Powder]
    shiny: Optional[Shiny]

shiny_warp = "󰀀󰄀󰉗󶅲󷀀󰌉󰀘󵜢󴵅󶈑󴝑󷐙󵀄󶸥󵠦󶠄󰌃󿞼󰘄󸨁􏿮"

# Decode from Artemis shared utf16 text
b = MyResolver2.from_utf16(shiny_warp)

print(b.name.name) # Warp
if b.identifications:
    # Identification(id='rawAgility', internal_id=41, base=20, roll=-1, value=20)
    b.identifications.identifications[0]

Environment Variables

  • DATA_LOCATION: The directory to store the cache files. Default: pathlib.Path.home() / "AppData" / "Local" / "wynntilsresolver" or pathlib.Path.home() / ".local" / "share" / "wynntilsresolver"
  • ITEMDB_PATH: The path to the itemdb file.
  • SHINY_TABLE_PATH: The path to the shiny table file.
  • ID_TABLE_PATH: The path to the id table file.

Note that setting the path to those files will disable auto update.

Benchmark

Resolver Creation With Cache

[!IMPORTANT] The benchmark is done with data files downloaded to local. For each 24 hours, the cache will be updated and will take several seconds depending on the network speed.

> hyperfine --warmup 3 'python ./temp/benchmark_resolver.py'
Benchmark 1: python ./temp/benchmark_resolver.py
  Time (mean ± σ):     584.0 ms ±   5.4 ms    [User: 112.8 ms, System: 161.2 ms]
  Range (min … max):   577.5 ms … 594.0 ms    10 runs

Script:

from wynntilsresolver.item import GearItemResolver

shiny_warp = "󰀀󰄀󰉗󶅲󷀀󰌉󰀘󵜢󴵅󶈑󴝑󷐙󵀄󶸥󵠦󶠄󰌃󿞼󰘄󸨁􏿮"

sw = GearItemResolver.from_utf16(shiny_warp)

Resolving an GearItem from utf16 string

> python ./temp/benchmark_decode.py
Tested 10000 times, time elapsed: 0.71 seconds. Estimated qps: 14146

Script:

import timeit

from wynntilsresolver import GearItemResolver
shiny_warp = "󰀀󰄀󰉗󶅲󷀀󰌉󰀘󵜢󴵅󶈑󴝑󷐙󵀄󶸥󵠦󶠄󰌃󿞼󰘄󸨁􏿮"

time_elapsed = timeit.timeit('GearItemResolver.from_utf16(shiny_warp)', globals=globals(), number=10000)
print(f"Tested 10000 times, time elapsed: {time_elapsed:.2f} seconds. Estimated qps: {10000 / time_elapsed:.0f}")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wynntilsresolver-1.5.0.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wynntilsresolver-1.5.0-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file wynntilsresolver-1.5.0.tar.gz.

File metadata

  • Download URL: wynntilsresolver-1.5.0.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for wynntilsresolver-1.5.0.tar.gz
Algorithm Hash digest
SHA256 843078c7958f81820cf7ccdbde761cbdfd64fd7416eba8b5a018a545b54c95a1
MD5 8cffb9341a37fcf6646a7a3a98904bee
BLAKE2b-256 767a10564ed4f3148fb900e97e7ad101cd971517d1ba0d4fefa476fdfb4006a4

See more details on using hashes here.

File details

Details for the file wynntilsresolver-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: wynntilsresolver-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 20.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for wynntilsresolver-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c327130d5bbde3ee68458d9b5b4d3f6adbacd7fe87c80b57bb9bd4b4d73eb450
MD5 34b19e20e6c03b553c6bad3a59afca3b
BLAKE2b-256 4ab75df7a2e649913483949d46af47ccfd1a53e75b83a8175e0d2fe0ec2ddd47

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page