рандомная способность

  • Автор темы Автор темы UZzip
  • Дата начала Дата начала

UZzip

Продвинутый
2 Янв 2016
282
1
как при старте игры, дать герою случайный скил из небольшого списка. ?
 
как при старте игры, дать герою случайный скил из небольшого списка. ?
Код:
local random_ability_table = {
  "random_ability_1",
  "random_ability_2",
  "random_ability_3",
}

function GiveRandomAbility(hero)
  local ability_number = RandomInt(1, #random_ability_table)
  hero:AddAbility(random_ability_table[ability_number])
end
 
Последнее редактирование модератором:
Твой код можно на целую строчку сократить! :D

Код:
local random_ability_table = {
  "random_ability_1",
  "random_ability_2",
  "random_ability_3",
}

function GiveRandomAbility(hero)
  hero:AddAbility(random_ability_table[RandomInt(1, #random_ability_table)])
end
 
Последнее редактирование модератором:
это в addon_game_mode.lua ?
а как указать ссылку на нужного героя? к которому это применяться будет, или это ко всем?
 
это в addon_game_mode.lua ?
а как указать ссылку на нужного героя? к которому это применяться будет, или это ко всем?
Это просто тебе функция, возьми событие при спавне героя и возьми из аргументов события ссылку на героя, а дальше передай в эту функцию.
 
Последнее редактирование модератором:
возьми событие при спавне героя и возьми из аргументов события ссылку на героя, а дальше передай в эту функцию.

Код:
function GameMode:OnGameInProgress()
взял вроде, как его изменить правильно?

Код:
function Activate()
	GiveRandomAbility(hero)
end
так активировать да?
 
Последнее редактирование модератором:
Нука-нука, давай, интересно глянуть, а то я не представляю :D

Если бы эти абилки шли по порядку возрастания id, то еще могу представить, но они ведь так не идут.
Просто, не делать переход на новую строку, lua скушает ток в путь)
[quote author=UZzip link=topic=814.msg3442#msg3442 date=1459884737]
Код:
function GameMode:OnGameInProgress()
взял вроде, как его изменить правильно?

Код:
function Activate()
	GiveRandomAbility(hero)
end
так активировать да?
[/quote]
Давай ты пойдешь читать о событиях и эвентах.
Нет, не так -.-
 
Последнее редактирование модератором:
CryDeS, тутитут я всё прочитал. Кое что понял, но тяжеловато доходит.
мне нужен код событие (игрок выбрал героя или как то так), а где его найти для конкретного примера я не знаю.
 
function OnHeroPicked (event)
local hero = EntIndexToHScript(event.heroindex)
GiveBlinkDagger(hero)
end

function Activate ()
ListenToGameEvent("dota_player_pick_hero", OnHeroPicked, nil)
end

вот этот пример как то можно переделать?
 
Последнее редактирование модератором:
А зачем тебе переделывать?
Код:
 function Activate ()
  ListenToGameEvent("dota_player_pick_hero", OnHeroPicked, nil)
 end

function OnHeroPicked (event)
  local hero = EntIndexToHScript(event.heroindex)
  GiveAbility(hero)
 end

 function GiveAbility (hero)
	Тут функция, которая дает герою скилл
 end
 
Последнее редактирование модератором:
ребята, что я сделал не так?
Код:
 function Activate ()
  ListenToGameEvent("dota_player_pick_hero", OnHeroPicked, nil)
 end

function OnHeroPicked (event)
  local hero = EntIndexToHScript(event.heroindex)
  GiveAbility(hero)
 end

 function GiveAbility (hero)
	GiveRandomAbility(hero)
 end

local random_ability_table = {
  "dark_seer_surge2",
  "furion_teleportation2",
  "invoker_sun_strike2",
  "legion_commander_duel2",
  "meepo_earthbind2",
  "templar_assassin_refraction2",
}

function GiveRandomAbility(hero)
  hero:AddAbility(random_ability_table[RandomInt(1, #random_ability_table)])
end

dota_player_pick_hero
player ( short )
heroindex ( short )
hero ( string )
 
Последнее редактирование модератором:
Код:
random_ability_table = {
  "dark_seer_surge2",
  "furion_teleportation2",
  "invoker_sun_strike2",
  "legion_commander_duel2",
  "meepo_earthbind2",
  "templar_assassin_refraction2"
}


function Activate ()
  ListenToGameEvent("dota_player_pick_hero", OnHeroPicked, nil)
 end

function OnHeroPicked (event)
  local hero = EntIndexToHScript(event.heroindex)
  GiveRandomAbility(hero)
 end

function GiveRandomAbility(hero)
  hero:AddAbility(random_ability_table[RandomInt(1, #random_ability_table)])
end


Пробуй так. Таблица должна быть в самом верху.
Если ты там где-нибудь какие глобальные переменные объявляешь через _.G или классы, то после них идет таблица.
И в следующий раз скидывай весь свой addon_game_mode.lua
 
Последнее редактирование модератором:
Илья, Огромное тебе спасибо, и всем остальным! Репу апну.

Такое дело, я читал что не имеет значения куда ставить функции, а оказалось имеет.
 
Такое дело, я читал что не имеет значения куда ставить функции, а оказалось имеет.
Отреж голову тому кто это сказал, полный бред. Почитай про области видимости на досуге.
 
Последнее редактирование модератором:
Реклама: