Смысл? Главное 6 абилку пустой прописать и все.ульта всегда стоит на 6-м слоте
если у тебя 3 абилки + ульта , то 4-ый и 5-ый слот надо ставить generic_hidden
Так в том-то и прикол, что тип абилки - ультаТип абилки нужен ульта. И вообще можешь ульту в 4 абилку пихать, так легче
Не, щас поставил ульту в 4 абилку, а шестую прописал пустой - не помогло...Смысл? Главное 6 абилку пустой прописать и все.
О, а ваш совет помог, спасибо еще раз! :зульта всегда стоит на 6-м слоте
если у тебя 3 абилки + ульта , то 4-ый и 5-ый слот надо ставить generic_hidden
local hHeroRadiant = HeroList:GetHero(0)
local hHeroDire = HeroList:GetHero(5)
CreateUnitByName("npc_dota_courier", Vector(-7032, -6804, 424), true, hHeroRadiant, nil, DOTA_TEAM_GOODGUYS)
CreateUnitByName("npc_dota_courier", Vector(6878, 5772, 1238), true, hHeroDire, nil, DOTA_TEAM_BADGUYS)
Глянь в бирже мемов , там вроде хорошо реализовано !Ну и еще один вопросик с:
В скрипте Event, в функции OnPlayerPickHero
Lua:local hHeroRadiant = HeroList:GetHero(0) local hHeroDire = HeroList:GetHero(5) CreateUnitByName("npc_dota_courier", Vector(-7032, -6804, 424), true, hHeroRadiant, nil, DOTA_TEAM_GOODGUYS) CreateUnitByName("npc_dota_courier", Vector(6878, 5772, 1238), true, hHeroDire, nil, DOTA_TEAM_BADGUYS)
Создаю для обоих команд курьеров, они создаются, но ими нельзя управлять и они не могут ничего доставлять, просто стоят как вкопанные
Что делать?
Хотел вообще реализовать курьеров как в турбо режиме...
[ VScript ]: scripts\vscripts\gamemode.lua:116: attempt to index global 'npc' (a nil value)
[ VScript ]: stack traceback:
[ VScript ]: scripts\vscripts\libraries\timers.lua:137: in function '__index'
[ VScript ]: scripts\vscripts\gamemode.lua:116: in function <scripts\vscripts\gamemode.lua:114>
[ VScript ]: [C]: in function 'xpcall'
[ VScript ]: scripts\vscripts\libraries\timers.lua:136: in function <scripts\vscripts\libraries\timers.lua:94>
-- This is the primary barebones gamemode script and should be used to assist in initializing your game mode
BAREBONES_VERSION = "1.00"
-- Set this to true if you want to see a complete debug output of all events/processes done by barebones
-- You can also change the cvar 'barebones_spew' at any time to 1 or 0 for output/no output
BAREBONES_DEBUG_SPEW = false
if GameMode == nil then
DebugPrint( '[BAREBONES] creating barebones game mode' )
_G.GameMode = class({})
end
-- This library allow for easily delayed/timed actions
require('libraries/timers')
-- This library can be used for advancted physics/motion/collision of units. See PhysicsReadme.txt for more information.
require('libraries/physics')
-- This library can be used for advanced 3D projectile systems.
require('libraries/projectiles')
-- This library can be used for sending panorama notifications to the UIs of players/teams/everyone
require('libraries/notifications')
-- This library can be used for starting customized animations on units from lua
require('libraries/animations')
-- This library can be used for performing "Frankenstein" attachments on units
require('libraries/attachments')
-- This library can be used to synchronize client-server data via player/client-specific nettables
require('libraries/playertables')
-- This library can be used to create container inventories or container shops
require('libraries/containers')
-- This library provides a searchable, automatically updating lua API in the tools-mode via "modmaker_api" console command
require('libraries/modmaker')
-- This library provides an automatic graph construction of path_corner entities within the map
require('libraries/pathgraph')
-- This library (by Noya) provides player selection inspection and management from server lua
require('libraries/selection')
-- These internal libraries set up barebones's events and processes. Feel free to inspect them/change them if you need to.
require('internal/gamemode')
require('internal/events')
-- settings.lua is where you can specify many different properties for your game mode and is one of the core barebones files.
require('settings')
-- events.lua is where you can specify the actions to be taken when any event occurs and is one of the core barebones files.
require('events')
-- This is a detailed example of many of the containers.lua possibilities, but only activates if you use the provided "playground" map
if GetMapName() == "playground" then
require("examples/playground")
end
--require("examples/worldpanelsExample")
function GameMode:PostLoadPrecache()
DebugPrint("[BAREBONES] Performing Post-Load precache")
--PrecacheItemByNameAsync("item_example_item", function(...) end)
--PrecacheItemByNameAsync("example_ability", function(...) end)
--PrecacheUnitByNameAsync("npc_dota_hero_viper", function(...) end)
--PrecacheUnitByNameAsync("npc_dota_hero_enigma", function(...) end)
end
--[[
This function is called once and only once as soon as the first player (almost certain to be the server in local lobbies) loads in.
It can be used to initialize state that isn't initializeable in InitGameMode() but needs to be done before everyone loads in.
]]
function GameMode:OnFirstPlayerLoaded()
DebugPrint("[BAREBONES] First Player has loaded")
end
--[[
This function is called once and only once after all players have loaded into the game, right as the hero selection time begins.
It can be used to initialize non-hero player state or adjust the hero selection (i.e. force random etc)
]]
function GameMode:OnAllPlayersLoaded()
DebugPrint("[BAREBONES] All Players have loaded into the game")
end
--[[
This function is called once and only once for every player when they spawn into the game for the first time. It is also called
if the player's hero is replaced with a new hero for any reason. This function is useful for initializing heroes, such as adding
levels, changing the starting gold, removing/adding abilities, adding physics, etc.
The hero parameter is the hero entity that just spawned in
]]
function GameMode:OnHeroInGame(hero)
DebugPrint("[BAREBONES] Hero spawned in game for first time -- " .. hero:GetUnitName())
-- This line for example will set the starting gold of every hero to 500 unreliable gold
--hero:SetGold(500, false)
-- These lines will create an item and add it to the player, effectively ensuring they start with the item
local item = CreateItem("item_example_item", hero, hero)
hero:AddItem(item)
--[[ --These lines if uncommented will replace the W ability of any hero that loads into the game
--with the "example_ability" ability
local abil = hero:GetAbilityByIndex(1)
hero:RemoveAbility(abil:GetAbilityName())
hero:AddAbility("example_ability")]]
end
--[[
This function is called once and only once when the game completely begins (about 0:00 on the clock). At this point,
gold will begin to go up in ticks if configured, creeps will spawn, towers will become damageable etc. This function
is useful for starting any game logic timers/thinkers, beginning the first round, etc.
]]
function GameMode:OnGameInProgress()
DebugPrint("[BAREBONES] The game has officially begun")
local playerID = 0
local hero = PlayerResource:GetPlayer(playerID):GetAssignedHero()
Timers:CreateTimer(3,
function()
local unit = CreateUnitByName('npc_unit_zombi', Vector(258.066, 711.922, 273), true, hero, hero, DOTA_TEAM_BADGUYS)
unit:SetControllableByPlayer(playerID, false)
return 60
end)
Timers:CreateTimer(30, -- Start this timer 30 game-time seconds later
function()
DebugPrint("This function is called 30 seconds after the game begins, and every 30 seconds thereafter")
return 30.0 -- Rerun this timer every 30 game-time seconds
end)
end
-- This function initializes the game mode and is called before anyone loads into the game
-- It can be used to pre-initialize any values/tables that will be needed later
function GameMode:InitGameMode()
GameMode = self
DebugPrint('[BAREBONES] Starting to load Barebones gamemode...')
-- Commands can be registered for debugging purposes or as functions that can be called by the custom Scaleform UI
Convars:RegisterCommand( "command_example", Dynamic_Wrap(GameMode, 'ExampleConsoleCommand'), "A console command example", FCVAR_CHEAT )
DebugPrint('[BAREBONES] Done loading Barebones gamemode!\n\n')
end
-- This is an example console command
function GameMode:ExampleConsoleCommand()
print( '******* Example Console Command ***************' )
local cmdPlayer = Convars:GetCommandClient()
if cmdPlayer then
local playerID = cmdPlayer:GetPlayerID()
if playerID ~= nil and playerID ~= -1 then
-- Do something here for the player who called this command
PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_undying", 1000, 1000)
end
end
print( '*********************************************' )
end
TIMERS_VERSION = "1.05"
--[[
-- A timer running every second that starts immediately on the next frame, respects pauses
Timers:CreateTimer(function()
print ("Hello. I'm running immediately and then every second thereafter.")
return 1.0
end
)
-- The same timer as above with a shorthand call
Timers(function()
print ("Hello. I'm running immediately and then every second thereafter.")
return 1.0
end)
-- A timer which calls a function with a table context
Timers:CreateTimer(GameMode.someFunction, GameMode)
-- A timer running every second that starts 5 seconds in the future, respects pauses
Timers:CreateTimer(5, function()
print ("Hello. I'm running 5 seconds after you called me and then every second thereafter.")
return 1.0
end
)
-- 10 second delayed, run once using gametime (respect pauses)
Timers:CreateTimer({
endTime = 10, -- when this timer should first execute, you can omit this if you want it to run first on the next frame
callback = function()
print ("Hello. I'm running 10 seconds after when I was started.")
end
})
-- 10 second delayed, run once regardless of pauses
Timers:CreateTimer({
useGameTime = false,
endTime = 10, -- when this timer should first execute, you can omit this if you want it to run first on the next frame
callback = function()
print ("Hello. I'm running 10 seconds after I was started even if someone paused the game.")
end
})
-- A timer running every second that starts after 2 minutes regardless of pauses
Timers:CreateTimer("uniqueTimerString3", {
useGameTime = false,
endTime = 120,
callback = function()
print ("Hello. I'm running after 2 minutes and then every second thereafter.")
return 1
end
})
-- A timer using the old style to repeat every second starting 5 seconds ahead
Timers:CreateTimer("uniqueTimerString3", {
useOldStyle = true,
endTime = GameRules:GetGameTime() + 5,
callback = function()
print ("Hello. I'm running after 5 seconds and then every second thereafter.")
return GameRules:GetGameTime() + 1
end
})
]]
TIMERS_THINK = 0.01
if Timers == nil then
print ( '[Timers] creating Timers' )
Timers = {}
setmetatable(Timers, {
__call = function(t, ...)
return t:CreateTimer(...)
end
})
--Timers.__index = Timers
end
function Timers:start()
Timers = self
self.timers = {}
--local ent = Entities:CreateByClassname("info_target") -- Entities:FindByClassname(nil, 'CWorld')
local ent = SpawnEntityFromTableSynchronous("info_target", {targetname="timers_lua_thinker"})
ent:SetThink("Think", self, "timers", TIMERS_THINK)
end
function Timers:Think()
--if GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then
--return
--end
-- Track game time, since the dt passed in to think is actually wall-clock time not simulation time.
local now = GameRules:GetGameTime()
-- Process timers
for k,v in pairs(Timers.timers) do
local bUseGameTime = true
if v.useGameTime ~= nil and v.useGameTime == false then
bUseGameTime = false
end
local bOldStyle = false
if v.useOldStyle ~= nil and v.useOldStyle == true then
bOldStyle = true
end
local now = GameRules:GetGameTime()
if not bUseGameTime then
now = Time()
end
if v.endTime == nil then
v.endTime = now
end
-- Check if the timer has finished
if now >= v.endTime then
-- Remove from timers list
Timers.timers[k] = nil
Timers.runningTimer = k
Timers.removeSelf = false
-- Run the callback
local status, nextCall
if v.context then
status, nextCall = xpcall(function() return v.callback(v.context, v) end, function (msg)
return msg..'\n'..debug.traceback()..'\n'
end)
else
status, nextCall = xpcall(function() return v.callback(v) end, function (msg)
return msg..'\n'..debug.traceback()..'\n'
end)
end
Timers.runningTimer = nil
-- Make sure it worked
if status then
-- Check if it needs to loop
if nextCall and not Timers.removeSelf then
-- Change its end time
if bOldStyle then
v.endTime = v.endTime + nextCall - now
else
v.endTime = v.endTime + nextCall
end
Timers.timers[k] = v
end
-- Update timer data
--self:UpdateTimerData()
else
-- Nope, handle the error
Timers:HandleEventError('Timer', k, nextCall)
end
end
end
return TIMERS_THINK
end
function Timers:HandleEventError(name, event, err)
print(err)
-- Ensure we have data
name = tostring(name or 'unknown')
event = tostring(event or 'unknown')
err = tostring(err or 'unknown')
-- Tell everyone there was an error
--Say(nil, name .. ' threw an error on event '..event, false)
--Say(nil, err, false)
-- Prevent loop arounds
if not self.errorHandled then
-- Store that we handled an error
self.errorHandled = true
end
end
function Timers:CreateTimer(name, args, context)
if type(name) == "function" then
if args ~= nil then
context = args
end
args = {callback = name}
name = DoUniqueString("timer")
elseif type(name) == "table" then
args = name
name = DoUniqueString("timer")
elseif type(name) == "number" then
args = {endTime = name, callback = args}
name = DoUniqueString("timer")
end
if not args.callback then
print("Invalid timer created: "..name)
return
end
local now = GameRules:GetGameTime()
if args.useGameTime ~= nil and args.useGameTime == false then
now = Time()
end
if args.endTime == nil then
args.endTime = now
elseif args.useOldStyle == nil or args.useOldStyle == false then
args.endTime = now + args.endTime
end
args.context = context
Timers.timers[name] = args
return name
end
function Timers:RemoveTimer(name)
Timers.timers[name] = nil
if Timers.runningTimer == name then
Timers.removeSelf = true
end
end
function Timers:RemoveTimers(killAll)
local timers = {}
Timers.removeSelf = true
if not killAll then
for k,v in pairs(Timers.timers) do
if v.persist then
timers[k] = v
end
end
end
Timers.timers = timers
end
if not Timers.timers then Timers:start() end
GameRules.Timers = Timers
Adobe Audition 10 PortableКакую программу лучше и проще использовать для редактирования звуков?, чем пользуетесь вы?
Брал на гите,но там были не все,уже нашёл в файлах дотыНа гите можно взять.
Просто выдавай каждому игроку куру,она сама юзается.Ну и еще один вопросик с:
В скрипте Event, в функции OnPlayerPickHero
Lua:local hHeroRadiant = HeroList:GetHero(0) local hHeroDire = HeroList:GetHero(5) CreateUnitByName("npc_dota_courier", Vector(-7032, -6804, 424), true, hHeroRadiant, nil, DOTA_TEAM_GOODGUYS) CreateUnitByName("npc_dota_courier", Vector(6878, 5772, 1238), true, hHeroDire, nil, DOTA_TEAM_BADGUYS)
Создаю для обоих команд курьеров, они создаются, но ими нельзя управлять и они не могут ничего доставлять, просто стоят как вкопанные
Что делать?
Хотел вообще реализовать курьеров как в турбо режиме...
Это barebones с overthrow?Ребят, что то разобраться не могу. Менял код, вылезла ошибка. Вернул всё назад а ошибка осталась.
Ошибка:
Код:[ VScript ]: scripts\vscripts\gamemode.lua:116: attempt to index global 'npc' (a nil value) [ VScript ]: stack traceback: [ VScript ]: scripts\vscripts\libraries\timers.lua:137: in function '__index' [ VScript ]: scripts\vscripts\gamemode.lua:116: in function <scripts\vscripts\gamemode.lua:114> [ VScript ]: [C]: in function 'xpcall' [ VScript ]: scripts\vscripts\libraries\timers.lua:136: in function <scripts\vscripts\libraries\timers.lua:94>
Код:-- This is the primary barebones gamemode script and should be used to assist in initializing your game mode BAREBONES_VERSION = "1.00" -- Set this to true if you want to see a complete debug output of all events/processes done by barebones -- You can also change the cvar 'barebones_spew' at any time to 1 or 0 for output/no output BAREBONES_DEBUG_SPEW = false if GameMode == nil then DebugPrint( '[BAREBONES] creating barebones game mode' ) _G.GameMode = class({}) end -- This library allow for easily delayed/timed actions require('libraries/timers') -- This library can be used for advancted physics/motion/collision of units. See PhysicsReadme.txt for more information. require('libraries/physics') -- This library can be used for advanced 3D projectile systems. require('libraries/projectiles') -- This library can be used for sending panorama notifications to the UIs of players/teams/everyone require('libraries/notifications') -- This library can be used for starting customized animations on units from lua require('libraries/animations') -- This library can be used for performing "Frankenstein" attachments on units require('libraries/attachments') -- This library can be used to synchronize client-server data via player/client-specific nettables require('libraries/playertables') -- This library can be used to create container inventories or container shops require('libraries/containers') -- This library provides a searchable, automatically updating lua API in the tools-mode via "modmaker_api" console command require('libraries/modmaker') -- This library provides an automatic graph construction of path_corner entities within the map require('libraries/pathgraph') -- This library (by Noya) provides player selection inspection and management from server lua require('libraries/selection') -- These internal libraries set up barebones's events and processes. Feel free to inspect them/change them if you need to. require('internal/gamemode') require('internal/events') -- settings.lua is where you can specify many different properties for your game mode and is one of the core barebones files. require('settings') -- events.lua is where you can specify the actions to be taken when any event occurs and is one of the core barebones files. require('events') -- This is a detailed example of many of the containers.lua possibilities, but only activates if you use the provided "playground" map if GetMapName() == "playground" then require("examples/playground") end --require("examples/worldpanelsExample") function GameMode:PostLoadPrecache() DebugPrint("[BAREBONES] Performing Post-Load precache") --PrecacheItemByNameAsync("item_example_item", function(...) end) --PrecacheItemByNameAsync("example_ability", function(...) end) --PrecacheUnitByNameAsync("npc_dota_hero_viper", function(...) end) --PrecacheUnitByNameAsync("npc_dota_hero_enigma", function(...) end) end --[[ This function is called once and only once as soon as the first player (almost certain to be the server in local lobbies) loads in. It can be used to initialize state that isn't initializeable in InitGameMode() but needs to be done before everyone loads in. ]] function GameMode:OnFirstPlayerLoaded() DebugPrint("[BAREBONES] First Player has loaded") end --[[ This function is called once and only once after all players have loaded into the game, right as the hero selection time begins. It can be used to initialize non-hero player state or adjust the hero selection (i.e. force random etc) ]] function GameMode:OnAllPlayersLoaded() DebugPrint("[BAREBONES] All Players have loaded into the game") end --[[ This function is called once and only once for every player when they spawn into the game for the first time. It is also called if the player's hero is replaced with a new hero for any reason. This function is useful for initializing heroes, such as adding levels, changing the starting gold, removing/adding abilities, adding physics, etc. The hero parameter is the hero entity that just spawned in ]] function GameMode:OnHeroInGame(hero) DebugPrint("[BAREBONES] Hero spawned in game for first time -- " .. hero:GetUnitName()) -- This line for example will set the starting gold of every hero to 500 unreliable gold --hero:SetGold(500, false) -- These lines will create an item and add it to the player, effectively ensuring they start with the item local item = CreateItem("item_example_item", hero, hero) hero:AddItem(item) --[[ --These lines if uncommented will replace the W ability of any hero that loads into the game --with the "example_ability" ability local abil = hero:GetAbilityByIndex(1) hero:RemoveAbility(abil:GetAbilityName()) hero:AddAbility("example_ability")]] end --[[ This function is called once and only once when the game completely begins (about 0:00 on the clock). At this point, gold will begin to go up in ticks if configured, creeps will spawn, towers will become damageable etc. This function is useful for starting any game logic timers/thinkers, beginning the first round, etc. ]] function GameMode:OnGameInProgress() DebugPrint("[BAREBONES] The game has officially begun") local playerID = 0 local hero = PlayerResource:GetPlayer(playerID):GetAssignedHero() Timers:CreateTimer(3, function() local unit = CreateUnitByName('npc_unit_zombi', Vector(258.066, 711.922, 273), true, hero, hero, DOTA_TEAM_BADGUYS) unit:SetControllableByPlayer(playerID, false) return 60 end) Timers:CreateTimer(30, -- Start this timer 30 game-time seconds later function() DebugPrint("This function is called 30 seconds after the game begins, and every 30 seconds thereafter") return 30.0 -- Rerun this timer every 30 game-time seconds end) end -- This function initializes the game mode and is called before anyone loads into the game -- It can be used to pre-initialize any values/tables that will be needed later function GameMode:InitGameMode() GameMode = self DebugPrint('[BAREBONES] Starting to load Barebones gamemode...') -- Commands can be registered for debugging purposes or as functions that can be called by the custom Scaleform UI Convars:RegisterCommand( "command_example", Dynamic_Wrap(GameMode, 'ExampleConsoleCommand'), "A console command example", FCVAR_CHEAT ) DebugPrint('[BAREBONES] Done loading Barebones gamemode!\n\n') end -- This is an example console command function GameMode:ExampleConsoleCommand() print( '******* Example Console Command ***************' ) local cmdPlayer = Convars:GetCommandClient() if cmdPlayer then local playerID = cmdPlayer:GetPlayerID() if playerID ~= nil and playerID ~= -1 then -- Do something here for the player who called this command PlayerResource:ReplaceHeroWith(playerID, "npc_dota_hero_undying", 1000, 1000) end end print( '*********************************************' ) end
Код:TIMERS_VERSION = "1.05" --[[ -- A timer running every second that starts immediately on the next frame, respects pauses Timers:CreateTimer(function() print ("Hello. I'm running immediately and then every second thereafter.") return 1.0 end ) -- The same timer as above with a shorthand call Timers(function() print ("Hello. I'm running immediately and then every second thereafter.") return 1.0 end) -- A timer which calls a function with a table context Timers:CreateTimer(GameMode.someFunction, GameMode) -- A timer running every second that starts 5 seconds in the future, respects pauses Timers:CreateTimer(5, function() print ("Hello. I'm running 5 seconds after you called me and then every second thereafter.") return 1.0 end ) -- 10 second delayed, run once using gametime (respect pauses) Timers:CreateTimer({ endTime = 10, -- when this timer should first execute, you can omit this if you want it to run first on the next frame callback = function() print ("Hello. I'm running 10 seconds after when I was started.") end }) -- 10 second delayed, run once regardless of pauses Timers:CreateTimer({ useGameTime = false, endTime = 10, -- when this timer should first execute, you can omit this if you want it to run first on the next frame callback = function() print ("Hello. I'm running 10 seconds after I was started even if someone paused the game.") end }) -- A timer running every second that starts after 2 minutes regardless of pauses Timers:CreateTimer("uniqueTimerString3", { useGameTime = false, endTime = 120, callback = function() print ("Hello. I'm running after 2 minutes and then every second thereafter.") return 1 end }) -- A timer using the old style to repeat every second starting 5 seconds ahead Timers:CreateTimer("uniqueTimerString3", { useOldStyle = true, endTime = GameRules:GetGameTime() + 5, callback = function() print ("Hello. I'm running after 5 seconds and then every second thereafter.") return GameRules:GetGameTime() + 1 end }) ]] TIMERS_THINK = 0.01 if Timers == nil then print ( '[Timers] creating Timers' ) Timers = {} setmetatable(Timers, { __call = function(t, ...) return t:CreateTimer(...) end }) --Timers.__index = Timers end function Timers:start() Timers = self self.timers = {} --local ent = Entities:CreateByClassname("info_target") -- Entities:FindByClassname(nil, 'CWorld') local ent = SpawnEntityFromTableSynchronous("info_target", {targetname="timers_lua_thinker"}) ent:SetThink("Think", self, "timers", TIMERS_THINK) end function Timers:Think() --if GameRules:State_Get() >= DOTA_GAMERULES_STATE_POST_GAME then --return --end -- Track game time, since the dt passed in to think is actually wall-clock time not simulation time. local now = GameRules:GetGameTime() -- Process timers for k,v in pairs(Timers.timers) do local bUseGameTime = true if v.useGameTime ~= nil and v.useGameTime == false then bUseGameTime = false end local bOldStyle = false if v.useOldStyle ~= nil and v.useOldStyle == true then bOldStyle = true end local now = GameRules:GetGameTime() if not bUseGameTime then now = Time() end if v.endTime == nil then v.endTime = now end -- Check if the timer has finished if now >= v.endTime then -- Remove from timers list Timers.timers[k] = nil Timers.runningTimer = k Timers.removeSelf = false -- Run the callback local status, nextCall if v.context then status, nextCall = xpcall(function() return v.callback(v.context, v) end, function (msg) return msg..'\n'..debug.traceback()..'\n' end) else status, nextCall = xpcall(function() return v.callback(v) end, function (msg) return msg..'\n'..debug.traceback()..'\n' end) end Timers.runningTimer = nil -- Make sure it worked if status then -- Check if it needs to loop if nextCall and not Timers.removeSelf then -- Change its end time if bOldStyle then v.endTime = v.endTime + nextCall - now else v.endTime = v.endTime + nextCall end Timers.timers[k] = v end -- Update timer data --self:UpdateTimerData() else -- Nope, handle the error Timers:HandleEventError('Timer', k, nextCall) end end end return TIMERS_THINK end function Timers:HandleEventError(name, event, err) print(err) -- Ensure we have data name = tostring(name or 'unknown') event = tostring(event or 'unknown') err = tostring(err or 'unknown') -- Tell everyone there was an error --Say(nil, name .. ' threw an error on event '..event, false) --Say(nil, err, false) -- Prevent loop arounds if not self.errorHandled then -- Store that we handled an error self.errorHandled = true end end function Timers:CreateTimer(name, args, context) if type(name) == "function" then if args ~= nil then context = args end args = {callback = name} name = DoUniqueString("timer") elseif type(name) == "table" then args = name name = DoUniqueString("timer") elseif type(name) == "number" then args = {endTime = name, callback = args} name = DoUniqueString("timer") end if not args.callback then print("Invalid timer created: "..name) return end local now = GameRules:GetGameTime() if args.useGameTime ~= nil and args.useGameTime == false then now = Time() end if args.endTime == nil then args.endTime = now elseif args.useOldStyle == nil or args.useOldStyle == false then args.endTime = now + args.endTime end args.context = context Timers.timers[name] = args return name end function Timers:RemoveTimer(name) Timers.timers[name] = nil if Timers.runningTimer == name then Timers.removeSelf = true end end function Timers:RemoveTimers(killAll) local timers = {} Timers.removeSelf = true if not killAll then for k,v in pairs(Timers.timers) do if v.persist then timers[k] = v end end end Timers.timers = timers end if not Timers.timers then Timers:start() end GameRules.Timers = Timers
Так и сделал )Просто выдавай каждому игроку куру,она сама юзается.
Нет. Там только задаются настройки адона.А можно ли как-то из скрипта settings взаимодействовать с юнитами (например с башней) или с предметами?!
А через Events?Нет. Там только задаются настройки адона.
Мне просто как-то нужно изменить скорость курьера и кулдаун town portal scroll'а, но только на одной из двух карт и я хз как это сделатьНет. Там только задаются настройки адона.