Class MapleItemInformationProvider
instance)。
自 Character.wz/Etc.wz/Item.wz(透過 MapleDataProviderFactory
取得 MapleDataProvider)與啟動時匯入的 wz_itemdata SQL 快取讀取道具屬性,
並以一系列記憶體 Map 快取(dataCache/itemEffects/potentialCache/
socketCache/setItems/familiars/androids 等)提供查詢。
關鍵職責與協作者:
itemExists(int)/getName(int)/getMeso(int)/isCash(int)/isPickupRestricted(int)等屬性查詢;loadItems於啟動時由ItemLoader載入道具表。getEquipById(int)產生Equip實例、getEquipStats(int)取裝備能力值, 供MapleInventoryManipulator與MapleCharacter建立/驗證道具。getItemEffect(int)回傳道具的MapleStatEffect(消耗品效果),快取於itemEffects。
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class星期數值與英文星期代碼(SUN~SAT)對應的工具類別。 -
Field Summary
FieldsModifier and TypeFieldDescription殘像(after image)攻擊範圍快取,以殘像名稱對應一組(動作, 左上, 右下)範圍。機器人(android)零件快取,以道具 ID 對應其(頭部清單, 身體清單)。protected final MapleDataProviderCharacter.wz資料供應者,用於讀取裝備外觀與角色相關資料。protected final Map<Integer, ItemInformation> 道具基本資訊(ItemInformation)快取,以道具 ID 為鍵;由 SQL 的wz_itemdata載入。protected final MapleDataProviderEtc.wz資料供應者,用於讀取套裝、潛能等雜項道具資料。經驗卡時段快取,以道具 ID 對應其可用時段設定(星期 → 時段字串)。經驗藥水等級區間快取,以道具 ID 對應其可用等級陣列。protected final Map<Integer, StructFamiliar> 怪物夥伴(familiar)快取,以夥伴 ID(familiarID)為鍵。protected final Map<Integer, StructFamiliar> 怪物夥伴快取,以卡片道具 ID(cardID)為鍵。protected final Map<Integer, StructFamiliar> 怪物夥伴快取,以怪物 ID(mobID)為鍵。protected final MapleDataProviderItem.wz資料供應者,用於讀取消耗品、安裝、其它類道具效果資料。protected final Map<Integer, MapleStatEffect> 道具效果快取,以道具 ID 對應其MapleStatEffect(消耗品/使用效果)。protected final Map<Integer, MapleStatEffect> 道具額外效果快取(EX 版本),以道具 ID 對應其MapleStatEffect。怪物圖鑑卡片快取,以怪物 ID 對應其卡片道具 ID(反查亦由此提供)。怪物圖鑑套組快取,以套組 ID 對應(獎勵, 怪物 ID 清單, ...)。寵物旗標快取,以道具 ID 對應其寵物旗標(flag)。protected final Map<Integer, List<StructItemOption>> 潛能選項快取,以潛能 ID 對應其各等級的StructItemOption清單。潛能生命(pot life)快取,以道具 ID 對應其(生命 ID, 等級)。protected final Map<Integer, StructSetItem> 套裝(set item)資訊快取,以套裝 ID 對應其StructSetItem。protected final Map<Integer, Map<Integer, StructItemOption>> 星岩(socket/nebulite)選項快取,外層以星岩等級為鍵、內層以星岩 ID 對應StructItemOption。 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal booleancanEquip(Map<String, Integer> stats, int itemid, int level, int job, int fame, int str, int dex, int luk, int int_, int supremacy) 判斷角色是否符合配戴指定裝備的需求。final booleancanScroll(int scrollid, int itemid) 判斷卷軸是否可用於指定裝備,依兩者 id 中的裝備部位代碼比對。final booleancantSell(int itemId) 判斷道具是否禁止販售給商店(flag的0x10位元)。voidfinal Equip融合兩件相同 id 的裝備,產生一件能力值介於兩者之間的全新裝備。final StringgetAfterImage(int itemId) 取得武器道具的殘像(攻擊範圍)名稱。getAfterImage(String after) 依殘像(攻擊範圍)名稱取得其攻擊判定範圍清單。final Collection<ItemInformation> 取得已載入的全部道具資訊。取得全部怪物圖鑑套組的對應表。final Map<Integer, List<StructItemOption>> 取得全部潛能選項快取。final Map<Integer, StructItemOption> getAllSocketInfo(int grade) 取得指定等級的全部星岩選項。getAndroidInfo(int i) 取得指定機器人(android)道具的零件資訊。final intgetBagType(int id) 取得道具袋(消耗品分頁)的類型,取flag旗標的低 4 位元。final intgetCardMobId(int id) 取得怪物卡片對應的怪物書 id(monsterBook欄位)。final intgetCreateId(int id) 取得道具的製作(合成)來源 id(create欄位)。final StringgetDesc(int itemId) 取得道具說明文字。final EnumMap<EquipAdditions, Pair<Integer, Integer>> getEquipAdditions(int itemId) 取得指定裝備的附加效果(EquipAdditions)對應表。final ItemgetEquipById(int equipId) 依裝備 id 建立一個全新的Equip實例(無戒指唯一 id)。final ItemgetEquipById(int equipId, int ringId) 依裝備 id 與戒指唯一 id 建立一個全新的Equip實例。getEquipIncrements(int itemId) 取得指定裝備的能力值增量(依等級)對應表。getEquipSkills(int itemId) 取得指定裝備附帶的技能 ID 清單。getEquipStats(int itemId) 取得指定裝備的能力值對應表(reqLevel/reqSTR/tuc等鍵)。final intgetExpCardMaxLevel(int itemId) 取得經驗卡的適用最高等級(WZinfo/maxLevel,預設 249)。final doublegetExpCardRate(int itemId) 取得經驗卡的經驗倍率(WZinfo/rate除以 100,預設 1.0)。int[]getExpPotionLev(int itemId) 取得經驗藥水的適用等級範圍[最低等級, 最高等級],結果快取於expPotionLev。final StructFamiliargetFamiliar(int f) 依夥伴 ID 取得怪物夥伴資料。final StructFamiliargetFamiliarByItem(int f) 依卡片道具 ID 取得怪物夥伴資料。final StructFamiliargetFamiliarByMob(int f) 依怪物 ID 取得怪物夥伴資料。final Map<Integer, StructFamiliar> 取得以夥伴 ID 為鍵的全部怪物夥伴對應表。static final MapleItemInformationProvider取得本類別的單例實例。protected final MapleDatagetItemData(int itemId) 直接自Item.wz目錄樹搜尋並取得指定道具的原始MapleData節點。final MapleStatEffectgetItemEffect(int itemId) 取得消耗品的道具效果MapleStatEffect,結果快取於itemEffects。final MapleStatEffectgetItemEffectEX(int itemId) getItemIdByMob(int mobId) 依怪物 ID 取得其對應的怪物圖鑑卡片道具 ID。intgetItemIncMHPr(int itemId) 取得裝備的最大 HP 百分比加成(裝備能力值MHPr)。intgetItemIncMMPr(int itemId) 取得裝備的最大 MP 百分比加成(裝備能力值MMPr)。final ItemInformationgetItemInformation(int itemId) 取得道具的快取資料物件ItemInformation(多數查詢方法的共同入口)。final shortgetItemMakeLevel(int itemId) 取得製作該道具所需的技能等級(itemMakeLevel欄位)。final intgetMeso(int itemId) 取得道具使用後給予的楓幣數(meso欄位,如錢袋類道具)。取得怪物 ID 對卡片道具 ID 的完整對應表。getMonsterBookInfo(int i) 取得指定怪物圖鑑套組的資訊。final Collection<Integer> 取得所有怪物圖鑑卡片道具 ID 的集合。final StringgetMsg(int itemId) 取得道具使用時的提示訊息(msg欄位)。final StringgetName(int itemId) 取得道具名稱。final intgetOption(int itemId, int line) 取得指定道具指定行(1~3)的潛能選項值。shortgetPetFlagInfo(int itemId) 取得寵物的行為旗標位元組合(撿取、遠距、全撿、掃地、消耗 HP/MP、自動施放等),結果快取於petFlagInfo。getPot(int f) 取得指定道具的潛能生命資料。final List<StructItemOption> getPotentialInfo(int potId) 取得指定潛能 ID 的各等級選項清單。final doublegetPrice(int itemId) 取得指定道具的單價。protected final shortgetRandStat(short defaultValue, int maxRange) 在基準值上下浮動產生隨機能力值,浮動幅度不超過基準值 10%(向上取整)且不超過maxRange。protected final shortgetRandStatAbove(short defaultValue, int maxRange) 僅向上浮動產生隨機能力值(結果不低於基準值),增量不超過基準值 10%(向上取整)且不超過maxRange。protected final shortgetRandStatFusion(short defaultValue, int value1, int value2) 計算融合(fuse(Equip, Equip))後某一能力值的隨機結果,落於基準值與兩來源平均值之間。final intgetReqLevel(int itemId) 取得配戴指定裝備所需的等級。final Pair<Integer, List<StructRewardItem>> getRewardItem(int itemid) 取得隨機獎勵箱道具的開箱資訊:總機率與可能獎勵清單。getScrollReqs(int itemId) 取得使用指定卷軸(捲軸)的前置需求道具清單。intgetScrollSuccess(int itemId) 取得卷軸(204類)的基礎成功率(裝備能力值success)。getSetId(int itemId) 取得指定道具所屬的卡片套組 ID。final StructSetItemgetSetItem(int setItemId) 取得指定套裝 ID 的套裝資訊。final IntegergetSetItemID(int itemId) 取得指定裝備所屬的套裝 ID(setItemID)。final shortgetSlotMax(int itemId) returns the maximum of items in one slotfinal intgetSlots(int itemId) 取得指定裝備的可升級孔數(tuc,total upgrade count)。final StructItemOptiongetSocketInfo(int potId) 取得指定星岩(nebulite)ID 的選項資料。final intgetStateChangeItem(int itemId) 取得使用後觸發狀態變化所連動的道具 id(stateChange欄位)。final intgetTotalStat(Equip equip) 計算裝備所有能力值的總和(STR/DEX/INT/LUK、攻擊、命中迴避、跳躍、製作、移速、HP/MP、防禦等)。final intgetWatkForProjectile(int itemId) 取得投擲道具(飛鏢/子彈等)的物攻加成(裝備能力值incPAD)。final intgetWholePrice(int itemId) 取得指定道具的整批(whole)價格。voidinitItemAddData(ResultSet sqlAddData) 由wz_itemadddata的一列填入對應道具的附加屬性(equipAdditions)。voidinitItemEquipData(ResultSet sqlEquipData) 由wz_itemequipdata的一列填入對應裝備的能力值(equipStats)或分等加成(equipIncs)。voidinitItemInformation(ResultSet sqlItemData) 由wz_itemdata的一列建立一個ItemInformation並放入dataCache。voidinitItemRewardData(ResultSet sqlRewardData) 由wz_itemrewarddata的一列填入對應道具的隨機獎勵清單(rewardItems)。final booleanisAccountShared(int itemId) 判斷道具是否可在同帳號角色間共享(flag的0x100位元)。final booleanisCash(int itemId) 判斷道具是否為商城(現金)道具,依物品分頁為MapleInventoryType.CASH或裝備能力值含cash標記。final booleanisDropRestricted(int itemId) 判斷道具是否禁止掉落,綜合flag旗標、GameConstants.isDropRestricted(int)與一串例外白名單 id。booleanisExpOrDropCardTime(int itemId) 判斷經驗/掉落加成卡此刻是否處於其生效時段(依星期與時段設定)。final booleanisKarmaEnabled(int itemId) 判斷道具是否可使用剪刀(白銀剪刀,karmaEnabled == 1)解除交易限制。final booleanisLogoutExpire(int itemId) 判斷道具是否於登出時失效/消失(flag的0x20位元)。final booleanisMobHP(int itemId) 判斷道具是否依怪物 HP 連動(flag的0x1000位元)。final booleanisOnlyTradeBlock(int itemId) 判斷道具是否僅有交易封鎖(WZinfo/tradeBlock為 1)。final booleanisPickupBlocked(int itemId) 判斷道具是否被封鎖拾取(flag的0x40位元)。final booleanisPickupRestricted(int itemId) 判斷道具是否禁止拾取,綜合flag旗標、GameConstants.isPickupRestricted(int)與少數例外 id。final booleanisPKarmaEnabled(int itemId) 判斷道具是否可使用白金剪刀(karmaEnabled == 2)解除交易限制。final booleanisQuestItem(int itemId) 判斷道具是否為任務道具(flag的0x200位元,且非301類)。final booleanisShareTagEnabled(int itemId) 判斷道具是否支援共享標籤(flag的0x800位元)。final booleanitemExists(int itemId) 判斷道具 id 是否確實存在(具有合法物品分頁且已載入快取)。levelUpEquip(Equip equip, Map<String, Integer> sta) 依給定的能力值區間表,對裝備的副本逐項隨機加成後回傳。final voidloadEtc(boolean reload) 載入套裝資料(Etc.wz的SetItemInfo.img)至setItems快取。voidloadItems(boolean reload) 自 SQL 載入全部道具資料至dataCache,是道具快取的主要載入入口。questItemInfo(int itemId) 取得道具關聯的任務資訊:所屬任務 id 與相關道具清單。protected intrand(int min, int max) 取得[min, max]區間內的非負隨機整數。final EquiprandomizeStats(Equip equip) 將裝備的各項能力值就地隨機化(上下浮動),用於產生帶隨機屬性的掉落或獎勵裝備。final EquiprandomizeStats_Above(Equip equip) 將裝備的各項能力值就地向上隨機化(結果不低於原值),用於只增不減的隨機屬性產生。replaceItemInfo(int itemId) 取得道具到期或轉換後的替換資訊:替換道具 id 與替換訊息。voidrunEtc()自Etc.wz/Item.wz載入套裝、潛能與星岩資料並填入對應快取。voidrunItems()自 SQL 道具快取資料表載入全部道具與裝備資訊並填入dataCache。final ItemscrollEquipWithId(Item equip, Item scrollId, boolean ws, MapleCharacter chr, int vegas) 對裝備套用卷軸效果,依卷軸類型計算成功/詛咒並改寫該裝備的能力值與旗標。
-
Field Details
-
chrData
Character.wz資料供應者,用於讀取裝備外觀與角色相關資料。 -
etcData
Etc.wz資料供應者,用於讀取套裝、潛能等雜項道具資料。 -
itemData
Item.wz資料供應者,用於讀取消耗品、安裝、其它類道具效果資料。 -
dataCache
道具基本資訊(ItemInformation)快取,以道具 ID 為鍵;由 SQL 的wz_itemdata載入。 -
petFlagInfo
-
afterImage
-
potentialCache
潛能選項快取,以潛能 ID 對應其各等級的StructItemOption清單。 -
socketCache
星岩(socket/nebulite)選項快取,外層以星岩等級為鍵、內層以星岩 ID 對應StructItemOption。 -
itemEffects
道具效果快取,以道具 ID 對應其MapleStatEffect(消耗品/使用效果)。 -
itemEffectsEx
道具額外效果快取(EX 版本),以道具 ID 對應其MapleStatEffect。 -
mobIds
-
potLife
-
familiars
怪物夥伴(familiar)快取,以夥伴 ID(familiarID)為鍵。 -
familiars_Item
怪物夥伴快取,以卡片道具 ID(cardID)為鍵。 -
familiars_Mob
怪物夥伴快取,以怪物 ID(mobID)為鍵。 -
androids
-
monsterBookSets
-
setItems
套裝(set item)資訊快取,以套裝 ID 對應其StructSetItem。 -
expCardTimes
-
expPotionLev
-
-
Constructor Details
-
MapleItemInformationProvider
public MapleItemInformationProvider()
-
-
Method Details
-
runEtc
public void runEtc()自Etc.wz/Item.wz載入套裝、潛能與星岩資料並填入對應快取。讀取
SetItemInfo.img建立setItems、ItemOption.img建立potentialCache(依潛能類型分流)與socketCache(依星岩等級)。若三者任一已非空 則直接返回(具冪等性,重複呼叫不會重載)。屬啟動期載入動作。 -
runItems
public void runItems()自 SQL 道具快取資料表載入全部道具與裝備資訊並填入dataCache。依序查詢
wz_itemdata(基本資訊)、wz_itemequipdata(裝備數值)、wz_itemadddata(附加效果)、wz_itemrewarddata(獎勵內容),再對所有裝備類道具 呼叫finalizeEquipData完成最終化。讀取失敗僅記錄錯誤不中斷;完成後記錄已讀取道具數 (日誌行已讀取N 個道具.)。屬啟動期載入動作;不拋出例外。 -
getPotentialInfo
取得指定潛能 ID 的各等級選項清單。- Parameters:
potId- 潛能 ID- Returns:
- 潛能選項清單;未知潛能回傳
null
-
getAllPotentialInfo
取得全部潛能選項快取。- Returns:
- 以潛能 ID 為鍵的潛能選項對應表(內部快取,請勿修改)
-
getSocketInfo
取得指定星岩(nebulite)ID 的選項資料。先以
GameConstants.getNebuliteGrade(int)推得其等級再查表。- Parameters:
potId- 星岩 ID- Returns:
- 星岩選項;等級無法判定(
-1)時回傳null
-
getAllSocketInfo
取得指定等級的全部星岩選項。- Parameters:
grade- 星岩等級- Returns:
- 該等級的星岩選項對應表(星岩 ID → 選項);未知等級可能回傳
null
-
getMonsterBookList
取得所有怪物圖鑑卡片道具 ID 的集合。- Returns:
- 卡片道具 ID 集合(為
mobIds的值視圖)
-
getMonsterBook
-
getPot
-
getFamiliar
依夥伴 ID 取得怪物夥伴資料。- Parameters:
f- 夥伴 ID(familiarID)- Returns:
- 對應的
StructFamiliar;不存在時回傳null
-
getFamiliars
取得以夥伴 ID 為鍵的全部怪物夥伴對應表。- Returns:
- 怪物夥伴對應表(內部快取,請勿修改)
-
getFamiliarByItem
依卡片道具 ID 取得怪物夥伴資料。- Parameters:
f- 卡片道具 ID(cardID)- Returns:
- 對應的
StructFamiliar;不存在時回傳null
-
getFamiliarByMob
依怪物 ID 取得怪物夥伴資料。- Parameters:
f- 怪物 ID(mobID)- Returns:
- 對應的
StructFamiliar;不存在時回傳null
-
getInstance
取得本類別的單例實例。- Returns:
- 全域唯一的
MapleItemInformationProvider實例
-
getAllItems
取得已載入的全部道具資訊。- Returns:
dataCache的值集合(內部快取的視圖,請勿修改)
-
getAndroidInfo
-
getMonsterBookInfo
-
getAllMonsterBookInfo
-
getItemData
-
getItemIdByMob
依怪物 ID 取得其對應的怪物圖鑑卡片道具 ID。- Parameters:
mobId- 怪物 ID- Returns:
- 卡片道具 ID;無對應卡片時回傳
null
-
getSetId
取得指定道具所屬的卡片套組 ID。- Parameters:
itemId- 道具 ID- Returns:
- 卡片套組 ID;未知道具時回傳
null
-
getSlotMax
public final short getSlotMax(int itemId) returns the maximum of items in one slot -
getWholePrice
public final int getWholePrice(int itemId) 取得指定道具的整批(whole)價格。- Parameters:
itemId- 道具 ID- Returns:
- 整批價格;未知道具時回傳
0
-
getOption
public final int getOption(int itemId, int line) 取得指定道具指定行(1~3)的潛能選項值。- Parameters:
itemId- 道具 IDline- 潛能行號(1、2 或 3)- Returns:
- 該行的潛能選項值;未知道具或無效行號時回傳
0
-
getPrice
public final double getPrice(int itemId) 取得指定道具的單價。- Parameters:
itemId- 道具 ID- Returns:
- 道具單價;未知道具時回傳
-1.0
-
rand
protected int rand(int min, int max) 取得[min, max]區間內的非負隨機整數。以
Randomizer產生,結果非確定性。- Parameters:
min- 區間下界max- 區間上界- Returns:
- 區間內隨機整數的絕對值
-
levelUpEquip
依給定的能力值區間表,對裝備的副本逐項隨機加成後回傳。不修改傳入的
equip,而是先複製再於副本上累加。每個XxxMin/XxxMax鍵對對應一項能力值,加成量由rand(int, int)於該區間隨機決定, 故結果非確定性。若資料表存在缺漏導致NullPointerException,會記錄錯誤並回傳當前已加成的副本。- Parameters:
equip- 來源裝備(不會被修改)sta- 能力值區間表(STRMin/STRMax/PADMin/PADMax等)- Returns:
- 加成後的新裝備副本
-
getEquipAdditions
取得指定裝備的附加效果(EquipAdditions)對應表。- Parameters:
itemId- 裝備道具 ID- Returns:
- 附加效果對應表;未知道具時回傳
null
-
getEquipIncrements
-
getEquipSkills
-
getEquipStats
-
canEquip
public final boolean canEquip(Map<String, Integer> stats, int itemid, int level, int job, int fame, int str, int dex, int luk, int int_, int supremacy) 判斷角色是否符合配戴指定裝備的需求。檢查等級(含
supremacy加值)、四維(STR/DEX/LUK/INT)與名聲(reqPOP)需求; 各需求若不存在於stats則視為0。- Parameters:
stats- 裝備需求對應表itemid- 裝備道具 IDlevel- 角色等級job- 角色職業fame- 角色名聲str- 角色力量dex- 角色敏捷luk- 角色幸運int_- 角色智力supremacy- 等級加值(額外可滿足的等級需求)- Returns:
- 符合所有需求時為
true,否則為false
-
getReqLevel
public final int getReqLevel(int itemId) 取得配戴指定裝備所需的等級。- Parameters:
itemId- 裝備道具 ID- Returns:
- 需求等級;未知道具或無
reqLevel時回傳0
-
getSlots
public final int getSlots(int itemId) 取得指定裝備的可升級孔數(tuc,total upgrade count)。- Parameters:
itemId- 裝備道具 ID- Returns:
- 升級孔數;未知道具或無
tuc時回傳0
-
getSetItemID
取得指定裝備所屬的套裝 ID(setItemID)。- Parameters:
itemId- 裝備道具 ID- Returns:
- 套裝 ID;未知道具或無
setItemID時回傳0
-
getSetItem
取得指定套裝 ID 的套裝資訊。- Parameters:
setItemId- 套裝 ID- Returns:
- 套裝資訊
StructSetItem;不存在時回傳null
-
getScrollReqs
-
scrollEquipWithId
public final Item scrollEquipWithId(Item equip, Item scrollId, boolean ws, MapleCharacter chr, int vegas) 對裝備套用卷軸效果,依卷軸類型計算成功/詛咒並改寫該裝備的能力值與旗標。本方法以
Randomizer進行隨機判定,故結果非確定性;會直接「就地」修改傳入的equip(增益能力值、加減升級次數、設定ItemFlag等), 並依持有者特性(MapleTrait.MapleTraitType.craft)與幸運卷軸旗標調整成功率。 涵蓋一般卷軸、混沌卷軸、強化(裝備)卷軸、潛能卷軸、白卷/特殊卷軸與多種特殊功能卷軸 (防滑、防寒、保護升級次數、幸運鑰匙、盾守護等)。失敗時若卷軸具詛咒可能銷毀裝備(回傳
null);對非裝備物品(type != 1)則原樣回傳。 失敗且未受保護時可能扣減升級次數,並對持有者送出聊天訊息。- Parameters:
equip- 受卷裝備(會被就地修改)scrollId- 卷軸物品(決定效果與類型)ws- 是否為白卷效果(影響失敗時是否扣減升級次數)chr- 進行卷軸的角色(用於特性加成與訊息提示)vegas- 拉斯維加斯活動卷軸 id(5610000/5610001提供額外成功率),無則傳 0- Returns:
- 套用後的裝備;若卷軸銷毀裝備則回傳
null
-
getEquipById
依裝備 id 建立一個全新的Equip實例(無戒指唯一 id)。委派至
getEquipById(int, int),ringId傳入-1。- Parameters:
equipId- 裝備物品 id- Returns:
- 對應的裝備實例;未知 id 仍回傳一個能力值為 0 的空裝備(不為
null)
-
getEquipById
-
getRandStatFusion
protected final short getRandStatFusion(short defaultValue, int value1, int value2) 計算融合(fuse(Equip, Equip))後某一能力值的隨機結果,落於基準值與兩來源平均值之間。以
Randomizer隨機,故結果非確定性;defaultValue為 0 時直接回傳 0。- Parameters:
defaultValue- 該能力值的基準值(範本裝備值)value1- 來源裝備一的該能力值value2- 來源裝備二的該能力值- Returns:
- 融合後的能力值
-
getRandStat
protected final short getRandStat(short defaultValue, int maxRange) 在基準值上下浮動產生隨機能力值,浮動幅度不超過基準值 10%(向上取整)且不超過maxRange。以
Randomizer隨機,故結果非確定性;defaultValue為 0 時直接回傳 0。- Parameters:
defaultValue- 該能力值的基準值maxRange- 浮動幅度上限- Returns:
- 浮動後的能力值(可能高於或低於基準值)
-
getRandStatAbove
protected final short getRandStatAbove(short defaultValue, int maxRange) 僅向上浮動產生隨機能力值(結果不低於基準值),增量不超過基準值 10%(向上取整)且不超過maxRange。以
Randomizer隨機,故結果非確定性;defaultValue小於等於 0 時直接回傳 0。- Parameters:
defaultValue- 該能力值的基準值maxRange- 增量上限- Returns:
- 浮動後的能力值(大於等於基準值)
-
randomizeStats
將裝備的各項能力值就地隨機化(上下浮動),用於產生帶隨機屬性的掉落或獎勵裝備。對每項能力值套用
getRandStat(short, int)(主屬性/攻擊/命中等上限 5,防禦與 HP/MP 上限 10)。 結果非確定性(Randomizer),且直接修改傳入的equip。- Parameters:
equip- 待隨機化的裝備(會被就地修改)- Returns:
- 同一個傳入的
equip實例
-
randomizeStats_Above
將裝備的各項能力值就地向上隨機化(結果不低於原值),用於只增不減的隨機屬性產生。對每項能力值套用
getRandStatAbove(short, int)(主屬性/攻擊/命中等上限 5,防禦與 HP/MP 上限 10)。 結果非確定性(Randomizer),且直接修改傳入的equip。- Parameters:
equip- 待隨機化的裝備(會被就地修改)- Returns:
- 同一個傳入的
equip實例
-
fuse
融合兩件相同 id 的裝備,產生一件能力值介於兩者之間的全新裝備。以
getEquipById(int)取範本後,逐項套用getRandStatFusion(short, int, int)。 結果非確定性(Randomizer)。若兩裝備 id 不同則不融合,直接回傳equip1。- Parameters:
equip1- 來源裝備一(id 不同時原樣回傳)equip2- 來源裝備二- Returns:
- 融合後的全新裝備;id 不符時為
equip1
-
getTotalStat
計算裝備所有能力值的總和(STR/DEX/INT/LUK、攻擊、命中迴避、跳躍、製作、移速、HP/MP、防禦等)。- Parameters:
equip- 目標裝備- Returns:
- 各項能力值的算術總和
-
getItemEffect
取得消耗品的道具效果MapleStatEffect,結果快取於itemEffects。首次查詢時自 WZ 的
spec節點以MapleStatEffect.loadItemEffectFromData(MapleData, int)解析並快取。- Parameters:
itemId- 道具 id- Returns:
- 對應的道具效果;若該道具無
spec資料則回傳null
-
getItemEffectEX
取得道具的延伸效果MapleStatEffect(specEx節點),結果快取於itemEffectsEx。首次查詢時自 WZ 的
specEx節點以MapleStatEffect.loadItemEffectFromData(MapleData, int)解析並快取。- Parameters:
itemId- 道具 id- Returns:
- 對應的延伸效果;若該道具無
specEx資料則回傳null
-
getCreateId
public final int getCreateId(int id) 取得道具的製作(合成)來源 id(create欄位)。- Parameters:
id- 道具 id- Returns:
- 製作來源 id;未知道具回傳 0
-
getCardMobId
public final int getCardMobId(int id) 取得怪物卡片對應的怪物書 id(monsterBook欄位)。- Parameters:
id- 卡片道具 id- Returns:
- 對應的怪物書 id;未知道具回傳 0
-
getBagType
public final int getBagType(int id) 取得道具袋(消耗品分頁)的類型,取flag旗標的低 4 位元。- Parameters:
id- 道具 id- Returns:
- 道具袋類型(
flag & 0xF);未知道具回傳 0
-
getWatkForProjectile
public final int getWatkForProjectile(int itemId) 取得投擲道具(飛鏢/子彈等)的物攻加成(裝備能力值incPAD)。- Parameters:
itemId- 投擲道具 id- Returns:
- 物攻加成;無對應資料時回傳 0
-
canScroll
public final boolean canScroll(int scrollid, int itemid) 判斷卷軸是否可用於指定裝備,依兩者 id 中的裝備部位代碼比對。- Parameters:
scrollid- 卷軸物品 iditemid- 目標裝備 id- Returns:
- 兩者部位代碼相符時為
true
-
getName
取得道具名稱。- Parameters:
itemId- 道具 id- Returns:
- 道具名稱;未知道具回傳
null
-
getDesc
取得道具說明文字。- Parameters:
itemId- 道具 id- Returns:
- 道具說明;未知道具回傳
null
-
getMsg
取得道具使用時的提示訊息(msg欄位)。- Parameters:
itemId- 道具 id- Returns:
- 道具訊息;未知道具回傳
null
-
getItemMakeLevel
public final short getItemMakeLevel(int itemId) 取得製作該道具所需的技能等級(itemMakeLevel欄位)。- Parameters:
itemId- 道具 id- Returns:
- 製作所需等級;未知道具回傳 0
-
isDropRestricted
public final boolean isDropRestricted(int itemId) 判斷道具是否禁止掉落,綜合flag旗標、GameConstants.isDropRestricted(int)與一串例外白名單 id。- Parameters:
itemId- 道具 id- Returns:
- 禁止掉落時為
true;未知道具回傳false
-
isPickupRestricted
public final boolean isPickupRestricted(int itemId) 判斷道具是否禁止拾取,綜合flag旗標、GameConstants.isPickupRestricted(int)與少數例外 id。- Parameters:
itemId- 道具 id- Returns:
- 禁止拾取時為
true;未知道具回傳false
-
getStateChangeItem
public final int getStateChangeItem(int itemId) 取得使用後觸發狀態變化所連動的道具 id(stateChange欄位)。- Parameters:
itemId- 道具 id- Returns:
- 連動道具 id;未知道具回傳 0
-
getMeso
public final int getMeso(int itemId) 取得道具使用後給予的楓幣數(meso欄位,如錢袋類道具)。- Parameters:
itemId- 道具 id- Returns:
- 楓幣數;未知道具回傳 0
-
isKarmaEnabled
public final boolean isKarmaEnabled(int itemId) 判斷道具是否可使用剪刀(白銀剪刀,karmaEnabled == 1)解除交易限制。- Parameters:
itemId- 道具 id- Returns:
- 可用剪刀時為
true;未知道具回傳false
-
isPKarmaEnabled
public final boolean isPKarmaEnabled(int itemId) 判斷道具是否可使用白金剪刀(karmaEnabled == 2)解除交易限制。- Parameters:
itemId- 道具 id- Returns:
- 可用白金剪刀時為
true;未知道具回傳false
-
isPickupBlocked
public final boolean isPickupBlocked(int itemId) 判斷道具是否被封鎖拾取(flag的0x40位元)。- Parameters:
itemId- 道具 id- Returns:
- 封鎖拾取時為
true;未知道具回傳false
-
isLogoutExpire
public final boolean isLogoutExpire(int itemId) 判斷道具是否於登出時失效/消失(flag的0x20位元)。- Parameters:
itemId- 道具 id- Returns:
- 登出即失效時為
true;未知道具回傳false
-
cantSell
public final boolean cantSell(int itemId) 判斷道具是否禁止販售給商店(flag的0x10位元)。- Parameters:
itemId- 道具 id- Returns:
- 不可販售時為
true、可販售為false;未知道具回傳false
-
getRewardItem
取得隨機獎勵箱道具的開箱資訊:總機率與可能獎勵清單。- Parameters:
itemid- 獎勵箱道具 id- Returns:
Pair(總機率, 獎勵StructRewardItem清單);未知道具回傳null
-
isMobHP
public final boolean isMobHP(int itemId) 判斷道具是否依怪物 HP 連動(flag的0x1000位元)。- Parameters:
itemId- 道具 id- Returns:
- 與怪物 HP 連動時為
true;未知道具回傳false
-
isQuestItem
public final boolean isQuestItem(int itemId) 判斷道具是否為任務道具(flag的0x200位元,且非301類)。- Parameters:
itemId- 道具 id- Returns:
- 為任務道具時為
true;未知道具回傳false
-
questItemInfo
-
replaceItemInfo
-
getAfterImage
-
getAfterImage
取得武器道具的殘像(攻擊範圍)名稱。- Parameters:
itemId- 武器道具 id- Returns:
- 殘像名稱;未知道具回傳
null
-
itemExists
public final boolean itemExists(int itemId) 判斷道具 id 是否確實存在(具有合法物品分頁且已載入快取)。先以
GameConstants.getInventoryType(int)排除分頁為MapleInventoryType.UNDEFINED者, 再確認其存在於 SQL 載入的dataCache。此方法是道具載入的閘門:載入時未通過者會被略過, 故wz_itemdata為空會導致所有道具都「不存在」(角色裸體)。- Parameters:
itemId- 道具 id- Returns:
- 道具存在時為
true
-
isCash
public final boolean isCash(int itemId) 判斷道具是否為商城(現金)道具,依物品分頁為MapleInventoryType.CASH或裝備能力值含cash標記。- Parameters:
itemId- 道具 id- Returns:
- 為商城道具時為
true
-
isOnlyTradeBlock
public final boolean isOnlyTradeBlock(int itemId) 判斷道具是否僅有交易封鎖(WZinfo/tradeBlock為 1)。- Parameters:
itemId- 道具 id- Returns:
- 設有交易封鎖時為
true
-
getItemInformation
取得道具的快取資料物件ItemInformation(多數查詢方法的共同入口)。直接讀取 SQL 載入的
dataCache;itemId小於等於 0 或未載入時回傳null。- Parameters:
itemId- 道具 id- Returns:
- 道具快取資料;不存在時回傳
null
-
initItemRewardData
由wz_itemrewarddata的一列填入對應道具的隨機獎勵清單(rewardItems)。啟動時由
loadItems(boolean)逐列呼叫;對目標ItemInformation累加一筆StructRewardItem。 若該道具不在dataCache中則記錄並略過。非執行緒安全,僅供載入階段使用。- Parameters:
sqlRewardData- 指向wz_itemrewarddata當前列的結果集- Throws:
SQLException- 讀取結果集欄位失敗時
-
initItemAddData
由wz_itemadddata的一列填入對應道具的附加屬性(equipAdditions)。啟動時由
loadItems(boolean)逐列呼叫;以EquipAdditions.fromString(String)解析 key 後存入。 若該道具不在dataCache中則記錄並略過。非執行緒安全,僅供載入階段使用。- Parameters:
sqlAddData- 指向wz_itemadddata當前列的結果集- Throws:
SQLException- 讀取結果集欄位失敗時
-
initItemEquipData
由wz_itemequipdata的一列填入對應裝備的能力值(equipStats)或分等加成(equipIncs)。啟動時由
loadItems(boolean)逐列呼叫;itemLevel == -1者存入基本能力值,否則依等級存入加成表。 若該道具不在dataCache中則記錄並略過。非執行緒安全,僅供載入階段使用。- Parameters:
sqlEquipData- 指向wz_itemequipdata當前列的結果集- Throws:
SQLException- 讀取結果集欄位失敗時
-
finalizeEquipData
為單一裝備資料完成最終初始化:依equipStats建立其範本Equip(eq)。啟動時由
loadItems(boolean)對所有裝備類道具呼叫。透過GameConstants將原始能力值換算為實際值 (STR/DEX/INT/LUK、攻擊、HP/MP、防禦、升級次數、製作、耐久、魅力經驗、PVP 傷害等); 若裝備無能力資料仍會建立空equipStats。對現金裝備在魅力經驗未設時依部位給定預設值。 非執行緒安全,僅供載入階段使用。- Parameters:
item- 待完成初始化的道具資料(會被就地修改)
-
initItemInformation
由wz_itemdata的一列建立一個ItemInformation並放入dataCache。啟動時由
loadItems(boolean)逐列呼叫,是道具快取的主要填充來源。解析名稱/說明/價格/旗標/ 楓幣/怪物書/製作/替換/卷軸需求等欄位,並逗號展開scrollReqs/consumeItem/incSkill; 怪物卡片(238類)另建立怪物書與卡片組對應。非執行緒安全,僅供載入階段使用。- Parameters:
sqlItemData- 指向wz_itemdata當前列的結果集- Throws:
SQLException- 讀取結果集欄位失敗時
-
getPetFlagInfo
public short getPetFlagInfo(int itemId) 取得寵物的行為旗標位元組合(撿取、遠距、全撿、掃地、消耗 HP/MP、自動施放等),結果快取於petFlagInfo。首次查詢時自 WZ 的
info節點逐項解析並組成位元旗標後快取;非寵物道具(非500類)或無資料時回傳 0。- Parameters:
itemId- 寵物道具 id- Returns:
- 寵物行為旗標位元組合
-
getItemIncMHPr
public int getItemIncMHPr(int itemId) 取得裝備的最大 HP 百分比加成(裝備能力值MHPr)。- Parameters:
itemId- 裝備道具 id- Returns:
- 最大 HP 百分比加成;無對應資料時回傳 0
-
getItemIncMMPr
public int getItemIncMMPr(int itemId) 取得裝備的最大 MP 百分比加成(裝備能力值MMPr)。- Parameters:
itemId- 裝備道具 id- Returns:
- 最大 MP 百分比加成;無對應資料時回傳 0
-
getExpPotionLev
public int[] getExpPotionLev(int itemId) 取得經驗藥水的適用等級範圍[最低等級, 最高等級],結果快取於expPotionLev。首次查詢時自 WZ 的
info/exp/minLev/maxLev讀取(預設皆為 1)並快取。- Parameters:
itemId- 經驗藥水道具 id- Returns:
- 長度 2 的陣列:最低與最高適用等級
-
getExpCardRate
public final double getExpCardRate(int itemId) 取得經驗卡的經驗倍率(WZinfo/rate除以 100,預設 1.0)。- Parameters:
itemId- 經驗卡道具 id- Returns:
- 經驗倍率(如 2.0 表示雙倍)
-
getExpCardMaxLevel
public final int getExpCardMaxLevel(int itemId) 取得經驗卡的適用最高等級(WZinfo/maxLevel,預設 249)。- Parameters:
itemId- 經驗卡道具 id- Returns:
- 適用最高等級
-
isExpOrDropCardTime
public boolean isExpOrDropCardTime(int itemId) 判斷經驗/掉落加成卡此刻是否處於其生效時段(依星期與時段設定)。依現在時間取得星期與小時,比對 WZ
info/time的各星期時段設定(首次解析後快取於expCardTimes)。 結果隨呼叫時間而異。- Parameters:
itemId- 加成卡道具 id- Returns:
- 當前時間落於生效時段內時為
true
-
getScrollSuccess
public int getScrollSuccess(int itemId) 取得卷軸(204類)的基礎成功率(裝備能力值success)。- Parameters:
itemId- 卷軸道具 id- Returns:
- 成功率百分比;非卷軸或無對應資料時回傳 0
-
loadEtc
public final void loadEtc(boolean reload) 載入套裝資料(Etc.wz的SetItemInfo.img)至setItems快取。啟動時由
ItemLoader呼叫。解析每組套裝的成員道具與各件數的套裝效果(防禦、四維、命中、攻擊、移速、HP/MP 等)。 若快取已有資料且reload為false則直接返回;reload為true時先清空setItems與potentialCache再重新載入。- Parameters:
reload- 是否強制清空快取後重新載入
-
loadItems
public void loadItems(boolean reload) 自 SQL 載入全部道具資料至dataCache,是道具快取的主要載入入口。啟動時由
ItemLoader呼叫。依序查詢wz_itemdata、wz_itemequipdata、wz_itemadddata、wz_itemrewarddata,分別委派initItemInformation(ResultSet)/initItemEquipData(ResultSet)/initItemAddData(ResultSet)/initItemRewardData(ResultSet),最後對所有裝備類道具 呼叫finalizeEquipData(ItemInformation)。使用DatabaseConnection取得連線(不關閉共用連線)。 若快取已有資料且reload為false則直接返回;reload為true時先清空dataCache。 SQL 例外會被記錄並吞下。- Parameters:
reload- 是否強制清空快取後重新載入
-