HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Help with a dialog/diplomacy system

05-23-2008, 02:21 AM#1
Fluff
Pyrogasm helped me a while back to make this system of dialogs for players to ally each other. The goal is that one player can type -ally blue and then the blue player will get a dialog asking if he wishes to ally. He can accept or decline. When someone unallys another player, there is no dialog. When one player unallys anohter, he declares hostility as well.

I attached a separate map with the the necessary scripts. I'm hoping Pyrogasm or someone else could take a few minutes and run through the errors, as I tried everything I could think of with my very weak JASS skills.

EDIT: This is a link to thread where I originally asked for a script, and then in the last post of the thread I showed the errors I get. http://wc3campaigns.net/showthread.php?t=99105
Attached Files
File type: w3mdiplosystem.w3m (34.0 KB)
05-23-2008, 02:39 AM#2
Anopob
Um wait, what's wrong with it? And it looks like Cohadar and Pyrogasm gave you some script so what's the problem?
05-23-2008, 03:08 AM#3
Fluff
There are a lot of syntax and undeclared function errors. They are all explained in the post I linked and you can see them if you try to compile the demo map with New Gen WE.
05-26-2008, 05:52 PM#4
Rising_Dusk
*Ressurected by Request*
I can't test right now if his script would compile or not, but be sure that you're using the most recent JNGP, that's important. It's tricky for me to give much valuable feedback on the script you linked to because I'm unfamiliar with cohadar's dialog system (And yes, don't care to familiarize myself with it). It would be particularly valuable if you PMd/harassed Pyro (Who wrote it), as surely the errors are either in the inclusion of the correct libraries in your map, the usage of said libraries in the script, or a stupid syntax error (He's prone to those as well).
05-27-2008, 08:11 AM#5
Pyrogasm
Yeah, he harassed me, but some of the things that are giving him errors shouldn't be. Like his:
Collapse JASS:
local Dialog D = GetTriggerDialog()

if D.GetResult == HK_Y then //Undeclared variable dialog
So my guess is something with library ordering. Delete everything, start over, and try this:

Put this library first
Expand ABC:
Then this:
Expand Dialogs:
Finally, the alliance stuff (syntax error help from grim001):
Collapse JASS:
library AllyDialogs initializer Init needs Dialogs

    globals
        //Mess with these!
        private constant string ALLYPHRASESTART = "-ally " //must be lowercase; include spaces if you want them
        private constant string UNALLYPHRASESTART = "-unally " //must be lowercase; include spaces if you want them

        private string REQUESTMESSAGE = "* wants to unally with you.|nDo you accept?" //"*" to signify the use of a player's name
        private string SENTREQUESTTEXT = "You have requested to ally with *."
        private string ACCEPTEDTEXT_INITPLAYER = "Your request to ally with * has been accepted. You are now allied with *."
        private string ACCEPTEDTEXT_TARGETPLAYER = "You have accepted a request to ally with *. You are now allied with *."
        private string DENIEDTEXT_INITPLAYER = "Your request to ally with * has been denied."
        private string DENIEDTEXT_TARGETPLAYER = "You have denied a request to ally with *."
        private string UNALLYTEXT = "You are now unallied with *."

        private constant string ACCEPTTEXT = "|cffffcc00Y|res"
        private constant string DENYTEXT = "|cffffcc00N|ro"
        private constant integer ACCEPTKEY = HK_Y //Hotkeys; check the Dialogs documentation
        private constant integer DENYKEY = HK_N

        private constant real XOFF = 0.00 //Message display offsets
        private constant real YOFF = 0.00
        private constant real DISPLAYTIME = 5.00
    endglobals

    private keyword Info
    globals
        //Don't mess with these
        public trigger AllyTrigger = CreateTrigger() //Public so they can be disabled
        public trigger UnAllyTrigger = CreateTrigger()
        private Info array Infos
    endglobals

    private struct Info
        player Init
        player Target

        static method create takes player Init, player Target, Dialog D returns Info
            local Info I = Info.allocate()

            set I.Init = Init
            set I.Target = Target
            set Infos[integer(D)] = I

            return I
        endmethod
    endstruct

    private function GetIdFromName takes string Name returns integer
        local integer I

        set Name = StringCase(Name, false)
        if Name == "red" then
            return 0
        elseif Name == "blue" then
            return 1
        elseif Name == "teal" then
            return 2
        elseif Name == "purple" then
            return 3
        elseif Name == "yellow" then
            return 4
        elseif Name == "orange" then
            return 5
        elseif Name == "green" then
            return 6
        elseif Name == "pink" then
            return 7
        elseif Name == "grey" or Name == "gray" then //2 different spellings
            return 8
        elseif Name == "light blue" or Name == "lightblue" then //2 different spellings
            return 9
        elseif Name == "dark green" or Name == "darkgreen" then //2 different spellings
            return 10
        elseif Name == "brown" then
            return 11
        endif

        set I = -1
        loop
            set I = I+1
            exitwhen I>11

            if StringCase(GetPlayerName(Player(I)), false) == Name then
                return I
            endif
        endloop

        return 0
    endfunction

    private function NameGet takes integer PId returns string
        if PId == 0 then
            return "|CFFFF0303"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 1 then
            return "|CFF0042FF"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 2 then
            return "|CFF1CB619"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 3 then
            return "|CFF540081"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 4 then
            return "|CFFFFFF01"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 5 then
            return "|CFFFE8A0E"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 6 then
            return "|CFF20C000"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 7 then
            return "|CFFE55BB0"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 8 then
            return "|CFF959697"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 9 then
            return "|CFF7EBFF1"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 10 then
            return "|CFF106246"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 11 then
            return "|CFF4E2A04"+GetPlayerName(Player(PId))+"|r"
        endif

        return "Player "+I2S(PId)
    endfunction

    private function StringReplace takes string S, string N returns string
        local string S2
        local integer I = -1
        local integer Mod = StringLength(N)-1
        local integer End = StringLength(S)

        loop
            set I = I+1
            exitwhen I > End-1

            if SubString(S, I, I+1) == "*" then
                set S2 = S
                set S = SubString(S2, 0, I)+N+SubString(S2, I+1, End)
                set I = I+Mod
                set End = End+Mod
            endif
        endloop

        return S
    endfunction

    private function Clicked takes nothing returns nothing
        local Dialog D = GetTriggerDialog()
        local Info I = Infos[integer(D)]

        if D.GetResult() == ACCEPTKEY then
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_PASSIVE, true)
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_HELP_REQUEST, true)
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_HELP_RESPONSE, true)
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_SHARED_XP, true)
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_SHARED_SPELLS, true)

            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_PASSIVE, true)
            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_HELP_REQUEST, true)
            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_HELP_RESPONSE, true)
            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_SHARED_XP, true)
            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_SHARED_SPELLS, true)

            call DisplayTimedTextToPlayer(I.Init, XOFF, YOFF, DISPLAYTIME, StringReplace(ACCEPTEDTEXT_INITPLAYER, NameGet(GetPlayerId(I.Target))))
            call DisplayTimedTextToPlayer(I.Target, XOFF, YOFF, DISPLAYTIME, StringReplace(ACCEPTEDTEXT_TARGETPLAYER, NameGet(GetPlayerId(I.Init))))
        else
            call DisplayTimedTextToPlayer(I.Init, XOFF, YOFF, DISPLAYTIME, StringReplace(DENIEDTEXT_INITPLAYER, NameGet(GetPlayerId(I.Target))))
            call DisplayTimedTextToPlayer(I.Target, XOFF, YOFF, DISPLAYTIME, StringReplace(DENIEDTEXT_TARGETPLAYER, NameGet(GetPlayerId(I.Init))))
        endif

        call I.destroy()
        call D.destroy()
    endfunction

    private function UnAlly takes nothing returns nothing
        local string S = GetEventPlayerChatString()
        local player Init = GetTriggerPlayer()
        local player Target = Player(GetIdFromName(SubString(S, StringLength(ALLYPHRASESTART)+1, StringLength(S))))

        call SetPlayerAlliance(Init, Target, ALLIANCE_PASSIVE, false)
        call SetPlayerAlliance(Init, Target, ALLIANCE_HELP_REQUEST, false)
        call SetPlayerAlliance(Init, Target, ALLIANCE_HELP_RESPONSE, false)
        call SetPlayerAlliance(Init, Target, ALLIANCE_SHARED_XP, false)
        call SetPlayerAlliance(Init, Target, ALLIANCE_SHARED_SPELLS, false)

        call SetPlayerAlliance(Target, Init, ALLIANCE_PASSIVE, false)
        call SetPlayerAlliance(Target, Init, ALLIANCE_HELP_REQUEST, false)
        call SetPlayerAlliance(Target, Init, ALLIANCE_HELP_RESPONSE, false)
        call SetPlayerAlliance(Target, Init, ALLIANCE_SHARED_XP, false)
        call SetPlayerAlliance(Target, Init, ALLIANCE_SHARED_SPELLS, false)

        call DisplayTimedTextToPlayer(Init, XOFF, YOFF, DISPLAYTIME, StringReplace(UNALLYTEXT, NameGet(GetPlayerId(Target))))
        call DisplayTimedTextToPlayer(Target, XOFF, YOFF, DISPLAYTIME, StringReplace(UNALLYTEXT, NameGet(GetPlayerId(Init))))
    endfunction

    private function Ally takes nothing returns nothing
        local string S = GetEventPlayerChatString()
        local Dialog D = Dialog.create()
        local player P = GetTriggerPlayer()
        local integer PId = GetIdFromName(SubString(S, StringLength(ALLYPHRASESTART)+1, StringLength(S)))
        local Info I = Info.create(P, Player(PId), D) 

        call D.SetMessage(StringReplace(REQUESTMESSAGE, NameGet(GetPlayerId(P))))
        call D.AddButton(ACCEPTTEXT, ACCEPTKEY)
        call D.AddButton(DENYTEXT, DENYKEY)
        call D.AddAction(function Clicked)
        call D.Show(I.Target)

        call DisplayTimedTextToPlayer(I.Init, XOFF, YOFF, DISPLAYTIME, StringReplace(SENTREQUESTTEXT,NameGet(PId)))
    endfunction

    private function AllyConditions takes nothing returns boolean
        return StringCase(SubString(GetEventPlayerChatString(), 0, StringLength(ALLYPHRASESTART)), false) == ALLYPHRASESTART
    endfunction

    private function UnAllyConditions takes nothing returns boolean
        return StringCase(SubString(GetEventPlayerChatString(), 0, StringLength(UNALLYPHRASESTART)), false) == UNALLYPHRASESTART
    endfunction

    private function Init takes nothing returns nothing
        local integer I = -1

        loop
            set I = I+1
            exitwhen I>11
            call TriggerRegisterPlayerChatEvent(AllyTrigger, Player(I), ALLYPHRASESTART, false)
            call TriggerRegisterPlayerChatEvent(UnAllyTrigger, Player(I), UNALLYPHRASESTART, false)
        endloop
        call TriggerAddCondition(AllyTrigger, Condition(function AllyConditions))
        call TriggerAddCondition(UnAllyTrigger, Condition(function UnAllyConditions))
        call TriggerAddAction(AllyTrigger, function Ally)
        call TriggerAddAction(UnAllyTrigger, function UnAlly)
    endfunction  
endlibrary
05-27-2008, 08:12 PM#6
cohadar
GetResult is a function, you forgot brackets.

Collapse JASS:
if D.GetResult() == HK_Y then


Also bad:
Collapse JASS:
local Dialog D = NewDialog()
and good:
Collapse JASS:
local Dialog D = Dialog.create()

And finally it is not Substring but SubString

EDIT:
I would just like to know how did Pyro write this when he does not even have jasshelper...
05-28-2008, 05:52 AM#7
The Elite
Quote:
I would just like to know how did Pyro write this when he does not even have jasshelper...
Pyro > Jasshelper
05-28-2008, 06:40 AM#8
Pyrogasm
I wrote it and grim001 syntax-checked it. And I've already fixed all those errors (you would've noticed had you read the new code, not the old code) ;)
05-28-2008, 12:10 PM#9
d07.RiV
Also save your maps as .w3x, not .w3m (to force expansion add any like - even comment - into custom script)
05-29-2008, 02:01 AM#10
Pyrogasm
What...? Is that even relevant? Why does it matter?
05-29-2008, 04:59 AM#11
Fluff
Pyrogasm and Cohadar, thank you both for you help. I've tested this and there are no compiler errors, but in game it it kind of buggy. I made a couple changes, so here it is:

Collapse JASS:
library AllyDialogs initializer Init needs Dialogs

    globals
        //Mess with these!
        private constant string ALLYPHRASESTART = "-ally " //must be lowercase; include spaces if you want them
        private constant string UNALLYPHRASESTART = "-unally " //must be lowercase; include spaces if you want them

        private string REQUESTMESSAGE = "* wants to ally with you.|nDo you accept?" //"*" to signify the use of a player's name
        private string SENTREQUESTTEXT = "You have requested to ally with *."
        private string ACCEPTEDTEXT_INITPLAYER = "Your request to ally with * has been accepted. You are now allied with *."
        private string ACCEPTEDTEXT_TARGETPLAYER = "You have accepted a request to ally with *. You are now allied with *."
        private string DENIEDTEXT_INITPLAYER = "Your request to ally with * has been denied."
        private string DENIEDTEXT_TARGETPLAYER = "You have denied a request to ally with *."
        private string UNALLYTEXT = "You are now unallied with *."

        private constant string ACCEPTTEXT = "|cffffcc00Y|res"
        private constant string DENYTEXT = "|cffffcc00N|ro"
        private constant integer ACCEPTKEY = HK_Y //Hotkeys; check the Dialogs documentation
        private constant integer DENYKEY = HK_N

        private constant real XOFF = 0.00 //Message display offsets
        private constant real YOFF = 0.00
        private constant real DISPLAYTIME = 5.00
    endglobals

    private keyword Info
    globals
        //Don't mess with these
        public trigger AllyTrigger = CreateTrigger() //Public so they can be disabled
        public trigger UnAllyTrigger = CreateTrigger()
        private Info array Infos
    endglobals

    private struct Info
        player Init
        player Target

        static method create takes player Init, player Target, Dialog D returns Info
            local Info I = Info.allocate()

            set I.Init = Init
            set I.Target = Target
            set Infos[integer(D)] = I

            return I
        endmethod
    endstruct

    private function GetIdFromName takes string Name returns integer
        local integer I

        set Name = StringCase(Name, false)
        if Name == "red" then
            return 0
        elseif Name == "blue" then
            return 1
        elseif Name == "teal" then
            return 2
        elseif Name == "purple" then
            return 3
        elseif Name == "yellow" then
            return 4
        elseif Name == "orange" then
            return 5
        elseif Name == "green" then
            return 6
        elseif Name == "pink" then
            return 7
        elseif Name == "grey" or Name == "gray" then //2 different spellings
            return 8
        elseif Name == "light blue" or Name == "lightblue" then //2 different spellings
            return 9
        elseif Name == "dark green" or Name == "darkgreen" then //2 different spellings
            return 10
        elseif Name == "brown" then
            return 11
        endif

        set I = -1
        loop
            set I = I+1
            exitwhen I>11

            if StringCase(GetPlayerName(Player(I)), false) == Name then
                return I
            endif
        endloop

        return 0
    endfunction

    private function NameGet takes integer PId returns string
        if PId == 0 then
            return "|CFFFF0303"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 1 then
            return "|CFF0042FF"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 2 then
            return "|CFF1CB619"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 3 then
            return "|CFF540081"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 4 then
            return "|CFFFFFF01"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 5 then
            return "|CFFFE8A0E"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 6 then
            return "|CFF20C000"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 7 then
            return "|CFFE55BB0"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 8 then
            return "|CFF959697"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 9 then
            return "|CFF7EBFF1"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 10 then
            return "|CFF106246"+GetPlayerName(Player(PId))+"|r"
        elseif PId == 11 then
            return "|CFF4E2A04"+GetPlayerName(Player(PId))+"|r"
        endif

        return "Player "+I2S(PId)
    endfunction

    private function StringReplace takes string S, string N returns string
        local string S2
        local integer I = -1
        local integer Mod = StringLength(N)-1
        local integer End = StringLength(S)

        loop
            set I = I+1
            exitwhen I > End-1

            if SubString(S, I, I+1) == "*" then
                set S2 = S
                set S = SubString(S2, 0, I)+N+SubString(S2, I+1, End)
                set I = I+Mod
                set End = End+Mod
            endif
        endloop

        return S
    endfunction

    private function Clicked takes nothing returns nothing
        local Dialog D = GetTriggerDialog()
        local Info I = Infos[integer(D)]

        if D.GetResult() == ACCEPTKEY then
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_PASSIVE, true)
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_HELP_REQUEST, true)
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_HELP_RESPONSE, true)
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_SHARED_XP, true)
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_SHARED_SPELLS, true)
            call SetPlayerAlliance(I.Init, I.Target, ALLIANCE_SHARED_VISION, true)

            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_PASSIVE, true)
            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_HELP_REQUEST, true)
            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_HELP_RESPONSE, true)
            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_SHARED_XP, true)
            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_SHARED_SPELLS, true)
            call SetPlayerAlliance(I.Target, I.Init, ALLIANCE_SHARED_VISION, true)

            call DisplayTimedTextToPlayer(I.Init, XOFF, YOFF, DISPLAYTIME, StringReplace(ACCEPTEDTEXT_INITPLAYER, NameGet(GetPlayerId(I.Target))))
            call DisplayTimedTextToPlayer(I.Target, XOFF, YOFF, DISPLAYTIME, StringReplace(ACCEPTEDTEXT_TARGETPLAYER, NameGet(GetPlayerId(I.Init))))
        else
            call DisplayTimedTextToPlayer(I.Init, XOFF, YOFF, DISPLAYTIME, StringReplace(DENIEDTEXT_INITPLAYER, NameGet(GetPlayerId(I.Target))))
            call DisplayTimedTextToPlayer(I.Target, XOFF, YOFF, DISPLAYTIME, StringReplace(DENIEDTEXT_TARGETPLAYER, NameGet(GetPlayerId(I.Init))))
        endif

        call I.destroy()
        call D.destroy()
    endfunction

    private function UnAlly takes nothing returns nothing
        local string S = GetEventPlayerChatString()
        local player Init = GetTriggerPlayer()
        local player Target = Player(GetIdFromName(SubString(S, StringLength(ALLYPHRASESTART)+1, StringLength(S))))

        call SetPlayerAlliance(Init, Target, ALLIANCE_PASSIVE, false)
        call SetPlayerAlliance(Init, Target, ALLIANCE_HELP_REQUEST, false)
        call SetPlayerAlliance(Init, Target, ALLIANCE_HELP_RESPONSE, false)
        call SetPlayerAlliance(Init, Target, ALLIANCE_SHARED_XP, false)
        call SetPlayerAlliance(Init, Target, ALLIANCE_SHARED_SPELLS, false)
        call SetPlayerAlliance(Init, Target, ALLIANCE_SHARED_VISION, false)

        call SetPlayerAlliance(Target, Init, ALLIANCE_PASSIVE, false)
        call SetPlayerAlliance(Target, Init, ALLIANCE_HELP_REQUEST, false)
        call SetPlayerAlliance(Target, Init, ALLIANCE_HELP_RESPONSE, false)
        call SetPlayerAlliance(Target, Init, ALLIANCE_SHARED_XP, false)
        call SetPlayerAlliance(Target, Init, ALLIANCE_SHARED_SPELLS, false)
        call SetPlayerAlliance(Target, Init, ALLIANCE_SHARED_VISION, false)

        call DisplayTimedTextToPlayer(Init, XOFF, YOFF, DISPLAYTIME, StringReplace(UNALLYTEXT, NameGet(GetPlayerId(Target))))
        call DisplayTimedTextToPlayer(Target, XOFF, YOFF, DISPLAYTIME, StringReplace(UNALLYTEXT, NameGet(GetPlayerId(Init))))
    endfunction

    private function Ally takes nothing returns nothing
        local string S = GetEventPlayerChatString()
        local Dialog D = Dialog.create()
        local player P = GetTriggerPlayer()
        local integer PId = GetIdFromName(SubString(S, StringLength(ALLYPHRASESTART)+1, StringLength(S)))
        local Info I = Info.create(P, Player(PId), D) 

        call D.SetMessage(StringReplace(REQUESTMESSAGE, NameGet(GetPlayerId(P))))
        call D.AddButton(ACCEPTTEXT, ACCEPTKEY)
        call D.AddButton(DENYTEXT, DENYKEY)
        call D.AddAction(function Clicked)
        call D.Show(I.Target)

        call DisplayTimedTextToPlayer(I.Init, XOFF, YOFF, DISPLAYTIME, StringReplace(SENTREQUESTTEXT,NameGet(PId)))
    endfunction

    private function AllyConditions takes nothing returns boolean
        return StringCase(SubString(GetEventPlayerChatString(), 0, StringLength(ALLYPHRASESTART)), false) == ALLYPHRASESTART
    endfunction

    private function UnAllyConditions takes nothing returns boolean
        return StringCase(SubString(GetEventPlayerChatString(), 0, StringLength(UNALLYPHRASESTART)), false) == UNALLYPHRASESTART
    endfunction

    private function Init takes nothing returns nothing
        local integer I = -1

        loop
            set I = I+1
            exitwhen I>11
            call TriggerRegisterPlayerChatEvent(AllyTrigger, Player(I), ALLYPHRASESTART, false)
            call TriggerRegisterPlayerChatEvent(UnAllyTrigger, Player(I), UNALLYPHRASESTART, false)
        endloop
        call TriggerAddCondition(AllyTrigger, Condition(function AllyConditions))
        call TriggerAddCondition(UnAllyTrigger, Condition(function UnAllyConditions))
        call TriggerAddAction(AllyTrigger, function Ally)
        call TriggerAddAction(UnAllyTrigger, function UnAlly)
    endfunction  
endlibrary

When I play as player one and type "-ally blue" the message comes up and asks me if I want to allyy myself. Also, I may have fixed it, but when I tested with two other people, the -unally command did not unally us. And the unally commands should not have dialogs, they should just unally both players from each other.

EDIT: Pyrogasm, you should submit this as a resource if we can get it worked out because I'm sure others could benefit from a system like this. :)
05-29-2008, 05:31 AM#12
Pyrogasm
What did you change?
05-29-2008, 05:45 AM#13
Fluff
private string REQUESTMESSAGE = "* wants to ally with you.|nDo you accept?"

It said "wants to unally you" and then also I added shared visibility to the alliance. There was also a couple typos somewhere... i don't remember where they were, but they should not have affected it.

EDIT: Maybe there wasn't any typos... I can't remember
05-29-2008, 05:50 AM#14
Pyrogasm
Oh, I see. Is it still buggy in that it asks you to ally yourself, or did you fix that?
05-29-2008, 05:52 AM#15
Fluff
No, it stills asks me to ally myself (and I only tested once with other players, so it may ask them as well, but I'm not sure). Also, the -unally command displays the message, but both players are still allied.