Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library Diplomacy initializer init
- globals
- //
- private constant real DISPLAY_TIME = 10.
- private constant integer PENDING_TIME = 15
- private constant real Give_Gold_Tax = 0.1
- private constant real Give_Wood_Tax = 0.1
- integer AllyLimit = 1 // You can change this through outside triggers.
- //
- private timer array Timer
- private boolean array PendingOffer
- private integer array Offering
- private integer array Recieving
- private string array Faction
- private force Active = CreateForce()
- private hashtable hash = InitHashtable()
- private player cmd_p
- private integer array AllyCount //Should I cound the allies in the beginning? What happens if full?
- private sound s_Offer
- private sound s_Peace
- private sound s_War
- private sound s_Ally
- endglobals
- private function SetWords takes nothing returns nothing
- local string s = StringCase(GetEventPlayerChatString(), false)
- local string array word
- local integer i = 1
- local integer j = 0
- set i = 0
- loop
- exitwhen i > StringLength(s)
- if (SubString(s,i, i+1) == " ") then
- set j = j + 1
- else
- set word[j] = word[j] + SubString(s,i,i+1)
- endif
- set i = i + 1
- endloop
- if word[1] == "dark" or word[1] == "light" then
- set word[1] = word[1] + " " + word[2]
- set i = 2
- loop
- exitwhen word[i+1] == null
- set word[i] = word[i+1]
- set i = i + 1
- endloop
- endif
- set cmd_p = Player(LoadInteger(hash, 0, StringHash(word[1])))
- if (cmd_p == Player(0) and word[1] != "1" and word[1] != "red" and word[1] != "sparta") then
- set cmd_p = null
- endif
- endfunction
- private function DisplayFaction takes string factions returns string
- local integer i = 0
- local integer j = 0
- local string s = SubString(factions, 0, StringLength(factions)-1)
- loop
- exitwhen i > StringLength(s)
- if (SubString(s, i, i+1) == " ") then
- set j = i
- endif
- set i = i + 1
- endloop
- if (j > 1) then
- set s = SubString(s, 0, j-1) + " and " + SubString(s, j+1, StringLength(s))
- endif
- return s
- endfunction
- //******************************//
- // Offers //
- //******************************//
- private function DisplayExpiredMsg takes nothing returns nothing
- endfunction
- private function RemoveOffer takes integer f returns nothing
- call PauseTimer(Timer[f])
- call DestroyTimer(Timer[f])
- set PendingOffer[f] = false
- endfunction
- private function OfferExpires takes nothing returns nothing
- local integer tID = LoadInteger(hash, GetHandleId(GetExpiredTimer()), 0)
- call RemoveOffer(tID)
- if (tID <= 144) then
- call DisplayTimedTextToPlayer(Player(Offering[tID]), 0,0, DISPLAY_TIME, "Your Peace offer to " + Faction[Recieving[tID]] + " has expired.")
- call DisplayTimedTextToPlayer(Player(Recieving[tID]), 0,0, DISPLAY_TIME, Faction[Offering[tID]] + "'s Peace offer has expired.\n")
- //set msg_n[PenDexPlayer_1[i]] = msg_n[PenDexPlayer_1[i]] + " " + Faction[PenDexPlayer_2[i]] + ","
- else
- call DisplayTimedTextToPlayer(Player(Offering[tID]), 0,0, DISPLAY_TIME, "Your Alliance offer to " + Faction[Recieving[tID]] + " has expired.")
- call DisplayTimedTextToPlayer(Player(Recieving[tID]), 0,0, DISPLAY_TIME, Faction[Offering[tID]] + "'s Alliance offer has expired.\n")
- //set msg_a[PenDexPlayer_1[i]] = msg_a[PenDexPlayer_1[i]] + " " + Faction[PenDexPlayer_2[i]] + ","
- endif
- endfunction
- private function MakeOffer takes integer f, integer pID_1, integer pID_2 returns nothing
- set Timer[f] = CreateTimer()
- set PendingOffer[f] = true
- call TimerStart(Timer[f], 5, false, function OfferExpires)
- call SaveInteger(hash, GetHandleId(Timer[f]), 0, f)
- set Offering[f] = pID_1
- set Recieving[f] = pID_2
- endfunction
- //********************************//
- // Triggers //
- //********************************//
- private function Reveal takes nothing returns boolean
- local integer cmd_pID
- local player p
- local string s = ""
- local string s1 = ""
- local string s2 = ""
- local string s3 = ""
- local integer i = 0
- call SetWords()
- set cmd_pID = GetPlayerId(cmd_p)
- if (cmd_p != null and IsPlayerInForce(cmd_p, Active) == true) then
- set s = Faction[cmd_pID] + "\n"
- loop
- exitwhen i > 11
- set p = Player(i)
- if (IsPlayerInForce(p, Active)) then
- if (IsPlayerAlly(cmd_p,p) == true and GetPlayerAlliance(p, cmd_p, ALLIANCE_SHARED_VISION) == true and cmd_p != p) then
- set s1 = s1 + " " + Faction[i] + ","
- elseif (IsPlayerAlly(cmd_p, p) == true and GetPlayerAlliance(cmd_p, p, ALLIANCE_SHARED_VISION) == false) then
- set s2 = s2 + " " + Faction[i] + ","
- elseif (IsPlayerEnemy(cmd_p, p)) then
- set s3 = s3 + " " + Faction[i] + ","
- endif
- endif
- set i = i + 1
- endloop
- if (StringLength(s1) > 0) then
- set s1 = "Allied:" + DisplayFaction(s1) + ".\n"
- endif
- if (StringLength(s2) > 0) then
- set s2 = "Neutral:" + DisplayFaction(s2) + ".\n"
- endif
- if (StringLength(s3) > 0) then
- set s3 = "Hostile:" + DisplayFaction(s3) + "."
- endif
- call DisplayTimedTextToPlayer(GetTriggerPlayer(), 0, 0, DISPLAY_TIME, s+s1+s2+s3)
- endif
- return false
- endfunction
- private function War takes nothing returns boolean
- local integer i = 13
- local player p = GetTriggerPlayer()
- local integer pID = GetPlayerId(p)
- local player p_i
- local integer cmd_pID
- local string msg = ""
- call SetWords()
- if (cmd_p != null) then
- set cmd_pID = GetPlayerId(cmd_p)
- if (cmd_pID < 12) then
- set i = cmd_pID
- elseif (cmd_pID == 12) then
- set i = 0
- endif
- loop
- exitwhen i > 11
- set p_i = Player(i)
- if (IsPlayerAlly(p, p_i) == true and p != p_i) then
- call SetPlayerAllianceStateBJ(p, p_i, bj_ALLIANCE_UNALLIED)
- call SetPlayerAllianceStateBJ(p_i, p, bj_ALLIANCE_UNALLIED)
- if (PendingOffer[(pID+1)*12+(i+1)-12] == true) then
- call RemoveOffer((pID+1)*12+(i+1)-12)
- endif
- if (PendingOffer[(i+1)*12+(pID+1)-12] == true) then
- call RemoveOffer((i+1)*12+(pID+1)-12)
- endif
- if (PendingOffer[144+(pID+1)*12+(i+1)-12] == true) then
- call RemoveOffer(144+(pID+1)*12+(i+1)-12)
- endif
- if (PendingOffer[144+(i+1)*12+(pID+1)-12] == true) then
- call RemoveOffer(144+(i+1)*12+(pID+1)-12)
- endif
- if (GetLocalPlayer() == p_i) then
- call StopSound(s_War, false, false)
- call StartSound(s_War)
- endif
- set msg = msg + " " + Faction[i] + ","
- endif
- if (cmd_pID != 12) then
- set i = 12
- else
- set i = i + 1
- endif
- endloop
- if (StringLength(msg) > 0) then
- if (GetLocalPlayer() == p) then
- call StopSound(s_War, false, false)
- call StartSound(s_War)
- endif
- set msg = Faction[pID] + " declares War on" + DisplayFaction(msg) + "."
- call DisplayTimedTextToPlayer(GetLocalPlayer(), 0,0, DISPLAY_TIME, msg)
- endif
- endif
- return false
- endfunction
- private function Peace takes nothing returns boolean
- local integer i = 13
- local integer x
- local player p1 = GetTriggerPlayer()
- local player p_i
- local integer pID_1 = GetPlayerId(p1)
- local integer f1
- local integer f2
- local string msg1 = ""
- local string msg2 = ""
- call SetWords()
- if (cmd_p != null) then
- set x = GetPlayerId(cmd_p)
- if (x < 12) then
- set i = x
- elseif (x == 12) then
- set i = 0
- endif
- endif
- loop
- exitwhen i > 11
- set f1 = (pID_1+1)*12+(i+1)-12
- set f2 = (i+1)*12+(pID_1+1)-12
- set p_i = Player(i)
- // Accept Peace
- if (PendingOffer[f2] == true) then
- call RemoveOffer(f2)
- call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, DISPLAY_TIME, Faction[i] + " and " + Faction[pID_1] + " are now neutral towards each other.")
- call SetPlayerAllianceStateBJ( p_i, p1, bj_ALLIANCE_NEUTRAL)
- call SetPlayerAllianceStateBJ( p1, p_i, bj_ALLIANCE_NEUTRAL)
- // Offer Peace
- elseif (IsPlayerEnemy(p1, p_i) == true and IsPlayerInForce(p_i, Active) == true and PendingOffer[f1] == false) then
- call MakeOffer(f1, pID_1, i)
- set msg1 = msg1 + " " + Faction[i] + ","
- call DisplayTimedTextToPlayer(p_i, 0,0, DISPLAY_TIME, Faction[pID_1] + " has offered you Peace.")
- if (GetLocalPlayer() == p_i) then
- call StopSound(s_Peace, false, false)
- call StartSound(s_Peace)
- endif
- // End Alliance into Neutral
- elseif (x < 12 and IsPlayerAlly(p1, p_i) == true and GetPlayerAlliance(p1, p_i, ALLIANCE_SHARED_VISION) == true and p1 != p_i) then
- call DisplayTimedTextToPlayer(GetLocalPlayer(), 0,0, DISPLAY_TIME, Faction[pID_1] + " has ended the alliance with " + Faction[i] + ".")
- call SetPlayerAllianceStateBJ( p_i, p1, bj_ALLIANCE_NEUTRAL)
- call SetPlayerAllianceStateBJ( p1, p_i, bj_ALLIANCE_NEUTRAL)
- if (GetLocalPlayer() == p1 or GetLocalPlayer() == p_i) then
- call StopSound(s_Peace, false, false)
- call StartSound(s_Peace)
- endif
- // Withdraw Peace Offer
- elseif (PendingOffer[f1] == true) then
- call RemoveOffer(f1)
- set msg2 = msg2 + " " + Faction[i] + ","
- call DisplayTimedTextToPlayer(p_i, 0,0, DISPLAY_TIME, Faction[pID_1] + " has withdrawn the peace offer.")
- endif
- if (x < 12) then
- set i = 12
- else
- set i = i + 1
- endif
- endloop
- if (StringLength(msg1) > 0) then
- set msg1 = "You offered" + DisplayFaction(msg1) + " Peace."
- call DisplayTimedTextToPlayer(p1, 0,0, DISPLAY_TIME, msg1)
- endif
- if (StringLength(msg2) > 0) then
- set msg2 = "You are no longer offering" + DisplayFaction(msg2) + " Peace."
- call DisplayTimedTextToPlayer(p1, 0,0, DISPLAY_TIME, msg2)
- endif
- return false
- endfunction
- private function Ally takes nothing returns boolean
- local player p = GetTriggerPlayer()
- local integer pID = GetPlayerId(p)
- local integer cmd_pID
- local integer f1
- local integer f2
- call SetWords()
- if (cmd_p != null and IsPlayerInForce(cmd_p, Active) == true and cmd_p != p) then
- set cmd_pID = GetPlayerId(cmd_p)
- set f1 = 144 + (pID+1)*12+(cmd_pID+1)-12
- set f2 = 144 + (cmd_pID+1)*12+(pID+1)-12
- // Accept Alliance
- if (PendingOffer[f2] == true) then
- if (AllyCount[pID] < AllyLimit) then
- set AllyCount[pID] = AllyCount[pID] + 1
- set AllyCount[cmd_pID] = AllyCount[cmd_pID] + 1
- call RemoveOffer(f2)
- // Remove Pending Neutral Offers
- if (PendingOffer[f1-144] == true) then
- call RemoveOffer(f1-144)
- endif
- if (PendingOffer[f2-144] == true) then
- call RemoveOffer(f2-144)
- endif
- call DisplayTimedTextToPlayer(GetLocalPlayer(), 0,0, DISPLAY_TIME, Faction[cmd_pID] + " and " + Faction[pID] + " have formed an Alliance!")
- call SetPlayerAllianceStateBJ(cmd_p, p, bj_ALLIANCE_ALLIED_VISION)
- call SetPlayerAllianceStateBJ(p, cmd_p, bj_ALLIANCE_ALLIED_VISION)
- if (GetLocalPlayer() == cmd_p or GetLocalPlayer() == p) then
- call StopSound(s_Ally, false, false)
- call StartSound(s_Ally)
- endif
- else
- call DisplayTimedTextToPlayer(p, 0,0, DISPLAY_TIME, "Ally limit reached. Unally someone to be able to Ally " + Faction[cmd_pID] + ".")
- endif
- // Offer Alliance
- elseif (GetPlayerAlliance(cmd_p, p, ALLIANCE_SHARED_VISION) == false and PendingOffer[f1] == false) then
- if (AllyCount[pID] < AllyLimit) then
- call MakeOffer(f1, pID, cmd_pID)
- call DisplayTimedTextToPlayer(cmd_p, 0,0, DISPLAY_TIME, Faction[pID] + " has offered you an Alliance.\n")
- call DisplayTimedTextToPlayer(p, 0,0, DISPLAY_TIME, "You offered " + Faction[cmd_pID] + " an Alliance.\n")
- if (GetLocalPlayer() == cmd_p) then
- call StopSound(s_Ally, false, false)
- call StartSound(s_Ally)
- endif
- else
- call DisplayTimedTextToPlayer(p, 0,0, DISPLAY_TIME, "Ally limit reached. Unally someone to be able to Ally " + Faction[cmd_pID] + ".")
- endif
- // Withdraw Offer
- elseif (PendingOffer[f1] == true) then
- call RemoveOffer(f1)
- call DisplayTimedTextToPlayer(p, 0,0, DISPLAY_TIME, Faction[pID] + " has withdrawn the Alliance offer.")
- call DisplayTimedTextToPlayer(p, 0,0, DISPLAY_TIME, "You are no longer offering " + Faction[cmd_pID] + " an Alliance.")
- endif
- endif
- return false
- endfunction
- private function Give takes nothing returns boolean
- return false
- endfunction
- private function Help takes nothing returns boolean
- local string msg = "Diplomacy Commands:\n-reveal # or -r # \n-ally # or -alliance # \n-war # or -unally # \n-neutral # or -na # or -peace #\n"
- call DisplayTimedTextToPlayer(GetTriggerPlayer(), 0, 0, DISPLAY_TIME, msg)
- return false
- endfunction
- private function Leaves takes nothing returns boolean
- call ForceRemovePlayer(Active, GetTriggerPlayer())
- return false
- endfunction
- //===========================================================================
- private function init takes nothing returns nothing
- local trigger array t
- local integer i = 0
- loop
- exitwhen i > 5
- set t[i] = CreateTrigger()
- set i = i + 1
- endloop
- set i = 0
- loop
- exitwhen i > 11
- // if player playing and not computer
- call ForceAddPlayer(Active, Player(i))
- call TriggerRegisterPlayerChatEvent(t[0], Player(i), "-reveal", false)
- call TriggerRegisterPlayerChatEvent(t[0], Player(i), "-r", false)
- call TriggerRegisterPlayerChatEvent(t[1], Player(i), "-war", false)
- call TriggerRegisterPlayerChatEvent(t[1], Player(i), "-unally", false)
- call TriggerRegisterPlayerChatEvent(t[2], Player(i), "-na", false)
- call TriggerRegisterPlayerChatEvent(t[2], Player(i), "-neutral", false)
- call TriggerRegisterPlayerChatEvent(t[2], Player(i), "-peace", false)
- call TriggerRegisterPlayerChatEvent(t[3], Player(i), "-ally", false)
- call TriggerRegisterPlayerChatEvent(t[3], Player(i), "-alliance", false)
- call TriggerRegisterPlayerChatEvent(t[4], Player(i), "-diplomacy", false)
- call TriggerRegisterPlayerChatEvent(t[4], Player(i), "-d", false)
- call TriggerRegisterPlayerEventLeave(t[5], Player(i))
- //endif
- set i = i + 1
- endloop
- call TriggerAddCondition( t[0], Condition( function Reveal ))
- call TriggerAddCondition( t[1], Condition( function War ))
- call TriggerAddCondition( t[2], Condition( function Peace ))
- call TriggerAddCondition( t[3], Condition( function Ally ))
- call TriggerAddCondition( t[4], Condition( function Help ))
- call TriggerAddCondition( t[5], Condition( function Leaves ))
- set i = 0
- loop
- exitwhen t[i] == null
- set t[i] = null
- set i = i + 1
- endloop
- set s_Offer = gg_snd_PEACE
- set s_Peace = gg_snd_PEACE
- set s_War = gg_snd_WAR
- set s_Ally = gg_snd_ALLY
- set Faction[0] = "|c00FF0303Sparta|r"
- set Faction[1] = "|c000042FFAthens|r"
- set Faction[2] = "|c001CE6B9Argos|r"
- set Faction[3] = "|c00540081Thebes|r"
- set Faction[4] = "|c00FFFC01Epirus|r"
- set Faction[5] = "|c00fEBA0EMacedon|r"
- set Faction[6] = "|c0020C000Thessaly|r"
- set Faction[7] = "|c00E55BB0Crete|r"
- set Faction[8] = "|c00959697Persia|r"
- set Faction[9] = "|c007EBFF1Thrace|r"
- set Faction[10] = "|c00106246Rhodes|r"
- set Faction[11] = "|c004E2A04Troy|r"
- // Player 0
- call SaveInteger(hash,0, StringHash("red"),0)
- call SaveInteger(hash,0, StringHash("sparta"),0)
- call SaveInteger(hash,0, StringHash("1"),0)
- // Player 1
- call SaveInteger(hash,0, StringHash("blue"),1)
- call SaveInteger(hash,0, StringHash("athens"),1)
- call SaveInteger(hash,0, StringHash("2"),1)
- // Player 2
- call SaveInteger(hash,0, StringHash("teal"),2)
- call SaveInteger(hash,0, StringHash("argos"),2)
- call SaveInteger(hash,0, StringHash("3"),2)
- // Player 3
- call SaveInteger(hash,0, StringHash("purple"),3)
- call SaveInteger(hash,0, StringHash("thebes"),3)
- call SaveInteger(hash,0, StringHash("4"),3)
- // Player 4
- call SaveInteger(hash,0, StringHash("yellow"),4)
- call SaveInteger(hash,0, StringHash("epirus"),4)
- call SaveInteger(hash,0, StringHash("5"), 4)
- // Player 5
- call SaveInteger(hash,0, StringHash("orange"),5)
- call SaveInteger(hash,0, StringHash("epirus"),5)
- call SaveInteger(hash,0, StringHash("6"),5)
- // Player 6
- call SaveInteger(hash,0, StringHash("green"),6)
- call SaveInteger(hash,0, StringHash("thessaly"),6)
- call SaveInteger(hash,0, StringHash("7"), 6)
- // Player 7
- call SaveInteger(hash,0, StringHash("pink"),7)
- call SaveInteger(hash,0, StringHash("crete"),7)
- call SaveInteger(hash,0, StringHash("8"),7)
- // Player 8
- call SaveInteger(hash,0, StringHash("gray"),8)
- call SaveInteger(hash,0, StringHash("grey"),8)
- call SaveInteger(hash,0, StringHash("persia"),8)
- call SaveInteger(hash,0, StringHash("9"),8)
- // Player 9
- call SaveInteger(hash,0, StringHash("light blue"),9)
- call SaveInteger(hash,0, StringHash("lightblue"),9)
- call SaveInteger(hash,0, StringHash("lb"),9)
- call SaveInteger(hash,0, StringHash("thrace"),9)
- call SaveInteger(hash,0, StringHash("10"),9)
- // Player 10
- call SaveInteger(hash,0, StringHash("dark green"),10)
- call SaveInteger(hash,0, StringHash("darkgreen"),10)
- call SaveInteger(hash,0, StringHash("dg"),10)
- call SaveInteger(hash,0, StringHash("rhodes"),10)
- call SaveInteger(hash,0, StringHash("11"),10)
- // Player 11
- call SaveInteger(hash,0, StringHash("brown"),11)
- call SaveInteger(hash,0, StringHash("troy"),11)
- call SaveInteger(hash,0, StringHash("12"),11)
- // All Players
- call SaveInteger(hash,0, StringHash("all"),12)
- // Gold
- call SaveInteger(hash,0, StringHash("gold"),14)
- call SaveInteger(hash,0, StringHash("g"),14)
- // Lumber
- call SaveInteger(hash,0, StringHash("lumber"),15)
- call SaveInteger(hash,0, StringHash("l"),15)
- call SaveInteger(hash,0, StringHash("wood"),15)
- call SaveInteger(hash,0, StringHash("w"),15)
- endfunction
- endlibrary
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement