Class World.Guild
- Enclosing class:
World
以行程內的 guilds 表(guildId → MapleGuild)集中保管所有已載入的公會,並以一支
ReentrantReadWriteLock 保護該表的存取(getGuild(int) 採讀鎖查找、未命中時升寫鎖延遲載入;
disbandGuild(int)/save() 持寫鎖)。本子系統大多為薄封裝,將呼叫轉派給對應的 MapleGuild
實例(聊天、職級、技能、公告、BBS、會徽等),多數方法在公會不存在時靜默不動作。具 DB 寫入與跨頻道封包送出副作用。
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic booleanactivateSkill(int gid, int sid, String name) 啟用公會技能。static final voidaddBBSReply(int guildid, int localthreadid, String text, int posterID) 在公會 BBS 的某則主題串底下新增一則回覆。static intaddBBSThread(int guildid, String title, String text, int icon, boolean bNotice, int posterID) 在公會 BBS 新增一則主題串。static int將角色加入其公會(預設顯示加入動畫/提示)。static intaddGuildMember(MapleGuildCharacter mc, boolean show) 將角色加入其公會。static void將一個已載入且資料完整的公會放入行程內的公會表。static voidchangeEmblem(int gid, int affectedPlayers, MapleGuild mgs) 對受影響的玩家廣播公會會徽變更,並觸發其重生以套用新外觀。static voidchangeRank(int gid, int cid, int newRank) 變更公會成員的職級。static voidchangeRankTitle(int gid, String[] ranks) 變更公會各職級的稱號。static intcreateGuild(int leaderId, String name) 建立一個新公會。static final voiddeleteBBSReply(int guildid, int localthreadid, int replyid, int posterID, int guildRank) 刪除公會 BBS 主題串底下的某則回覆。static final voiddeleteBBSThread(int guildid, int localthreadid, int posterID, int guildRank) 刪除公會 BBS 的某則主題串。static voiddeleteGuildCharacter(int guildid, int charid) 移除公會中的某角色:非會長則退會,會長則解散整個公會。static voiddisbandGuild(int gid) 解散公會並自行程內的公會表移除。static final voideditBBSThread(int guildid, int localthreadid, String title, String text, int icon, int posterID, int guildRank) 編輯公會 BBS 的某則主題串。static voidexpelMember(MapleGuildCharacter initiator, String name, int cid) 將成員逐出公會。static voidgainGP(int gid, int amount) 增加公會的公會點數(GP)。static voidgainGP(int gid, int amount, int cid) 由指定成員為公會增加公會點數(GP)。static List<MapleBBSThread> getBBS(int gid) 取得公會 BBS(佈告欄)的所有主題串。static intgetGP(int gid) 取得公會目前的公會點數(GP)。static MapleGuildgetGuild(int id) 依 ID 取得公會,未載入時延遲從 DB 載入。static MapleGuild取得指定角色所屬的公會。static MapleGuildgetGuildByName(String guildName) 依名稱(不分大小寫)取得已載入的公會。static intgetGuildLeader(int guildName) 依公會 ID 取得會長的角色 ID。static intgetGuildLeader(String guildName) 依公會名稱取得會長的角色 ID。static intgetInvitedId(int gid) 取得公會當前的受邀者角色 ID。static intgetSkillLevel(int gid, int sid) 取得公會技能等級。static void在公會頻道發送聊天訊息。static voidguildPacket(int gid, byte[] message) 對整個公會廣播一則封包。static booleanincreaseGuildCapacity(int gid, boolean b) 擴充公會人數上限。static void讓成員退出其公會。static void更新公會成員的等級/職業資訊。static booleanpurchaseSkill(int gid, int sid, String name, int cid) 為公會購買技能。static voidsave()將所有已載入的公會寫回資料庫。static voidsetGuildAndRank(int cid, int guildid, int rank, int contribution, int alliancerank) 設定線上角色的公會 ID/職級/貢獻/聯盟職級,必要時刷新其周遭顯示。static voidsetGuildEmblem(int gid, short bg, byte bgcolor, short logo, byte logocolor) 設定公會會徽(背景與標誌的圖樣與配色)。static voidsetGuildLeader(int gid, int cid) 變更公會會長。static voidsetGuildMemberOnline(MapleGuildCharacter mc, boolean bOnline, int channel) 設定公會成員的上線狀態與所在頻道。static voidsetGuildNotice(int gid, String notice) 設定公會公告。static voidsetInvitedId(int gid, int inviteid) 設定公會當前的受邀者角色 ID。
-
Constructor Details
-
Guild
public Guild()
-
-
Method Details
-
addLoadedGuild
將一個已載入且資料完整的公會放入行程內的公會表。僅當
f.isProper()為真時才登記;否則略過。具狀態變更副作用。- Parameters:
f- 已載入的公會
-
createGuild
建立一個新公會。轉派給
MapleGuild.createGuild(int, String);具 DB 寫入副作用。- Parameters:
leaderId- 公會會長角色 IDname- 公會名稱- Returns:
- 新建立公會的 ID(建立失敗時依底層回傳)
-
getGuild
依 ID 取得公會,未載入時延遲從 DB 載入。先持讀鎖查找行程內的公會表;若未命中,升寫鎖、建立
MapleGuild(其建構子會自 DB 載入), 載入成功(ID 有效且資料完整)才放入表並回傳,載入失敗則回傳null。執行緒安全(lock讀寫鎖)。- Parameters:
id- 公會 ID- Returns:
- 對應公會;若該公會不存在或載入失敗則回傳
null
-
getGuildByName
依名稱(不分大小寫)取得已載入的公會。持讀鎖線性掃描行程內已載入的公會表;不會觸發 DB 延遲載入,故僅能找到當前已載入的公會。執行緒安全。
- Parameters:
guildName- 公會名稱(不分大小寫)- Returns:
- 名稱相符的公會;若無相符(或尚未載入)則回傳
null
-
getGuild
取得指定角色所屬的公會。以角色的公會 ID 轉派給
getGuild(int)(未載入時會延遲從 DB 載入)。- Parameters:
mc- 角色- Returns:
- 角色所屬公會;若無公會或載入失敗則回傳
null
-
setGuildMemberOnline
設定公會成員的上線狀態與所在頻道。轉派給
MapleGuild.setOnline(int, boolean, int);公會不存在時不動作。具公會狀態變更與封包送出副作用。- Parameters:
mc- 公會成員bOnline- 是否上線channel- 成員所在頻道
-
guildPacket
public static void guildPacket(int gid, byte[] message) 對整個公會廣播一則封包。轉派給
MapleGuild.broadcast(byte[]),送達該公會所有在線成員;公會不存在時不動作。 具跨頻道封包送出副作用。- Parameters:
gid- 公會 IDmessage- 已組好的封包位元組
-
addGuildMember
將角色加入其公會(預設顯示加入動畫/提示)。等同
addGuildMember(mc, true)。- Parameters:
mc- 欲加入的公會成員- Returns:
- 底層
MapleGuild.addGuildMember(MapleGuildCharacter, boolean)的回傳;公會不存在時回傳 0
-
addGuildMember
將角色加入其公會。轉派給
MapleGuild.addGuildMember(MapleGuildCharacter, boolean);公會不存在時回傳 0。 具公會狀態變更與封包送出副作用。- Parameters:
mc- 欲加入的公會成員show- 是否向其他成員顯示加入提示- Returns:
- 底層回傳的結果碼;公會不存在時回傳 0
-
leaveGuild
讓成員退出其公會。轉派給
MapleGuild.leaveGuild(MapleGuildCharacter);公會不存在時不動作。具公會狀態變更與封包送出副作用。- Parameters:
mc- 退出的公會成員
-
guildChat
在公會頻道發送聊天訊息。轉派給
MapleGuild.guildChat(String, int, String),廣播給該公會在線成員;公會不存在時不動作。 具跨頻道封包送出副作用。- Parameters:
gid- 公會 IDname- 發話者角色名稱cid- 發話者角色 IDmsg- 聊天內容
-
changeRank
public static void changeRank(int gid, int cid, int newRank) 變更公會成員的職級。轉派給
MapleGuild.changeRank(int, int);公會不存在時不動作。具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDcid- 目標成員角色 IDnewRank- 新的職級
-
expelMember
將成員逐出公會。以發起者的公會 ID 取得公會後轉派給
MapleGuild.expelMember(MapleGuildCharacter, String, int); 公會不存在時不動作。具公會狀態變更與封包送出副作用。- Parameters:
initiator- 發起逐出的成員name- 被逐出成員的角色名稱cid- 被逐出成員的角色 ID
-
setGuildNotice
設定公會公告。轉派給
MapleGuild.setGuildNotice(String);公會不存在時不動作。具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDnotice- 公告內容
-
setGuildLeader
public static void setGuildLeader(int gid, int cid) 變更公會會長。轉派給
MapleGuild.changeGuildLeader(int);公會不存在時不動作。具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDcid- 新會長的角色 ID
-
getSkillLevel
public static int getSkillLevel(int gid, int sid) 取得公會技能等級。轉派給
MapleGuild.getSkillLevel(int);公會不存在時回傳 0。- Parameters:
gid- 公會 IDsid- 公會技能 ID- Returns:
- 該技能等級;公會不存在時回傳 0
-
purchaseSkill
為公會購買技能。轉派給
MapleGuild.purchaseSkill(int, String, int);公會不存在時回傳false。 具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDsid- 公會技能 IDname- 購買者角色名稱cid- 購買者角色 ID- Returns:
- 是否購買成功;公會不存在時回傳
false
-
activateSkill
啟用公會技能。轉派給
MapleGuild.activateSkill(int, String);公會不存在時回傳false。 具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDsid- 公會技能 IDname- 啟用者角色名稱- Returns:
- 是否啟用成功;公會不存在時回傳
false
-
memberLevelJobUpdate
更新公會成員的等級/職業資訊。轉派給
MapleGuild.memberLevelJobUpdate(MapleGuildCharacter);公會不存在時不動作。 具公會狀態變更與封包送出副作用。- Parameters:
mc- 等級或職業有變動的公會成員
-
changeRankTitle
變更公會各職級的稱號。轉派給
MapleGuild.changeRankTitle(String[]);公會不存在時不動作。具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDranks- 依職級排序的稱號字串陣列
-
setGuildEmblem
public static void setGuildEmblem(int gid, short bg, byte bgcolor, short logo, byte logocolor) 設定公會會徽(背景與標誌的圖樣與配色)。轉派給
MapleGuild.setGuildEmblem(short, byte, short, byte);公會不存在時不動作。 具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDbg- 背景圖樣 IDbgcolor- 背景配色logo- 標誌圖樣 IDlogocolor- 標誌配色
-
disbandGuild
public static void disbandGuild(int gid) 解散公會並自行程內的公會表移除。持寫鎖(
lock)執行:呼叫MapleGuild.disbandGuild()後將該公會自guilds移除; 公會不存在時不動作。具 DB 寫入、跨頻道封包送出與狀態變更副作用。執行緒安全。- Parameters:
gid- 公會 ID
-
deleteGuildCharacter
public static void deleteGuildCharacter(int guildid, int charid) 移除公會中的某角色:非會長則退會,會長則解散整個公會。取得公會與該成員後,依其職級判斷:職級 > 1(非會長)呼叫
MapleGuild.leaveGuild(MapleGuildCharacter); 否則(會長)呼叫MapleGuild.disbandGuild()。公會或成員不存在時不動作。具 DB 寫入與封包送出副作用。- Parameters:
guildid- 公會 IDcharid- 角色 ID
-
increaseGuildCapacity
public static boolean increaseGuildCapacity(int gid, boolean b) 擴充公會人數上限。轉派給
MapleGuild.increaseCapacity(boolean);公會不存在時回傳false。 具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDb- 底層擴充選項(是否實際扣費/套用)- Returns:
- 是否擴充成功;公會不存在時回傳
false
-
gainGP
public static void gainGP(int gid, int amount) 增加公會的公會點數(GP)。轉派給
MapleGuild.gainGP(int);公會不存在時不動作。具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDamount- 增加的點數量
-
gainGP
public static void gainGP(int gid, int amount, int cid) 由指定成員為公會增加公會點數(GP)。轉派給
MapleGuild.gainGP(int, boolean, int)(記名於該成員的貢獻);公會不存在時不動作。 具公會狀態變更與封包送出副作用。- Parameters:
gid- 公會 IDamount- 增加的點數量cid- 貢獻點數的成員角色 ID
-
getGP
public static int getGP(int gid) 取得公會目前的公會點數(GP)。轉派給
MapleGuild.getGP();公會不存在時回傳 0。- Parameters:
gid- 公會 ID- Returns:
- 公會點數;公會不存在時回傳 0
-
getInvitedId
public static int getInvitedId(int gid) 取得公會當前的受邀者角色 ID。轉派給
MapleGuild.getInvitedId();公會不存在時回傳 0。- Parameters:
gid- 公會 ID- Returns:
- 受邀者角色 ID;公會不存在時回傳 0
-
setInvitedId
public static void setInvitedId(int gid, int inviteid) 設定公會當前的受邀者角色 ID。轉派給
MapleGuild.setInvitedId(int);公會不存在時不動作。具公會狀態變更副作用。- Parameters:
gid- 公會 IDinviteid- 受邀者角色 ID
-
getGuildLeader
public static int getGuildLeader(int guildName) 依公會 ID 取得會長的角色 ID。以
getGuild(int)取得公會後回傳其MapleGuild.getLeaderId();公會不存在時回傳 0。 (參數名雖為guildName,實際為公會 ID。)- Parameters:
guildName- 公會 ID(非名稱)- Returns:
- 會長角色 ID;公會不存在時回傳 0
-
getGuildLeader
依公會名稱取得會長的角色 ID。以
getGuildByName(String)取得公會後回傳其MapleGuild.getLeaderId(); 公會不存在(或尚未載入)時回傳 0。- Parameters:
guildName- 公會名稱(不分大小寫)- Returns:
- 會長角色 ID;公會不存在時回傳 0
-
save
public static void save()將所有已載入的公會寫回資料庫。持寫鎖(
lock)遍歷行程內公會表,對每個公會呼叫MapleGuild.writeToDB(boolean)(非解散寫入)。 通常於伺服器關閉時呼叫。具 DB 寫入副作用。執行緒安全。 -
getBBS
取得公會 BBS(佈告欄)的所有主題串。轉派給
MapleGuild.getBBS();公會不存在時回傳null。- Parameters:
gid- 公會 ID- Returns:
- BBS 主題串清單;公會不存在時回傳
null
-
addBBSThread
public static int addBBSThread(int guildid, String title, String text, int icon, boolean bNotice, int posterID) 在公會 BBS 新增一則主題串。轉派給
MapleGuild.addBBSThread(String, String, int, boolean, int);公會不存在時回傳 -1。 具公會 BBS 狀態變更副作用。- Parameters:
guildid- 公會 IDtitle- 主題標題text- 主題內文icon- 圖示 IDbNotice- 是否設為公告置頂posterID- 發文者角色 ID- Returns:
- 新主題串的本地 ID;公會不存在時回傳 -1
-
editBBSThread
public static final void editBBSThread(int guildid, int localthreadid, String title, String text, int icon, int posterID, int guildRank) 編輯公會 BBS 的某則主題串。轉派給
MapleGuild.editBBSThread(int, String, String, int, int, int);公會不存在時不動作。 底層會依posterID/guildRank做權限檢查。具公會 BBS 狀態變更副作用。- Parameters:
guildid- 公會 IDlocalthreadid- 主題串的本地 IDtitle- 新標題text- 新內文icon- 新圖示 IDposterID- 操作者角色 IDguildRank- 操作者公會職級
-
deleteBBSThread
public static final void deleteBBSThread(int guildid, int localthreadid, int posterID, int guildRank) 刪除公會 BBS 的某則主題串。轉派給
MapleGuild.deleteBBSThread(int, int, int);公會不存在時不動作。 底層會依posterID/guildRank做權限檢查。具公會 BBS 狀態變更副作用。- Parameters:
guildid- 公會 IDlocalthreadid- 主題串的本地 IDposterID- 操作者角色 IDguildRank- 操作者公會職級
-
addBBSReply
在公會 BBS 的某則主題串底下新增一則回覆。轉派給
MapleGuild.addBBSReply(int, String, int);公會不存在時不動作。具公會 BBS 狀態變更副作用。- Parameters:
guildid- 公會 IDlocalthreadid- 主題串的本地 IDtext- 回覆內文posterID- 回覆者角色 ID
-
deleteBBSReply
public static final void deleteBBSReply(int guildid, int localthreadid, int replyid, int posterID, int guildRank) 刪除公會 BBS 主題串底下的某則回覆。轉派給
MapleGuild.deleteBBSReply(int, int, int, int);公會不存在時不動作。 底層會依posterID/guildRank做權限檢查。具公會 BBS 狀態變更副作用。- Parameters:
guildid- 公會 IDlocalthreadid- 主題串的本地 IDreplyid- 回覆 IDposterID- 操作者角色 IDguildRank- 操作者公會職級
-
changeEmblem
對受影響的玩家廣播公會會徽變更,並觸發其重生以套用新外觀。先透過
World.Broadcast.sendGuildPacket(int, byte[], int, int)送出GuildPacket.guildEmblemChange(int, short, byte, short, byte)封包, 再呼叫setGuildAndRank(int, int, int, int, int)以-1全參數觸發玩家重生(刷新公會名稱/圖示)。具跨頻道封包送出副作用。- Parameters:
gid- 公會 IDaffectedPlayers- 受影響玩家的識別(轉送給廣播層)mgs- 提供新會徽圖樣與配色的公會物件
-
setGuildAndRank
public static void setGuildAndRank(int cid, int guildid, int rank, int contribution, int alliancerank) 設定線上角色的公會 ID/職級/貢獻/聯盟職級,必要時刷新其周遭顯示。於各頻道定位
cid;找不到頻道或角色時直接返回。當guildid == -1 && rank == -1時僅作重生 (不寫入任何欄位);否則寫入公會 ID/職級/貢獻/聯盟職級並呼叫saveGuildStatus()(DB 寫入), 並記錄是否換了公會。若換了公會(或為純重生)且角色確實在線,會對其所在地圖廣播CField.loadGuildName(MapleCharacter)/CField.loadGuildIcon(MapleCharacter)以更新名牌與會徽。具 DB 寫入與地圖廣播副作用。- Parameters:
cid- 目標角色 IDguildid- 新公會 ID;連同rank皆為 -1 時代表僅重生、不改資料rank- 新公會職級contribution- 新公會貢獻值alliancerank- 新聯盟職級
-