diff --git a/.github/workflows/pyinstaller.yaml b/.github/workflows/pyinstaller.yaml index 08d4afad..d892a5bc 100644 --- a/.github/workflows/pyinstaller.yaml +++ b/.github/workflows/pyinstaller.yaml @@ -3,7 +3,7 @@ name: pyinstaller on: push: branches: - - master + - economy_config jobs: build: diff --git a/economy_config.txt b/economy_config.txt new file mode 100644 index 00000000..769e84bd --- /dev/null +++ b/economy_config.txt @@ -0,0 +1,1047 @@ +{ + "cyclingLevel": [ + { + "level": 1, + "startXp": 0, + "endXp": 0, + "entitlement1": "ENTITLEMENT_KIT_ZWIFT" + }, + { + "level": 2, + "startXp": 750, + "endXp": 50000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_BASIC", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 3, + "startXp": 1500, + "endXp": 100000, + "f4": 1, + "entitlement1": "ENTITLEMENT_HELMET_BLACK", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 4, + "startXp": 2500, + "endXp": 150000, + "f4": 2, + "entitlement1": "ENTITLEMENT_GLASSES_BASIC", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 5, + "startXp": 3500, + "endXp": 200000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SHOES_BLACK", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 6, + "startXp": 5000, + "endXp": 250000, + "f4": 2, + "entitlement1": "ENTITLEMENT_GLOVES_ZWIFT_WHITE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 7, + "startXp": 6500, + "endXp": 300000, + "f4": 3, + "entitlement1": "ENTITLEMENT_SOCKS_SOLID", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 8, + "startXp": 8000, + "endXp": 350000, + "f4": 2, + "entitlement1": "ENTITLEMENT_KIT_VINTAGE01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 9, + "startXp": 9500, + "endXp": 400000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_CAMOJERSEYS", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 10, + "startXp": 11000, + "endXp": 450000, + "f4": 2, + "entitlement1": "ENTITLEMENT_GLASSES_OAKLEY", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 11, + "startXp": 13000, + "endXp": 500000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_CAMOJERSEYSDIGITAL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 12, + "startXp": 15000, + "endXp": 550000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_BASIC2", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 13, + "startXp": 17000, + "endXp": 600000, + "f4": 3, + "entitlement1": "ENTITLEMENT_SOCKS_DOT", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 14, + "startXp": 19000, + "endXp": 650000, + "f4": 2, + "entitlement1": "ENTITLEMENT_GLOVES_PATTERN", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 15, + "startXp": 21000, + "endXp": 700000, + "f4": 1, + "entitlement1": "ENTITLEMENT_15_JERSEY", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 16, + "startXp": 23500, + "endXp": 750000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLASSES_COOL01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 17, + "startXp": 26000, + "endXp": 800000, + "f4": 2, + "entitlement1": "ENTITLEMENT_SOCKS_STRIPPED", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 18, + "startXp": 28500, + "endXp": 850000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_ZWIFTCLASSY", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 19, + "startXp": 31000, + "endXp": 900000, + "f4": 2, + "entitlement1": "ENTITLEMENT_GLASSES_COOL02", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 20, + "startXp": 33500, + "endXp": 950000, + "f4": 3, + "entitlement1": "ENTITLEMENT_KIT_LEVEL_20", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 21, + "startXp": 36500, + "endXp": 1000000, + "f4": 2, + "entitlement1": "ENTITLEMENT_KIT_ZWIFTNEON", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 22, + "startXp": 39500, + "endXp": 1050000, + "f4": 3, + "entitlement1": "ENTITLEMENT_SOCKS_PATTERNED", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 23, + "startXp": 42500, + "endXp": 1100000, + "f4": 2, + "entitlement1": "ENTITLEMENT_GLOVES_ZWIFT_BLACK", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 24, + "startXp": 45500, + "endXp": 1150000, + "f4": 3, + "entitlement1": "ENTITLEMENT_HELMET_SKATER_BOWL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 25, + "startXp": 48500, + "endXp": 1200000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_LEVEL_25", + "entitlement2": "ENTITLEMENT_HEADWEAR_CYCLINGCAP" + }, + { + "level": 26, + "startXp": 52000, + "endXp": 1250000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLASSES_POC", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 27, + "startXp": 55500, + "endXp": 1300000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_SWORKS", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 28, + "startXp": 59000, + "endXp": 1350000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_DOTS", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 29, + "startXp": 62500, + "endXp": 1400000, + "f4": 1, + "entitlement1": "ENTITLEMENT_HELMET_SWORK", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 30, + "startXp": 66000, + "endXp": 1450000, + "f4": 3, + "entitlement1": "ENTITLEMENT_KIT_LEVEL_30", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 31, + "startXp": 70000, + "endXp": 1500000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLASSES_OAKLEY_80S", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 32, + "startXp": 74000, + "endXp": 1550000, + "f4": 1, + "entitlement1": "ENTITLEMENT_HEADGEAR_NEWSY", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 33, + "startXp": 78000, + "endXp": 1600000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLOVES_PACK_FLUORO", + "entitlement2": "ENTITLEMENT_HELMET_LIMAR_AIR_SPEED_WHITE" + }, + { + "level": 34, + "startXp": 82000, + "endXp": 1650000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_MONOCHROME", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 35, + "startXp": 86000, + "endXp": 1700000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_MAVIC", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 36, + "startXp": 90500, + "endXp": 1750000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_FOOD", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 37, + "startXp": 95000, + "endXp": 1800000, + "f4": 1, + "entitlement1": "ENTITLEMENT_HELMET_BELL_JAVELIN_LONG_TAIL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 38, + "startXp": 99500, + "endXp": 1850000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLOVES_PACK_VINTAGE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 39, + "startXp": 104000, + "endXp": 1900000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_LEATHER", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 40, + "startXp": 108500, + "endXp": 1950000, + "f4": 3, + "entitlement1": "ENTITLEMENT_KIT_LEVEL_40", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 41, + "startXp": 113500, + "endXp": 2000000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLASSES_U2", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 42, + "startXp": 118500, + "endXp": 2050000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_LAZ_CLAIRE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 43, + "startXp": 123500, + "endXp": 2100000, + "f4": 1, + "entitlement1": "ENTITLEMENT_HELMET_80S_HAIRNET", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 44, + "startXp": 128500, + "endXp": 2150000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_SKI", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 45, + "startXp": 133500, + "endXp": 2200000, + "f4": 1, + "entitlement1": "ENTITLEMENT_HELMET_GIRO_SYNTHE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 46, + "startXp": 139000, + "endXp": 2250000, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_COLOR_PAC", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 47, + "startXp": 144500, + "endXp": 2300000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLASSES_OLD_SCHOOL_RIDING_GOGGLES", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 48, + "startXp": 150000, + "endXp": 2350000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_BONT", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 49, + "startXp": 155500, + "endXp": 2400000, + "f4": 1, + "entitlement1": "ENTITLEMENT_HELMET_GIRO_VANQUISH_AERO", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 50, + "startXp": 161000, + "endXp": 2450000, + "f4": 3, + "entitlement1": "ENTITLEMENT_KIT_LEVEL_50", + "entitlement2": "ENTITLEMENT_SOCKS_SOCKS_FLAMETRAILS" + }, + { + "level": 51, + "startXp": 167000, + "endXp": 2500000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_ZWIFTFOOD", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 52, + "startXp": 173000, + "endXp": 2550000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_EVENTS_TEALPINK2020", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 53, + "startXp": 179000, + "endXp": 2600000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLASSES_TEALPINK2020GLASSES01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 54, + "startXp": 185000, + "endXp": 2650000, + "f4": 1, + "entitlement1": "ENTITLEMENT_PAINTJOB_TEALPINKD", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 55, + "startXp": 191000, + "endXp": 2700000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLASSES_REARVIEW", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 56, + "startXp": 197500, + "endXp": 2750000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_ZWIFTANIMALS", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 57, + "startXp": 204000, + "endXp": 2800000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_ZWIFTCUTE01", + "entitlement2": "ENTITLEMENT_SOCKS_SOCKS_ZWIFTCUTE02" + }, + { + "level": 58, + "startXp": 210500, + "endXp": 2850000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_TEALPINK2020", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 59, + "startXp": 217000, + "endXp": 2900000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_BACKWARDSCAPFLUORO01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 60, + "startXp": 223500, + "endXp": 2950000, + "f4": 3, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_ZWIFT_LVL60", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 61, + "startXp": 230500, + "endXp": 3000000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_GLOVES_COOLTONEGLOVES", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 62, + "startXp": 237500, + "endXp": 3050000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_BIKEPACKER", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 63, + "startXp": 244500, + "endXp": 3100000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_LONDONTUBE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 64, + "startXp": 251500, + "endXp": 3150000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_POPARTL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 65, + "startXp": 258500, + "endXp": 3200000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_TORTOISEHARE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 66, + "startXp": 266000, + "endXp": 3250000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_BIKEPACKER", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 67, + "startXp": 273500, + "endXp": 3300000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_GIROARIESSPHERICAL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 68, + "startXp": 281000, + "endXp": 3350000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_ALPEDUKNIT", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 69, + "startXp": 288500, + "endXp": 3400000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_RUNNINGCAPBIKEPACKER", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 70, + "startXp": 296000, + "endXp": 3450000, + "f4": 3, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_ZWIFT_LVL70", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 71, + "startXp": 304000, + "endXp": 3500000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_SCOTTYTHESQUIRREL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 72, + "startXp": 312000, + "endXp": 3550000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_MAKURIBLOSSOMS", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 73, + "startXp": 320000, + "endXp": 3600000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_SOCKS_DINOPOWER", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 74, + "startXp": 328000, + "endXp": 3650000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_OUTFIELD", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 75, + "startXp": 336000, + "endXp": 3700000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_RAPHAPROTEAML", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 76, + "startXp": 345000, + "endXp": 3750000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_DINOPOWER", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 77, + "startXp": 354000, + "endXp": 3800000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_SCOTTYTHESQUIRREL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 78, + "startXp": 363000, + "endXp": 3850000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_HAWAIIAN", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 79, + "startXp": 372000, + "endXp": 3900000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_DINOPOWERL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 80, + "startXp": 381000, + "endXp": 3950000, + "f4": 3, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_ZWIFT_LVL80", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 81, + "startXp": 391000, + "endXp": 4000000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_LIGHTAERO", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 82, + "startXp": 401000, + "endXp": 4050000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_WOLFPOWER", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 83, + "startXp": 411000, + "endXp": 4100000, + "f4": 1, + "entitlement1": "ENTITLEMENT_GLASSES_RAPHAPROTEAM", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 84, + "startXp": 421000, + "endXp": 4150000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_SOLIDCOLORS", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 85, + "startXp": 431000, + "endXp": 4200000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_NIMBLFEATULTIMATEL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 86, + "startXp": 441000, + "endXp": 4250000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_KASKELEMENTO", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 87, + "startXp": 451000, + "endXp": 4300000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_GRAVELPARTY", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 88, + "startXp": 461000, + "endXp": 4350000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_PARTY", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 89, + "startXp": 471000, + "endXp": 4400000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_GIROIMPERIALL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 90, + "startXp": 481000, + "endXp": 4450000, + "f4": 3, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_ZWIFT_LVL90", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 91, + "startXp": 492000, + "endXp": 4500000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_MODERN01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 92, + "startXp": 503000, + "endXp": 4550000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_MIRAGE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 93, + "startXp": 514000, + "endXp": 4600000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_OUTOFTHISWORLD", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 94, + "startXp": 525000, + "endXp": 4650000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_CYCLINGCAPMIRAGE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 95, + "startXp": 536000, + "endXp": 4700000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_MIRAGE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 96, + "startXp": 547000, + "endXp": 4750000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_SWORKSEVADE3", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 97, + "startXp": 558000, + "endXp": 4800000, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_OUTOFTHISWORLD", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 98, + "startXp": 569000, + "endXp": 4850000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_SHOES_MIRAGEL", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 99, + "startXp": 580000, + "endXp": 4900000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_HEADGEAR_MIRAGE", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 100, + "startXp": 591000, + "endXp": 4950000, + "f4": 1, + "entitlement1": "ENTITLEMENT_CYCLING_JERSEY_ORIGINALS_ZWIFT_LVL100", + "entitlement2": "ENTITLEMENT_NONE" + } + ], + "runningLevel": [ + { + "level": 1, + "startXp": 0, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_KIT_ZWIFT_2019", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 2, + "startXp": 1000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT03", + "entitlement2": "ENTITLEMENT_GLASSES_BASIC" + }, + { + "level": 3, + "startXp": 2000, + "endXp": 0, + "f4": 3, + "entitlement1": "ENTITLEMENT_HEADWEAR_SWEATBAND", + "entitlement2": "ENTITLEMENT_RUNNING_SHOES_01" + }, + { + "level": 4, + "startXp": 3000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT04", + "entitlement2": "ENTITLEMENT_GLASSES_OAKLEY" + }, + { + "level": 5, + "startXp": 6000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT05", + "entitlement2": "ENTITLEMENT_RUNNING_SHOES_ZWIFT_02_MAGENTA" + }, + { + "level": 6, + "startXp": 8000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT06", + "entitlement2": "ENTITLEMENT_GLASSES_COOL01" + }, + { + "level": 7, + "startXp": 10000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_HEADWEAR_VISOR", + "entitlement2": "ENTITLEMENT_SOCKS_STRIPPED" + }, + { + "level": 8, + "startXp": 13000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT07", + "entitlement2": "ENTITLEMENT_GLASSES_COOL02" + }, + { + "level": 9, + "startXp": 16000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT08", + "entitlement2": "ENTITLEMENT_SOCKS_PATTERNED" + }, + { + "level": 10, + "startXp": 20000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT09", + "entitlement2": "ENTITLEMENT_GLASSES_POC" + }, + { + "level": 11, + "startXp": 24000, + "endXp": 0, + "f4": 3, + "entitlement1": "ENTITLEMENT_RUNNING_SHOES_UNDERARMOUR_HOVR", + "entitlement2": "ENTITLEMENT_SOCKS_DOTS" + }, + { + "level": 12, + "startXp": 28000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT13", + "entitlement2": "ENTITLEMENT_GLASSES_OAKLEY_80S" + }, + { + "level": 13, + "startXp": 32000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT12", + "entitlement2": "ENTITLEMENT_SOCKS_SOLID" + }, + { + "level": 14, + "startXp": 37000, + "endXp": 0, + "f4": 3, + "entitlement1": "ENTITLEMENT_RUNNING_SHOES_ZWIFT_02_BLUE", + "entitlement2": "ENTITLEMENT_SOCKS_FOOD" + }, + { + "level": 15, + "startXp": 42000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT11", + "entitlement2": "ENTITLEMENT_SOCKS_DOT" + }, + { + "level": 16, + "startXp": 48000, + "endXp": 0, + "f4": 3, + "entitlement1": "ENTITLEMENT_RUNNING_SHOES_HOKA_CLIFTON", + "entitlement2": "ENTITLEMENT_GLASSES_U2" + }, + { + "level": 17, + "startXp": 54000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT14", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 18, + "startXp": 60000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT15", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 19, + "startXp": 67000, + "endXp": 0, + "f4": 3, + "entitlement1": "ENTITLEMENT_RUNNING_SHOES_ZWIFT_02_GREEN", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 20, + "startXp": 74000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_OUTFIT10", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 21, + "startXp": 81000, + "endXp": 0, + "f4": 3, + "entitlement1": "ENTITLEMENT_RUNNING_SHOES_NEWBALANCE_ZANTEV4", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 22, + "startXp": 88000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_SHIRT_ZWIFT_MALETANKTOP1", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 23, + "startXp": 95000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_ANIMALS01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 24, + "startXp": 102000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_SHIRT_ZWIFT_MALETANKTOP2", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 25, + "startXp": 109000, + "endXp": 0, + "f4": 3, + "entitlement1": "ENTITLEMENT_RUNNING_SHOES_SAUCONY_ENDORPHIN_2021", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 26, + "startXp": 117000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_HEADGEAR_VISORBOLD01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 27, + "startXp": 125000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_SHIRT_MONOCHROMEMALETANKTOP01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 28, + "startXp": 133000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_SOCKS_SOCKS_FRUITS01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 29, + "startXp": 141000, + "endXp": 0, + "f4": 1, + "entitlement1": "ENTITLEMENT_RUNNING_SHIRT_FLUOROMALETANKTOP01", + "entitlement2": "ENTITLEMENT_NONE" + }, + { + "level": 30, + "startXp": 149000, + "endXp": 0, + "f4": 3, + "entitlement1": "ENTITLEMENT_RUNNING_SHOES_ADIDAS_ADIOS_PRO_2020", + "entitlement2": "ENTITLEMENT_NONE" + } + ], + "f3": 60, + "f4": 21, + "f5": 12000 +} \ No newline at end of file diff --git a/protobuf/login.proto b/protobuf/login.proto index 8678722b..2b31deb1 100644 --- a/protobuf/login.proto +++ b/protobuf/login.proto @@ -7,6 +7,7 @@ message LoginResponse { required PerSessionInfo info = 2; optional uint32 relay_session_id = 3; optional uint32 expiration = 4; // minutes + optional EconomyConfig economy_config = 5; } message LoginRequest { @@ -27,3 +28,22 @@ message RelaySessionRefreshResponse { required uint32 relay_session_id = 1; required uint32 expiration = 2; // minutes } + +message EconomyConfig { + repeated Level cycling_level = 1; + repeated Level running_level = 2; + required uint32 f3 = 3; + required uint32 f4 = 4; + required uint32 f5 = 5; + optional uint32 transition_start = 6; + optional uint32 transition_end = 7; +} + +message Level { + required uint32 level = 1; + required uint32 start_xp = 2; + required uint32 end_xp = 3; + optional uint32 f4 = 4; + optional string entitlement_1 = 5; + optional string entitlement_2 = 6; +} diff --git a/protobuf/login_pb2.py b/protobuf/login_pb2.py index 7cf2f966..8e3aed85 100644 --- a/protobuf/login_pb2.py +++ b/protobuf/login_pb2.py @@ -14,21 +14,25 @@ import per_session_info_pb2 as per__session__info__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0blogin.proto\x1a\x16per-session-info.proto\"s\n\rLoginResponse\x12\x15\n\rsession_state\x18\x01 \x02(\t\x12\x1d\n\x04info\x18\x02 \x02(\x0b\x32\x0f.PerSessionInfo\x12\x18\n\x10relay_session_id\x18\x03 \x01(\r\x12\x12\n\nexpiration\x18\x04 \x01(\r\"J\n\x0cLoginRequest\x12-\n\nproperties\x18\x01 \x02(\x0b\x32\x19.AnalyticsEventProperties\x12\x0b\n\x03key\x18\x02 \x02(\x0c\"0\n\x16\x41nalyticsEventProperty\x12\n\n\x02\x66\x31\x18\x01 \x02(\t\x12\n\n\x02\x66\x32\x18\x02 \x02(\t\"E\n\x18\x41nalyticsEventProperties\x12)\n\x08property\x18\x02 \x03(\x0b\x32\x17.AnalyticsEventProperty\"K\n\x1bRelaySessionRefreshResponse\x12\x18\n\x10relay_session_id\x18\x01 \x02(\r\x12\x12\n\nexpiration\x18\x02 \x02(\r') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0blogin.proto\x1a\x16per-session-info.proto\"\x9b\x01\n\rLoginResponse\x12\x15\n\rsession_state\x18\x01 \x02(\t\x12\x1d\n\x04info\x18\x02 \x02(\x0b\x32\x0f.PerSessionInfo\x12\x18\n\x10relay_session_id\x18\x03 \x01(\r\x12\x12\n\nexpiration\x18\x04 \x01(\r\x12&\n\x0e\x65\x63onomy_config\x18\x05 \x01(\x0b\x32\x0e.EconomyConfig\"J\n\x0cLoginRequest\x12-\n\nproperties\x18\x01 \x02(\x0b\x32\x19.AnalyticsEventProperties\x12\x0b\n\x03key\x18\x02 \x02(\x0c\"0\n\x16\x41nalyticsEventProperty\x12\n\n\x02\x66\x31\x18\x01 \x02(\t\x12\n\n\x02\x66\x32\x18\x02 \x02(\t\"E\n\x18\x41nalyticsEventProperties\x12)\n\x08property\x18\x02 \x03(\x0b\x32\x17.AnalyticsEventProperty\"K\n\x1bRelaySessionRefreshResponse\x12\x18\n\x10relay_session_id\x18\x01 \x02(\r\x12\x12\n\nexpiration\x18\x02 \x02(\r\"\xa3\x01\n\rEconomyConfig\x12\x1d\n\rcycling_level\x18\x01 \x03(\x0b\x32\x06.Level\x12\x1d\n\rrunning_level\x18\x02 \x03(\x0b\x32\x06.Level\x12\n\n\x02\x66\x33\x18\x03 \x02(\r\x12\n\n\x02\x66\x34\x18\x04 \x02(\r\x12\n\n\x02\x66\x35\x18\x05 \x02(\r\x12\x18\n\x10transition_start\x18\x06 \x01(\r\x12\x16\n\x0etransition_end\x18\x07 \x01(\r\"r\n\x05Level\x12\r\n\x05level\x18\x01 \x02(\r\x12\x10\n\x08start_xp\x18\x02 \x02(\r\x12\x0e\n\x06\x65nd_xp\x18\x03 \x02(\r\x12\n\n\x02\x66\x34\x18\x04 \x01(\r\x12\x15\n\rentitlement_1\x18\x05 \x01(\t\x12\x15\n\rentitlement_2\x18\x06 \x01(\t') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'login_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None - _LOGINRESPONSE._serialized_start=39 - _LOGINRESPONSE._serialized_end=154 - _LOGINREQUEST._serialized_start=156 - _LOGINREQUEST._serialized_end=230 - _ANALYTICSEVENTPROPERTY._serialized_start=232 - _ANALYTICSEVENTPROPERTY._serialized_end=280 - _ANALYTICSEVENTPROPERTIES._serialized_start=282 - _ANALYTICSEVENTPROPERTIES._serialized_end=351 - _RELAYSESSIONREFRESHRESPONSE._serialized_start=353 - _RELAYSESSIONREFRESHRESPONSE._serialized_end=428 + _LOGINRESPONSE._serialized_start=40 + _LOGINRESPONSE._serialized_end=195 + _LOGINREQUEST._serialized_start=197 + _LOGINREQUEST._serialized_end=271 + _ANALYTICSEVENTPROPERTY._serialized_start=273 + _ANALYTICSEVENTPROPERTY._serialized_end=321 + _ANALYTICSEVENTPROPERTIES._serialized_start=323 + _ANALYTICSEVENTPROPERTIES._serialized_end=392 + _RELAYSESSIONREFRESHRESPONSE._serialized_start=394 + _RELAYSESSIONREFRESHRESPONSE._serialized_end=469 + _ECONOMYCONFIG._serialized_start=472 + _ECONOMYCONFIG._serialized_end=635 + _LEVEL._serialized_start=637 + _LEVEL._serialized_end=751 # @@protoc_insertion_point(module_scope) diff --git a/scripts/login_to_json.py b/scripts/login_to_json.py new file mode 100644 index 00000000..12c28791 --- /dev/null +++ b/scripts/login_to_json.py @@ -0,0 +1,13 @@ +import json +import sys +sys.path.insert(0, '../protobuf') +import login_pb2 +from google.protobuf.json_format import MessageToJson + +login = login_pb2.LoginResponse() + +with open("login", "rb") as f: + login.ParseFromString(f.read()) + +with open('../economy_config.txt', 'w') as f: + f.write(MessageToJson(login.economy_config)) diff --git a/variants.txt b/variants.txt index f2fff174..27430cc1 100644 --- a/variants.txt +++ b/variants.txt @@ -1036,7 +1036,7 @@ "boolValue": false }, "ServerConfigXP": { - "varintValue": "0" + "varintValue": "2" }, "ShowRideStreaksScreen": { "boolValue": true diff --git a/zwift_offline.py b/zwift_offline.py index 2f86b739..53a86deb 100644 --- a/zwift_offline.py +++ b/zwift_offline.py @@ -1269,6 +1269,8 @@ def api_users_login(): udp_node.port = 3023 response.relay_session_id = player_id response.expiration = 70 + with open(os.path.join(SCRIPT_DIR, "economy_config.txt")) as f: + Parse(f.read(), response.economy_config) return response.SerializeToString(), 200