Class World.Find
java.lang.Object
handling.world.World.Find
- Enclosing class:
World
角色定位子系統:依角色 ID 或名稱查出所在頻道與角色實例。
維護兩張對照表(ID→頻道、名稱→頻道),由內部 ReentrantReadWriteLock 保護其讀寫;玩家登入/登出與換頻道時
透過 register/forceDeregister 更新。查詢方法在對應的頻道(或商城)角色儲存區中取出角色,
可能回傳 null(離線或查無此人)。findChannel 另含自我修復:若對照表指向已不存在的頻道會強制反註冊並回傳 -1。
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic intfindChannel(int id) 依角色 ID 查出其所在頻道編號。static intfindChannel(String st) 依角色名稱查出其所在頻道編號。static MapleCharacterfindChr(int st) 依角色 ID 跨頻道查出角色實例。static MapleCharacter依角色名稱跨頻道查出角色實例。static voidforceDeregister(int id) 依角色 ID 強制移除其頻道對照(僅移除 ID→頻道一筆,名稱對照不動)。static voidforceDeregister(int id, String name) 同時依 ID 與名稱強制移除頻道對照(兩筆都清除)。static void依角色名稱強制移除其頻道對照(僅移除名稱→頻道一筆,ID 對照不動)。static CharacterIdChannelPair[]multiBuddyFind(int charIdFrom, int[] characterIds) 一次定位多名角色(好友清單用)並回傳其「角色 ID/頻道」配對。static void登記某角色目前所在的頻道(同時建立 ID→頻道與名稱→頻道兩筆對照)。
-
Constructor Details
-
Find
public Find()
-
-
Method Details
-
register
登記某角色目前所在的頻道(同時建立 ID→頻道與名稱→頻道兩筆對照)。於寫鎖(
lock.writeLock())保護下更新對照表;名稱以小寫存放以利不分大小寫查詢。- Parameters:
id- 角色 IDname- 角色名稱channel- 所在頻道編號(亦可能為商城等特殊負值)
-
forceDeregister
public static void forceDeregister(int id) 依角色 ID 強制移除其頻道對照(僅移除 ID→頻道一筆,名稱對照不動)。於寫鎖保護下移除。
- Parameters:
id- 角色 ID
-
forceDeregister
依角色名稱強制移除其頻道對照(僅移除名稱→頻道一筆,ID 對照不動)。於寫鎖保護下移除;名稱以小寫比對。
- Parameters:
id- 角色名稱
-
forceDeregister
同時依 ID 與名稱強制移除頻道對照(兩筆都清除)。於寫鎖保護下移除;名稱以小寫比對。為角色完全離線時的標準反註冊路徑。
- Parameters:
id- 角色 IDname- 角色名稱
-
findChannel
public static int findChannel(int id) 依角色 ID 查出其所在頻道編號。於讀鎖保護下查對照表。含自我修復:若查得的頻道非特殊值(
-10/-20)卻已無對應ChannelServer, 會呼叫forceDeregister(int)清除該筆並回傳-1(此處會升級為寫鎖)。- Parameters:
id- 角色 ID- Returns:
- 所在頻道編號(或商城等特殊負值
-10/-20);查無或頻道已失效時為-1
-
findChannel
依角色名稱查出其所在頻道編號。於讀鎖保護下查對照表(名稱不分大小寫)。含與
findChannel(int)相同的自我修復:頻道已失效時清除該筆並回傳-1。- Parameters:
st- 角色名稱- Returns:
- 所在頻道編號(或商城等特殊負值
-10/-20);查無或頻道已失效時為-1
-
findChr
依角色名稱跨頻道查出角色實例。於讀鎖保護下查名稱→頻道對照(不分大小寫);若對照存在但該頻道已無
ChannelServer,則改從CashShopServer的角色儲存區取出(玩家可能正在商城)。- Parameters:
st- 角色名稱- Returns:
- 對應的
MapleCharacter;查無此人時為null(亦可能因頻道儲存區查無而為null)
-
findChr
依角色 ID 跨頻道查出角色實例。於讀鎖保護下查 ID→頻道對照;若對照存在但該頻道已無
ChannelServer,則改從CashShopServer的角色儲存區取出(玩家可能正在商城)。- Parameters:
st- 角色 ID- Returns:
- 對應的
MapleCharacter;查無此人時為null(亦可能因頻道儲存區查無而為null)
-
multiBuddyFind
一次定位多名角色(好友清單用)並回傳其「角色 ID/頻道」配對。對每個 ID 呼叫
findChannel(int),只收錄頻道為正值(在一般遊戲頻道在線)者,結果依CharacterIdChannelPair的自然順序排序後回傳。- Parameters:
charIdFrom- 發起查詢的角色 ID(目前僅作語意標示,未參與過濾)characterIds- 欲查詢的角色 ID 陣列- Returns:
- 在線者的「ID/頻道」配對陣列(已排序);無人在線時為長度 0 的陣列(非
null)
-