jackpieno

Untitled

Aug 12th, 2026 (edited)
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.39 KB | None | 0 0
  1. # 怪物對玩家的傷害公式
  2.  
  3. 這份文件整理怪物攻擊玩家時使用的物理與魔法傷害計算。
  4.  
  5. ## 符號說明
  6.  
  7. 部分匯出資料中的數學符號需要還原:
  8.  
  9. ```text
  10. A | B = A / B
  11. A & 2 = A 的平方
  12. ```
  13.  
  14. ## 魔法傷害
  15.  
  16. 核心公式:
  17.  
  18. ```text
  19. 魔法傷害 =
  20. 怪物魔攻的平方 × 0.0075~0.008
  21. - (MDEF/4 + STR/28 + DEX/24 + LUK/20) × K
  22. ```
  23.  
  24. 職業係數:
  25.  
  26. ```text
  27. 法師:K = 1.2
  28. 其他職業:K = 1.0
  29. ```
  30.  
  31. 最低傷害:
  32.  
  33. ```text
  34. 怪物魔攻的平方 × 0.0075
  35. - (MDEF/4 + STR/28 + DEX/24 + LUK/20) × K
  36. ```
  37.  
  38. 最高傷害:
  39.  
  40. ```text
  41. 怪物魔攻的平方 × 0.008
  42. - (MDEF/4 + STR/28 + DEX/24 + LUK/20) × K
  43. ```
  44.  
  45. 最終傷害最低為 1,並取整數部分。
  46.  
  47. ### Python 範例
  48.  
  49. ```python
  50. import random
  51.  
  52.  
  53. def magic_damage(
  54. monster_magic_attack,
  55. magic_defense,
  56. strength,
  57. dexterity,
  58. luck,
  59. magician=False,
  60. ):
  61. job_factor = 1.2 if magician else 1.0
  62. random_factor = 0.0075 + random.random() * 0.0005
  63.  
  64. defense_reduction = (
  65. magic_defense / 4
  66. + strength / 28
  67. + dexterity / 24
  68. + luck / 20
  69. ) * job_factor
  70.  
  71. result = (
  72. monster_magic_attack ** 2 * random_factor
  73. - defense_reduction
  74. )
  75.  
  76. return max(1, int(result))
  77. ```
  78.  
  79. ## 物理傷害
  80.  
  81. 核心公式:
  82.  
  83. ```text
  84. 物理傷害 =
  85. 怪物物攻的平方 × 0.008~0.0085
  86. - TotalWDEF × A
  87. - (TotalWDEF - PDD) × B
  88. ```
  89.  
  90. 其中:
  91.  
  92. ```text
  93. TotalWDEF = WDEF + 額外 WDEF
  94. A = C + 0.28
  95. ```
  96.  
  97. ### C 係數
  98.  
  99. 戰士:
  100.  
  101. ```text
  102. C = STR/2800 + DEX/3200 + INT/7200 + LUK/3200
  103. ```
  104.  
  105. 其他職業:
  106.  
  107. ```text
  108. C = STR/2000 + DEX/2800 + INT/7200 + LUK/3200
  109. ```
  110.  
  111. ### 等級係數 D
  112.  
  113. 玩家等級高於怪物:
  114.  
  115. ```text
  116. D = 13 / (13 + 玩家等級 - 怪物等級)
  117. ```
  118.  
  119. 其他情況:
  120.  
  121. ```text
  122. D = 1.3
  123. ```
  124.  
  125. ### B 係數
  126.  
  127. 當 TotalWDEF 高於 PDD:
  128.  
  129. ```text
  130. B = C × 28/45 + 玩家等級 × 7/13000 + 0.196
  131. ```
  132.  
  133. 當 TotalWDEF 不高於 PDD:
  134.  
  135. ```text
  136. B = D × (C + 玩家等級/550 + 0.28)
  137. ```
  138.  
  139. ### PDD
  140.  
  141. PDD 是依玩家等級與職業決定的基準防禦值,不是面板上的 WDEF。
  142.  
  143. ```text
  144. TotalWDEF < PDD:防禦未達基準
  145. TotalWDEF > PDD:超過基準的部分提供額外減傷
  146. ```
  147.  
  148. ### Python 範例
  149.  
  150. ```python
  151. import random
  152.  
  153.  
  154. def physical_damage(
  155. monster_physical_attack,
  156. monster_level,
  157. player_level,
  158. warrior,
  159. strength,
  160. dexterity,
  161. intelligence,
  162. luck,
  163. total_wdef,
  164. pdd,
  165. ):
  166. if warrior:
  167. c = (
  168. strength / 2800
  169. + dexterity / 3200
  170. + intelligence / 7200
  171. + luck / 3200
  172. )
  173. else:
  174. c = (
  175. strength / 2000
  176. + dexterity / 2800
  177. + intelligence / 7200
  178. + luck / 3200
  179. )
  180.  
  181. a = c + 0.28
  182.  
  183. if player_level > monster_level:
  184. d = 13 / (13 + player_level - monster_level)
  185. else:
  186. d = 1.3
  187.  
  188. if pdd < total_wdef:
  189. b = c * 28 / 45 + player_level * 7 / 13000 + 0.196
  190. else:
  191. b = d * (c + player_level / 550 + 0.28)
  192.  
  193. random_factor = 0.008 + random.random() * 0.0005
  194.  
  195. result = (
  196. monster_physical_attack ** 2 * random_factor
  197. - total_wdef * a
  198. - (total_wdef - pdd) * b
  199. )
  200.  
  201. return max(1, int(result))
  202. ```
  203.  
  204. ## 一百次測試
  205.  
  206. ```python
  207. results = []
  208.  
  209. for _ in range(100):
  210. value = physical_damage(
  211. monster_physical_attack=800,
  212. monster_level=108,
  213. player_level=156,
  214. warrior=False,
  215. strength=9,
  216. dexterity=162,
  217. intelligence=11,
  218. luck=758,
  219. total_wdef=402,
  220. pdd=331,
  221. )
  222. results.append(value)
  223.  
  224. print("Tests:", len(results))
  225. print("Minimum:", min(results))
  226. print("Maximum:", max(results))
  227. print("Average:", sum(results) / len(results))
  228. ```
  229.  
  230. ## 基礎值與即時值
  231.  
  232. 怪物資料表顯示的攻擊力可能是基礎值;實際參與傷害計算的攻擊力可能已受到怪物狀態或地圖設定影響。
  233.  
  234. 例如:
  235.  
  236. ```text
  237. 資料表物理攻擊:650
  238. 計算時物理攻擊:800
  239. ```
  240.  
  241. 由於公式會將攻擊力平方,差距會被放大:
  242.  
  243. ```text
  244. 650 的平方 = 422,500
  245. 800 的平方 = 640,000
  246. ```
  247.  
  248. 因此計算時應使用當下實際攻擊力,而不是只使用圖鑑基礎值。
  249.  
  250. ## 實測摘要
  251.  
  252. 物理測試:
  253.  
  254. ```text
  255. 怪物即時物攻:800
  256. 玩家 WDEF:402
  257. 玩家 PDD:331
  258. 公式結果:約 4853~5173
  259. 遊戲測試:約 4858~5172
  260. ```
  261.  
  262. 魔法測試:
  263.  
  264. ```text
  265. 怪物魔攻:約 500
  266. 玩家 MDEF:1394
  267. 玩家職業:法師
  268. 公式與遊戲測試:約 1450~1570
  269. ```
  270. ## 結論
  271.  
  272. ```text
  273. 怪物物理傷害:PhysDamage² × 0.008~0.0085,再扣 WDEF、PDD 與屬性修正
  274. 怪物魔法傷害:MagDamage² × 0.0075~0.008,再扣 MDEF 與 STR/DEX/LUK 修正
  275. ```
  276. 目前公式同時獲得以下支持:
  277.  
  278. 1. 本地 `MobAttackComponent_CalcDamage.lua`。
  279. 2. Thanatos 與 Risell Squid 遊戲內實測。
  280. 3. 舊版 MapleStory/MapleLand/Artale 社群公式研究。
  281.  
  282. 網路來源屬於社群研究,不是 Nexon 官方文件;目前最可靠的依據仍是本地程式碼與遊戲內實測結果。
  283. - [MapleLand 被擊傷害研究] https[:]//gall[.]dcinside[.]com/mgallery/board/view/?id=mapleland&no=2174079
  284. - [MapleLand 物防與被擊傷害整理] https[:]//gall[.]dcinside[.]com/mgallery/board/view/?id=mapleland&no=289949
  285.  
Add Comment
Please, Sign In to add comment