| 09-07-2006, 03:20 PM | #1 |
Hello, well here i have a very big problem, as you can see in the code i have a function that creates a trigger, this trigger is used to know if a player makes a DUBLE KILL or TRIPLE KILL (double kill must happends within 5 secs of the first kill, and triple within 4 secs of the second kill) I made it this way because i have only 1 trigger to revive any hero (instead of 1 trigger per player to revive the heroes). The problem is in function "ReviveHero_BonusKillsReset" where i can't find a way to set variable iKiller so i can identify the player for which the trigger works. I can't set the waits betwen the revival time because the time is variable and it maybe lower than 9 seconds. Any idea of how can i fix this? or how can i identify the trigger with a specific player? JASS:function ReviveHero_BonusKillsReset takes nothing returns nothing call PolledWait(5.0) if (udg_BonusKills[iKiller] == 2) then //variable iKiller should be the player number for which the trigger is working call PolledWait(4.0) endif set udg_BonusKills[iKiller] = 0 //variable iKiller should be the player number for which the trigger is working call DestroyTrigger(GetTriggeringTrigger()) endfunction function ReviveHero_BonusKills takes integer iKiller, unit uDead returns nothing local trigger t = null set udg_BonusKills[iKiller] = udg_BonusKills[iKiller] + 1 if (udg_BonusKills[iKiller] > 2) then call DisplayTextToForce(udg_Players, (udg_Player_Colors[iDead] + GetPlayerName(pDead) + "|r|c00ff0000 made a TRIPLE KILL!!!|r")) set udg_BonusKills[iKiller] = 0 elseif (udg_BonusKills[iKiller] == 2) then call DisplayTextToForce(udg_Players, (udg_Player_Colors[iDead] + GetPlayerName(pDead) + "|r|c000000ff made a DOUBLE KILL!!!|r")) else set t = CreateTrigger() call TriggerAddAction(t, function ReviveHero_BonusKillsReset) call TriggerExecute(t) set t = null endif endfunction function Trig_Revive_Hero_Conditions takes nothing returns boolean if (IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true) then return true endif return false endfunction function Trig_Revive_Hero_Actions takes nothing returns nothing local unit uDead = GetTriggerUnit() local player pDead = GetOwningPlayer(GetTriggerUnit()) local player pKiller = GetOwningPlayer(GetKillingUnit()) local integer iDead = GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit())) local integer iKiller = GetConvertedPlayerId(GetOwningPlayer(GetKillingUnit())) local integer iWait = (GetHeroLevel(uDead) / 2) * GetRandomInt(1, 3) local timer t = CreateTimer() local timerdialog w = CreateTimerDialogBJ( t, GetPlayerName(pDead) ) local location l = GetPlayerStartLocationLoc(pDead) local integer iAux = udg_Team_Of_Player[iKiller] // Start Timer, Set Deaths call TimerStart(t, I2R(iWait), false, null) set udg_Deaths[iDead] = udg_Deaths[iDead] + 1 call MultiboardSetItemValueBJ(udg_KillBoard, 3, udg_KillBoardPos[iDead], I2S(udg_Deaths[iDead])) // Find Killer if ((iAux == 1 or iAux == 2) and iAux != udg_Team_Of_Player[iDead]) then if (pKiller != Player(5) and pKiller != Player(11)) then set udg_Kills[iKiller] = udg_Kills[iKiller] + 1 call MultiboardSetItemValueBJ( udg_KillBoard, 2, udg_KillBoardPos[iKiller], I2S(udg_Kills[iKiller]) ) call ReviveHero_BonusKills(iKiller, uDead) endif call DisplayTextToForce(udg_Players, (udg_Player_Colors[iDead] + GetPlayerName(pDead) + udg_DeathBanner[GetRandomInt(1, 18)] + udg_Player_Colors[iKiller] + GetPlayerName(pKiller) + "|r")) else call DisplayTextToForce(udg_Players, (udg_Player_Colors[iDead] + GetPlayerName(pDead) + "|r likes to die!")) endif // Start Wait call TriggerSleepAction(1.00) call SetUnitPositionLoc(uDead, l) call PolledWait(iWait) // Revive call ReviveHeroLoc(uDead, l, false) call PanCameraToTimedLocForPlayer(pDead, l, 0.60) // Clear Leaver if (IsPlayerInForce(pDead, udg_Leavers) == true) then call RemoveUnit(uDead) call ForceRemovePlayerSimple(pDead, udg_Leavers) endif // Clean call DestroyTimerDialog(w) call DestroyTimer(t) call RemoveLocation(l) set uDead = null set pDead = null set pKiller = null set w = null set t = null set l = null endfunction //=========================================================================== function InitTrig_Revive_Hero takes nothing returns nothing set gg_trg_Revive_Hero = CreateTrigger( ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(0), EVENT_PLAYER_UNIT_DEATH ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(1), EVENT_PLAYER_UNIT_DEATH ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(2), EVENT_PLAYER_UNIT_DEATH ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(3), EVENT_PLAYER_UNIT_DEATH ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(4), EVENT_PLAYER_UNIT_DEATH ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(6), EVENT_PLAYER_UNIT_DEATH ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(7), EVENT_PLAYER_UNIT_DEATH ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(8), EVENT_PLAYER_UNIT_DEATH ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(9), EVENT_PLAYER_UNIT_DEATH ) call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Hero, Player(10), EVENT_PLAYER_UNIT_DEATH ) call TriggerAddCondition( gg_trg_Revive_Hero, Condition( function Trig_Revive_Hero_Conditions ) ) call TriggerAddAction( gg_trg_Revive_Hero, function Trig_Revive_Hero_Actions ) endfunction Thanks! ![]() |
| 09-07-2006, 03:37 PM | #2 |
I don't really think this needs a dynamic trigger approach |
| 09-07-2006, 03:43 PM | #3 |
I would just have a timer for each player and start it when the player kills a unit, and increase a variable. When the timer expires simply set multikills or whatever to 0. I don't see any point in using a dynamic trigger in your code.. edit: damn, I write slowly today :( |
