Skip to content

Commit 53d5220

Browse files
committed
Allow spells to use it's target's stats
1 parent 13dab42 commit 53d5220

File tree

6 files changed

+39
-11
lines changed

6 files changed

+39
-11
lines changed

src/main/java/com/robertx22/mine_and_slash/aoe_data/database/spells/SpellCalcs.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ public static void init() {
3737

3838
public static ValueCalculation EXPLODE_MINION = ValueCalcBuilder.of("explode_minion")
3939
.spellScaling(0.25F, 1f)
40-
.capScaling(5)
41-
.statScaling(Health.getInstance(), 0.1F, 0.3F)
40+
.targetStatScaling(Health.getInstance(), 0.1F, 0.3F)
4241
.build();
4342

4443
public static ValueCalculation CHAOS_TOTEM = ValueCalcBuilder.of("chaos_totem")

src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/actions/DamageAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void tryActivate(Collection<LivingEntity> targets, SpellCtx ctx, MapHolde
3939

4040
float dmgEffectiveness = calc.getDamageEffectiveness(ctx.caster, ctx.calculatedSpellData.getSpell());
4141

42-
int value = calc.getCalculatedValue(ctx.caster, ctx.calculatedSpellData.getSpell());
42+
int value = calc.getCalculatedValue(ctx.caster, ctx.target, ctx.calculatedSpellData.getSpell());
4343

4444
if (ctx.calculatedSpellData.chains_did > 0) {
4545
float dmgMulti = MathHelper.clamp(1F - (GameBalanceConfig.get().DMG_REDUCT_PER_CHAIN * ctx.calculatedSpellData.chains_did), GameBalanceConfig.get().MIN_CHAIN_DMG, 1F);

src/main/java/com/robertx22/mine_and_slash/database/data/value_calc/ScalingCalc.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,14 @@ public int getMultiAsPercent(LivingEntity en, MaxLevelProvider provider) {
4343
return (int) (multi.getValue(en, provider) * 100);
4444
}
4545

46-
public Component GetTooltipString(LivingEntity en, MaxLevelProvider provider) {
46+
public Component GetStatTooltipString(LivingEntity en, MaxLevelProvider provider) {
4747
return Gui.SPELL_DAMAGE_PROPORTION.locName(getMultiAsPercent(en, provider), getStat().getMutableIconNameFormat());
4848
}
4949

50+
public Component GetTargetStatTooltipString(LivingEntity en, MaxLevelProvider provider) {
51+
return Gui.TARGET_SPELL_DAMAGE_PROPORTION.locName(getMultiAsPercent(en, provider), getStat().getMutableIconNameFormat());
52+
}
53+
5054
public List<Component> getTooltipFor(float multi, float value, MutableComponent statname, Elements el) {
5155
List<Component> list = new ArrayList<>();
5256
String eleStr = "";

src/main/java/com/robertx22/mine_and_slash/database/data/value_calc/ValueCalcBuilder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ public ValueCalcBuilder statScaling(Stat stat, float min, float max) {
5555
return this;
5656
}
5757

58+
public ValueCalcBuilder targetStatScaling(Stat stat, float min, float max) {
59+
calc.target_stat_scalings.add(new ScalingCalc(stat, new LeveledValue(min, max)));
60+
return this;
61+
}
62+
5863
public ValueCalculation build() {
5964
calc.addToSerializables(MMORPG.SERIAZABLE_REGISTRATION_INFO);
6065
return calc;

src/main/java/com/robertx22/mine_and_slash/database/data/value_calc/ValueCalculation.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ public List<ScalingCalc> getAllScalingValues() {
3333
return new ArrayList<>(stat_scalings);
3434
}
3535

36+
public List<ScalingCalc> getAllTargetScalingValues() {
37+
return new ArrayList<>(target_stat_scalings);
38+
}
39+
3640
public List<ScalingCalc> stat_scalings = new ArrayList<>();
41+
public List<ScalingCalc> target_stat_scalings = new ArrayList<>();
3742

3843
public String id = "";
3944
public StatScaling base_scaling_type = StatScaling.NORMAL;
@@ -68,22 +73,28 @@ public String getLocDmgTooltip() {
6873
return "[calc:" + id + "]";
6974
}
7075

71-
private int getCalculatedScalingValue(LivingEntity en, MaxLevelProvider provider) {
76+
private int getCalculatedScalingValue(LivingEntity caster, LivingEntity target, MaxLevelProvider provider) {
7277

7378
var opt = getAllScalingValues().stream().filter(x -> x.getStat() == WeaponDamage.getInstance()).findFirst();
7479

7580
float dmg = 0;
7681
if (opt.isPresent()) {
77-
dmg = opt.get().getCalculatedValue(en, provider);
82+
dmg = opt.get().getCalculatedValue(caster, provider);
7883
}
7984

8085

8186
float other = 0;
8287

8388
other += getAllScalingValues().stream().filter(x -> x.getStat() != WeaponDamage.getInstance())
84-
.mapToInt(x -> x.getCalculatedValue(en, provider))
89+
.mapToInt(x -> x.getCalculatedValue(caster, provider))
8590
.sum();
8691

92+
if (target != null) {
93+
other += getAllTargetScalingValues().stream().filter(x -> x.getStat() != WeaponDamage.getInstance())
94+
.mapToInt(x -> x.getCalculatedValue(target, provider))
95+
.sum();
96+
}
97+
8798
if (this.capsToWeaponDamage()) {
8899
float maxotherscaling = dmg * this.cap_to_wep_dmg;
89100
if (other > maxotherscaling) {
@@ -96,9 +107,13 @@ private int getCalculatedScalingValue(LivingEntity en, MaxLevelProvider provider
96107
return (int) amount;
97108
}
98109

99-
public int getCalculatedValue(LivingEntity en, MaxLevelProvider provider) {
100-
int val = getCalculatedScalingValue(en, provider);
101-
val += getCalculatedBaseValue(en, provider);
110+
public int getCalculatedValue(LivingEntity caster, MaxLevelProvider provider) {
111+
return getCalculatedValue(caster, null, provider);
112+
}
113+
114+
public int getCalculatedValue(LivingEntity caster, LivingEntity target, MaxLevelProvider provider) {
115+
int val = getCalculatedScalingValue(caster, target, provider);
116+
val += getCalculatedBaseValue(caster, provider);
102117
return val;
103118

104119
}
@@ -116,7 +131,11 @@ public Component getShortTooltip(LivingEntity en, MaxLevelProvider provider) {
116131
}
117132

118133
stat_scalings.forEach(x -> {
119-
text.append(" ").append(x.GetTooltipString(en, provider));
134+
text.append(" ").append(x.GetStatTooltipString(en, provider));
135+
});
136+
137+
target_stat_scalings.forEach(x -> {
138+
text.append(" ").append(x.GetTargetStatTooltipString(en, provider));
120139
});
121140

122141
if (capsToWeaponDamage()) {

src/main/java/com/robertx22/mine_and_slash/uncommon/localization/Gui.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public enum Gui implements IAutoLocName {
4444
SALVAGE_TIP_OFF("Auto Salvage for %1$s %2$s: Off"),
4545
PROF_NAME("%1$s: %2$s"),
4646
SPELL_DAMAGE_PROPORTION("(%1$s%% of %2$s§7)"),
47+
TARGET_SPELL_DAMAGE_PROPORTION("(%1$s%% of %2$s§7 of target)"),
4748
PROF_LEVEL_AND_EXP("Level: %1$s EXP: %2$s/%3$s"),
4849
AVAILABLE_SUPPORT_SLOTS("Support Slots: %1$s/5 Available"),
4950
FAVOR_REGEN_PER_HOUR(ChatFormatting.LIGHT_PURPLE + "Regenerates %1$s " + ChatFormatting.LIGHT_PURPLE + "per Hour"),

0 commit comments

Comments
 (0)