Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 怪物對玩家的傷害公式
- 這份文件整理怪物攻擊玩家時使用的物理與魔法傷害計算。
- ## 符號說明
- 部分匯出資料中的數學符號需要還原:
- ```text
- A | B = A / B
- A & 2 = A 的平方
- ```
- ## 魔法傷害
- 核心公式:
- ```text
- 魔法傷害 =
- 怪物魔攻的平方 × 0.0075~0.008
- - (MDEF/4 + STR/28 + DEX/24 + LUK/20) × K
- ```
- 職業係數:
- ```text
- 法師:K = 1.2
- 其他職業:K = 1.0
- ```
- 最低傷害:
- ```text
- 怪物魔攻的平方 × 0.0075
- - (MDEF/4 + STR/28 + DEX/24 + LUK/20) × K
- ```
- 最高傷害:
- ```text
- 怪物魔攻的平方 × 0.008
- - (MDEF/4 + STR/28 + DEX/24 + LUK/20) × K
- ```
- 最終傷害最低為 1,並取整數部分。
- ### Python 範例
- ```python
- import random
- def magic_damage(
- monster_magic_attack,
- magic_defense,
- strength,
- dexterity,
- luck,
- magician=False,
- ):
- job_factor = 1.2 if magician else 1.0
- random_factor = 0.0075 + random.random() * 0.0005
- defense_reduction = (
- magic_defense / 4
- + strength / 28
- + dexterity / 24
- + luck / 20
- ) * job_factor
- result = (
- monster_magic_attack ** 2 * random_factor
- - defense_reduction
- )
- return max(1, int(result))
- ```
- ## 物理傷害
- 核心公式:
- ```text
- 物理傷害 =
- 怪物物攻的平方 × 0.008~0.0085
- - TotalWDEF × A
- - (TotalWDEF - PDD) × B
- ```
- 其中:
- ```text
- TotalWDEF = WDEF + 額外 WDEF
- A = C + 0.28
- ```
- ### C 係數
- 戰士:
- ```text
- C = STR/2800 + DEX/3200 + INT/7200 + LUK/3200
- ```
- 其他職業:
- ```text
- C = STR/2000 + DEX/2800 + INT/7200 + LUK/3200
- ```
- ### 等級係數 D
- 玩家等級高於怪物:
- ```text
- D = 13 / (13 + 玩家等級 - 怪物等級)
- ```
- 其他情況:
- ```text
- D = 1.3
- ```
- ### B 係數
- 當 TotalWDEF 高於 PDD:
- ```text
- B = C × 28/45 + 玩家等級 × 7/13000 + 0.196
- ```
- 當 TotalWDEF 不高於 PDD:
- ```text
- B = D × (C + 玩家等級/550 + 0.28)
- ```
- ### PDD
- PDD 是依玩家等級與職業決定的基準防禦值,不是面板上的 WDEF。
- ```text
- TotalWDEF < PDD:防禦未達基準
- TotalWDEF > PDD:超過基準的部分提供額外減傷
- ```
- ### Python 範例
- ```python
- import random
- def physical_damage(
- monster_physical_attack,
- monster_level,
- player_level,
- warrior,
- strength,
- dexterity,
- intelligence,
- luck,
- total_wdef,
- pdd,
- ):
- if warrior:
- c = (
- strength / 2800
- + dexterity / 3200
- + intelligence / 7200
- + luck / 3200
- )
- else:
- c = (
- strength / 2000
- + dexterity / 2800
- + intelligence / 7200
- + luck / 3200
- )
- a = c + 0.28
- if player_level > monster_level:
- d = 13 / (13 + player_level - monster_level)
- else:
- d = 1.3
- if pdd < total_wdef:
- b = c * 28 / 45 + player_level * 7 / 13000 + 0.196
- else:
- b = d * (c + player_level / 550 + 0.28)
- random_factor = 0.008 + random.random() * 0.0005
- result = (
- monster_physical_attack ** 2 * random_factor
- - total_wdef * a
- - (total_wdef - pdd) * b
- )
- return max(1, int(result))
- ```
- ## 一百次測試
- ```python
- results = []
- for _ in range(100):
- value = physical_damage(
- monster_physical_attack=800,
- monster_level=108,
- player_level=156,
- warrior=False,
- strength=9,
- dexterity=162,
- intelligence=11,
- luck=758,
- total_wdef=402,
- pdd=331,
- )
- results.append(value)
- print("Tests:", len(results))
- print("Minimum:", min(results))
- print("Maximum:", max(results))
- print("Average:", sum(results) / len(results))
- ```
- ## 基礎值與即時值
- 怪物資料表顯示的攻擊力可能是基礎值;實際參與傷害計算的攻擊力可能已受到怪物狀態或地圖設定影響。
- 例如:
- ```text
- 資料表物理攻擊:650
- 計算時物理攻擊:800
- ```
- 由於公式會將攻擊力平方,差距會被放大:
- ```text
- 650 的平方 = 422,500
- 800 的平方 = 640,000
- ```
- 因此計算時應使用當下實際攻擊力,而不是只使用圖鑑基礎值。
- ## 實測摘要
- 物理測試:
- ```text
- 怪物即時物攻:800
- 玩家 WDEF:402
- 玩家 PDD:331
- 公式結果:約 4853~5173
- 遊戲測試:約 4858~5172
- ```
- 魔法測試:
- ```text
- 怪物魔攻:約 500
- 玩家 MDEF:1394
- 玩家職業:法師
- 公式與遊戲測試:約 1450~1570
- ```
- ## 結論
- ```text
- 怪物物理傷害:PhysDamage² × 0.008~0.0085,再扣 WDEF、PDD 與屬性修正
- 怪物魔法傷害:MagDamage² × 0.0075~0.008,再扣 MDEF 與 STR/DEX/LUK 修正
- ```
- 目前公式同時獲得以下支持:
- 1. 本地 `MobAttackComponent_CalcDamage.lua`。
- 2. Thanatos 與 Risell Squid 遊戲內實測。
- 3. 舊版 MapleStory/MapleLand/Artale 社群公式研究。
- 網路來源屬於社群研究,不是 Nexon 官方文件;目前最可靠的依據仍是本地程式碼與遊戲內實測結果。
- - [MapleLand 被擊傷害研究] https[:]//gall[.]dcinside[.]com/mgallery/board/view/?id=mapleland&no=2174079
- - [MapleLand 物防與被擊傷害整理] https[:]//gall[.]dcinside[.]com/mgallery/board/view/?id=mapleland&no=289949
Add Comment
Please, Sign In to add comment