• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

[JASS] Trigger Array is creating too many of the same trigger.

Status
Not open for further replies.
Level 14
Joined
Jul 26, 2008
Messages
1,009
I decided to make a few triggers for a chat trigger help file.

I figured the simplest way to do it is make a trigger array since it needs to be created for all players except one. However it spams the message on the screen, so I assume the trigger is being made more than once for one player.

Any help on why? I can't seem to locate the issue.

JASS:
function Init takes nothing returns nothing
 local trigger array h
 local integer i = 0
    loop
        set h[i] = CreateTrigger()
        set i = i + 1
        exitwhen i == 10
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[0], Player(i), "-help", true )
            call TriggerAddAction( h[0], function HelpInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[1], Player(i), "-haven", true )
            call TriggerAddAction( h[1], function HavenInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[2], Player(i), "-slayer", true )
            call TriggerAddAction( h[2], function SlayerInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[3], Player(i), "-watcher", true )
            call TriggerAddAction( h[3], function WatcherInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[4], Player(i), "-units", true )
            call TriggerAddAction( h[4], function UnitsInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[5], Player(i), "-goal", true )
            call TriggerAddAction( h[5], function GoalInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[6], Player(i), "-temple", true )
            call TriggerAddAction( h[6], function TempleInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[7], Player(i), "-quests", true )
            call TriggerAddAction( h[7], function QuestsInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[8], Player(i), "-guards", true )
            call TriggerAddAction( h[8], function GuardsInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[9], Player(i), "-11th", true )
            call TriggerAddAction( h[9], function Info11th_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[10], Player(i), "-hint", true )
            call TriggerAddAction( h[10], function HintInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

    set i = 0
    loop
        set h[i] = null
        set i = i + 1
        exitwhen i == 10
    endloop
endfunction
 
Last edited:
Level 37
Joined
Mar 6, 2006
Messages
9,243
JASS:
 local integer i = 0
    loop
        set h[i] = CreateTrigger()
        set i = i + 1
        exitwhen i == 10
    endloop

^Creates
h[0]...h[9]

JASS:
set i = 0
    loop
        if i != 4 then
            call TriggerRegisterPlayerChatEvent( h[10], Player(i), "-hint", true )
            call TriggerAddAction( h[10], function HintInfo_Actions )
        endif
        set i = i + 1
     exitwhen i == 11
    endloop

^Tries to access h[10]
 
Level 21
Joined
Mar 19, 2009
Messages
444
Nothing to solve your problem (even if I do not understand in which case an array trigger is usefull), a simple system I use for my maps. Using Help command as well ,)

(In the case you would need this)


JASS:
library HelpCenter initializer init needs TimerUtils, TextDisplay

globals
    private constant real DUR = 30. //the text will be displayed during DUR seconds
    private constant string COM = "-help" //string entered to run the trigger
    private constant string LINE = "|c00AFAAFF"+"=============================================================="+"|r"//To separate text
    private constant string NAME = "|c00AFAAFF"+"Help Center"+"|r" //Title displayed each time the trigger starts
    private constant string INFO = "Enter -help XXXX where XXXX is one of the following key words:" //Text displayed then
    string array HelpName [30] //The real title of each keyword, there, 30 keywords maximum
    string array HelpText [30][15] //The content of each keywords: up to 15 sentences wroten
    constant integer HelpTextMax = 14//Maximum amount of sentence displayed
    integer HelpMax = 0 
    private StringTable Str_table 
    private integer HelpCommand_length 
    private constant integer AMOUNT = 10
endglobals

    //! textmacro t__HelpSystem_Init takes TEXT_ID, TITLE1 ,TITLE2
    set Str_table["$TEXT_ID$"] = $TEXT_ID$
    set Str_table["$TITLE1$"] = $TEXT_ID$
    set Str_table["$TITLE2$"] = $TEXT_ID$ 
    //! endtextmacro 

    private function SetTextVariables takes nothing returns nothing
        local integer i = 1
            //Respect the order of letters is better.
            //
            set HelpName[i]= "Armored Soldier"
            set HelpText[i][0]="Level up Nanite Diffusion and EM Wave"
            //! runtextmacro t__HelpSystem_Init("i","armored soldier","as")
            set i = i + 1
            set HelpName[i]= "Biologist"
            set HelpText[i][0]="Build Biology (the ultimate, spellbook) to level 3 as soon as possible."
            set HelpText[i][1]= "Level 3 Biology gives you defibrillation. This skill can revive dead allies."
            set HelpText[i][2]= "Then level up Ion Solution."
            //! runtextmacro t__HelpSystem_Init("i","biologist","bio")
            set i = i + 1
            //
            set HelpName[i]= "Bot"
            set HelpText[i][0]="A hostbot is set up on all realms except Asia. It is called RC601."
            set HelpText[i][1]="Add him as a friend on Battlenet: /f add RC601"
            //! runtextmacro t__HelpSystem_Init("i","bot","bots")
            set i = i + 1
            //
            set HelpName[i]= "Commands"
            set HelpText[i][0]="Enter F9 to get the command list"
            set HelpText[i][1]="There are game commands, camera commands, save and load commands etc..."
            //! runtextmacro t__HelpSystem_Init("i","command","commands")
            set i = i + 1
            //
            set HelpName[i]= "Experience"
            set HelpText[i][0]="Experience is the point system which allows you to receive ranks"
            set HelpText[i][1]="Experience points are earnable with two ways"
            set HelpText[i][2]="Kills: each class has a kill coefficient to get xp, such as 5 kills = 1 xp point for biologist or 15 kills = 1 xp point for cleaning force"
            set HelpText[i][3]="Enter -report to find out the kill factor for your class."
            set HelpText[i][4]="Quests: each completed quest gives experience to all players."
            set HelpText[i][5]="To save your experience type -save and either print screen or write down the code and keep it in a safe place."
            set HelpText[i][6]="To load your previous saved experience by entering -load and typing in your code. (make sure you have the correct order"
            //! runtextmacro t__HelpSystem_Init("i","experience","xp")            
            set i = i + 1
            //
            set HelpName[i]= "Items"
            set HelpText[i][0]="Look for small grey boxes (Equipment Crates)"
            set HelpText[i][1]="Check minimap for black dots (unexplored)"
            set HelpText[i][2]="If you see a box shoot it or use the skill called Open Equipment Crate"
            set HelpText[i][3]="Most items stack or combine"
            set HelpText[i][4]="Use satchels only on bosses and caves"
            set HelpText[i][5]="To help find Equiptment Crates hold Alt and look for small green health bars. To open crates press z plus a to open the crate or you can press a and attack the crate to open it"
            //! runtextmacro t__HelpSystem_Init("i","item","items")            
            set i = i + 1
            //
            set HelpName[i]= "Firebat"
            set HelpText[i][0]="Level up Field Agent, Burst fire and Fire Mastery"
            //! runtextmacro t__HelpSystem_Init("i","firebat","fb")
            set i = i + 1
            //
            set HelpName[i]= "Force Recon"
            set HelpText[i][0]="If you build the skill Sentry, after level 2, you will not take benefit of it without leveling your class spellbook"
            set HelpText[i][1]="Because higher levels of sentries grants abilities to the sentry which needs this spellbook"
            //! runtextmacro t__HelpSystem_Init("i","force recon","fr")
            set i = i + 1
            //
            set HelpName[i]= "Forum"
            set HelpText[i][0]="You are welcome on the forum to report bugs or make suggestions."
            set HelpText[i][1]="http://www.jk2pach.com"
            //! runtextmacro t__HelpSystem_Init("i","forum","board")
            set i = i + 1
            //
            set HelpName[i]= "Mechanist"
            set HelpText[i][0]="Build Machinery Expertise(the ultimate, spellbook) to level 6 as soon as possible."
            set HelpText[i][1]= "Level 6 Machinery Expertise grants Bio Satellite. This skill gives all players shared vision."
            set HelpText[i][2]= "You should level up the Automatic Turret then."
            //! runtextmacro t__HelpSystem_Init("i","mechanist","mec")
            set i = i + 1
            //
            set HelpName[i]= "Medals"
            set HelpText[i][0]="Medals are awarned thanks to the achievement of the secondary objective and other specific heroic actions."
            set HelpText[i][1]= "Each medal brings +5% health points / +1% mp regeneration / +2 speed of movement / +1% attack rate"
            set HelpText[i][2]= "Medals are really harder to get than higher ranks and only pure soldiers deserve them."
            //! runtextmacro t__HelpSystem_Init("i","medals","medal")
            set i = i + 1
            //
            set HelpName[i]= "Quests"
            set HelpText[i][0]="RC601 consists of several quests"
            set HelpText[i][1]="Quests are grouped by Chapters"
            set HelpText[i][2]= "Each finished quest has a chance to spawn a boss"
            set HelpText[i][3]="Quest will have different objective: kill enemies, escort convoy etc..."
            set HelpText[i][4]="Each quest ended has a chance to spawn a boss"
            //! runtextmacro t__HelpSystem_Init("i","quest","quests")
            set i = i + 1
            //
            set HelpName[i]= "Rank"
            set HelpText[i][0]="Ranks are earned with experience points"
            set HelpText[i][1]="Each ranks grants more Hero class to play and bonus"
            set HelpText[i][2]="Each rank earned means: +5% health points / +2% mp regeneration / +5 speed of movement / +2% attack rate"
            set HelpText[i][3]="Each ranks require a minimal amount to be granted"
            set HelpText[i][4]="See Experience to get the way to earn more experience"
            set HelpText[i][5]="Enter -report to know your class"
            //! runtextmacro t__HelpSystem_Init("i","rank","ranks")
            set i = i + 1
            //
            set HelpName[i]= "Security Officer"
            set HelpText[i][0]="Level up the spellbook (max) then level up the laser acquisition"
            //! runtextmacro t__HelpSystem_Init("i","security officer","so")
            set i = i + 1
            //
            set HelpName[i]= "Tips"
            set HelpText[i][0]="Recruit Rule 1: do NOT attack teammates/friendly/neutrals (Friendly Fire)"
            set HelpText[i][1]="Recruit Rule 2: do NOT use AOE weapons (Grenades,Mines,Chains,Claymores)"
            set HelpText[i][2]="Recruit Rule 3: do NOT tank creeps"
            set HelpText[i][3]="Recruit Rule 4: do NOT take all items (Share them, they can be crafted)"
            set HelpText[i][4]="Recruit Rule 5: Follow the instructions of higher ranked players."
            set HelpText[i][5]="Z+N: Nightvision: +Sight range"
            set HelpText[i][6]="Z+T: Sprint"
            set HelpText[i][7]="Z+Q: Jump on the target point. "
            set HelpText[i][8]="Look to minimap pings for mission objectives."
            //! runtextmacro t__HelpSystem_Init("i","tip","tips")
            set i = i + 1
            //
            set HelpMax = i
    endfunction

    private function Conditions takes nothing returns boolean
        local player whichPlayer = GetTriggerPlayer()
        local string text = GetEventPlayerChatString() 
        local integer string_length = StringLength(text) 
        local integer index 
        local integer i = 0       
            if SubString(text,0,HelpCommand_length) == COM then            
                set text = SubString(text,HelpCommand_length+1,string_length)                
                if text != null then
                    set index = Str_table[text] 
                    call DisplayTimedTextToPlayer(whichPlayer,0.,0.,DUR,LINE)
                    call DisplayTimedTextToPlayer(whichPlayer,0.,0.,DUR,"|c00AFAAFF"+HelpName[index]+"|r")
                    loop
                        exitwhen i > HelpTextMax                        
                        if HelpText[index][i]!= null then
                            call DisplayTimedTextToPlayer(whichPlayer,0.,0.,DUR,HelpText[index][i])
                        endif
                        set i = i + 1
                    endloop                    
                else                
                    set text = "Keywords: "
                    call DisplayTimedTextToPlayer(whichPlayer,0.,0.,DUR,LINE)
                    call DisplayTimedTextToPlayer(whichPlayer,0.,0.,DUR,NAME)
                    call DisplayTimedTextToPlayer(whichPlayer,0.,0.,DUR,INFO)                    
                    loop
                        exitwhen i > HelpMax                        
                        if HelpName[i]!= null then
                            set text = text+" - "+HelpName[i]
                        endif                        
                        set i = i + 1
                    endloop                    
                    call DisplayTimedTextToPlayer(whichPlayer,0.,0.,DUR,text)
                    call DisplayTimedTextToPlayer(whichPlayer,0.,0.,DUR,LINE)                
                endif                
            endif
            set text = null
            set whichPlayer = null
            return false            
    endfunction
    
    private function Advert takes nothing returns nothing
        call ReleaseTimer(GetExpiredTimer())
        call StoryDisplay("Game","Enter -help to activate help center")
    endfunction
    
    function StartHelpSpam takes nothing returns nothing
        local integer i = 0
        local timer t = null
            loop
            exitwhen i > AMOUNT
                set t = NewTimer()
                call TimerStart(t,(15.+i*15.),false,function Advert)
                set i = i + 1
            endloop
    endfunction

    private function init takes nothing returns nothing
        local trigger t = CreateTrigger()
        local integer i = 0
            set Str_table = StringTable.create() 
            call SetTextVariables()
            set HelpCommand_length = StringLength(COM)  
            set i = 0
            loop
                exitwhen i > MAXPLAYER
                call TriggerRegisterPlayerChatEvent( t, Player(i), COM, false )
                set i = i + 1
            endloop
            call TriggerAddCondition(t, Condition(function Conditions))
    endfunction  

endlibrary
 
Status
Not open for further replies.
Top