CustomGames.ru - Dota 2 пользовательские игры

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

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Удаление бафа
« : 18-04-2016, 12:12:37 »
Как при получении одного бафа развеять другой?

Оффлайн Adam Smith

  • Друзья CG
  • 468
  • Мощь: 6
  • жрять жри его
Re: Удаление бафа
« Ответ #1 : 18-04-2016, 13:12:17 »
Как при получении одного бафа развеять другой?
Код
if caster:HasModifier("zerno") then
caster:RemoveModifierByName("zerno")
caster:AddNewModifier(ability, caster, "misha_mavashi", {})
By PG.Freeman

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Удаление бафа
« Ответ #2 : 18-04-2016, 13:41:55 »
Мне нужно удалить modifier_templar_assassin_refraction_damage как только появился modifier_templar_assassin_refraction_absorb


Код
function чё тут написать чтобы всё работало? типа герой применил способность такую то:

if caster:HasModifier("modifier_templar_assassin_refraction_damage") then
caster:RemoveModifierByName("modifier_templar_assassin_refraction_damage")

end

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: Удаление бафа
« Ответ #3 : 18-04-2016, 15:54:28 »
Так, давай по порядку:

как ты узнаешь, что твой герой получил modifier_templar_assassin_refraction_damage ?

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Удаление бафа
« Ответ #4 : 18-04-2016, 16:36:50 »
Илья, подглядел в вики что он именно так называется.
мне бы универсальный вариант, на отлов скастованного скила,
герой "мой герой" = применил способность "такую то способность"

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: Удаление бафа
« Ответ #5 : 18-04-2016, 16:58:52 »
Ну то есть, ты еще не решил предшествующий твоему вопросу об "удалении модификатора", вопрос: "как узнать, что на героя скастовали модификатор?

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Удаление бафа
« Ответ #6 : 18-04-2016, 18:07:29 »
Илья, выходит так.

Мне бы вот именно научиться отлавливать каст, это решит множество моих вопросов =)

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: Удаление бафа
« Ответ #7 : 18-04-2016, 18:37:11 »
Есть событие,
    dota_player_used_ability
Можешь глянуть тут его описание.

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Удаление бафа
« Ответ #8 : 18-04-2016, 19:27:44 »
глянул,
Цитировать
dota_player_used_ability
PlayerID ( short )
abilityname ( string )
что дальше?
я глянул варианты на гитхабе но все не вкурю самый простой способ...

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Удаление бафа
« Ответ #9 : 18-04-2016, 19:31:09 »
Код
['dota_player_used_ability'] = function( params, team )
local hero = PlayerResource:GetSelectedHeroEntity( params.PlayerID )

if InVision( hero, team ) then
return true
end

return false
end


? это можно переделать?

Оффлайн Adam Smith

  • Друзья CG
  • 468
  • Мощь: 6
  • жрять жри его
Re: Удаление бафа
« Ответ #10 : 18-04-2016, 19:34:27 »
Код
['dota_player_used_ability'] = function( params, team )
local hero = PlayerResource:GetSelectedHeroEntity( params.PlayerID )

if InVision( hero, team ) then
return true
end

return false
end


? это можно переделать?
Зачем тебе фильтр? :o
By PG.Freeman

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: Удаление бафа
« Ответ #11 : 18-04-2016, 23:22:49 »
Создаешь слушателя события, затем в функции, что будет твой слушатель вызывать, смотришь: наложил ли кто на цель модификатор или применена ли была абилка та. Ну и затем удаляешь.

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Удаление бафа
« Ответ #12 : 19-04-2016, 05:12:19 »
Код
ListenToGameEvent(' dota_player_used_ability', abilityname)
if caster:HasModifier("modifier_templar_assassin_refraction_damage") then
caster:RemoveModifierByName("modifier_templar_assassin_refraction_damage")

end
как то так?

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: Удаление бафа
« Ответ #13 : 19-04-2016, 07:00:38 »
Код
ListenToGameEvent(' dota_player_used_ability', abilityname)
if caster:HasModifier("modifier_templar_assassin_refraction_damage") then
caster:RemoveModifierByName("modifier_templar_assassin_refraction_damage")

end
как то так?
Нет не так
В твой InitGameMode тыкай
Код
ListenToGameEvent('dota_player_used_ability', OnUsedAbility, self)
Далее ниже в коде вне функций тыкай:
Код
function OnUsedAbility(keys)
local player = PlayerResource:GetPlayer( keys.PlayerID ) --hscript
local hero = PlayerResource:GetSelectedHeroEntity(keys.PlayerID) --hscript
local ability_name = keys.abilityname --string

--[[
тут будет все что тебе надо после того как абилка скастовалась. Узнать цель нельзя, этот слушатель возвращает момент КОГДА ИГРОК(PLAYER) скастовал скилл.
если хочешь узнать куда кастуется, кем, на что и т.д используй order(фильтр)
]]
end

Немного фильтров, в тот же InitGameMode
Код
local GameMode = GameRules:GetGameModeEntity()
GameMode:SetExecuteOrderFilter(OrderFilter, self)
Далее в коде
Код
function AngelArena:OrderFilter(keys)
local order_type = keys.order_type
if order_type == DOTA_UNIT_ORDER_CAST_TARGET then
--вызовется ПЕРЕД кастом на какую либо цель
   for key, value in pairs(keys) do
      print(key,value)
   end
end
return true -- если разрешить выполнение ордера то вернуть true, иначе вернуть false
end

Типы ордеров тебе существующих:
Код
DOTA_UNIT_ORDER_NONE
DOTA_UNIT_ORDER_MOVE_TO_POSITION
DOTA_UNIT_ORDER_MOVE_TO_TARGET
DOTA_UNIT_ORDER_ATTACK_MOVE
DOTA_UNIT_ORDER_ATTACK_TARGET
DOTA_UNIT_ORDER_CAST_POSITION
DOTA_UNIT_ORDER_CAST_TARGET
DOTA_UNIT_ORDER_CAST_TARGET_TREE
DOTA_UNIT_ORDER_CAST_NO_TARGET
DOTA_UNIT_ORDER_CAST_TOGGLE
DOTA_UNIT_ORDER_HOLD_POSITION
DOTA_UNIT_ORDER_TRAIN_ABILITY
DOTA_UNIT_ORDER_DROP_ITEM
DOTA_UNIT_ORDER_GIVE_ITEM
DOTA_UNIT_ORDER_PICKUP_ITEM
DOTA_UNIT_ORDER_PICKUP_RUNE
DOTA_UNIT_ORDER_PURCHASE_ITEM
DOTA_UNIT_ORDER_SELL_ITEM
DOTA_UNIT_ORDER_DISASSEMBLE_ITEM
DOTA_UNIT_ORDER_MOVE_ITEM
DOTA_UNIT_ORDER_CAST_TOGGLE_AUTO
DOTA_UNIT_ORDER_STOP
DOTA_UNIT_ORDER_TAUNT
DOTA_UNIT_ORDER_BUYBACK
DOTA_UNIT_ORDER_GLYPH
DOTA_UNIT_ORDER_EJECT_ITEM_FROM_STASH
DOTA_UNIT_ORDER_CAST_RUNE

Оффлайн UZzip

  • Продвинутый
  • 282
  • Мощь: 0
  • WorldEditor2
Re: Удаление бафа
« Ответ #14 : 19-04-2016, 08:05:23 »
С гейм модом разобрался =) спасибо плюсанул.

теперь осталось доделать функцию.

Код
function OnUsedAbility(keys)
local player = PlayerResource:GetPlayer( keys.PlayerID ) --hscript
local hero = PlayerResource:GetSelectedHeroEntity(keys.PlayerID) --hscript
local ability_name = keys.abilityname --string


if caster:HasModifier("modifier_templar_assassin_refraction_damage") then
caster:RemoveModifierByName("modifier_templar_assassin_refraction_damage")

end
end

или
Код
function OnUsedAbility(keys)
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

оба варианта не сработали, ну и не удивительно, потому что я всё ещё не понял(