Удаление бафа

  • Автор темы Автор темы UZzip
  • Дата начала Дата начала
Говорит, что ждет целое, а получает пустоту. PlayerID - нет такого параметра в кейсе.
 
Илья, что делать? как объявить кастера?

нашел на гитхабе:
Код:
local caster = keys.caster
но тоже не помогло...
 
Ты слушателем ловишь событие dota_player_used_ability или что ты делаешь? Откуда функция вызывается?
 
Вот так:
Код:
local player = EntIndexToHScript(keys.PlayerID)
local abilityname = keys.abilityname
 
Ты слушателем ловишь событие dota_player_used_ability или что ты делаешь? Откуда функция вызывается?

вызываю из :
Код:
function main:InitGameMode()

GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 3 )
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 3 )

ListenToGameEvent("dota_player_killed", Dynamic_Wrap(main, "OnHeroKilled"), self)


ListenToGameEvent('dota_player_used_ability', OnUsedAbility, self)
end

тут уже как только не пробовал:
Код:
function OnUsedAbility(keys)
Say(nil, "ON USED ABILITY", false)
local player = EntIndexToHScript(keys.PlayerID)
local abilityname = keys.abilityname
local player = PlayerResource:GetPlayer( keys.PlayerID ) --hscript
local hero = PlayerResource:GetSelectedHeroEntity(keys.PlayerID) --hscript
local ability_name = keys.abilityname --string

hero :RemoveModifierByName("modifier_templar_assassin_refraction_damage")
end
текст пишет а баф не удаляет

я так понял мне нужно указать кастера и всё..

что исправить? и что удалить можно
 
Последнее редактирование модератором:
Код:
function OnUsedAbility(keys)
Say(nil, "ON USED ABILITY", false)
local player = EntIndexToHScript(keys.PlayerID)
player:RemoveModifierByName("modifier_templar_assassin_refraction_damage")
end
 
Последнее редактирование модератором:
[quote author=Илья link=topic=834.msg4022#msg4022 date=1462215121]
Код:
function OnUsedAbility(keys)
Say(nil, "ON USED ABILITY", false)
local player = EntIndexToHScript(keys.PlayerID)
player:RemoveModifierByName("modifier_templar_assassin_refraction_damage")
end
[/quote]
не робит твой код =(

консоль
[ VScript ]: EntIndexToHScript parameter 1: expected integer but got void.
[ Developer ]: ...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:88: Parameter type mismatch
[ Developer ]: stack traceback:
[ Developer ]: [C]: in function 'EntIndexToHScript'
[ Developer ]: ...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:88: in function <...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:86>
[ W VScript ]: Script Runtime Error: ...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:88: Parameter type mismatch
[ W VScript ]: stack traceback:
[ W VScript ]: [C]: in function 'EntIndexToHScript'
[ W VScript ]: ...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:88: in function <...me\dota_addons\zipn\scripts\vscripts\addon_game_mode.lua:86>
 
Последнее редактирование модератором:
[quote author=Илья link=topic=834.msg4022#msg4022 date=1462215121]
Код:
function OnUsedAbility(keys)
Say(nil, "ON USED ABILITY", false)
local player = EntIndexToHScript(keys.PlayerID)
player:RemoveModifierByName("modifier_templar_assassin_refraction_damage")
end
[/quote]
По лбу хошь? Снимать с игрока модификатор оО
 
Последнее редактирование модератором:
По лбу хошь? Снимать с игрока модификатор оО
:D :D

ну товарищи знатоки вы определитесь и выручите меня уже наконец))

я уже вот что сам придумал но не работает тоже

Код:
function OnUsedAbility(keys)
Say(nil, "ON USED ABILITY", false)

local hero = keys.caster
hero:RemoveModifierByName("modifier_templar_assassin_refraction_damage")
end
 
Последнее редактирование модератором:
Не понял, а в чем проблема? player - эт просто переменная, там внутри лежит его персонаж. Если нет то да, надо перса достать.

UZ, поставь номера строчек моему коду, чтобы я понял, куда именно жалуется.
 
Не понял, а в чем проблема? player - эт просто переменная, там внутри лежит его персонаж. Если нет то да, надо перса достать.

UZ, поставь номера строчек моему коду, чтобы я понял, куда именно жалуется.

88 это она
Код:
local player = EntIndexToHScript(keys.PlayerID)


86 эта
Код:
function OnUsedAbility(keys)
 
Последнее редактирование модератором:
Ну я прям даже не знаю, ошибка та же.

Можешь сразу это прописать
Код:
function OnUsedAbility(keys)
Say(nil, "ON USED ABILITY", false)
local player = EntIndexToHScript(keys.PlayerID)
local hero = player:GetAssignedHero()
hero:RemoveModifierByName("modifier_templar_assassin_refraction_damage")
end

Т.к. будет в итоге так выглядеть. А над ошибкой я подумаю. Голова сейчас не варит, завтра на свежую подумаю.
 
Последнее редактирование модератором:
Суть такова, что он keys.PlayerID якобы пустой, но там должно быть число типа short.

Можешь попробовать еще так (keys.PlayerID-1). Но подумаю я завтра, в чем беда.


Мож кто и раньше подумает)
 
Ну и можешь попробовать еще листенер другой:

ListenToGameEvent("dota_player_used_ability", Dynamic_Wrap(main, "OnUsedAbility"), self)


И соответственно функцию так оформить:

function main:OnUsedAbility(keys)
 
Последнее редактирование модератором:
[quote author=Илья link=topic=834.msg4028#msg4028 date=1462225022]
Ну я прям даже не знаю, ошибка та же.

Можешь сразу это прописать
Код:
function OnUsedAbility(keys)
Say(nil, "ON USED ABILITY", false)
local player = EntIndexToHScript(keys.PlayerID)
local hero = player:GetAssignedHero()
hero:RemoveModifierByName("modifier_templar_assassin_refraction_damage")
end

Т.к. будет в итоге так выглядеть. А над ошибкой я подумаю. Голова сейчас не варит, завтра на свежую подумаю.
[/quote]
Ой Илья Илья.
Крч, keys.PlayerID это не Entity Index, а ID игрока, и его преобразовать в объект нельзя таким способом(как тебе вообще пришла эта мыслишка?), по этому он и жалуется на nil, для него entindex = 0 = nil (playerid = 0 же)
Код:
function OnUsedAbility(keys)
Say(nil, "ON USED ABILITY", false)
local player = PlayerResource:GetPlayer( keys.PlayerID ) -- получиим обьект игрока(ИГРОК != ГЕРОЙ)
local ability_name = keys.abilityname -- тип string

if not player or not IsValidEntity(player) or not ability_name then return end -- строка которая при ложном вызове этой функции без игрока/абилки выйдет и не крашнет мод к хренам.

local hero = player:GetAssignedHero() -- получаем героя выбраного для игрока

if not hero then return end -- та же фигня, если у игрока не выбран герой, а он юзнет абилку допустим крипом, то гейммод без нее крашнется. 

hero:RemoveModifierByName("modifier_templar_assassin_refraction_damage")

end
 
Последнее редактирование модератором:
Боже, какие фильтры, ордеры, а не проще в каст фильтре абилки проверять модификаторы таргета??????
 
Cry, да елки, я прекрасно понимаю, где там id а где что. Да, там short, а не hscript, но на гитхабе все почему-то так мутят.

Вот твой ему ответ, который я так же поддерживал.

Но, как ты видишь, у него выскакивала та же самая ошибка.


UZzip, сейчас со свежей головой я могу задать следующий вопрос: у тебя никакой нпс, не являющися гером, случаем, не кастует с лету абилки?? Я про то, что эта функция у тебя железно на игроке только вызывается?
 
UZzip, сейчас со свежей головой я могу задать следующий вопрос: у тебя никакой нпс, не являющися гером, случаем, не кастует с лету абилки?? Я про то, что эта функция у тебя железно на игроке только вызывается?
Никто не кастует. У меня в карте 2 крипа с пассивкой и равшан.
 
Последнее редактирование модератором:
Код:
function OnUsedAbility(keys)
print('------------------------------------------------------------')
for i,x in pairs(keys) do print(i,x)
print('------------------------------------------------------------');
end
Чекни что там вылазит
 
Боже, какие фильтры, ордеры, а не проще в каст фильтре абилки проверять модификаторы таргета??????
проинструктируй, а то вроде вариантов нету других.
 
Последнее редактирование модератором:
Реклама: