IntelTwix
Пользователь
- 25 Фев 2018
- 50
- 1
- Проект
- Humans vs Zombie
Нет. Это просто borebones с моим модом.Это barebones с overthrow?
Нет. Это просто borebones с моим модом.Это barebones с overthrow?
Всё, с взаимодействием с юнитами через Events разобрался с:Нет. Там только задаются настройки адона.
Попытался запринтовать.Ребят, что то разобраться не могу. Менял код, вылезла ошибка. Вернул всё назад а ошибка осталась.
Ошибка:
Код:[ 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
function GameMode:OnGameInProgress()
DebugPrint("[BAREBONES] The game has officially begun")
local playerID = 0
local hero = PlayerResource:GetPlayer(playerID):GetAssignedHero()
Timers:CreateTimer(1,
function()
local unit = CreateUnitByName('unit_zombi', Vector(258.066, 711.922, 273), true, hero, hero, DOTA_TEAM_BADGUYS)
print "unit:SetControllableByPlayer(playerID, true)"
return 60
end)
1) "OnDestroy"Подскажите как сделать,чтобы по окончанию действия модификатора,юзался скрипт.
P.S Можно юзать скрипт через интервал?
"modifier_midas_effect"
{
"ThinkInterval" "1"
"OnIntervalThink"
{
"RunScript"
{
"ScriptFile" "file.lua"
"Function" "function228"
}
}
}
print ("unit:SetControllableByPlayer(playerID, true)")print "unit:SetControllableByPlayer(playerID, true)"
Я принтовал что бы не удалять просто строчку, так как ошибка указывала на неё.print ("unit:SetControllableByPlayer(playerID, true)")
так мб ?
Уже сделал по второму способу,но по первому легче выглядит,спасибо.1) "OnDestroy"
2)
Код:"modifier_midas_effect" { "ThinkInterval" "1" "OnIntervalThink" { "RunScript" { "ScriptFile" "file.lua" "Function" "function228" } } }
Почему нельзя просто предмету поменять? Зачем тебе через Event? Или ты хочешь из-за какого - то события увеличивать кулдаун?Как изменить кулдаун определенного предмета в скрипте Events?
Я же говорю, над чтоб менялось только на одной карте из двухПочему нельзя просто предмету поменять? Зачем тебе через Event? Или ты хочешь из-за какого - то события увеличивать кулдаун?
Нет, просто вопросы идиотские. Вы тут наспамили вопросов, на которые уже есть ответы на форумеЯ походу понял почему на мои вопросы особо не отвечают, тип не простой вопрос задаю, над тему для сложных вопросов хД)
Мы экстрасенсы? Откуда мы знаем как ты там свои способности раздаешьПодскажите как сделать,чтобы перед смертью (или при возрождении) мне меняло скиллы на нужные мне,я сделал так,но у меня при спавне скиллы нельзя юзать было через кнопки (только если на них тыкнуть). Может я очень жёстко туплю? Подскажите кто умней меня в этом.
Фбикс - это 3д модель. А впцф - это партикль как быА как делать из FBX модели vpcf, чтоб можно было сделать свой скилл?