Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# 与えるダメージの計算
function api:damage/core/calc/
# ダメージの補正
execute if data storage api: Argument{BypassModifier:false} store result storage api: Damage double 0.0001 run scoreboard players get $Damage Temporary
execute if data storage api: Argument{BypassModifier:false} store result storage api: Damage double 0.01 run scoreboard players get $Damage Temporary
execute if data storage api: Argument{BypassModifier:false} run function api:damage/core/modify_damage.m {Side:"Defense"}
execute if data storage api: Argument{BypassModifier:false} if entity @s[type=!player,tag=!Enemy.Boss] if score $Metric Temporary matches ..99 run function metric:damage/normal.m {Condition:"Resist"}
execute if data storage api: Argument{BypassModifier:false} if entity @s[type=!player,tag=!Enemy.Boss] if score $Metric Temporary matches 100 run function metric:damage/normal.m {Condition:"Normal"}
Expand All @@ -21,11 +21,8 @@
execute if data storage api: Argument{BypassModifier:false} if entity @s[type=!player,tag= Enemy.Boss] if score $Metric Temporary matches 101.. run function metric:damage/angel.m {Condition:"Weak"}
execute if data storage api: Argument{BypassModifier:false} run scoreboard players reset $Metric Temporary
execute if data storage api: Argument{BypassModifier:false} store result score $Damage Temporary run data get storage api: ModifiedDamage 100
execute if data storage api: Argument{BypassModifier: true} run scoreboard players operation $Damage Temporary /= $100 Const
execute if data storage api: Argument{BypassModifier: true} if entity @s[type=!player,tag=!Enemy.Boss] run function metric:damage/normal.m {Condition:"Bypass"}
execute if data storage api: Argument{BypassModifier: true} if entity @s[type=!player,tag= Enemy.Boss] run function metric:damage/angel.m {Condition:"Bypass"}
# システム的なダメージ上限(9999.9(e2))チェック
execute if score $Damage Temporary matches 999990.. run scoreboard players set $Damage Temporary 999990
# Mobに適用
function api:damage/core/health_subtract/
# リセット
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@
#declare score_holder $isDefenseCalcSkip

# 計算式:
# damage * (1 - min(20, max(defensePoints / 5, defensePoints - damage / (2 + toughness / 4))) / 25) * (1 - min(5, resistanceLv) / 5) * (1 - (min(20, cappedEPF) / 25))
# damage * (1 - min(20, max(defensePoints / 5, defensePoints - damage / (2 + toughness / 4))) / 25) * (1 - min(10, resistanceLv) / 10) * (1 - (min(20, cappedEPF) / 50))

# 計算的なダメージ上限(21474.83)チェック
execute if score $Damage Temporary matches 2147483.. run scoreboard players set $Damage Temporary 2147483
# 計算的なダメージ上限(214748.36)チェック
execute if score $Damage Temporary matches 21474836.. run scoreboard players set $Damage Temporary 21474836
# 防御による軽減計算部
execute if score $defensePoints Temporary matches 0 if score $toughness Temporary matches 0 run scoreboard players set $isDefenseCalcSkip Temporary 1
execute unless score $isDefenseCalcSkip Temporary matches 1 run function api:damage/core/calc/defense
execute if score $isDefenseCalcSkip Temporary matches 1 run scoreboard players operation $Damage Temporary *= $100 Const
# 耐性エフェクトによる軽減計算部
execute if score $Resistance Temporary matches 1.. run function api:damage/core/calc/resistance
# エンチャントによる軽減計算部
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,23 @@
# @private
#declare score_holder $CalcA
#declare score_holder $CalcB
#declare score_holder $CalcB1
#declare score_holder $CalcB2
#declare score_holder $CalcB3
#declare score_holder $CalcC
#declare score_holder $CalcD
#declare score_holder $CalcE

# $CalcA(e2) = $defensePoints(e2) * e2 / 5 / e2
# $CalcA(e2) = $defensePoints(e2) / 5
scoreboard players operation $CalcA Temporary = $defensePoints Temporary
scoreboard players operation $CalcA Temporary *= $20 Const
scoreboard players operation $CalcA Temporary /= $100 Const
# $CalcB3(e2) = $toughness(e2) * e2 / 4 / e2 + 2 * e2 : $damage >= 1000 * e2
# $CalcB3(e4) = $toughness(e2) * e2 / 4 + 2 * e4 : $damage < 1000 * e2
scoreboard players operation $CalcB3 Temporary = $toughness Temporary
scoreboard players operation $CalcB3 Temporary *= $25 Const
execute if score $Damage Temporary matches 100000.. run scoreboard players operation $CalcB3 Temporary /= $100 Const
execute if score $Damage Temporary matches 100000.. run scoreboard players operation $CalcB3 Temporary += $200 Const
execute if score $Damage Temporary matches ..099999 run scoreboard players operation $CalcB3 Temporary += $20000 Const
# $CalcB2(e2) = $damage(e2) * e2 / $CalcB3(e2) : $damage >= 1000 * e2
# $CalcB2(e2) = $damage(e2) * e4 / $CalcB3(e4) : $damage < 1000 * e2
scoreboard players operation $CalcA Temporary /= $5 Const
# $CalcB1(e2) = 2 * e2 + $toughness(e2) / 4
scoreboard players operation $CalcB1 Temporary = $toughness Temporary
scoreboard players operation $CalcB1 Temporary /= $4 Const
scoreboard players add $CalcB1 Temporary 200
# $CalcB2(e2) = $Damage(e2) * e2 / $CalcB1(e2)
scoreboard players operation $CalcB2 Temporary = $Damage Temporary
execute if score $Damage Temporary matches 100000.. run scoreboard players operation $CalcB2 Temporary *= $100 Const
execute if score $Damage Temporary matches ..099999 run scoreboard players operation $CalcB2 Temporary *= $10000 Const
scoreboard players operation $CalcB2 Temporary /= $CalcB3 Temporary
scoreboard players operation $CalcB2 Temporary *= $100 Const
scoreboard players operation $CalcB2 Temporary /= $CalcB1 Temporary
# $CalcB(e2) = $defensePoints(e2) - $CalcB2(e2)
scoreboard players operation $CalcB Temporary = $defensePoints Temporary
scoreboard players operation $CalcB Temporary -= $CalcB2 Temporary
Expand All @@ -39,23 +33,23 @@
scoreboard players operation $CalcC Temporary > $CalcB Temporary
scoreboard players operation $CalcC Temporary < $2000 Const
scoreboard players operation $CalcC Temporary *= $4 Const
# $CalcD(e3) = (1 * e4 - $CalcC(e4)) / e1 : $damage >= 1000 * e2
# $CalcD(e4) = (1 * e4 - $CalcC(e4)) : $damage < 1000 * e2
scoreboard players operation $CalcD Temporary = $10000 Const
# $CalcD(e4) = 1 * e4 - $CalcC(e4)
scoreboard players set $CalcD Temporary 10000
scoreboard players operation $CalcD Temporary -= $CalcC Temporary
execute if score $Damage Temporary matches 100000.. run scoreboard players operation $CalcD Temporary /= $10 Const
# $damage(e4) = $damage(e2) * $CalcD(e3) / e1 : $damage >= 1000 * e2
# $damage(e4) = $damage(e2) * $CalcD(e4) / e2 : $damage < 1000 * e2
scoreboard players operation $CalcE Temporary = $Damage Temporary
scoreboard players operation $CalcE Temporary *= $CalcD Temporary
execute if score $Damage Temporary matches 100000.. run scoreboard players operation $CalcE Temporary /= $10 Const
execute if score $Damage Temporary matches ..099999 run scoreboard players operation $CalcE Temporary /= $100 Const
scoreboard players operation $Damage Temporary = $CalcE Temporary
# $Damage(e2) = $Damage(e2) * $CalcD(e4) / e4
scoreboard players set $CalcE Temporary 0
execute if score $Damage Temporary matches 100000.. run scoreboard players operation $CalcE Temporary = $Damage Temporary
execute if score $Damage Temporary matches 100000.. run scoreboard players operation $CalcE Temporary /= $10000 Const
execute if score $Damage Temporary matches 100000.. run scoreboard players operation $CalcE Temporary *= $CalcD Temporary
execute if score $Damage Temporary matches 100000.. run scoreboard players operation $Damage Temporary %= $10000 Const
scoreboard players operation $Damage Temporary *= $CalcD Temporary
scoreboard players operation $Damage Temporary /= $10000 Const
scoreboard players operation $Damage Temporary += $CalcE Temporary
# リセット
scoreboard players reset $CalcA Temporary
scoreboard players reset $CalcB Temporary
scoreboard players reset $CalcB1 Temporary
scoreboard players reset $CalcB2 Temporary
scoreboard players reset $CalcB3 Temporary
scoreboard players reset $CalcC Temporary
scoreboard players reset $CalcD Temporary
scoreboard players reset $CalcE Temporary
scoreboard players reset $CalcE Temporary
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,15 @@
#> Temp
# @private
#declare score_holder $CalcF
#declare score_holder $CalcG

# $EPF(e2) = min(20, $EPF(e0)) * e2 / 50
scoreboard players operation $EPF Temporary < $20 Const
scoreboard players operation $EPF Temporary *= $2 Const
# $CalcF(e2) = 1 * e2 - $EPF(e2)
scoreboard players operation $CalcF Temporary = $100 Const
scoreboard players operation $CalcF Temporary -= $EPF Temporary
# $damage(e4) = $damage(e4) * $CalcF(e2) / e2
scoreboard players operation $CalcG Temporary = $Damage Temporary
execute if score $Damage Temporary matches 10000000.. run scoreboard players operation $CalcG Temporary /= $10 Const
scoreboard players operation $CalcG Temporary *= $CalcF Temporary
execute if score $Damage Temporary matches ..9999999 run scoreboard players operation $CalcG Temporary /= $100 Const
execute if score $Damage Temporary matches 10000000.. run scoreboard players operation $CalcG Temporary /= $10 Const
scoreboard players operation $Damage Temporary = $CalcG Temporary
# $damage(e2) = $damage(e2) * $CalcF(e2) / e2
scoreboard players operation $Damage Temporary *= $CalcF Temporary
scoreboard players operation $Damage Temporary /= $100 Const
# リセット
scoreboard players reset $CalcF Temporary
scoreboard players reset $CalcG Temporary
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
# @private
#declare score_holder $Mul

# $Resistance(e1) *= min(5, $Resistance(e0)) * e1 / 5
# $Resistance(e1) *= min(10, $Resistance(e0)) * e1 / 10
scoreboard players operation $Resistance Temporary < $10 Const
# $Mul(e1) = 1 * e1 - $Resistance(e1)
scoreboard players operation $Mul Temporary = $10 Const
scoreboard players operation $Mul Temporary -= $Resistance Temporary
# $damage(e4) = $damage(e4) * $Mul(e1) / e1
# $damage(e2) = $damage(e2) * $Mul(e1) / e1
scoreboard players operation $Damage Temporary *= $Mul Temporary
scoreboard players operation $Damage Temporary /= $10 Const
# リセット
scoreboard players reset $Mul Temporary
scoreboard players reset $Mul Temporary
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#> api:damage/core/health_subtract/force_cap
#
# システム的なダメージ上限(99999.9(e2))チェック
#
# @within function api:damage/core/health_subtract/*player/
Comment thread
haiiro2gou marked this conversation as resolved.

execute if score $Damage Temporary matches 9999990.. run scoreboard players set $Damage Temporary 9999990
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@

#> Val
# @private
#declare score_holder $Fluctuation
#declare score_holder $Fluctuation

# ダメージ上限
function api:damage/core/health_subtract/force_cap

# ダメージ表示
scoreboard players set $Fluctuation Lib 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

# 難易度補正を掛ける
execute if data storage api: Argument{BypassDifficulty:false} run function api:damage/core/health_subtract/player/difficulty_modifier
# ダメージ上限
function api:damage/core/health_subtract/force_cap
# 引数として代入
execute store result storage api: Argument.Fluctuation double -0.01 run scoreboard players get $Damage Temporary
# 統計送りにする
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
# @private
#declare score_holder $Difficulty

# $damage(e4) = $damage(e4) * (1 + ($Difficulty - 2) / 5)
# $damage(e2) = $damage(e2) * (1 + ($Difficulty - 2) / 5)
function api:global_vars/get_difficulty
execute store result score $Difficulty Temporary run data get storage api: Return.Difficulty 2
scoreboard players add $Difficulty Temporary 6
scoreboard players operation $Damage Temporary *= $Difficulty Temporary
scoreboard players operation $Damage Temporary /= $10 Const
execute if score $Damage Temporary matches 999990000.. run scoreboard players set $Damage Temporary 999990000

# リセット
scoreboard players reset $Difficulty Temporary
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#declare score_holder $Temp
#declare score_holder $Sum
#declare score_holder $Difficulty
#declare score_holder $Limit

# 必要なデータの取得と加算
# 元ダメージ
Expand Down Expand Up @@ -56,6 +57,9 @@
scoreboard players operation $Difficulty Temporary > $0 Const
scoreboard players operation $Modifier Temporary > $Difficulty Temporary
# 補正
scoreboard players operation $Limit Temporary = $int.max Const
scoreboard players operation $Limit Temporary /= $Modifier Temporary
scoreboard players operation $Damage Temporary < $Limit Temporary
scoreboard players operation $Damage Temporary *= $Modifier Temporary
# 代入
execute store result storage api: ModifiedDamage double 0.0001 run scoreboard players get $Damage Temporary
Expand All @@ -67,3 +71,4 @@
scoreboard players reset $Temp Temporary
scoreboard players reset $Sum Temporary
scoreboard players reset $Difficulty Temporary
scoreboard players reset $Limit Temporary
Loading