Class World.Family

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

public static class World.Family extends Object
家族子系統:集中保管所有 MapleFamily 並提供家族成員與聲望相關操作。

LinkedHashMap 快取家族物件、ReentrantReadWriteLock 保護其讀寫。多數操作委派給對應 MapleFamily; 部分伴隨資料庫寫入(save()setFamily(int, int, int, int, int, int, int))與成員封包廣播(familyPacket(int, byte[], int))。

  • Constructor Details

    • Family

      public Family()
  • Method Details

    • addLoadedFamily

      public static void addLoadedFamily(MapleFamily f)
      將一個已從資料庫載入的家族加入快取。

      僅當 MapleFamily.isProper() 為真(家族結構完整)時才放入快取;否則略過。

      Parameters:
      f - 已載入的家族物件
    • getFamily

      public static MapleFamily getFamily(int id)
      取得指定家族物件,必要時延遲載入。

      先於讀鎖下查快取;未命中則升級寫鎖、以 new MapleFamily(id) 從資料庫載入並放入快取。 載入失敗(ID 不正或結構不完整 !isProper())時回傳 null

      Parameters:
      id - 家族 ID
      Returns:
      對應的 MapleFamily;載入失敗時為 null
    • memberFamilyUpdate

      public static void memberFamilyUpdate(MapleFamilyCharacter mfc, MapleCharacter mc)
      通知家族更新某成員的等級/職業資訊。

      mfc 反查家族後委派給 MapleFamily.memberLevelJobUpdate(MapleCharacter);家族不存在時不做事。

      Parameters:
      mfc - 該成員的家族角色資料
      mc - 對應的角色實例(提供最新等級/職業)
    • setFamilyMemberOnline

      public static void setFamilyMemberOnline(MapleFamilyCharacter mfc, boolean bOnline, int channel)
      設定某家族成員的在線狀態與所在頻道。

      mfc 反查家族後委派給 MapleFamily.setOnline(int, boolean, int);家族不存在時不做事。

      Parameters:
      mfc - 該成員的家族角色資料
      bOnline - 是否在線
      channel - 所在頻道編號
    • setRep

      public static int setRep(int fid, int cid, int addrep, int oldLevel, String oldName)
      為家族中某成員增加家族聲望(rep)。

      委派給 MapleFamily.setRep(int, int, int, String);家族不存在時回傳 0

      Parameters:
      fid - 家族 ID
      cid - 目標成員角色 ID
      addrep - 要增加的聲望值
      oldLevel - 來源角色的舊等級(聲望計算用)
      oldName - 來源角色的舊名稱
      Returns:
      委派結果(實際變動的聲望);家族不存在時為 0
    • save

      public static void save()
      將所有已載入的家族存回資料庫。

      於寫鎖保護下逐一呼叫 MapleFamily.writeToDB(boolean);通常於伺服器關閉時呼叫。具資料庫寫入副作用。

    • setFamily

      public static void setFamily(int familyid, int seniorid, int junior1, int junior2, int currentrep, int totalrep, int cid)
      更新指定在線角色的家族關係與聲望資料。

      World.Find.findChannel(int) 定位角色所在頻道並取出角色;角色離線(頻道為 -1)或查無時直接返回。 設定家族 ID、上下線關係與目前/總聲望;僅當家族關係實際有變動(bDifferent)時才呼叫 MapleCharacter.saveFamilyStatus() 寫回資料庫。具狀態變更與可能的資料庫寫入副作用。

      Parameters:
      familyid - 家族 ID
      seniorid - 直屬上線(師父)角色 ID
      junior1 - 直屬下線一角色 ID
      junior2 - 直屬下線二角色 ID
      currentrep - 目前聲望
      totalrep - 累計總聲望
      cid - 目標角色 ID
    • familyPacket

      public static void familyPacket(int gid, byte[] message, int cid)
      對家族中以指定成員為根的家譜分支廣播封包。

      gid 取得家族後,以 cid 成員的家譜(pedigree)為範圍呼叫 MapleFamily.broadcast(byte[], int, java.util.List);家族不存在時不做事。具跨頻道封包送出副作用。

      Parameters:
      gid - 家族 ID
      message - 已組好的封包位元組
      cid - 作為家譜分支根的成員角色 ID
    • disbandFamily

      public static void disbandFamily(int gid)
      解散指定家族。

      於寫鎖下先將家族從快取移除,再呼叫 MapleFamily.disbandFamily() 執行解散;家族不存在時不做事。 具狀態移除副作用。

      Parameters:
      gid - 家族 ID