• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

<SOLVED!> Adding a boolean to this code? Please help!

Status
Not open for further replies.

Sverkerman

Hosted Project: BoW
Level 17
Joined
Feb 28, 2010
Messages
1,325
Hi and thank you for reading my thread :)
I want to edit this dialog so that the button for Save only shows up if udg_Boolean_CanSave==True and so that the button for Load only shows up if udg_Boolean_CanLoad==True.

How would I go about doing this? I've never touched Vjass before :(

I'd be extremely greatful if someone could help me to do this :)
@Illidan(Evil)X (mentioned you as you have helped me out before, not sure if you have time tho.)

Here is the code:

Code:
scope SampleDialogSystem initializer Init
   
    globals
        private dialog array Dialog
        private button array Button
        private button array PlayerButton[25][10]
       
        private trigger T=CreateTrigger()
    endglobals
   
    private function GetTitle takes player p, integer slot returns string
        local string s = SaveFile(slot).getTitle()
        if (s == null or s == "") then
            return "Empty"
        endif
        if (StringLength(s) > 32) then
            set s = SubString(s, 0, 26) + "...)"
        endif
        return s
    endfunction
   
    private function OnButtonClick takes nothing returns boolean
        local button b = GetClickedButton()
        local player p = GetTriggerPlayer()
        local string s = ""
        local integer pid = GetPlayerId(p)
        local boolean safe = (File.ReadEnabled and GetLocalPlayer() == p)
        local User u = User(pid)
        local integer curSlot = SaveHelper.GetSaveSlot(u)
       
        if (b == Button[(u.id*12)+0]) then // save char
            if (curSlot == 0) then
                call DialogClear(Dialog[(u.id*12)+2])
                call DialogSetMessage(Dialog[(u.id*12)+2], "|cffff8000Save Character|r")
               
                if (not safe) then
                    call ClearTextMessages()
                    call DisplayTimedTextToPlayer(p, 0, 0, 60000, udg_LocalFiles_WarningMessage)
                endif
               
                set PlayerButton[pid][10] = DialogAddButton(Dialog[(u.id*12)+2], "|cffffcc00[1] |cffffffff" + GetTitle(p, 1) + "|r", 0)
                set PlayerButton[pid][11] = DialogAddButton(Dialog[(u.id*12)+2], "|cffffcc00[2] |cffffffff" + GetTitle(p, 2), 0)
                set PlayerButton[pid][12] = DialogAddButton(Dialog[(u.id*12)+2], "|cffffcc00[3] |cffffffff" + GetTitle(p, 3), 0)
                set PlayerButton[pid][13] = DialogAddButton(Dialog[(u.id*12)+2], "|cffffcc00[4] |cffffffff" + GetTitle(p, 4), 0)
                set PlayerButton[pid][14] = DialogAddButton(Dialog[(u.id*12)+2], "|cffffcc00[5] |cffffffff" + GetTitle(p, 5), 0)
               
                call DialogAddButton(Dialog[(u.id*12)+2], "|cffff8000Close", 0)
                call DialogDisplay(GetLocalPlayer(), Dialog[(u.id*12)+2], safe)
            else
                call SaveCharToSlot(udg_SavePlayerHero[pid], curSlot, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
                call DisplayTextToPlayer(u.toPlayer(), 0, 0, "|cffffcc00[" + I2S(curSlot) + "]|r " + SaveHelper.GetUnitTitle(SaveHelper.GetUserHero(u)))
            endif
        elseif(b == Button[(u.id*12)+1]) then // load char
            if (not safe) then
                call ClearTextMessages()
                call ClearTextMessages()
                call DisplayTimedTextToPlayer(p, 0, 0, 60000, udg_LocalFiles_WarningMessage)
            endif
       
            call DialogClear(Dialog[(u.id*12)+1])
            call DialogSetMessage(Dialog[(u.id*12)+1], "|cffff8000Load Character|r")
           
            set PlayerButton[pid][20] = DialogAddButton(Dialog[(u.id*12)+1], "|cffffcc00Autosave - |cffffffff" + GetTitle(p, 10), 0)
            set PlayerButton[pid][0] = DialogAddButton(Dialog[(u.id*12)+1], "|cffffcc00[1] |cffffffff" + GetTitle(p, 1), 0)
            set PlayerButton[pid][1] = DialogAddButton(Dialog[(u.id*12)+1], "|cffffcc00[2] |cffffffff" + GetTitle(p, 2), 0)
            set PlayerButton[pid][2] = DialogAddButton(Dialog[(u.id*12)+1], "|cffffcc00[3] |cffffffff" + GetTitle(p, 3), 0)
            set PlayerButton[pid][3] = DialogAddButton(Dialog[(u.id*12)+1], "|cffffcc00[4] |cffffffff" + GetTitle(p, 4), 0)
            set PlayerButton[pid][4] = DialogAddButton(Dialog[(u.id*12)+1], "|cffffcc00[5] |cffffffff" + GetTitle(p, 5), 0)
           
            call DialogAddButton(Dialog[(u.id*12)+1], "|cffff8000Close", 0)
            call DialogDisplay(p, Dialog[(u.id*12)+1], safe)
        elseif(b == Button[(u.id*12)+2]) then // load char
            if (not safe) then
                call ClearTextMessages()
                call DisplayTimedTextToPlayer(p,0,0,60000, udg_LocalFiles_WarningMessage)
            endif
           
            call DialogClear(Dialog[(u.id*12)+3])
            call DialogSetMessage(Dialog[(u.id*12)+3], "|cffff8000Delete Character|r")
           
            set PlayerButton[pid][5] = DialogAddButton(Dialog[(u.id*12)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 1), 0)
            set PlayerButton[pid][6] = DialogAddButton(Dialog[(u.id*12)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 2), 0)
            set PlayerButton[pid][7] = DialogAddButton(Dialog[(u.id*12)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 3), 0)
            set PlayerButton[pid][8] = DialogAddButton(Dialog[(u.id*12)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 4), 0)
            set PlayerButton[pid][9] = DialogAddButton(Dialog[(u.id*12)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 5), 0)
           
            call DialogAddButton(Dialog[(u.id*12)+3], "|cffff8000Close", 0)
            call DialogDisplay(p, Dialog[(u.id*12)+3], safe)
        elseif(b == PlayerButton[pid][0]) then
            call LoadSaveSlot(p, 1)
        elseif(b == PlayerButton[pid][1]) then
            call LoadSaveSlot(p, 2)
        elseif(b == PlayerButton[pid][2]) then
            call LoadSaveSlot(p, 3)
        elseif(b == PlayerButton[pid][3]) then
            call LoadSaveSlot(p, 4)
        elseif(b == PlayerButton[pid][4]) then
            call LoadSaveSlot(p, 5)
        elseif(b == PlayerButton[pid][20]) then
            call LoadSaveSlot(p, 10)
        elseif(b == PlayerButton[pid][5]) then
            call DeleteCharSlot(p, 1)
        elseif(b == PlayerButton[pid][6]) then
            call DeleteCharSlot(p, 2)
        elseif(b == PlayerButton[pid][7]) then
            call DeleteCharSlot(p, 3)
        elseif(b == PlayerButton[pid][8]) then
            call DeleteCharSlot(p, 4)
        elseif(b == PlayerButton[pid][9]) then
            call DeleteCharSlot(p, 5)
        elseif(b == PlayerButton[pid][10]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 1, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        elseif(b == PlayerButton[pid][11]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 2, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        elseif(b == PlayerButton[pid][12]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 3, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        elseif(b == PlayerButton[pid][13]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 4, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        elseif(b == PlayerButton[pid][14]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 5, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        endif
       
        return false
    endfunction
   
    private function ShowMenu takes nothing returns boolean
        local player p = GetTriggerPlayer()
        local integer i = GetPlayerId(p)
       
        if (GetLocalPlayer() == p) then
            call DialogSetMessage(Dialog[(i*12)+0], "|cffff8000Main Menu|r")
            call DialogDisplay(p, Dialog[(i*12)+0], true)
        endif
       
        return false
    endfunction
   
    private function InitDialog takes nothing returns nothing
        local integer i = 0
        local trigger t = CreateTrigger()
        local User u
       
        loop
            exitwhen i == User.AmountPlaying
           
            set u = User.fromPlaying(i)
           
            set Dialog[(u.id*12)+0] = DialogCreate()
            set Button[(u.id*12)+0] = DialogAddButton(Dialog[(u.id*12)+0], "|cffffcc00Save Character", 0)
            set Button[(u.id*12)+1] = DialogAddButton(Dialog[(u.id*12)+0], "|cffffcc00Load Character", 0)
            set Button[(u.id*12)+2] = DialogAddButton(Dialog[(u.id*12)+0], "|cffffcc00Delete Character", 0)
            call DialogAddButton(Dialog[(u.id*12)+0], "|cffff8000Close", 0)

            set Dialog[(u.id*12)+1] = DialogCreate()
            set Dialog[(u.id*12)+2] = DialogCreate()
            set Dialog[(u.id*12)+3] = DialogCreate()
       
            call TriggerRegisterDialogEvent(t, Dialog[(u.id*12)+0])
            call TriggerRegisterDialogEvent(t, Dialog[(u.id*12)+1])
            call TriggerRegisterDialogEvent(t, Dialog[(u.id*12)+2])
            call TriggerRegisterDialogEvent(t, Dialog[(u.id*12)+3])
       
            set i = i + 1
        endloop
       
        call TriggerAddCondition(t, Filter(function OnButtonClick))
    endfunction
   
    private function Init takes nothing returns nothing
        local trigger t  = CreateTrigger()
        local integer i  = 0
       
        loop
            //set CurrentCharSaveSlot[i] = -1
            call TriggerRegisterPlayerEvent(t, Player(i), EVENT_PLAYER_END_CINEMATIC)
            set i = i + 1
           
            exitwhen i == bj_MAX_PLAYER_SLOTS
        endloop
       
        call TriggerAddCondition(t, Filter(function ShowMenu))

        call TimerStart(CreateTimer(), 0, false, function InitDialog)
    endfunction

endscope
 
To the rescue!
JASS:
scope SampleDialogSystem initializer Init
 
    globals
        private dialog array Dialog
        private button array Button
        private button array PlayerButton[25][10]
   
        private trigger T=CreateTrigger()
    endglobals
 
    private function GetTitle takes player p, integer slot returns string
        local string s = SaveFile(slot).getTitle()
        if (s == null or s == "") then
            return "Empty"
        endif
        if (StringLength(s) > 32) then
            set s = SubString(s, 0, 26) + "...)"
        endif
        return s
    endfunction
 
    private function OnButtonClick takes nothing returns boolean
        local button b = GetClickedButton()
        local player p = GetTriggerPlayer()
        local string s = ""
        local integer pid = GetPlayerId(p)
        local boolean safe = (File.ReadEnabled and GetLocalPlayer() == p)
        local User u = User(pid)
        local integer curSlot = SaveHelper.GetSaveSlot(u)
   
        if (b == Button[(u.id*24)+0]) then // save char
            if (curSlot == 0) then
                call DialogClear(Dialog[(u.id*24)+2])
                call DialogSetMessage(Dialog[(u.id*24)+2], "|cffff8000Save Character|r")
           
                if (not safe) then
                    call ClearTextMessages()
                    call DisplayTimedTextToPlayer(p, 0, 0, 60000, udg_LocalFiles_WarningMessage)
                endif
           
                set PlayerButton[pid][10] = DialogAddButton(Dialog[(u.id*24)+2], "|cffffcc00[1] |cffffffff" + GetTitle(p, 1) + "|r", 0)
                set PlayerButton[pid][11] = DialogAddButton(Dialog[(u.id*24)+2], "|cffffcc00[2] |cffffffff" + GetTitle(p, 2), 0)
                set PlayerButton[pid][12] = DialogAddButton(Dialog[(u.id*24)+2], "|cffffcc00[3] |cffffffff" + GetTitle(p, 3), 0)
                set PlayerButton[pid][13] = DialogAddButton(Dialog[(u.id*24)+2], "|cffffcc00[4] |cffffffff" + GetTitle(p, 4), 0)
                set PlayerButton[pid][14] = DialogAddButton(Dialog[(u.id*24)+2], "|cffffcc00[5] |cffffffff" + GetTitle(p, 5), 0)
           
                call DialogAddButton(Dialog[(u.id*24)+2], "|cffff8000Close", 0)
                call DialogDisplay(GetLocalPlayer(), Dialog[(u.id*24)+2], safe)
            else
                call SaveCharToSlot(udg_SavePlayerHero[pid], curSlot, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
                call DisplayTextToPlayer(u.toPlayer(), 0, 0, "|cffffcc00[" + I2S(curSlot) + "]|r " + SaveHelper.GetUnitTitle(SaveHelper.GetUserHero(u)))
            endif
        elseif(b == Button[(u.id*24)+1]) then // load char
            if (not safe) then
                call ClearTextMessages()
                call ClearTextMessages()
                call DisplayTimedTextToPlayer(p, 0, 0, 60000, udg_LocalFiles_WarningMessage)
            endif
   
            call DialogClear(Dialog[(u.id*24)+1])
            call DialogSetMessage(Dialog[(u.id*24)+1], "|cffff8000Load Character|r")
       
            set PlayerButton[pid][20] = DialogAddButton(Dialog[(u.id*24)+1], "|cffffcc00Autosave - |cffffffff" + GetTitle(p, 10), 0)
            set PlayerButton[pid][0] = DialogAddButton(Dialog[(u.id*24)+1], "|cffffcc00[1] |cffffffff" + GetTitle(p, 1), 0)
            set PlayerButton[pid][1] = DialogAddButton(Dialog[(u.id*24)+1], "|cffffcc00[2] |cffffffff" + GetTitle(p, 2), 0)
            set PlayerButton[pid][2] = DialogAddButton(Dialog[(u.id*24)+1], "|cffffcc00[3] |cffffffff" + GetTitle(p, 3), 0)
            set PlayerButton[pid][3] = DialogAddButton(Dialog[(u.id*24)+1], "|cffffcc00[4] |cffffffff" + GetTitle(p, 4), 0)
            set PlayerButton[pid][4] = DialogAddButton(Dialog[(u.id*24)+1], "|cffffcc00[5] |cffffffff" + GetTitle(p, 5), 0)
       
            call DialogAddButton(Dialog[(u.id*24)+1], "|cffff8000Close", 0)
            call DialogDisplay(p, Dialog[(u.id*24)+1], safe)
        elseif(b == Button[(u.id*24)+2]) then // load char
            if (not safe) then
                call ClearTextMessages()
                call DisplayTimedTextToPlayer(p,0,0,60000, udg_LocalFiles_WarningMessage)
            endif
       
            call DialogClear(Dialog[(u.id*24)+3])
            call DialogSetMessage(Dialog[(u.id*24)+3], "|cffff8000Delete Character|r")
       
            set PlayerButton[pid][5] = DialogAddButton(Dialog[(u.id*24)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 1), 0)
            set PlayerButton[pid][6] = DialogAddButton(Dialog[(u.id*24)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 2), 0)
            set PlayerButton[pid][7] = DialogAddButton(Dialog[(u.id*24)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 3), 0)
            set PlayerButton[pid][8] = DialogAddButton(Dialog[(u.id*24)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 4), 0)
            set PlayerButton[pid][9] = DialogAddButton(Dialog[(u.id*24)+3], "|cffff0000[X] - |cffffffff" + GetTitle(p, 5), 0)
       
            call DialogAddButton(Dialog[(u.id*24)+3], "|cffff8000Close", 0)
            call DialogDisplay(p, Dialog[(u.id*24)+3], safe)
        elseif(b == PlayerButton[pid][0]) then
            call LoadSaveSlot(p, 1)
        elseif(b == PlayerButton[pid][1]) then
            call LoadSaveSlot(p, 2)
        elseif(b == PlayerButton[pid][2]) then
            call LoadSaveSlot(p, 3)
        elseif(b == PlayerButton[pid][3]) then
            call LoadSaveSlot(p, 4)
        elseif(b == PlayerButton[pid][4]) then
            call LoadSaveSlot(p, 5)
        elseif(b == PlayerButton[pid][20]) then
            call LoadSaveSlot(p, 10)
        elseif(b == PlayerButton[pid][5]) then
            call DeleteCharSlot(p, 1)
        elseif(b == PlayerButton[pid][6]) then
            call DeleteCharSlot(p, 2)
        elseif(b == PlayerButton[pid][7]) then
            call DeleteCharSlot(p, 3)
        elseif(b == PlayerButton[pid][8]) then
            call DeleteCharSlot(p, 4)
        elseif(b == PlayerButton[pid][9]) then
            call DeleteCharSlot(p, 5)
        elseif(b == PlayerButton[pid][10]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 1, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        elseif(b == PlayerButton[pid][11]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 2, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        elseif(b == PlayerButton[pid][12]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 3, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        elseif(b == PlayerButton[pid][13]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 4, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        elseif(b == PlayerButton[pid][14]) then
            call SaveCharToSlot(udg_SavePlayerHero[pid], 5, GetHeroSaveCode(SaveHelper.GetUserHero(u)))
        endif
   
        return false
    endfunction
 
    private function ShowMenu takes nothing returns boolean
        local player p = GetTriggerPlayer()
        local integer i = GetPlayerId(p)
   
        call DialogClear(Dialog[(i*24)+0])
        call DialogSetMessage(Dialog[(i*24)+0], "|cffff8000Main Menu|r")
        if (udg_Boolean_CanSave[i + 1]) then
            set Button[(i*24)+0] = DialogAddButton(Dialog[(i*24)+0], "|cffffcc00Save Character", 0)
        endif
        if (udg_Boolean_CanLoad[i + 1]) then
            set Button[(i*24)+1] = DialogAddButton(Dialog[(i*24)+0], "|cffffcc00Load Character", 0)
        endif
        set Button[(i*24)+2] = DialogAddButton(Dialog[(i*24)+0], "|cffffcc00Delete Character", 0)
        call DialogAddButton(Dialog[(i*24)+0], "|cffff8000Close", 0)
   
        //if (GetLocalPlayer() == p) then
            call DialogDisplay(p, Dialog[(i*24)+0], true)
        //endif
   
        return false
    endfunction
 
    private function InitDialog takes nothing returns nothing
        local integer i = 0
        local trigger t = CreateTrigger()
        local User u
   
        loop
            exitwhen i == User.AmountPlaying
       
            set u = User.fromPlaying(i)
       
            set Dialog[(u.id*24)+0] = DialogCreate()
            set Dialog[(u.id*24)+1] = DialogCreate()
            set Dialog[(u.id*24)+2] = DialogCreate()
            set Dialog[(u.id*24)+3] = DialogCreate()
   
            call TriggerRegisterDialogEvent(t, Dialog[(u.id*24)+0])
            call TriggerRegisterDialogEvent(t, Dialog[(u.id*24)+1])
            call TriggerRegisterDialogEvent(t, Dialog[(u.id*24)+2])
            call TriggerRegisterDialogEvent(t, Dialog[(u.id*24)+3])
   
            set i = i + 1
        endloop
   
        call TriggerAddCondition(t, Filter(function OnButtonClick))
    endfunction
 
    private function Init takes nothing returns nothing
        local trigger t  = CreateTrigger()
        local integer i  = 0
   
        loop
            //set CurrentCharSaveSlot[i] = -1
            call TriggerRegisterPlayerEvent(t, Player(i), EVENT_PLAYER_END_CINEMATIC)
            set i = i + 1
       
            exitwhen i == bj_MAX_PLAYER_SLOTS
        endloop
   
        call TriggerAddCondition(t, Filter(function ShowMenu))

        call TimerStart(CreateTimer(), 0, false, function InitDialog)
    endfunction

endscope
(Untested, may or may not work.)
 
Last edited:
Status
Not open for further replies.
Top