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

Слушатель для модификатора

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

Оффлайн den4iccc

  • 382
  • Мощь: 6
Хочу сделать удаление модификатора через кастомную кнопку. Есть кнопка сделанная в панораме (рабочая, слушатель прописан в глобалке), есть абилка которая накладывает модификатор вот только не понимаю можно ли задействовать удаление модификатора (RemoveModifierByName)(в корне игры получается код на реагирование кнопки) тут:
Код
function GameMode:test(keys)
  for k,v in pairs(keys) do
    print(k,v)
--Notifications:TopToAll({text="#test", duration=3, style={color="green", ["font-size"]="45px"}})
  end
end
модификатор абилки написан на lua, имеет класс ability_datadriven(сама абилка написана на dd). Что только не пробовал никак не понимаю как это реализовать
« Последнее редактирование: 11-06-2017, 17:19:18 от den4iccc »

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #1 : 11-06-2017, 17:29:08 »
С кого нужно удалить модификатор?

Оффлайн den4iccc

  • 382
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #2 : 11-06-2017, 17:32:16 »
С главного героя

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #3 : 11-06-2017, 17:59:45 »
Код
PlayerResource:GetSelectedHeroEntity(int iPlayerID)

Оффлайн den4iccc

  • 382
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #4 : 11-06-2017, 18:16:54 »
Принцип понял, но он нивкакую не хочет регистрировать ключ
Код
function GameMode:OnAlly( keys )
    local playerID = keys.hero:GetPlayerID()
    local hero = PlayerResource:GetSelectedHeroEntity(playerID)

if hero:HasModifier("modifier_test")then
hero:RemoveModifierByName("modifier_test")
end

  for k,v in pairs(keys) do
    print(k,v)
--Notifications:TopToAll({text="#tew", duration=3, style={color="green", ["font-size"]="45px"}})

  end
end
« Последнее редактирование: 11-06-2017, 18:32:31 от den4iccc »

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #5 : 11-06-2017, 18:20:54 »
В таблице  есть ID игрока, который нажал кнопку. PlayerID вроде.

Оффлайн den4iccc

  • 382
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #6 : 11-06-2017, 18:32:10 »
В таблице  есть ID игрока, который нажал кнопку. PlayerID вроде.
Спасибо, +rep Сперва написал
Код
local hero = PlayerResource:GetSelectedHeroEntity(keys.PlayerID)
не врубался что не так написал

Код
function GameMode:OnAlly(keys)
local hero = PlayerResource:GetSelectedHeroEntity(keys.playerID)

if hero:HasModifier("modifier_test")then
hero:RemoveModifierByName("modifier_test")
end

  for k,v in pairs(keys) do
    print(k,v)
--Notifications:TopToAll({text="#tew", duration=3, style={color="green", ["font-size"]="45px"}})

  end
end

Оффлайн den4iccc

  • 382
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #7 : 11-06-2017, 18:45:35 »
Если не сложно можно вопрос: можно ли как нибудь скрыть кнопку если нету модификатора, а если есть то кнопка появляется ?
типа в gm пишу if HasModifier then style.visibility="collapse" что то в этом роде но как мне задать запрос из луа в js
« Последнее редактирование: 11-06-2017, 18:51:51 от den4iccc »

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #8 : 12-06-2017, 06:06:24 »
Сюда сервер не нужно привлекать. Все делается на JS.
Код
var hero = Players.GetPlayerHeroEntityIndex(Players.GetLocalPlayer())
if (Entities.HasModifier(hero,"modifier_test")
    myPanel.style.visibility = "visible"
else
    myPanel.style.visibility = "collapsed"


Entities.HasModifier

Оффлайн den4iccc

  • 382
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #9 : 12-06-2017, 13:25:46 »
Я не совсем понял, Entities.HasModifier - его же в API по js нету
Код
function Window_Box(event)
{
var hero = Players.GetPlayerHeroEntityIndex(Players.GetLocalPlayer());
if (Entities.HasModifier(hero,"modifier_test")
{
$("#Box").style.visibility = "visible";
}
else
{
$("#Box").style.visibility = "collapse";
}
GameEvents.SendCustomGameEventToServer("window_ally", window_ally );
}
А так по нажатию работает, но это не то что нужно:
Код
function Window_Box(event)
{
if ($("#Box").style.visibility=="collapse")
{
$("#Box").style.visibility = "visible";
}
else
{
$("#Box").style.visibility = "collapse";
}
GameEvents.SendCustomGameEventToServer("window_ally", window_ally );
}

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #10 : 12-06-2017, 13:50:55 »
В предыдущем сообщении ссылка под кодом.

Оффлайн den4iccc

  • 382
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #11 : 12-06-2017, 13:53:02 »
Да я видел но я не понимаю как его запихнуть сюда
Код
function Window_Box(event)
{
$.Msg("123")
var myPanel = $("#Box")
var hero = Players.GetPlayerHeroEntityIndex(Players.GetLocalPlayer());

Entities.HasModifier = function(entIndex, modifierName)
{
var nBuffs = Entities.GetNumBuffs(entIndex)
for (var i = 0; i < nBuffs; i++)
{
if (Buffs.GetName(entIndex, Entities.GetBuff(entIndex, i)) == modifierName)
return true
};
return false
};

if (Entities.HasModifier(hero, "modifier_test"))
    {
$.Msg("1")
    myPanel.style.visibility="visible";
    }
else if (!Entities.HasModifier(hero, "modifier_test"))
    {
$.Msg("2")
    myPanel.style.visibility="collapse";
}
//GameEvents.SendCustomGameEventToServer("window_ally", window_ally );
}


« Последнее редактирование: 13-06-2017, 10:47:10 от den4iccc »

Оффлайн MahouShoujo

  • Продвинутый
  • 201
  • Мощь: 3
Re: Слушатель для модификатора
« Ответ #12 : 12-06-2017, 14:55:06 »
Ну так почитай туториалы по джаваскрипту?

Оффлайн den4iccc

  • 382
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #13 : 13-06-2017, 10:33:38 »
Оказывается я сделал всё правильно только нужна проверка каждую секунду когда накладывается модификатор или снимается, кнопку сделал "onload" осталось проверку сделать как то через Game.GetGameTime()
« Последнее редактирование: 13-06-2017, 10:37:46 от den4iccc »

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Слушатель для модификатора
« Ответ #14 : 13-06-2017, 10:45:51 »
$.Schedule поищи на гитхабе.