Files
achmad dc0223c504 feat: increase deck capacity from 30 to 1000
Since all cards now use 1 slot regardless of rarity, 30 slots
is too restrictive. Bumped to 1000 so there's effectively no limit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 05:54:44 +07:00

901 lines
29 KiB
Lua

local ____lualib = require("lualib_bundle")
local __TS__Number = ____lualib.__TS__Number
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local __TS__NumberIsFinite = ____lualib.__TS__NumberIsFinite
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArraySort = ____lualib.__TS__ArraySort
local ____exports = {}
local function cards1to13(self)
return {
{
id = 1,
quality = 4,
defaultCard = false,
inherent = true,
deck_slots = 3,
price_free = 20800,
max_copies = 1,
values = {vampirism_bonus = {7, 9, 11}, damage_multiplier = {0.5, 1.25, 2}, max_health_penalty_pct = {25, 20, 15}}
},
{
id = 2,
inherent = true,
deck_slots = 3,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {speed_bonus = {45, 60, 75}, speed_limit = {0, 1100, 1350}, pass_through_units = {0, 0, 1}, attacktime = {0, 0, 50}}
},
{
id = 3,
quality = 1,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {damage_pct = {2.5, 3.5, 4.5}}
},
{
id = 4,
quality = 2,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {card_bonus = {1, 2, 3}}
},
{
id = 5,
quality = 2,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {card_bonus_pct = {1.15, 1.35, 1.67}}
},
{
id = 6,
quality = 5,
defaultCard = false,
price_free = 83200,
max_copies = 1,
values = {card_show_count = {3}, min_card_choice = {4}, free_reroll_charges = {0, 2, 2}}
},
{
id = 7,
quality = 2,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {daynight_bonus_pct = {35, 40, 45}}
},
{
id = 8,
quality = 2,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {damage_bonus_health_decress = {2.5, 3.5, 4.5}, stack_health_threshold = {900, 1200, 1500}}
},
{
id = 9,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {greed_net_worth_per_stack = {100, 100, 100}, kill_gold_bonus_pct = {15, 20, 25}}
},
{
id = 10,
quality = 1,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {debuff_duration = {3.5, 4, 4.5}, incoming_damage_per_fired_stack_pct = {1, 1.35, 1.7}, max_incoming_damage_bonus_pct = {30, 45, 60}}
},
{
id = 11,
quality = 1,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {primary_attribute_bonus_per_level = {2, 3, 4}, universal_all_bonus_per_level = {1, 1.5, 2}}
},
{
id = 12,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {
scan_interval = {8, 6, 4.5},
scan_radius = {900, 1200, 1500},
mark_duration = {5, 7, 9},
bonus_damage_pct = {22, 30, 40},
on_kill_heal_pct = {6, 8, 10},
on_kill_mana = {35, 50, 70},
boss_penalty_pct = {50, 40, 30}
}
},
{
id = 13,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {fired_stacks_on_hit = {1, 2, 3}, explosion_chance_pct = {12, 18, 24}, explosion_radius = {175, 240, 300}, explosion_damage_per_stack = {3, 4.5, 6}}
},
{
id = 14,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {
proc_chance_pct = {18, 24, 30},
main_target_bonus_damage_pct = {25, 35, 45},
fired_stacks = {1, 2, 3},
ricochet_radius = {300, 420, 540},
ricochet_damage_pct = {60, 80, 100}
}
},
{
id = 15,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {base_crit_chance_pct = {15, 20, 25}, crit_multiplier_pct = {200, 240, 280}, crit_multiplier_bonus_pct_per_luck = {0.5, 1, 1.5}}
},
{
id = 16,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {max_stacks = {200, 260, 320}, spell_amp_per_stack_pct = {0.1, 0.15, 0.2}}
},
{
id = 17,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {min_health_pct_to_activate = {30}, health_cost_pct = {5}, curse_damage_pct_per_curse_stack = {10, 20, 30}}
},
{
id = 18,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {base_luck_bonus = {3, 5, 7}, luck_per_card_taken = {0.25, 0.5, 0.75}}
},
{
id = 19,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {ghost_step_chance_pct = {12, 18, 24}, ghost_step_duration = {2.5, 3.2, 4}, ghost_step_move_speed_pct = {15, 22, 30}, ghost_step_evasion_pct = {15, 22, 30}}
},
{
id = 20,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {gold_per_step = {100, 70, 40}, move_speed_pct_per_step = {0.25, 0.35, 0.45}, speed_limit = {10000, 12000, 14000}}
},
{
id = 21,
quality = 4,
defaultCard = false,
price_free = 20800,
inherent = false,
deck_slots = 4,
max_copies = 1,
values = {wave_pure_damage_base = {125, 170, 215}, wave_pure_damage_base_hand = {0.15, 0.25, 0.35}}
},
{
id = 22,
quality = 2,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {morning_gold_base = {700, 700, 700}, morning_gold_decay_per_night = {100, 100, 100}, pickup_gold_pct = {0, 50, 50}, pre_night_gold_pct = {0, 0, 50}}
},
{
id = 23,
quality = 4,
defaultCard = false,
price_free = 20800,
deck_slots = 3,
max_copies = 1,
values = {gold_income_pct_per_minute = {2, 3.5, 5}, gold_tick_interval_sec = {60}, min_earned_gold_pct_of_dividend_required = {25}}
},
{
id = 24,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {gold_per_step = {100, 80, 60}, attack_damage_per_step = {1.5, 1.75, 2}, spell_amp_per_step_pct = {1.5, 1.75, 2}}
},
{
id = 25,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
inherent = true,
values = {mana_per_step = {50}, spell_amp_per_step_pct = {0.5, 0.75, 1}, mana_regen_per_step = {0.1, 0.15, 0.2}, max_mana_bonus_pct = {0, 0, 25}}
},
{
id = 26,
quality = 4,
defaultCard = true,
price_free = 0,
max_copies = 1,
values = {trigger_health_threshold = {100}, heal_pct_per_second = {10, 14, 18}, cooldown_seconds = {120, 100, 80}, invisibility_duration = {10, 12, 14}}
},
{
id = 27,
quality = 2,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {mana_to_damage_pct = {1.5, 2, 2.5}}
},
{
id = 28,
quality = 2,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {health_to_damage_pct = {1.5, 2, 2.5}}
},
{
id = 29,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {night_vampirism_pct = {10, 14, 18}, night_incoming_damage_reduce_pct = {5, 7, 9}}
},
{
id = 30,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {strength_per_level = {0.5, 1, 1.5}, agility_penalty_per_level = {1, 0.5, 0.25}, intellect_penalty_per_level = {1, 0.5, 0.25}}
},
{
id = 31,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {agility_per_level = {0.5, 1, 1.5}, strength_penalty_per_level = {1, 0.5, 0.25}, intellect_penalty_per_level = {1, 0.5, 0.25}}
},
{
id = 32,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {base_cooldown_reduction_pct = {6, 9, 11}, cooldown_loss_per_death_pct = {3}}
},
{
id = 33,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {mana_increase_pct = {15, 25, 35}}
},
{
id = 34,
quality = 3,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {heal_from_enemy_max_hp_pct = {15, 22, 30}, heal_from_attack_damage_pct = {100, 130, 160}}
},
{
id = 35,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {poison_duration = {1, 2, 3}, poison_tick_interval = {1, 0.8, 0.6}, damage_current_hp_pct = {5, 7, 9}, boss_damage_current_hp_pct = {1, 1.4, 1.8}}
},
{
id = 36,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {crystals_per_step = {2}, damage_pct_per_step = {1, 2, 3}, max_bonus_pct = {80, 160, 320}}
},
{
id = 37,
quality = 1,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {base_crystals = {10, 15, 20}, crystals_per_night = {5, 7, 9}}
},
{
id = 38,
quality = 5,
defaultCard = false,
price_free = 83200,
max_copies = 1,
deck_slots = 5,
values = {multiplier = {1.25, 1.5, 1.75}}
},
{
id = 39,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {gold_per_crystal = {50, 75, 100}}
},
{
id = 40,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {gold_per_crystal = {75, 50, 25}}
},
{
id = 41,
quality = 3,
defaultCard = false,
price_free = 10400,
canupgrade = true,
max_copies = 2,
values = {pool_pairs = {1, 1, 2}}
},
{
id = 42,
quality = 2,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {exp_bonus_pct = {10, 15, 20}}
},
{
id = 43,
quality = 1,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {bat_reduction = {0.1, 0.15, 0.2}, projectile_speed_bonus = {0, 300, 0}, attack_anim_reduction_pct = {0, 0, 33}}
},
{
id = 44,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {bonus_move_speed_pct = {5, 7, 9}, bonus_evasion_pct = {5, 7, 9}, luck_bonus_pct_per_point = {0.5, 0.7, 0.9}, max_evasion_pct = {35, 45, 55}}
},
{
id = 45,
quality = 4,
defaultCard = false,
inherent = true,
price_free = 20800,
deck_slots = 2,
max_copies = 1,
values = {max_bonus_pct = {30, 40, 50}, decay_pct_per_minute = {5}}
},
{
id = 46,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {damage_to_mana_pct = {20, 25, 30}}
},
{
id = 47,
quality = 4,
defaultCard = false,
price_free = 20800,
canupgrade = true,
max_copies = 1,
inherent = true,
deck_slots = 4,
values = {exp_bonus_pct = {35, 50, 65}, exp_boost_duration_sec = {180, 180, 180}}
},
{
id = 48,
quality = 3,
defaultCard = true,
price_free = 0,
max_copies = 1,
values = {trigger_hp_pct = {25}, shield_heal_max_hp_pct = {30, 45, 60}, insurance_duration = {3.5, 4.5, 5.5}, incoming_damage_reduction_pct = {100}}
},
{
id = 49,
quality = 3,
defaultCard = false,
price_free = 10400,
canupgrade = false,
max_copies = 1,
values = {}
},
{
id = 50,
quality = 3,
defaultCard = false,
price_free = 10400,
canupgrade = false,
max_copies = 1,
values = {}
},
{
id = 51,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {gold_from_damage_taken_pct = {11, 16, 21}, incoming_damage_base_pct = {25, 20, 15}, incoming_damage_per_100_taken = {0.1, 0.1, 0.1}, morning_gold_cap = {250, 400, 550}}
},
{
id = 52,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {night_duration_reduce_sec = {15, 20, 25}, enemy_stats_bonus_pct = {15, 20, 25}}
},
{
id = 53,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {trigger_card_id = {3, 3, 3}, extra_card_choices = {1, 2, 3}}
},
{
id = 54,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {intellect_per_level = {0.5, 1, 1.5}, strength_penalty_per_level = {1, 0.5, 0.25}, agility_penalty_per_level = {1, 0.5, 0.25}}
},
{
id = 55,
quality = 1,
defaultCard = true,
price_free = 0,
max_copies = 2,
values = {max_health_bonus_pct = {25, 50, 75}}
},
{
id = 56,
quality = 3,
defaultCard = false,
purchasable = false,
obtainable = false,
price_free = 10400,
max_copies = 2,
values = {creep_reflect_pct = {15, 22, 30}}
},
{
id = 57,
quality = 5,
defaultCard = false,
price_free = 83200,
canupgrade = false,
max_copies = 1,
deck_slots = 5,
values = {}
},
{
id = 58,
quality = 5,
defaultCard = false,
inherent = true,
price_free = 83200,
max_copies = 1,
deck_slots = 2,
values = {extra_selections_on_start = {3, 4, 5}, cards_per_selection = {3, 4, 5}}
},
{
id = 59,
quality = 3,
defaultCard = false,
purchasable = false,
obtainable = false,
canupgrade = true,
deck_builder_non_deckable = true,
deck_builder_unlock_card_id = 62,
price_free = 10400,
max_copies = 2,
values = {xp_reward = {500, 800, 1200}}
},
{
id = 60,
quality = 3,
defaultCard = false,
purchasable = false,
obtainable = false,
canupgrade = true,
deck_builder_non_deckable = true,
deck_builder_unlock_card_id = 62,
price_free = 10400,
max_copies = 2,
values = {gold_reward = {250, 500, 750}}
},
{
id = 61,
quality = 3,
defaultCard = false,
purchasable = false,
obtainable = false,
canupgrade = true,
deck_builder_non_deckable = true,
deck_builder_unlock_card_id = 62,
price_free = 10400,
max_copies = 2,
values = {crystals_reward = {12, 18, 24}}
},
{
id = 62,
quality = 4,
defaultCard = false,
price_free = 20800,
canupgrade = false,
max_copies = 1,
values = {}
},
{
id = 63,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {bonus_card_choices = {3, 4, 5}}
},
{
id = 64,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {hp_threshold_pct = {20, 25, 30}, crit_multiplier_pct = {200, 250, 300}}
},
{
id = 65,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {target_hp_full_pct = {100, 100, 100}, crit_multiplier_pct = {300, 450, 500}}
},
{
id = 66,
quality = 5,
defaultCard = false,
price_free = 83200,
max_copies = 1,
values = {bonus_from_health_pct = {50, 65, 80}, bonus_from_mana_pct = {50, 65, 80}}
},
{
id = 67,
quality = 5,
defaultCard = false,
price_free = 83200,
max_copies = 1,
inherent = true,
deck_slots = 3,
values = {
hp_per_strength = {0.1},
outgoing_pct_per_strength = {0.05},
proc_chance_pct = {40, 45, 50},
proc_cooldown_sec = {3},
bonus_damage_from_max_hp_pct = {60, 80, 100}
}
},
{
id = 68,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
canupgrade = false,
values = {curse_stacks = {1, 2, 3}, cursed_offer_slots = {3, 3, 3}}
},
{
id = 69,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {outgoing_damage_per_curse_stack_pct = {1, 2.5, 4}, other_cards_effectiveness_pct = {50, 35, 20}}
},
{
id = 70,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {incoming_reduction_per_rage_pct = {0.1, 0.15, 0.2}}
},
{
id = 71,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
values = {max_health_pct_per_curse_stack = {1}, self_damage_max_hp_pct_per_sec = {2.5, 2, 1.5}}
},
{
id = 72,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {cooldown_reduction_pct = {15, 25, 35}}
},
{
id = 73,
quality = 4,
defaultCard = false,
price_free = 10400,
deck_slots = 3,
max_copies = 1,
values = {deferred_damage_pct = {30, 40, 50}, deferred_dot_duration_sec = {3, 3.5, 4}}
},
{
id = 74,
quality = 5,
defaultCard = false,
price_free = 83200,
max_copies = 1,
inherent = true,
deck_slots = 3,
values = {crit_mult_bonus_pct = {30, 60, 90}, enemy_armor_reduction_pct = {20, 25, 30}, aura_radius = {600, 900, 1200}}
},
{
id = 75,
quality = 5,
defaultCard = false,
price_free = 83200,
max_copies = 1,
values = {
mana_cost_pct = {15},
base_damage = {90, 120, 150},
damage_from_max_mana_pct = {5, 7, 11},
blast_radius = {175},
search_radius = {1000},
blast_interval_sec = {5, 4, 3},
blast_delay_sec = {1.2, 1, 0.8}
}
},
{
id = 76,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {target_count = {1, 2, 3}, radius = {250, 300, 350}, mana_damage_pct = {20, 40, 60}}
},
{
id = 77,
quality = 5,
defaultCard = false,
price_free = 83200,
max_copies = 1,
values = {damage_reduction_pct = {60, 70, 80}, mana_per_mitigated_damage = {1, 0.8, 0.67}}
},
{
id = 78,
quality = 4,
defaultCard = false,
price_free = 20800,
max_copies = 1,
values = {stack_duration_sec = {10, 12, 14}, max_mana_pct_per_stack = {0.5, 1, 1.5}}
},
{
id = 79,
quality = 3,
deck_slots = 4,
defaultCard = false,
price_free = 10400,
canupgrade = false,
max_copies = 2,
values = {}
},
{
id = 80,
quality = 5,
defaultCard = false,
inherent = true,
deck_slots = 3,
price_free = 83200,
max_copies = 1,
values = {outgoing_damage_per_curse_stack_pct = {5, 7, 9}}
},
{
id = 81,
quality = 5,
defaultCard = false,
purchasable = false,
canupgrade = true,
deck_builder_non_deckable = true,
deck_builder_unlock_card_id = 80,
price_free = 0,
max_copies = 1,
values = {outgoing_damage_pct = {15, 15, 15}, spell_amp_pct = {15, 15, 15}}
},
{
id = 82,
quality = 5,
defaultCard = false,
purchasable = false,
canupgrade = true,
deck_builder_non_deckable = true,
deck_builder_unlock_card_id = 80,
price_free = 0,
max_copies = 1,
values = {max_health_pct = {20, 20, 20}, max_mana_pct = {20, 20, 20}}
},
{
id = 83,
quality = 5,
defaultCard = false,
purchasable = false,
canupgrade = true,
deck_builder_non_deckable = true,
deck_builder_unlock_card_id = 80,
price_free = 0,
max_copies = 1,
values = {model_scale_pct = {20, 20, 20}, physical_vampirism_pct = {10, 10, 10}, magical_vampirism_pct = {10, 10, 10}}
},
{
id = 84,
quality = 2,
defaultCard = false,
purchasable = false,
obtainable = false,
canupgrade = true,
deck_builder_non_deckable = true,
deck_builder_unlock_card_id = 33,
price_free = 5200,
max_copies = 2,
values = {spell_amp_from_mana_pct = {15, 20, 25}, spell_amp_mana_scale = 0.1}
},
{
id = 85,
quality = 3,
defaultCard = false,
price_free = 10400,
max_copies = 2,
values = {bonus_card_choices = {1, 2, 3}, slag_pool_copies = {2}}
},
{
id = 86,
quality = 1,
defaultCard = false,
purchasable = false,
obtainable = false,
canupgrade = false,
deck_builder_non_deckable = true,
price_free = 0,
max_copies = 0,
values = {}
},
{
id = 87,
quality = 4,
defaultCard = false,
price_free = 20800,
deck_slots = 5,
max_copies = 1,
canupgrade = false,
values = {attr_pct_per_slag = {1.25, 1.5, 1.75}}
},
{
id = 88,
quality = 2,
defaultCard = false,
price_free = 5200,
max_copies = 2,
canupgrade = false,
deck_slots = 2,
values = {free_rerolls_on_slag = {1}}
}
}
end
local function buildAll(self)
return {unpack(cards1to13(nil))}
end
____exports.ALL_CARD_CATALOG_DEFS = buildAll(nil)
--- Лимит слотов в deck builder и при нормализации колоды на сервере.
____exports.DECK_BUILDER_SLOT_CAPACITY = 1000
____exports.FROSTMOURNE_CARD_ID = 80
____exports.FROSTMOURNE_SHARD_CARD_IDS = {81, 82, 83}
--- Карта желания и её дары (59–61): только через выбор, не в колоду.
____exports.WISH_CARD_ID = 62
____exports.WISH_GIFT_CARD_IDS = {59, 60, 61}
____exports.MANA_SURGE_CARD_ID = 33
____exports.SMALL_MANA_SURGE_CARD_ID = 84
____exports.FISHING_CARD_ID = 85
--- Пустая карта-шлак в пуле (только через «Рыбаловство»).
____exports.SLAG_CARD_ID = 86
function ____exports.isWishGiftCardId(self, cardId)
local id = math.floor(__TS__Number(cardId))
for ____, giftId in ipairs(____exports.WISH_GIFT_CARD_IDS) do
if giftId == id then
return true
end
end
return false
end
function ____exports.getDeckBuilderUnlockRequiredMessage(self, unlockCardId)
local id = math.floor(__TS__Number(unlockCardId))
if id == ____exports.FROSTMOURNE_CARD_ID then
return "Requires purchased Frostmourne card"
end
if id == ____exports.WISH_CARD_ID then
return "Requires purchased Wish card"
end
if id == ____exports.MANA_SURGE_CARD_ID then
return "Requires purchased Mana Surge card"
end
return "Requires purchased parent card"
end
function ____exports.isFrostmourneShardCardId(self, cardId)
local id = math.floor(__TS__Number(cardId))
for ____, shardId in ipairs(____exports.FROSTMOURNE_SHARD_CARD_IDS) do
if shardId == id then
return true
end
end
return false
end
--- Сколько слотов колоды занимает карта по каталогу (по умолчанию 1).
function ____exports.getCardDeckSlotsFromCatalog(self, cardId)
return 1
end
____exports.DEFAULT_DECK_CARD_IDS = __TS__ArraySort(
__TS__ArrayMap(
__TS__ArrayFilter(
____exports.ALL_CARD_CATALOG_DEFS,
function(____, c) return c.defaultCard end
),
function(____, c) return c.id end
),
function(____, a, b) return a - b end
)
--- Строки для витрины магазина (только нестартовые карты).
function ____exports.getCardShopRows(self)
return __TS__ArrayMap(
__TS__ArrayFilter(
____exports.ALL_CARD_CATALOG_DEFS,
function(____, c) return not c.defaultCard end
),
function(____, c) return {id = c.id, price_free = c.price_free, quality = c.quality} end
)
end
--- Компенсация дубликата БП по id вида card_data_N.
function ____exports.buildCardPurchaseCompensationMap(self)
local r = {}
for ____, c in ipairs(____exports.ALL_CARD_CATALOG_DEFS) do
if not c.defaultCard and c.price_free > 0 then
r["card_data_" .. tostring(c.id)] = {price_free = c.price_free}
end
end
return r
end
return ____exports