CustomGames.ru - Dota 2 пользовательские игры

как сделать спавнер крипа кастомного?

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
пытался делать по гайду который где то был но не получилось, потому что не смог понять куда что пихать и откуда запускать функцию.
Если сможете объясните или сыллку на то где это есть.
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 2039
  • Мощь: 19
Ищи по ключевым словам и функциям: CreateUnitByName(), SpawnUnit

Оффлайн Роман

  • 88
  • Мощь: 0
Старый ,но можно взять инфу http://dota2.ru/forum/threads/gajd-po-scripting-chast-2.602694/.
А вот новый гайд https://customgames.ru/forum/index.php?topic=223.0

Оффлайн Adam Smith

  • Друзья CG
  • 476
  • Мощь: 6
  • жрять жри его
Код
local double = CreateUnitByName( caster:GetUnitName(), spawn_location, true, caster, caster:GetOwner(), caster:GetTeamNumber())
double:SetControllableByPlayer(caster:GetPlayerID(), false)
By PG.Freeman

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
Adam Smith, Роман,  мне нужна функция которая с таймером как обычный кемп нейтралов призывает крипа и куда ее пихать.
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Adam Smith, Роман,  мне нужна функция которая с таймером как обычный кемп нейтралов призывает крипа и куда ее пихать.
Берешь таймеры от BMD, запускаешь ее при старте игры(запусти слушателя на эвент game_rules_state_change) и профит.
Код
Timers:CreateTimer(1, function() -- таймер для спавна нейтралов
      SpawnNeutrals() -- функция в которой спавнятся
      return 60.0 -- повторить через минуту
  end )

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
CryDeS, я чет не очень понял что за слушатель и
Timers:CreateTimer(1, function() -- для чего цифра 1 и что за функция?
   SpawnNeutrals() -- это функция или что?

Попробовал сделать так как сказал, но не заработало, код
Код
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
« Последнее редактирование: 07-07-2016, 16:54:10 от Danis »
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
CryDeS, я чет не очень понял что за слушатель и
Timers:CreateTime(1, function() -- для чего цифра 1 и что за функция?
   SpawnNeutrals() -- это функция или что?
1 значит запуск через 1 секунду, фунция это то что таймер вызове после одного своего такта.
SpawnNeutrals() это твоя функция в которой ты будешь спавнить крипов.
Слушатель - Listener
В InitGameMode
Код
_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

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
CryDeS, так?
Код
-- 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
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
CryDeS, так?
Вот так
Код
			Timers:CreateTimer(1, function()
.......
end )

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
CryDeS, Ну не знаю, оно запрашивает какие то числа из таблицы
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
CryDeS, Ну не знаю, оно запрашивает какие то числа из таблицы
А поточнее? Что запрашивает, какой таблицы?

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
CryDeS,
Код
attempt to call a table value
stack traceback:
Это пишет
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
Прошу скиньте рабочий код с таймером на спавн юнитов в точке, то как не пытаюсь не могу сделать что бы работало выдает ошибку да еще и два раза:
CryDeS,
Код
attempt to call a table value
stack traceback:
Если у кого то завалялся поделитесь
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн I_GRIN_I

  • Продвинутый
  • 525
  • Мощь: 9
  • Научиться бы скриптить...
Danis, на, примерно так должно быть
Код
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