Class InventoryHandler
MapleServerHandler 的封包分派表呼叫。
本類別為一組 static 方法的集合,將玩家對道具的操作封包(以 LittleEndianAccessor 讀取)
套用到 MapleCharacter 的 MapleInventory,多數變更實際委由
MapleInventoryManipulator 執行、並以 InventoryPacket 等建構器回送。涵蓋範圍包括:
- 道具移動/整理/合併與背包擴充(
ItemMove/ItemSort/ItemGather/SwitchBag); - 使用消耗品、卷軸強化、附加能力/星岩/放大鏡等裝備加工(
UseItem/UseUpgradeScroll/UseNebulite/UseMagnify); - 召喚包、寶箱、坐騎餵食、現金道具與技能書(
UseSummonBag/UseTreasureChest/UseCashItem/UseSkillBook); - 地面道具的玩家/寵物拾取(
Pickup_Player/Pickup_Pet)與貓頭鷹搜尋/傳送石等工具道具。
關鍵協作者:MapleItemInformationProvider(道具屬性查詢)、RandomRewards/
StructRewardItem(隨機獎勵)、MapleQuest、NPCScriptManager
(腳本化道具)、DatabaseConnection(卷軸記錄等持久化)。
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int貓頭鷹(雇傭商人搜尋)傳送時用來定位目標商店的鍵別:0= 店主角色 ID、1= 商店 ID、2= 地圖物件 ID。 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidaddCoreExpire(int slot, MapleClient c) 使用道具延長核心光環(Core Aura)的有效期限,由UseCashItem(LittleEndianAccessor, MapleClient)等入口呼叫。static final voidaddToScrollLog(int accountID, int charID, int scrollID, int itemID, byte oldSlots, byte newSlots, byte viciousHammer, String result, boolean ws, boolean ls, int vega) 將一次卷軸使用結果寫入scroll_log資料表(稽核用)。static final voidconsumeItem(MapleClient c, MapleStatEffect eff) 套用一個消耗品狀態效果到玩家(或全隊)。static voidCosmicDustShifter(int slot, MapleClient c) 使用道具循環移轉核心光環(Core Aura)的各項能力值加成,由UseCashItem(LittleEndianAccessor, MapleClient)等入口呼叫。static booleanisAllowedPotentialStat(Equip eqq, int opID) 判斷某潛能選項是否允許由印章(UseCarvedSeal(LittleEndianAccessor, MapleClient))附加到裝備上。static final voidItemGather(LittleEndianAccessor slea, MapleClient c) 處理玩家點擊「合併」按鈕、將指定背包內可堆疊道具依道具 ID 排序並合併堆疊的封包。static final voidItemMove(LittleEndianAccessor slea, MapleClient c) 處理玩家在背包中拖曳道具的封包:依來源/目標欄位判斷為卸裝、穿裝、丟棄到地面或單純搬移。static final voidItemSort(LittleEndianAccessor slea, MapleClient c) 處理玩家點擊「整理」按鈕、將指定背包內的道具往前緊靠以消除空格的封包。static final voidMoveBag(LittleEndianAccessor slea, MapleClient c) 處理玩家加入或取出 ETC 子袋(bag)的封包。static final voidOwl(LittleEndianAccessor slea, MapleClient c) 處理玩家開啟貓頭鷹搜尋視窗的封包。static final voidOwlMinerva(LittleEndianAccessor slea, MapleClient c) 處理玩家使用「智慧女神(Minerva)貓頭鷹」(道具2310000)搜尋雇傭商人販售指定道具的封包。static final voidOwlWarp(LittleEndianAccessor slea, MapleClient c) 處理玩家透過貓頭鷹搜尋結果傳送到目標雇傭商人店面的封包。static final voidPamSong(LittleEndianAccessor slea, MapleClient c) 處理玩家使用「帕姆之歌」(Pam's Song,現金道具5640000)為裝備增加一格升級次數的封包。static final voidPickup_Pet(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理由寵物代為拾取地面道具(或楓幣)的封包。static final voidPickup_Player(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家親自拾取地面道具(或楓幣)的封包。static final voidremoveItem_Pet(MapleCharacter chr, MapleMapItem mapitem, int pet) 將地面道具標記為已撿取並自地圖移除(寵物撿取版本,播放對應寵物的拾取動畫)。static voidresetCoreAura(int slot, MapleClient c) 使用道具重置核心光環(Core Aura)的能力值設定,由UseCashItem(LittleEndianAccessor, MapleClient)等入口呼叫。static final voidSwitchBag(LittleEndianAccessor slea, MapleClient c) 處理玩家在 ETC 背包的可擴充子袋(bag)之間搬移道具的封包。static final voidTeleRock(LittleEndianAccessor slea, MapleClient c) 處理玩家使用「傳送石」(道具前綴232)的封包入口,傳送成功時扣除道具。static voidUnlockItem(LittleEndianAccessor slea, MapleClient c) 處理玩家使用「封印之鎖解除鑰匙」(道具2051000)解除道具鎖定或不可交易狀態的封包。static final void處理玩家使用「外星插槽器」為裝備開出一個星岩插槽的封包。static voidUseCarvedSeal(LittleEndianAccessor slea, MapleClient c) 處理玩家使用「印章」(道具 ID 前綴20495)為裝備加上第三排潛能的封包。static final voidUseCashItem(LittleEndianAccessor slea, MapleClient c) 處理玩家使用 CASH 背包內現金道具的封包(一個涵蓋大量現金道具的大型分派)。static final voidUseCatchItem(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用「捕捉道具」(怪物卡/捕獸網等)對指定怪物的封包。static final voidUseCosmetic(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用整形/變裝類道具(道具 ID 前綴254)的封包。static final voidUseExpPotion(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用「經驗藥水」(在限定等級區間內分次給予經驗)的封包。static final void處理玩家使用「內在能力重置(循環器)」道具,重新隨機產生角色的內在能力技能的封包。static final booleanuseItem(MapleClient c, int id) 判斷地面道具是否屬於「撿起即生效」的消耗品,若是則套用其效果。static final voidUseItem(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用 USE 背包內一般消耗品(藥水/食物等)的封包,套用其狀態效果。static final booleanUseMagicHourglass(LittleEndianAccessor slea, MapleClient c, int itemId) 使用「魔法沙漏」延長已穿戴裝備的到期時間,由UseCashItem(LittleEndianAccessor, MapleClient)等入口呼叫。static final voidUseMagnify(LittleEndianAccessor slea, MapleClient c) 處理玩家使用「放大鏡」(或洞察技能)鑑定裝備潛在能力的封包。static final voidUseMountFood(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用「坐騎飼料」(道具前綴226)餵食坐騎、降低疲勞並累積經驗的封包。static final voidUseNebulite(LittleEndianAccessor slea, MapleClient c) 處理玩家把「星岩」(Nebulite)鑲入裝備插槽的封包。static final void處理玩家「星岩融合」的封包:消耗兩顆星岩與楓幣或高級融合劑,產出一顆新星岩。static final voidUseReturnScroll(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用「返回卷軸」(回城/回特定地圖)的封包。static final booleanUseRewardItem(byte slot, int itemId, MapleClient c, MapleCharacter chr) 使用「獎勵箱」類道具(依機率表抽出並發給一件獎勵),由UseItem(LittleEndianAccessor, MapleClient, MapleCharacter)等入口呼叫。static final voidUseScriptedNPCItem(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用各種「腳本化/特殊用途道具」的封包(一個大型道具 ID switch 分派)。static final booleanUseSkillBook(byte slot, int itemId, MapleClient c, MapleCharacter chr) 使用「技能書」習得或提升精通技能等級,由UseItem(LittleEndianAccessor, MapleClient, MapleCharacter)等入口呼叫。static final voidUseSummonBag(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用「召喚包」在當前地圖召喚怪物的封包。static final booleanUseTeleRock(LittleEndianAccessor slea, MapleClient c, int itemId) 執行傳送石的實際傳送邏輯:依封包模式傳送到指定地圖或指定玩家所在地。static final voidUseTreasureChest(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家開啟「寶箱」(金箱4280000/ 銀箱4280001)的封包。static final booleanUseUpgradeScroll(short slot, short dst, short ws, MapleClient c, MapleCharacter chr, boolean legendarySpirit) 套用升級卷軸到裝備(便捷重載,維加斯次數視為0)。static final booleanUseUpgradeScroll(short slot, short dst, short ws, MapleClient c, MapleCharacter chr, int vegas, boolean legendarySpirit) 套用升級卷軸到裝備,處理白卷消耗、成功/失敗/詛咒結果與相關封包廣播。static void處理玩家使用「黃金鐵鎚」為裝備增加可升級次數的封包。
-
Field Details
-
OWL_ID
public static final int OWL_ID貓頭鷹(雇傭商人搜尋)傳送時用來定位目標商店的鍵別:0= 店主角色 ID、1= 商店 ID、2= 地圖物件 ID。請勿更動——
OwlWarp(LittleEndianAccessor, MapleClient)依此值 在地圖上尋找對應的HiredMerchant。- See Also:
-
-
Constructor Details
-
InventoryHandler
public InventoryHandler()
-
-
Method Details
-
ItemMove
處理玩家在背包中拖曳道具的封包:依來源/目標欄位判斷為卸裝、穿裝、丟棄到地面或單純搬移。讀取道具類型與來源/目標欄位、數量後委派給
MapleInventoryManipulator: 目標為正且來源為負時unequip、目標為負時equip、目標為 0 時drop(丟到地圖),其餘為背包內move。若玩家背包遭鎖定(hasBlockedInventory)則直接忽略 以防作弊。- Parameters:
slea- 入站封包讀取器(tick、道具類型、來源/目標欄位、數量)c- 發出此動作的玩家連線
-
SwitchBag
處理玩家在 ETC 背包的可擴充子袋(bag)之間搬移道具的封包。讀取來源/目標欄位後,僅在兩者皆
>= 100(屬於子袋的虛擬欄位範圍)時, 委派MapleInventoryManipulator.move(MapleClient, MapleInventoryType, short, short)於MapleInventoryType.ETC內搬移; 背包鎖定時忽略。- Parameters:
slea- 入站封包讀取器(tick、來源欄位、目標欄位)c- 發出此動作的玩家連線
-
MoveBag
處理玩家加入或取出 ETC 子袋(bag)的封包。依
srcFirst旗標決定對 ETC 背包addBagItem(放入子袋)或removeBagItem(取出子袋),再以MapleInventoryManipulator.move(MapleClient, MapleInventoryType, short, short)完成欄位搬移。封包長度不足或讀到的類型 非 ETC(4)時,回送CWvsContext.enableActions()後中止;背包鎖定時忽略。- Parameters:
slea- 入站封包讀取器(tick、srcFirst 旗標、目標欄位、類型、來源欄位)c- 發出此動作的玩家連線
-
ItemSort
處理玩家點擊「整理」按鈕、將指定背包內的道具往前緊靠以消除空格的封包。反覆找出最前面的空欄並把其後第一個有物品的欄位搬過去(透過
MapleInventoryManipulator.move(MapleClient, MapleInventoryType, short, short)),直到無可整理;完成後回送CWvsContext.finishedSort(int)與CWvsContext.enableActions()。 連線或角色為null、背包類型未定義或背包鎖定時中止。- Parameters:
slea- 入站封包讀取器(tick、背包類型)c- 發出此動作的玩家連線
-
ItemGather
處理玩家點擊「合併」按鈕、將指定背包內可堆疊道具依道具 ID 排序並合併堆疊的封包。先複製欄位 97 以前的道具、移除原物(排除
GameConstants.exItemGather的例外道具), 再依sortItems(List)排序後以MapleInventoryManipulator.addFromDrop(MapleClient, Item, boolean)重新放回, 完成後回送CWvsContext.finishedGather(int)與CWvsContext.enableActions()。 模式5且有已召喚寵物時會先收回所有寵物並提示玩家重新召喚。背包鎖定時中止。- Parameters:
slea- 入站封包讀取器(tick、背包類型/模式)c- 發出此動作的玩家連線
-
UseRewardItem
使用「獎勵箱」類道具(依機率表抽出並發給一件獎勵),由UseItem(LittleEndianAccessor, MapleClient, MapleCharacter)等入口呼叫。校驗道具存在且四大背包皆有空位後,向
MapleItemInformationProvider.getRewardItem(int)取得加權機率表,依Randomizer抽中後加入裝備或道具(裝備可帶期限與 GM 紀錄),扣除一個來源道具, 並廣播EffectPacket.showRewardItemAnimation(int, String)開箱動畫。任何前置校驗失敗會以dropMessage提示且回傳false。- Parameters:
slot- 來源道具所在欄位itemId- 預期的獎勵箱道具 ID(用以比對防作弊)c- 玩家連線chr- 使用道具的角色- Returns:
- 成功抽出並發放獎勵時
true,否則false
-
UseItem
處理玩家使用 USE 背包內一般消耗品(藥水/食物等)的封包,套用其狀態效果。透過
MapleItemInformationProvider.getItemEffect(int)取得效果並applyTo(chr);成功時扣除一個並依地圖的消耗冷卻設定設定下次可用時間 (setNextConsume)。角色死亡、位於特定地圖、處於MapleDisease.POTION封印、背包鎖定、PVP 中、仍在消耗冷卻內,或地圖FieldLimitType.PotionUse禁用藥水時, 一律回送CWvsContext.enableActions()並中止。- Parameters:
slea- 入站封包讀取器(tick、欄位、道具 ID)c- 玩家連線chr- 使用道具的角色
-
UseCosmetic
處理玩家使用整形/變裝類道具(道具 ID 前綴254)的封包。除一般校驗外,另檢查道具屬於整形類(
itemId / 10000 == 254)且性別欄位 與角色getGender()相符,套用applyTo(chr)成功後扣除一個。校驗失敗時 回送CWvsContext.enableActions()。角色死亡、背包鎖定或 PVP 中時中止。- Parameters:
slea- 入站封包讀取器(欄位、道具 ID)c- 玩家連線chr- 使用道具的角色
-
UseReturnScroll
public static final void UseReturnScroll(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用「返回卷軸」(回城/回特定地圖)的封包。透過
MapleItemInformationProvider.getItemEffect(int)取得效果並applyReturnScroll(chr)傳送角色,成功時扣除一個。角色死亡、位於特定地圖、背包鎖定、 處於禁止傳送的地圖、PVP 中,或地圖FieldLimitType.PotionUse受限時,回送CWvsContext.enableActions()並中止。- Parameters:
slea- 入站封包讀取器(tick、欄位、道具 ID)c- 玩家連線chr- 使用道具的角色
-
UseAlienSocket
處理玩家使用「外星插槽器」為裝備開出一個星岩插槽的封包。校驗來源道具與目標裝備後,僅在該裝備尚未有插槽(
getSocketState() == 0)時 設定第一個插槽(setSocket1(0))、扣除道具並forceReAddItem更新;已有插槽則 提示需透過 NPC 進行。校驗失敗回送InventoryPacket.getInventoryFull();結束時回送MTSCSPacket.useAlienSocket(boolean)。- Parameters:
slea- 入站封包讀取器(tick、來源道具欄位、道具 ID、目標裝備欄位)c- 發出此動作的玩家連線
-
UseNebulite
處理玩家把「星岩」(Nebulite)鑲入裝備插槽的封包。校驗 SETUP 背包內的星岩與目標裝備後,若插槽為空且星岩選項型別符合裝備 (
GameConstants.optionTypeFits),將StructItemOption.opID寫入第一個插槽、扣除星岩 並forceReAddItem更新;最後向地圖廣播CField.showNebuliteEffect(int, boolean)並回送CWvsContext.enableActions()。校驗失敗回送InventoryPacket.getInventoryFull()。- Parameters:
slea- 入站封包讀取器(tick、星岩欄位、道具 ID、目標裝備欄位)c- 發出此動作的玩家連線
-
UseNebuliteFusion
處理玩家「星岩融合」的封包:消耗兩顆星岩與楓幣或高級融合劑,產出一顆新星岩。依兩顆星岩的等級(
GameConstants.getNebuliteGrade)核驗所需費用(楓幣或道具4420000數量、二擇一)與背包空位,計算平均等級後以Randomizer決定成品等級 (有 4% 機率上下浮動一階、不可升至最高 S 階),自對應等級的星岩選項中隨機抽出新道具,扣除材料/費用、 加入新星岩,並回送CField.useNebuliteFusion(int, int, boolean)(成功)。任一校驗失敗時提示並回送失敗封包。- Parameters:
slea- 入站封包讀取器(tick、兩顆星岩 ID 與欄位、楓幣、高級融合劑數量)c- 發出此動作的玩家連線
-
UseMagnify
處理玩家使用「放大鏡」(或洞察技能)鑑定裝備潛在能力的封包。支援放大鏡道具(
2460000~2460003,依需求等級限制可鑑定的裝備)與洞察 (MapleTrait.MapleTraitType.sense達 30 級的來源欄127)。僅在裝備為未鑑定狀態(getState() == 1) 時,依MapleItemInformationProvider.getAllPotentialInfo()隨機抽出符合型別與位階的潛能寫入各排 (若有鎖定潛能lockid相符則保留鎖定排),廣播CField.showMagnifyingEffect(int, short)、增加洞察特性經驗、 扣除放大鏡或重加裝備,並依ServerConstants.log_cube記錄鑑定結果到檔案。最後重置鎖定 ID 並回送CWvsContext.enableActions();校驗失敗回送InventoryPacket.getInventoryFull()。- Parameters:
slea- 入站封包讀取器(tick、放大鏡來源欄、目標裝備欄)c- 發出此動作的玩家連線
-
addToScrollLog
public static final void addToScrollLog(int accountID, int charID, int scrollID, int itemID, byte oldSlots, byte newSlots, byte viciousHammer, String result, boolean ws, boolean ls, int vega) 將一次卷軸使用結果寫入scroll_log資料表(稽核用)。副作用:對共用的
DatabaseConnection連線執行一筆INSERT;失敗時以FileoutputUtil.outputFileError(String, Throwable)記錄而不拋出。- Parameters:
accountID- 帳號 IDcharID- 角色 IDscrollID- 使用的卷軸道具 IDitemID- 被強化的裝備道具 IDoldSlots- 強化前可用升級次數newSlots- 強化後可用升級次數viciousHammer- 已使用的黃金鐵鎚次數result- 結果字串(成功/失敗/詛咒等)ws- 是否使用白卷(white scroll)ls- 是否為傳說之靈(legendary spirit)施放vega- 維加斯卷軸(保證成功)相關旗標/次數
-
UseUpgradeScroll
public static final boolean UseUpgradeScroll(short slot, short dst, short ws, MapleClient c, MapleCharacter chr, boolean legendarySpirit) 套用升級卷軸到裝備(便捷重載,維加斯次數視為0)。直接轉呼
UseUpgradeScroll(short, short, short, MapleClient, MapleCharacter, int, boolean)。- Parameters:
slot- 卷軸所在欄位dst- 目標裝備欄位(負值代表已穿戴)ws- 白卷/旗標位元(bit2表示使用白卷)c- 玩家連線chr- 使用卷軸的角色legendarySpirit- 是否為傳說之靈施放(對已穿戴裝備施卷)- Returns:
- 卷軸動作成功處理時
true
-
UseUpgradeScroll
public static final boolean UseUpgradeScroll(short slot, short dst, short ws, MapleClient c, MapleCharacter chr, int vegas, boolean legendarySpirit) 套用升級卷軸到裝備,處理白卷消耗、成功/失敗/詛咒結果與相關封包廣播。核心強化流程:判定是否使用白卷(
wsbit2)、定位目標裝備(已穿戴 / 背包 / 傳說之靈), 透過MapleItemInformationProvider計算結果並更新裝備,扣除卷軸(與白卷),廣播強化動畫, 並視結果(Equip.ScrollResult.SUCCESS/Equip.ScrollResult.CURSE)呼叫equipChanged()。vegas > 0表示維加斯卷軸(保證成功、不耗白卷、不重複動畫)。- Parameters:
slot- 卷軸所在欄位dst- 目標裝備欄位(負值代表已穿戴)ws- 白卷/旗標位元(bit2表示使用白卷)c- 玩家連線chr- 使用卷軸的角色vegas- 維加斯卷軸次數,0表示一般卷軸legendarySpirit- 是否為傳說之靈施放(對已穿戴裝備施卷)- Returns:
- 卷軸動作成功處理時
true,校驗失敗時false
-
UseSkillBook
使用「技能書」習得或提升精通技能等級,由UseItem(LittleEndianAccessor, MapleClient, MapleCharacter)等入口呼叫。自
MapleItemInformationProvider.getEquipStats(int)取得技能書資料,逐一檢查書中技能是否 可由角色職業習得、是否達到前置等級且尚未滿精通;符合者依成功率(Randomizer)決定成敗,成功時以changeSingleSkillLevel提升精通上限,無論成敗皆扣除一本書並向地圖廣播CWvsContext.useSkillBook(MapleCharacter, int, int, boolean, boolean)。背包鎖定或資料異常時不處理。- Parameters:
slot- 技能書所在欄位itemId- 預期的技能書道具 ID(用以比對防作弊)c- 玩家連線chr- 使用技能書的角色- Returns:
- 角色具備可習得之技能(已嘗試使用)時
true,否則false
-
UseExpPotion
處理玩家使用「經驗藥水」(在限定等級區間內分次給予經驗)的封包。依
MapleItemInformationProvider.getExpPotionLev(int)取得等級區間,並以getOneInfo/updateOneInfo(GameConstants.EXP_POTION)保存此道具的累進進度 (上次等級+剩餘經驗,以#分隔)。每次呼叫補滿當前等級所需經驗、扣減剩餘額度並gainExp,回送CWvsContext.updateExpPotion(int, int, int, boolean, int, int, int);當達區間上限或經驗用罄時,扣除一個道具並 清除進度。等級超出區間或經驗異常時提示並中止。- Parameters:
slea- 入站封包讀取器(tick、欄位、道具 ID)c- 玩家連線chr- 使用道具的角色
-
UseCatchItem
處理玩家使用「捕捉道具」(怪物卡/捕獸網等)對指定怪物的封包。包含阿里安競賽(道具
2270002對怪物9300157,血量低於四成時 50% 機率捕獲並加分) 與一般卡片捕捉(道具前綴227、卡片對應怪物且血量過半/符合 HP 門檻)。捕獲成功時廣播MobPacket.catchMonster(int, int, byte)、killMonster擊殺、扣除道具,並視getCreateId給予產物; 失敗時回送捕捉失敗封包。最後一律回送CWvsContext.enableActions()。- Parameters:
slea- 入站封包讀取器(tick、欄位、道具 ID、目標怪物物件 ID)c- 玩家連線chr- 使用道具的角色
-
UseMountFood
處理玩家使用「坐騎飼料」(道具前綴226)餵食坐騎、降低疲勞並累積經驗的封包。將坐騎疲勞調降 30;若原疲勞為正則增加經驗,達門檻時提升坐騎等級(上限 30)。隨後向地圖廣播
CWvsContext.updateMount(MapleCharacter, boolean)並扣除一個飼料。最後一律回送CWvsContext.enableActions()。 無坐騎或背包鎖定時不處理。- Parameters:
slea- 入站封包讀取器(tick、欄位、道具 ID)c- 玩家連線chr- 使用道具的角色
-
UseScriptedNPCItem
public static final void UseScriptedNPCItem(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家使用各種「腳本化/特殊用途道具」的封包(一個大型道具 ID switch 分派)。涵蓋多種特殊道具的客製效果,例如空白羅盤(
2430007,集滿四向羅盤字母換取獎勵)、 各式造型/坐騎/寵物/傳送與活動道具等;視道具不同會扣除材料、加入道具、變更角色狀態或開啟對應流程, 並送出相應更新封包。校驗道具存在、背包未鎖定且非 PVP 後才處理。- Parameters:
slea- 入站封包讀取器(tick、欄位、道具 ID 及該道具所需的額外欄位)c- 玩家連線chr- 使用道具的角色
-
useInnerCirculator
處理玩家使用「內在能力重置(循環器)」道具,重新隨機產生角色的內在能力技能的封包。對未鎖定的內在能力槽,透過
InnerAbillity.renewSkill(int, int, boolean)重抽(道具2701000的第一槽 有額外處理);已鎖定者保留。重抽後清空並重建內在技能清單、逐槽回送CField.updateInnerPotential(byte, int, int, int), 扣除一個道具並recalcLocalStats重算屬性。最後一律回送CWvsContext.enableActions()。- Parameters:
slea- 入站封包讀取器(道具 ID、欄位)c- 發出此動作的玩家連線
-
UseSummonBag
處理玩家使用「召喚包」在當前地圖召喚怪物的封包。自
MapleItemInformationProvider.getEquipStats(int)讀取召喚包的怪物清單,逐項依機率 (Randomizer)以spawnMonster_sSack在角色位置生成怪物;至少召喚出一隻時扣除一個道具。 角色死亡、背包鎖定、PVP 中或位於自由市場(910000000~910000022)時不處理。最後一律回送CWvsContext.enableActions()。- Parameters:
slea- 入站封包讀取器(tick、欄位、道具 ID)c- 玩家連線chr- 使用道具的角色
-
UseTreasureChest
public static final void UseTreasureChest(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家開啟「寶箱」(金箱4280000/ 銀箱4280001)的封包。依箱別自
RandomRewards抽出獎勵並決定數量(特定消耗品有固定堆疊數)。需 CASH 背包持有 對應鑰匙(金5490000/ 銀5490001):透過addbyId_Gachapon加入獎勵、扣除一個寶箱與 一把鑰匙、回送InfoPacket.getShowItemGain(int, short);若為稀有道具則以World.Broadcast.broadcastSmega(byte[])全服廣播。背包空間或鑰匙不足時提示並回送CWvsContext.enableActions()。- Parameters:
slea- 入站封包讀取器(欄位、道具 ID)c- 玩家連線chr- 開啟寶箱的角色
-
UseCashItem
處理玩家使用 CASH 背包內現金道具的封包(一個涵蓋大量現金道具的大型分派)。校驗 CASH 背包內道具存在後,依道具 ID 執行各自效果——例如改名/改性別/喇叭廣播、寵物相關道具、 AP/SP 重置、商店與倉庫擴充、各式特效與祝福道具等;視道具不同會扣除材料、變更角色或帳號狀態 (部分含 DB 寫入)、開啟對應視窗或全服廣播,並送出相應更新封包。角色或地圖為
null、PVP 中、 或背包鎖定時回送CWvsContext.enableActions()並中止。- Parameters:
slea- 入站封包讀取器(tick、欄位、道具 ID 及各道具所需的額外欄位)c- 發出此動作的玩家連線
-
Pickup_Player
public static final void Pickup_Player(LittleEndianAccessor slea, MapleClient c, MapleCharacter chr) 處理玩家親自拾取地面道具(或楓幣)的封包。於道具物件鎖(
MapleMapItem.getLock())保護下檢查是否已被撿走、任務道具的任務狀態、擁有者/ 隊伍掉落歸屬,並以兩道距離檢查防外掛(CheatingOffense.ITEMVAC_CLIENT/CheatingOffense.ITEMVAC_SERVER)。楓幣依隊伍規則分配給隊友與自身(含incMesoProp加成); 一般道具則優先當作消耗品即時觸發(useItem(MapleClient, int)),否則檢查空間後addFromDrop加入背包;成功皆 移除地圖物件。背包鎖定、伺服器關閉中、背包已滿或 PVP 冰凍持有者等情況分別忽略或回送相應封包。並依
ServerConstants.log_pickup記錄稀有/卷軸道具的撿取到檔案。- Parameters:
slea- 入站封包讀取器(tick、回報座標、地圖物件 ID)c- 玩家連線chr- 撿取道具的角色
-
Pickup_Pet
處理由寵物代為拾取地面道具(或楓幣)的封包。邏輯與
Pickup_Player(LittleEndianAccessor, MapleClient, MapleCharacter)類似——檢查是否已被撿走、擁有者/隊伍歸屬,並以CheatingOffense.PET_ITEMVAC_CLIENT/CheatingOffense.PET_ITEMVAC_SERVER進行寵物座標距離 防外掛檢查(傳送/使用傳送點期間略過伺服端檢查)。楓幣依隊伍規則分配;一般道具優先當消耗品觸發,否則檢查空間後addFromDrop加入背包,移除時透過removeItem_Pet(MapleCharacter, MapleMapItem, int)帶入寵物索引以播放對應撿取動畫。 背包鎖定或 PVP 中時忽略,並依ServerConstants.log_pickup記錄稀有/卷軸道具。- Parameters:
slea- 入站封包讀取器(寵物索引、回報座標、地圖物件 ID)c- 玩家連線chr- 寵物的主人角色
-
useItem
判斷地面道具是否屬於「撿起即生效」的消耗品,若是則套用其效果。僅對
GameConstants.isUse(id)的道具處理:取得MapleStatEffect,並為搶旗(CTF,前綴291)做特例判斷(在自隊旗區或非 PVP 時不套用)。當效果的getConsume() > 0時,呼叫consumeItem(MapleClient, MapleStatEffect)套用主效果與額外效果、回送InfoPacket.getShowItemGain(int, short)並回傳true(呼叫端據此把地面道具移除)。- Parameters:
c- 玩家連線id- 地面道具的道具 ID- Returns:
- 該道具為即時生效消耗品且已套用時
true,否則false
-
consumeItem
套用一個消耗品狀態效果到玩家(或全隊)。當
eff.getConsume() == 2時為隊伍範圍效果:對同地圖內存活的隊友逐一applyTo;無隊伍時 僅套用於自己。其餘情況在玩家存活時套用於自己。eff為null時直接返回。- Parameters:
c- 玩家連線eff- 要套用的狀態效果,可為null
-
removeItem_Pet
將地面道具標記為已撿取並自地圖移除(寵物撿取版本,播放對應寵物的拾取動畫)。設定
setPickedUp(true)、向地圖廣播CField.removeItemFromMap(int, int, int)(類型5、帶寵物索引), 移除地圖物件;若該道具為隨機掉落(isRandDrop)則觸發spawnRandDrop補刷。- Parameters:
chr- 撿取道具的角色mapitem- 被撿取的地面道具物件pet- 執行撿取的寵物索引
-
OwlMinerva
處理玩家使用「智慧女神(Minerva)貓頭鷹」(道具2310000)搜尋雇傭商人販售指定道具的封包。以
ChannelServer.searchMerchant(int)搜尋販售目標道具的商店,找到時回送CWvsContext.getOwlSearched(int, List)並扣除一個道具;找不到則提示。最後一律回送CWvsContext.enableActions()。- Parameters:
slea- 入站封包讀取器(欄位、道具 ID、欲搜尋的道具 ID)c- 發出此動作的玩家連線
-
Owl
處理玩家開啟貓頭鷹搜尋視窗的封包。需持有貓頭鷹道具(
5230000或2310000)且位於自由市場 (910000000~910000022)才回送CWvsContext.getOwlOpen();否則提示僅能於自由市場使用 並回送CWvsContext.enableActions()。- Parameters:
slea- 入站封包讀取器(本處理未額外讀取欄位)c- 發出此動作的玩家連線
-
OwlWarp
處理玩家透過貓頭鷹搜尋結果傳送到目標雇傭商人店面的封包。校驗存活、無交易中、位於自由市場且背包未鎖定後,傳送至目標市場地圖,並依
OWL_ID的鍵別在該地圖 尋找對應的HiredMerchant。若玩家為店主則重新接管店面(setOpen(false)、清空訪客);否則在 店面開放、有空位且未被列入黑名單時加入為訪客;皆回送PlayerShopPacket.getHiredMerch(MapleCharacter, HiredMerchant, boolean)。各種失敗情況 以CWvsContext.getOwlMessage(int)或dropMessage提示。- Parameters:
slea- 入站封包讀取器(目標商店識別 ID、目標地圖 ID)c- 發出此動作的玩家連線
-
PamSong
處理玩家使用「帕姆之歌」(Pam's Song,現金道具5640000)為裝備增加一格升級次數的封包。需先前已選定目標裝備欄位(
getScrolledPosition() != 0)且持有帕姆之歌:將目標裝備setUpgradeSlots(+1)、forceReAddItem_Flag更新、扣除一個道具,並向地圖廣播CField.pamsSongEffect(int)。無論成敗皆重置已選欄位。- Parameters:
slea- 入站封包讀取器(確認位元組)c- 發出此動作的玩家連線
-
TeleRock
處理玩家使用「傳送石」(道具前綴232)的封包入口,傳送成功時扣除道具。先校驗道具存在且背包未鎖定,再委派
UseTeleRock(LittleEndianAccessor, MapleClient, int)執行實際傳送;傳回true時扣除一個傳送石。 最後一律回送CWvsContext.enableActions()。- Parameters:
slea- 入站封包讀取器(欄位、道具 ID,後續由UseTeleRock(LittleEndianAccessor, MapleClient, int)續讀)c- 發出此動作的玩家連線
-
UseTeleRock
執行傳送石的實際傳送邏輯:依封包模式傳送到指定地圖或指定玩家所在地。模式
0(傳送到地圖):核驗目標地圖在該傳送石可用的地圖清單內(一般/VIP/高級,依itemId); 模式非0(傳送到玩家):依名稱找到玩家後核驗其非分流員、雙方皆不在活動實例中,且 VIP 石或同大陸。兩種模式均 受FieldLimitType.VipRock與封鎖地圖限制保護,通過後changeMap傳送並回傳true;失敗時以dropMessage提示。不在此處扣除道具(由呼叫端依回傳值處理)。- Parameters:
slea- 入站封包讀取器(傳送模式、目標地圖 ID 或目標玩家名稱)c- 玩家連線itemId- 使用的傳送石道具 ID(決定可傳送的地圖範圍)- Returns:
- 成功傳送時
true,否則false
-
UseMagicHourglass
使用「魔法沙漏」延長已穿戴裝備的到期時間,由UseCashItem(LittleEndianAccessor, MapleClient)等入口呼叫。延長天數由
magicHourglassDays(itemId)決定。僅對非飾品、有到期時間、非現金且延長後不超過約 100 天 上限的裝備生效;並排除名稱含GameConstants.RESERVED保留字的玩家或道具。生效時更新到期時間並forceReAddItem重加裝備。注意:
days維持為int以保留原本days*24*60*60*1000的整數溢位語意。- Parameters:
slea- 入站封包讀取器(目標裝備欄位)c- 玩家連線itemId- 使用的魔法沙漏道具 ID(決定延長天數)- Returns:
- 成功延長到期時間時
true,否則false
-
UseCarvedSeal
處理玩家使用「印章」(道具 ID 前綴20495)為裝備加上第三排潛能的封包。依
MapleItemInformationProvider.getScrollSuccess(int)判定成敗(Randomizer)。成功時要求裝備已鑑定 (getState() >= 17)且尚無第三排潛能,從潛能表中隨機抽出符合型別/位階且通過isAllowedPotentialStat(Equip, int)的選項寫入setPotential3,廣播CField.showPotentialReset(boolean, int, boolean, int)、回送InventoryPacket.scrolledItem(Item, Item, boolean, boolean)並forceReAddItem_NoUpdate更新;依ServerConstants.log_seal記錄結果到檔案。失敗時廣播失敗特效。無論成敗皆扣除一個印章並回送CWvsContext.enableActions()。- Parameters:
slea- 入站封包讀取器(tick、印章欄位、目標裝備欄位)c- 發出此動作的玩家連線
-
isAllowedPotentialStat
判斷某潛能選項是否允許由印章(UseCarvedSeal(LittleEndianAccessor, MapleClient))附加到裝備上。目前的規則為僅允許
opID < 40000(排除高位特殊潛能)。- Parameters:
eqq- 目標裝備(目前未參與判定)opID- 候選潛能選項 ID- Returns:
- 允許附加時
true,否則false
-
useViciousHammer
處理玩家使用「黃金鐵鎚」為裝備增加可升級次數的封包。校驗目標裝備可錘(
GameConstants.canHammer)、原本有升級格且已錘次數< 2時,遞增setViciousHammer與setUpgradeSlots、forceReAddItem更新,並回送MTSCSPacket.ViciousHammer(boolean, int);成功時扣除一個鐵鎚。不可錘時以dropMessage提示。 完成後回送CWvsContext.enableActions()。- Parameters:
slea- 入站封包讀取器(背包類型、欄位等占位欄位與目標裝備欄位)c- 發出此動作的玩家連線
-
UnlockItem
處理玩家使用「封印之鎖解除鑰匙」(道具2051000)解除道具鎖定或不可交易狀態的封包。依封包指定的背包類型與欄位取得道具,若帶有
ItemFlag.LOCK或ItemFlag.UNTRADEABLE旗標則清除之 並扣除一把鑰匙;隨後forceReAddItem_Flag更新、reloadC重整並提示已解鎖。背包類型無效或道具不存在時 回送CWvsContext.enableActions()並中止。- Parameters:
slea- 入站封包讀取器(道具數量、背包類型、欄位)c- 發出此動作的玩家連線
-
resetCoreAura
使用道具重置核心光環(Core Aura)的能力值設定,由UseCashItem(LittleEndianAccessor, MapleClient)等入口呼叫。依角色等級
updateCoreAura、recalcLocalStats重算屬性、扣除一個道具並回送CWvsContext.updateCoreAura(MapleCharacter)。若先前處於延長(delay)狀態,會解除並提示時間已重置。 來源道具不存在或背包鎖定時回送InventoryPacket.getInventoryFull()並中止。- Parameters:
slot- 來源道具所在的 USE 背包欄位c- 玩家連線
-
addCoreExpire
使用道具延長核心光環(Core Aura)的有效期限,由UseCashItem(LittleEndianAccessor, MapleClient)等入口呼叫。設定延長旗標並把到期時間延後 7 天、扣除一個道具並回送
CWvsContext.updateCoreAura(MapleCharacter)。 來源道具不存在或背包鎖定時回送InventoryPacket.getInventoryFull()並中止。- Parameters:
slot- 來源道具所在的 USE 背包欄位c- 玩家連線
-
CosmicDustShifter
使用道具循環移轉核心光環(Core Aura)的各項能力值加成,由UseCashItem(LittleEndianAccessor, MapleClient)等入口呼叫。將核心光環的 STR/DEX/INT/LUK/攻擊/魔攻六項加成依固定順序順時針輪換後
recalcLocalStats重算屬性、 扣除一個道具並回送CWvsContext.updateCoreAura(MapleCharacter)。來源道具不存在或背包鎖定時回送InventoryPacket.getInventoryFull()並中止。- Parameters:
slot- 來源道具所在的 USE 背包欄位c- 玩家連線
-