Class World.Family
- Enclosing class:
World
MapleFamily 並提供家族成員與聲望相關操作。
以 LinkedHashMap 快取家族物件、ReentrantReadWriteLock 保護其讀寫。多數操作委派給對應 MapleFamily;
部分伴隨資料庫寫入(save()、setFamily(int, int, int, int, int, int, int))與成員封包廣播(familyPacket(int, byte[], int))。
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic void將一個已從資料庫載入的家族加入快取。static voiddisbandFamily(int gid) 解散指定家族。static voidfamilyPacket(int gid, byte[] message, int cid) 對家族中以指定成員為根的家譜分支廣播封包。static MapleFamilygetFamily(int id) 取得指定家族物件,必要時延遲載入。static void通知家族更新某成員的等級/職業資訊。static voidsave()將所有已載入的家族存回資料庫。static voidsetFamily(int familyid, int seniorid, int junior1, int junior2, int currentrep, int totalrep, int cid) 更新指定在線角色的家族關係與聲望資料。static voidsetFamilyMemberOnline(MapleFamilyCharacter mfc, boolean bOnline, int channel) 設定某家族成員的在線狀態與所在頻道。static int為家族中某成員增加家族聲望(rep)。
-
Constructor Details
-
Family
public Family()
-
-
Method Details
-
addLoadedFamily
將一個已從資料庫載入的家族加入快取。僅當
MapleFamily.isProper()為真(家族結構完整)時才放入快取;否則略過。- Parameters:
f- 已載入的家族物件
-
getFamily
取得指定家族物件,必要時延遲載入。先於讀鎖下查快取;未命中則升級寫鎖、以
new MapleFamily(id)從資料庫載入並放入快取。 載入失敗(ID 不正或結構不完整!isProper())時回傳null。- Parameters:
id- 家族 ID- Returns:
- 對應的
MapleFamily;載入失敗時為null
-
memberFamilyUpdate
通知家族更新某成員的等級/職業資訊。由
mfc反查家族後委派給MapleFamily.memberLevelJobUpdate(MapleCharacter);家族不存在時不做事。- Parameters:
mfc- 該成員的家族角色資料mc- 對應的角色實例(提供最新等級/職業)
-
setFamilyMemberOnline
設定某家族成員的在線狀態與所在頻道。由
mfc反查家族後委派給MapleFamily.setOnline(int, boolean, int);家族不存在時不做事。- Parameters:
mfc- 該成員的家族角色資料bOnline- 是否在線channel- 所在頻道編號
-
setRep
為家族中某成員增加家族聲望(rep)。委派給
MapleFamily.setRep(int, int, int, String);家族不存在時回傳0。- Parameters:
fid- 家族 IDcid- 目標成員角色 IDaddrep- 要增加的聲望值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- 家族 IDseniorid- 直屬上線(師父)角色 IDjunior1- 直屬下線一角色 IDjunior2- 直屬下線二角色 IDcurrentrep- 目前聲望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- 家族 IDmessage- 已組好的封包位元組cid- 作為家譜分支根的成員角色 ID
-
disbandFamily
public static void disbandFamily(int gid) 解散指定家族。於寫鎖下先將家族從快取移除,再呼叫
MapleFamily.disbandFamily()執行解散;家族不存在時不做事。 具狀態移除副作用。- Parameters:
gid- 家族 ID
-