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.4.2.tar.gz (12.1 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.4.2-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: wynntilsresolver-1.4.2.tar.gz
  • Upload date:
  • Size: 12.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.8

File hashes

Hashes for wynntilsresolver-1.4.2.tar.gz
Algorithm Hash digest
SHA256 504cb08aee19d2f83e16feed5cf0f7da57e7052be98a0c94dcbe5c4b61eb32a6
MD5 f3201e18ab75c82bb328cd60c7ef4a48
BLAKE2b-256 b155e820b6515fb6c6c11d56819d58b6dbb86b585bc0ed9652458c2916d89c0f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wynntilsresolver-1.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c306ac513ab84237823ece1134cc459760bab9643204d4fcae8a00482ddc310b
MD5 0a8d2a1660077b1a687bb1112422bf85
BLAKE2b-256 487a42f9c2ace685d9e5fd80469d5fee85435b95b2aa18427850d02fbc227f53

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