--[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]] local ____exports = {} --- Каталог арсенала: реестр всех экип-предметов и список играбельных героев. -- -- Раскладывается в две NetTable: -- - "arsenal_catalog" / "items" → ArsenalItemDef[] -- - "arsenal_catalog" / "heroes" → string[] (npc_dota_hero_*) local DEFAULT_ITEM_ICON = "s2r://panorama/images/items/recipe_psd.vtex" local ARSENAL_ICON = { weapon = {ironBlade = "file://{images}/custom_game/arsenal/ironblade.png", stormEdge = "file://{images}/custom_game/arsenal/stormedge.png", sunfangSaber = "file://{images}/custom_game/arsenal/sunfangsaber.png"}, armor = {chainMail = "file://{images}/custom_game/arsenal/chainmail.png", dragonPlate = "file://{images}/custom_game/arsenal/dragonplate.png", vanguardShell = "file://{images}/custom_game/arsenal/vanguardshell.png"}, helmet = {leatherCap = "file://{images}/custom_game/arsenal/leathercap.png", arcaneCirclet = "file://{images}/custom_game/arsenal/arcanecirclet.png", warcrownMask = "file://{images}/custom_game/arsenal/warcrownmask.png"}, boots = {swiftBoots = "file://{images}/custom_game/arsenal/swiftboots.png", phaseTreads = "file://{images}/custom_game/arsenal/phasetreads.png", hermesGreaves = "file://{images}/custom_game/arsenal/hermesgreaves.png"}, necklace = {amberPendant = "file://{images}/custom_game/arsenal/amberpendant.png", soulLocket = "file://{images}/custom_game/arsenal/soullocket.png", prismChoker = "file://{images}/custom_game/arsenal/prismchoker.png"}, ring = {copperBand = "file://{images}/custom_game/arsenal/copperband.png", voidSignet = "file://{images}/custom_game/arsenal/voidsignet.png", titanLoop = "file://{images}/custom_game/arsenal/titancircle.png"} } --- Перечень слотов в порядке отображения в UI. ____exports.ARSENAL_SLOTS = { "weapon", "armor", "helmet", "boots", "necklace", "ring" } --- Полный список экип-предметов. Эффекты — отдельные модификаторы в -- `src/vscripts/arsenal/items//...` (имена согласованы с полем `modifier`). -- -- Это базовый набор-каркас (по 2 предмета на слот). Расширять отдельной задачей. ____exports.ARSENAL_ITEMS = { { itemName = "item_arsenal_weapon_iron_blade", slot = "weapon", quality = "epic", modifier = "modifier_arsenal_weapon_iron_blade", icon = ARSENAL_ICON.weapon.ironBlade }, { itemName = "item_arsenal_weapon_storm_edge", slot = "weapon", quality = "epic", modifier = "modifier_arsenal_weapon_storm_edge", icon = ARSENAL_ICON.weapon.stormEdge }, { itemName = "item_arsenal_weapon_sunfang_saber", slot = "weapon", quality = "epic", modifier = "modifier_arsenal_weapon_storm_edge", icon = ARSENAL_ICON.weapon.sunfangSaber }, { itemName = "item_arsenal_armor_chain_mail", slot = "armor", quality = "epic", modifier = "modifier_arsenal_armor_chain_mail", icon = ARSENAL_ICON.armor.chainMail }, { itemName = "item_arsenal_armor_dragon_plate", slot = "armor", quality = "epic", modifier = "modifier_arsenal_armor_dragon_plate", icon = ARSENAL_ICON.armor.dragonPlate }, { itemName = "item_arsenal_armor_vanguard_shell", slot = "armor", quality = "epic", modifier = "modifier_arsenal_armor_dragon_plate", icon = ARSENAL_ICON.armor.vanguardShell }, { itemName = "item_arsenal_helmet_leather_cap", slot = "helmet", quality = "rare", modifier = "modifier_arsenal_helmet_leather_cap", icon = ARSENAL_ICON.helmet.leatherCap }, { itemName = "item_arsenal_helmet_arcane_circlet", slot = "helmet", quality = "rare", modifier = "modifier_arsenal_helmet_arcane_circlet", icon = ARSENAL_ICON.helmet.arcaneCirclet }, { itemName = "item_arsenal_helmet_warcrown_mask", slot = "helmet", quality = "rare", modifier = "modifier_arsenal_helmet_arcane_circlet", icon = ARSENAL_ICON.helmet.warcrownMask }, { itemName = "item_arsenal_boots_swift_boots", slot = "boots", quality = "legendary", modifier = "modifier_arsenal_boots_swift_boots", icon = ARSENAL_ICON.boots.swiftBoots }, { itemName = "item_arsenal_boots_phase_treads", slot = "boots", quality = "legendary", modifier = "modifier_arsenal_boots_phase_treads", icon = ARSENAL_ICON.boots.phaseTreads }, { itemName = "item_arsenal_boots_hermes_greaves", slot = "boots", quality = "legendary", modifier = "modifier_arsenal_boots_phase_treads", icon = ARSENAL_ICON.boots.hermesGreaves }, { itemName = "item_arsenal_necklace_amber_pendant", slot = "necklace", quality = "legendary", modifier = "modifier_arsenal_necklace_amber_pendant", icon = ARSENAL_ICON.necklace.amberPendant }, { itemName = "item_arsenal_necklace_soul_locket", slot = "necklace", quality = "legendary", modifier = "modifier_arsenal_necklace_soul_locket", icon = ARSENAL_ICON.necklace.soulLocket }, { itemName = "item_arsenal_necklace_prism_choker", slot = "necklace", quality = "legendary", modifier = "modifier_arsenal_necklace_soul_locket", icon = ARSENAL_ICON.necklace.prismChoker }, { itemName = "item_arsenal_ring_copper_band", slot = "ring", quality = "mythic", modifier = "modifier_arsenal_ring_copper_band", icon = ARSENAL_ICON.ring.copperBand }, { itemName = "item_arsenal_ring_void_signet", slot = "ring", quality = "mythic", modifier = "modifier_arsenal_ring_void_signet", icon = ARSENAL_ICON.ring.voidSignet }, { itemName = "item_arsenal_ring_titan_loop", slot = "ring", quality = "mythic", modifier = "modifier_arsenal_ring_void_signet", icon = ARSENAL_ICON.ring.titanLoop } } --- Карта itemName → ArsenalItemDef (для быстрого поиска по имени). ____exports.ARSENAL_ITEMS_MAP = (function() local map = {} for ____, item in ipairs(____exports.ARSENAL_ITEMS) do map[item.itemName] = item end return map end)(nil) --- Парс `scripts/npc/herolist.txt` → имена героев со значением `>0` или `-1` (включённые). -- Тот же фильтр, что в `GameMode.getEnabledHeroesFromHeroList`. function ____exports.getEnabledHeroes(self) local rawKv = LoadKeyValues("scripts/npc/herolist.txt") local ____temp_2 = rawKv and rawKv.CustomHeroList if ____temp_2 == nil then ____temp_2 = rawKv end local heroList = ____temp_2 if not heroList then return {} end local result = {} for heroName in pairs(heroList) do local value = tonumber(tostring(heroList[heroName])) or 0 if value > 0 or value == -1 then result[#result + 1] = tostring(heroName) end end return result end --- Опубликовать каталог и список героев в NetTable. Вызывать один раз при старте сервера. function ____exports.publishArsenalCatalog(self) CustomNetTables:SetTableValue("arsenal_catalog", "items", ____exports.ARSENAL_ITEMS) CustomNetTables:SetTableValue( "arsenal_catalog", "heroes", {list = ____exports.getEnabledHeroes(nil)} ) CustomNetTables:SetTableValue("arsenal_catalog", "slots", {list = ____exports.ARSENAL_SLOTS}) end return ____exports