diff --git a/assets/item_properties/15_enhanced_damage.png b/assets/item_properties/15_enhanced_damage.png new file mode 100644 index 0000000..ce7df36 Binary files /dev/null and b/assets/item_properties/15_enhanced_damage.png differ diff --git a/assets/item_properties/15_enhanced_defense.png b/assets/item_properties/15_enhanced_defense.png new file mode 100644 index 0000000..88bd7a7 Binary files /dev/null and b/assets/item_properties/15_enhanced_defense.png differ diff --git a/assets/item_properties/15_fire_absorb.png b/assets/item_properties/15_fire_absorb.png new file mode 100644 index 0000000..80e10d7 Binary files /dev/null and b/assets/item_properties/15_fire_absorb.png differ diff --git a/assets/item_properties/15_increased_attack_speed.png b/assets/item_properties/15_increased_attack_speed.png new file mode 100644 index 0000000..35ad53e Binary files /dev/null and b/assets/item_properties/15_increased_attack_speed.png differ diff --git a/assets/item_properties/1_all_skills.png b/assets/item_properties/1_all_skills.png new file mode 100644 index 0000000..d47d48a Binary files /dev/null and b/assets/item_properties/1_all_skills.png differ diff --git a/assets/item_properties/20_attack_rating.png b/assets/item_properties/20_attack_rating.png new file mode 100644 index 0000000..0b124f7 Binary files /dev/null and b/assets/item_properties/20_attack_rating.png differ diff --git a/assets/item_properties/20_faster_cast_rate.png b/assets/item_properties/20_faster_cast_rate.png new file mode 100644 index 0000000..efa7c2e Binary files /dev/null and b/assets/item_properties/20_faster_cast_rate.png differ diff --git a/assets/item_properties/20_increased_attack_speed.png b/assets/item_properties/20_increased_attack_speed.png new file mode 100644 index 0000000..249d798 Binary files /dev/null and b/assets/item_properties/20_increased_attack_speed.png differ diff --git a/assets/item_properties/20_life.png b/assets/item_properties/20_life.png new file mode 100644 index 0000000..c428b1f Binary files /dev/null and b/assets/item_properties/20_life.png differ diff --git a/assets/item_properties/2_Druid_skills.png b/assets/item_properties/2_Druid_skills.png new file mode 100644 index 0000000..1d9b887 Binary files /dev/null and b/assets/item_properties/2_Druid_skills.png differ diff --git a/assets/item_properties/2_all_skills.png b/assets/item_properties/2_all_skills.png new file mode 100644 index 0000000..8bcf6a2 Binary files /dev/null and b/assets/item_properties/2_all_skills.png differ diff --git a/assets/item_properties/2_amazon_skills.png b/assets/item_properties/2_amazon_skills.png new file mode 100644 index 0000000..bcf5f81 Binary files /dev/null and b/assets/item_properties/2_amazon_skills.png differ diff --git a/assets/item_properties/2_assasin_skills.png b/assets/item_properties/2_assasin_skills.png new file mode 100644 index 0000000..6c6f0be Binary files /dev/null and b/assets/item_properties/2_assasin_skills.png differ diff --git a/assets/item_properties/2_barbarian_skills.png b/assets/item_properties/2_barbarian_skills.png new file mode 100644 index 0000000..e33c8ee Binary files /dev/null and b/assets/item_properties/2_barbarian_skills.png differ diff --git a/assets/item_properties/2_javalin_spears.png b/assets/item_properties/2_javalin_spears.png new file mode 100644 index 0000000..cac0c78 Binary files /dev/null and b/assets/item_properties/2_javalin_spears.png differ diff --git a/assets/item_properties/2_necromancer_skills.png b/assets/item_properties/2_necromancer_skills.png new file mode 100644 index 0000000..076c7c3 Binary files /dev/null and b/assets/item_properties/2_necromancer_skills.png differ diff --git a/assets/item_properties/2_paladin_skills.png b/assets/item_properties/2_paladin_skills.png new file mode 100644 index 0000000..1062656 Binary files /dev/null and b/assets/item_properties/2_paladin_skills.png differ diff --git a/assets/item_properties/2_sorceress_skills.png b/assets/item_properties/2_sorceress_skills.png new file mode 100644 index 0000000..2268d50 Binary files /dev/null and b/assets/item_properties/2_sorceress_skills.png differ diff --git a/assets/item_properties/30_faster_run_walk.png b/assets/item_properties/30_faster_run_walk.png new file mode 100644 index 0000000..1c5f8a8 Binary files /dev/null and b/assets/item_properties/30_faster_run_walk.png differ diff --git a/assets/item_properties/3_Elemental_skills.png b/assets/item_properties/3_Elemental_skills.png new file mode 100644 index 0000000..35c5b0b Binary files /dev/null and b/assets/item_properties/3_Elemental_skills.png differ diff --git a/assets/item_properties/3_cold_skills.png b/assets/item_properties/3_cold_skills.png new file mode 100644 index 0000000..13ac608 Binary files /dev/null and b/assets/item_properties/3_cold_skills.png differ diff --git a/assets/item_properties/3_fire_skills.png b/assets/item_properties/3_fire_skills.png new file mode 100644 index 0000000..ed7d503 Binary files /dev/null and b/assets/item_properties/3_fire_skills.png differ diff --git a/assets/item_properties/3_lightning_skills.png b/assets/item_properties/3_lightning_skills.png new file mode 100644 index 0000000..e5b46f1 Binary files /dev/null and b/assets/item_properties/3_lightning_skills.png differ diff --git a/assets/item_properties/3_maximum_damage.png b/assets/item_properties/3_maximum_damage.png new file mode 100644 index 0000000..a57dca0 Binary files /dev/null and b/assets/item_properties/3_maximum_damage.png differ diff --git a/assets/item_properties/3_pcombat.png b/assets/item_properties/3_pcombat.png new file mode 100644 index 0000000..8603dba Binary files /dev/null and b/assets/item_properties/3_pcombat.png differ diff --git a/assets/item_properties/3_percent.png b/assets/item_properties/3_percent.png new file mode 100644 index 0000000..395ee5d Binary files /dev/null and b/assets/item_properties/3_percent.png differ diff --git a/assets/item_properties/3_sorceress_skills.png b/assets/item_properties/3_sorceress_skills.png new file mode 100644 index 0000000..be2e6b1 Binary files /dev/null and b/assets/item_properties/3_sorceress_skills.png differ diff --git a/assets/item_properties/40_all_resist.png b/assets/item_properties/40_all_resist.png new file mode 100644 index 0000000..7f899d1 Binary files /dev/null and b/assets/item_properties/40_all_resist.png differ diff --git a/assets/item_properties/45_all_resist.png b/assets/item_properties/45_all_resist.png new file mode 100644 index 0000000..835b260 Binary files /dev/null and b/assets/item_properties/45_all_resist.png differ diff --git a/assets/item_properties/4_percent.png b/assets/item_properties/4_percent.png new file mode 100644 index 0000000..6d2d3aa Binary files /dev/null and b/assets/item_properties/4_percent.png differ diff --git a/assets/item_properties/5_all_resist.png b/assets/item_properties/5_all_resist.png new file mode 100644 index 0000000..e81f2f5 Binary files /dev/null and b/assets/item_properties/5_all_resist.png differ diff --git a/assets/item_properties/7_magicfind.png b/assets/item_properties/7_magicfind.png new file mode 100644 index 0000000..4c90754 Binary files /dev/null and b/assets/item_properties/7_magicfind.png differ diff --git a/assets/item_properties/Amazonskiller.png b/assets/item_properties/Amazonskiller.png new file mode 100644 index 0000000..67358f2 Binary files /dev/null and b/assets/item_properties/Amazonskiller.png differ diff --git a/assets/item_properties/Assasinskiller.png b/assets/item_properties/Assasinskiller.png new file mode 100644 index 0000000..cd945bd Binary files /dev/null and b/assets/item_properties/Assasinskiller.png differ diff --git a/assets/item_properties/Barbarianskiller.png b/assets/item_properties/Barbarianskiller.png new file mode 100644 index 0000000..8f8775f Binary files /dev/null and b/assets/item_properties/Barbarianskiller.png differ diff --git a/assets/item_properties/Druidskiller.png b/assets/item_properties/Druidskiller.png new file mode 100644 index 0000000..6476f0f Binary files /dev/null and b/assets/item_properties/Druidskiller.png differ diff --git a/assets/item_properties/Mana.png b/assets/item_properties/Mana.png new file mode 100644 index 0000000..76dfcd3 Binary files /dev/null and b/assets/item_properties/Mana.png differ diff --git a/assets/item_properties/Necromancerskiller.png b/assets/item_properties/Necromancerskiller.png new file mode 100644 index 0000000..b4ae591 Binary files /dev/null and b/assets/item_properties/Necromancerskiller.png differ diff --git a/assets/item_properties/Paladinskiller.png b/assets/item_properties/Paladinskiller.png new file mode 100644 index 0000000..1fb493c Binary files /dev/null and b/assets/item_properties/Paladinskiller.png differ diff --git a/assets/item_properties/Sorceressskiller.png b/assets/item_properties/Sorceressskiller.png new file mode 100644 index 0000000..7f865a0 Binary files /dev/null and b/assets/item_properties/Sorceressskiller.png differ diff --git a/assets/item_properties/all_skills.png b/assets/item_properties/all_skills.png new file mode 100644 index 0000000..6fbab9f Binary files /dev/null and b/assets/item_properties/all_skills.png differ diff --git a/assets/item_properties/attack_rating.png b/assets/item_properties/attack_rating.png new file mode 100644 index 0000000..59c358f Binary files /dev/null and b/assets/item_properties/attack_rating.png differ diff --git a/assets/item_properties/cannot_be_frozen.png b/assets/item_properties/cannot_be_frozen.png new file mode 100644 index 0000000..2db4259 Binary files /dev/null and b/assets/item_properties/cannot_be_frozen.png differ diff --git a/assets/item_properties/cold_resist.png b/assets/item_properties/cold_resist.png new file mode 100644 index 0000000..ec5cbe7 Binary files /dev/null and b/assets/item_properties/cold_resist.png differ diff --git a/assets/item_properties/dexterity.png b/assets/item_properties/dexterity.png new file mode 100644 index 0000000..eff0d2a Binary files /dev/null and b/assets/item_properties/dexterity.png differ diff --git a/assets/item_properties/faster_cast_rate.png b/assets/item_properties/faster_cast_rate.png new file mode 100644 index 0000000..7973dc9 Binary files /dev/null and b/assets/item_properties/faster_cast_rate.png differ diff --git a/assets/item_properties/faster_run_walk.png b/assets/item_properties/faster_run_walk.png new file mode 100644 index 0000000..9dacd52 Binary files /dev/null and b/assets/item_properties/faster_run_walk.png differ diff --git a/assets/item_properties/fire_resist.png b/assets/item_properties/fire_resist.png new file mode 100644 index 0000000..dfb16a4 Binary files /dev/null and b/assets/item_properties/fire_resist.png differ diff --git a/assets/item_properties/increased_attack_speed.png b/assets/item_properties/increased_attack_speed.png new file mode 100644 index 0000000..bff980d Binary files /dev/null and b/assets/item_properties/increased_attack_speed.png differ diff --git a/assets/item_properties/javalin_spears.png b/assets/item_properties/javalin_spears.png new file mode 100644 index 0000000..7fe25d6 Binary files /dev/null and b/assets/item_properties/javalin_spears.png differ diff --git a/assets/item_properties/life.png b/assets/item_properties/life.png new file mode 100644 index 0000000..2e0225b Binary files /dev/null and b/assets/item_properties/life.png differ diff --git a/assets/item_properties/life_stolen.png b/assets/item_properties/life_stolen.png new file mode 100644 index 0000000..ff02424 Binary files /dev/null and b/assets/item_properties/life_stolen.png differ diff --git a/assets/item_properties/lightning_resist.png b/assets/item_properties/lightning_resist.png new file mode 100644 index 0000000..d770584 Binary files /dev/null and b/assets/item_properties/lightning_resist.png differ diff --git a/assets/item_properties/lightning_sentry.png b/assets/item_properties/lightning_sentry.png new file mode 100644 index 0000000..eab9f15 Binary files /dev/null and b/assets/item_properties/lightning_sentry.png differ diff --git a/assets/item_properties/magicfind.png b/assets/item_properties/magicfind.png new file mode 100644 index 0000000..34588f4 Binary files /dev/null and b/assets/item_properties/magicfind.png differ diff --git a/assets/item_properties/mana_stolen.png b/assets/item_properties/mana_stolen.png new file mode 100644 index 0000000..dd21669 Binary files /dev/null and b/assets/item_properties/mana_stolen.png differ diff --git a/assets/item_properties/maximum_damage.png b/assets/item_properties/maximum_damage.png new file mode 100644 index 0000000..4621f3d Binary files /dev/null and b/assets/item_properties/maximum_damage.png differ diff --git a/assets/item_properties/poisen_resist.png b/assets/item_properties/poisen_resist.png new file mode 100644 index 0000000..d8c1100 Binary files /dev/null and b/assets/item_properties/poisen_resist.png differ diff --git a/assets/item_properties/strenght.png b/assets/item_properties/strenght.png new file mode 100644 index 0000000..c6ea432 Binary files /dev/null and b/assets/item_properties/strenght.png differ diff --git a/assets/item_properties/traps.png b/assets/item_properties/traps.png new file mode 100644 index 0000000..74127c5 Binary files /dev/null and b/assets/item_properties/traps.png differ diff --git a/assets/item_properties/unidentified.png b/assets/item_properties/unidentified.png new file mode 100644 index 0000000..ab47df9 Binary files /dev/null and b/assets/item_properties/unidentified.png differ diff --git a/assets/templates/id_tome.png b/assets/templates/id_tome.png new file mode 100644 index 0000000..8e55bb3 Binary files /dev/null and b/assets/templates/id_tome.png differ diff --git a/assets/templates/id_tome_red.png b/assets/templates/id_tome_red.png new file mode 100644 index 0000000..2d35c65 Binary files /dev/null and b/assets/templates/id_tome_red.png differ diff --git a/config/params.ini b/config/params.ini index 988df62..c72e923 100644 --- a/config/params.ini +++ b/config/params.ini @@ -85,7 +85,7 @@ belt_hp_columns=1 belt_mp_columns=1 pre_buff_every_run=1 always_repair=0 -id_items=0 +id_items=1 open_chests=1 fill_shared_stash_first=0 diff --git a/config/pickit.ini b/config/pickit.ini index 04fdd47..60a6787 100644 --- a/config/pickit.ini +++ b/config/pickit.ini @@ -6,11 +6,9 @@ ; 2: item will be picked up and a message will be sent to you (if message endpoint is set e.g. discord hook) ; see images in assets/item_properties for current supported properties -; currently only supporting properties that exist prior to identification +; supports identified properties (id_items need to be set to 1 to support magic, rare, uniqs, and sets) ; default behavior of grouped properties (a, b) is "OR". You can use and(a, b) for "AND" boolean logic ; everything following item_name= is case insensitive -; nested logic is not supported; i.e. you can't use and(a, or(b, c)) -; magic/rare/set/uniq items do not show # of sockets prior to id but will show eth ; regarding ethereal items: ; if you want to keep ONLY ethereal, add ethereal after the first comma (not contained within parenthesis) like `item=1, ethereal` @@ -28,6 +26,25 @@ ; "gray_weapon_grand_matron_bow=1, and(3_bow_skills, enhanced_damage, socketed_4)" will pickup but stash ; only GMB that have 3+ bow skills AND enhanced damage modifier AND 4 sockets +;=============================================================================; +;<<<<<<<<<<<<<<<<<<<<<<<<<<<< Advanced Pickit >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; +;=============================================================================; +; since the advanced pickit PR you are now able to use nested filters for your include and/or exclude properties +; if you add an "OR" property like described above the nested part will be treated as "AND". +; if you add an "AND" property the nested part will be treated as "OR" +; therefore you are now able to keep items if they match one of the specified property lists +; for example you can keep magic smallcharms that have all resist, 7 mf or (3 maximum damage and attack_rating) + +;examples +; keeps small charms with resi, 7_mf or 3 max_AD and AR +; magic_small_charm=1, (all_resist, 7_magicfind, and(3_maximum_damage, attack_rating)) + +; keeps all Skiller or (Life, max_AD, Life) GC +; magic_grand_charm=1, (Amazonskiller, Assasinskiller, Barbarianskiller, Druidskiller, Necromancerskiller, Paladinskiller, Sorceressskiller, (Life, maximum_damage, attack_rating)) + +; keeps greater talons with (2 Assa Skills + 3 lightning sentry) or (+Traps skills and + lightning sentry) +; magic_greater_talons=1, ((2_assasin_skills, 3_lightning_sentry), (traps, lightning_sentry)) + [items] ;==================================================================; @@ -80,7 +97,7 @@ misc_sapphire=0 misc_skull=0 ;flawless gems -misc_flawless_amethyst=0 +misc_flawless_amethyst=1 misc_flawless_ruby=0 misc_flawless_diamond=0 misc_flawless_topaz=0 @@ -99,7 +116,7 @@ rune_4_nef=0 rune_5_eth=0 rune_6_ith=0 rune_7_tal=0 -rune_8_ral=0 +rune_8_ral=1 rune_9_ort=0 rune_10_thul=0 rune_11_amn=0 @@ -131,22 +148,22 @@ rune_33_zod=2 ;==================================================================; ;magic charms -magic_grand_charm=1 +magic_grand_charm=1, (Amazonskiller, Assasinskiller, Barbarianskiller, Druidskiller, Necromancerskiller, Paladinskiller, Sorceressskiller, (Life, maximum_damage, attack_rating)) magic_large_charm=0 -magic_small_charm=1 +magic_small_charm=1, (all_resist, 7_magicfind, 20_life, and(3_maximum_damage, attack_rating)) ;magic jewelry -magic_jewel=1 +magic_jewel=1, and(15_increased_attack_speed, enhanced_damage) magic_amulet=0 ;magic helmets -magic_circlet=0,, ethereal -magic_coronet=0,, ethereal -magic_diadem=0,, ethereal -magic_tiara=0,, ethereal +magic_circlet=1, ((faster_cast_rate, 2_amazon_skills), (faster_cast_rate, 2_assasin_skills), (faster_cast_rate, 2_barbarian_skills), (faster_cast_rate, 2_Druid_skills), (faster_cast_rate, 2_necromancer_skills), (faster_cast_rate, 2_paladin_skills), (faster_cast_rate, 2_sorceress_skills), (2_all_skills, faster_cast_rate), (3_pcombat, faster_cast_rate), (faster_run_walk, 2_amazon_skills), (faster_run_walk, 2_all_skills), (faster_run_walk, 2_assasin_skills), (faster_run_walk, 2_barbarian_skills), (faster_run_walk, 2_Druid_skills)), ethereal +magic_coronet=1, ((faster_cast_rate, 2_amazon_skills), (faster_cast_rate, 2_assasin_skills), (faster_cast_rate, 2_barbarian_skills), (faster_cast_rate, 2_Druid_skills), (faster_cast_rate, 2_necromancer_skills), (faster_cast_rate, 2_paladin_skills), (faster_cast_rate, 2_sorceress_skills), (2_all_skills, faster_cast_rate), (3_pcombat, faster_cast_rate), (faster_run_walk, 2_amazon_skills), (faster_run_walk, 2_all_skills), (faster_run_walk, 2_assasin_skills), (faster_run_walk, 2_barbarian_skills), (faster_run_walk, 2_Druid_skills)), ethereal +magic_diadem=1, ((faster_cast_rate, 2_amazon_skills), (faster_cast_rate, 2_assasin_skills), (faster_cast_rate, 2_barbarian_skills), (faster_cast_rate, 2_Druid_skills), (faster_cast_rate, 2_necromancer_skills), (faster_cast_rate, 2_paladin_skills), (faster_cast_rate, 2_sorceress_skills), (2_all_skills, faster_cast_rate), (3_pcombat, faster_cast_rate), (faster_run_walk, 2_amazon_skills), (faster_run_walk, 2_all_skills), (faster_run_walk, 2_assasin_skills), (faster_run_walk, 2_barbarian_skills), (faster_run_walk, 2_Druid_skills)), ethereal +magic_tiara=1, ((faster_cast_rate, 2_amazon_skills), (faster_cast_rate, 2_assasin_skills), (faster_cast_rate, 2_barbarian_skills), (faster_cast_rate, 2_Druid_skills), (faster_cast_rate, 2_necromancer_skills), (faster_cast_rate, 2_paladin_skills), (faster_cast_rate, 2_sorceress_skills), (2_all_skills, faster_cast_rate), (3_pcombat, faster_cast_rate), (faster_run_walk, 2_amazon_skills), (faster_run_walk, 2_all_skills), (faster_run_walk, 2_assasin_skills), (faster_run_walk, 2_barbarian_skills), (faster_run_walk, 2_Druid_skills)), ethereal ;magic shields -magic_monarch=0,, ethereal +magic_monarch=1, socketed_4, ethereal ;magic weapons magic_gg_club=1 @@ -178,9 +195,9 @@ magic_unearthed_wand=0 ;magic assassin claws magic_greater_claws=0 -magic_greater_talons=0 +magic_greater_talons=1, ((2_assasin_skills, 3_lightning_sentry), (traps, lightning_sentry)) magic_feral_claws=0 -magic_runic_talons=0 +magic_runic_talons=1, ((2_assasin_skills, 3_lightning_sentry), (traps, lightning_sentry)) magic_suwayyah=0 ;magic javelins @@ -208,15 +225,15 @@ magic_ogre_gauntlets=0 ;==================================================================; ;rare jewelry -rare_amulet=1 +rare_amulet=1, (2_amazon_skills, 2_all_skills, 2_assasin_skills, 2_barbarian_skills, 2_Druid_skills, 2_necromancer_skills, 2_paladin_skills, 2_sorceress_skills) rare_jewel=1 rare_ring=1 ;rare circlets -rare_circlet=1 -rare_coronet=1 -rare_diadem=1 -rare_tiara=1 +rare_circlet=1, ((faster_cast_rate, 2_amazon_skills), (faster_cast_rate, 2_assasin_skills), (faster_cast_rate, 2_barbarian_skills), (faster_cast_rate, 2_Druid_skills), (faster_cast_rate, 2_necromancer_skills), (faster_cast_rate, 2_paladin_skills), (faster_cast_rate, 2_sorceress_skills), (2_all_skills, faster_cast_rate), (faster_run_walk, 2_amazon_skills), (faster_run_walk, 2_all_skills), (faster_run_walk, 2_assasin_skills), (faster_run_walk, 2_barbarian_skills), (faster_run_walk, 2_Druid_skills)), ethereal +rare_coronet=1, ((faster_cast_rate, 2_amazon_skills), (faster_cast_rate, 2_assasin_skills), (faster_cast_rate, 2_barbarian_skills), (faster_cast_rate, 2_Druid_skills), (faster_cast_rate, 2_necromancer_skills), (faster_cast_rate, 2_paladin_skills), (faster_cast_rate, 2_sorceress_skills), (2_all_skills, faster_cast_rate), (faster_run_walk, 2_amazon_skills), (faster_run_walk, 2_all_skills), (faster_run_walk, 2_assasin_skills), (faster_run_walk, 2_barbarian_skills), (faster_run_walk, 2_Druid_skills)), ethereal +rare_diadem=1, ((faster_cast_rate, 2_amazon_skills), (faster_cast_rate, 2_assasin_skills), (faster_cast_rate, 2_barbarian_skills), (faster_cast_rate, 2_Druid_skills), (faster_cast_rate, 2_necromancer_skills), (faster_cast_rate, 2_paladin_skills), (faster_cast_rate, 2_sorceress_skills), (2_all_skills, faster_cast_rate), (faster_run_walk, 2_amazon_skills), (faster_run_walk, 2_all_skills), (faster_run_walk, 2_assasin_skills), (faster_run_walk, 2_barbarian_skills), (faster_run_walk, 2_Druid_skills)), ethereal +rare_tiara=1, ((faster_cast_rate, 2_amazon_skills), (faster_cast_rate, 2_assasin_skills), (faster_cast_rate, 2_barbarian_skills), (faster_cast_rate, 2_Druid_skills), (faster_cast_rate, 2_necromancer_skills), (faster_cast_rate, 2_paladin_skills), (faster_cast_rate, 2_sorceress_skills), (2_all_skills, faster_cast_rate), (faster_run_walk, 2_amazon_skills), (faster_run_walk, 2_all_skills), (faster_run_walk, 2_assasin_skills), (faster_run_walk, 2_barbarian_skills), (faster_run_walk, 2_Druid_skills)), ethereal ;rare helmets rare_bone_visage=0 @@ -241,13 +258,13 @@ rare_blade_talons=0 ;exceptional rare claws rare_greater_claws=0 -rare_greater_talons=0 +rare_greater_talons=1, 2_assasin_skills rare_hand_scythe=0 rare_scissors_quhab=0 ;elite rare claws rare_feral_claws=0 -rare_runic_talons=0 +rare_runic_talons=1, 2_assasin_skills rare_suwayyah=0 rare_wrist_sword=0 rare_war_fist=0 @@ -324,50 +341,50 @@ rare_colossus_girdle=0,, ethereal ;---------------------------------------; ;normal rare boots -rare_greaves=0,, ethereal -rare_boots=0,, ethereal -rare_chain_boots=0,, ethereal -rare_light_plated_boots=0,, ethereal -rare_heavy_boots=0,, ethereal +rare_greaves=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_chain_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_light_plated_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_heavy_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal ;exceptional rare boots -rare_war_boots=0,, ethereal -rare_battle_boots=0,, ethereal -rare_mesh_boots=0,, ethereal -rare_sharkskin_boots=0,, ethereal -rare_demonhide_boots=0,, ethereal +rare_war_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_battle_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_mesh_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_sharkskin_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_demonhide_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal ;elite rare boots -rare_myrmidon_greaves=0,, ethereal -rare_mirrored_boots=0,, ethereal -rare_boneweave_boots=0,, ethereal -rare_scarabshell_boots=0,, ethereal -rare_wyrmhide_boots=0,, ethereal +rare_myrmidon_greaves=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_mirrored_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_boneweave_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_scarabshell_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal +rare_wyrmhide_boots=1, and(lightning_resist, fire_resist, cold_resist), ethereal ;---------------------------------------; ;============= RARE GLOVES =============; ;---------------------------------------; ;normal rare gloves -rare_leather_gloves=0,, ethereal -rare_heavy_gloves=0,, ethereal -rare_chain_gloves=0,, ethereal -rare_light_gauntlets=0,, ethereal -rare_gauntlets=0,, ethereal +rare_leather_gloves=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_heavy_gloves=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_chain_gloves=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_light_gauntlets=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_gauntlets=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal ;exceptional rare gloves -rare_demonhide_gloves=0,, ethereal -rare_sharkskin_gloves=0,, ethereal -rare_heavy_bracers=0,, ethereal -rare_battle_gauntlets=0,, ethereal -rare_war_gauntlets=0,, ethereal +rare_demonhide_gloves=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_sharkskin_gloves=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_heavy_bracers=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_battle_gauntlets=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_war_gauntlets=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal ;elite rare gloves -rare_bramble_mitts=0,, ethereal -rare_vampirebone_gloves=0,, ethereal -rare_vambraces=0,, ethereal -rare_crusader_gauntlets=0,, ethereal -rare_ogre_gauntlets=0,, ethereal +rare_bramble_mitts=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_vampirebone_gloves=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_vambraces=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_crusader_gauntlets=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal +rare_ogre_gauntlets=1, and(20_increased_attack_speed, 2_javalin_spears), ethereal ;---------------------------------------; ;======= RARE BARBARIAN HELMETS ========; @@ -723,6 +740,7 @@ white_wrist_sword=1, (3_venom, 3_lightning_sentry) ;ethereal polearms gray_weapon_colossus_voulge=1, and(ethereal, socketed_4) +;gray_weapon_colossus_voulge=1,, ethereal gray_weapon_thresher=1, ethereal, (socketed_1, socketed_2, socketed_3) gray_weapon_giant_thresher=1, ethereal, (socketed_1, socketed_2, socketed_3) gray_weapon_cryptic_axe=1, ethereal, (socketed_1, socketed_2, socketed_3) @@ -795,7 +813,7 @@ gray_weapon_superior_grand_matron_bow=1, and(3_bow_skills, enhanced_damage, sock ;====== AMULETS / RINGS =======; ;------------------------------; -set_misc_amulets=2 +set_misc_amulets=2, 2_sorceress_skills set_ring=0 ;------------------------------; @@ -1038,8 +1056,8 @@ uniq_ravenlore=1,, ethereal ;------------------------------; uniq_misc_amulets=2 -uniq_misc_rings=2 -uniq_misc_rainbow_facet=2 +uniq_misc_rings=2, (1_all_skills, 15_fire_absorb, cannot_be_frozen, magicfind) +uniq_misc_rainbow_facet=2,, 3_percent uniq_gheeds_fortune=1 ;------------------------------; @@ -1112,7 +1130,7 @@ uniq_rune_master=1, ethereal ;------------------------------; uniq_weapon_death_fathom=2 -uniq_weapon_eschuta_temper=2 +uniq_weapon_eschuta_temper=2, 3_sorceress_skills uniq_weapon_the_oculus=1 ;------------------------------; diff --git a/src/config.py b/src/config.py index 80d9ad7..0141e77 100644 --- a/src/config.py +++ b/src/config.py @@ -69,26 +69,75 @@ class Config: @staticmethod def parse_item_config_string(key: str = None) -> ItemProps: + string = Config._select_val("items", key).upper() + return Config.string_to_item_prop (string) + + @staticmethod + def string_to_item_prop (string: str) -> ItemProps: item_props = ItemProps() - # split string by commas NOT contained within parentheses - item_string_as_list = re.split(r',\s*(?![^()]*\))', Config._select_val("items", key).upper()) - trim_strs=["AND(", "OR(", "(", ")", " "] - clean_string = [re.sub(r'|'.join(map(re.escape, trim_strs)), '', x).strip() for x in item_string_as_list] - item_props.pickit_type = int(clean_string[0]) - try: - item_props.include = clean_string[1].split(',') if clean_string[1] else None - item_props.include_type = "AND" if "AND" in item_string_as_list[1] else "OR" - except IndexError as error: - pass - except Exception as exception: - Logger.error(f"Item parsing error: {exception}") - try: - item_props.exclude = clean_string[2].split(',') if clean_string[2] else None - item_props.exclude_type = "AND" if "AND" in item_string_as_list[2] else "OR" - except IndexError as error: - pass - except Exception as exception: - Logger.error(f"Item parsing error: {exception}") + brk_on = 0 + brk_off = 0 + section = 0 + counter = 0 + start_section = 0 + start_item = 0 + include_list = [] + exclude_list = [] + for char in string: + new_section = False + counter+=1 + if char == "(": + brk_on +=1 + elif char == ")": + brk_off += 1 + if ((char == "," and brk_on==brk_off)): + new_section = True + if (counter == len (string)): + string_section = string [start_section:counter] + else: + string_section = string [start_section:counter-1] + if section == 0: + item_props.pickit_type = int (string_section) + section +=1 + start_section = counter + if ((char == "," and (brk_on==brk_off+1)) or new_section or counter == len (string)): + if new_section: + section -=1 + if start_item ==0: + start_item = start_section + if (counter == len (string)): + item = string [start_item:counter] + else: + item = string [start_item:counter-1] + if section == 0 and counter == len (string): + item_props.pickit_type = int (item) + pass + if section ==1: + include_list.append (item) + start_item = counter +1 + elif section ==2: + exclude_list.append (item) + start_item = counter +1 + if new_section: + section +=1 + if (len (include_list)>0 and (len (include_list[0]) >=6)): + if ("AND" in include_list[0][0: 6] and not ")" in include_list[0]): + item_props.include_type = "AND" + else: + item_props.include_type = "OR" + if (len (exclude_list)>0 and (len (exclude_list[0]) >=6)): + if ("AND" in exclude_list[0][0:6] and not ")" in include_list[0]): + item_props.exclude_type = "AND" + else: + item_props.exclude_type = "OR" + for i in range (len(include_list)): + include_list[i] = include_list[i].replace (" ","").replace ("OR(","").replace ("AND(", "").replace ("(", "").replace (")","") + include_list[i] = include_list[i].split (",") + for l in range (len (exclude_list)): + exclude_list[l] = exclude_list[l].replace (" ","").replace ("OR(","").replace ("AND(", "").replace ("(", "").replace (")","") + exclude_list[l] = exclude_list[l].split (",") + item_props.include = include_list + item_props.exclude = exclude_list return item_props @staticmethod @@ -296,7 +345,6 @@ class Config: "apply_pather_adjustment": bool(int(Config._select_val("scepters", "apply_pather_adjustment"))), } - if __name__ == "__main__": from copy import deepcopy config = Config() diff --git a/src/ui/ui_manager.py b/src/ui/ui_manager.py index f700372..11ee38d 100644 --- a/src/ui/ui_manager.py +++ b/src/ui/ui_manager.py @@ -272,6 +272,11 @@ class UiManager(): if ("potion" in x.name) or (self._config.items[x.name].pickit_type == 0): continue include_props = self._config.items[x.name].include exclude_props = self._config.items[x.name].exclude + #Disable include params for uniq, rare, magical if ident is disabled in params.ini + #if (not self._config.char["id_items"]) and ("uniq" in x.name or "magic" in x.name or "rare" in x.name or "set" in x.name): + if (not self._config.char["id_items"]) and any(item_type in x.name for item_type in ["uniq", "magic", "rare", "set"]): + include_props = False + exclude_props = False if not (include_props or exclude_props): if do_logging: Logger.debug(f"{x.name}: Stashing") @@ -283,19 +288,40 @@ class UiManager(): include = False found_props=[] for prop in include_props: - try: - template_match = self._template_finder.search(prop, img, threshold=0.95) - except: - Logger.error(f"{x.name}: can't find template file for required {prop}, ignore just in case") - template_match = lambda: None; template_match.valid = True - if template_match.valid: - if include_logic_type == "AND": - found_props.append(True) - else: - include = True + if len(prop)>1: + found_subprops=[] + for subprop in prop: + try: + template_match = self._template_finder.search(subprop, img, threshold=0.95) + except: + Logger.error(f"{x.name}: can't find template file for required {prop}, ignore just in case") + template_match = lambda: None; template_match.valid = True + if template_match.valid: + if include_logic_type == "OR": + found_subprops.append(True) + else: + found_props.append (True) + break + else: + found_subprops.append(False) + break + if (len(found_subprops) > 0 and all(found_subprops)): + include = True break else: - found_props.append(False) + try: + template_match = self._template_finder.search(prop, img, threshold=0.95) + except: + Logger.error(f"{x.name}: can't find template file for required {prop}, ignore just in case") + template_match = lambda: None; template_match.valid = True + if template_match.valid: + if include_logic_type == "AND": + found_props.append(True) + else: + include = True + break + else: + found_props.append(False) if include_logic_type == "AND" and len(found_props) > 0 and all(found_props): include = True if not include: diff --git a/test/config_test.py b/test/config_test.py new file mode 100644 index 0000000..f7a4695 --- /dev/null +++ b/test/config_test.py @@ -0,0 +1,35 @@ +import pytest +import os +import sys +sys.path.append (os.getcwd () + "/src") +from config import Config + +class TestConfig: + @pytest.mark.parametrize ("string, pickit_type, include, exclude, include_type", + [ + ("0",0, [], [], "OR"), ("1",1, [], [], "OR"), ("2",2, [], [], "OR"), + ("1, (AMAZONSKILLER, ASSASINSKILLER, BARBARIANSKILLER, DRUIDSKILLER, NECROMANCERSKILLER, PALADINSKILLER, SORCERESSSKILLER, (LIFE, 3_MAXIMUM_DAMAGE, ATTACK_RATING))", + 1, + [["AMAZONSKILLER"], ["ASSASINSKILLER"], ["BARBARIANSKILLER"], ["DRUIDSKILLER"], ["NECROMANCERSKILLER"], ["PALADINSKILLER"], ["SORCERESSSKILLER"], ["LIFE", "3_MAXIMUM_DAMAGE", "ATTACK_RATING"]], + [], + "OR" + ), + ( + "1, AND(15_INCREASED_ATTACK_SPEED, ENHANCED_DAMAGE)", 1, [["15_INCREASED_ATTACK_SPEED"], ["ENHANCED_DAMAGE"]], [],"AND"), + ("1, SOCKETED_4, ETHEREAL", 1, [["SOCKETED_4"]], [["ETHEREAL"]], "OR"), + ("1, 2_ASSASIN_SKILLS", 1, [["2_ASSASIN_SKILLS"]], [], "OR"), + ("1, ENHANCED_DEFENSE, ETHEREAL", 1, [["ENHANCED_DEFENSE"]], [["ETHEREAL"]], "OR"), + ("1, AND(LIGHTNING_RESIST, FIRE_RESIST, COLD_RESIST), ETHEREAL", 1, [["LIGHTNING_RESIST"], ["FIRE_RESIST"], ["COLD_RESIST"]], [["ETHEREAL"]], "AND"), + ("1, AND(ENHANCED_DEFENSE, SOCKETED), (SOCKETED_1, SOCKETED_2)", 1, [["ENHANCED_DEFENSE"], ["SOCKETED"]], [["SOCKETED_1"], ["SOCKETED_2"]],"AND") + ]) + def test_string_to_item_prop (self, string, pickit_type, include, exclude, include_type): + cfg = Config() + Itemprops = cfg.string_to_item_prop (string) + assert (Itemprops.pickit_type == pickit_type) + assert (Itemprops.include == include) + assert (Itemprops.exclude == exclude) + assert (Itemprops.include_type == include_type) + + def test_123 (self): + print (os.getcwd()) + print (sys.path) \ No newline at end of file