Snippet PlayerAlliance

Nestharus

o-o
Reaction score
84
JASS:

library PlayerAlliance /* v1.0.0.0
*************************************************************************************
*
*   Simple player alliances that properly manages all player alliance flags
*
*******************************************************************
*
*   Alliance Flags
*
*       constant integer ALLIANCE_UNALLIED
*       constant integer ALLIANCE_UNALLIED_VISION
*       constant integer ALLIANCE_NEUTRAL
*       constant integer ALLIANCE_NEUTRAL_VISION
*       constant integer ALLIANCE_ALLIED
*       constant integer ALLIANCE_VISION
*       constant integer ALLIANCE_ALLIED_UNITS
*       constant integer ALLIANCE_ALLIED_ADVUNITS
*
*   function Ally takes player player1, player player2, integer allianceFlag returns nothing
*       -   Allies two players given alliance flag
*
************************************************************************************/
    globals
        /*************************************************************************************
        *
        *   Alliance Flags
        *
        *************************************************************************************/
        constant integer ALLIANCE_UNALLIED = 0
                                                                //ally = false
                                                                //vision = false
                                                                //control = false
                                                                //full control = false
                                                                //passive = false
        constant integer ALLIANCE_UNALLIED_VISION = 1
                                                                //ally = false
                                                                //vision = true
                                                                //control = false
                                                                //full control = false
                                                                //passive = false
        constant integer ALLIANCE_NEUTRAL = 2
                                                                //ally = false
                                                                //vision = false
                                                                //control = false
                                                                //full control = false
                                                                //passive = true
        constant integer ALLIANCE_NEUTRAL_VISION = 3
                                                                //ally = false
                                                                //vision = true
                                                                //control = false
                                                                //full control = false
                                                                //passive = true
        constant integer ALLIANCE_ALLIED = 4
                                                                //ally = true
                                                                //vision = false
                                                                //control = false
                                                                //full control = false
                                                                //passive = false
        constant integer ALLIANCE_VISION = 5
                                                                //ally = true
                                                                //vision = true
                                                                //control = false
                                                                //full control = false
                                                                //passive false
        constant integer ALLIANCE_ALLIED_UNITS = 6
                                                                //ally = true
                                                                //vision = true
                                                                //control = true
                                                                //full control = false
                                                                //passive = false
        constant integer ALLIANCE_ALLIED_ADVUNITS = 7
                                                                //ally = true
                                                                //vision = true
                                                                //control = true
                                                                //full control = true
                                                                //passive = false
    endglobals
    
    /*************************************************************************************
    *
    *   Ally
    *
    *       Allies two players given an alliance flag. Will ally both source player and target player.
    *
    *       player p1:              The source player of alliance
    *       player p2:              The target player of alliance
    *
    *       returns:                nothing
    *
    *************************************************************************************/
    function Ally takes player p1, player p2, integer flag returns nothing
        debug if (p1 != null and p2 != null and p1 != p2 and flag >= 0 and flag <= 7) then
            //first see if the alliance type was an actual alliance or not
            if (flag < ALLIANCE_ALLIED) then
                //if it wasn't, unset alliance flags
                call SetPlayerAlliance(p1, p2, ALLIANCE_PASSIVE,       false)
                call SetPlayerAlliance(p1, p2, ALLIANCE_HELP_REQUEST,  false)
                call SetPlayerAlliance(p1, p2, ALLIANCE_HELP_RESPONSE, false)
                call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_XP,     false)
                call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_SPELLS, false)
                call SetPlayerAlliance(p2, p1, ALLIANCE_PASSIVE,       false)
                call SetPlayerAlliance(p2, p1, ALLIANCE_HELP_REQUEST,  false)
                call SetPlayerAlliance(p2, p1, ALLIANCE_HELP_RESPONSE, false)
                call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_XP,     false)
                call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_SPELLS, false)
                call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_CONTROL, false)
                call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_CONTROL, false)
                call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_ADVANCED_CONTROL, false)
                call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_ADVANCED_CONTROL, false)
                //if enemy
                if (flag <= ALLIANCE_UNALLIED_VISION) then
                    //unset passive flag
                    call SetPlayerAlliance(p1, p2, ALLIANCE_PASSIVE, false)
                    call SetPlayerAlliance(p2, p1, ALLIANCE_PASSIVE, false)
                    //check for vision
                    if (flag == ALLIANCE_UNALLIED_VISION) then
                        call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_VISION, true)
                        call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_VISION, true)
                    else
                        call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_VISION, false)
                        call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_VISION, false)
                    endif
                //if neutral
                else
                    //set passive flag
                    call SetPlayerAlliance(p1, p2, ALLIANCE_PASSIVE, true)
                    call SetPlayerAlliance(p2, p1, ALLIANCE_PASSIVE, true)
                    //check for vision
                    if (flag == ALLIANCE_NEUTRAL_VISION) then
                        call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_VISION, true)
                        call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_VISION, true)
                    else
                        call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_VISION, false)
                        call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_VISION, false)
                    endif
                endif
            else
                //make allied
                call SetPlayerAlliance(p1, p2, ALLIANCE_PASSIVE,       true)
                call SetPlayerAlliance(p1, p2, ALLIANCE_HELP_REQUEST,  true)
                call SetPlayerAlliance(p1, p2, ALLIANCE_HELP_RESPONSE, true)
                call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_XP,     true)
                call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_SPELLS, true)
                call SetPlayerAlliance(p2, p1, ALLIANCE_PASSIVE,       true)
                call SetPlayerAlliance(p2, p1, ALLIANCE_HELP_REQUEST,  true)
                call SetPlayerAlliance(p2, p1, ALLIANCE_HELP_RESPONSE, true)
                call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_XP,     true)
                call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_SPELLS, true)
                //check for vision
                if (flag >= ALLIANCE_VISION) then
                    //add vision
                    call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_VISION, true)
                    call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_VISION, true)
                    //check for shared control
                    if (flag >= ALLIANCE_ALLIED_UNITS) then
                        //add shared control
                        call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_CONTROL, true)
                        call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_CONTROL, true)
                        //check for advanced control
                        if (flag == ALLIANCE_ALLIED_ADVUNITS) then
                            call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_ADVANCED_CONTROL, true)
                            call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_ADVANCED_CONTROL, true)
                        else
                            call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_ADVANCED_CONTROL, false)
                            call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_ADVANCED_CONTROL, false)
                        endif
                    else
                        call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_CONTROL, false)
                        call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_CONTROL, false)
                        call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_ADVANCED_CONTROL, false)
                        call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_ADVANCED_CONTROL, false)
                    endif
                else
                    call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_VISION, false)
                    call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_VISION, false)
                    call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_CONTROL, false)
                    call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_CONTROL, false)
                    call SetPlayerAlliance(p1, p2, ALLIANCE_SHARED_ADVANCED_CONTROL, false)
                    call SetPlayerAlliance(p2, p1, ALLIANCE_SHARED_ADVANCED_CONTROL, false)
                endif
            endif
        debug else
            debug if (p1 == null) then
                debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "PLAYER ALLIANCE ERROR: NULL PLAYER 1 ")
            debug endif
            debug if (p2 == null) then
                debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "PLAYER ALLIANCE ERROR: NULL PLAYER 2 ")
            debug endif
            debug if (p1 == p2) then
                debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "PLAYER ALLIANCE ERROR: PLAYER 1 == PLAYER 2 ")
            debug endif
            debug if (flag < 0 or flag > 7) then
                debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "PLAYER ALLIANCE ERROR: INVALID ALLIANCE FLAG")
            debug endif
        debug endif
    endfunction
endlibrary
 

emjlr3

Change can be a good thing
Reaction score
395
still do not understand how this is any different then the alliance bjs
 

emjlr3

Change can be a good thing
Reaction score
395
i need more then that - give me a pros/cons vs. alliance bjs, so that I can get it
 

Nestharus

o-o
Reaction score
84
If you look at all of the possible flags, the alliance bjs only set the ones that are used in the current alliance, meaning previous flags like neutral (which is only set in neutral flags) never get unset.

Anyways, this one probably unsets and sets all relevant flags. Obviously, the pro is that you don't have to code 5 lines of code every time you want to modify an alliance flag since this one already does that stuff for you. It also does 2 sided alliances only rather than 1 sided. Just makes scripts a bit easier to write and simpler to read when dealing with alliances =).
 

Sim

Forum Administrator
Staff member
Reaction score
534
If you look at all of the possible flags, the alliance bjs only set the ones that are used in the current alliance, meaning previous flags like neutral (which is only set in neutral flags) never get unset.

Anyways, this one probably unsets and sets all relevant flags. Obviously, the pro is that you don't have to code 5 lines of code every time you want to modify an alliance flag since this one already does that stuff for you. It also does 2 sided alliances only rather than 1 sided. Just makes scripts a bit easier to write and simpler to read when dealing with alliances =).

Explain those kinds of things in the system's description please. :)

Don't expect people to read all over your code just to understand what it really does and why we should use it.
 

tooltiperror

Super Moderator
Reaction score
231
Working with alliances is a pain, in my map all players started out as enemies and based on hero selection were allied, was a pain in the ass and code looked gross, I may consider using this instead.

Approved.
 
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