Class World.Guild

java.lang.Object
handling.world.World.Guild
Enclosing class:
World

public static class World.Guild extends Object
公會(Guild)跨頻道協調子系統。

以行程內的 guilds 表(guildId → MapleGuild)集中保管所有已載入的公會,並以一支 ReentrantReadWriteLock 保護該表的存取(getGuild(int) 採讀鎖查找、未命中時升寫鎖延遲載入; disbandGuild(int)save() 持寫鎖)。本子系統大多為薄封裝,將呼叫轉派給對應的 MapleGuild 實例(聊天、職級、技能、公告、BBS、會徽等),多數方法在公會不存在時靜默不動作。具 DB 寫入與跨頻道封包送出副作用。

  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
    activateSkill(int gid, int sid, String name)
    啟用公會技能。
    static final void
    addBBSReply(int guildid, int localthreadid, String text, int posterID)
    在公會 BBS 的某則主題串底下新增一則回覆。
    static int
    addBBSThread(int guildid, String title, String text, int icon, boolean bNotice, int posterID)
    在公會 BBS 新增一則主題串。
    static int
    將角色加入其公會(預設顯示加入動畫/提示)。
    static int
    將角色加入其公會。
    static void
    將一個已載入且資料完整的公會放入行程內的公會表。
    static void
    changeEmblem(int gid, int affectedPlayers, MapleGuild mgs)
    對受影響的玩家廣播公會會徽變更,並觸發其重生以套用新外觀。
    static void
    changeRank(int gid, int cid, int newRank)
    變更公會成員的職級。
    static void
    changeRankTitle(int gid, String[] ranks)
    變更公會各職級的稱號。
    static int
    createGuild(int leaderId, String name)
    建立一個新公會。
    static final void
    deleteBBSReply(int guildid, int localthreadid, int replyid, int posterID, int guildRank)
    刪除公會 BBS 主題串底下的某則回覆。
    static final void
    deleteBBSThread(int guildid, int localthreadid, int posterID, int guildRank)
    刪除公會 BBS 的某則主題串。
    static void
    deleteGuildCharacter(int guildid, int charid)
    移除公會中的某角色:非會長則退會,會長則解散整個公會。
    static void
    disbandGuild(int gid)
    解散公會並自行程內的公會表移除。
    static final void
    editBBSThread(int guildid, int localthreadid, String title, String text, int icon, int posterID, int guildRank)
    編輯公會 BBS 的某則主題串。
    static void
    expelMember(MapleGuildCharacter initiator, String name, int cid)
    將成員逐出公會。
    static void
    gainGP(int gid, int amount)
    增加公會的公會點數(GP)。
    static void
    gainGP(int gid, int amount, int cid)
    由指定成員為公會增加公會點數(GP)。
    getBBS(int gid)
    取得公會 BBS(佈告欄)的所有主題串。
    static int
    getGP(int gid)
    取得公會目前的公會點數(GP)。
    static MapleGuild
    getGuild(int id)
    依 ID 取得公會,未載入時延遲從 DB 載入。
    static MapleGuild
    取得指定角色所屬的公會。
    static MapleGuild
    依名稱(不分大小寫)取得已載入的公會。
    static int
    getGuildLeader(int guildName)
    依公會 ID 取得會長的角色 ID。
    static int
    依公會名稱取得會長的角色 ID。
    static int
    getInvitedId(int gid)
    取得公會當前的受邀者角色 ID。
    static int
    getSkillLevel(int gid, int sid)
    取得公會技能等級。
    static void
    guildChat(int gid, String name, int cid, String msg)
    在公會頻道發送聊天訊息。
    static void
    guildPacket(int gid, byte[] message)
    對整個公會廣播一則封包。
    static boolean
    increaseGuildCapacity(int gid, boolean b)
    擴充公會人數上限。
    static void
    讓成員退出其公會。
    static void
    更新公會成員的等級/職業資訊。
    static boolean
    purchaseSkill(int gid, int sid, String name, int cid)
    為公會購買技能。
    static void
    將所有已載入的公會寫回資料庫。
    static void
    setGuildAndRank(int cid, int guildid, int rank, int contribution, int alliancerank)
    設定線上角色的公會 ID/職級/貢獻/聯盟職級,必要時刷新其周遭顯示。
    static void
    setGuildEmblem(int gid, short bg, byte bgcolor, short logo, byte logocolor)
    設定公會會徽(背景與標誌的圖樣與配色)。
    static void
    setGuildLeader(int gid, int cid)
    變更公會會長。
    static void
    setGuildMemberOnline(MapleGuildCharacter mc, boolean bOnline, int channel)
    設定公會成員的上線狀態與所在頻道。
    static void
    setGuildNotice(int gid, String notice)
    設定公會公告。
    static void
    setInvitedId(int gid, int inviteid)
    設定公會當前的受邀者角色 ID。

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • Guild

      public Guild()
  • Method Details

    • addLoadedGuild

      public static void addLoadedGuild(MapleGuild f)
      將一個已載入且資料完整的公會放入行程內的公會表。

      僅當 f.isProper() 為真時才登記;否則略過。具狀態變更副作用。

      Parameters:
      f - 已載入的公會
    • createGuild

      public static int createGuild(int leaderId, String name)
      建立一個新公會。

      轉派給 MapleGuild.createGuild(int, String);具 DB 寫入副作用。

      Parameters:
      leaderId - 公會會長角色 ID
      name - 公會名稱
      Returns:
      新建立公會的 ID(建立失敗時依底層回傳)
    • getGuild

      public static MapleGuild getGuild(int id)
      依 ID 取得公會,未載入時延遲從 DB 載入。

      先持讀鎖查找行程內的公會表;若未命中,升寫鎖、建立 MapleGuild(其建構子會自 DB 載入), 載入成功(ID 有效且資料完整)才放入表並回傳,載入失敗則回傳 null。執行緒安全(lock 讀寫鎖)。

      Parameters:
      id - 公會 ID
      Returns:
      對應公會;若該公會不存在或載入失敗則回傳 null
    • getGuildByName

      public static MapleGuild getGuildByName(String guildName)
      依名稱(不分大小寫)取得已載入的公會。

      持讀鎖線性掃描行程內已載入的公會表;不會觸發 DB 延遲載入,故僅能找到當前已載入的公會。執行緒安全。

      Parameters:
      guildName - 公會名稱(不分大小寫)
      Returns:
      名稱相符的公會;若無相符(或尚未載入)則回傳 null
    • getGuild

      public static MapleGuild getGuild(MapleCharacter mc)
      取得指定角色所屬的公會。

      以角色的公會 ID 轉派給 getGuild(int)(未載入時會延遲從 DB 載入)。

      Parameters:
      mc - 角色
      Returns:
      角色所屬公會;若無公會或載入失敗則回傳 null
    • setGuildMemberOnline

      public static void setGuildMemberOnline(MapleGuildCharacter mc, boolean bOnline, int channel)
      設定公會成員的上線狀態與所在頻道。

      轉派給 MapleGuild.setOnline(int, boolean, int);公會不存在時不動作。具公會狀態變更與封包送出副作用。

      Parameters:
      mc - 公會成員
      bOnline - 是否上線
      channel - 成員所在頻道
    • guildPacket

      public static void guildPacket(int gid, byte[] message)
      對整個公會廣播一則封包。

      轉派給 MapleGuild.broadcast(byte[]),送達該公會所有在線成員;公會不存在時不動作。 具跨頻道封包送出副作用。

      Parameters:
      gid - 公會 ID
      message - 已組好的封包位元組
    • addGuildMember

      public static int addGuildMember(MapleGuildCharacter mc)
      將角色加入其公會(預設顯示加入動畫/提示)。

      等同 addGuildMember(mc, true)

      Parameters:
      mc - 欲加入的公會成員
      Returns:
      底層 MapleGuild.addGuildMember(MapleGuildCharacter, boolean) 的回傳;公會不存在時回傳 0
    • addGuildMember

      public static int addGuildMember(MapleGuildCharacter mc, boolean show)
      將角色加入其公會。

      轉派給 MapleGuild.addGuildMember(MapleGuildCharacter, boolean);公會不存在時回傳 0。 具公會狀態變更與封包送出副作用。

      Parameters:
      mc - 欲加入的公會成員
      show - 是否向其他成員顯示加入提示
      Returns:
      底層回傳的結果碼;公會不存在時回傳 0
    • leaveGuild

      public static void leaveGuild(MapleGuildCharacter mc)
      讓成員退出其公會。

      轉派給 MapleGuild.leaveGuild(MapleGuildCharacter);公會不存在時不動作。具公會狀態變更與封包送出副作用。

      Parameters:
      mc - 退出的公會成員
    • guildChat

      public static void guildChat(int gid, String name, int cid, String msg)
      在公會頻道發送聊天訊息。

      轉派給 MapleGuild.guildChat(String, int, String),廣播給該公會在線成員;公會不存在時不動作。 具跨頻道封包送出副作用。

      Parameters:
      gid - 公會 ID
      name - 發話者角色名稱
      cid - 發話者角色 ID
      msg - 聊天內容
    • changeRank

      public static void changeRank(int gid, int cid, int newRank)
      變更公會成員的職級。

      轉派給 MapleGuild.changeRank(int, int);公會不存在時不動作。具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      cid - 目標成員角色 ID
      newRank - 新的職級
    • expelMember

      public static void expelMember(MapleGuildCharacter initiator, String name, int cid)
      將成員逐出公會。

      以發起者的公會 ID 取得公會後轉派給 MapleGuild.expelMember(MapleGuildCharacter, String, int); 公會不存在時不動作。具公會狀態變更與封包送出副作用。

      Parameters:
      initiator - 發起逐出的成員
      name - 被逐出成員的角色名稱
      cid - 被逐出成員的角色 ID
    • setGuildNotice

      public static void setGuildNotice(int gid, String notice)
      設定公會公告。

      轉派給 MapleGuild.setGuildNotice(String);公會不存在時不動作。具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      notice - 公告內容
    • setGuildLeader

      public static void setGuildLeader(int gid, int cid)
      變更公會會長。

      轉派給 MapleGuild.changeGuildLeader(int);公會不存在時不動作。具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      cid - 新會長的角色 ID
    • getSkillLevel

      public static int getSkillLevel(int gid, int sid)
      取得公會技能等級。

      轉派給 MapleGuild.getSkillLevel(int);公會不存在時回傳 0。

      Parameters:
      gid - 公會 ID
      sid - 公會技能 ID
      Returns:
      該技能等級;公會不存在時回傳 0
    • purchaseSkill

      public static boolean purchaseSkill(int gid, int sid, String name, int cid)
      為公會購買技能。

      轉派給 MapleGuild.purchaseSkill(int, String, int);公會不存在時回傳 false。 具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      sid - 公會技能 ID
      name - 購買者角色名稱
      cid - 購買者角色 ID
      Returns:
      是否購買成功;公會不存在時回傳 false
    • activateSkill

      public static boolean activateSkill(int gid, int sid, String name)
      啟用公會技能。

      轉派給 MapleGuild.activateSkill(int, String);公會不存在時回傳 false。 具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      sid - 公會技能 ID
      name - 啟用者角色名稱
      Returns:
      是否啟用成功;公會不存在時回傳 false
    • memberLevelJobUpdate

      public static void memberLevelJobUpdate(MapleGuildCharacter mc)
      更新公會成員的等級/職業資訊。

      轉派給 MapleGuild.memberLevelJobUpdate(MapleGuildCharacter);公會不存在時不動作。 具公會狀態變更與封包送出副作用。

      Parameters:
      mc - 等級或職業有變動的公會成員
    • changeRankTitle

      public static void changeRankTitle(int gid, String[] ranks)
      變更公會各職級的稱號。

      轉派給 MapleGuild.changeRankTitle(String[]);公會不存在時不動作。具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      ranks - 依職級排序的稱號字串陣列
    • setGuildEmblem

      public static void setGuildEmblem(int gid, short bg, byte bgcolor, short logo, byte logocolor)
      設定公會會徽(背景與標誌的圖樣與配色)。

      轉派給 MapleGuild.setGuildEmblem(short, byte, short, byte);公會不存在時不動作。 具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      bg - 背景圖樣 ID
      bgcolor - 背景配色
      logo - 標誌圖樣 ID
      logocolor - 標誌配色
    • 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 - 公會 ID
      charid - 角色 ID
    • increaseGuildCapacity

      public static boolean increaseGuildCapacity(int gid, boolean b)
      擴充公會人數上限。

      轉派給 MapleGuild.increaseCapacity(boolean);公會不存在時回傳 false。 具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      b - 底層擴充選項(是否實際扣費/套用)
      Returns:
      是否擴充成功;公會不存在時回傳 false
    • gainGP

      public static void gainGP(int gid, int amount)
      增加公會的公會點數(GP)。

      轉派給 MapleGuild.gainGP(int);公會不存在時不動作。具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      amount - 增加的點數量
    • gainGP

      public static void gainGP(int gid, int amount, int cid)
      由指定成員為公會增加公會點數(GP)。

      轉派給 MapleGuild.gainGP(int, boolean, int)(記名於該成員的貢獻);公會不存在時不動作。 具公會狀態變更與封包送出副作用。

      Parameters:
      gid - 公會 ID
      amount - 增加的點數量
      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 - 公會 ID
      inviteid - 受邀者角色 ID
    • getGuildLeader

      public static int getGuildLeader(int guildName)
      依公會 ID 取得會長的角色 ID。

      getGuild(int) 取得公會後回傳其 MapleGuild.getLeaderId();公會不存在時回傳 0。 (參數名雖為 guildName,實際為公會 ID。)

      Parameters:
      guildName - 公會 ID(非名稱)
      Returns:
      會長角色 ID;公會不存在時回傳 0
    • getGuildLeader

      public static int getGuildLeader(String guildName)
      依公會名稱取得會長的角色 ID。

      getGuildByName(String) 取得公會後回傳其 MapleGuild.getLeaderId(); 公會不存在(或尚未載入)時回傳 0。

      Parameters:
      guildName - 公會名稱(不分大小寫)
      Returns:
      會長角色 ID;公會不存在時回傳 0
    • save

      public static void save()
      將所有已載入的公會寫回資料庫。

      持寫鎖(lock)遍歷行程內公會表,對每個公會呼叫 MapleGuild.writeToDB(boolean)(非解散寫入)。 通常於伺服器關閉時呼叫。具 DB 寫入副作用。執行緒安全。

    • getBBS

      public static List<MapleBBSThread> getBBS(int gid)
      取得公會 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 - 公會 ID
      title - 主題標題
      text - 主題內文
      icon - 圖示 ID
      bNotice - 是否設為公告置頂
      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);公會不存在時不動作。 底層會依 posterIDguildRank 做權限檢查。具公會 BBS 狀態變更副作用。

      Parameters:
      guildid - 公會 ID
      localthreadid - 主題串的本地 ID
      title - 新標題
      text - 新內文
      icon - 新圖示 ID
      posterID - 操作者角色 ID
      guildRank - 操作者公會職級
    • deleteBBSThread

      public static final void deleteBBSThread(int guildid, int localthreadid, int posterID, int guildRank)
      刪除公會 BBS 的某則主題串。

      轉派給 MapleGuild.deleteBBSThread(int, int, int);公會不存在時不動作。 底層會依 posterIDguildRank 做權限檢查。具公會 BBS 狀態變更副作用。

      Parameters:
      guildid - 公會 ID
      localthreadid - 主題串的本地 ID
      posterID - 操作者角色 ID
      guildRank - 操作者公會職級
    • addBBSReply

      public static final void addBBSReply(int guildid, int localthreadid, String text, int posterID)
      在公會 BBS 的某則主題串底下新增一則回覆。

      轉派給 MapleGuild.addBBSReply(int, String, int);公會不存在時不動作。具公會 BBS 狀態變更副作用。

      Parameters:
      guildid - 公會 ID
      localthreadid - 主題串的本地 ID
      text - 回覆內文
      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);公會不存在時不動作。 底層會依 posterIDguildRank 做權限檢查。具公會 BBS 狀態變更副作用。

      Parameters:
      guildid - 公會 ID
      localthreadid - 主題串的本地 ID
      replyid - 回覆 ID
      posterID - 操作者角色 ID
      guildRank - 操作者公會職級
    • changeEmblem

      public static void changeEmblem(int gid, int affectedPlayers, MapleGuild mgs)
      對受影響的玩家廣播公會會徽變更,並觸發其重生以套用新外觀。

      先透過 World.Broadcast.sendGuildPacket(int, byte[], int, int) 送出 GuildPacket.guildEmblemChange(int, short, byte, short, byte) 封包, 再呼叫 setGuildAndRank(int, int, int, int, int)-1 全參數觸發玩家重生(刷新公會名稱/圖示)。具跨頻道封包送出副作用。

      Parameters:
      gid - 公會 ID
      affectedPlayers - 受影響玩家的識別(轉送給廣播層)
      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 - 目標角色 ID
      guildid - 新公會 ID;連同 rank 皆為 -1 時代表僅重生、不改資料
      rank - 新公會職級
      contribution - 新公會貢獻值
      alliancerank - 新聯盟職級