Повышение уровня

Ну вот так вопросы не задают:

function GameMode:OnHeroInGame(hero)
hero:SetAbilityPoints(0)
end

Потому что надо видеть где и как ты вызываешь эту функцию OnHeroInGame() ведь в зависимости от этого эта функция либо становится полной хелней, либо имеет смысл. То есть надо кидать всю цепочку кода, связанную с этой функцией.


В общем, тебе в событии "dota_player_gained_level" передают два параметра:
player ( short )
level ( short )
В скобочках тип указан, как ты должен знать.

Естественно, эти параметры передаются с помощью другого, посредника, дабы было легче ими оперировать.
Как этот аргумент-посредник (ключ) ты обзовешь, дело твое, но сейчас ты его обозвал

GameMode:OnPlayerLevelUp(keys) - "keys"

Как в С++ или джаве обращаешься через оператор "точка" к открытым параметрам объекта, так и здесь. Обращение к параметрам player и level в итоге такое: keys.player и keys.level


Эта штука

Код:
function GameMode:OnPlayerLevelUp(keys)
 local level = keys.level
 if level > 73 then 
   ...
 end
end

Написана верно: ты запускаешь функцию GameMode:OnPlayerLevelUp как только произойдет событие "dota_player_gained_level" (если ты, конечно, слушателя создал, а ты говоришь, что создал).
В теле функции ты берешь значение "keys.level" запихиваешь его в свою локальную переменную "level" и проверяешь, не больше ли это значение 73. И если больше то что-то мутишь.

А вот дальше, я думаю, ты уже догадываешься, что не так в "keys:SetAbilityPoints(0)"
 
Последнее редактирование модератором:
Ну я только догадываюсь, что тут должно быть примерно так: player:SetAbilityPoints(0)?
 
Да, верно, молодец:

keys.player:SetAbilityPoints(0)

Но! player имеет тип short, а это всего-лишь циферка. Тебе же нужен сам объект. В lua объекты имеют тип handle.

Теперь, зная это, ты можешь отыскать здесь функцию, или набор функций, что помогут тебе сделать из цифры объект. Скорее всего, в качестве player передают его индекс. Если не разберешься - пиши, поищу сам.
 
Хотя... level:SetAbilityPoints(0)

Блин, ты то правильные вещи говоришь, то такую хелню :D

level - это цифра. У неё нет никаких функций. Нет у неё и параметра Ability Points, который можно задать в ноль.

Тебе нужен объект, что обладает этим параметром. И не абы какой, а именно герой, который апнул лвл. Почитай на досуге про Объектно-ориентированное программирование (ООП)
 
Последнее редактирование модератором:
Вон, можешь почитать одни из моих первых постов на форуме. Я там как раз разбирал синтаксис.
 
Я бы конечно нашел если бы имел представление о том, как это может выглядеть, пролистав все, что имеет слово handle я не нашел ничего схожего
 
И что там "не совершенно"? Кидай код целиком.
 
Последнее редактирование модератором:
Не совершенно не в коде, а в механике исполнения, но я вспомнил, что есть помимо Set, еще и Get.
Просто когда на 73 лвле 72 очка навыков, а апая на 74-ый все пропадают становится равным 0, но Get со значением -1 должен это исправить)
 
Код:
function GameMode:OnPlayerLevelUp(keys)
 local plp = PlayerResource:GetSelectedHeroEntity(keys.player-1)
 local level = keys.level
 if level > 73 then 
  plp:SetAbilityPoints(0)
 end
end
Он работает, но можно изощриться и намутить так, чтобы он не давал апать лвл, пока не вкачаешь все скиллы
 
Последнее редактирование модератором:
Не очень понял, что ты тут имеешь в виду

Просто когда на 73 лвле 72 очка навыков, а апая на 74-ый все пропадают становится равным 0, но Get со значением -1 должен это исправить)

Но пожалуйста : ))
 
Код:
 local victim = EntIndexToHScript(ftable.entindex_victim_const)
Как вы не конвертировали индекс в handle???????????????????????????
 
Реклама: