вот как , сделать , чтобы силам тьмы давали сразу тимбера? а силам света только мк( зевса убрал)Ещё придумал
Силам тьмы сразу давать тимбера
Силам света на 10 секунд перед принудительным рандомным выбором, дать возможность через абилки у IO выбрать либо макаку либо зевса
function OnHeroSpawned(event)
local hero = EntIndexToHScript(event.entindex)
local playerID = hero:GetPlayerID()
local team = PlayerResource:GetTeam(playerID)
local heroName = hero:GetUnitName()
if heroName == "npc_dota_hero_wisp" then
if team == DOTA_TEAM_BADGUYS then
PrecacheUnitByNameAsync("npc_dota_hero_timbersaw", function()
PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_timbersaw", 0, 0)
end)
elseif team == DOTA_TEAM_GOODGUYS then
PrecacheUnitByNameAsync("npc_dota_hero_monkey_king", function()
PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_monkey_king", 0, 0)
end)
end
end
end
а надо этот скрипт добавить просто в game mode? И в инитgame нужно что-то писать?Я чуть поправил код и добавил PrecacheUnitByNameAsync ибо вспомнил, что звук бы сломался, человек тут не так давно открыл для форума фикс
Все что там есть это и засовывается в инициализацию, кроме функции её отдельно в этом же файлеа надо этот скрипт добавить просто в game mode? И в инитgame нужно что-то писать?
Так, смотри я сделал, как ты сказал я сделал, но без слушателя у меня не получалось , создал слушателя и потом просто ппц. у меня начали спавнятся куча мк и все крашнулосьВсе что там есть это и засовывается в инициализацию, кроме функции её отдельно в этом же файл.
if Spoof1xVidModed == nil then
Spoof1xVidModed = class({})
end
function Precache( context )
--[[
Precache things we know we'll use. Possible file types include (but not limited to):
PrecacheResource( "model", "*.vmdl", context )
PrecacheResource( "soundfile", "*.vsndevts", context )
PrecacheResource( "particle", "*.vpcf", context )
PrecacheResource( "particle_folder", "particles/folder", context )
]]
end
function OnHeroSpawned(event)
local hero = EntIndexToHScript(event.entindex)
local playerID = hero:GetPlayerID()
local team = PlayerResource:GetTeam(playerID)
local heroName = hero:GetUnitName()
if heroName == "npc_dota_hero_wisp" then
if team == DOTA_TEAM_BADGUYS then
PrecacheUnitByNameAsync("npc_dota_hero_timbersaw", function()
PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_timbersaw", 0, 0)
end)
elseif team == DOTA_TEAM_GOODGUYS then
PrecacheUnitByNameAsync("npc_dota_hero_monkey_king", function()
PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_monkey_king", 0, 0)
end)
end
end
end
-- Create the game mode when we activate
function Activate()
GameRules.AddonTemplate = Spoof1xVidModed()
GameRules.AddonTemplate:InitGameMode()
end
function Spoof1xVidModed:InitGameMode()
print( "Template addon is loaded." )
ListenToGameEvent("npc_spawned", OnHeroSpawned, nil)
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
end
-- Evaluate the state of the game
function Spoof1xVidModed:OnThink()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
--print( "Template addon script is running." )
elseif GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then
return nil
end
return 1
end
function Activate()
GameRules:SetHeroSelectionTime(0) -- Как долго мы должны позволять людям выбирать своего героя?
GameRules:SetStrategyTime(0) -- Как долго игроки находятся на сцене после выбора героя?
GameRules:SetShowcaseTime(0) -- Время демонстрации при запуске игры
end
function CAddonTemplateGameMode:InitGameMode()
ListenToGameEvent('npc_spawned', Dynamic_Wrap(self, 'OnNPCSpawned'), self)
GameRules:GetGameModeEntity():SetCustomGameForceHero("npc_dota_hero_wisp") -- Выдаст всем IO
end
function CAddonTemplateGameMode:OnNPCSpawned(event)
local npc = EntIndexToHScript(event.entindex)
local heroName = npc:GetUnitName()
local playerID = npc:GetPlayerOwnerID()
local team = PlayerResource:GetTeam(playerID)
if heroName == "npc_dota_hero_wisp" then
if team == DOTA_TEAM_BADGUYS then
PrecacheUnitByNameAsync("npc_dota_hero_shredder", function()
PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_shredder", 0, 0)
end)
elseif team == DOTA_TEAM_GOODGUYS then
PrecacheUnitByNameAsync("npc_dota_hero_monkey_king", function()
PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_monkey_king", 0, 0)
end)
end
end
end
Я щас лег спать , завтра впишу ,заранее спасибо.addon_game_mode.lua
Lua:function Activate() GameRules:SetHeroSelectionTime(0) -- Как долго мы должны позволять людям выбирать своего героя? GameRules:SetStrategyTime(0) -- Как долго игроки находятся на сцене после выбора героя? GameRules:SetShowcaseTime(0) -- Время демонстрации при запуске игры end function CAddonTemplateGameMode:InitGameMode() ListenToGameEvent('npc_spawned', Dynamic_Wrap(self, 'OnNPCSpawned'), self) GameRules:GetGameModeEntity():SetCustomGameForceHero("npc_dota_hero_wisp") -- Выдаст всем IO end function CAddonTemplateGameMode:OnNPCSpawned(event) local npc = EntIndexToHScript(event.entindex) local heroName = npc:GetUnitName() local playerID = npc:GetPlayerOwnerID() local team = PlayerResource:GetTeam(playerID) if heroName == "npc_dota_hero_wisp" then if team == DOTA_TEAM_BADGUYS then PrecacheUnitByNameAsync("npc_dota_hero_shredder", function() PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_shredder", 0, 0) end) elseif team == DOTA_TEAM_GOODGUYS then PrecacheUnitByNameAsync("npc_dota_hero_monkey_king", function() PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_monkey_king", 0, 0) end) end end end
Рекомендую в слушателе npc_spawned добавить проверку на IsRealHero, чтобы консоль лишними ошибками не засоряласьaddon_game_mode.lua
Lua:function CAddonTemplateGameMode:OnNPCSpawned(event) local npc = EntIndexToHScript(event.entindex) local heroName = npc:GetUnitName() local playerID = npc:GetPlayerOwnerID() local team = PlayerResource:GetTeam(playerID) if heroName == "npc_dota_hero_wisp" then if team == DOTA_TEAM_BADGUYS then PrecacheUnitByNameAsync("npc_dota_hero_shredder", function() PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_shredder", 0, 0) end) elseif team == DOTA_TEAM_GOODGUYS then PrecacheUnitByNameAsync("npc_dota_hero_monkey_king", function() PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_monkey_king", 0, 0) end) end end end
function OnHeroSpawned(event)
local hero = EntIndexToHScript(event.entindex)
if hero:IsRealHero() then
local playerID = hero:GetPlayerID()
local team = PlayerResource:GetTeam(playerID)
local heroName = hero:GetUnitName()
if heroName == "npc_dota_hero_wisp" then
if team == DOTA_TEAM_BADGUYS then
PrecacheUnitByNameAsync("npc_dota_hero_shredder", function()
PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_shredder", 0, 0)
end)
elseif team == DOTA_TEAM_GOODGUYS then
PrecacheUnitByNameAsync("npc_dota_hero_monkey_king", function()
PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_monkey_king", 0, 0)
end)
end
end
end
end
Она все равно будет работать в тупую если видит IO в игре который был отспавненРекомендую в слушателе npc_spawned добавить проверку на IsRealHero, чтобы консоль лишними ошибками не засорялась
Код:function OnHeroSpawned(event) local hero = EntIndexToHScript(event.entindex) if hero:IsRealHero() then local playerID = hero:GetPlayerID() local team = PlayerResource:GetTeam(playerID) local heroName = hero:GetUnitName() if heroName == "npc_dota_hero_wisp" then if team == DOTA_TEAM_BADGUYS then PrecacheUnitByNameAsync("npc_dota_hero_shredder", function() PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_shredder", 0, 0) end) elseif team == DOTA_TEAM_GOODGUYS then PrecacheUnitByNameAsync("npc_dota_hero_monkey_king", function() PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_monkey_king", 0, 0) end) end end end end
Ага, знаю) Просто если потом чел захочет пофиксить какой-то баг и полезет в консоль, куча ошибок будут с толку сбивать)Она все равно будет работать в тупую если видит IO в игре который был отспавнен
Чел.. к тому времени когда он научится делать кастомки, он уже сам будет фиксить это и это будут не мои проблемы))Ага, знаю) Просто если потом чел захочет пофиксить какой-то баг и полезет в консоль, куча ошибок будут с толку сбивать)