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 The Helper:
    The bots will show up as users online in the forum software but they do not show up in my stats tracking. I am sure there are bots in the stats but the way alot of the bots treat the site do not show up on the stats
  • Varine Varine:
    I want to build a filtration system for my 3d printer, and that shit is so much more complicated than I thought it would be
  • Varine Varine:
    Apparently ABS emits styrene particulates which can be like .2 micrometers, which idk if the VOC detectors I have can even catch that
  • Varine Varine:
    Anyway I need to get some of those sensors and two air pressure sensors installed before an after the filters, which I need to figure out how to calculate the necessary pressure for and I have yet to find anything that tells me how to actually do that, just the cfm ratings
  • Varine Varine:
    And then I have to set up an arduino board to read those sensors, which I also don't know very much about but I have a whole bunch of crash course things for that
  • Varine Varine:
    These sensors are also a lot more than I thought they would be. Like 5 to 10 each, idk why but I assumed they would be like 2 dollars
  • Varine Varine:
    Another issue I'm learning is that a lot of the air quality sensors don't work at very high ambient temperatures. I'm planning on heating this enclosure to like 60C or so, and that's the upper limit of their functionality
  • Varine Varine:
    Although I don't know if I need to actually actively heat it or just let the plate and hotend bring the ambient temp to whatever it will, but even then I need to figure out an exfiltration for hot air. I think I kind of know what to do but it's still fucking confusing
  • The Helper The Helper:
    Maybe you could find some of that information from AC tech - like how they detect freon and such
  • Varine Varine:
    That's mostly what I've been looking at
  • Varine Varine:
    I don't think I'm dealing with quite the same pressures though, at the very least its a significantly smaller system. For the time being I'm just going to put together a quick scrubby box though and hope it works good enough to not make my house toxic
  • Varine Varine:
    I mean I don't use this enough to pose any significant danger I don't think, but I would still rather not be throwing styrene all over the air
  • The Helper The Helper:
    New dessert added to recipes Southern Pecan Praline Cake https://www.thehelper.net/threads/recipe-southern-pecan-praline-cake.193555/
  • The Helper The Helper:
    Another bot invasion 493 members online most of them bots that do not show up on stats
  • Varine Varine:
    I'm looking at a solid 378 guests, but 3 members. Of which two are me and VSNES. The third is unlisted, which makes me think its a ghost.
    +1
  • The Helper The Helper:
    Some members choose invisibility mode
    +1
  • The Helper The Helper:
    I bitch about Xenforo sometimes but it really is full featured you just have to really know what you are doing to get the most out of it.
  • The Helper The Helper:
    It is just not easy to fix styles and customize but it definitely can be done
  • The Helper The Helper:
    I do know this - xenforo dropped the ball by not keeping the vbulletin reputation comments as a feature. The loss of the Reputation comments data when we switched to Xenforo really was the death knell for the site when it came to all the users that left. I know I missed it so much and I got way less interested in the site when that feature was gone and I run the site.
  • Blackveiled Blackveiled:
    People love rep, lol
    +1
  • The Helper The Helper:
    The recipe today is Sloppy Joe Casserole - one of my faves LOL https://www.thehelper.net/threads/sloppy-joe-casserole-with-manwich.193585/
  • The Helper The Helper:
    Decided to put up a healthier type recipe to mix it up - Honey Garlic Shrimp Stir-Fry https://www.thehelper.net/threads/recipe-honey-garlic-shrimp-stir-fry.193595/
  • The Helper The Helper:
    Here is another comfort food favorite - Million Dollar Casserole - https://www.thehelper.net/threads/recipe-million-dollar-casserole.193614/

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top