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

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
Хочу сделать удаление модификатора через кастомную кнопку. Есть кнопка сделанная в панораме (рабочая, слушатель прописан в глобалке), есть абилка которая накладывает модификатор вот только не понимаю можно ли задействовать удаление модификатора (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). Что только не пробовал никак не понимаю как это реализовать
 
Последнее редактирование модератором:
С кого нужно удалить модификатор?
 
Код:
PlayerResource:GetSelectedHeroEntity(int iPlayerID)
 
Принцип понял, но он нивкакую не хочет регистрировать ключ
Код:
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
 
Последнее редактирование модератором:
В таблице есть ID игрока, который нажал кнопку. PlayerID вроде.
 
В таблице есть 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
 
Последнее редактирование модератором:
Если не сложно можно вопрос: можно ли как нибудь скрыть кнопку если нету модификатора, а если есть то кнопка появляется ?
типа в gm пишу if HasModifier then style.visibility="collapse" что то в этом роде но как мне задать запрос из луа в js
 
Последнее редактирование модератором:
Сюда сервер не нужно привлекать. Все делается на JS.
Код:
var hero = Players.GetPlayerHeroEntityIndex(Players.GetLocalPlayer())
if (Entities.HasModifier(hero,"modifier_test")
  myPanel.style.visibility = "visible"
else
  myPanel.style.visibility = "collapsed"
Entities.HasModifier
 
Последнее редактирование модератором:
Я не совсем понял, 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 ); 
}
 
Последнее редактирование модератором:
В предыдущем сообщении ссылка под кодом.
 
Да я видел но я не понимаю как его запихнуть сюда
Код:
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 ); 
}
 
Последнее редактирование модератором:
Оказывается я сделал всё правильно только нужна проверка каждую секунду когда накладывается модификатор или снимается, кнопку сделал "onload" осталось проверку сделать как то через Game.GetGameTime()
 
Последнее редактирование модератором:
$.Schedule поищи на гитхабе.
 
Блин уже часа 4 себе башню ломаю в Api ничего не могу найти подходящее для проверки, суть в том что не знаю чё делать с одной кнопкой "принять"
есть функция которая проверяет если наложен модификатор то вызывается 2 диалоговых окна типа принять и отклонить (как раз писал про неё несколько сообщений назад) по сути эта функция делает 2 кнопки видимыми. Вот на примере одной кнопки - "принять" (просто пустышка):
Код:
function Accept(event){
  $.Msg("Accept") 

  var plyID = Game.GetLocalPlayerID(); 

  var on_data = {		
    playerID: plyID, 
    msg: event     
  }

	//var myPanel = $("#Box")
	//myPanel.style.visibility="collapse";
	
  GameEvents.SendCustomGameEventToServer("on_ally", on_data ); 

}
надо как то сделать так что бы при нажатии на эту кнопку скрывалась панель которая и вызывает 2 эти кнопки.(пробовал через $.CancelScheduled в итоге получалось так что кнопки пропадали на долю секунд и появлялись снова из-за $.Schedule(0.5, Window_Box) или же что то с $.Schedule делать)
И есть вторая кнопка - "отменить" идентичная той только в этой в gm прописана проверка на наличие модификатора если есть то он удаляется по нажатию.
 
Последнее редактирование модератором:
Ну херню значит ты сделал, показывай как ты делал с CancelScheduled. Весь код.

По факту я вообще не понимаю нахрена нужна кнопка "принять" которая не делает ровным счетом ничего, кроме закрытия окна, но это уже дело твоё
 
Последнее редактирование модератором:
Да просто Денчик не всегда грамотно свои мысли излагает : ))
 
По факту я хотел сделать систему союзников оставалось сделать только всплывающее диалоговое окно на данный момент у меня реализовано так: у героя есть абилка которая вешает модификатор на противника тем самым делает его союзником, если на противнике весит модификатор то панорама отслеживает это действие через Schedule каждую секунду, если есть модификатор на локальном игроке, то появляется 2 окна принять и отклонить, если нажать отклонить, то модификатор удаляется и 2 окна пропадают (эти 2 окна вызвает через onload функция в панораме). И саму абилку перенести в кастомную панель абилок, грубо говоря перенести этот скилл рядом с таймером игры. Сейчас мне в голову пришла другая идея сделать в таблице K/D/A рядом радиобаттоны которые будут отвечать за то что бы противники становились союзниками(если радиобаттон активна то ты становишься союзником). Я просто не знаю как лучше будет сделать, как таблица в варике3 или как абилка которая вешает модификатор тем самым вызывает диалоговое окно.
Или через команду в чате например -ally 1,2,3 (номер игрока по списку, но проблема в том что нужно сделать массив и каждому игроку присвоить номер, только хз как. Ведь в api только локалки)
 
Реклама: