Class World.Messenger
- Enclosing class:
World
以行程內的 messengers 表(messengerId → MapleMessenger)集中保管所有開啟中的密語視窗,
並提供建立、加入/離開、聊天、邀請等靜態工具方法。成員可能分散於不同頻道,故方法多半透過
World.Find.findChannel(String) 逐一定位每位成員後對其連線送出封包;具跨頻道封包送出與視窗狀態變更副作用。
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic MapleMessenger建立一個新的密語視窗並登記到行程內的視窗表。static voiddeclineChat(String target, String namefrom) 通知目標玩家:某人婉拒了密語視窗邀請。static MapleMessengergetMessenger(int messengerid) 依 ID 取得密語視窗。static voidjoinMessenger(int messengerid, MapleMessengerCharacter target, String from, int fromchannel) 將成員加入密語視窗,並使新成員與既有成員互相看見彼此。static voidleaveMessenger(int messengerid, MapleMessengerCharacter target) 將成員移出密語視窗,並通知其餘成員移除該成員的顯示位置。static voidmessengerChat(int messengerid, String charname, String text, String namefrom) 將密語視窗聊天訊息送給視窗內其餘成員。static voidmessengerInvite(String sender, int messengerid, String target, int fromchannel, boolean gm) 邀請目標玩家加入密語視窗。static voidsilentJoinMessenger(int messengerid, MapleMessengerCharacter target) 將成員靜默加入密語視窗(不通知其餘成員)。static voidsilentLeaveMessenger(int messengerid, MapleMessengerCharacter target) 將成員自密語視窗靜默移除(不通知其餘成員)。static voidupdateMessenger(int messengerid, String namefrom, int fromchannel) 通知視窗內其餘成員:更新某成員的顯示資料(換頻道/重新整理)。
-
Constructor Details
-
Messenger
public Messenger()
-
-
Method Details
-
createMessenger
建立一個新的密語視窗並登記到行程內的視窗表。以原子遞增的方式配發新的 messengerId,建立
MapleMessenger並放入messengers, 初始成員為chrfor。具狀態變更副作用。- Parameters:
chrfor- 開啟視窗的起始成員- Returns:
- 新建立的密語視窗
-
declineChat
-
getMessenger
依 ID 取得密語視窗。- Parameters:
messengerid- 密語視窗 ID- Returns:
- 對應的
MapleMessenger;若不存在則回傳null
-
leaveMessenger
將成員移出密語視窗,並通知其餘成員移除該成員的顯示位置。自視窗移除
target後,於各頻道定位其餘每位成員並送出removeMessengerPlayer封包。 具視窗成員變更與跨頻道封包送出副作用。- Parameters:
messengerid- 密語視窗 IDtarget- 離開的成員- Throws:
IllegalArgumentException- 當指定 ID 的密語視窗不存在
-
silentLeaveMessenger
將成員自密語視窗靜默移除(不通知其餘成員)。僅更新視窗內部成員資料,不送出任何封包。具視窗成員變更副作用。
- Parameters:
messengerid- 密語視窗 IDtarget- 移除的成員- Throws:
IllegalArgumentException- 當指定 ID 的密語視窗不存在
-
silentJoinMessenger
將成員靜默加入密語視窗(不通知其餘成員)。僅更新視窗內部成員資料,不送出任何封包。具視窗成員變更副作用。
- Parameters:
messengerid- 密語視窗 IDtarget- 加入的成員- Throws:
IllegalArgumentException- 當指定 ID 的密語視窗不存在
-
updateMessenger
通知視窗內其餘成員:更新某成員的顯示資料(換頻道/重新整理)。對除
namefrom以外的每位成員,於其所在頻道送出updateMessengerPlayer封包, 帶入該成員當前位置與來源頻道(顯示為fromchannel - 1)。具跨頻道封包送出副作用。與其他多數方法不同,本方法未對取得的視窗做
null檢查;若messengerid不存在會擲出NullPointerException。- Parameters:
messengerid- 密語視窗 IDnamefrom- 被更新的成員名稱(不會收到自己的更新封包)fromchannel- 該成員所在頻道(從 1 起算)
-
joinMessenger
public static void joinMessenger(int messengerid, MapleMessengerCharacter target, String from, int fromchannel) 將成員加入密語視窗,並使新成員與既有成員互相看見彼此。將
target加入視窗後,遍歷所有成員:對既有成員送出addMessengerPlayer(顯示新加入者)並回送新加入者 既有成員的資訊;對新加入者本人則送出joinMessenger。各成員於其所在頻道分別定位,具跨頻道封包送出與視窗成員變更副作用。- Parameters:
messengerid- 密語視窗 IDtarget- 加入的成員from- 加入者角色名稱fromchannel- 加入者所在頻道(從 1 起算)- Throws:
IllegalArgumentException- 當指定 ID 的密語視窗不存在
-
messengerChat
將密語視窗聊天訊息送給視窗內其餘成員。對除
namefrom以外的每位成員,於其所在頻道送出messengerChat封包。具跨頻道封包送出副作用。- Parameters:
messengerid- 密語視窗 IDcharname- 顯示於聊天的角色名稱text- 聊天內容namefrom- 發話成員名稱(不會收到自己的訊息)- Throws:
IllegalArgumentException- 當指定 ID 的密語視窗不存在
-
messengerInvite
public static void messengerInvite(String sender, int messengerid, String target, int fromchannel, boolean gm) 邀請目標玩家加入密語視窗。僅當
target已連線時處理。於各頻道定位目標:若對方尚未加入任何視窗且(非工讀生或邀請者具 GM 權), 則向對方送出邀請封包並回報邀請者成功;對方為工讀生且邀請者非 GM 時回報失敗;對方已在使用密語視窗時回報「對方已在使用」。 具跨頻道封包送出副作用。- Parameters:
sender- 邀請者角色名稱messengerid- 密語視窗 IDtarget- 受邀目標角色名稱fromchannel- 邀請者所在頻道(從 1 起算)gm- 邀請者是否具 GM 權限(可邀請工讀生)
-