Class World.Alliance
- Enclosing class:
World
MapleGuildAlliance 並提供聯盟相關操作與封包廣播。
以 LinkedHashMap 快取聯盟物件、ReentrantReadWriteLock 保護其讀寫;靜態初始化區塊於類別載入時
由 MapleGuildAlliance.loadAll() 從資料庫載入全部聯盟。多數操作會委派給對應 MapleGuildAlliance,
並透過 sendGuild(byte[], int, int) 對聯盟內各公會廣播封包;部分操作(建立/解散/成員異動)伴隨資料庫寫入與全聯盟封包扇出。
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic booleanaddGuildToAlliance(int allianceid, int gid) 將一個公會加入指定聯盟。static voidallianceChat(int gid, String name, int cid, String msg) 發送聯盟頻道聊天訊息給聯盟內所有公會成員。static booleancanInvite(int allianceid) 判斷指定聯盟是否還能再加入公會(容量未滿)。static booleanchangeAllianceCapacity(int allianceid) 擴充指定聯盟的公會容量。static booleanchangeAllianceLeader(int allianceid, int cid) 變更指定聯盟的盟主。static booleanchangeAllianceLeader(int allianceid, int cid, boolean sameGuild) 變更指定聯盟的盟主,並指明新舊盟主是否同一公會。static booleanchangeAllianceRank(int allianceid, int cid, int change) 變更聯盟中某成員的階級。static booleancreateAlliance(String alliancename, int cid, int cid2, int gid, int gid2) 由兩個公會建立一個新聯盟。static booleandisbandAlliance(int allianceid) 解散指定聯盟。static MapleGuildAlliancegetAlliance(int allianceid) 取得指定聯盟物件,必要時延遲載入。static List<byte[]> getAllianceInfo(int allianceid, boolean start) 取得指定聯盟的資訊封包清單(供客戶端載入聯盟視窗)。static intgetAllianceLeader(int allianceid) 取得指定聯盟的盟主角色 ID。static booleanremoveGuildFromAlliance(int allianceid, int gid, boolean expelled) 將一個公會移出指定聯盟(退出或被驅逐)。static voidsave()將所有已載入的聯盟存回資料庫。static voidsendGuild(byte[] packet, int exceptionId, int allianceid) 對指定聯盟內各公會廣播任意封包,並可排除其中一個公會。static voidsendGuild(int allianceid) 對指定聯盟內所有公會廣播聯盟更新封包。static voidsetNewAlliance(int gid, int allianceid) 處理某公會新加入聯盟後的狀態同步與封包廣播。static voidsetOldAlliance(int gid, boolean expelled, int allianceid) 處理某公會離開聯盟(或聯盟解散)後的狀態同步與封包廣播。static voidupdateAllianceNotice(int allianceid, String notice) 更新指定聯盟的公告。static voidupdateAllianceRanks(int allianceid, String[] ranks) 更新指定聯盟的階級名稱。
-
Constructor Details
-
Alliance
public Alliance()
-
-
Method Details
-
getAlliance
取得指定聯盟物件,必要時延遲載入。先於讀鎖下查快取;未命中則升級寫鎖、以
new MapleGuildAlliance(allianceid)從資料庫載入並放入快取。 載入失敗(ID 不正)時回傳null。- Parameters:
allianceid- 聯盟 ID- Returns:
- 對應的
MapleGuildAlliance;載入失敗時為null
-
getAllianceLeader
public static int getAllianceLeader(int allianceid) 取得指定聯盟的盟主角色 ID。- Parameters:
allianceid- 聯盟 ID- Returns:
- 盟主角色 ID;聯盟不存在時為
0
-
updateAllianceRanks
更新指定聯盟的階級名稱。委派給
MapleGuildAlliance.setRank(String[]);聯盟不存在時靜默不做事。- Parameters:
allianceid- 聯盟 IDranks- 各階級名稱
-
updateAllianceNotice
更新指定聯盟的公告。委派給
MapleGuildAlliance.setNotice(String);聯盟不存在時靜默不做事。- Parameters:
allianceid- 聯盟 IDnotice- 新公告內容
-
canInvite
public static boolean canInvite(int allianceid) 判斷指定聯盟是否還能再加入公會(容量未滿)。- Parameters:
allianceid- 聯盟 ID- Returns:
- 容量大於目前公會數則為
true;聯盟不存在時為false
-
changeAllianceLeader
public static boolean changeAllianceLeader(int allianceid, int cid) 變更指定聯盟的盟主。- Parameters:
allianceid- 聯盟 IDcid- 新盟主角色 ID- Returns:
- 變更成功則為
true;聯盟不存在或委派失敗時為false
-
changeAllianceLeader
public static boolean changeAllianceLeader(int allianceid, int cid, boolean sameGuild) 變更指定聯盟的盟主,並指明新舊盟主是否同一公會。- Parameters:
allianceid- 聯盟 IDcid- 新盟主角色 IDsameGuild- 新舊盟主是否屬於同一公會- Returns:
- 變更成功則為
true;聯盟不存在或委派失敗時為false
-
changeAllianceRank
public static boolean changeAllianceRank(int allianceid, int cid, int change) 變更聯盟中某成員的階級。- Parameters:
allianceid- 聯盟 IDcid- 目標角色 IDchange- 階級變更量- Returns:
- 變更成功則為
true;聯盟不存在或委派失敗時為false
-
changeAllianceCapacity
public static boolean changeAllianceCapacity(int allianceid) 擴充指定聯盟的公會容量。- Parameters:
allianceid- 聯盟 ID- Returns:
- 擴充成功則為
true;聯盟不存在或委派失敗時為false
-
disbandAlliance
public static boolean disbandAlliance(int allianceid) 解散指定聯盟。委派給
MapleGuildAlliance.disband()(伴隨資料庫與成員狀態異動)。- Parameters:
allianceid- 聯盟 ID- Returns:
- 解散成功則為
true;聯盟不存在或委派失敗時為false
-
addGuildToAlliance
public static boolean addGuildToAlliance(int allianceid, int gid) 將一個公會加入指定聯盟。- Parameters:
allianceid- 聯盟 IDgid- 欲加入的公會 ID- Returns:
- 加入成功則為
true;聯盟不存在或委派失敗時為false
-
removeGuildFromAlliance
public static boolean removeGuildFromAlliance(int allianceid, int gid, boolean expelled) 將一個公會移出指定聯盟(退出或被驅逐)。- Parameters:
allianceid- 聯盟 IDgid- 欲移除的公會 IDexpelled-true表示被驅逐、false表示主動退出- Returns:
- 移除成功則為
true;聯盟不存在或委派失敗時為false
-
sendGuild
public static void sendGuild(int allianceid) 對指定聯盟內所有公會廣播聯盟更新封包。取得聯盟後送出
getAllianceUpdate與getGuildAlliance兩個AlliancePacket封包(不排除任何公會); 聯盟不存在時不做事。具跨頻道封包送出副作用。- Parameters:
allianceid- 聯盟 ID
-
sendGuild
public static void sendGuild(byte[] packet, int exceptionId, int allianceid) 對指定聯盟內各公會廣播任意封包,並可排除其中一個公會。逐一取出聯盟成員公會,對每個有效且不等於
exceptionId的公會呼叫World.Guild.guildPacket(int, byte[]); 為其他sendGuild/createAlliance等聯盟廣播的底層。具跨頻道封包送出副作用。- Parameters:
packet- 已組好的封包位元組exceptionId- 要排除的公會 ID(無排除時傳-1)allianceid- 聯盟 ID
-
createAlliance
由兩個公會建立一個新聯盟。先以
MapleGuildAlliance.createToDb(int, String, int, int)在資料庫建立聯盟取得新 ID;失敗則回傳false。 成功後設定兩公會的聯盟 ID、調整其聯盟階級(gid為主公會),再對聯盟全體廣播一系列AlliancePacket初始化封包。具資料庫寫入與跨頻道封包扇出副作用。- Parameters:
alliancename- 聯盟名稱cid- 發起者(盟主)角色 IDcid2- 另一公會代表角色 IDgid- 主公會 IDgid2- 次公會 ID- Returns:
- 建立成功則為
true;資料庫建立失敗時為false
-
allianceChat
發送聯盟頻道聊天訊息給聯盟內所有公會成員。由發話者所屬公會
gid反查其聯盟,逐一對聯盟內各公會呼叫MapleGuild.allianceChat(String, int, String); 公會或聯盟不存在時不做事。具跨頻道封包送出副作用。- Parameters:
gid- 發話者所屬公會 IDname- 發話者名稱cid- 發話者角色 IDmsg- 聊天訊息內容
-
setNewAlliance
public static void setNewAlliance(int gid, int allianceid) 處理某公會新加入聯盟後的狀態同步與封包廣播。遍歷聯盟內各公會:對新加入的公會
gid設定聯盟 ID、廣播聯盟資訊/聯盟變更封包、調整其聯盟階級並寫入資料庫; 對其餘既有公會則廣播「新公會加入聯盟」相關封包。聯盟或公會不存在時不做事。具資料庫寫入與跨頻道封包扇出副作用。- Parameters:
gid- 新加入的公會 IDallianceid- 聯盟 ID
-
setOldAlliance
public static void setOldAlliance(int gid, boolean expelled, int allianceid) 處理某公會離開聯盟(或聯盟解散)後的狀態同步與封包廣播。遍歷聯盟內各公會:若為離開的公會
gid(或gid == -1代表整個聯盟解散),則重設其聯盟階級與聯盟 ID 並廣播解散封包; 其餘公會則收到「某公會已離開聯盟」的伺服器訊息與變更/移除封包。期間遇到查無的成員公會會自聯盟中清除。 當gid == -1時,最後於寫鎖下將整個聯盟從快取移除。具跨頻道封包扇出與狀態移除副作用。- Parameters:
gid- 離開的公會 ID;傳-1代表聯盟整個解散並自快取移除expelled-true表示被驅逐、false表示主動退出allianceid- 聯盟 ID
-
getAllianceInfo
取得指定聯盟的資訊封包清單(供客戶端載入聯盟視窗)。當
start為true時額外含初次載入所需的getAllianceInfo與getGuildAlliance封包, 末尾恆附getAllianceUpdate;聯盟不存在時回傳空清單。- Parameters:
allianceid- 聯盟 IDstart- 是否為初次載入(含完整初始化封包)- Returns:
- 封包位元組清單;聯盟不存在時為空清單(非
null)
-
save
public static void save()將所有已載入的聯盟存回資料庫。於寫鎖保護下逐一呼叫
MapleGuildAlliance.saveToDb();通常於伺服器關閉時呼叫。具資料庫寫入副作用。
-