您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Оптимальный слом на рынке
当前为
// ==UserScript== // @name hwmOptimalRepairAtMarket // @author Tamozhnya1 // @namespace Tamozhnya1 // @description Оптимальный слом на рынке // @version 2.7 // @encoding utf-8 // @include *heroeswm.ru/auction.php* // @include *lordswm.com/auction.php* // @include *heroeswm.ru/art_info.php* // @include *lordswm.com/art_info.php* // @include *heroeswm.ru/mod_workbench.php* // @include *lordswm.com/mod_workbench.php* // @include *heroeswm.ru/inventory.php* // @include *lordswm.com/inventory.php* // @include *heroeswm.ru/shop.php* // @include *lordswm.com/shop.php* // @grant GM_deleteValue // @grant GM_getValue // @grant GM_listValues // @grant GM_setValue // @grant GM_addStyle // @grant GM_log // @grant GM_openInTab // @license MIT // ==/UserScript== var ScriptName = "hwmOptimalRepairAtMarket"; var windowObject = window.wrappedJSObject || unsafeWindow; var CombatCostBestDeviation = parseInt(GM_getValue("CombatCostBestDeviation", 1)); // percent var CombatCostGoodDeviation = parseInt(GM_getValue("CombatCostGoodDeviation", 10)); // percent var ShowAfterRepairBattleCostInInventory = GM_getValue("ShowAfterRepairBattleCostInInventory", "true") == "true"; var SortType = { Text: 1, Number: 2 }; var Strings = { "ru": { Lot: ustring("Товар"), Cost: ustring("Цена"), TimeLeft: ustring("Завершение"), BattlePrice: ustring("Цена за бой"), Strength: ustring("Прочность"), OptimalStrength: ustring("До прочности"), Combats: ustring("Боев"), Options: ustring("Настройки"), BestApproach: ustring("Лучшее приближение к минимальной цене (%)"), GoodApproach: ustring("Хорошее приближение к минимальной цене (%)"), BuyInfo: ustring("Информация о покупке"), ShowAfterRepairBattleCostInInventory: ustring("Показывать в инвентаре стоимость боя после ремонта") }, "en": { Lot: "Lot", Cost: "Cost", TimeLeft: "Time left", BattlePrice: "Battle price", Strength: "Strength", OptimalStrength: "Optimal strength", Combats: "Combats", Options: "Options", BestApproach: "Best approach to min price (%)", GoodApproach: "Good approach to min price (%)", BuyInfo: "Buy info", ShowAfterRepairBattleCostInInventory: "Show afterRepairBattleCost in inventory" } }; var LocalizedString = Strings[document.documentElement.lang]; var StockArtifactStrength = { "finecl": 80, "super_dagger": 75, "sun_staff": 85, "cold_sword2014": 85, "wind_boots": 85, "wind_helm": 85, "cold_shieldn": 85, "coldring_n": 75, "coldamul": 75, "sun_boots": 85, "sun_armor": 85, "sun_helm": 85, "sun_ring": 75, "clover_amul": 75, "lbow": 85 }; var SmithRecoveryEfficiency = [10, 20, 30, 40, 50, 60, 70, 80, 90, 90]; var ArtifactRepairCost = { "staff": 2527, "sword18": 17755, "wood_sword": 133, "long_bow": 6317, "dagger_dex": 3230, "dagger": 912, "dagger20": 9291, "dagger16": 9120, "shortbow": 342, "gnome_hammer": 294, "bow14": 9946, "bow17": 10108, "power_sword": 9775, "requital_sword": 2527, "firsword15": 17670, "ssword16": 6051, "ssword8": 3838, "ssword10": 4854, "broad_sword": 4721, "def_sword": 1292, "dagger_myf": 8626, "mif_sword": 16957, "mif_staff": 16387, "ssword13": 5985, "mstaff13": 4797, "mstaff8": 2888, "smstaff16": 4883, "staff18": 17746, "sor_staff": 6118, "ffstaff15": 17679, "mstaff10": 3781, "mm_sword": 17195, "mm_staff": 16986, "composite_bow": 8246, "steel_blade": 465, "large_shield": 9576, "hauberk": 2289, "boots2": 1026, "armor15": 9310, "marmor17": 9310, "sarmor16": 4351, "armor17": 9490, "leather_shiled": 266, "leatherhat": 171, "leatherboots": 199, "leatherplate": 1358, "hunter_boots": 912, "leather_helm": 627, "wizard_cap": 1596, "chain_coif": 1539, "xymhelmet15": 6612, "mhelmetzh13": 6384, "round_shiled": 104, "mif_light": 6251, "mif_lboots": 7153, "mif_lhelmet": 5244, "sarmor9": 2479, "miff_plate": 9842, "sarmor13": 4322, "boots13": 8502, "zxhelmet13": 6384, "shield13": 10174, "mage_armor": 4465, "robewz15": 9310, "wiz_robe": 9376, "sboots12": 2992, "shelm12": 2660, "sboots16": 3239, "boots15": 8559, "boots17": 8683, "mboots17": 8683, "mboots14": 8825, "sboots9": 2137, "ciras": 4455, "steel_helmet": 3676, "s_shield": 266, "full_plate": 9243, "steel_boots": 5785, "shoe_of_initiative": 2384, "wiz_boots": 8008, "mif_hboots": 7752, "mif_hhelmet": 6298, "shelm16": 2774, "mage_helm": 3277, "shelm8": 1197, "myhelmet15": 6583, "helmet17": 7239, "mhelmet17": 7239, "knowledge_hat": 978, "dragon_shield": 8778, "shield16": 10298, "sshield17": 4018, "shield19": 10469, "sshield5": 2888, "sshield11": 3876, "defender_shield": 1130, "sshield14": 3923, "wzzamulet16": 10972, "mmzamulet16": 10972, "smamul17": 4389, "bafamulet15": 10811, "amulet_of_luck": 959, "samul14": 4370, "wzzamulet13": 9975, "warring13": 10279, "ring19": 11305, "wwwring16": 11238, "dring5": 3496, "warriorring": 6697, "mmmring16": 11238, "i_ring": 171, "smring10": 2859, "dring18": 14820, "mring19": 11390, "circ_ring": 6507, "dring15": 14534, "powerring": 5187, "bring14": 10374, "sring4": 579, "doubt_ring": 1064, "dring21": 15104, "rashness_ring": 1928, "darkring": 8379, "sring17": 2907, "warrior_pendant": 8046, "mamulet19": 11039, "power_pendant": 7381, "amulet19": 11039, "magic_amulet": 8379, "cloack17": 9975, "cloackwz15": 9614, "scroll18": 10307, "scloack8": 2052, "bravery_medal": 560, "mmzamulet13": 9975, "dring12": 13356, "soul_cape": 1197, "wiz_cape": 8711, "samul17": 4389, "smamul14": 4370, "verve_ring": 1577, "dring9": 10032, "smring17": 2907, "magring13": 10279, "scloack16": 3192, "powercape": 5339, "scoutcloack": 304, "energy_scroll": 9044, "samul8": 3391, "sring10": 2859, "antiair_cape": 2926, "antimagic_cape": 4949, "d_spray": 3325, "bfly": 49875, "bril_pendant": 23275, "warmor": 16625, "flowers3": 3325, "flowers1": 332, "flowers4": 4987, "flowers2": 332, "roses": 8312, "flowers5": 4987, "half_heart_m": 4987, "half_heart_w": 4987, "venok": 332, "defender_dagger": 1330, "goldciras": 13300, "koltsou": 23275, "bril_ring": 33250, "wboots": 16625, "flower_heart": 1662, "protazan": 8312, "whelmet": 16625, "shpaga": 26600, "coldamul": 11000, "sun_armor": 9500, "super_dagger": 10400, "clover_amul": 11000, "ring2013": 800, "sun_ring": 6400, "coldring_n": 6400, "lbow": 10100, "cold_sword2014": 17600, "finecl": 10000, "sun_boots": 8700, "sun_helm": 7400, "wshield": 4000, "shield_14y": 14000, "cold_shieldn": 10400, "n_amul": 2000, "n_boots": 2000, "n_armor": 2000, "n_ringa": 2000, "n_ringd": 2000, "n_sword": 2000, "n_clk": 2000, "n_helmet": 2000, "n_shield": 2000, "neut_amulet": 10000, "forest_armor": 10000, "forest_dagger": 20000, "forest_blade": 20000, "neut_ring": 10000, "les_cl": 10000, "forest_bow": 10000, "forest_boots": 10000, "forest_helm": 10000, "shieldofforest": 10000, "hunter_pendant1": 400, "hunter_bow1": 400, "hunter_gloves1": 400, "hunter_jacket1": 400, "hunter_boots1": 400, "hunter_sword1": 400, "hunter_hat1": 400, "hunter_shield1": 400, "hunter_amulet1": 800, "hunter_armor1": 800, "hunterdagger": 800, "hunter_ring2": 800, "hunter_ring1": 800, "hunter_roga1": 800, "huntersword2": 800, "hunter_boots3": 800, "hunter_bow2": 800, "hunter_mask1": 800, "hunterdsword": 800, "hunter_boots2": 800, "hunter_arrows1": 800, "hunter_helm": 800, "huntershield2": 800, "gm_amul": 1200, "gm_arm": 1200, "gm_rring": 1200, "gm_kastet": 1200, "gm_sring": 1200, "gm_abow": 1200, "gm_protect": 1200, "gm_sword": 1200, "gm_spdb": 1200, "gm_3arrows": 1200, "gm_hat": 1200, "gm_defence": 1200, "sh_amulet2": 2400, "sh_armor": 2400, "sh_ring1": 2400, "sh_ring2": 2400, "sh_spear": 2400, "sh_bow": 2400, "sh_cloak": 2400, "sh_sword": 2400, "sh_boots": 2400, "sh_4arrows": 2400, "sh_helmet": 2400, "sh_shield": 2400, "thief_neckl": 8000, "thief_arb": 8000, "thief_goodarmor": 8000, "thief_ml_dagger": 8000, "ring_of_thief": 8000, "thief_msk": 8000, "thief_cape": 8000, "thief_fastboots": 8000, "tm_amulet": 24000, "tm_arb": 24000, "tm_armor": 24000, "tm_knife": 24000, "tm_mring": 24000, "tm_wring": 24000, "tm_msk": 24000, "tm_cape": 24000, "tm_boots": 24000, "r_warriorsamulet": 36000, "r_m_amulet": 36000, "r_zarmor": 36000, "r_dagger": 36000, "r_magicsring": 36000, "r_warring": 36000, "r_bow": 36000, "r_bigsword": 36000, "r_clck": 36000, "r_magy_staff": 36000, "r_bootsmb": 36000, "r_goodscroll": 36000, "r_helmb": 36000, "tact1w1_wamulet": 40000, "tactcv1_armor": 40000, "tactsm0_dagger": 40000, "tactspw_mring": 40000, "tactwww_wring": 40000, "tact765_bow": 40000, "tactms1_mamulet": 40000, "tactpow_cloack": 40000, "tactmag_staff": 40000, "tactzl4_boots": 40000, "tactaz_axe": 40000, "tacthapp_helmet": 40000, "tactdff_shield": 40000, "v_1armor": 48000, "verb11_sword": 48000, "verbboots": 48000, "ve_helm": 48000, "vrb_shild": 48000, "tl_medal1": 32000, "tl_medal2": 16000, "tl_medal3": 6000, "bwar1": 60000, "kwar1": 60000, "gnomewar1": 60000, "bwar2": 48000, "kwar2": 48000, "gnomewar2": 48000, "kwar3": 36000, "gnomewar3": 36000, "bwar3": 36000, "bwar4": 28000, "kwar4": 28000, "gnomewar4": 28000, "bwar5": 20000, "kwar5": 20000, "gnomewar5": 20000, "bwar6": 16000, "kwar6": 16000, "gnomewar6": 16000, "bwar7": 12000, "kwar7": 12000, "gnomewar7": 12000, "bunt_medal1": 40000, "bunt_medal2": 20000, "bunt_medal3": 10000, "bwar_splo": 28000, "gnomewar_splo": 28000, "kwar_splo": 28000, "kwar_stoj": 28000, "bwar_stoj": 28000, "gnomewar_stoj": 28000, "bwar_takt": 28000, "gnomewar_takt": 28000, "kwar_takt": 28000, "necrwar1st": 56000, "necrwar2st": 36000, "necrwar3st": 20000, "necrwar4st": 10000, "necrwar5st": 4000, "warthief_medal1": 18000, "warthief_medal2": 14000, "warthief_medal3": 10000, "warthief_medal4": 6000, "warthief_medal5": 2000, "elfwar1": 60000, "elfwar2": 40000, "elfwar3": 32000, "elfwar4": 20000, "elfwar5": 10000, "elfwar6": 4000, "magewar1": 52000, "magewar2": 40000, "magewar3": 32000, "magewar4": 20000, "magewar5": 12000, "demwar1": 60000, "demwar2": 44000, "demwar3": 36000, "demwar4": 24000, "demwar5": 16000, "demwar6": 8000, "barb_armor": 40000, "barb_club": 40000, "barb_boots": 40000, "barb_helm": 40000, "barb_shield": 40000, "necr_amulet": 40000, "necr_helm": 40000, "necr_staff": 40000, "necr_robe": 40000, "merc_armor": 40000, "merc_dagger": 40000, "merc_sword": 40000, "merc_boots": 40000, "elfamulet": 50000, "elfbow": 50000, "elfshirt": 50000, "elfboots": 50000, "darkelfkaska": 50000, "darkelfciras": 50000, "darkelfpendant": 50000, "darkelfcloack": 50000, "darkelfstaff": 50000, "darkelfboots": 50000, "dem_amulet": 50000, "dem_armor": 50000, "dem_bootshields": 50000, "dem_axe": 50000, "dem_helmet": 50000, "dem_shield": 50000, "mage_cape": 60000, "mage_staff": 60000, "mage_robe": 60000, "mage_boots": 60000, "mage_scroll": 60000, "mage_hat": 60000, "gnomearmor": 44000, "gnomehammer": 44000, "gnomeboots": 44000, "gnomehelmet": 44000, "gnomeshield": 44000, "gnomem_amulet": 64000, "gnomem_armor": 64000, "gnomem_hammer": 64000, "gnomem_boots": 64000, "gnomem_helmet": 64000, "gnomem_shield": 64000, "gmage_crown": 64000, "gmage_cloack": 64000, "gmage_staff": 64000, "gmage_armor": 64000, "gmage_boots": 64000, "gmage_scroll": 64000, "welfarmor": 44000, "welfbow": 44000, "welfsword": 44000, "welfboots": 44000, "welfhelmet": 44000, "welfshield": 44000, "druid_amulet": 64000, "druid_cloack": 64000, "druid_staff": 64000, "druid_armor": 64000, "druid_boots": 64000, "knightarmor": 44000, "knightsword": 44000, "knightboots": 44000, "knighthelmet": 44000, "knightshield": 44000, "paladin_bow": 64000, "paladin_armor": 64000, "paladin_sword": 64000, "paladin_boots": 64000, "paladin_helmet": 64000, "paladin_shield": 64000, "sv_arb": 64000, "sv_body": 64000, "sv_weap": 64000, "sv_boot": 64000, "sv_helm": 64000, "sv_shield": 64000, "nv_body": 56000, "nv_weap": 56000, "nv_boot": 56000, "nv_helm": 56000, "nv_shield": 56000, "kn_body": 44000, "kn_weap": 44000, "kn_helm": 44000, "kn_shield": 44000, "inq_body": 64000, "inq_cl": 64000, "inq_weap": 64000, "inq_boot": 64000, "inq_helm": 64000, "amf_body": 64000, "amf_cl": 64000, "amf_boot": 64000, "amf_weap": 64000, "amf_scroll": 64000, "amf_helm": 64000, "8amul_inf": 12000, "quest_pendant1": 600, "9amu_let": 18000, "trinitypendant": 6400, "sunart2": 28000, "a_mallet": 40, "buben2": 12800, "totem1": 9600, "icesphere1": 16000, "mechanic_glasses1": 8000, "buben1": 16000, "anomal_ring1": 20000, "mart8_ring1": 400, "mart8_flowers1": 8000, "wolfjacket": 800, "sharik": 4000, "thief_paper": 0, "magneticarmor": 36000, "dragonstone": 12000, "dubina": 40000, "ogre_bum": 36000, "gdubina": 14000, "lizard_armor": 800, "hopesh1": 10000, "mgear": 9600, "5years_star": 5000, "mirror": 16000, "znamya1": 8000, "krest2": 9000, "znamya2": 8000, "kznamya1": 10000, "kznamya2": 10000, "ankh1": 12000, "zub": 40000, "tunnel_kirka": 4000, "bludgeon": 28000, "brush": 19824, "windsword": 22000, "pit_sword1": 16000, "pit_sword2": 13200, "kniga": 9600, "skill_book11": 40000, "anomal_ring2": 18000, "commander_ring": 20000, "testring": 40000, "thief_premiumring1": 24000, "thief_premiumring2": 18000, "thief_premiumring3": 12000, "ttring": 10800, "blackring": 8000, "student_armor": 2000, "pegaskop": 36000, "sunart1": 14000, "kopie": 28000, "pika": 28000, "trogloditkop": 5600, "dragon_crown": 6800, "necrohelm2": 16000, "dem_kosa": 40000, "pouch": 12000, "cubed": 4800, "bal_cube": 4800, "cubes": 6400, "cubeg": 9600, "bshield3": 8000, "icesphere2": 14400, "goblin_bow": 16000, "centaurbow": 16000, "sniperbow": 36000, "totem3": 8400, "10scroll": 40000, "sunart3": 32000, "sword5": 4000, "blacksword": 20000, "sunart4": 36000, "dem_dmech": 14000, "blacksword1": 10000, "slayersword": 40000, "meshok": 2012, "meshok2": 2012, "molot_tan": 40000, "13coin": 40000, "snowjinka": 4000, "sosulka": 4000, "obereg": 20000, "castle_orden": 16000, "order_griffin": 16000, "order_manticore": 16000, "eg_order1": 22000, "eg_order2": 20000, "eg_order3": 16000, "ord_light": 18000, "ord_dark": 18000, "mechanic_glasses2": 7400, "pen": 19824, "sandglass": 12000, "inq_ring1": 16000, "battlem_cape": 28000, "stalkercl": 8000, "totem2": 9600, "2year_amul_lords": 4000, "7ka": 4000, "3year_amul": 4000, "icesphere3": 12800, "inq_ring2": 12000, "krest3": 8400, "anomal_ring3": 16000, "buben3": 9600, "mechanic_glasses3": 6800, "rog_demon": 40000, "runkam": 9600, "lizard_boots": 800, "torg_boots": 20000, "krest1": 9600, "thief_unique_secretops": 0, "ankh2": 10000, "compass": 8000, "statue": 12000, "nefrit2": 9000, "nefrit3": 8400, "nefrit1": 9600, "cat_statue": 8000, "bear_statue": 8000, "ru_statue": 2009, "dog_statue": 8000, "msphere": 9600, "3year_art": 4000, "znak5": 10000, "znak8": 10000, "znak7": 10000, "znak3": 10000, "znak2": 10000, "znak1": 10000, "znak6": 10000, "znak9": 10000, "znak4": 10000, "firehammer": 32000, "topor_drov": 16000, "dem_dtopor": 48000, "taskaxe": 10000, "orc_axe": 28000, "topor_skelet": 14000, "sea_trident": 4000, "bshield1": 16000, "dudka": 6000, "flyaga": 60000, "antifire_cape": 16000, "hopesh2": 7200, "12hron": 40000, "4year_klever": 4000, "6ring": 15000, "lizard_helm": 800, "ogre_helm": 24000, "orc_hat": 20000, "necrohelm3": 24000, "necrohelm1": 10000, "gargoshield": 16000, "bshield2": 12000, "e_shield2": 7200, "e_shield1": 10000, "elfdagger": 36000, "dun_amul2": 16000, "dun_bow2": 16000, "drak_armor1": 20000, "dun_boots1": 20000, "dun_amul1": 20000, "dun_bow1": 20000, "dun_armor1": 20000, "dun_dagger1": 20000, "dun_sword1": 20000, "dun_ring1": 20000, "dun_cloak1": 18000, "dung_axe1": 18000, "hm2": 20000, "dun_shield1": 20000, "dun_armor2": 16000, "dun_dagger2": 16000, "dering": 24000, "drak_armor2": 16000, "dun_boots3": 12000, "dun_armor3": 12000, "dun_shield3": 12000, "drak_armor3": 12000, "dun_bow3": 12000, "dun_dagger3": 12000, "dun_sword3": 12000, "dung_axe3": 12000, "dun_sword2": 16000, "dun_ring2": 16000, "dun_cloak2": 15000, "crystal": 16000, "dun_amul3": 12000, "dun_cloak3": 12000, "dun_ring3": 12000, "dun_boots2": 16000, "dung_axe2": 15000, "hm1": 14400, "dun_shield2": 16000, "ramul1": 16000, "rarmor1": 16000, "rdagger1": 16000, "rogring1": 16000, "rarmor2": 8000, "rboots2": 8000, "rhelm2": 8000, "rsword2": 8000, "raxe2": 8000, "rbow1": 16000, "rsword1": 16000, "rcloak1": 16000, "rogring2": 8000, "ramul2": 8000, "rdagger2": 8000, "rbow2": 8000, "rcloak2": 8000, "rshield2": 8000, "rboots1": 16000, "sumka": 12000, "raxe1": 16000, "rhelm1": 16000, "rshield1": 16000, "surv_halberdzg": 24000, "surv_wamuletik": 28000, "surv_crossbowsurv": 32000, "surv_armorsu": 28000, "surv_wring2o": 20000, "surv_daggermd": 36000, "surv_sword2sd": 20000, "surv_mring2fpg": 20000, "surv_wring1my": 28000, "surv_mbootsbb": 28000, "surv_mamulka": 28000, "surv_marmoroz": 28000, "surv_mhelmetcv": 28000, "surv_mring1fd": 28000, "surv_mcloacksv": 28000, "surv_sword_surv": 36000, "surv_cloacksrv": 28000, "surv_staffik": 36000, "surv_bootsurv": 28000, "surv_scrollcd": 28000, "surv_axes": 36000, "surv_helmetpi": 28000, "surv_shieldvv": 28000, "tj_magam2": 20000, "mtcloak1": 24000, "tmarmor1": 24000, "sph1": 24000, "tj_mtuf1": 24000, "vbow1": 24000, "mhelmv1": 24000, "vtmsword1": 24000, "vtjcloak1": 24000, "staff_v1": 24000, "vscroll-1": 24000, "vtmaxe1": 24000, "vmring1": 24000, "tjarmor2": 20000, "vrdagger2": 20000, "v-ring2": 20000, "tjam2": 20000, "mtcloak3": 16000, "vtjcloak3": 16000, "staff_v3": 16000, "tmarmor3": 16000, "tj_vboots3": 16000, "tj_mtuf3": 16000, "tjarmor3": 16000, "vrdagger3": 16000, "vbow3": 16000, "mhelmv3": 16000, "vtmsword3": 16000, "vtmaxe3": 16000, "tj_helmet3": 16000, "tj-shield3": 16000, "vbow2": 20000, "mhelmv2": 20000, "vmring2": 20000, "v-ring3": 16000, "tj_magam3": 16000, "tjam3": 16000, "vbolt3": 16000, "vscroll-3": 16000, "mtcloak2": 20000, "vtmsword2": 20000, "v-ring1": 24000, "tj_magam1": 24000, "vrdagger1": 24000, "tjam1": 24000, "vbolt1": 24000, "vbolt2": 20000, "vtjcloak2": 20000, "staff_v2": 20000, "sph3": 16000, "vmring3": 16000, "tmarmor2": 20000, "tj_vboots2": 20000, "vscroll-2": 20000, "sph2": 20000, "vtmaxe2": 20000, "tj_mtuf2": 20000, "tj_vboots1": 24000, "tjarmor1": 24000, "tj_helmet1": 24000, "tj-shield1": 24000, "tj_helmet2": 20000, "tj-shield2": 20000, "p_amulet2": 16000, "p_amulet1": 20000, "piratehat3": 12000, "pir_armor1": 20000, "p_dag2": 16000, "p_dag1": 20000, "p_sword3": 12000, "pn_ring2": 16000, "pn_ring1": 20000, "p_compas2": 16000, "p_compas1": 20000, "pn_ring3": 12000, "piring2": 16000, "piring1": 20000, "pir_armor3": 12000, "pir_armor2": 16000, "p_pistol2": 16000, "p_pistol1": 16000, "p_cloak2": 16000, "p_cloak1": 20000, "p_amulet3": 12000, "p_dag3": 12000, "p_compas3": 12000, "piring3": 12000, "p_pistol3": 12000, "p_cloak3": 12000, "p_sword2": 16000, "p_boots2": 16000, "p_boots1": 20000, "p_boots3": 12000, "piratehat2": 16000, "piratehat1": 20000, "p_sword1": 20000, "polk_sword1": 16000, "polk_armor2": 12000, "gring": 24000, "polk_armor3": 8000, "polkboots3": 8000, "polk_sword3": 8000, "polk__helm3": 8000, "polk_sword2": 12000, "gringd": 24000, "polkboots2": 12000, "polk_armor1": 16000, "polkboots1": 16000, "polk__helm1": 16000, "polk__helm2": 12000, "m_amul2": 16000, "ocean_boots1": 20000, "m_amul1": 20000, "m_armor1": 20000, "ocean_dgr1": 20000, "ocean_bw1": 20000, "ocean_sword1": 20000, "ocean_per1": 20000, "ocean_cl1": 20000, "ocean_hlm1": 20000, "ocean_m_shield1": 20000, "ocean_ring1": 20000, "ocean_eye1": 20000, "m_armor2": 16000, "ocean_dgr2": 16000, "ocean_ring2": 16000, "m_armor3": 12000, "ocean_boots3": 12000, "ocean_dgr3": 12000, "ocean_sword3": 12000, "ocean_hlm3": 12000, "ocean_m_shield3": 12000, "ocean_bw2": 16000, "ocean_sword2": 16000, "ocean_eye2": 16000, "ocean_per2": 16000, "ocean_cl2": 16000, "ocean_ring3": 12000, "ocean_eye3": 12000, "m_amul3": 12000, "ocean_bw3": 12000, "ocean_per3": 12000, "ocean_cl3": 12000, "ocean_boots2": 16000, "ocean_hlm2": 16000, "ocean_m_shield2": 16000, "adv_neck1": 16000, "adv_armor1": 16000, "a_dagger1": 16000, "adv_fring1": 16000, "adv_armor2": 10000, "adv_boot2": 10000, "adv_hm2": 10000, "adv_shild2": 10000, "adv_saber2": 10000, "adv_longbow1": 16000, "adv_clk1": 16000, "adv_sumk2": 10000, "adv_fring2": 10000, "adv_neck2": 10000, "adv_longbow2": 10000, "a_dagger2": 10000, "adv_clk2": 10000, "adv_boot1": 16000, "adv_sumk1": 16000, "adv_hm1": 16000, "adv_shild1": 16000, "adv_saber1": 16000, "mir_am2": 20000, "mir_am1": 24000, "mh_sword1": 24000, "mir_armor2": 20000, "mir_armor3": 16000, "mir_boots3": 16000, "mh_sword3": 16000, "mir_shld3": 16000, "mh_sword2": 20000, "mir_am3": 16000, "mir_boots2": 20000, "mir_armor1": 24000, "mir_shld1": 24000, "mir_boots1": 24000, "mir_shld2": 20000, "ed_mbook1": 16000, "ed_armr1": 16000, "ed_elfbow1": 16000, "ed_bsword1": 16000, "ed_ring1": 16000, "ed_armr2": 14000, "ed_mbook2": 14000, "ed_ring2": 14000, "ed_armr3": 12000, "ed_bsword3": 12000, "ed_elfbow2": 14000, "ed_bsword2": 14000, "ed_mbook3": 12000, "ed_ring3": 12000, "ed_elfbow3": 12000, "stalker_crsb2": 12800, "stalker_crsb1": 16000, "stalker_hlm1": 16000, "stalker_dagger1": 16000, "stalker_hlm2": 12800, "stalker_dagger2": 12800, "stalker_crsb3": 10000, "stalker_hlm3": 10000, "stalker_dagger3": 10000, "imp_amul": 60000, "imp_crossbow": 40000, "imp_armor": 36000, "imp_dagger": 36000, "imp_ring": 28000, "imp_sword": 40000, "imp_cloak": 36000, "imp_boots": 36000, "imp_helmet": 36000, "imp_shield": 36000, "dark_amul": 60000, "dark_armor": 36000, "dark_dagger": 36000, "dark_ring": 28000, "dark_bow": 40000, "dark_cloak": 36000, "dark_boots": 36000, "dark_axe": 40000, "dark_helmet": 36000, "dark_shield": 36000, "heaven_helm": 36000, "heaven_clk": 36000, "heaven_bts": 36000, "heaven_armr": 36000, "heaven_staff": 40000, "potion01": 0, "potion02": 0, "potion03": 0, "potion04": 0, "potion05": 0, "potion06": 0, "potion07": 0, "potion08": 0, "16amul": 16161, "forest_crossbow": 10000, "icecr1": 16000, "drak_crown1": 20000, "ed_pendant1": 16000, "arm_armor1": 16000, "arm_cap1": 16000, "eddem_ring1": 16000, "stalker_cl1": 16000, "arm_armor2": 12800, "arm_cap2": 12800, "drak_crown2": 16000, "arm_cap3": 10000, "mir_helmt3": 16000, "icecr2": 14400, "icecr3": 12800, "eddem_ring2": 14000, "stalker_cl2": 12800, "ed_pendant2": 14000, "sun_staff": 17600, "drak_crown3": 12000, "ed_pendant3": 12000, "arm_armor3": 10000, "eddem_ring3": 12000, "stalker_cl3": 10000, "wind_boots": 8700, "mir_helmt1": 24000, "wind_helm": 7400, "mir_helmt2": 20000 }; function uchar(s) { switch (s[0]) {case "А": return "\u0410"; case "Б": return "\u0411"; case "В": return "\u0412"; case "Г": return "\u0413"; case "Д": return "\u0414"; case "Е": return "\u0415"; case "Ж": return "\u0416"; case "З": return "\u0417"; case "И": return "\u0418"; case "Й": return "\u0419"; case "К": return "\u041a"; case "Л": return "\u041b"; case "М": return "\u041c"; case "Н": return "\u041d"; case "О": return "\u041e"; case "П": return "\u041f"; case "Р": return "\u0420"; case "С": return "\u0421"; case "Т": return "\u0422"; case "У": return "\u0423"; case "Ф": return "\u0424"; case "Х": return "\u0425"; case "Ц": return "\u0426"; case "Ч": return "\u0427"; case "Ш": return "\u0428"; case "Щ": return "\u0429"; case "Ъ": return "\u042a"; case "Ы": return "\u042b"; case "Ь": return "\u042c"; case "Э": return "\u042d"; case "Ю": return "\u042e"; case "Я": return "\u042f"; case "а": return "\u0430"; case "б": return "\u0431"; case "в": return "\u0432"; case "г": return "\u0433"; case "д": return "\u0434"; case "е": return "\u0435"; case "ж": return "\u0436"; case "з": return "\u0437"; case "и": return "\u0438"; case "й": return "\u0439"; case "к": return "\u043a"; case "л": return "\u043b"; case "м": return "\u043c"; case "н": return "\u043d"; case "о": return "\u043e"; case "п": return "\u043f"; case "р": return "\u0440"; case "с": return "\u0441"; case "т": return "\u0442"; case "у": return "\u0443"; case "ф": return "\u0444"; case "х": return "\u0445"; case "ц": return "\u0446"; case "ч": return "\u0447"; case "ш": return "\u0448"; case "щ": return "\u0449"; case "ъ": return "\u044a"; case "ы": return "\u044b"; case "ь": return "\u044c"; case "э": return "\u044d"; case "ю": return "\u044e"; case "я": return "\u044f"; case "Ё": return "\u0401"; case "ё": return "\u0451"; default: return s[0];}} function ustring(s) { s = String(s); var result = ""; for (var i = 0; i < s.length; i++) result += uchar(s[i]); return result; } function round00(value) { return Math.round(value * 100) / 100; } function getAfterRepairRestStrength(strength, smithLevel) { return Math.floor(strength * SmithRecoveryEfficiency[smithLevel || 9] / 100); } function optimalRepair(marketPrice, repairCost, strength, restStrength) { restStrength = restStrength || strength; let totalSpending = marketPrice; let currentRestStrength = restStrength; let totalCombatsAmount = currentRestStrength; let currentStrength = strength; let currentCombatCost = totalSpending / totalCombatsAmount; // Начальная стоимость боя //console.log(`currentStrength: ${currentStrength}, currentRestStrength: ${currentRestStrength}, totalSpending: ${totalSpending}, totalCombatsAmount: ${totalCombatsAmount}, newCombatCost: ${currentCombatCost}`); for(currentStrength = strength; currentStrength > 0; currentStrength--) { currentRestStrength = getAfterRepairRestStrength(currentStrength); totalSpending += repairCost; let newCombatCost = totalSpending / (totalCombatsAmount + currentRestStrength); //console.log(`currentStrength: ${currentStrength}, currentRestStrength: ${currentRestStrength}, totalSpending: ${totalSpending}, totalCombatsAmount: ${totalCombatsAmount + currentRestStrength}, newCombatCost: ${newCombatCost}`); if(newCombatCost > currentCombatCost) { break; } totalCombatsAmount += currentRestStrength; currentCombatCost = newCombatCost; } return { Strength: currentStrength, CombatCost: round00(currentCombatCost), CombatsAmount: totalCombatsAmount }; } function addElement(type, parent, data, style) { let el = createElement(type, data, style); if(parent) { parent.appendChild(el); } return el; } function createElement(type, data, style) { let el = document.createElement(type); if(data) { for(let key in data) { if(key == "innerText") { el.innerText = data[key]; } else { el.setAttribute(key, data[key]); } } } if(style && el.id) { let styleStr = ""; if(typeof(style) == "string") { styleStr = style; } else { for (let key in style) { styleStr += key + ": " + style[key] + "; "; } } GM_addStyle("#" + el.id + "{" + styleStr + "}"); } return el; } function hideScriptOptions() { let bg = document.getElementById(ScriptName + "1"); let bgc = document.getElementById(ScriptName + "2"); bg.style.display = bgc.style.display = 'none'; } function showScriptOptions() { let bg = document.getElementById(ScriptName + "1"); let bgc = document.getElementById(ScriptName + "2"); if(bg) { bg.style.display = bgc.style.display = 'block'; return; } bg = addElement("div", document.body, {id: ScriptName + "1"}, "position: absolute; left: 0pt; width: 100%; background: none repeat scroll 0% 0% gray; opacity: 0.5; top: 0px; height: 100%; display: block; z-index: 200;"); bg.addEventListener("click", hideScriptOptions, false); bgc = addElement("div", document.body, {id: ScriptName + "2"}, "position: absolute; width: 650px; background: none repeat scroll 0% 0% rgb(246, 243, 234); left: " + ((document.body.offsetWidth - 650) / 2) + "px; top: 150px; display: block; z-index: 200;"); let div1 = addElement("div", bgc, {id: ScriptName + "3"}, "border: 1px solid #abc; padding: 5px; margin: 2px;"); let divClose = addElement("div", div1, {id: ScriptName + "close", title: "Close", innerText: "x"}, "float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;"); divClose.addEventListener("click", hideScriptOptions, false); // Script specific part addElement("b", div1, { innerText: LocalizedString.Options, style: "text-align: center;" }); addElement("br", div1); addElement("label", div1, { for: "combatCostBestDeviationInput", innerText: LocalizedString.BestApproach + "\t", style: "background-color: #becb10;" }); let combatCostBestDeviationInput = addElement("input", div1, { id: "combatCostBestDeviationInput", type: "number", value: CombatCostBestDeviation }); combatCostBestDeviationInput.addEventListener("change", function() { GM_setValue("CombatCostBestDeviation", parseInt(this.value)); CombatCostBestDeviation = parseInt(this.value); }, false); addElement("br", div1); addElement("label", div1, { for: "combatCostGoodDeviationInput", innerText: LocalizedString.GoodApproach + "\t", style: "background-color: #90EE90;" }); let combatCostGoodDeviationInput = addElement("input", div1, { id: "combatCostGoodDeviationInput", type: "number", value: CombatCostGoodDeviation }); combatCostGoodDeviationInput.addEventListener("change", function() { GM_setValue("CombatCostGoodDeviation", parseInt(this.value)); CombatCostGoodDeviation = parseInt(this.value); }, false); addElement("br", div1); addElement("label", div1, { for: "showAfterRepairBattleCostInInventoryInput", innerText: LocalizedString.ShowAfterRepairBattleCostInInventory + "\t" }); let showAfterRepairBattleCostInInventoryInput = addElement("input", div1, { id: "showAfterRepairBattleCostInInventoryInput", type: "checkbox" }); showAfterRepairBattleCostInInventoryInput.checked = ShowAfterRepairBattleCostInInventory; showAfterRepairBattleCostInInventoryInput.addEventListener("change", function() { GM_setValue("ShowAfterRepairBattleCostInInventory", this.checked); ShowAfterRepairBattleCostInInventory = this.checked; }, false); addElement("br", div1); } function sortTable(tableElement, columnIndex, sortType) { sortType = sortType || SortType.Text; let rows, switching, i, x, y, shouldSwitch; switching = true; while (switching) { /* Make a loop that will continue until no switching has been done: */ switching = false; // Start by saying: no switching is done: rows = tableElement.rows; for (i = 1; i < (rows.length - 1); i++) { /* Loop through all table rows (except the first, which contains table headers): */ shouldSwitch = false; // Start by saying there should be no switching: x = rows[i].cells[columnIndex]; /* Get the two elements you want to compare, one from current row and one from the next: */ y = rows[i + 1].cells[columnIndex]; if (sortType == SortType.Text && x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) { // Check if the two rows should switch place: shouldSwitch = true; // If so, mark as a switch and break the loop: break; } if (sortType == SortType.Number && parseFloat(x.innerHTML) > parseFloat(y.innerHTML)) { // Check if the two rows should switch place: shouldSwitch = true; // If so, mark as a switch and break the loop: break; } } if (shouldSwitch) { rows[i].parentNode.insertBefore(rows[i + 1], rows[i]); /* If a switch has been marked, make the switch and mark that a switch has been done: */ switching = true; } } } function extendLotsTable() { let tableHeaderRow; for(const tr of document.querySelectorAll("tr")) { if(tr.nextElementSibling && tr.textContent.includes(LocalizedString.Lot) && tr.textContent.includes(LocalizedString.Cost) && tr.textContent.includes(LocalizedString.TimeLeft)) { tableHeaderRow = tr; break; } } if(tableHeaderRow) { let td = addElement("td", tableHeaderRow, { style: "text-align: center;", innerText: LocalizedString.BattlePrice }); td.addEventListener("click", showScriptOptions, false); let sortDiv = addElement("div", td, { style: "float: right; border: 1px solid; cursor: pointer;", innerText: "v", title: "Sort" }); sortDiv.addEventListener("click", function(e) { sortTable(tableHeaderRow.parentNode, 5, SortType.Number); e.stopPropagation(); }, false); td = addElement("td", tableHeaderRow, { style: "text-align: center;", innerText: LocalizedString.OptimalStrength }); td.addEventListener("click", showScriptOptions, false); td = addElement("td", tableHeaderRow, { style: "text-align: center;", innerText: LocalizedString.Combats }); td.addEventListener("click", showScriptOptions, false); logNewArtifactsIds(tableHeaderRow.previousElementSibling); let currentRow = tableHeaderRow; let arts = []; while(currentRow = currentRow.nextElementSibling) { let art = addOptimalRepairDataToLotRow(currentRow); arts.push(art); } if(arts.length > 0) { let firstArt = arts[0]; let minCombatCost = arts.reduce((c, e) => Math.min(c, e.OptimalRepairCombatCost), firstArt.OptimalRepairCombatCost); for(const art of arts) { if(art.OptimalRepairCombatCost <= minCombatCost * (100 + CombatCostBestDeviation) / 100) { art.RowElement.cells[5].style.backgroundColor = "#becb10"; } else if(art.OptimalRepairCombatCost <= minCombatCost * (100 + CombatCostGoodDeviation) / 100) { art.RowElement.cells[5].style.backgroundColor = "#90EE90"; } } // Запомним цену акционных артефактов if(firstArt.Id in StockArtifactStrength) { let strength = StockArtifactStrength[firstArt.Id]; let fullArs = []; for(const art of arts) { if(art.Id == firstArt.Id && art.LotStrength == strength && art.RestLotStrength == strength) { fullArs.push(art); } } if(fullArs.length > 0) { let minPrice = fullArs.reduce((c, e) => Math.min(c, e.LotPrice), fullArs[0].LotPrice); let minPriceArt; for(const art of fullArs) { if(art.LotPrice == minPrice) { minPriceArt = art; break; } } GM_setValue("StockArtifactLastMarketMinPrice_" + firstArt.Id, `${minPriceArt.LotPrice}_${minPriceArt.OptimalRepairCombatCost}`); } } } } } function addOptimalRepairDataToLotRow(rowElement) { if(!rowElement || rowElement.nodeName != "TR") { return; } let goldImageElement = rowElement.querySelector("img[src*='gold.png']"); let lotPrice = parseFloat(goldImageElement.parentNode.nextElementSibling.innerText.replace(/,/g, "")); let artImageRefElement = rowElement.querySelector("a[href*='art_info.php']"); let hrefParametersData = artImageRefElement.href.split("?")[1]; let hrefParameters = hrefParametersData.split("&"); let artId = hrefParameters[0].split("=")[1]; let artUid; if(hrefParameters.length > 1) { artUid = hrefParameters[1].split("=")[1]; } let artRepairCost = ArtifactRepairCost[artId]; let strengthData = rowElement.innerText.match(/\d+\/\d+/); let restStrength = parseInt(strengthData[0].split("/")[0]); let strength = parseInt(strengthData[0].split("/")[1]); let optimalRepairData = optimalRepair(lotPrice, artRepairCost, strength, restStrength); let td = addElement("td", rowElement, { style: "text-align: center;" }); td.innerText = `${optimalRepairData.CombatCost}`; td = addElement("td", rowElement, { style: "text-align: center;" }); td.innerText = `${optimalRepairData.Strength}`; td = addElement("td", rowElement, { style: "text-align: center;" }); td.innerText = `${optimalRepairData.CombatsAmount}`; let artefact = new Artefact(artUid, artId, strength, restStrength, lotPrice, optimalRepairData.CombatCost, optimalRepairData.Strength, optimalRepairData.CombatsAmount, rowElement); if(artefact.Uid) { let buyHrefElement = rowElement.querySelector("a[onclick*='show_js_button']"); buyHrefElement.addEventListener("click", function() { GM_setValue(artefact.Uid, JSON.stringify(artefact)); }, false); } return artefact; } function Artefact(uid, id, strength, restStrength, lotPrice, optimalRepairCombatCost, optimalRepairStrength, optimalRepairCombatsAmount, rowElement) { this.Uid = uid; this.Id = id; this.LotStrength = strength; this.RestLotStrength = restStrength; this.LotPrice = lotPrice; this.OptimalRepairCombatCost = optimalRepairCombatCost; this.OptimalRepairStrength = optimalRepairStrength; this.OptimalRepairCombatsAmount = optimalRepairCombatsAmount; this.RowElement = rowElement; this.GetLotInfo = function() { return `${LocalizedString.BuyInfo}: ${LocalizedString.Cost}: ${this.LotPrice}, ${LocalizedString.Strength}: ${this.RestLotStrength}/${this.LotStrength}, ${LocalizedString.BattlePrice}: ${this.OptimalRepairCombatCost}, ${LocalizedString.Strength}: ${this.OptimalRepairStrength}, ${LocalizedString.Combats}: ${this.OptimalRepairCombatsAmount}`; } } function logNewArtifactsIds(containsRow) { if(!containsRow) { return; } let newArtIds = []; let options = containsRow.getElementsByTagName("option"); //alert(options.length) = 979 for(const constoptionElement of options) { let valueParts = constoptionElement.value.split("#"); if(valueParts.length >= 2) { let artId = valueParts[1]; if(!(artId in ArtifactRepairCost)) { newArtIds.push(artId); } } } if(newArtIds.length > 0) { var el = document.createElement("TEXTAREA"); document.body.appendChild(el); el.innerText = newArtIds.reduce((t, e) => t + `, "${e}": `, ""); } } function AppendLotInfo(parentElement, artUid) { if(parentElement && artUid && artUid != "") { let artefactData = GM_getValue(artUid); if(artefactData && artefactData != "") { let artefact = Object.assign(new Artefact, JSON.parse(artefactData)); addElement("b", parentElement, { innerText: artefact.GetLotInfo() }); } } } function AddAfterRepairCombatCostToInventory() { let artInfoDivs = document.querySelectorAll("div.inventory_item_div.inventory_item2"); for(const artInfoDiv of artInfoDivs) { let artIndex = parseInt(artInfoDiv.getAttribute("art_idx")); let artInfo = windowObject.arts[artIndex]; if(artInfo.art_id in ArtifactRepairCost) { let repairCost = ArtifactRepairCost[artInfo.art_id]; let afterRepairCombatCost = round00(repairCost / getAfterRepairRestStrength(artInfo.durability2)); if(!isNaN(afterRepairCombatCost)) { let overlapInfoDiv = artInfoDiv.querySelector("div.art_durability_hidden"); overlapInfoDiv.innerText = `${overlapInfoDiv.innerText}\n${afterRepairCombatCost}`; } } } } function addShopArtPriceAndBattleCost() { let artInfoDivs = document.querySelectorAll("div.s_art"); for(const artInfoDiv of artInfoDivs) { let artPropDiv = artInfoDiv.querySelector("div.s_art_prop"); let price = 0; let strength; let battlePrice = 0; let goldImage = artInfoDiv.querySelector("img[src*='gold']"); if(goldImage) { price += parseInt(goldImage.nextSibling.textContent.replace(/,/g, "")); } let woodImage = artInfoDiv.querySelector("img[src*='wood']"); if(woodImage && woodImage.nextSibling) { price += parseInt(woodImage.nextSibling.textContent) * 180; } let oreImage = artInfoDiv.querySelector("img[src*='ore']"); if(oreImage) { price += parseInt(oreImage.nextSibling.textContent) * 180; } let mercuryImage = artInfoDiv.querySelector("img[src*='mercury']"); if(mercuryImage) { price += parseInt(mercuryImage.nextSibling.textContent) * 360; } let sulfurImage = artInfoDiv.querySelector("img[src*='sulfur']"); if(sulfurImage) { price += parseInt(sulfurImage.nextSibling.textContent) * 360; } let crystalsImage = artInfoDiv.querySelector("img[src*='crystals']"); if(crystalsImage) { price += parseInt(crystalsImage.nextSibling.textContent) * 360; } let gemsImage = artInfoDiv.querySelector("img[src*='gems']"); if(gemsImage) { price += parseInt(gemsImage.nextSibling.textContent) * 360; } let artPropDivs = artInfoDiv.querySelectorAll("div.s_art_prop_amount"); let artStrengthDiv; for(artStrengthDiv of artPropDivs) { if(artStrengthDiv.previousSibling.textContent == "Прочность: ") { strength = parseInt(artStrengthDiv.innerText); battlePrice = round00(price / strength); break; } } if(price == 0) { let art_infoRef = artInfoDiv.querySelector("a[href*='art_info.php']"); // Попробуем взять рыночную цену акционных артефактов let artId = art_infoRef.href.split("?")[1].split("=")[1]; if(artId in StockArtifactStrength) { let priceData = GM_getValue("StockArtifactLastMarketMinPrice_" + artId, ""); if(priceData && priceData != "") { price = parseFloat(priceData.split("_")[0]); battlePrice = parseFloat(priceData.split("_")[1]); } } } if(price > 0) { addElement("label", artPropDiv, { innerText: ` = ${price} (${battlePrice})` }); } } } function main() { if(location.pathname=='/auction.php') { extendLotsTable(); } if(location.pathname=='/art_info.php') { let hrefParametersData = location.href.split("?")[1]; let hrefParameters = hrefParametersData.split("&"); let artId = hrefParameters[0].split("=")[1]; let artUid; if(hrefParameters.length > 1) { artUid = hrefParameters[1].split("=")[1]; let s_art_insideDiv = document.querySelector("div.s_art_inside"); AppendLotInfo(s_art_insideDiv, artUid); } } if(location.pathname=='/mod_workbench.php') { let formElement = document.querySelector("form[name='fmain']"); if(formElement) { let idInput = formElement.querySelector("input[name='art_id2']"); if(idInput && idInput.value != "") { AppendLotInfo(formElement, idInput.value); } } } if(location.pathname=='/inventory.php' && ShowAfterRepairBattleCostInInventory) { AddAfterRepairCombatCostToInventory(); } if(location.pathname=='/shop.php') { addShopArtPriceAndBattleCost(); } } // Start if(!this.GM_getValue) { this.GM_getValue = function(key, def) { return localStorage[key] || def; }; this.GM_setValue = function(key, value) { localStorage[key] = value; }; this.GM_deleteValue = function(key) { return delete localStorage[key]; }; } if(!this.GM_addStyle) { this.GM_addStyle = function(key) { let style = document.createElement('style'); style.textContent = key; document.querySelector("head").appendChild(style); } } if(!this.GM_listValues) { this.GM_listValues = function() { let values = []; for (let i = 0; i < localStorage.length; i++) { values.push(localStorage.key(i)); } return values; } } // let rr = artefacts.reduce((t, a) => t + `, "${a.id}": ${a.repair_cost}`, "");// var el = document.createElement("TEXTAREA");// document.body.appendChild(el);// el.innerText = rr; //alert(Object.keys(ArtifactRepairCost).length) main();