Class NPCConversationManager
cm 暴露。
由 NPCScriptManager 為每個對話中的 MapleClient 建立,承襲腳本共用基底
AbstractPlayerInteraction,並在其上提供完整的對話框 API:sendNext(String)/sendNextPrev(String)/
sendOk(String)/sendYesNo(String)/sendAcceptDecline(String)/sendSimple(String)(選單)/
sendGetText(String)/sendGetNumber(String, int, int, int)(輸入),以及 dispose() 結束對話。
對話視窗由 NPCPacket 組裝送出;type 區分 NPC/開始任務/完成任務,
lastMsg 記錄前一個對話型別以驗證玩家回應。除一般 NPC 對話外,亦承載任務、商城、公會、抽獎
(MapleGachapon)等大量遊戲內互動,是 GraalJS 腳本最主要的伺服端入口。
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Map<Pair<Integer, MapleClient>, MapleNPC> 由腳本召喚的「特殊行動 NPC」控制器登錄表,鍵為(NPC 物件 oid, 觸發的 MapleClient)。boolean是否已標記為待結束;由safeDispose()設定,待 NPC 動作收尾後再實際結束對話。Fields inherited from class AbstractPlayerInteraction
c, id, quest, script -
Constructor Summary
ConstructorsConstructorDescriptionNPCConversationManager(MapleClient c, Invocable iv, String script, int npc, int mode, int questid, byte type) 建立一個 NPC 對話階段管理器。 -
Method Summary
Modifier and TypeMethodDescriptionvoidacceptMember(String type, int pos) 接受指定遠征隊(MapleSquad)中某位待審成員加入。boolean擴充玩家所屬聯盟的成員上限。voidaddDecorations(int kegs) 由目前玩家為煙火活動貢獻裝飾品(decorations)。booleanaddFromDrop(Object statsSel) 將一個物品實例直接加入玩家背包。int將目前玩家加入或退出指定遠征隊(MapleSquad)。voidaddPendantSlot(int days) 給予玩家限時的吊墜(雙項鍊)額外欄位,並立即在客戶端開啟。voidaddSunshines(int kegs) 由目前玩家為煙火活動貢獻陽光(sunshines)。voidaskAcceptDecline(String text) 顯示帶「接受 / 拒絕」按鈕的對話框。voidaskAcceptDecline(String text, int id) 以指定 NPC 編號顯示帶「接受 / 拒絕」按鈕的對話框。voidaskAcceptDeclineNoESC(String text) 顯示帶「接受 / 拒絕」按鈕、且不可按 ESC 關閉的對話框。voidaskAcceptDeclineNoESC(String text, int id) 以指定 NPC 編號顯示帶「接受 / 拒絕」按鈕、且不可按 ESC 關閉的對話框。void顯示造型(Avatar)選擇對話框,供玩家從多組造型中挑選。voidaskBuffSelection(String text) 開啟增益(buff)選擇對話框並送出至客戶端。voidaskMapSelection(String sel) 開啟地圖選擇對話框並送出至客戶端。voidaskMenu(int nSpeakerTypeID, int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, int eColor, String sMsg) 開啟選單對話框(最完整多載),實際組裝並送出對話封包。voidaskMenu(int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, String sMsg) 以三名說話者開啟選單對話框。void以兩名說話者開啟選單對話框。void以指定說話者開啟選單對話框。void以附加參數開啟選單對話框。void開啟選單(多選項)對話框。voidaskYesNo(int nSpeakerTypeID, int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, int eColor, String sMsg) 開啟是/否詢問對話框(最完整多載),實際組裝並送出對話封包。voidaskYesNo(int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, String sMsg) 以三名說話者開啟是/否詢問對話框。void以兩名說話者開啟是/否詢問對話框。void以指定說話者開啟是/否詢問對話框。void以附加參數開啟是/否詢問對話框。void開啟是/否(Yes/No)詢問對話框。void將指定遠征隊(MapleSquad)中某位成員列入封鎖名單。booleanbonus_PyramidSubway(int pyramid) 傳送玩家進入金字塔(Pyramid)或地鐵(Subway)的獎勵關卡。void對整個公會成員施放道具效果的增益。final voidcameraMove(int[] values) 播放鏡頭移動演出(CameraMove)。final voidcameraOnCharacter(int value) 將鏡頭重新對準玩家角色(CameraOnCharacter)。final voidcameraZoom(int[] values) 播放鏡頭縮放演出(CameraZoom)。voidchangeJob(int job) 變更玩家的職業。voidchangeJobById(short job) 將玩家轉職為指定職業 ID。voidchangeStat(byte slot, int type, int amount) 直接設定玩家身上某件已裝備裝備(Equip)的單一屬性值。checkDrop(int mobId) 組出指定怪物的掉寶資訊可讀字串。final void清除玩家所有技能。voidcompleteQuest(int idd) 依正常流程完成指定任務。booleancreateAlliance(String alliancename) 以玩家及其隊伍第二位成員為雙方會長建立聯盟。booleandeleteCompensation(int taken) 更新玩家補償記錄的已領取狀態。boolean解散玩家所屬的聯盟。void解散目前玩家所屬的公會。void向客戶端發送公會排行榜封包。voiddispose()結束本次 NPC 對話。void為玩家與指定對象建立戒指(情侶/友情等配對)。final void在地圖上播放結婚儀式的演出流程。final booleandropItem(int slot, int invType, int quantity) 將玩家指定欄位的道具丟到地面。voidenvironmentChange(boolean broadcast, String env) 變更地圖環境(背景/天氣等)效果。voidexceTime(int time) 於演出序列中插入一段延遲(Delay)。voidexpandInventory(byte type, int amt) 擴充玩家指定類型背包的格數。final voidfaceOff(int value) 播放臉部特寫演出(FaceOff)。boolean領取「Facebook 分享」活動勳章,每個帳號限領一次。void強制完成本對話綁定的任務(quest),不檢查條件。voidforceCompleteQuest(int idd) 強制完成指定任務,不檢查條件。voidforcedAction(int[] values) 對玩家觸發強制動作演出(ForcedAction)。voidforcedFlip(int value) 強制玩家角色翻轉朝向(ForcedFlip)。voidforcedInput(int input) 對玩家送出自訂的強制輸入演出(ForcedInput)。voidforcedMove(int value, int value1) 強制玩家依指定參數移動(ForcedMove)。void強制開始本對話綁定的任務(quest),不檢查前置條件。voidforceStartQuest(int idd) 強制開始指定任務,不檢查前置條件。voidforceStartQuest(String customData) 強制開始本對話綁定的任務並附帶自訂資料字串。voidforfeitQuest(int idd) 放棄指定任務。boolean檢查指定類別的資料中是否有符合關鍵字的項目。intgachapon(int type) 執行一次轉蛋並將抽中的道具加入玩家物品欄。voidgainAp(int amount) 給予玩家能力點數(AP)。voidgainAPS(int gain) 增加玩家的 AP 重置點數(APS)。intgainGachaponItem(int id, int quantity) 以轉蛋方式給予玩家道具。intgainGachaponItem(int id, int quantity, String msg) 以轉蛋方式給予玩家道具,稀有道具會全頻廣播。voidgenericGuildMessage(int code) 向客戶端發送一則通用公會訊息封包。voidgetAdviceTalk(String[] wzinfo) 送出「建議/提示」對話(advice talk)。取得所有潛在能力資訊的 ID 清單(已排序)。getAllPotentialInfoSearch(String content) 依關鍵字搜尋符合的潛在能力 ID 清單(已排序)。int取得玩家好友名單上限。final MapleCarnivalChallenge為指定玩家建立一個新的怪物嘉年華對戰挑戰物件。final MapleCarnivalParty取得目前玩家所屬的怪物嘉年華(Carnival)隊伍。intgetCashId(byte slot) 取得玩家現金(CASH)物品欄指定欄位的道具 ID。查詢玩家已確認的補償記錄。final short取得煙火活動中裝飾品(decorations)的累積百分比。voidgetDirectionEffect(int mod, String data, int[] values) 演出方向效果(in-game direction event)的核心發送方法,供本類各演出 helper 委派。voidgetDirectionFacialExpression(int expression, int duration) 令玩家角色播放臉部表情演出。final int取得玩家目前的武陵道場點數。final int取得玩家的武陵道場連續通關紀錄。getEffect(int buff) 取得指定道具 ID 對應的增益效果(MapleStatEffect)。getEquip(int itemid) 依道具 ID 建立一件對應的裝備(Equip)物件。intgetEquipId(byte slot) 取得玩家裝備(EQUIP)物品欄指定欄位的道具 ID。getEquipPotentialList(Equip equip) 列出指定裝備在其目前潛能位階下「可能出現」的所有潛能 ID(每個 ID 僅列一次)。intgetETCId(byte slot) 取得玩家其他(ETC)物品欄指定欄位的道具 ID。voidgetEventEffect(String data, int[] values) 對玩家播放指定的事件效果(EffectPlay)。getIv()取得此對話載入的 GraalJSInvocable,供再次呼叫腳本的action等進入點。intgetJobId()取得玩家目前的職業 ID。final shortgetKegs()取得煙火(Fireworks)活動中火藥桶(kegs)的累積百分比。byte取得前一個送出的對話型別代碼。getLeftPadded(String in, char padchar, int length) 將字串向左補齊至指定長度。intgetLevel()取得玩家目前的等級。intgetMeso()取得玩家目前持有的楓幣數量。intgetNaturalStats(int itemid, String it) 取得某裝備的原始(未強化)指定能力值。final MapleCarnivalChallenge取得目前玩家收到的下一個怪物嘉年華對戰邀請。intgetNpc()取得此對話所屬的 NPC 模板 id。voidgetNPCDirectionEffect(int npcid, String data, int value, int x, int y) 對受控 NPC 播放指定的演出方向效果(in-game direction effect)。取得玩家隊伍中所有目前在線的成員角色物件。final StringgetPotentialInfo(int id) 組出某潛在能力 ID 的可讀說明字串。getPotentialString(Equip equip, int potId) 取得指定裝備在某潛能 ID 下、對應其需求等級段的可讀說明字串。intgetQuest()取得此對話關聯的任務 id。取得本對話綁定任務(quest)的自訂資料字串。getQuestCustomData(int quest) 取得指定任務的自訂資料字串。getReadableMillis(long startMillis, long endMillis) 將兩個時間點之間的毫秒差轉為可讀字串。intgetReqLevel(int itemId) 取得指定道具的需求等級。int[]getSearchData(int type, String search) 搜尋指定類別資料並回傳符合的 ID 陣列。intgetSetupId(byte slot) 取得玩家裝飾(SETUP)物品欄指定欄位的道具 ID。getSkillMenu(int job) 組出指定職業可用技能的選單字串,供技能相關 NPC 以sendSimple顯示。getSpeedRun(String typ) 取得指定遠征類型的速通(speed run)排行資料。取得本頻道指定類型的遠征隊(MapleSquad)。intgetSquadAvailability(String type) 查詢指定遠征隊的可用狀態。booleangetSquadList(String type, byte type_) 以對話視窗向玩家顯示遠征隊成員清單。boolean顯示速通資料中指定排名項目的內容。final short取得煙火活動中陽光(sunshines)的累積百分比。getText()取得玩家先前透過文字輸入對話框輸入的字串。intgetTotalStat(int itemId) 取得指定裝備道具的總屬性值。bytegetType()取得此對話的型別。intgetUseId(byte slot) 取得玩家消耗(USE)物品欄指定欄位的道具 ID。final shortget香爐()取得煙火活動中香爐的累積百分比。voidgiveKegs(int kegs) 由目前玩家為煙火活動貢獻火藥桶(kegs)。voidgive香爐(int 香爐) 由目前玩家為煙火活動貢獻香爐。void處理玩家的離婚流程。boolean檢查玩家目前所在地圖是否綁定了活動管理器(event manager / EM)。boolean檢查玩家目前是否處於某個事件副本(event instance)中。booleanhasSkill(int skillid) 查詢玩家是否擁有指定技能。boolean檢查玩家當前地圖是否已有遠征隊(squad)。boolean檢查玩家是否「未」裝備副武器或盾牌。final voidhidePlayer(boolean hide) 切換玩家角色的隱身演出(VansheeMode)。voidincreaseGuildCapacity(boolean trueMax) 擴充目前玩家所屬公會的成員容量。voidinputUI(int value) 向玩家彈出演出輸入介面(InputUI)。booleanisCash(int itemId) 判斷指定道具是否為現金(cash)道具。boolean檢查名稱是否可用於建立角色。boolean判斷目前玩家是否身處某個事件實例(EventInstanceManager)中。byteisSquadLeader(String type) 判斷當前玩家是否為指定遠征隊的隊長。byteisSquadMember(String type) 查詢目前玩家在指定遠征隊(MapleSquad)中的成員狀態。final voidlevelUp()讓玩家提升一級。boolean領取「直播(live)」活動勳章,每個帳號限領一次。voidlogDonator(String log, int previous_points) 記錄一筆贊助(捐獻)點數異動。final void將玩家所有可用技能調至最高等級。final void將玩家當前職業的技能調至最高等級。voidmaxStats()將玩家四圍(STR/DEX/INT/LUK)與血量/魔力上限拉滿。voidopenDuey()開啟快遞(Duey)視窗。void開啟雇傭商人(Hired Merchant)的物品取回視窗。voidopenShop(int id) 開啟指定編號的商店介面。voidopenShopNPC(int id) 開啟指定編號的商店介面,並綁定當前對話的 NPC。int計算與玩家同隊且位於同一張地圖的成員數。final voidpatternInput(String data, int[] values) 向玩家要求輸入一組指定的按鍵序列(PatternInputRequest)。void強制玩家跳躍的演出輸入。void強制玩家向下移動的演出輸入。void強制玩家向左移動的演出輸入。void強制玩家向右移動的演出輸入。voidPlayerToNpc(String text) 以「玩家對 NPC 說話」樣式顯示一段對話並提供上一步/下一步按鈕。void強制玩家進入待機(不操作)狀態的演出輸入。void對玩家播放劇情動畫(movie)。void對玩家播放劇情動畫並設定後續對話狀態。void播放音效。voidprocessCommand(String line) 以本對話所屬玩家的身分,將一行文字當作一般(NORMAL)玩家指令送交CommandProcessor執行。voidputKey(int key, int type, int action) 變更玩家某個按鍵的快捷設定並回送新的按鍵配置。boolean將斷線後重連的玩家重新加入指定的活動實例與遠征隊。boolean領取「RC」活動勳章,每個帳號限領一次。boolean領取「RC 1000」活動勳章,每個帳號限領一次。booleanregisterSquad(String type, int minutes, String startText) 由玩家發起並登記一支新的遠征隊。void移除先前附加於演出中的額外效果(RemoveAdditionalEffect)。voidremoveNPCRequestController(int oid) 移除先前生成的受控 NPC。boolean將目前玩家自其所在的事件實例(EventInstanceManager)移除。booleanreplaceItem(int slot, int invType, Object statsSel, int upgradeSlots) 取代玩家背包中某個槽位的物品,並增加其可升級次數。booleanreplaceItem(int slot, int invType, Object statsSel, int offset, String type) 以指定屬性偏移取代玩家背包中某個槽位的物品(不消耗升級次數)。booleanreplaceItem(int slot, int invType, Object statsSel, int offset, String type, boolean takeSlot) 取代玩家背包中某個槽位的物品,並可對裝備套用屬性偏移。void重置玩家目前所在地圖的所有反應爐(reactor)。final voidresetStats(int str, int dex, int z, int luk) 將玩家的四項基礎能力值重設為指定數值。void標記此對話為待結束(設定pendingDisposal),延後到後續流程再實際結束。voidsay(int nSpeakerTypeID, int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, int eColor, String sMsg, boolean prev, boolean next, int tWait) 顯示一段 NPC 對話文字(最完整多載),實際組裝並送出對話封包。voidsay(int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, String sMsg, boolean prev, boolean next) 以三名說話者顯示一段 NPC 對話文字。voidsay(int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int bParam, String sMsg, boolean prev, boolean next) 以兩名說話者顯示一段 NPC 對話文字。void以指定說話者顯示一段 NPC 對話文字。void顯示一段 NPC 對話文字,並指定附加參數與按鈕。void顯示一段 NPC 對話文字(無上一步/下一步按鈕)。void顯示一段 NPC 對話文字,並可指定是否帶上一步/下一步按鈕。searchData(int type, String search) 搜尋指定類別資料並回傳可讀結果字串。voidsendAcceptDecline(String text) 顯示帶「接受 / 拒絕」按鈕的對話框。voidsendAcceptDeclineNoESC(String text) 顯示帶「接受 / 拒絕」按鈕、且不可按 ESC 關閉的對話框。voidsendAndroidStyle(String text, int[] styles) 顯示機器人(Android)造型選擇對話框。void開啟阿斯旺(Azwan)視窗。void查詢武陵道場(Mu Lung Dojo)排行榜並發送給客戶端。void開啟好友(Friendship)視窗。voidsendGetNumber(String text, int def, int min, int max) 顯示要求玩家輸入數字的對話框。voidsendGetText(String text) 顯示要求玩家輸入文字的對話框。voidsendGetText(String text, int id) 以指定 NPC 編號顯示要求玩家輸入文字的對話框。void顯示一段對話並只提供「下一步」按鈕。void以指定說話者顯示一段對話並只提供「下一步」按鈕。voidsendNextNoESC(String text) 顯示一段不可按 ESC 關閉的對話並提供「下一步」按鈕。voidsendNextNoESC(String text, int id) 以指定說話者顯示一段不可按 ESC 關閉的對話並提供「下一步」按鈕。voidsendNextPrev(String text) 顯示一段對話並同時提供「上一步」與「下一步」按鈕。voidsendNextPrev(String text, int id) 以指定說話者顯示一段對話並同時提供「上一步」與「下一步」按鈕。voidsendNextPrevNpcS(String text, byte type, int idd) 以指定 NPC(idd)作為說話者顯示一段對話並提供上一步/下一步按鈕,實際送出封包。voidsendNextPrevS(String text) 以玩家發話樣式顯示一段對話並提供上一步/下一步按鈕。voidsendNextPrevS(String text, byte type) 以指定樣式顯示一段對話並提供上一步/下一步按鈕。voidsendNextPrevS(String text, byte type, int idd) 以指定樣式與說話者顯示一段對話並提供上一步/下一步按鈕。voidsendNextPrevS(String text, byte type, int idd, int npcid) 以指定樣式與說話者顯示一段對話並提供上一步/下一步按鈕(最完整多載),實際送出封包。void以指定樣式顯示一段對話並提供「下一步」按鈕。void以指定樣式與說話者顯示一段對話並提供「下一步」按鈕。void以指定樣式與說話者顯示一段對話並提供「下一步」按鈕(最完整多載),實際送出封包。void顯示只有「確定」按鈕的 NPC 對話框。void以指定 NPC 編號顯示只有「確定」按鈕的對話框。void顯示只有「確定」按鈕的對話框,並指定對話框樣式。void以指定樣式與 NPC 編號顯示只有「確定」按鈕的對話框。voidsendOthersTalk(String text, int npcid, boolean[] bottom) 顯示由另一名 NPC 發話的對話。voidsendOthersTalk(String text, int npcid, boolean[] bottom, byte type) 顯示由另一名 NPC 發話的對話(最完整多載),實際送出封包。voidsendPendant(boolean b) 開啟或關閉玩家的吊墜(pendant)欄位。voidsendPlayerToNpc(String text) 以「玩家對 NPC 說話」樣式顯示一段對話並提供「下一步」按鈕。void顯示一段對話並只提供「上一步」按鈕。void以指定說話者顯示一段對話並只提供「上一步」按鈕。void以指定樣式顯示一段對話並只提供「上一步」按鈕。void以指定樣式與說話者顯示一段對話並只提供「上一步」按鈕,實際送出封包。void開啟專業技能(Profession)視窗。void開啟 PVP 對戰視窗。void開啟裝備修理視窗。final voidsendRPS()向玩家開啟剪刀石頭布(RPS)小遊戲視窗。voidsendSimple(String text) 顯示含多個選項連結(#L...#l)的選單式對話框。voidsendSimple(String text, int id) 以指定 NPC 編號顯示含多個選項連結的選單式對話框。voidsendSimpleS(String text, byte type) 以指定樣式顯示含多個選項連結的選單式對話框。voidsendSimpleS(String text, byte type, int idd) 以指定樣式與 NPC 編號顯示含多個選項連結的選單式對話框。void為玩家開啟倉庫介面。void顯示造型選擇對話框,供玩家挑選一組造型樣式。voidsendTellStory(String data, boolean lastLine) 播放劇情獨白演出(Monologue)。void向玩家送出「究極冒險家」相關封包。void顯示帶「是 / 否」按鈕的 NPC 對話框。void以指定 NPC 編號顯示帶「是 / 否」按鈕的對話框。voidsendYesNoS(String text, byte type) 以指定樣式顯示帶「是 / 否」按鈕的對話框。voidsendYesNoS(String text, byte type, int idd) 以指定樣式與 NPC 編號顯示帶「是 / 否」按鈕的對話框。voidsetAndroidFace(int face) 變更玩家機器人的臉型並存檔。voidsetAndroidHair(int hair) 變更玩家機器人的髮型並存檔。intsetAvatar(int ticket, int args) 消耗一張券,套用指定的外觀變更(膚色 / 臉型 / 髮型)。voidsetDojoMode(int mode) 設定武陵道場的進行模式。voidsetDojoRecord(boolean reset) 更新或重置玩家的武陵道場連續通關紀錄。voidsetExpiration(Object statsSel, long expire) 為一件裝備設定到期時間(以天數計)。voidsetFace(int face) 變更玩家的臉型並即時更新外觀。voidsetGetText(String text) 設定本對話暫存的文字輸入值。voidsetHair(int hair) 變更玩家的髮型並即時更新外觀。final voidsetLastMsg(byte last) 設定前一個對話型別代碼,用於驗證玩家回應。void為一件裝備加上鎖定或不可交易旗標。voidsetMedalQuestHair(int hair) 為勳章任務變更玩家髮型並即時更新外觀。voidsetNPCSpecialAction(int npcid, String action) 令受控 NPC 播放指定的特殊動作。voidsetNPCSpecialAction(int npcid, String action, int time, boolean unk) 令受控 NPC 播放指定的特殊動作並指定持續時間。voidsetNPCSpecialAction(int npcid, String action, int time, boolean unk, int directionTime) 令受控 NPC 播放指定的特殊動作,並可選擇性附加演出延遲(核心實作)。voidsetQuestCustomData(String customData) 設定本對話綁定任務(quest)的自訂資料字串。final voidsetQuestRecord(Object ch, int questid, String data) 設定指定角色某任務的自訂資料欄位。intsetRandomAvatar(int ticket, int... args_all) 消耗一張券,從候選清單中隨機套用一項外觀變更(膚色 / 臉型 / 髮型)。voidsetSkin(int color) 變更玩家的膚色並即時更新外觀。voidshowEffect(boolean broadcast, String effect) 播放畫面效果。voidshowFm()向客戶端發送名聲(fame)排行榜封包。voidshowMapEffect(String effect) 向此玩家播放地圖效果(map effect)。voidshowRb()向客戶端發送轉生(reborn)排行榜封包。voidspawnNPCRequestController(int npcid, int x, int y) 於指定座標為此玩家生成一個受控(client-request)NPC。voidspawnNPCRequestController(int npcid, int x, int y, int f) 於指定座標與朝向為此玩家生成一個受控 NPC。voidspawnNPCRequestController(int npcid, int x, int y, int f, int oid) 於指定座標、朝向與物件 ID 為此玩家生成一個受控 NPC(核心實作)。booleanstart_DojoAgent(boolean dojo, boolean party) 啟動武陵道場或祕密特務(Agent)並傳送玩家進入。booleanstart_PyramidSubway(int pyramid) 啟動金字塔(Pyramid)或地鐵(Subway)活動並傳送玩家進入。voidstartQuest(int idd) 依正常流程開始指定任務。void將玩家身上所有已穿戴裝備卸下並移回裝備(EQUIP)背包。voidupdateBuddyCapacity(int capacity) 設定玩家好友名單上限。voidupdateNPCSpecialAction(int oid, int value, int x, int y) 更新受控 NPC 的特殊動作狀態並送出封包。int使用星岩(Nebulite)轉蛋,依機率隨機抽出一個潛能星岩或高級票券碎片。voidwarpPartyWithExp(int mapId, int exp) 將整隊傳送至指定地圖並給予經驗值。voidwarpPartyWithExpMeso(int mapId, int exp, int meso) 將整隊傳送至指定地圖並給予經驗值與楓幣。Methods inherited from class AbstractPlayerInteraction
achievement, addHP, addPartyTrait, addPartyTrait, addTrait, allMembersHere, Aran_Start, AranTutInstructionalBubble, cancelItem, canHold, canHold, canHold, canHoldSlots, changeMusic, changePortal, channelMessage, channelMessage, clearSavedLocation, destroyReactor, disableOthers, disableOthers, DisableUI, dojo_getPts, dojo_getUp, dojoAgent_NextMap, dojoAgent_NextMap, EarnTitleMsg, EnableUI, endPartyQuest, endPartyQuest, equip, equip, equip, evanTutorial, evanTutorial, forceStartQuest, forceStartQuest, forceStartQuest, forceStartReactor, gainCloseness, gainClosenessAll, gainExp, gainExp_PQ, gainExpR, gainGP, gainItem, gainItem, gainItem, gainItem, gainItem, gainItem, gainItem, gainItem, gainItem, gainItem, gainItemPeriod, gainItemPeriod, gainItemS, gainItemS, gainItemSilent, gainMeso, gainMeso, gainNX, gainNX, gainPet, getAndroidStat, getC, getChannelNumber, getChannelOnline, getChannelServer, getChar, getClient, getCurrentPartyId, getCurrentTime, getDirectionStatus, getDisconnected, getEvanIntroState, getEvent, getEventInstance, getEventManager, getGP, getGuild, getGuild, getInfoQuest, getInventory, getInvType, getItemName, getJob, getMap, getMap, getMap_Instanced, getMapId, getMode, getMonsterCount, getMorphState, getName, getOneInfo, getParty, getPartyLog, getPlayer, getPlayerCount, getPlayerStat, getQuest, getQuestNoRecord, getQuestRecord, getQuestStatus, getReborns, getSavedLocation, getScript, getTempFlag, getTotalOnline, givePartyExp, givePartyExp, givePartyExp_PQ, givePartyExp_PQ, givePartyItems, givePartyItems, givePartyItems, givePartyNX, givePartyNX, guildMessage, guildMessage, hasSpace, haveItem, haveItem, haveItem, haveMonster, hitReactor, isAllPartyMembersAllowedJob, isAllPartyMembersAllowedLevel, isAllReactorState, isLeader, isQuestActive, isQuestFinished, itemQuantity, killAllMob, killMob, lockUI, lockUI, lockUI, logPQ, makeStatsEquip, makeStatsEquip2, makeStatsEquip3, mapMessage, mapMessage, MovieClipIntroUI, nextInt, openNpc, openNpc, openNpc, openNpc, openNpc, openNpc, openNpc, outputFileError, phantomTutorial, playerMessage, playerMessage, playerSummonHint, playPortalSE, playSound, prepareAswanMob, randInt, removeAll, removeFromParty, removeFromParty, removeItem, removeNpc, removeNpc, removeSlot, resetMap, saveLocation, saveReturnLocation, sendDirectionInfo, sendDirectionStatus, sendMoveScreen, sendNPCText, setGender, setPartyLog, showDarkEffect, showInstruction, showQuestMsg, showScreenAutoLetterBox, showScreenAutoLetterBox, showWZEffect, ShowWZEffect, showWZEffectNew, spawnMob, spawnMob, spawnMobOnMap, spawnMonster, spawnMonster, spawnMonster, spawnMonster, spawnMonster, spawnNpc, spawnNpc, spawnNpc, spawnNpcForPlayer, startAriantPQ, startAswanOffSeason, summonMsg, summonMsg, teachSkill, teachSkill, teachSkill, trembleEffect, unequip, unequip, updateEvanIntroState, updateInfoQuest, updateOneInfo, useItem, useSkill, warp, warp, warp, warp_Instanced, warpBack, warpMap, warpParty, warpParty, warpParty, warpParty_Instanced, warpS, warpS, worldMessage
-
Field Details
-
npcRequestController
由腳本召喚的「特殊行動 NPC」控制器登錄表,鍵為(NPC 物件 oid, 觸發的 MapleClient)。spawnNPCRequestController(int, int, int)召喚後在此登記、removeNPCRequestController(int)移除, 供強制動作/方向特效等劇情演出引用。此為全程序共用的靜態HashMap,本身未同步。 -
pendingDisposal
public boolean pendingDisposal是否已標記為待結束;由safeDispose()設定,待 NPC 動作收尾後再實際結束對話。
-
-
Constructor Details
-
NPCConversationManager
public NPCConversationManager(MapleClient c, Invocable iv, String script, int npc, int mode, int questid, byte type) 建立一個 NPC 對話階段管理器。由
NPCScriptManager在啟動腳本時建構。承襲AbstractPlayerInteraction的玩家互動基底, 並記錄此對話的 GraalJSInvocable、互動模式與型別;若玩家存在,會同步設定其目前互動的 NPC (MapleCharacter.setNpcNow(int))。- Parameters:
c- 觸發此對話的客戶端連線iv- 已載入腳本、可呼叫start/action的Invocablescript- 腳本識別名稱npc- NPC 模板 idmode- 互動模式questid- 關聯的任務 id(無則為 0)type- 對話型別:-1 = NPC、0 = 開始任務、1 = 完成任務
-
-
Method Details
-
getIv
-
getNpc
public int getNpc()取得此對話所屬的 NPC 模板 id。- Overrides:
getNpcin classAbstractPlayerInteraction- Returns:
- NPC 模板 id
-
getQuest
public int getQuest()取得此對話關聯的任務 id。- Returns:
- 任務 id(無則為 0)
-
getType
public byte getType()取得此對話的型別。- Returns:
- 對話型別:-1 = NPC、0 = 開始任務、1 = 完成任務
-
safeDispose
public void safeDispose()標記此對話為待結束(設定pendingDisposal),延後到後續流程再實際結束。適用於 NPC 動作仍在進行、不宜立即
dispose()的情境。 -
dispose
public void dispose()結束本次 NPC 對話。委派
NPCScriptManager.dispose(client.MapleClient),清除此客戶端被快取的腳本引擎並釋放對話狀態, 故下次開啟同一 NPC 會重新讀取腳本。 -
askMapSelection
開啟地圖選擇對話框並送出至客戶端。若已有待回應的對話(
lastMsg > -1)則略過不送。送出後將lastMsg設為0x10以記錄此對話型別。- Parameters:
sel- 地圖選項清單字串
-
askBuffSelection
開啟增益(buff)選擇對話框並送出至客戶端。若已有待回應的對話(
lastMsg > -1)則略過不送。送出後將lastMsg設為 16 以記錄此對話型別。- Parameters:
text- 增益選項清單字串
-
say
顯示一段 NPC 對話文字(無上一步/下一步按鈕)。便捷多載,等同
say(sMsg, false, false)。- Parameters:
sMsg- 對話文字
-
say
顯示一段 NPC 對話文字,並可指定是否帶上一步/下一步按鈕。便捷多載,等同
say(0, sMsg, prev, next)。- Parameters:
sMsg- 對話文字prev- 是否顯示「上一步」按鈕next- 是否顯示「下一步」按鈕
-
say
顯示一段 NPC 對話文字,並指定附加參數與按鈕。便捷多載,等同
say(id, bParam, sMsg, prev, next),說話者即本對話的 NPC。- Parameters:
bParam- 對話附加參數sMsg- 對話文字prev- 是否顯示「上一步」按鈕next- 是否顯示「下一步」按鈕
-
say
以指定說話者顯示一段 NPC 對話文字。便捷多載,等同
say(nSpeakerTemplateID, -1, bParam, sMsg, prev, next)。- Parameters:
nSpeakerTemplateID- 說話者 NPC 模板 idbParam- 對話附加參數sMsg- 對話文字prev- 是否顯示「上一步」按鈕next- 是否顯示「下一步」按鈕
-
say
public void say(int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int bParam, String sMsg, boolean prev, boolean next) 以兩名說話者顯示一段 NPC 對話文字。便捷多載,等同
say(nSpeakerTemplateID, nAnotherSpeakerTemplateID, -1, bParam, sMsg, prev, next)。- Parameters:
nSpeakerTemplateID- 主說話者 NPC 模板 idnAnotherSpeakerTemplateID- 第二說話者 NPC 模板 idbParam- 對話附加參數sMsg- 對話文字prev- 是否顯示「上一步」按鈕next- 是否顯示「下一步」按鈕
-
say
public void say(int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, String sMsg, boolean prev, boolean next) 以三名說話者顯示一段 NPC 對話文字。便捷多載,固定說話者型別為 4,等同
say(4, nSpeakerTemplateID, nAnotherSpeakerTemplateID, nOtherSpeakerTemplateID, bParam, 0, sMsg, prev, next, 0)。- Parameters:
nSpeakerTemplateID- 主說話者 NPC 模板 idnAnotherSpeakerTemplateID- 第二說話者 NPC 模板 idnOtherSpeakerTemplateID- 第三說話者 NPC 模板 idbParam- 對話附加參數sMsg- 對話文字prev- 是否顯示「上一步」按鈕next- 是否顯示「下一步」按鈕
-
say
public void say(int nSpeakerTypeID, int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, int eColor, String sMsg, boolean prev, boolean next, int tWait) 顯示一段 NPC 對話文字(最完整多載),實際組裝並送出對話封包。若
sMsg內含選單標記#L則改走askMenu(String);否則將lastMsg設為 0 並透過NPCPacket.OnScriptMessage(int, int, int, int, byte, int, int, String[], int[], int[][], MaplePet[])送出文字對話。會將prev/next/tWait編碼進按鈕旗標。- Parameters:
nSpeakerTypeID- 說話者型別 idnSpeakerTemplateID- 主說話者 NPC 模板 idnAnotherSpeakerTemplateID- 第二說話者 NPC 模板 idnOtherSpeakerTemplateID- 第三說話者 NPC 模板 idbParam- 對話附加參數eColor- 文字顏色sMsg- 對話文字prev- 是否顯示「上一步」按鈕next- 是否顯示「下一步」按鈕tWait- 等待時間
-
askYesNo
開啟是/否(Yes/No)詢問對話框。便捷多載,等同
askYesNo(0, sMsg)。玩家的選擇會回傳至腳本的action。- Parameters:
sMsg- 詢問文字
-
askYesNo
以附加參數開啟是/否詢問對話框。便捷多載,等同
askYesNo(id, bParam, sMsg),說話者即本對話的 NPC。- Parameters:
bParam- 對話附加參數sMsg- 詢問文字
-
askYesNo
以指定說話者開啟是/否詢問對話框。便捷多載,等同
askYesNo(nSpeakerTemplateID, -1, bParam, sMsg)。- Parameters:
nSpeakerTemplateID- 說話者 NPC 模板 idbParam- 對話附加參數sMsg- 詢問文字
-
askYesNo
public void askYesNo(int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int bParam, String sMsg) 以兩名說話者開啟是/否詢問對話框。便捷多載,等同
askYesNo(nSpeakerTemplateID, nAnotherSpeakerTemplateID, -1, bParam, sMsg)。- Parameters:
nSpeakerTemplateID- 主說話者 NPC 模板 idnAnotherSpeakerTemplateID- 第二說話者 NPC 模板 idbParam- 對話附加參數sMsg- 詢問文字
-
askYesNo
public void askYesNo(int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, String sMsg) 以三名說話者開啟是/否詢問對話框。便捷多載,固定說話者型別為 4,等同
askYesNo(4, nSpeakerTemplateID, nAnotherSpeakerTemplateID, nOtherSpeakerTemplateID, bParam, 0, sMsg)。- Parameters:
nSpeakerTemplateID- 主說話者 NPC 模板 idnAnotherSpeakerTemplateID- 第二說話者 NPC 模板 idnOtherSpeakerTemplateID- 第三說話者 NPC 模板 idbParam- 對話附加參數sMsg- 詢問文字
-
askYesNo
public void askYesNo(int nSpeakerTypeID, int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, int eColor, String sMsg) 開啟是/否詢問對話框(最完整多載),實際組裝並送出對話封包。若
sMsg內含選單標記#L則改走askMenu(String);否則將lastMsg設為 2 並透過NPCPacket.getNPCTalk(int, byte, String, String, byte)送出 Yes/No 對話。- Parameters:
nSpeakerTypeID- 說話者型別 idnSpeakerTemplateID- 主說話者 NPC 模板 idnAnotherSpeakerTemplateID- 第二說話者 NPC 模板 idnOtherSpeakerTemplateID- 第三說話者 NPC 模板 idbParam- 對話附加參數eColor- 文字顏色sMsg- 詢問文字
-
askMenu
開啟選單(多選項)對話框。便捷多載,等同
askMenu(0, sMsg)。選項以#L..#l標記,玩家選擇的索引回傳至腳本action。- Parameters:
sMsg- 含選項標記的選單文字
-
askMenu
以附加參數開啟選單對話框。便捷多載,等同
askMenu(id, bParam, sMsg),說話者即本對話的 NPC。- Parameters:
bParam- 對話附加參數sMsg- 含選項標記的選單文字
-
askMenu
以指定說話者開啟選單對話框。便捷多載,等同
askMenu(nSpeakerTemplateID, -1, bParam, sMsg)。- Parameters:
nSpeakerTemplateID- 說話者 NPC 模板 idbParam- 對話附加參數sMsg- 含選項標記的選單文字
-
askMenu
以兩名說話者開啟選單對話框。便捷多載,等同
askMenu(nSpeakerTemplateID, nAnotherSpeakerTemplateID, -1, bParam, sMsg)。- Parameters:
nSpeakerTemplateID- 主說話者 NPC 模板 idnAnotherSpeakerTemplateID- 第二說話者 NPC 模板 idbParam- 對話附加參數sMsg- 含選項標記的選單文字
-
askMenu
public void askMenu(int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, String sMsg) 以三名說話者開啟選單對話框。便捷多載,固定說話者型別為 4,等同
askMenu(4, nSpeakerTemplateID, nAnotherSpeakerTemplateID, nOtherSpeakerTemplateID, bParam, 0, sMsg)。- Parameters:
nSpeakerTemplateID- 主說話者 NPC 模板 idnAnotherSpeakerTemplateID- 第二說話者 NPC 模板 idnOtherSpeakerTemplateID- 第三說話者 NPC 模板 idbParam- 對話附加參數sMsg- 含選項標記的選單文字
-
askMenu
public void askMenu(int nSpeakerTypeID, int nSpeakerTemplateID, int nAnotherSpeakerTemplateID, int nOtherSpeakerTemplateID, int bParam, int eColor, String sMsg) 開啟選單對話框(最完整多載),實際組裝並送出對話封包。若
sMsg不含選項標記#L則退化為純文字say(String);否則將lastMsg設為 5 並透過NPCPacket.getNPCTalk(int, byte, String, String, byte)送出選單對話。- Parameters:
nSpeakerTypeID- 說話者型別 idnSpeakerTemplateID- 主說話者 NPC 模板 idnAnotherSpeakerTemplateID- 第二說話者 NPC 模板 idnOtherSpeakerTemplateID- 第三說話者 NPC 模板 idbParam- 對話附加參數eColor- 文字顏色sMsg- 含選項標記的選單文字
-
sendNext
顯示一段對話並只提供「下一步」按鈕。便捷多載,等同
sendNext(text, id),說話者即本對話的 NPC。- Parameters:
text- 對話文字
-
sendNext
以指定說話者顯示一段對話並只提供「下一步」按鈕。若已有待回應對話(
lastMsg > -1)則略過。若text含選項標記#L,會改走sendSimple(String)(否則客戶端會斷線);否則透過NPCPacket.getNPCTalk(int, byte, String, String, byte)送出並將lastMsg設為 0。- Parameters:
text- 對話文字id- 說話者 NPC 模板 id
-
sendPlayerToNpc
以「玩家對 NPC 說話」樣式顯示一段對話並提供「下一步」按鈕。便捷多載,等同
sendNextS(text, (byte) 3, id)(樣式 3 為玩家發話)。- Parameters:
text- 對話文字
-
sendNextNoESC
顯示一段不可按 ESC 關閉的對話並提供「下一步」按鈕。便捷多載,等同
sendNextS(text, (byte) 1, id)(樣式 1 禁止 ESC)。- Parameters:
text- 對話文字
-
sendNextNoESC
以指定說話者顯示一段不可按 ESC 關閉的對話並提供「下一步」按鈕。便捷多載,等同
sendNextS(text, (byte) 1, id)(樣式 1 禁止 ESC)。- Parameters:
text- 對話文字id- 說話者 NPC 模板 id
-
sendNextS
以指定樣式顯示一段對話並提供「下一步」按鈕。便捷多載,等同
sendNextS(text, type, id)。- Parameters:
text- 對話文字type- 對話框樣式
-
sendNextS
以指定樣式與說話者顯示一段對話並提供「下一步」按鈕。便捷多載,等同
sendNextS(text, type, idd, id)。- Parameters:
text- 對話文字type- 對話框樣式idd- 說話者 NPC 模板 id
-
sendNextS
以指定樣式與說話者顯示一段對話並提供「下一步」按鈕(最完整多載),實際送出封包。若已有待回應對話(
lastMsg > -1)則略過。若text含選項標記#L,改走sendSimpleS(String, byte)(否則客戶端會斷線);否則透過NPCPacket.getNPCTalk(int, byte, String, String, byte)送出並將lastMsg設為 0。- Parameters:
text- 對話文字type- 對話框樣式idd- 說話者 NPC 模板 idnpcid- 預留的 NPC id 參數(未使用,封包以對話的id為準)
-
sendOthersTalk
顯示由另一名 NPC 發話的對話。便捷多載,等同
sendOthersTalk(text, npcid, bottom, (byte) 1)。- Parameters:
text- 對話文字npcid- 發話的另一名 NPC 模板 idbottom- 上一步/下一步按鈕旗標(長度至少 2 時逐項生效)
-
sendOthersTalk
顯示由另一名 NPC 發話的對話(最完整多載),實際送出封包。依
bottom組出按鈕旗標字串(長度不足 2 時退化為預設「00 01」)。若text含選項標記#L則以lastMsg=5送出選單,否則以lastMsg=0送出文字,皆透過NPCPacket.getOthersTalk(int, byte, int, String, String, byte)。- Parameters:
text- 對話文字npcid- 發話的另一名 NPC 模板 idbottom- 上一步/下一步按鈕旗標type- 對話框樣式
-
sendPrev
顯示一段對話並只提供「上一步」按鈕。便捷多載,等同
sendPrev(text, id),說話者即本對話的 NPC。- Parameters:
text- 對話文字
-
sendPrev
以指定說話者顯示一段對話並只提供「上一步」按鈕。若已有待回應對話(
lastMsg > -1)則略過。若text含選項標記#L,改走sendSimple(String)(否則客戶端會斷線);否則透過NPCPacket.getNPCTalk(int, byte, String, String, byte)送出並將lastMsg設為 0。- Parameters:
text- 對話文字id- 說話者 NPC 模板 id
-
getAdviceTalk
送出「建議/提示」對話(advice talk)。將
lastMsg設為 1 並透過NPCPacket.getAdviceTalk(String[])送出。- Parameters:
wzinfo- 提示內容字串陣列
-
sendPrevS
以指定樣式顯示一段對話並只提供「上一步」按鈕。便捷多載,等同
sendPrevS(text, type, id)。- Parameters:
text- 對話文字type- 對話框樣式
-
sendPrevS
以指定樣式與說話者顯示一段對話並只提供「上一步」按鈕,實際送出封包。若已有待回應對話(
lastMsg > -1)則略過。若text含選項標記#L,改走sendSimpleS(String, byte)(否則客戶端會斷線);否則透過NPCPacket.getNPCTalk(int, byte, String, String, byte)送出並將lastMsg設為 0。- Parameters:
text- 對話文字type- 對話框樣式idd- 說話者 NPC 模板 id
-
sendNextPrev
顯示一段對話並同時提供「上一步」與「下一步」按鈕。便捷多載,等同
sendNextPrev(text, id),說話者即本對話的 NPC。- Parameters:
text- 對話文字
-
sendNextPrev
以指定說話者顯示一段對話並同時提供「上一步」與「下一步」按鈕。若已有待回應對話(
lastMsg > -1)則略過。若text含選項標記#L,改走sendSimple(String)(否則客戶端會斷線);否則透過NPCPacket.getNPCTalk(int, byte, String, String, byte)送出並將lastMsg設為 0。- Parameters:
text- 對話文字id- 說話者 NPC 模板 id
-
PlayerToNpc
以「玩家對 NPC 說話」樣式顯示一段對話並提供上一步/下一步按鈕。便捷多載,等同
sendNextPrevS(text, (byte) 3)(樣式 3 為玩家發話)。- Parameters:
text- 對話文字
-
sendNextPrevS
以玩家發話樣式顯示一段對話並提供上一步/下一步按鈕。便捷多載,等同
sendNextPrevS(text, (byte) 3)。- Parameters:
text- 對話文字
-
sendNextPrevS
以指定樣式顯示一段對話並提供上一步/下一步按鈕。便捷多載,等同
sendNextPrevS(text, type, id)。- Parameters:
text- 對話文字type- 對話框樣式
-
sendNextPrevS
以指定樣式與說話者顯示一段對話並提供上一步/下一步按鈕。便捷多載,等同
sendNextPrevS(text, type, idd, id)。- Parameters:
text- 對話文字type- 對話框樣式idd- 說話者 NPC 模板 id
-
sendNextPrevS
以指定樣式與說話者顯示一段對話並提供上一步/下一步按鈕(最完整多載),實際送出封包。若已有待回應對話(
lastMsg > -1)則略過。若text含選項標記#L,改走sendSimpleS(String, byte)(否則客戶端會斷線);否則透過NPCPacket.getNPCTalk(int, byte, String, String, byte)送出並將lastMsg設為 0。- Parameters:
text- 對話文字type- 對話框樣式idd- 說話者 NPC 模板 idnpcid- 預留的 NPC id 參數(未使用,封包以對話的id為準)
-
sendNextPrevNpcS
以指定 NPC(idd)作為說話者顯示一段對話並提供上一步/下一步按鈕,實際送出封包。與
sendNextPrevS(String, byte, int, int)類似,但封包的說話者 NPC id 改採idd(而非對話的id)。若已有待回應對話(lastMsg > -1)則略過;若含選項標記#L則改走sendSimpleS(String, byte)。送出後將lastMsg設為 0。- Parameters:
text- 對話文字type- 對話框樣式idd- 作為說話者並送出封包的 NPC 模板 id
-
sendOk
顯示只有「確定」按鈕的 NPC 對話框。委派至
sendOk(String, int),使用本對話的 NPC 編號id。- Parameters:
text- 對話內容(可含 MapleStory 文字格式碼)
-
sendOk
以指定 NPC 編號顯示只有「確定」按鈕的對話框。若已有待回應的對話(
lastMsg > -1)則直接略過;若文字含#L連結碼則改走sendSimple(String)(否則用戶端會斷線)。送出封包後將lastMsg設為0。- Parameters:
text- 對話內容id- 顯示對話的 NPC 範本編號
-
sendOkS
顯示只有「確定」按鈕的對話框,並指定對話框樣式。委派至
sendOkS(String, byte, int),使用本對話的 NPC 編號。- Parameters:
text- 對話內容type- 對話框樣式類型
-
sendOkS
以指定樣式與 NPC 編號顯示只有「確定」按鈕的對話框。若已有待回應的對話則略過;文字含
#L時改走sendSimpleS(String, byte)。 送出後lastMsg設為0。- Parameters:
text- 對話內容type- 對話框樣式類型idd- 顯示對話的 NPC 範本編號
-
sendYesNo
顯示帶「是 / 否」按鈕的 NPC 對話框。委派至
sendYesNo(String, int),使用本對話的 NPC 編號。玩家的選擇會回傳到腳本action的mode(1=是,0=否)。- Parameters:
text- 對話內容
-
sendYesNo
以指定 NPC 編號顯示帶「是 / 否」按鈕的對話框。若已有待回應的對話則略過;文字含
#L時改走sendSimple(String)。 送出後lastMsg設為2。- Parameters:
text- 對話內容id- 顯示對話的 NPC 範本編號
-
sendYesNoS
以指定樣式顯示帶「是 / 否」按鈕的對話框。委派至
sendYesNoS(String, byte, int),使用本對話的 NPC 編號。- Parameters:
text- 對話內容type- 對話框樣式類型
-
sendYesNoS
以指定樣式與 NPC 編號顯示帶「是 / 否」按鈕的對話框。若已有待回應的對話則略過;文字含
#L時改走sendSimpleS(String, byte)。 送出後lastMsg設為2。- Parameters:
text- 對話內容type- 對話框樣式類型idd- 顯示對話的 NPC 範本編號
-
sendAcceptDecline
顯示帶「接受 / 拒絕」按鈕的對話框。- Parameters:
text- 對話內容
-
sendAcceptDeclineNoESC
顯示帶「接受 / 拒絕」按鈕、且不可按 ESC 關閉的對話框。- Parameters:
text- 對話內容
-
askAcceptDecline
顯示帶「接受 / 拒絕」按鈕的對話框。委派至
askAcceptDecline(String, int),使用本對話的 NPC 編號。- Parameters:
text- 對話內容
-
askAcceptDecline
以指定 NPC 編號顯示帶「接受 / 拒絕」按鈕的對話框。若已有待回應的對話則略過;文字含
#L時改走sendSimple(String)。lastMsg設為0xE後送出可按 ESC 關閉的版本。- Parameters:
text- 對話內容id- 顯示對話的 NPC 範本編號
-
askAcceptDeclineNoESC
顯示帶「接受 / 拒絕」按鈕、且不可按 ESC 關閉的對話框。委派至
askAcceptDeclineNoESC(String, int),使用本對話的 NPC 編號。- Parameters:
text- 對話內容
-
askAcceptDeclineNoESC
以指定 NPC 編號顯示帶「接受 / 拒絕」按鈕、且不可按 ESC 關閉的對話框。若已有待回應的對話則略過;文字含
#L時改走sendSimple(String)。lastMsg設為0xE後送出不可關閉的版本。- Parameters:
text- 對話內容id- 顯示對話的 NPC 範本編號
-
askAvatar
顯示造型(Avatar)選擇對話框,供玩家從多組造型中挑選。若已有待回應的對話則略過。送出造型樣式封包後
lastMsg設為9, 玩家選擇的索引會回傳到腳本action。- Parameters:
text- 對話內容args- 可供選擇的造型 ID 清單
-
sendSimple
顯示含多個選項連結(#L...#l)的選單式對話框。委派至
sendSimple(String, int),使用本對話的 NPC 編號。玩家點選的選項索引會回傳到腳本action的selection。- Parameters:
text- 對話內容,應包含#L選項連結碼
-
sendSimple
以指定 NPC 編號顯示含多個選項連結的選單式對話框。若已有待回應的對話則略過;若文字「不含」
#L連結碼則改走sendNext(String)(否則用戶端會斷線)。送出後lastMsg設為5。- Parameters:
text- 對話內容,應包含#L選項連結碼id- 顯示對話的 NPC 範本編號
-
sendSimpleS
以指定樣式顯示含多個選項連結的選單式對話框。委派至
sendSimpleS(String, byte, int),使用本對話的 NPC 編號。- Parameters:
text- 對話內容,應包含#L選項連結碼type- 對話框樣式類型
-
sendSimpleS
以指定樣式與 NPC 編號顯示含多個選項連結的選單式對話框。若已有待回應的對話則略過;若文字「不含」
#L連結碼則改走sendNextS(String, byte)。 送出後lastMsg設為5。- Parameters:
text- 對話內容,應包含#L選項連結碼type- 對話框樣式類型idd- 顯示對話的 NPC 範本編號
-
sendStyle
顯示造型選擇對話框,供玩家挑選一組造型樣式。若已有待回應的對話則略過。送出造型樣式封包後
lastMsg設為9。- Parameters:
text- 對話內容styles- 可供選擇的造型 ID 陣列
-
sendAndroidStyle
顯示機器人(Android)造型選擇對話框。若已有待回應的對話則略過。送出機器人造型樣式封包後
lastMsg設為10。- Parameters:
text- 對話內容styles- 可供選擇的機器人造型 ID 陣列
-
setAndroidHair
public void setAndroidHair(int hair) 變更玩家機器人的髮型並存檔。更新機器人髮型、寫入資料庫,並重新套用機器人至玩家以同步顯示。
- Parameters:
hair- 髮型造型 ID
-
setAndroidFace
public void setAndroidFace(int face) 變更玩家機器人的臉型並存檔。更新機器人臉型、寫入資料庫,並重新套用機器人至玩家以同步顯示。
- Parameters:
face- 臉型造型 ID
-
sendGetNumber
顯示要求玩家輸入數字的對話框。若已有待回應的對話則略過;文字含
#L時改走sendSimple(String)。 送出後lastMsg設為4,玩家輸入的數值會回傳到腳本action的selection。- Parameters:
text- 對話內容def- 預設值min- 可輸入的最小值max- 可輸入的最大值
-
sendGetText
顯示要求玩家輸入文字的對話框。委派至
sendGetText(String, int),使用本對話的 NPC 編號。- Parameters:
text- 對話內容
-
sendGetText
以指定 NPC 編號顯示要求玩家輸入文字的對話框。若已有待回應的對話則略過;文字含
#L時改走sendSimple(String)。 送出後lastMsg設為3,輸入的字串可由getText()取得。- Parameters:
text- 對話內容id- 顯示對話的 NPC 範本編號
-
setGetText
-
getText
-
setHair
public void setHair(int hair) 變更玩家的髮型並即時更新外觀。設定髮型、更新
MapleStat.HAIR單一屬性並觸發equipChanged()廣播外觀變化。- Parameters:
hair- 髮型造型 ID
-
setFace
public void setFace(int face) 變更玩家的臉型並即時更新外觀。設定臉型、更新
MapleStat.FACE單一屬性並觸發equipChanged()廣播外觀變化。- Parameters:
face- 臉型造型 ID
-
setSkin
public void setSkin(int color) 變更玩家的膚色並即時更新外觀。設定膚色、更新
MapleStat.SKIN單一屬性並觸發equipChanged()廣播外觀變化。- Parameters:
color- 膚色代碼
-
setRandomAvatar
public int setRandomAvatar(int ticket, int... args_all) 消耗一張券,從候選清單中隨機套用一項外觀變更(膚色 / 臉型 / 髮型)。須持有票券道具,否則回傳
-1;成功時扣除一張票券,並依隨機選中的數值範圍判定為膚色 (< 100)、臉型(< 30000)或髮型,更新對應屬性後觸發equipChanged()。- Parameters:
ticket- 須消耗的票券道具 IDargs_all- 候選的膚色 / 臉型 / 髮型 ID 清單- Returns:
- 成功回傳
1;未持有票券回傳-1
-
setAvatar
public int setAvatar(int ticket, int args) 消耗一張券,套用指定的外觀變更(膚色 / 臉型 / 髮型)。須持有票券道具,否則回傳
-1;成功時扣除一張票券,並依args的數值範圍判定為膚色 (< 100)、臉型(< 30000)或髮型,更新對應屬性後觸發equipChanged()。- Parameters:
ticket- 須消耗的票券道具 IDargs- 要套用的膚色 / 臉型 / 髮型 ID- Returns:
- 成功回傳
1;未持有票券回傳-1
-
setMedalQuestHair
public void setMedalQuestHair(int hair) 為勳章任務變更玩家髮型並即時更新外觀。等同於
setHair(int):設定髮型、更新MapleStat.HAIR並觸發equipChanged()。- Parameters:
hair- 髮型造型 ID
-
sendStorage
public void sendStorage()為玩家開啟倉庫介面。若玩家不在地圖上、正在交易或已死亡,或伺服器正在關閉,則送出錯誤提示與
enableActions後中止。否則寫入倉庫開啟訊息、將對話狀態設為倉庫模式(conversation=4、operateStorage=true), 並送出倉庫內容封包。 -
openShop
public void openShop(int id) 開啟指定編號的商店介面。透過
MapleShopFactory取得商店並送出商店封包給用戶端。- Parameters:
id- 商店編號
-
openShopNPC
public void openShopNPC(int id) 開啟指定編號的商店介面,並綁定當前對話的 NPC。與
openShop(int)類似,但額外傳入本對話的 NPC 編號this.id。- Parameters:
id- 商店編號
-
gainGachaponItem
public int gainGachaponItem(int id, int quantity) 以轉蛋方式給予玩家道具。委派至
gainGachaponItem(int, int, String),廣播訊息採用玩家當前地圖的街道名稱。- Parameters:
id- 道具 IDquantity- 給予數量- Returns:
- 成功回傳道具 ID;失敗回傳
-1
-
gainGachaponItem
以轉蛋方式給予玩家道具,稀有道具會全頻廣播。道具不存在或加入背包失敗時回傳
-1。若為轉蛋稀有道具 (GameConstants.gachaponRareItem > 0)則透過World.Broadcast全頻廣播中獎喇叭;最後送出道具獲得效果封包。例外會被記錄並回傳-1。- Parameters:
id- 道具 IDquantity- 給予數量msg- 稀有道具廣播時使用的地點訊息- Returns:
- 成功回傳道具 ID;失敗或發生例外回傳
-1
-
useNebuliteGachapon
public int useNebuliteGachapon()使用星岩(Nebulite)轉蛋,依機率隨機抽出一個潛能星岩或高級票券碎片。需 EQUIP/USE/SETUP/ETC/CASH 五種背包各至少 1 格空位,否則回傳
-1。依機率決定等級 (A/B/C/D,無法抽到 S),D 級有 25% 機率改給高級票券碎片(4420000);B 級以上會全頻廣播中獎喇叭。 成功後送出道具獲得效果、給予一個碎片道具(2430748)並扣除一張轉蛋券(5220094)。 例外會被記錄並回傳-1。- Returns:
- 成功回傳抽中的道具 ID;背包不足、抽取失敗或發生例外回傳
-1
-
changeJob
-
startQuest
public void startQuest(int idd) 依正常流程開始指定任務。委派至
MapleQuest.start(MapleCharacter, int),以本對話的 NPC 編號作為觸發者。- Parameters:
idd- 任務 ID
-
completeQuest
public void completeQuest(int idd) 依正常流程完成指定任務。委派至
MapleQuest.complete(MapleCharacter, int),以本對話的 NPC 編號作為觸發者。- Parameters:
idd- 任務 ID
-
forfeitQuest
public void forfeitQuest(int idd) 放棄指定任務。- Parameters:
idd- 任務 ID
-
forceStartQuest
public void forceStartQuest()強制開始本對話綁定的任務(quest),不檢查前置條件。委派至
MapleQuest.forceStart(MapleCharacter, int, String),不附帶自訂資料。 -
forceStartQuest
public void forceStartQuest(int idd) 強制開始指定任務,不檢查前置條件。委派至
MapleQuest.forceStart(MapleCharacter, int, String),不附帶自訂資料。- Overrides:
forceStartQuestin classAbstractPlayerInteraction- Parameters:
idd- 任務 ID
-
forceStartQuest
強制開始本對話綁定的任務並附帶自訂資料字串。委派至
MapleQuest.forceStart(MapleCharacter, int, String),將customData寫入任務狀態。- Parameters:
customData- 要附加到任務的自訂資料
-
forceCompleteQuest
public void forceCompleteQuest()強制完成本對話綁定的任務(quest),不檢查條件。 -
forceCompleteQuest
public void forceCompleteQuest(int idd) 強制完成指定任務,不檢查條件。- Overrides:
forceCompleteQuestin classAbstractPlayerInteraction- Parameters:
idd- 任務 ID
-
getQuestCustomData
取得本對話綁定任務(quest)的自訂資料字串。- Returns:
- 該任務狀態的自訂資料;若任務不存在則由
getQuestNAdd建立後回傳其值
-
getQuestCustomData
取得指定任務的自訂資料字串。- Parameters:
quest- 任務 ID- Returns:
- 該任務狀態的自訂資料;若任務不存在則由
getQuestNAdd建立後回傳其值
-
setQuestCustomData
設定本對話綁定任務(quest)的自訂資料字串。- Parameters:
customData- 要寫入任務狀態的自訂資料
-
getMeso
public int getMeso()取得玩家目前持有的楓幣數量。- Returns:
- 玩家的楓幣數
-
gainAp
public void gainAp(int amount) 給予玩家能力點數(AP)。- Parameters:
amount- 要增加的 AP 數量
-
expandInventory
public void expandInventory(byte type, int amt) 擴充玩家指定類型背包的格數。- Parameters:
type- 背包類型(對應MapleInventoryType的值)amt- 欲增加的格數
-
unequipEverything
public void unequipEverything()將玩家身上所有已穿戴裝備卸下並移回裝備(EQUIP)背包。逐一取得
MapleInventoryType.EQUIPPED內所有物品的位置, 透過MapleInventoryManipulator.unequip(MapleClient, short, short)卸至裝備背包的下一個空格。 會更動玩家背包狀態並送出對應封包。- Overrides:
unequipEverythingin classAbstractPlayerInteraction
-
clearSkills
public final void clearSkills()清除玩家所有技能。 -
hasSkill
public boolean hasSkill(int skillid) 查詢玩家是否擁有指定技能。- Parameters:
skillid- 技能 ID- Returns:
- 擁有該技能時為
true
-
spawnNPCRequestController
public void spawnNPCRequestController(int npcid, int x, int y) 於指定座標為此玩家生成一個受控(client-request)NPC。委派至
spawnNPCRequestController(int, int, int, int),朝向參數f預設為0。- Parameters:
npcid- NPC IDx- 生成座標 Xy- 生成座標 Y
-
spawnNPCRequestController
public void spawnNPCRequestController(int npcid, int x, int y, int f) 於指定座標與朝向為此玩家生成一個受控 NPC。委派至
spawnNPCRequestController(int, int, int, int, int),物件 ID 預設使用npcid。- Parameters:
npcid- NPC IDx- 生成座標 Xy- 生成座標 Yf- 朝向(face)
-
spawnNPCRequestController
public void spawnNPCRequestController(int npcid, int x, int y, int f, int oid) 於指定座標、朝向與物件 ID 為此玩家生成一個受控 NPC(核心實作)。若同
oid已登記於npcRequestController,先移除舊登記。 優先沿用當前地圖上既有的同 ID NPC;否則以MapleLifeFactory.getNPC(int)建立自訂 NPC, 設定座標、可見範圍、踏腳板與物件 ID(找不到該 NPC 則為無操作)。最後將 NPC 登記於npcRequestController,並送出生成與「summon」特殊動作封包給此玩家。- Parameters:
npcid- NPC IDx- 生成座標 Xy- 生成座標 Yf- 朝向(face)oid- 物件 ID(用於後續控制與移除的鍵)
-
setNPCSpecialAction
令受控 NPC 播放指定的特殊動作。委派至
setNPCSpecialAction(int, String, int, boolean),時間預設0、unk為false。- Parameters:
npcid- 受控 NPC 的 ID(登記於npcRequestController)action- 特殊動作名稱
-
setNPCSpecialAction
令受控 NPC 播放指定的特殊動作並指定持續時間。委派至
setNPCSpecialAction(int, String, int, boolean, int),directionTime預設-1(不附加延遲)。- Parameters:
npcid- 受控 NPC 的 IDaction- 特殊動作名稱time- 動作持續時間unk- 額外旗標
-
setNPCSpecialAction
令受控 NPC 播放指定的特殊動作,並可選擇性附加演出延遲(核心實作)。查找
npcRequestController中登記於此玩家的同 ID NPC,未登記則為無操作。 送出特殊動作封包;當directionTime > -1時再透過exceTime(int)附加一段延遲(directionTime > 0取其值,否則取time)。- Parameters:
npcid- 受控 NPC 的 IDaction- 特殊動作名稱time- 動作持續時間unk- 額外旗標directionTime- 演出延遲;-1表示不附加
-
updateNPCSpecialAction
public void updateNPCSpecialAction(int oid, int value, int x, int y) 更新受控 NPC 的特殊動作狀態並送出封包。依
oid查找npcRequestController中登記於此玩家的 NPC,未登記則為無操作。- Parameters:
oid- 受控 NPC 的物件 IDvalue- 動作狀態值x- 座標 Xy- 座標 Y
-
getNPCDirectionEffect
對受控 NPC 播放指定的演出方向效果(in-game direction effect)。依
npcid查找npcRequestController中登記於此玩家的 NPC,未登記則為無操作; 送出InGameDirectionEvent_EffectPlay封包給此玩家。- Parameters:
npcid- 受控 NPC 的 IDdata- 效果資料名稱value- 效果參數值x- 座標 Xy- 座標 Y
-
removeNPCRequestController
public void removeNPCRequestController(int oid) 移除先前生成的受控 NPC。依
oid查找npcRequestController中登記於此玩家的 NPC,未登記則為無操作; 送出移除控制與移除 NPC 封包後,自npcRequestController解除登記。- Parameters:
oid- 受控 NPC 的物件 ID
-
forcedAction
public void forcedAction(int[] values) 對玩家觸發強制動作演出(ForcedAction)。委派
getDirectionEffect(int, String, int[]),送出演出封包。- Parameters:
values- 動作參數陣列
-
exceTime
public void exceTime(int time) 於演出序列中插入一段延遲(Delay)。委派
getDirectionEffect(int, String, int[]),送出演出封包。- Parameters:
time- 延遲時間
-
getEventEffect
對玩家播放指定的事件效果(EffectPlay)。委派
getDirectionEffect(int, String, int[]),送出演出封包。- Parameters:
data- 效果資料名稱values- 效果參數陣列
-
playerWaite
public void playerWaite()強制玩家進入待機(不操作)狀態的演出輸入。送出
ForcedInput演出封包,輸入值0。 -
playerMoveLeft
public void playerMoveLeft()強制玩家向左移動的演出輸入。送出
ForcedInput演出封包,輸入值1。 -
playerMoveRight
public void playerMoveRight()強制玩家向右移動的演出輸入。送出
ForcedInput演出封包,輸入值2。 -
playerJump
public void playerJump()強制玩家跳躍的演出輸入。送出
ForcedInput演出封包,輸入值3。 -
playerMoveDown
public void playerMoveDown()強制玩家向下移動的演出輸入。送出
ForcedInput演出封包,輸入值4。 -
forcedInput
public void forcedInput(int input) 對玩家送出自訂的強制輸入演出(ForcedInput)。- Parameters:
input- 輸入值(如0待機、1左、2右、3跳、4下)
-
patternInput
向玩家要求輸入一組指定的按鍵序列(PatternInputRequest)。- Parameters:
data- 序列資料名稱values- 序列參數陣列
-
cameraMove
public final void cameraMove(int[] values) 播放鏡頭移動演出(CameraMove)。- Parameters:
values- 鏡頭移動參數陣列
-
cameraOnCharacter
public final void cameraOnCharacter(int value) 將鏡頭重新對準玩家角色(CameraOnCharacter)。- Parameters:
value- 鏡頭參數值
-
cameraZoom
public final void cameraZoom(int[] values) 播放鏡頭縮放演出(CameraZoom)。- Parameters:
values- 鏡頭縮放參數陣列
-
hidePlayer
public final void hidePlayer(boolean hide) 切換玩家角色的隱身演出(VansheeMode)。- Parameters:
hide-true隱藏角色,false顯示
-
faceOff
public final void faceOff(int value) 播放臉部特寫演出(FaceOff)。- Parameters:
value- 演出參數值
-
sendTellStory
播放劇情獨白演出(Monologue)。- Parameters:
data- 獨白資料名稱lastLine- 是否為最後一句(true表示結束此段獨白)
-
removeAdditionalEffect
public void removeAdditionalEffect()移除先前附加於演出中的額外效果(RemoveAdditionalEffect)。 -
forcedMove
public void forcedMove(int value, int value1) 強制玩家依指定參數移動(ForcedMove)。- Parameters:
value- 移動參數一value1- 移動參數二
-
forcedFlip
public void forcedFlip(int value) 強制玩家角色翻轉朝向(ForcedFlip)。- Parameters:
value- 翻轉參數值
-
inputUI
public void inputUI(int value) 向玩家彈出演出輸入介面(InputUI)。- Parameters:
value- 介面參數值
-
getDirectionEffect
演出方向效果(in-game direction event)的核心發送方法,供本類各演出 helper 委派。依
mod解析出InGameDirectionEventOpcode並送出演出封包給此玩家。 當lastMsg已被設定(> -1)時直接返回,不更新狀態;否則對於會等待玩家回應 的演出類型(Delay/ForcedInput/PatternInputRequest/CameraMove/CameraZoom)將lastMsg設為0x11,使後續對話流程得以正確接續。- Parameters:
mod- 演出事件 opcode 值(見InGameDirectionEventOpcode)data- 效果資料名稱,可為nullvalues- 效果參數陣列,可為null
-
getDirectionFacialExpression
public void getDirectionFacialExpression(int expression, int duration) 令玩家角色播放臉部表情演出。送出
UIPacket.facialExpression2(int, int)封包給此玩家。- Parameters:
expression- 表情 IDduration- 表情持續時間
-
playMovie
對玩家播放劇情動畫(movie)。委派至
playMovie(String, boolean),show預設true。- Parameters:
data- 動畫資料名稱
-
playMovie
對玩家播放劇情動畫並設定後續對話狀態。委派
AbstractPlayerInteraction.playMovie(String, boolean)送出動畫封包, 隨後將lastMsg設為0x12以正確接續對話流程。- Overrides:
playMoviein classAbstractPlayerInteraction- Parameters:
data- 動畫資料名稱show- 是否顯示動畫
-
showMapEffect
向此玩家播放地圖效果(map effect)。送出
CField.MapEff(String)封包,僅對當前玩家可見。- Overrides:
showMapEffectin classAbstractPlayerInteraction- Parameters:
effect- 地圖效果資料名稱
-
showEffect
播放畫面效果。broadcast為true時對整張地圖廣播CField.showEffect(String); 否則僅送給當前玩家。- Overrides:
showEffectin classAbstractPlayerInteraction- Parameters:
broadcast- 是否對整張地圖廣播effect- 效果資料名稱
-
playSound
播放音效。broadcast為true時對整張地圖廣播CField.playSound(String); 否則僅送給當前玩家。- Overrides:
playSoundin classAbstractPlayerInteraction- Parameters:
broadcast- 是否對整張地圖廣播sound- 音效資料名稱
-
environmentChange
變更地圖環境(背景/天氣等)效果。broadcast為true時對整張地圖廣播CField.environmentChange(String, int); 否則僅送給當前玩家。- Parameters:
broadcast- 是否對整張地圖廣播env- 環境資料名稱
-
updateBuddyCapacity
public void updateBuddyCapacity(int capacity) 設定玩家好友名單上限。- Parameters:
capacity- 新的好友名單容量
-
getBuddyCapacity
public int getBuddyCapacity()取得玩家好友名單上限。- Returns:
- 好友名單容量
-
partyMembersInMap
public int partyMembersInMap()計算與玩家同隊且位於同一張地圖的成員數。玩家未組隊時回傳
0;否則遍歷當前地圖(thread-safe 快照)統計 隊伍 ID 相同的角色數。- Returns:
- 同隊且同地圖的成員數
-
getPartyMembers
取得玩家隊伍中所有目前在線的成員角色物件。玩家未組隊時回傳
null。否則跨所有頻道(ChannelServer.getAllInstances()) 依成員 ID 查找在線角色並收集為清單;離線成員不納入。- Returns:
- 在線隊員的角色清單;玩家未組隊時為
null
-
warpPartyWithExp
public void warpPartyWithExp(int mapId, int exp) 將整隊傳送至指定地圖並給予經驗值。玩家未組隊時僅傳送自己(
AbstractPlayerInteraction.warp(int, int))並給予經驗。 已組隊時遍歷隊員:僅當隊員與玩家位於相同活動實例(或皆無實例)時, 才將其移動至目標地圖的 0 號傳送點並加經驗。會更動角色地圖與經驗狀態。- Parameters:
mapId- 目標地圖 IDexp- 給予的經驗值
-
warpPartyWithExpMeso
public void warpPartyWithExpMeso(int mapId, int exp, int meso) 將整隊傳送至指定地圖並給予經驗值與楓幣。玩家未組隊時僅傳送自己(
AbstractPlayerInteraction.warp(int, int))並給予經驗與楓幣。 已組隊時遍歷隊員:僅當隊員與玩家位於相同活動實例(或皆無實例)時, 才將其移動至目標地圖的 0 號傳送點並加經驗、楓幣。會更動角色地圖、經驗與金錢狀態。- Parameters:
mapId- 目標地圖 IDexp- 給予的經驗值meso- 給予的楓幣
-
getSquad
取得本頻道指定類型的遠征隊(MapleSquad)。- Parameters:
type- 遠征隊類型名稱- Returns:
- 對應的遠征隊;不存在時為
null
-
getSquadAvailability
查詢指定遠征隊的可用狀態。- Parameters:
type- 遠征隊類型名稱- Returns:
- 遠征隊狀態值(
MapleSquad.getStatus());遠征隊不存在時為-1
-
registerSquad
-
getSquadList
以對話視窗向玩家顯示遠征隊成員清單。依
type_決定呈現方式:0/3以sendNext(String)一般檢視;1為隊長封鎖檢視(sendSimple(String));2為封鎖名單檢視(有封鎖成員用sendSimple(String),否則用sendNext(String))。遠征隊不存在時回傳false。 捕捉NullPointerException並寫入腳本錯誤紀錄後回傳false。會送出對話封包。- Parameters:
type- 遠征隊類型名稱type_- 檢視模式- Returns:
- 成功顯示時為
true
-
isSquadLeader
判斷當前玩家是否為指定遠征隊的隊長。- Parameters:
type- 遠征隊類型名稱- Returns:
- 玩家為隊長時為
1,非隊長為0,遠征隊不存在為-1
-
reAdd
將斷線後重連的玩家重新加入指定的活動實例與遠征隊。依名稱取得斷線時保留的
EventInstanceManager(getDisconnected)與MapleSquad;兩者皆存在時把玩家重新加入遠征隊並重新登記至活動實例,回傳true。 任一不存在則回傳false。- Parameters:
eim- 斷線活動實例的名稱鍵squad- 遠征隊類型名稱- Returns:
- 重新加入成功時為
true
-
banMember
將指定遠征隊(MapleSquad)中某位成員列入封鎖名單。取得本頻道名稱為
type的遠征隊,若存在則委派MapleSquad.banMember(int)。 遠征隊不存在時為無操作(no-op)。- Parameters:
type- 遠征隊類型名稱pos- 欲封鎖成員在隊伍中的位置索引
-
acceptMember
接受指定遠征隊(MapleSquad)中某位待審成員加入。取得本頻道名稱為
type的遠征隊,若存在則委派MapleSquad.acceptMember(int)。 遠征隊不存在時為無操作(no-op)。- Parameters:
type- 遠征隊類型名稱pos- 欲接受成員在隊伍中的位置索引
-
addMember
將目前玩家加入或退出指定遠征隊(MapleSquad)。取得本頻道名稱為
type的遠征隊並委派MapleSquad.addMember(MapleCharacter, boolean)。 遠征隊不存在或過程拋出NullPointerException(後者另寫入腳本錯誤記錄)時回傳-1。- Parameters:
type- 遠征隊類型名稱join-true表示加入、false表示退出- Returns:
- 由
MapleSquad.addMember(MapleCharacter, boolean)回傳的結果,失敗回傳-1
-
isSquadMember
查詢目前玩家在指定遠征隊(MapleSquad)中的成員狀態。- Parameters:
type- 遠征隊類型名稱- Returns:
- 遠征隊不存在回傳
-1;為成員回傳1;已被封鎖回傳2;其餘回傳0
-
resetReactors
public void resetReactors()重置玩家目前所在地圖的所有反應爐(reactor)。 -
genericGuildMessage
public void genericGuildMessage(int code) 向客戶端發送一則通用公會訊息封包。- Parameters:
code- 公會訊息代碼(將轉型為byte傳給GuildPacket.genericGuildMessage(byte))
-
disbandGuild
public void disbandGuild()解散目前玩家所屬的公會。僅當玩家有公會(公會 ID > 0)且公會階級為 1(會長)時才會執行,否則為無操作; 條件成立時委派
World.Guild.disbandGuild(int)。 -
increaseGuildCapacity
public void increaseGuildCapacity(boolean trueMax) 擴充目前玩家所屬公會的成員容量。分兩種模式:
trueMax == false:一般擴充(上限 100 人),需扣除 500000 楓幣;楓幣不足時發送提示並中止。trueMax == true:強制擴充(上限 200 人),改為扣除 25000 GP(會降低公會等級)。
委派
World.Guild.increaseGuildCapacity(int, boolean);成功時扣除對應資源, 失敗或已達上限時向玩家發送說明訊息。玩家無公會時為無操作。會發送封包並變更玩家/公會狀態。- Parameters:
trueMax-true啟用強制擴充(GP 計費、上限 200),false為一般擴充(楓幣計費、上限 100)
-
displayGuildRanks
public void displayGuildRanks()向客戶端發送公會排行榜封包。以目前 NPC 的
id與MapleGuildRanking.getRank()組出GuildPacket.showGuildRanks(int, List)封包並發送。 -
showFm
public void showFm()向客戶端發送名聲(fame)排行榜封包。以目前 NPC 的
id與MapleGuildRanking.getFameRank()組出封包並發送。 -
showRb
public void showRb()向客戶端發送轉生(reborn)排行榜封包。以目前 NPC 的
id與MapleGuildRanking.getRebornRank()組出封包並發送。 -
removePlayerFromInstance
public boolean removePlayerFromInstance()將目前玩家自其所在的事件實例(EventInstanceManager)移除。玩家有事件實例時委派
EventInstanceManager.removePlayer(MapleCharacter)並回傳true; 否則不做任何事並回傳false。- Returns:
- 成功移除回傳
true,玩家不在任何事件實例中回傳false
-
isPlayerInstance
public boolean isPlayerInstance()判斷目前玩家是否身處某個事件實例(EventInstanceManager)中。- Returns:
- 玩家有事件實例回傳
true,否則false
-
changeStat
public void changeStat(byte slot, int type, int amount) 直接設定玩家身上某件已裝備裝備(Equip)的單一屬性值。由
type選定要設定的屬性,amount為新值(多數屬性轉型為short, 部分如升級次數/鎚擊/等級/強化為byte)。type對照如下: 0~3 STR/DEX/INT/LUK、4~5 HP/MP、6~7 物攻/魔攻、8~9 物防/魔防、10~11 命中/迴避、12 手技、 13~14 移動速度/跳躍、15 可升級次數、16 金鎚次數、17 裝備等級、18 強化等級、 19~23 潛在能力一至五、24 持有者名稱(取自getText())。未知type為無操作。完成後呼叫
equipChanged()套用變更,屬於玩家狀態變更並會發送封包。注意:未檢查指定欄位是否確有裝備,槽位為空時轉型可能拋出例外。
- Parameters:
slot- 裝備欄位的負數槽位(MapleInventoryType.EQUIPPED)type- 屬性選擇器(見上表)amount- 欲設定的新屬性值
-
openDuey
public void openDuey()開啟快遞(Duey)視窗。將玩家對話狀態設為 2 並發送
CField.sendDuey(byte, List)開啟封包。 -
openMerchantItemStore
public void openMerchantItemStore()開啟雇傭商人(Hired Merchant)的物品取回視窗。將玩家對話狀態設為 3 並委派
HiredMerchantHandler.displayMerch(MapleClient)顯示商店內容。 -
sendPVPWindow
public void sendPVPWindow()開啟 PVP 對戰視窗。連續發送
UIPacket.openUI(int, int)(UI 50)與CField.sendPVPMaps()兩個封包。 -
sendAzwanWindow
public void sendAzwanWindow()開啟阿斯旺(Azwan)視窗。發送
UIPacket.openUI(int, int)(UI 70)封包。 -
sendFriendWindow
public void sendFriendWindow()開啟好友(Friendship)視窗。以玩家當前可新增的好友額度(
getFriendShipToAdd())發送UIPacket.sendFriendWindow(int)封包。 -
sendDojoRanks
public void sendDojoRanks()查詢武陵道場(Mu Lung Dojo)排行榜並發送給客戶端。自
dojo_ranks資料表讀取前 50 筆(依通關時間遞增)後,以CWvsContext.getMulungRanks(ResultSet)組出封包發送。讀取失敗時記錄錯誤並中止(不丟出)。 -
sendRepairWindow
public void sendRepairWindow()開啟裝備修理視窗。以目前 NPC 的
id發送UIPacket.sendRepairWindow(int)封包。 -
sendProfessionWindow
public void sendProfessionWindow()開啟專業技能(Profession)視窗。發送
UIPacket.openUI(int, int)(UI 42)封包。 -
setDojoMode
public void setDojoMode(int mode) 設定武陵道場的進行模式。玩家不在隊伍時僅對自己設定(
setDojoMode(getDojoMode(mode)));在隊伍中時, 遍歷隊伍成員並對每位線上玩家分別設定。- Parameters:
mode- 道場模式參數(會先經各玩家的getDojoMode(mode)轉換後再套用)
-
getDojoPoints
public final int getDojoPoints()取得玩家目前的武陵道場點數。- Returns:
- 道場點數
-
getDojoRecord
public final int getDojoRecord()取得玩家的武陵道場連續通關紀錄。讀取任務
GameConstants.DOJO_RECORD的自訂資料(不更新紀錄計數)。- Returns:
- 道場連續通關紀錄值
-
setDojoRecord
public void setDojoRecord(boolean reset) 更新或重置玩家的武陵道場連續通關紀錄。reset == true時將GameConstants.DOJO_RECORD與GameConstants.DOJO兩個任務的自訂資料皆歸零;reset == false時將DOJO_RECORD的紀錄值加一。會寫入任務自訂資料(玩家狀態變更)。- Parameters:
reset-true重置紀錄,false將紀錄加一
-
start_DojoAgent
public boolean start_DojoAgent(boolean dojo, boolean party) 啟動武陵道場或祕密特務(Agent)並傳送玩家進入。dojo == true時委派Event_DojoAgent.warpStartDojo(MapleCharacter, boolean)(道場), 否則委派Event_DojoAgent.warpStartAgent(MapleCharacter, boolean)(特務)。會傳送玩家。- Parameters:
dojo-true進入武陵道場,false進入祕密特務party-true以隊伍方式進入- Returns:
- 啟動/傳送成功回傳
true,否則false
-
start_PyramidSubway
public boolean start_PyramidSubway(int pyramid) 啟動金字塔(Pyramid)或地鐵(Subway)活動並傳送玩家進入。pyramid >= 0時委派Event_PyramidSubway.warpStartPyramid(MapleCharacter, int)(傳入該關卡編號), 否則委派Event_PyramidSubway.warpStartSubway(MapleCharacter)。會傳送玩家。- Parameters:
pyramid- 金字塔關卡編號;傳入負數表示改為啟動地鐵活動- Returns:
- 啟動/傳送成功回傳
true,否則false
-
bonus_PyramidSubway
public boolean bonus_PyramidSubway(int pyramid) 傳送玩家進入金字塔(Pyramid)或地鐵(Subway)的獎勵關卡。pyramid >= 0時委派Event_PyramidSubway.warpBonusPyramid(MapleCharacter, int)(傳入該關卡編號), 否則委派Event_PyramidSubway.warpBonusSubway(MapleCharacter)。會傳送玩家。- Parameters:
pyramid- 金字塔關卡編號;傳入負數表示改為地鐵獎勵關卡- Returns:
- 傳送成功回傳
true,否則false
-
getKegs
public final short getKegs()取得煙火(Fireworks)活動中火藥桶(kegs)的累積百分比。- Returns:
- 火藥桶累積百分比
-
get香爐
public final short get香爐()取得煙火活動中香爐的累積百分比。- Returns:
- 香爐累積百分比
-
giveKegs
public void giveKegs(int kegs) 由目前玩家為煙火活動貢獻火藥桶(kegs)。委派
getFireWorks().giveKegs,會變更頻道煙火活動狀態。- Parameters:
kegs- 貢獻的火藥桶數量
-
give香爐
public void give香爐(int 香爐) 由目前玩家為煙火活動貢獻香爐。委派
getFireWorks().give香爐,會變更頻道煙火活動狀態。- Parameters:
香爐- 貢獻的香爐數量
-
getSunshines
public final short getSunshines()取得煙火活動中陽光(sunshines)的累積百分比。- Returns:
- 陽光累積百分比
-
addSunshines
public void addSunshines(int kegs) 由目前玩家為煙火活動貢獻陽光(sunshines)。委派
getFireWorks().giveSuns,會變更頻道煙火活動狀態。- Parameters:
kegs- 貢獻的陽光數量
-
getDecorations
public final short getDecorations()取得煙火活動中裝飾品(decorations)的累積百分比。- Returns:
- 裝飾品累積百分比
-
addDecorations
public void addDecorations(int kegs) 由目前玩家為煙火活動貢獻裝飾品(decorations)。委派
getFireWorks().giveDecs,會變更頻道煙火活動狀態;過程拋出例外時記錄錯誤並吞下(不丟出)。- Parameters:
kegs- 貢獻的裝飾品數量
-
getCarnivalParty
取得目前玩家所屬的怪物嘉年華(Carnival)隊伍。- Returns:
- 玩家的
MapleCarnivalParty,未加入時可能為null
-
getNextCarnivalRequest
取得目前玩家收到的下一個怪物嘉年華對戰邀請。- Returns:
- 下一個
MapleCarnivalChallenge,無邀請時可能為null
-
getCarnivalChallenge
為指定玩家建立一個新的怪物嘉年華對戰挑戰物件。- Parameters:
chr- 發起挑戰的MapleCharacter- Returns:
- 以該玩家為對象建立的
MapleCarnivalChallenge
-
maxStats
public void maxStats()將玩家四圍(STR/DEX/INT/LUK)與血量/魔力上限拉滿。四圍皆設為 32767、HP/MAXHP 設為 99999;MP/MAXMP 一般設為 99999,但若玩家為惡魔職業 (
GameConstants.isDemon(int))則改設為 10。重算本地屬性後,發送CWvsContext.updatePlayerStats(Map, MapleCharacter)封包同步至客戶端。會直接變更玩家屬性狀態並發送封包。 -
getSpeedRun
取得指定遠征類型的速通(speed run)排行資料。將
typ解析為ExpeditionType後查詢SpeedRunner.getSpeedRunData(ExpeditionType); 無資料時回傳一個空的Triple(空字串、空 map、0L)。- Parameters:
typ- 遠征類型名稱(ExpeditionType列舉名)- Returns:
- 速通資料三元組(標題、排名項目對照、時間戳記)
- Throws:
IllegalArgumentException- 當typ不是合法的ExpeditionType名稱
-
getSR
顯示速通資料中指定排名項目的內容。從
ma的排名對照(mid)取出索引sel的字串:若為空則結束對話 (dispose())並回傳false;否則以sendOk(String)顯示並回傳true。- Parameters:
ma- 由getSpeedRun(String)取得的速通資料三元組sel- 欲顯示的排名項目索引- Returns:
- 有內容並已顯示回傳
true,否則回傳false(並已結束對話)
-
getEquip
依道具 ID 建立一件對應的裝備(Equip)物件。委派
MapleItemInformationProvider.getEquipById(int)並轉型為Equip。- Parameters:
itemid- 裝備道具 ID- Returns:
- 新建的
Equip實例
-
setExpiration
-
setLock
為一件裝備加上鎖定或不可交易旗標。僅當
statsSel為Equip時生效:無到期時間(-1)的裝備加上ItemFlag.LOCK,否則加上ItemFlag.UNTRADEABLE。其他型別為無操作。- Parameters:
statsSel- 目標物件,須為Equip才會處理
-
addFromDrop
將一個物品實例直接加入玩家背包。僅當
statsSel為Item時生效:先以MapleInventoryManipulator.checkSpace(MapleClient, int, int, String)檢查空間,足夠時再以MapleInventoryManipulator.addFromDrop(MapleClient, Item, boolean)加入。會變更玩家背包並可能發送封包。- Parameters:
statsSel- 欲加入的物品,須為Item- Returns:
- 成功加入回傳
true;空間不足或型別不符回傳false
-
replaceItem
以指定屬性偏移取代玩家背包中某個槽位的物品(不消耗升級次數)。委派
replaceItem(int, int, Object, int, String, boolean),takeSlot固定為false。- Parameters:
slot- 來源物品所在槽位invType- 背包類型代碼(對應MapleInventoryType)statsSel- 取代用的物品物件(Item),為空時改用槽位現有物品offset- 屬性增減量(> 0 才會套用屬性修改,且僅限裝備欄)type- 要修改的屬性名稱(如"Slots"、"STR"、"WATK"等)- Returns:
- 取代成功回傳
true,否則false
-
replaceItem
public boolean replaceItem(int slot, int invType, Object statsSel, int offset, String type, boolean takeSlot) 取代玩家背包中某個槽位的物品,並可對裝備套用屬性偏移。解析
invType為MapleInventoryType(無效則回傳false)。來源物品取自該槽位, 若該槽位為空或statsSel本身為Item則改用statsSel。當
offset > 0(且必須為MapleInventoryType.EQUIP裝備欄,否則回傳false)時: 若takeSlot為true,先消耗一次可升級次數(不足則回傳false)並依到期狀態加上ItemFlag.LOCK/ItemFlag.UNTRADEABLE旗標;接著依type對裝備的對應屬性(升級次數/ 金鎚/等級/四圍/攻防/命中迴避/速度跳躍/道具經驗/到期/旗標等)加上offset,最後複製為新物件。最終自原槽位移除舊物品(
MapleInventoryManipulator.removeFromSlot(MapleClient, MapleInventoryType, short, short, boolean))並以MapleInventoryManipulator.addFromDrop(MapleClient, Item, boolean)加入結果物品。會變更玩家背包並可能發送封包。- Parameters:
slot- 來源物品所在槽位invType- 背包類型代碼(對應MapleInventoryType)statsSel- 取代用的物品物件(Item),為空時改用槽位現有物品offset- 屬性增減量(> 0 才會套用屬性修改,且僅限裝備欄)type- 要修改的屬性名稱(如"Slots"、"Level"、"Hammer"、"STR"等)takeSlot-true時先消耗一次可升級次數並加上鎖定/不可交易旗標- Returns:
- 取代成功回傳
true,背包類型無效或裝備條件不符回傳false
-
replaceItem
取代玩家背包中某個槽位的物品,並增加其可升級次數。委派
replaceItem(int, int, Object, int, String),type固定為"Slots"。- Parameters:
slot- 來源物品所在槽位invType- 背包類型代碼(對應MapleInventoryType)statsSel- 取代用的物品物件(Item),為空時改用槽位現有物品upgradeSlots- 欲增加的可升級次數- Returns:
- 取代成功回傳
true,否則false
-
isCash
public boolean isCash(int itemId) 判斷指定道具是否為現金(cash)道具。- Parameters:
itemId- 道具 ID- Returns:
- 為現金道具回傳
true,否則false
-
getTotalStat
public int getTotalStat(int itemId) 取得指定裝備道具的總屬性值。先以
MapleItemInformationProvider.getEquipById(int)建立該裝備,再委派MapleItemInformationProvider.getTotalStat(Equip)計算總和。- Parameters:
itemId- 裝備道具 ID- Returns:
- 該裝備的總屬性值
-
getReqLevel
public int getReqLevel(int itemId) 取得指定道具的需求等級。- Parameters:
itemId- 道具 ID- Returns:
- 該道具的需求等級
-
getEffect
取得指定道具 ID 對應的增益效果(MapleStatEffect)。- Parameters:
buff- 提供增益效果的道具 ID- Returns:
- 對應的
MapleStatEffect,無對應效果時可能為null
-
buffGuild
對整個公會成員施放道具效果的增益。以
buff道具 ID 取得MapleStatEffect,若該效果存在且玩家有公會, 則遍歷所有頻道(ChannelServer.getAllInstances())對同公會的每位MapleCharacter套用效果(持續duration毫秒),並向其發送一則 5 號提示訊息。- Parameters:
buff- 提供增益效果的道具 IDduration- 增益持續時間(毫秒)msg- 提示訊息中顯示的增益名稱
-
createAlliance
以玩家及其隊伍第二位成員為雙方會長建立聯盟。取得玩家隊伍中索引 1 的另一名成員作為對方公會代表,委派至
World.Alliance.createAlliance(String, int, int, int, int)。若隊伍成員缺失、與自己同人,或建立過程拋出例外則回傳false。- Parameters:
alliancename- 欲建立的聯盟名稱- Returns:
- 建立成功回傳
true,否則false
-
addCapacityToAlliance
public boolean addCapacityToAlliance()擴充玩家所屬聯盟的成員上限。須玩家同時為公會會長(
guildRank == 1)與聯盟會長(allianceRank == 1)且為聯盟領袖。 成功時委派至World.Alliance.changeAllianceCapacity(int),並扣除MapleGuildAlliance.CHANGE_CAPACITY_COST楓幣。- Returns:
- 擴充成功回傳
true,否則false
-
disbandAlliance
public boolean disbandAlliance()解散玩家所屬的聯盟。須玩家同時為公會會長與聯盟會長且為聯盟領袖,成功時委派至
World.Alliance.disbandAlliance(int)。- Returns:
- 解散成功回傳
true,否則false
-
getLastMsg
public byte getLastMsg()取得前一個送出的對話型別代碼。- Returns:
- 上一則對話的
lastMsg型別代碼
-
setLastMsg
public final void setLastMsg(byte last) 設定前一個對話型別代碼,用於驗證玩家回應。- Parameters:
last- 欲記錄的對話型別代碼
-
maxAllSkills
public final void maxAllSkills()將玩家所有可用技能調至最高等級。遍歷
SkillFactory.getAllSkills(),僅納入GameConstants.isApplicableSkill(int)且 ID 小於90000000的技能(排除幼兒/附加/抗性技能),以最高等級組成SkillEntry後委派至MapleCharacter.changeSkillsLevel(Map)。 -
maxSkillsByJob
public final void maxSkillsByJob()將玩家當前職業的技能調至最高等級。委派至MapleCharacter.maxSkillsByJob()。 -
resetStats
public final void resetStats(int str, int dex, int z, int luk) 將玩家的四項基礎能力值重設為指定數值。委派至MapleCharacter.resetStats(int, int, int, int)。- Parameters:
str- 力量dex- 敏捷z- 智力luk- 幸運
-
levelUp
public final void levelUp()讓玩家提升一級。委派至MapleCharacter.levelUp()。 -
dropItem
public final boolean dropItem(int slot, int invType, int quantity) 將玩家指定欄位的道具丟到地面。委派至
MapleInventoryManipulator.drop(MapleClient, MapleInventoryType, short, short)。若invType無法對應到合法的MapleInventoryType則回傳false。- Parameters:
slot- 道具所在的欄位索引invType- 道具的物品欄型別代碼quantity- 欲丟出的數量- Returns:
- 丟出成功回傳
true,型別非法則false
-
getAllPotentialInfo
-
getAllPotentialInfoSearch
依關鍵字搜尋符合的潛在能力 ID 清單(已排序)。遍歷所有潛在能力選項(
StructItemOption),凡其字串描述包含content即收錄該 ID。- Parameters:
content- 要比對的關鍵字- Returns:
- 描述含關鍵字的潛在能力 ID 清單,由小到大排序
-
getPotentialInfo
組出某潛在能力 ID 的可讀說明字串。以每 10 等為一段(1~10、11~20…)列出各等級的選項描述,回傳含 MapleStory 對話色碼/格式標記的字串供對話框顯示。
- Parameters:
id- 潛在能力 ID- Returns:
- 含格式標記、依等級分段的說明字串
-
getEquipPotentialList
列出指定裝備在其目前潛能位階下「可能出現」的所有潛能 ID(每個 ID 僅列一次)。依裝備需求等級(
reqLevel / 10)取每個潛能 ID 的代表等級項,套用與實際洗潛能 (見InventoryHandler)相同的過濾條件:等級上限、GameConstants.optionTypeFits裝備類型、GameConstants.potentialIDFits位階/排數;opID >= 60000(特殊潛能)一律略過。- Parameters:
equip- 目標裝備- Returns:
- 可能出現的潛能 ID 清單(已去重)
-
getPotentialString
取得指定裝備在某潛能 ID 下、對應其需求等級段的可讀說明字串。說明字串由
MapleItemInformationProvider.runEtc()預先以 ItemOption.img 的info/string模板組好(見StructItemOption.levelText);等級段以(reqLevel - 1) / 10 + 1(最小為 1)計算。- Parameters:
equip- 目標裝備potId- 潛能 ID- Returns:
- 對應等級段的潛能說明;無資料或越界時回傳空字串
-
sendRPS
public final void sendRPS()向玩家開啟剪刀石頭布(RPS)小遊戲視窗。送出CField.getRPSMode(byte, int, int, int)封包。 -
setQuestRecord
設定指定角色某任務的自訂資料欄位。取得(必要時新增)該任務狀態後寫入
customData。ch會被轉型為MapleCharacter。- Parameters:
ch- 目標角色物件(MapleCharacter)questid- 任務 IDdata- 欲寫入的自訂資料字串
-
doWeddingEffect
在地圖上播放結婚儀式的演出流程。先向地圖廣播新娘誓詞,並透過
Timer.CloneTimer排程兩段延遲(10 秒、20 秒)的演出: 10 秒後廣播新郎誓詞;20 秒後設定雙方婚姻相關任務記錄(160001/160002)、 顯示 NPC 對白與擴展地圖特效,並向雙方的公會、家族廣播結婚訊息。若任一方離線則改為將玩家傳送回 地圖680000500。會多次廣播封包並寫入任務記錄。- Parameters:
ch- 結婚對象角色物件(MapleCharacter)
-
putKey
public void putKey(int key, int type, int action) 變更玩家某個按鍵的快捷設定並回送新的按鍵配置。委派至
MapleCharacter.changeKeybinding(int, byte, int),並送出CField.getKeymap(MapleKeyLayout)封包更新客戶端快捷列。- Parameters:
key- 按鍵代碼type- 動作型別action- 綁定的動作 ID
-
logDonator
記錄一筆贊助(捐獻)點數異動。將玩家名稱、CID、帳號、訊息與點數前後值寫入資料庫
donorlog資料表, 並透過FileoutputUtil.log寫入贊助記錄檔。資料庫寫入失敗時僅記錄錯誤,不中斷流程。- Parameters:
log- 異動描述訊息previous_points- 異動前的點數
-
doRing
為玩家與指定對象建立戒指(情侶/友情等配對)。委派至PlayersHandler.DoRing(MapleClient, String, int)。- Parameters:
name- 配對對象的角色名稱itemid- 戒指道具 ID
-
getNaturalStats
取得某裝備的原始(未強化)指定能力值。查詢
MapleItemInformationProvider.getEquipStats(int)中以it為鍵的數值,查無則回傳0。- Parameters:
itemid- 裝備道具 IDit- 能力值的鍵名(如力量、敏捷等)- Returns:
- 對應的原始能力值,查無時為
0
-
isEligibleName
檢查名稱是否可用於建立角色。須通過
MapleCharacterUtil.canCreateChar(String, boolean),且非禁用名稱(GM 不受禁用名稱限制)。- Parameters:
t- 欲檢查的名稱- Returns:
- 名稱合法可用回傳
true,否則false
-
checkDrop
組出指定怪物的掉寶資訊可讀字串。查詢
MapleMonsterInformationProvider.retrieveDrop(int),逐項列出道具、掉落機率 (已乘上頻道掉落倍率)與相關任務;楓幣掉落以錢袋圖示顯示並換算頻道楓幣倍率。 查無資料時回傳「查無掉寶資訊。」。- Parameters:
mobId- 怪物 ID- Returns:
- 含格式標記的掉寶資訊字串,或查無提示
-
getLeftPadded
將字串向左補齊至指定長度。委派至StringUtil.getLeftPaddedStr(String, char, int)。- Parameters:
in- 原始字串padchar- 補齊用的字元length- 補齊後的目標長度- Returns:
- 左側補齊後的字串
-
handleDivorce
public void handleDivorce()處理玩家的離婚流程。若玩家無婚姻則送出提示並返回。依配偶所在頻道分流:配偶離線時直接更新資料庫 (
queststatus/characters的婚姻欄位)並清空雙方任務記錄;配偶在線時 通知對方、清空雙方婚姻 ID 與任務記錄。會送出對話框、寫入資料庫並變動雙方婚姻狀態。 -
getReadableMillis
將兩個時間點之間的毫秒差轉為可讀字串。委派至StringUtil.getReadableMillis(long, long)。- Parameters:
startMillis- 起始時間(毫秒)endMillis- 結束時間(毫秒)- Returns:
- 兩時間點間隔的可讀字串
-
sendUltimateExplorer
public void sendUltimateExplorer()向玩家送出「究極冒險家」相關封包。送出CWvsContext.ultimateExplorer()。 -
changeJobById
public void changeJobById(short job) 將玩家轉職為指定職業 ID。委派至MapleCharacter.changeJob(int)。- Parameters:
job- 目標職業 ID
-
getJobId
public int getJobId()取得玩家目前的職業 ID。- Returns:
- 玩家職業 ID
-
getLevel
public int getLevel()取得玩家目前的等級。- Returns:
- 玩家等級
-
getEquipId
public int getEquipId(byte slot) 取得玩家裝備(EQUIP)物品欄指定欄位的道具 ID。- Parameters:
slot- 欄位索引- Returns:
- 該欄位道具的 ID
-
getUseId
public int getUseId(byte slot) 取得玩家消耗(USE)物品欄指定欄位的道具 ID。- Parameters:
slot- 欄位索引- Returns:
- 該欄位道具的 ID
-
getSetupId
public int getSetupId(byte slot) 取得玩家裝飾(SETUP)物品欄指定欄位的道具 ID。- Parameters:
slot- 欄位索引- Returns:
- 該欄位道具的 ID
-
getCashId
public int getCashId(byte slot) 取得玩家現金(CASH)物品欄指定欄位的道具 ID。- Parameters:
slot- 欄位索引- Returns:
- 該欄位道具的 ID
-
getETCId
public int getETCId(byte slot) 取得玩家其他(ETC)物品欄指定欄位的道具 ID。- Parameters:
slot- 欄位索引- Returns:
- 該欄位道具的 ID
-
sendPendant
public void sendPendant(boolean b) 開啟或關閉玩家的吊墜(pendant)欄位。送出CWvsContext.pendantSlot(boolean)封包。- Parameters:
b-true啟用吊墜欄位,false關閉
-
addPendantSlot
public void addPendantSlot(int days) 給予玩家限時的吊墜(雙項鍊)額外欄位,並立即在客戶端開啟。將
GameConstants.PENDANT_SLOT任務的自訂資料設為「現在 +days天」的到期時間戳, 再依到期時間是否仍在未來(到期 > 現在)送出CWvsContext.pendantSlot(boolean)開啟封包。- Parameters:
days- 吊墜欄位的有效天數
-
getCompensation
-
deleteCompensation
public boolean deleteCompensation(int taken) 更新玩家補償記錄的已領取狀態。將資料庫
compensationlog_confirmed資料表中該角色的taken欄位更新為指定值。 寫入失敗時回傳false。- Parameters:
taken- 欲寫入的已領取旗標值- Returns:
- 更新成功回傳
true,例外時false
-
gainAPS
public void gainAPS(int gain) 增加玩家的 AP 重置點數(APS)。委派至MapleCharacter.gainAPS(int)。- Parameters:
gain- 要增加的 APS 數量
-
foundData
檢查指定類別的資料中是否有符合關鍵字的項目。委派至SearchGenerator.foundData(int, String)。- Parameters:
type- 搜尋的資料類別search- 搜尋關鍵字- Returns:
- 找到符合項目回傳
true,否則false
-
searchData
搜尋指定類別資料並回傳可讀結果字串。委派至SearchGenerator.searchData(int, String)。- Parameters:
type- 搜尋的資料類別search- 搜尋關鍵字- Returns:
- 符合項目的結果字串
-
getSearchData
搜尋指定類別資料並回傳符合的 ID 陣列。委派至
SearchGenerator.getSearchData(int, String)取得結果對應表,再取出其鍵集合為int[]。 查無結果時回傳null。- Parameters:
type- 搜尋的資料類別search- 搜尋關鍵字- Returns:
- 符合項目的 ID 陣列,查無時為
null
-
gachapon
public int gachapon(int type) 執行一次轉蛋並將抽中的道具加入玩家物品欄。由
MapleGachapon.randomItem(int)依轉蛋類型隨機抽取道具,計算數量後透過MapleInventoryManipulator.addbyId_Gachapon(MapleClient, int, short)加入物品欄;抽中物或加入失敗時回傳-1。 若該道具設定了喇叭(smega)類型,會以CWvsContext.getGachaponMega(String, Item, boolean, int)向全頻廣播中獎訊息。 會變動玩家物品欄並可能發送廣播封包。- Parameters:
type- 轉蛋機類型- Returns:
- 抽中道具的 ID,失敗時為
-1
-
hasSubwpn
public boolean hasSubwpn()檢查玩家是否「未」裝備副武器或盾牌。檢視已裝備(EQUIPPED)欄位
-10與-110;任一格有道具時回傳false, 兩格皆空才回傳true(即可裝備副武器)。- Returns:
- 兩個副手欄位皆為空回傳
true,否則false
-
hasSquadByMap
public boolean hasSquadByMap()檢查玩家當前地圖是否已有遠征隊(squad)。- Returns:
- 當前地圖存在遠征隊回傳
true,否則false
-
hasEventInstance
public boolean hasEventInstance()檢查玩家目前是否處於某個事件副本(event instance)中。- Returns:
- 玩家在事件副本中回傳
true,否則false
-
liveReceiveMedal
public boolean liveReceiveMedal()領取「直播(live)」活動勳章,每個帳號限領一次。流程:先以角色名稱查
livemedals表(不存在則不可領),再以帳號 id 查是否已領(已領則拒絕), 通過後將該筆amount更新為0並寫入logs/data/直播.txt領取紀錄。實際發放裝備的 程式碼目前已註解停用。讀寫皆透過共用 ThreadLocal 連線;例外會寫入NPCConversationManager.txt而不外拋。- Returns:
- 成功領取回傳
true;角色未登錄於勳章表單或該帳號已領取則回傳false
-
ReceiveMedal
public boolean ReceiveMedal()領取「RC」活動勳章,每個帳號限領一次。與
liveReceiveMedal()同邏輯,但改查rcmedals表、領取紀錄寫入logs/data/RC.txt。 通過後將該筆amount更新為0;發放裝備的程式碼已註解停用。例外寫入NPCConversationManager.txt而不外拋。- Returns:
- 成功領取回傳
true;角色未登錄於勳章表單或該帳號已領取則回傳false
-
ReceiveMedal1000
public boolean ReceiveMedal1000()領取「RC 1000」活動勳章,每個帳號限領一次。與
ReceiveMedal()同邏輯,但改查rcmedals1000表;領取紀錄同樣寫入logs/data/RC.txt。 通過後將該筆amount更新為0;發放裝備的程式碼已註解停用。例外寫入NPCConversationManager.txt而不外拋。- Returns:
- 成功領取回傳
true;角色未登錄於勳章表單或該帳號已領取則回傳false
-
fbReceiveMedal
public boolean fbReceiveMedal()領取「Facebook 分享」活動勳章,每個帳號限領一次。與
ReceiveMedal()同邏輯,但改查fbmedals表、領取紀錄寫入logs/data/fb分享.txt。 通過後將該筆amount更新為0;發放裝備的程式碼已註解停用。例外寫入NPCConversationManager.txt而不外拋。- Returns:
- 成功領取回傳
true;角色未登錄於勳章表單或該帳號已領取則回傳false
-
hasEMByMap
public boolean hasEMByMap()檢查玩家目前所在地圖是否綁定了活動管理器(event manager / EM)。- Returns:
- 地圖有對應的
EMByMap時回傳true,否則false
-
processCommand
- Parameters:
line- 完整指令字串(含前綴)
-
getSkillMenu
組出指定職業可用技能的選單字串,供技能相關 NPC 以sendSimple顯示。逐一走訪
SkillFactory.getAllSkills(),略過初心者與專業(採集/製作)技能; 純讀取、不變動任何狀態。- Parameters:
job- 職業代碼- Returns:
- 以選單連結組成的字串(初心者職業回傳空字串)
-