restructure

This commit is contained in:
2021-11-10 08:48:00 -05:00
parent d3eac6b70e
commit aaa089715d
12018 changed files with 6424 additions and 135034 deletions

View File

@@ -0,0 +1,144 @@
-- 需启用 info.xml 的 creator.js
local PERMANENT_HERO_ABILITIES = {
"seasonal_summon_cny_balloon",
"seasonal_summon_ti9_balloon",
"seasonal_ti9_instruments",
"seasonal_decorate_tree",
"high_five",
"seasonal_ti9_banner",
}
local PATREON_LEVEL_FOR_ABILITY = {
["high_five"] = 0,
["seasonal_ti9_banner"] = 1,
["seasonal_summon_cny_balloon"] = 0,
["seasonal_summon_dragon"] = 0,
["seasonal_summon_cny_tree"] = 0,
["seasonal_firecrackers"] = 0,
["seasonal_ti9_shovel"] = 0,
["seasonal_ti9_instruments"] = 0,
["seasonal_ti9_monkey"] = 0,
["seasonal_summon_ti9_balloon"] = 0,
["seasonal_throw_snowball"] = 0,
["seasonal_festive_firework"] = 0,
["seasonal_decorate_tree"] = 0,
["seasonal_summon_snowman"] = 0,
}
local ABILITIES_CANT_BE_REMOVED = {
["high_five"] = true,
["seasonal_ti9_banner"] = true
}
local MAX_COSMETIC_ABILITIES = 6
local function GetCosmeticAbilitiesCount( npc )
local count = 0
for i = 0, npc:GetAbilityCount() - 1 do
local ability = npc:GetAbilityByIndex( i )
if ability and PATREON_LEVEL_FOR_ABILITY[ability:GetAbilityName()] then
count = count + 1
end
end
return count
end
local function AddAbilityIfNeed( npc, abilityName, sendReload )
if npc:IsRealHero() and not npc:FindAbilityByName( abilityName ) and PATREON_LEVEL_FOR_ABILITY[abilityName] and GetCosmeticAbilitiesCount( npc ) < MAX_COSMETIC_ABILITIES then
local new_ability = npc:AddAbility( abilityName )
new_ability:SetLevel( 1 )
new_ability:SetHidden( false )
if sendReload then
CustomGameEventManager:Send_ServerToAllClients( "cosmetic_abilities_reload_hud", nil )
end
end
end
ListenToGameEvent( "npc_spawned", function( keys )
local npc = EntIndexToHScript( keys.entindex )
if npc:IsRealHero() then
for _, ability_name in pairs( PERMANENT_HERO_ABILITIES ) do
AddAbilityIfNeed( npc, ability_name)
end
end
end, nil )
local function CheckAbilityAndUnit( abilityName, npcIndex )
local npc = EntIndexToHScript( npcIndex )
if not npc or not npc:GetClassname():find( "npc_dota_" ) or not PATREON_LEVEL_FOR_ABILITY[abilityName] then
return
end
-- if p and p.level < PATREON_LEVEL_FOR_ABILITY[abilityName] then
-- CustomGameEventManager:Send_ServerToPlayer( PlayerResource:GetPlayer( id ), "display_custom_error", { message = "#nopatreonerror" } )
-- return
-- end
return true
end
CustomGameEventManager:RegisterListener( "cosmetic_abilities_try_activate", function( id, keys )
CheckAbilityAndUnit( keys.ability, keys.unit )
end )
CustomGameEventManager:RegisterListener( "cosmetic_abilities_take", function( id, keys )
if CheckAbilityAndUnit( keys.ability, keys.unit ) then
AddAbilityIfNeed( EntIndexToHScript( keys.unit ), keys.ability, true )
end
end )
CustomGameEventManager:RegisterListener( "cosmetic_abilities_delete", function( id, keys )
if not PATREON_LEVEL_FOR_ABILITY[keys.ability] or ABILITIES_CANT_BE_REMOVED[keys.ability] then return end
EntIndexToHScript( keys.unit ):RemoveAbility( keys.ability )
CustomGameEventManager:Send_ServerToAllClients( "cosmetic_abilities_reload_hud", nil )
end )
--------------------------------------------------------------------------------
-- 最多放置7个简洁方式
-- local TOY_ABILITY = {
-- ["high_five"] = 0,
-- ["seasonal_ti9_banner"] = 0,
-- ["seasonal_summon_cny_balloon"] = 1,
-- ["seasonal_summon_ti9_balloon"] = 1,
-- ["seasonal_summon_dragon"] = 0,
-- ["seasonal_summon_cny_tree"] = 0,
-- ["seasonal_firecrackers"] = 0,
-- ["seasonal_ti9_shovel"] = 0,
-- ["seasonal_ti9_instruments"] = 0,
-- ["seasonal_ti9_monkey"] = 0,
-- ["seasonal_throw_snowball"] = 0,
-- ["seasonal_festive_firework"] = 1,
-- ["seasonal_decorate_tree"] = 1,
-- ["seasonal_summon_snowman"] = 0,
-- }
-- -- 击掌和战斗旗帜,位于物品栏上方
-- ListenToGameEvent( "npc_spawned", function( keys )
-- local npc = EntIndexToHScript( keys.entindex )
-- if npc:IsRealHero() then
-- local count = 0
-- for k,v in pairs(TOY_ABILITY) do
-- if not npc:FindAbilityByName(k) then
-- if v == 1 then
-- local ability = npc:AddAbility(k)
-- ability:SetLevel( 1 )
-- ability:SetHidden( false )
-- count = count + 1
-- if count >= 7 then
-- break
-- end
-- end
-- end
-- end
-- end
-- end, nil )