//TESH.scrollpos=0
//TESH.alwaysfold=0
Name | Type | is_array | initial_value |
//TESH.scrollpos=180
//TESH.alwaysfold=0
library BlizzardMessage /* v1.0.0.4
*************************************************************************************
*
* For creating Blizzard-like messages with a variety of sounds.
*
*************************************************************************************
*
* Credits
*
* Vexorian
* -----------------------
*
* The original SimError
*
*
* Maker
* -----------------------
*
* Sound label help
*
************************************************************************************
*
* Function
* -----------------------
*
* function BlizzardMessage takes string msg, string colorCode, integer soundLabel, player forPlayer returns nothing
*
* Description
* -----------------------
*
* This function creates a Blizzard-like message with a sound for a player.
*
* Takes
* -----------------------
*
* string msg
* - The message to be displayed.
*
* string colorCode
* - Adds a color for the message through an ARBG color code. A null value creates a normal white text.
*
* integer soundLabel
* - The sound to be played.
*
* player forPlayer
* - The player that receives the message.
*
* Returns
* -----------------------
*
* nothing
*
*************************************************************************************
*
* Function
* -----------------------
*
* function BlizzardMessageTimed takes string msg, string colorCode, real dur, integer soundLabel, player forPlayer returns nothing
*
* Description
* -----------------------
*
* This function creates a timed Blizzard-like message with a sound for a player.
*
* Takes
* -----------------------
*
* string msg
* - The message to be displayed.
*
* string colorCode
* - Adds a color for the message through an ARBG color code. A null value creates a normal white text.
*
* real dur
* - The duration of the message.
*
* integer soundLabel
* - The sound to be played.
*
* player forPlayer
* - The player that receives the message.
*
* Returns
* -----------------------
*
* nothing
*
*************************************************************************************
*
* SETTINGS
* -----------------------
*
*/
globals
constant real MSG_DURATION = 2.00 //Message Duration
/*************************************************************************************
*
* Sound Labels
*
*************************************************************************************/
constant integer ALLY_HERO_DIES_HUMAN = 0
constant integer ALLY_HERO_DIES_NAGA = 1
constant integer ALLY_HERO_DIES_NIGHTELF = 2
constant integer ALLY_HERO_DIES_ORC = 3
constant integer ALLY_HERO_DIES_UNDEAD = 4
constant integer ALLY_TOWN_UNDER_ATTACK_HUMAN = 5
constant integer ALLY_TOWN_UNDER_ATTACK_NAGA = 6
constant integer ALLY_TOWN_UNDER_ATTACK_NIGHTELF = 7
constant integer ALLY_TOWN_UNDER_ATTACK_ORC = 8
constant integer ALLY_TOWN_UNDER_ATTACK_UNDEAD = 9
constant integer ALLY_UNDER_ATTACK_HUMAN = 10
constant integer ALLY_UNDER_ATTACK_NAGA = 11
constant integer ALLY_UNDER_ATTACK_NIGHTELF = 12
constant integer ALLY_UNDER_ATTACK_ORC = 13
constant integer ALLY_UNDER_ATTACK_UNDEAD = 14
constant integer ARRANGED_TEAM_INVITATION = 15
constant integer AUTO_CAST_BUTTON_CLICK = 16
constant integer CANT_PLACE_HUMAN = 17
constant integer CANT_PLACE_NAGA = 18
constant integer CANT_PLACE_NIGHTELF = 19
constant integer CANT_PLACE_ORC = 20
constant integer CANT_PLACE_UNDEAD = 21
constant integer CANT_ROOT_NIGHTELF = 22
constant integer CHATROOM_TIMER_TICK = 23
constant integer CLAN_INVITATION = 24
constant integer CONSTRUCTING_BUILDING_DEFAULT = 25
constant integer CONSTRUCTING_BUILDING_NAGA = 26
constant integer CONSTRUCTING_BUILDING_NIGHTELF = 27
constant integer CONSTRUCTING_BUILDING_ORC = 28
constant integer CONSTRUCTING_BUILDING_UNDEAD = 29
constant integer CREEP_AGGRO = 30
constant integer ERROR_MESSAGE = 31
constant integer GAME_FOUND = 32
constant integer GLUE_SCREEN_CLICK = 33
constant integer GOLD_MINE_COLLAPSE_HUMAN = 34
constant integer GOLD_MINE_COLLAPSE_NAGA = 35
constant integer GOLD_MINE_COLLAPSE_NIGHTELF = 36
constant integer GOLD_MINE_COLLAPSE_ORC = 37
constant integer GOLD_MINE_COLLAPSE_UNDEAD = 38
constant integer GOLD_MINE_LOW_GENERIC = 39
constant integer GOLD_MINE_LOW_HUMAN = 40
constant integer GOLD_MINE_LOW_NAGA = 41
constant integer GOLD_MINE_LOW_NIGHTELF = 42
constant integer GOLD_MINE_LOW_ORC = 43
constant integer GOLD_MINE_LOW_UNDEAD = 44
constant integer GOOD_JOB = 45
constant integer HERO_DIES_GENERIC = 46
constant integer HERO_DIES_HUMAN = 47
constant integer HERO_DIES_NAGA = 48
constant integer HERO_DIES_NIGHTELF = 49
constant integer HERO_DIES_ORC = 50
constant integer HERO_DIES_UNDEAD = 51
constant integer HINT = 52
constant integer IN_GAME_CHAT_WHAT = 53
constant integer INTERFACE_CLICK = 54
constant integer INTERFACE_ERROR = 55
constant integer INVENTORY_FULL_HUMAN = 56
constant integer INVENTORY_FULL_NAGA = 57
constant integer INVENTORY_FULL_NIGHTELF = 58
constant integer INVENTORY_FULL_ORC = 59
constant integer INVENTORY_FULL_UNDEAD = 60
constant integer ITEM_DROP = 61
constant integer ITEM_GET = 62
constant integer ITEM_REWARD = 63
constant integer JOB_DONE_SOUND_HUMAN = 64
constant integer JOB_DONE_SOUND_NAGA = 65
constant integer JOB_DONE_SOUND_NIGHTELF = 66
constant integer JOB_DONE_SOUND_ORC = 67
constant integer JOB_DONE_SOUND_UNDEAD = 68
constant integer MAP_PING = 69
constant integer MENU_BUTTON_CLICK = 70
constant integer NEW_TOURNAMENT = 71
constant integer NO_FOOD_HUMAN = 72
constant integer NO_FOOD_NAGA = 73
constant integer NO_FOOD_NIGHTELF = 74
constant integer NO_FOOD_ORC = 75
constant integer NO_FOOD_UNDEAD = 76
constant integer NO_GOLD_GENERIC = 77
constant integer NO_GOLD_HUMAN = 78
constant integer NO_GOLD_NAGA = 79
constant integer NO_GOLD_NIGHTELF = 80
constant integer NO_GOLD_ORC = 81
constant integer NO_GOLD_UNDEAD = 82
constant integer NO_LUMBER_HUMAN = 83
constant integer NO_LUMBER_NAGA = 84
constant integer NO_LUMBER_NIGHTELF = 85
constant integer NO_LUMBER_ORC = 86
constant integer NO_LUMBER_UNDEAD = 87
constant integer NO_MANA_GENERIC = 88
constant integer NO_MANA_HUMAN = 89
constant integer NO_MANA_NAGA = 90
constant integer NO_MANA_NIGHTELF = 91
constant integer NO_MANA_ORC = 92
constant integer NO_MANA_UNDEAD = 93
constant integer OFF_BLIGHT_UNDEAD = 94
constant integer PAUSE_GAME = 95
constant integer PLACE_BUILDING_DEFAULT = 96
constant integer QUEST_COMPLETED = 97
constant integer QUEST_FAILED = 98
constant integer QUEST_LOG_MODIFIED = 99
constant integer QUEST_NEW = 100
constant integer QUEST_UPDATE = 101
constant integer RALLY_POINT_PLACE = 102
constant integer RESCUE = 103
constant integer RESEARCH_COMPLETE_GENERIC = 104
constant integer RESEARCH_COMPLETE_HUMAN = 105
constant integer RESEARCH_COMPLETE_NAGA = 106
constant integer RESEARCH_COMPLETE_NIGHTELF = 107
constant integer RESEARCH_COMPLETE_ORC = 108
constant integer RESEARCH_COMPLETE_UNDEAD = 109
constant integer SCORE_SCREEN_TAB_CLICK = 110
constant integer SECRET_FOUND = 111
constant integer SUB_GROUP_SELECTION_CHANGE = 112
constant integer TOWN_ATTACK_GENERIC = 113
constant integer TOWN_ATTACK_HUMAN = 114
constant integer TOWN_ATTACK_NAGA = 115
constant integer TOWN_ATTACK_NIGHTELF = 116
constant integer TOWN_ATTACK_ORC = 117
constant integer TOWN_ATTACK_UNDEAD = 118
constant integer UNDER_ATTACK_HUMAN = 119
constant integer UNDER_ATTACK_NAGA = 120
constant integer UNDER_ATTACK_NIGHTELF = 121
constant integer UNDER_ATTACK_ORC = 122
constant integer UNDER_ATTACK_UNDEAD = 123
constant integer UPGRADE_COMPLETE_GENERIC = 124
constant integer UPGRADE_COMPLETE_HUMAN = 125
constant integer UPGRADE_COMPLETE_NAGA = 126
constant integer UPGRADE_COMPLETE_NIGHTELF = 127
constant integer UPGRADE_COMPLETE_ORC = 128
constant integer UPGRADE_COMPLETE_UNDEAD = 129
constant integer UPKEEP_LEVEL = 130
constant integer WARNING = 131
constant integer WAYPOINT = 132
/* private */ string array SOUND_LABEL
endglobals
/*
************************************************************************************
*/
function BlizzardMessage takes string msg, string colorCode, integer soundLabel, player forPlayer returns nothing
local sound snd
local string s
debug if soundLabel >= 0 and soundLabel <= 132 and forPlayer != null then
set snd = CreateSoundFromLabel (SOUND_LABEL[soundLabel], false, false, false, 10, 10)
if colorCode != null then
set s = "|r"
else
set colorCode = ""
set s = ""
endif
if GetLocalPlayer () == forPlayer then
call ClearTextMessages ()
call DisplayTimedTextToPlayer (forPlayer, 0.52, 0.96, MSG_DURATION, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + colorCode + msg + s)
call StartSound (snd)
endif
if s != null then
set s = ""
endif
set snd = null
debug else
debug if msg == null
debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "[BlizzardMessage] [BlizzardMessage] Null message")
debug endif
debug if forPlayer == null
debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "[BlizzardMessage] [BlizzardMessage] Null forPlayer")
debug endif
debug if soundLabel < 0 or soundLabel > 132
debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "[BlizzardMessage] [BlizzardMessage] Invalid sound label")
debug endif
debug endif
endfunction
function BlizzardMessageTimed takes string msg, string colorCode, real dur, integer soundLabel, player forPlayer returns nothing
local sound snd
local string s
debug if soundLabel >= 0 and soundLabel <= 132 and forPlayer != null then
set snd = CreateSoundFromLabel (SOUND_LABEL[soundLabel], false, false, false, 10, 10)
if colorCode != null then
set s = "|r"
else
set colorCode = ""
set s = ""
endif
if GetLocalPlayer () == forPlayer then
call ClearTextMessages ()
call DisplayTimedTextToPlayer (forPlayer, 0.52, 0.96, dur, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + colorCode + msg + s)
call StartSound (snd)
endif
if s != null then
set s = ""
endif
set snd = null
debug else
debug if msg == null
debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "[BlizzardMessage] [BlizzardMessage] Null message")
debug endif
debug if forPlayer == null
debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "[BlizzardMessage] [BlizzardMessage] Null forPlayer")
debug endif
debug if soundLabel < 0 or soundLabel > 132
debug call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 60, "[BlizzardMessage] [BlizzardMessage] Invalid sound label")
debug endif
debug endif
endfunction
private module BMInit
private static method onInit takes nothing returns nothing
call init()
endmethod
endmodule
private struct InitStruct extends array
private static method init takes nothing returns nothing
set SOUND_LABEL[0] = "AllyHeroDiesHuman"
set SOUND_LABEL[1] = "AllyHeroDiesNaga"
set SOUND_LABEL[2] = "AllyHeroDiesNightElf"
set SOUND_LABEL[3] = "AllyHeroDiesOrc"
set SOUND_LABEL[4] = "AllyHeroDiesUndead"
set SOUND_LABEL[5] = "AllyTownUnderAttackHuman"
set SOUND_LABEL[6] = "AllyTownUnderAttackNaga"
set SOUND_LABEL[7] = "AllyTownUnderAttackNightElf"
set SOUND_LABEL[8] = "AllyTownUnderAttackOrc"
set SOUND_LABEL[9] = "AllyTownUnderAttackUndead"
set SOUND_LABEL[10] = "AllyUnderAttackHuman"
set SOUND_LABEL[11] = "AllyUnderAttackNaga"
set SOUND_LABEL[12] = "AllyUnderAttackNightElf"
set SOUND_LABEL[13] = "AllyUnderAttackOrc"
set SOUND_LABEL[14] = "AllyUnderAttackUndead"
set SOUND_LABEL[15] = "ArrangedTeamInvitation"
set SOUND_LABEL[16] = "AutoCastButtonClick"
set SOUND_LABEL[17] = "CantPlaceHuman"
set SOUND_LABEL[18] = "CantPlaceNaga"
set SOUND_LABEL[19] = "CantPlaceNightElf"
set SOUND_LABEL[20] = "CantPlaceOrc"
set SOUND_LABEL[21] = "CantPlaceUndead"
set SOUND_LABEL[22] = "CantRootNightElf"
set SOUND_LABEL[23] = "ChatroomTimerTick"
set SOUND_LABEL[24] = "ClanInvitation"
set SOUND_LABEL[25] = "ConstructingBuildingDefault"
set SOUND_LABEL[26] = "ConstructingBuildingNaga"
set SOUND_LABEL[27] = "ConstructingBuildingNightElf"
set SOUND_LABEL[28] = "ConstructingBuildingOrc"
set SOUND_LABEL[29] = "ConstructingBuildingUndead"
set SOUND_LABEL[30] = "CreepAggro"
set SOUND_LABEL[31] = "ErrorMessage"
set SOUND_LABEL[32] = "GameFound"
set SOUND_LABEL[33] = "GlueScreenClick"
set SOUND_LABEL[34] = "GoldMineCollapseHuman"
set SOUND_LABEL[35] = "GoldMineCollapseNaga"
set SOUND_LABEL[36] = "GoldMineCollapseNightElf"
set SOUND_LABEL[37] = "GoldMineCollapseOrc"
set SOUND_LABEL[38] = "GoldMineCollapseUndead"
set SOUND_LABEL[39] = "GoldMineLowGeneric"
set SOUND_LABEL[40] = "GoldMineLowHuman"
set SOUND_LABEL[41] = "GoldMineLowNaga"
set SOUND_LABEL[42] = "GoldMineLowNightElf"
set SOUND_LABEL[43] = "GoldMineLowOrc"
set SOUND_LABEL[44] = "GoldMineLowUndead"
set SOUND_LABEL[45] = "GoodJob"
set SOUND_LABEL[46] = "HeroDiesGeneric"
set SOUND_LABEL[47] = "HeroDiesHuman"
set SOUND_LABEL[48] = "HeroDiesNaga"
set SOUND_LABEL[49] = "HeroDiesNightElf"
set SOUND_LABEL[50] = "HeroDiesOrc"
set SOUND_LABEL[51] = "HeroDiesUndead"
set SOUND_LABEL[52] = "Hint"
set SOUND_LABEL[53] = "InGameChatWhat"
set SOUND_LABEL[54] = "InterfaceClick"
set SOUND_LABEL[55] = "InterfaceError"
set SOUND_LABEL[56] = "InventoryFullHuman"
set SOUND_LABEL[57] = "InventoryFullNaga"
set SOUND_LABEL[58] = "InventoryFullNightElf"
set SOUND_LABEL[59] = "InventoryFullOrc"
set SOUND_LABEL[60] = "InventoryFullUndead"
set SOUND_LABEL[61] = "ItemDrop"
set SOUND_LABEL[62] = "ItemGet"
set SOUND_LABEL[63] = "ItemReward"
set SOUND_LABEL[64] = "JobDoneSoundHuman"
set SOUND_LABEL[65] = "JobDoneSoundNaga"
set SOUND_LABEL[66] = "JobDoneSoundNightElf"
set SOUND_LABEL[67] = "JobDoneSoundOrc"
set SOUND_LABEL[68] = "JobDoneSoundUndead"
set SOUND_LABEL[69] = "MapPing"
set SOUND_LABEL[70] = "MenuButtonClick"
set SOUND_LABEL[71] = "NewTournament"
set SOUND_LABEL[72] = "NoFoodHuman"
set SOUND_LABEL[73] = "NoFoodNaga"
set SOUND_LABEL[74] = "NoFoodNightElf"
set SOUND_LABEL[75] = "NoFoodOrc"
set SOUND_LABEL[76] = "NoFoodUndead"
set SOUND_LABEL[77] = "NoGoldGeneric"
set SOUND_LABEL[78] = "NoGoldHuman"
set SOUND_LABEL[79] = "NoGoldNaga"
set SOUND_LABEL[80] = "NoGoldNightElf"
set SOUND_LABEL[81] = "NoGoldOrc"
set SOUND_LABEL[82] = "NoGoldUndead"
set SOUND_LABEL[83] = "NoLumberHuman"
set SOUND_LABEL[84] = "NoLumberNaga"
set SOUND_LABEL[85] = "NoLumberNightElf"
set SOUND_LABEL[86] = "NoLumberOrc"
set SOUND_LABEL[87] = "NoLumberUndead"
set SOUND_LABEL[88] = "NoManaGeneric"
set SOUND_LABEL[89] = "NoManaHuman"
set SOUND_LABEL[90] = "NoManaNaga"
set SOUND_LABEL[91] = "NoManaNightElf"
set SOUND_LABEL[92] = "NoManaOrc"
set SOUND_LABEL[93] = "NoManaUndead"
set SOUND_LABEL[94] = "OffBlightUndead"
set SOUND_LABEL[95] = "PauseGame"
set SOUND_LABEL[96] = "PlaceBuildingDefault"
set SOUND_LABEL[97] = "QuestCompleted"
set SOUND_LABEL[98] = "QuestFailed"
set SOUND_LABEL[99] = "QuestLogModified"
set SOUND_LABEL[100] = "QuestNew"
set SOUND_LABEL[101] = "QuestUpdate"
set SOUND_LABEL[102] = "RallyPointPlace"
set SOUND_LABEL[103] = "Rescue"
set SOUND_LABEL[104] = "ResearchCompleteGeneric"
set SOUND_LABEL[105] = "ResearchCompleteHuman"
set SOUND_LABEL[106] = "ResearchCompleteNaga"
set SOUND_LABEL[107] = "ResearchCompleteNightElf"
set SOUND_LABEL[108] = "ResearchCompleteOrc"
set SOUND_LABEL[109] = "ResearchCompleteUndead"
set SOUND_LABEL[110] = "ScoreScreenTabClick"
set SOUND_LABEL[111] = "SecretFound"
set SOUND_LABEL[112] = "SubGroupSelectionChange"
set SOUND_LABEL[113] = "TownAttackGeneric"
set SOUND_LABEL[114] = "TownAttackHuman"
set SOUND_LABEL[115] = "TownAttackNaga"
set SOUND_LABEL[116] = "TownAttackNightElf"
set SOUND_LABEL[117] = "TownAttackOrc"
set SOUND_LABEL[118] = "TownAttackUndead"
set SOUND_LABEL[119] = "UnderAttackHuman"
set SOUND_LABEL[120] = "UnderAttackNaga"
set SOUND_LABEL[121] = "UnderAttackNightElf"
set SOUND_LABEL[122] = "UnderAttackOrc"
set SOUND_LABEL[123] = "UnderAttackUndead"
set SOUND_LABEL[124] = "UpgradeCompleteGeneric"
set SOUND_LABEL[125] = "UpgradeCompleteHuman"
set SOUND_LABEL[126] = "UpgradeCompleteNaga"
set SOUND_LABEL[127] = "UpgradeCompleteNightElf"
set SOUND_LABEL[128] = "UpgradeCompleteOrc"
set SOUND_LABEL[129] = "UpgradeCompleteUndead"
set SOUND_LABEL[130] = "UpkeepLevel"
set SOUND_LABEL[131] = "Warning"
set SOUND_LABEL[132] = "WayPoint"
endmethod
implement BMInit
endstruct
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library PlayerAlliance /* v1.0.0.0
*************************************************************************************
*
* Simple player alliances
*
*******************************************************************
*
* 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
//TESH.scrollpos=0
//TESH.alwaysfold=0
library AllianceSystem /* v1.0.0.1 by Doomlord
*************************************************************************************
*
* Establish an alliance between two players with a single command.
* The alliance proposal must be agreed on mutually before it takes effect.
* However, a player can one-sidedly terminate the alliance.
* This is to simulate the way real life alliances work.
*
* Each player has a fixed number of alliance attempt. You can set it to unlimited though.
*
* I will consider adding features such as bribing, multi-partied alliance, etc. in the future.
*
*************************************************************************************
*
* Credits
*
* Nestharus
* -----------------------
*
* PlayerAlliance snippet
*
* Lohengrin
* -----------------------
*
* System Idea
*
*
*************************************************************************************
*
* How to use
*
* Type -ally <target_player_name> or -ally <player_number> (i.e -ally 1 will send an alliance request to player Red) to send an alliance request to the target player.
* Player that receives the ally request can type -ally <request_player_name> to confirm the alliance.
*
* A player within an alliance can type -war <target_player_name> or -war <player_number> to terminate the alliance.
*
*
*************************************************************************************
*
* */ uses /*
*
* */ BlizzardMessage /* hiveworkshop.com/forums/jass-resources-412/snippet-blizzardmessage-237845/
* */ PlayerAlliance /* hiveworkshop.com/forums/jass-resources-412/snippet-playeralliance-192941/
*
************************************************************************************
*
* SETTINGS
*
*/
globals
// CONFIGURABLES
// Maximum alliance attempt per player. Put in -1 to enable unlimited alliance attempt.
private constant integer MAX_ALLIANCE_ATTEMPT = -1
// Request-to-ally chat message prefix
private constant string ALLY_PREFIX = "-ally"
// Request-to-disally chat message prefix
private constant string DISALLY_PREFIX = "-war"
// END CONFIGURABLES
private integer array MaxAlliance
private boolean array IsAllyBoolean
endglobals
// Bleh
private module ASInit
private static method onInit takes nothing returns nothing
call init()
endmethod
endmodule
// You know what? Just skip this.
private struct AS extends array
private static method getPlayer takes string s returns player
local integer i = 0
loop
exitwhen i > 11
if GetPlayerName(Player(i)) == s or GetPlayerId(Player(i)) + 1 == S2I(s) then
return Player(i)
endif
set i = i + 1
endloop
return null
endmethod
private static method ally takes nothing returns boolean
local player p1 = GetTriggerPlayer()
local player p2 = thistype.getPlayer (SubString(GetEventPlayerChatString(), StringLength(ALLY_PREFIX) + 1, StringLength(GetEventPlayerChatString())))
local integer i = GetPlayerId(p1)
local integer j = GetPlayerId(p2)
local integer k = MaxAlliance[i]
local string s1 = GetPlayerName(p1)
local string s2 = GetPlayerName(p2)
if p2 != null and /*
*/ p1 != p2 and /*
*/ GetPlayerSlotState(p2) == PLAYER_SLOT_STATE_PLAYING and /*
*/ GetPlayerController(p2) == MAP_CONTROL_USER then
if IsAllyBoolean[j*12 + i] and IsAllyBoolean[i*12 + j] then
call BlizzardMessage("Alliance between " + s1 + " and " + s2 + " has already been established", "|cffffcc00", 55, p1)
else
if k > 0 or k == -1 then
if k != -1 then
set MaxAlliance[i] = MaxAlliance[i] - 1
endif
if IsAllyBoolean[j*12 + i] then
call Ally(p1, p2, 7)
call BlizzardMessage("Alliance between " + s1 + " and " + s2 + " is successfully established", "|cffffcc00", 71, p1)
call BlizzardMessage("Alliance between " + s1 + " and " + s2 + " is successfully established", "|cffffcc00", 71, p2)
set IsAllyBoolean[i*12 + j] = true
else
call BlizzardMessage("Alliance request sent to " + s2, "|cffffcc00", 45, p1)
call BlizzardMessage("Alliance request received from " + s1, "|cffffcc00", 45, p2)
set IsAllyBoolean[i*12 + j] = true
endif
else
call BlizzardMessage("Out of alliance attempt", "|cffffcc00", 55, p1)
endif
endif
else
call BlizzardMessage("[AllianceSystem] Invalid target player", "|cffffcc00", 55, p1)
endif
set p1 = null
set p2 = null
return false
endmethod
private static method disally takes nothing returns boolean
local player p1 = GetTriggerPlayer()
local player p2 = thistype.getPlayer (SubString(GetEventPlayerChatString(), StringLength(DISALLY_PREFIX) + 1, StringLength(GetEventPlayerChatString())))
local integer i = GetPlayerId(p1)
local integer j = GetPlayerId(p2)
local string s1 = GetPlayerName(p1)
local string s2 = GetPlayerName(p2)
if p2 != null and /*
*/ p1 != p2 and /*
*/ GetPlayerSlotState(p2) == PLAYER_SLOT_STATE_PLAYING and /*
*/ GetPlayerController(p2) == MAP_CONTROL_USER then
if IsAllyBoolean[i*12 + j] and IsAllyBoolean[j*12 + i] then
call Ally(p1, p2, 0)
call BlizzardMessage("Alliance between " + s1 + " and " + s2 + " has been terminated", "|cffffcc00", 131, p1)
call BlizzardMessage("Alliance between " + s1 + " and " + s2 + " has been terminated", "|cffffcc00", 131, p2)
set IsAllyBoolean[i*12 + j] = false
set IsAllyBoolean[j*12 + i] = false
else
call BlizzardMessage("No alliance established between " + s1 + " and " + s2, "|cffffcc00", 55, p1)
endif
else
call BlizzardMessage("[AllianceSystem] Invalid target player", "|cffffcc00", 55, p1)
endif
set p1 = null
set p2 = null
return false
endmethod
private static method init takes nothing returns nothing
local trigger ally = CreateTrigger()
local trigger disally = CreateTrigger()
local integer j = 0
loop
exitwhen j > 11
if GetPlayerSlotState(Player(j)) == PLAYER_SLOT_STATE_PLAYING and /*
*/ GetPlayerController(Player(j)) == MAP_CONTROL_USER then
call TriggerRegisterPlayerChatEvent(ally, Player(j), ALLY_PREFIX, false)
call TriggerRegisterPlayerChatEvent(disally, Player(j), DISALLY_PREFIX, false)
set MaxAlliance[j] = MAX_ALLIANCE_ATTEMPT
endif
set j = j + 1
endloop
call TriggerAddCondition(ally, Condition(function thistype.ally))
call TriggerAddCondition(disally, Condition(function thistype.disally))
set ally = null
set disally = null
endmethod
implement ASInit
endstruct
endlibrary