Cannot Access Scope function

Toriad

New Member
Reaction score
4
So I have a trigger.

Code:
scope Biokinetic initializer Init

    private function hasDefTarget takes nothing returns boolean
        return GetUnitAbilityLevel(GetSpellAbilityUnit(), 'deft') > 0
    endfunction
    
    private function hasCellWall takes nothing returns boolean
        call DisplayTextToForce(GetPlayersAll(), "hasCellWall")
        return GetUnitAbilityLevel(GetSpellAbilityUnit(), 'cell') > 0
    endfunction

    private function ChangeDefensiveTarget takes nothing returns nothing
        if (IsPlayerAlly(GetOwningPlayer(GetSpellAbilityUnit()),GetOwningPlayer(GetSpellTargetUnit()))) then
            set udg_BioDefensiveTarget = GetSpellTargetUnit()
            call DisplayTextToForce( GetForceOfPlayer(GetOwningPlayer(GetSpellAbilityUnit())), "You have selected " + GetUnitName(GetSpellTargetUnit()) + " as your new defensive target" )
        else
            call DisplayTextToForce( GetForceOfPlayer(GetOwningPlayer(GetSpellAbilityUnit())), "You can't make enemies your defensive target." )
        endif
        
        
    endfunction
    
    private function CellWall takes nothing returns nothing
        call DisplayTextToForce(GetPlayersAll(), "CellWallCAll")
        call SetUnitLifeBJ( udg_BioDefensiveTarget, ( GetUnitStateSwap(UNIT_STATE_LIFE, udg_BioDefensiveTarget) + ((5.0 * GetUnitAbilityLevel(GetSpellAbilityUnit(), 'deft')) * R2I(GetEventDamage())) ) )
    endfunction

    private function Init takes nothing returns nothing

    endfunction
    
    function setBioEvent takes nothing returns nothing
        local trigger cellwall = CreateTrigger()
        local trigger deftarget = CreateTrigger()
    
        call TriggerRegisterAnyUnitEventBJ(deftarget, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition(deftarget, Condition(function hasDefTarget))
        call TriggerAddAction(deftarget, function ChangeDefensiveTarget)
        call DisplayTextToForce(GetPlayersAll(), "Preparing to Register")
        call TriggerRegisterUnitEvent(cellwall, udg_BioUnit, EVENT_UNIT_DAMAGED)
        call DisplayTextToForce(GetPlayersAll(), "RegisterDestDeathInRegionEnum")
        call TriggerAddCondition(cellwall, Condition(function hasCellWall))
        call DisplayTextToForce(GetPlayersAll(), "Conditions")
        call TriggerAddAction(cellwall, function CellWall)
        call DisplayTextToForce(GetPlayersAll(), "ACtion")
    endfunction
    
endscope

and in order to avoid a logic error I need to call the setBioEvent from outside of the trigger.

Code:
Tavern Sentinel
    Events
        Unit - A unit Sells a unit
    Conditions
        GameMode Equal to MODE_Normal
        ((Sold unit) is A Hero) Equal to True
        ((Owner of (Sold unit)) is in PlayersSentinel) Equal to True
    Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                (Unit-type of (Sold unit)) Equal to Biokentic
            Then - Actions
                Set BioDefensiveTarget = (Sold unit)
                Set BioUnit = (Sold unit)
                Custom script:   call setBioEvent()
            Else - Actions
        Player Group - Pick every player in Players and do (Actions)
            Loop - Actions
                Player - Make (Unit-type of (Sold unit)) Unavailable for training/construction by (Picked player)
        Quest - Display to (All enemies of (Owner of (Sold unit))) the Hint message: (A player has chosen  + (Name of (Sold unit)))
        Set RandomData_Sentinel[(Load (String((Unit-type of (Sold unit)))) of Sentinel from (Last created game cache))] = RandomData_Sentinel[RandomTotal_Sentinel]
        Set RandomTotal_Sentinel = (RandomTotal_Sentinel - 1)
        Set Player_Already_Picked[(Player number of (Owner of (Sold unit)))] = (Player_Already_Picked[(Player number of (Owner of (Sold unit)))] + 1)

As you can see i'm attempting to call the function if the BioKinetic is chosen, however no matter what i do.

1. Making public function and calling with Biokinetic_setBioEvent
2. Making function normal and calling with setBioEvent

It keeps throwing me an Undeclared function setBioEvent. Anyone have any ideas?
 

WolfieeifloW

WEHZ Helper
Reaction score
372
Code:
call Biokinetic__setBioEvent()
?


EDIT: It seems to be just:
Code:
call setBioEvent()
It worked for me when I did:
Code:
Custom script:   call HeyGuys()
JASS:
function HeyGuys takes nothing returns nothing
endfunction
 

Waaaaagh

I lost all my rep and my title being a jerk
Reaction score
70
Make your scope a library. Scopes do not move things to the top of the script as libraries do.
 

Toriad

New Member
Reaction score
4
If i may ask then whats the point of using a scope.

I moved to libary worked fine :( thanks everyone. will rep when can.
 

Toriad

New Member
Reaction score
4
I honestly have no idea, i think maybe your scope was generated before the custom script.
 

WolfieeifloW

WEHZ Helper
Reaction score
372
Try moving your GUI trigger below the JASS one maybe (And revert back to a scope) .

Although if it works as a library, go for it;
But I remember there was a problem with libraries for certain things...
-wanders off into ponder-
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top