Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog/CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
2026-05-28: New W7 sections: Dancing Coral, Coral Kid. Gstack autogenerated final tier.
2026-05-21: New W7 sections: Zenith Market and Research
2026-04-28: Updates from patch v2.503
2026-04-16: Updates from patch v2.502
Expand Down
21 changes: 10 additions & 11 deletions mysite/consts/consts_general.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from consts.idleon.lava_func import lava_func
from utils.logging import get_consts_logger
from utils.number_formatting import parse_number
from utils.text_formatting import getItemDisplayName

logger = get_consts_logger(__name__)

Expand Down Expand Up @@ -325,16 +326,16 @@
'FoodHealth10', 'FoodPotOr3', 'FoodPotYe2', 'Leaf3', # W3
'FoodPotMana4', 'Leaf4', # W4
'FoodPotYe5', 'Leaf5', # W5
'Leaf6', # W6
'Leaf6', 'StoneZ4', # W6
'EquipmentStatues7', 'EquipmentStatues3', 'EquipmentStatues2', 'EquipmentStatues4', 'EquipmentStatues14', # 'W1' statues, some in W1-W3
'EquipmentStatues1', 'EquipmentStatues5', # Plausible but time consuming
'EquipmentStatues1', 'EquipmentStatues5',
'EquipmentStatues10', 'EquipmentStatues12', 'EquipmentStatues13', 'EquipmentStatues8', 'EquipmentStatues11', # W2 statues are all slower than Power/Health
'rtt0', 'StoneZ1', 'StoneT1', 'StoneW1', 'StoneA1', 'StoneHelm1', #W1 Slow drops = Town TP + Stones
'StoneT2', 'StoneZ2', 'StoneW2', 'StoneA2', # W2 upgrade stones and Mystery2
'PureWater', 'EquipmentStatues18', #W3 Slow drops = Distilled Water + EhExPee Statue
'EquipmentStatues20', 'EquipmentStatues21', 'EquipmentStatues22', # W4 Statues
'EquipmentStatues23', 'EquipmentStatues24', 'EquipmentStatues25', 'FoodG9', 'StoneZ3', #W5 Slow drops = Golden W5 Sammy + Statues
# 'FoodG11', 'FoodG12' #W6 gold foods
'FoodG11', 'FoodG12' #W6 gold foods
],
'Printable Skilling Resources': [
'OakTree', 'BirchTree', 'JungleTree', 'ForestTree', 'ToiletTree', 'PalmTree', 'StumpTree', 'SaharanFoal', # Logs1
Expand Down Expand Up @@ -388,8 +389,8 @@
'EquipmentStatues9', 'EquipmentStatues15', 'EquipmentStatues16', 'EquipmentStatues17', 'EquipmentStatues19',
'EquipmentStatues26', 'EquipmentStatues27', 'EquipmentStatues28', 'EquipmentStatues29', 'EquipmentStatues30',
'EquipmentStatues31', 'EquipmentStatues32',
'Cutter', 'OilBarrel2', 'Sewers1b', 'TreeInterior1b', 'FoodPotRe2', 'FoodPotRe1', # W1 Rare Drops
'DesertC2b', 'DesertA3b', 'DesertA1b', 'MidnightCookie', # W2 Rare Drops
'Cutter', 'OilBarrel2', 'Sewers1b', 'TreeInterior1b', 'FoodPotRe2', 'FoodPotRe1', 'Key1', # W1 Rare Drops
'DesertC2b', 'DesertA3b', 'DesertA1b', 'MidnightCookie', 'Key2', # W2 Rare Drops
'Quest78', 'SnowC4a', 'SnowB2a', 'SnowA2a', 'FoodHealth9', 'FoodPotMana3', 'FoodPotGr3', 'Key3', # W3 Rare Drops
# W4
'GalaxyC1b', 'GalaxyA2b', 'Key4', 'PetEgg',
Expand All @@ -398,16 +399,16 @@
# W5
'LavaA1b', 'LavaA5b', 'LavaB3b', 'Key5', 'Line4', 'Weight9',
'EfauntDrop1', 'EfauntDrop2', 'Chiz0', 'Chiz1', 'TrollPart', 'KrukPart2', # Basic Efaunt material
# 'Key2', # Efaunt key
'SpiA2b', 'SpiB2b', 'Quest95', #W6 Rare Drops
'FoodG1', 'FoodG2', 'FoodG3', 'FoodG4', 'FoodG5', 'FoodG6', 'FoodG7', 'FoodG8', 'FoodG10', # Gold Foods
'FoodG11', 'FoodG12', 'FoodG13', 'FoodG14', 'FoodG15', 'ButterBar', # Gold Foods
# World 7 part 1
'Coral1', 'Coral2', 'Coral3', 'w7A6',
# World 7 part 2
'Coral4', 'w7B1b',
'Coral4', 'w7B1b', 'Quest110'
],
'Boss Drop': [
'ExpBalloon1',
'KrukPart', 'StoneA6', 'StoneW7', 'StoneT6', 'StoneHelm7'
],
'Cheater': [
Expand All @@ -426,7 +427,7 @@
'FoodEvent1', 'FoodEvent2', 'FoodEvent3', 'FoodEvent4', 'FoodEvent5', 'FoodEvent6', 'FoodEvent7', 'FoodEvent8', # Event Foods
'Pearl1', 'Pearl2', 'Pearl3', 'Pearl4', 'Pearl5', 'Pearl6', # Skilling Speed Pearls, EXP pearls
'Line1', 'Line2', 'Line5', 'Line6', 'Line7', 'Line9', 'Line10', 'Line11', 'Line14', # Fishing Lines
'ExpBalloon1', 'ExpBalloon2', 'ExpBalloon3', # Experience Balloons
'ExpBalloon2', 'ExpBalloon3', # Experience Balloons
'Timecandy1', 'Timecandy2', 'Timecandy3', 'Timecandy4', 'Timecandy5', 'Timecandy6', 'Timecandy7', 'Timecandy8', 'Timecandy9', # Time Candies
'Whetstone', 'Quest72', 'Quest73', 'Quest76', 'Quest77', # Other Time Skips
'Quest70', 'Quest71', 'Quest75', 'Gfoodcoupon', 'ItemsCoupon1', 'ItemsCoupon2', # Loot Bags
Expand All @@ -450,9 +451,7 @@
gstack_rated_not_expected = [item for item in gstacks_rated_items if item not in gstackable_codenames_expected]
if len(gstack_rated_not_expected) > 0:
logger.warning(f"{len(gstack_rated_not_expected)} Rated but not Expected Greenstacks found: {gstack_rated_not_expected}")
gstack_expected_not_rated = [item for item in gstackable_codenames_expected if item not in gstacks_rated_items]
if len(gstack_expected_not_rated) > 0:
logger.warning(f"{len(gstack_expected_not_rated)} Expected but not Rated Greenstacks found: {gstack_expected_not_rated}")
gstack_expected_not_rated = {item:getItemDisplayName(item) for item in gstackable_codenames_expected if item not in gstacks_rated_items}
gstack_unique_expected = set()
gstack_duplicate_expected = set()
for item_name in gstackable_codenames_expected:
Expand Down
16 changes: 8 additions & 8 deletions mysite/consts/consts_item_data.py

Large diffs are not rendered by default.

73 changes: 71 additions & 2 deletions mysite/consts/generated/raw_item_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -27033,7 +27033,7 @@
"Code (Type)": "dQuest",
"Type": "USABLE",
"Level Required (Craft)": 15,
"Description": "Hold down to instantly gain 2 Hours of all Cavern progress and Villager exp gain!",
"Description": "Hold down to instantly gain 2 Hours of all Cavern progress and Villager exp gain! YOU CAN ONLY USE 12 PER DAY! This is because new caverns came out recently.",
"Code (Name)": "Quest90"
},
"Quest91": {
Expand Down Expand Up @@ -37232,6 +37232,75 @@
"Upgrade Slots Left": 5,
"Code (Name)": "EquipmentHats135"
},
"EquipmentHats136": {
"Name": "Bronze Tournament Spike Hat",
"Sell Price": 1,
"Code (Type)": "aHelmetMTX",
"Type": "PREMIUM_HELMET",
"Level Required (Craft)": 69420,
"Level Required (Equip)": 1,
"Class": "ALL",
"Speed": 0,
"Reach": 0,
"Weapon Power": 0,
"STR": 0,
"AGI": 0,
"WIS": 0,
"LUK": 1,
"Defence": 0,
"Misc 1 (Text)": "0",
"Misc 1 (Value)": 0,
"Misc 2 (Text)": "0",
"Misc 2 (Value)": 0,
"Upgrade Slots Left": 5,
"Code (Name)": "EquipmentHats136"
},
"EquipmentHats137": {
"Name": "Silver Tournament Spike Hat",
"Sell Price": 1,
"Code (Type)": "aHelmetMTX",
"Type": "PREMIUM_HELMET",
"Level Required (Craft)": 69420,
"Level Required (Equip)": 1,
"Class": "ALL",
"Speed": 0,
"Reach": 0,
"Weapon Power": 0,
"STR": 0,
"AGI": 0,
"WIS": 0,
"LUK": 1,
"Defence": 0,
"Misc 1 (Text)": "0",
"Misc 1 (Value)": 0,
"Misc 2 (Text)": "0",
"Misc 2 (Value)": 0,
"Upgrade Slots Left": 5,
"Code (Name)": "EquipmentHats137"
},
"EquipmentHats138": {
"Name": "Gold Tournament Spike Hat",
"Sell Price": 1,
"Code (Type)": "aHelmetMTX",
"Type": "PREMIUM_HELMET",
"Level Required (Craft)": 69420,
"Level Required (Equip)": 1,
"Class": "ALL",
"Speed": 0,
"Reach": 0,
"Weapon Power": 0,
"STR": 0,
"AGI": 0,
"WIS": 0,
"LUK": 1,
"Defence": 0,
"Misc 1 (Text)": "0",
"Misc 1 (Value)": 0,
"Misc 2 (Text)": "0",
"Misc 2 (Value)": 0,
"Upgrade Slots Left": 5,
"Code (Name)": "EquipmentHats138"
},
"CardsA0": {
"Name": "CardsA0",
"Sell Price": 1,
Expand Down Expand Up @@ -39734,5 +39803,5 @@
"Description": "slimeB",
"Code (Name)": "CardsZ26"
},
"_hash": "dbe8a4fca3349eaaef065570aa15fe225b4ab451b8e48a6f80301164bd5d3f33"
"_hash": "db53dc8ad5d0dab558dbb4ce2c60cae324ae1fdde06465a88fef338ec4c03b3e"
}
2 changes: 2 additions & 0 deletions mysite/consts/idleon/w3/construction.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Last updated in v2.505 May 20
ShrineInfo = [["Woodular_Shrine","Boosts_Total_Damage_of_players_on_this_map_by_+{%._@_AFK_Time_to_next_Lv:_@_}","12","3","0",],["Isaccian_Shrine","Boosts_Max_HP_and_DEF_of_players_on_this_map_by_+{%._@_AFK_Time_to_next_Lv:_@_}","12","3","0",],["Crystal_Shrine","Boosts_the_Lv_Up_Rate_of_all_Shrines_on_this_map_by_+{%._@_AFK_Time_to_next_Lv:_@_}","20","4","0",],["Pantheon_Shrine","Boosts_Carry_Capacity_of_players_on_this_map_by_+{%._@_AFK_Time_to_next_Lv:_@_}","10","2","0",],["Clover_Shrine","Boosts_Drop_Rate_of_players_on_this_map_by_+{%._@_AFK_Time_to_next_Lv:_@_}","15","3","0",],["Summereading_Shrine","Boosts_ALL_Exp_Gain_of_players_on_this_map_by_+{%._@_AFK_Time_to_next_Lv:_@_}","6","1","0",],["Crescent_Shrine","Boosts_Crystal_and_Giant_Spawn_chance_on_this_map_by_+{%._@_AFK_Time_to_next_Lv:_@_}","50","7.5","0",],["Undead_Shrine","Boosts_Respawn_Rate_of_monsters_on_this_map_by_+{%._@_AFK_Time_to_next_Lv:_@_}","5","1","0",],["Primordial_Shrine","Boosts_AFK_Gain_Rate_on_this_map_by_+{%._@_AFK_Time_to_next_Lv:_@_}","1","0.1","0",],]
34 changes: 34 additions & 0 deletions mysite/consts/idleon/w7/coral_kid.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from typing import TypedDict, Callable
from consts.idleon.w7.spelunk import Spelunky

coral_kid_description_templates = [desc.replace("_", " ").replace(" @ ", " ") for desc in Spelunky[25]]

# "this._GenINFO[118] =" in source. Last updates in v2.505 May 25
coral_kid_upgrades_divinity_requirements = [0, 600, 900, 1250, 1700, 2200]


# derived from `"CoralKidUpgBonus" == "` in source. Last updated in v2.505 May 25
class CoralKidUpgradeBonusFormulaInput(TypedDict):
level: int
god_rank: int
total_divinity_level: int
coral_reef_upgrade_count: int


coral_kid_upgrades_bonus_base_formulas: list[Callable[[CoralKidUpgradeBonusFormulaInput], int | float]] = [
lambda data: 10 * data["level"],
lambda data: 2 * data["level"],
lambda data: 20 * data["level"] / (25 + data["level"]),
lambda data: -1,
lambda data: 2 * data["level"],
lambda data: 100 * data["level"] / (40 + data["level"])
]

coral_kid_upgrades_bonus_final_formulas: list[Callable[[CoralKidUpgradeBonusFormulaInput], int | float]] = [
coral_kid_upgrades_bonus_base_formulas[0],
coral_kid_upgrades_bonus_base_formulas[1],
lambda data: coral_kid_upgrades_bonus_base_formulas[2](data) * data["god_rank"],
lambda data: -1,
lambda data: coral_kid_upgrades_bonus_base_formulas[4](data) * data["coral_reef_upgrade_count"],
coral_kid_upgrades_bonus_base_formulas[5],
]
18 changes: 18 additions & 0 deletions mysite/consts/idleon/w7/dancing_coral.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from consts.idleon.w3.construction import ShrineInfo
from consts.idleon.w7.spelunk import Spelunky
from utils.number_formatting import parse_number

dancing_coral_base_costs = Spelunky[22]
dancing_coral_description_templates = Spelunky[23]
dancing_coral_bonus_base_values = Spelunky[24]

dancing_coral_bonus_data = []
for index, (base_cost, description_template, base_value) in enumerate(zip(dancing_coral_base_costs, dancing_coral_description_templates, dancing_coral_bonus_base_values)):
if "who_knows" in description_template:
continue
dancing_coral_bonus_data.append({
"Base Cost": parse_number(base_cost),
"Description Template": description_template.replace("_", " "),
"Base Value": parse_number(base_value),
"Target Shrine Name": ShrineInfo[index][0].replace("_", " ")
})
17 changes: 13 additions & 4 deletions mysite/consts/manage_consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# instead of once per profile/data submit.

from consts import consts_w2, progression_tiers
from consts.consts_general import gstack_unique_expected, cardset_names, max_card_stars
from consts.consts_general import gstack_unique_expected, cardset_names, max_card_stars, greenstack_item_difficulty_groups, gstack_expected_not_rated
from consts.consts_item_data import ITEM_DATA
from consts.w1.stamps import unavailable_stamps_list, stamp_maxes
from consts.consts_w2 import max_maxable_vials
Expand All @@ -20,15 +20,24 @@ def finalize_consts():
finalize_w2_vials()

def finalize_general_greenstacks():
#Update consts_general.greenstack_item_difficulty_groups with a final group with all currently unclassified items
try:
assert greenstack_progressionTiers[5]['Required Stacks'] == len(gstack_unique_expected)
next_tier = 1 + max(greenstack_item_difficulty_groups.keys())
greenstack_item_difficulty_groups[next_tier] = {"Needing to be properly tiered": list(gstack_expected_not_rated.keys())}
logger.debug(f"Successfully created additional GStack tier containing {len(gstack_expected_not_rated)} items: {greenstack_item_difficulty_groups[next_tier]}")
except Exception as e:
logger.exception(f"Failed to construct final GStacks tier")

#Log error if the GStack item counts are out of sync between dict and progressionTier
try:
assert greenstack_progressionTiers[max(greenstack_progressionTiers.keys())]['Required Stacks'] == len(gstack_unique_expected)
except AssertionError:
logger.error(
f"Total number of Expected GStacks not in sync between "
f"tier {greenstack_progressionTiers[5]['Required Stacks']} and "
f"tier {greenstack_progressionTiers[max(greenstack_progressionTiers.keys())]['Required Stacks']} and "
f"list {len(gstack_unique_expected)}"
)
greenstack_progressionTiers[5]['Required Stacks'] = max(greenstack_progressionTiers[5]['Required Stacks'], len(gstack_unique_expected))
greenstack_progressionTiers[max(greenstack_progressionTiers.keys())]['Required Stacks'] = max(greenstack_progressionTiers[max(greenstack_progressionTiers.keys())]['Required Stacks'], len(gstack_unique_expected))

def finalize_general_cards():
try:
Expand Down
4 changes: 3 additions & 1 deletion mysite/consts/progression_tiers.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,9 @@
2: {'Dream Number': 12, 'Required Stacks': 75},
3: {'Dream Number': 29, 'Required Stacks': 200},
4: {'Required Stacks': 250},
5: {'Required Stacks': 320}
5: {'Required Stacks': 300},
6: {'Required Stacks': 350},
7: {'Required Stacks': 400}
}
achievements_progressionTiers = {
0: {},
Expand Down
2 changes: 1 addition & 1 deletion mysite/consts/w7/clam_work.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
"coral",
"coral-0",
"gallery",
"summoning-class-exp",
"ballot-15",
]
2 changes: 1 addition & 1 deletion mysite/general/greenstacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ def getGStackAdviceSections():

#Equinox Dream Review
overall_SectionTier = 0
optional_tiers = 2
optional_tiers = 4
true_max = max(greenstack_progressionTiers.keys(), default=0)
max_tier = true_max - optional_tiers
dream_advice = {}
Expand Down
2 changes: 2 additions & 0 deletions mysite/models/account_calcs.py
Original file line number Diff line number Diff line change
Expand Up @@ -2225,6 +2225,8 @@ def _calculate_w7(account):
account.gallery.calculate_bonuses(account)
account.zenith_market.calculate_bonuses()
account.research.calculate_bonuses()
account.dancing_coral.calculate_bonuses()
account.coral_kid.calculate_bonuses()


def _calculate_w7_coral_reef(account):
Expand Down
7 changes: 5 additions & 2 deletions mysite/models/advice/generators/general.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,14 @@ def get_upgrade_vault_advice(upgrade_name: str, link_to_section: bool = True, ad
)


def get_companion_advice(companion_name: str) -> tuple[int | float, Advice]:
def get_companion_advice(companion_name: str, value_is_multi: bool = False) -> tuple[int | float, Advice]:
companion_data_missing = not session_data.account.companions['Companion Data Present']
missing_companion_data_txt = '<br>Note: Could be inaccurate. Companion data not found!' if companion_data_missing else ''
companion = companions_data[companion_name]
return companion['Value'] * has_companion(companion_name), Advice(
companion_value = companion['Value'] * has_companion(companion_name)
if companion_value == 0 and value_is_multi:
companion_value = 1
return companion_value , Advice(
label=f"Companions - {companion_name}:"
f"<br>{companion['Description']}"
f"{missing_companion_data_txt}",
Expand Down
4 changes: 4 additions & 0 deletions mysite/models/general/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
from models.w6.emperor import Emperor
from models.w6.beanstalk import Beanstalk
from models.w6.sneaking import Sneaking
from models.w7.coral_kid import CoralKid
from models.w7.dancing_coral import DancingCoral
from models.w7.research import Research
from models.w7.spelunk import Spelunk
from models.w7.advice_fish import AdviceFish
Expand Down Expand Up @@ -103,6 +105,8 @@ def __init__(self, json_data, source_string: InputType):
self.gallery = Gallery(self.raw_data)
self.zenith_market = ZenithMarket(self.raw_data)
self.research = Research(self.raw_data)
self.dancing_coral = DancingCoral(self.raw_data)
self.coral_kid = CoralKid(self.raw_data)

def add_alert_list(
self, group_name: str, advice_list: list[Advice | None] | set[Advice | None]
Expand Down
Loading
Loading