local double = CreateUnitByName( caster:GetUnitName(), spawn_location, true, caster, caster:GetOwner(), caster:GetTeamNumber())
double:SetControllableByPlayer(caster:GetPlayerID(), false)
Timers:CreateTimer(1, function() -- таймер для спавна нейтралов
SpawnNeutrals() -- функция в которой спавнятся
return 60.0 -- повторить через минуту
end )
Timers:CreateTimer(1, function() SpawnNeutrals(
local tpoint = Entities:FindByName( nil, "creep_radiant_1"):GetAbsOrigin()
local current = CreateUnitByName("creep_dire_1", tpoint, true, nil, nil, DOTA_TEAM_NEUTRALS)
)
return 60
end)
end
_G.IsGameStart = false
ListenToGameEvent('game_rules_state_change', OnGameStateChange)
function OnGameStateChange()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
if not _G.IsGameStart then
_G.IsGameStart = true;
Timers:CreateTimer(1, function() -- таймер для спавна нейтралов
SpawnNeutrals()
return 60.0 -- повторить через минуту
end )
end
end
end
function SpawnNeutrals()
local target_point = Entities:FindByName( nil, "CREEP_SPAWN_POINT" ); -- это объект который ставишь в хаммере как point_target и даешь ему имя CREEP_SPAWN_POINT
local pos_vector = target_point:GetAbsOrigin(); -- получаем координаты объекта.
local creep = CreateUnitByName( "npc_dota_neutral_kobold", pos_vector, true, nil, nil, DOTA_TEAM_NEUTRALS) -- CreateUnitByName(unit_name, vector, find_clear_space, ownernpc, ownerunit, team)
end
-- Generated from template
require('barebones')
require('timers')
if CAddonTemplateGameMode == nil then
CAddonTemplateGameMode = 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
_G.maxLevel = 50
-- Create the game mode when we activate
function Activate()
GameRules.AddonTemplate = CAddonTemplateGameMode()
GameRules.AddonTemplate:InitGameMode()
end
function OnGameStateChange()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
if not _G.IsGameStart then
_G.IsGameStart = true;
Timers:CreateTimer(1, function SpawnNeutrals()
local target_point = Entities:FindByName( nil, "creep_radiant_1" ); -- это объект который ставишь в хаммере как point_target и даешь ему имя CREEP_SPAWN_POINT
local pos_vector = target_point:GetAbsOrigin(); -- получаем координаты объекта.
local creep = CreateUnitByName( "dire_creeps_1", pos_vector, true, nil, nil, DOTA_TEAM_NEUTRALS) -- CreateUnitByName(unit_name, vector, find_clear_space, ownernpc, ownerunit, team)
return 1
end )
end
end
end
function CAddonTemplateGameMode:InitGameMode()
print( "Template addon is loaded." )
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
GameRules:SetUseUniversalShopMode( true )
_G.IsGameStart = false
ListenToGameEvent('game_rules_state_change', OnGameStateChange)
end
-- Evaluate the state of the game
function CAddonTemplateGameMode: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 CDOTABaseGameMode:SetCustomHeroMaxLevel(maxLevel) end
attempt to call a table value
stack traceback:
require('barebones')
require('timers')
if CAddonTemplateGameMode == nil then
CAddonTemplateGameMode = class({})
end
_G.IsGameStart = false
ListenToGameEvent('game_rules_state_change',OnGameStateChange)
function Precache( context )
end
_G.maxLevel = 50
function Activate()
GameRules.AddonTemplate = CAddonTemplateGameMode()
GameRules.AddonTemplate:InitGameMode()
end
function OnGameStateChange()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
if not _G.IsGameStart then
_G.IsGameStart = true;
Timers:CreateTimer(function()
local target_point = Entities:FindByName( nil, "creep_radiant_1" ); -- это объект который ставишь в хаммере как point_target и даешь ему имя CREEP_SPAWN_POINT
local pos_vector = target_point:GetAbsOrigin(); -- получаем координаты объекта.
CreateUnitByName( "dire_creeps_1", pos_vector, true, nil, nil, DOTA_TEAM_NEUTRALS) -- CreateUnitByName(unit_name, vector, find_clear_space, ownernpc, ownerunit, team)
return 1.0
end
)
end
end
end
function CAddonTemplateGameMode:InitGameMode()
print( "Template addon is loaded." )
GameRules:GetGameModeEntity():SetThink( "OnThink", self, "GlobalThink", 2 )
GameRules:SetUseUniversalShopMode( true )
_G.IsGameStart = false
ListenToGameEvent('game_rules_state_change', OnGameStateChange)
end
function CAddonTemplateGameMode:OnThink()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
elseif GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then
return nil
end
return 1
end
function CDOTABaseGameMode:SetCustomHeroMaxLevel(maxLevel)
end
function OnGameStateChange()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
if not _G.IsGameStart then
_G.IsGameStart = true;
local repeat_interval = 1 -- Rerun this timer every *repeat_interval* game-time seconds
local start_after = 1 -- Start this timer *start_after* game-time seconds later
print("surprise")
Timers:CreateTimer(start_after, function()
SpawnCreeps()
return repeat_interval
end)
end
end
end
_G.IsGameStart = false
ListenToGameEvent("game_start", Dynamic_Wrap(GameMode, "OnGameInProgress"), self)
function OnGameStateChange()
if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
if not _G.IsGameStart then
_G.IsGameStart = true;
print("surprise")
Timers:CreateTimer(1, function()
SpawnCreeps()
return 1
end)
end
end
end
Поздравляю. А зачем тебе repeat_interval и start_after ? Можешь же без них обойтись:
Почему ListenToGameEvent('game_rules_state_change' работает, а ListenToGameEvent('game_start' нет? Где об этом можно почитать?Поздравляю. А зачем тебе repeat_interval и start_after ? Можешь же без них обойтись:
Код:function OnGameStateChange() if GameRules:State_Get() == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then if not _G.IsGameStart then _G.IsGameStart = true; print("surprise") Timers:CreateTimer(1, function() SpawnCreeps() return 1 end) end end end
Чел, теме уже 7 лет и API доты уже давно сменилось, найди актуальную тему или спроси по новой, что ты хочешьПочему ListenToGameEvent('game_rules_state_change' работает, а ListenToGameEvent('game_start' нет? Где об этом можно почитать?