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.3.0.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

wynntilsresolver-1.3.0-py3-none-any.whl (19.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: wynntilsresolver-1.3.0.tar.gz
  • Upload date:
  • Size: 16.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.11.2 CPython/3.9.13

File hashes

Hashes for wynntilsresolver-1.3.0.tar.gz
Algorithm Hash digest
SHA256 3bc73e936f5cab5b32adc23e05d3f3bdcf15f59e5a89fe497d14bb04d37c5863
MD5 a2818b1352f655bf69a27ccd20fc0ebd
BLAKE2b-256 716babb81c5b8ff3e16bfde470d273458991e4ccc6de0d5f883f36073d4508cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wynntilsresolver-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1018bb2da879bc71b2faef3179d928c8ce0ad6af1655b2adfc0f83a7332c9aba
MD5 c56cf5b570ca8c29e7c8303c54766aa0
BLAKE2b-256 6955463ce39fa7b0cca64e1510218469420454d502c667153d3589d7557994eb

See more details on using hashes here.

Supported by

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