Revive trigger not working

Charapanga

New Member
Reaction score
46
I'm trying to make a Slide ninja slide - like revive trigger...but it doesn't work...
the Unit/player variables are globals set in the init trigger..

JASS:
scope Revive initializer Init

private function FGg takes nothing returns nothing
    local unit u = GetEnumUnit()
    local player p = GetOwningPlayer(u)
    local location l = GetUnitLoc(u)
    local real x = GetLocationX(l)
    local real y = GetLocationY(l)
    local real face = GetUnitFacing(u)
    if p == Red then
    call ReviveHero(HeroRed, x, y, true)
    call SetUnitFacing(HeroRed, face)
    elseif p == Blue then
    call ReviveHero(HeroBlue, x, y, true)
    call SetUnitFacing(HeroBlue, face)
    elseif p == Teal then
    call ReviveHero(HeroTeal, x, y, true)
    call SetUnitFacing(HeroTeal, face)
    elseif p == Purple then
    call ReviveHero(HeroPurple, x, y, true)
    call SetUnitFacing(HeroPurple, face)
    elseif p == Yellow then
    call ReviveHero(HeroYellow, x, y, true)
    call SetUnitFacing(HeroYellow, face)
    elseif p == Orange then
    call ReviveHero(HeroOrange, x, y, true)
    call SetUnitFacing(HeroOrange, face)
    elseif p == Green then 
    call ReviveHero(HeroGreen, x, y, true)
    call SetUnitFacing(HeroGreen, face)
    elseif p == Pink then
    call ReviveHero(HeroPink, x, y, true)
    call SetUnitFacing(HeroPink, face)
    elseif p == Grey then
    call ReviveHero(HeroGrey, x, y, true)
    call SetUnitFacing(HeroGrey, face)
    endif 
    set u = null
    call RemoveLocation(l)
    set l = null
endfunction

private function Matching takes nothing returns boolean
    return GetUnitTypeId(GetFilterUnit()) == 'hfoo'
endfunction    

private function Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local location l = GetUnitLoc(u)
    local real x = GetLocationX(l)
    local real y = GetLocationY(l)
    local group g = CreateGroup()
    call GroupEnumUnitsInRange(g, x, y, 32, Filter(function Matching))
    call ForGroup(g, function FGg)
    call RemoveLocation(l)
    set l = null
    set u = null
    call DestroyGroup(g)
    set g = null
endfunction

//===========================================================================
private function Init takes nothing returns nothing
    set gg_trg_Revive = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Revive, function Actions )
endfunction

endscope

JASS:
scope Replacer initializer DM

private function Trig_Death_Marker_Conditions takes nothing returns boolean
    return GetUnitTypeId(GetTriggerUnit()) == 'HERO'
endfunction

private function Trig_Death_Marker_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local location l = GetUnitLoc(u)
    call CreateNUnitsAtLoc( 1, 'hfoo', GetOwningPlayer(u), l, GetRandomReal(1, 360))
    call TriggerRegisterUnitInRange(gg_trg_Revive, bj_lastCreatedUnit, 32, CondTrue)
    call RemoveLocation(l)
    set l = null
    set u = null
endfunction

//===========================================================================
private function DM takes nothing returns nothing
    local integer index
    local trigger t
    set index = 0
    set t = CreateTrigger(  )
    loop
        call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_DEATH, CondTrue)
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition( t, Condition( function Trig_Death_Marker_Conditions ) )
    call TriggerAddAction( t, function Trig_Death_Marker_Actions )
endfunction

endscope
 
Reaction score
341
Please learn to use arrays. Set all the players heroes in an array corresponding with their GetPlayerId(). so then you could just do...

JASS:
scope Revive initializer Init

private function FGg takes nothing returns nothing
    local unit u = GetEnumUnit()
    local player p = GetOwningPlayer(u)
    local location l = GetUnitLoc(u)
    local real x = GetLocationX(l)
    local real y = GetLocationY(l)
    local real face = GetUnitFacing(u)
    call ReviveHero(Hero[GetPlayerId(p)], x, y, true)
    call SetUnitFacing(Hero[GetPlayerId(p)], face)
    set u = null
    call RemoveLocation(l)
    set l = null
endfunction

private function Matching takes nothing returns boolean
    return GetUnitTypeId(GetFilterUnit()) == 'hfoo'
endfunction    

private function Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local location l = GetUnitLoc(u)
    local real x = GetLocationX(l)
    local real y = GetLocationY(l)
    local group g = CreateGroup()
    call GroupEnumUnitsInRange(g, x, y, 32, Filter(function Matching))
    call ForGroup(g, function FGg)
    call RemoveLocation(l)
    set l = null
    set u = null
    call DestroyGroup(g)
    set g = null
endfunction

//===========================================================================
private function Init takes nothing returns nothing
    set gg_trg_Revive = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Revive, function Actions )
endfunction

endscope


And your trigger isn't working because you have no event.
 

~GaLs~

† Ғσſ ŧħə ѕαĸε Φƒ ~Ğ䣚~ †
Reaction score
180
>>
JASS:
private function DM takes nothing returns nothing
    local integer index
    local trigger t
    set index = 0
    set t = CreateTrigger(  )
    loop
        call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_DEATH, CondTrue)
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition( t, Condition( function Trig_Death_Marker_Conditions ) )
    call TriggerAddAction( t, function Trig_Death_Marker_Actions )
endfunction

Why? Why mess up your initializer function?
Those messy things can be inlined up by 1 BJ function:
function TriggerRegisterAnyUnitEventBJ takes trigger trig, playerunitevent whichEvent returns nothing

*BJs' are bad, when they just inline 1 function in it.
In this case, this BJ are GOOD

Well, the code is quite messy, as I can't do much help as I don't familiar on how the code should go.

Here's an advise, make good use of the function BJDebugMsg and debug your code.
Use it to determind which part of the code is stucked and debug.
 

Trollvottel

never aging title
Reaction score
262
>>

Why? Why mess up your initializer function?
Those messy things can be inlined up by 1 BJ function:
function TriggerRegisterAnyUnitEventBJ takes trigger trig, playerunitevent whichEvent returns nothing

*BJs' are bad, when they just inline 1 function in it.
In this case, this BJ are GOOD

In this case, the BJ leaks ;)
 

Gwypaas

hook DoNothing MakeGUIUsersCrash
Reaction score
50
The leak is not noticible since the event only runs once :p

But dynamicly using TriggerRegisterAnyUnitEventBJ is pure suicide.
 

~GaLs~

† Ғσſ ŧħə ѕαĸε Φƒ ~Ğ䣚~ †
Reaction score
180
>>the BJ leaks
>>The leak is not noticible since the event only runs once

Thanks to Troll-Brain. +rep

*There are quite some BJs we can savely use.
Only exclude those which contain only 1 line of function calling in it... ;)
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top