Ну вот так вопросы не задают:
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)"