Skip to content

Commit a0c74b1

Browse files
committed
Curve INT scaling & rebalance spell exponents
Reworked spell damage to curve INT growth using sqrt(INT) to prevent runaway scaling Kept spell exponent (exp) linear and explicit to preserve clear tier ratios Rebalanced spell exponent constants (Beag/Normal/Mor/Ard/UAS) for tighter midgame and stronger ultimates Differentiated player vs monster spell scaling via configurable INT gain (players stronger by design) Switched damage rounding to Math.Round(..., AwayFromZero) to improve cast-to-cast variance Preserved existing crit behavior and spell-level bonus contribution
1 parent ce4ca7a commit a0c74b1

File tree

9 files changed

+106
-89
lines changed

9 files changed

+106
-89
lines changed

Zolian.Server.Base/GameScripts/Spells/ArcanusElementalSpellTree.cs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public override void OnUse(Sprite sprite, Sprite target)
2323
if (sprite is Aisling playerAction)
2424
playerAction.ActionUsed = "Ard Athar";
2525

26-
_spellMethod.ElementalOnUse(sprite, target, Spell, 300);
26+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Ard);
2727
}
2828
}
2929

@@ -41,7 +41,7 @@ public override void OnUse(Sprite sprite, Sprite target)
4141
if (sprite is Aisling playerAction)
4242
playerAction.ActionUsed = "Ard Creag";
4343

44-
_spellMethod.ElementalOnUse(sprite, target, Spell, 300);
44+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Ard);
4545
}
4646
}
4747

@@ -59,7 +59,7 @@ public override void OnUse(Sprite sprite, Sprite target)
5959
if (sprite is Aisling playerAction)
6060
playerAction.ActionUsed = "Ard Sal";
6161

62-
_spellMethod.ElementalOnUse(sprite, target, Spell, 300);
62+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Ard);
6363
}
6464
}
6565

@@ -77,7 +77,7 @@ public override void OnUse(Sprite sprite, Sprite target)
7777
if (sprite is Aisling playerAction)
7878
playerAction.ActionUsed = "Ard Srad";
7979

80-
_spellMethod.ElementalOnUse(sprite, target, Spell, 300);
80+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Ard);
8181
}
8282
}
8383

@@ -95,7 +95,7 @@ public override void OnUse(Sprite sprite, Sprite target)
9595
if (sprite is Aisling playerAction)
9696
playerAction.ActionUsed = "Ard Dorcha";
9797

98-
_spellMethod.ElementalOnUse(sprite, target, Spell, 300);
98+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Ard);
9999
}
100100
}
101101

@@ -113,7 +113,7 @@ public override void OnUse(Sprite sprite, Sprite target)
113113
if (sprite is Aisling playerAction)
114114
playerAction.ActionUsed = "Ard Eadrom";
115115

116-
_spellMethod.ElementalOnUse(sprite, target, Spell, 300);
116+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Ard);
117117
}
118118
}
119119

@@ -135,7 +135,7 @@ public override void OnUse(Sprite sprite, Sprite target)
135135
if (sprite is Aisling playerAction)
136136
playerAction.ActionUsed = "Mor Athar";
137137

138-
_spellMethod.ElementalOnUse(sprite, target, Spell, 150);
138+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Mor);
139139
}
140140
}
141141

@@ -153,7 +153,7 @@ public override void OnUse(Sprite sprite, Sprite target)
153153
if (sprite is Aisling playerAction)
154154
playerAction.ActionUsed = "Mor Creag";
155155

156-
_spellMethod.ElementalOnUse(sprite, target, Spell, 150);
156+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Mor);
157157
}
158158
}
159159

@@ -171,7 +171,7 @@ public override void OnUse(Sprite sprite, Sprite target)
171171
if (sprite is Aisling playerAction)
172172
playerAction.ActionUsed = "Mor Sal";
173173

174-
_spellMethod.ElementalOnUse(sprite, target, Spell, 150);
174+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Mor);
175175
}
176176
}
177177

@@ -189,7 +189,7 @@ public override void OnUse(Sprite sprite, Sprite target)
189189
if (sprite is Aisling playerAction)
190190
playerAction.ActionUsed = "Mor Srad";
191191

192-
_spellMethod.ElementalOnUse(sprite, target, Spell, 150);
192+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Mor);
193193
}
194194
}
195195

@@ -207,7 +207,7 @@ public override void OnUse(Sprite sprite, Sprite target)
207207
if (sprite is Aisling playerAction)
208208
playerAction.ActionUsed = "Mor Dorcha";
209209

210-
_spellMethod.ElementalOnUse(sprite, target, Spell, 150);
210+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Mor);
211211
}
212212
}
213213

@@ -225,7 +225,7 @@ public override void OnUse(Sprite sprite, Sprite target)
225225
if (sprite is Aisling playerAction)
226226
playerAction.ActionUsed = "Mor Eadrom";
227227

228-
_spellMethod.ElementalOnUse(sprite, target, Spell, 150);
228+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Mor);
229229
}
230230
}
231231

@@ -247,7 +247,7 @@ public override void OnUse(Sprite sprite, Sprite target)
247247
if (sprite is Aisling playerAction)
248248
playerAction.ActionUsed = "Athar";
249249

250-
_spellMethod.ElementalOnUse(sprite, target, Spell, 80);
250+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Normal);
251251
}
252252
}
253253

@@ -265,7 +265,7 @@ public override void OnUse(Sprite sprite, Sprite target)
265265
if (sprite is Aisling playerAction)
266266
playerAction.ActionUsed = "Creag";
267267

268-
_spellMethod.ElementalOnUse(sprite, target, Spell, 80);
268+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Normal);
269269
}
270270
}
271271

@@ -283,7 +283,7 @@ public override void OnUse(Sprite sprite, Sprite target)
283283
if (sprite is Aisling playerAction)
284284
playerAction.ActionUsed = "Sal";
285285

286-
_spellMethod.ElementalOnUse(sprite, target, Spell, 80);
286+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Normal);
287287
}
288288
}
289289

@@ -301,7 +301,7 @@ public override void OnUse(Sprite sprite, Sprite target)
301301
if (sprite is Aisling playerAction)
302302
playerAction.ActionUsed = "Srad";
303303

304-
_spellMethod.ElementalOnUse(sprite, target, Spell, 80);
304+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Normal);
305305
}
306306
}
307307

@@ -319,7 +319,7 @@ public override void OnUse(Sprite sprite, Sprite target)
319319
if (sprite is Aisling playerAction)
320320
playerAction.ActionUsed = "Dorcha";
321321

322-
_spellMethod.ElementalOnUse(sprite, target, Spell, 80);
322+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Normal);
323323
}
324324
}
325325

@@ -337,7 +337,7 @@ public override void OnUse(Sprite sprite, Sprite target)
337337
if (sprite is Aisling playerAction)
338338
playerAction.ActionUsed = "Eadrom";
339339

340-
_spellMethod.ElementalOnUse(sprite, target, Spell, 80);
340+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Normal);
341341
}
342342
}
343343

@@ -359,7 +359,7 @@ public override void OnUse(Sprite sprite, Sprite target)
359359
if (sprite is Aisling playerAction)
360360
playerAction.ActionUsed = "Beag Athar";
361361

362-
_spellMethod.ElementalOnUse(sprite, target, Spell, 40);
362+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Beag);
363363
}
364364
}
365365

@@ -377,7 +377,7 @@ public override void OnUse(Sprite sprite, Sprite target)
377377
if (sprite is Aisling playerAction)
378378
playerAction.ActionUsed = "Beag Creag";
379379

380-
_spellMethod.ElementalOnUse(sprite, target, Spell, 40);
380+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Beag);
381381
}
382382
}
383383

@@ -395,7 +395,7 @@ public override void OnUse(Sprite sprite, Sprite target)
395395
if (sprite is Aisling playerAction)
396396
playerAction.ActionUsed = "Beag Sal";
397397

398-
_spellMethod.ElementalOnUse(sprite, target, Spell, 40);
398+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Beag);
399399
}
400400
}
401401

@@ -413,7 +413,7 @@ public override void OnUse(Sprite sprite, Sprite target)
413413
if (sprite is Aisling playerAction)
414414
playerAction.ActionUsed = "Beag Srad";
415415

416-
_spellMethod.ElementalOnUse(sprite, target, Spell, 40);
416+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Beag);
417417
}
418418
}
419419

@@ -431,7 +431,7 @@ public override void OnUse(Sprite sprite, Sprite target)
431431
if (sprite is Aisling playerAction)
432432
playerAction.ActionUsed = "Beag Dorcha";
433433

434-
_spellMethod.ElementalOnUse(sprite, target, Spell, 40);
434+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Beag);
435435
}
436436
}
437437

@@ -449,7 +449,7 @@ public override void OnUse(Sprite sprite, Sprite target)
449449
if (sprite is Aisling playerAction)
450450
playerAction.ActionUsed = "Beag Eadrom";
451451

452-
_spellMethod.ElementalOnUse(sprite, target, Spell, 40);
452+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Beag);
453453
}
454454
}
455455

Zolian.Server.Base/GameScripts/Spells/ArcanusSpellTree.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,10 @@ public override void OnSuccess(Sprite sprite, Sprite target)
135135

136136
foreach (var targetObj in aisling.AislingsNearby())
137137
{
138-
if (targetObj.GroupParty != aisling.GroupParty) continue;
139138
if (targetObj.Serial == aisling.Serial) continue;
140-
client.Aisling.SendAnimationNearby(Spell.Template.TargetAnimation, null, targetObj.Serial);
139+
140+
client.Aisling.SendAnimationNearby(Spell.Template.TargetAnimation, targetObj.Position);
141+
141142
foreach (var debuff in targetObj.Debuffs.Values)
142143
{
143144
if (debuff.Affliction) continue;
@@ -153,6 +154,8 @@ public override void OnSuccess(Sprite sprite, Sprite target)
153154
}
154155
}
155156

157+
client.Aisling.SendAnimationNearby(Spell.Template.TargetAnimation, aisling.Position);
158+
156159
foreach (var debuff in aisling.Debuffs.Values)
157160
{
158161
if (debuff.Affliction) continue;
@@ -183,7 +186,9 @@ public override void OnUse(Sprite sprite, Sprite target)
183186
foreach (var targetObj in sprite.AislingsNearby())
184187
{
185188
if (targetObj == null) continue;
189+
186190
targetObj.SendAnimationNearby(Spell.Template.TargetAnimation, targetObj.Position);
191+
187192
foreach (var debuff in targetObj.Debuffs.Values)
188193
{
189194
if (debuff.Affliction) continue;
@@ -194,6 +199,7 @@ public override void OnUse(Sprite sprite, Sprite target)
194199
foreach (var buff in targetObj.Buffs.Values)
195200
{
196201
if (buff.Affliction) continue;
202+
if (buff.Name is "Double XP" or "Triple XP" or "Dia Haste") continue;
197203
buff.OnEnded(targetObj, buff);
198204
}
199205
}

Zolian.Server.Base/GameScripts/Spells/ClericSpellTree.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public override void OnUse(Sprite sprite, Sprite target)
146146
playerAction.ActionUsed = "Dark Chain";
147147
if (target == null) return;
148148

149-
_spellMethod.ElementalOnUse(sprite, target, Spell, 60);
149+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Normal);
150150
_spellMethod.AfflictionOnUse(sprite, target, Spell, _debuff);
151151
}
152152
}
@@ -1104,7 +1104,7 @@ public override void OnSuccess(Sprite sprite, Sprite target)
11041104
if (!monster.Template.MonsterRace.MonsterRaceIsSet(MonsterRace.Undead)) continue;
11051105
if (monster.Level >= 101) continue;
11061106
_debuff = new DebuffRending();
1107-
_spellMethod.ElementalOnUse(sprite, target, Spell, 30);
1107+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Beag);
11081108
_spellMethod.AfflictionOnUse(sprite, target, Spell, _debuff);
11091109
monster.Target = null;
11101110
monster.Aggressive = false;
@@ -1176,7 +1176,7 @@ public override void OnSuccess(Sprite sprite, Sprite target)
11761176
if (!monster.Template.MonsterRace.MonsterRaceIsSet(MonsterRace.LowerBeing)) continue;
11771177
if (monster.Level >= 101) continue;
11781178
_debuff = new DebuffRending();
1179-
_spellMethod.ElementalOnUse(sprite, target, Spell, 30);
1179+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Beag);
11801180
_spellMethod.AfflictionOnUse(sprite, target, Spell, _debuff);
11811181
monster.Target = null;
11821182
monster.Aggressive = false;
@@ -1248,7 +1248,7 @@ public override void OnSuccess(Sprite sprite, Sprite target)
12481248
if (!monster.Template.MonsterRace.MonsterRaceIsSet(MonsterRace.Undead)) continue;
12491249
if (monster.Level >= 251) continue;
12501250
_debuff = new DebuffRending();
1251-
_spellMethod.ElementalOnUse(sprite, target, Spell, 50);
1251+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Normal);
12521252
_spellMethod.AfflictionOnUse(sprite, target, Spell, _debuff);
12531253
monster.Target = null;
12541254
monster.Aggressive = false;
@@ -1320,7 +1320,7 @@ public override void OnSuccess(Sprite sprite, Sprite target)
13201320
if (!monster.Template.MonsterRace.MonsterRaceIsSet(MonsterRace.LowerBeing)) continue;
13211321
if (monster.Level >= 251) continue;
13221322
_debuff = new DebuffRending();
1323-
_spellMethod.ElementalOnUse(sprite, target, Spell, 50);
1323+
_spellMethod.ElementalOnUse(sprite, target, Spell, GlobalSpellMethods.Normal);
13241324
_spellMethod.AfflictionOnUse(sprite, target, Spell, _debuff);
13251325
monster.Target = null;
13261326
monster.Aggressive = false;

0 commit comments

Comments
 (0)