Добавить абилку не уникальному герою

  • Автор темы Автор темы Илья
  • Дата начала Дата начала

Илья

Друзья CG
25 Сен 2015
2,348
41
Значит, есть код:

Код:
function dungeon:OnPlayerGainedLevel(data)
	local hero = PlayerResource:GetSelectedHeroEntity(data.player-1)

	local level = hero:GetLevel()
	
	if level == 3 or level == 5 or level == 7 then

		local abilityName = ABILITY_TABLE[RandomInt(1,#ABILITY_TABLE)]
		while hero:HasAbility(abilityName) do
			abilityName = ABILITY_TABLE[RandomInt(1,#ABILITY_TABLE)]
		end

		local ability = hero:AddAbility(abilityName)
		if ability == nil then
			hero:AddAbility("sven_storm_bolt")
		end

	end
end

Что он делает: добавляет на определенном уровне героя рандомную абилку из константной таблицы ABILITY_TABLE. Проблема в чем: герой на мод один, т.е. на карте бегает 6 игроков с одинаковыми героями. И, после отработки этого кода, абилка может улететь не обязательно тому герою, который принадлежит игроку, что апнул уровень своему герою. Например, первый игрок апнул уровень своему герою, а абилка уходит не ему, а второму игроку.

На данный момент я другим путем решил эту проблему (через пассивку), но хотелось бы узнать, как граматно подправить этот кусок кода, чтобы вышло то, что задуманно.
 
Последнее редактирование модератором:
Думаю косяк с playerid.
Код:
local hero = PlayerResource:GetSelectedHeroEntity(data.player)
 
Последнее редактирование модератором:
Так разве "data.player-1" не дает как раз таки id?
Из самого события мы получаем player с типом short. Это ведь не id, т.к. иначе бы здесь написали что-то в духе PlayerID , как на других событиях, где получаем id.
 
Последнее редактирование модератором:
[quote author=Илья link=topic=1113.msg6439#msg6439 date=1475440192]
Так разве "data.player-1" не дает как раз таки id?
Из самого события мы получаем player с типом short. Это ведь не id, т.к. иначе бы здесь написали что-то в духе PlayerID , как на других событиях, где получаем id.
[/quote]
А что если это не playerid а entindex игрока?
Это тогда объясняет почему у тебя мб такой косяк.
 
Последнее редактирование модератором:
Код:
	local player = EntIndexToHScript(event.player)
	if player then
		hero = player:GetAssignedHero()
	end
 
Реклама: