Skip to content

Commit c137702

Browse files
committed
Oracle Release
1 parent dfa317e commit c137702

File tree

5 files changed

+588
-1
lines changed

5 files changed

+588
-1
lines changed
Binary file not shown.

Zolian.Server.Base/GameScripts/Affects/DebuffAffects.cs

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,45 @@ public override void OnItemChange(Aisling affected, Debuff debuff)
6464
}
6565
}
6666

67+
public class DebuffEclipseSeal : Debuff
68+
{
69+
private static double AcModifer => 0.15; // 85% (Armor * Modifier)
70+
public override byte Icon => 226;
71+
public override int Length => 600;
72+
public override string Name => "Eclipse Seal";
73+
74+
public override void OnApplied(Sprite affected, Debuff debuff)
75+
{
76+
if (affected.Debuffs.TryAdd(debuff.Name, debuff))
77+
{
78+
DebuffSpell = debuff;
79+
DebuffSpell.TimeLeft = DebuffSpell.Length;
80+
affected.SealedModifier = AcModifer;
81+
}
82+
83+
if (affected is not Aisling aisling) return;
84+
InsertDebuff(aisling, debuff);
85+
aisling.Client.SendAttributes(StatUpdateType.Secondary);
86+
}
87+
88+
public override void OnEnded(Sprite affected, Debuff debuff)
89+
{
90+
affected.Debuffs.TryRemove(debuff.Name, out _);
91+
affected.SealedModifier = 0;
92+
93+
if (affected is not Aisling aisling) return;
94+
aisling.Client.SendEffect(byte.MinValue, Icon);
95+
aisling.Client.SendServerMessage(ServerMessageType.OrangeBar1, "The eclipse has ended");
96+
DeleteDebuff(aisling, debuff);
97+
aisling.Client.SendAttributes(StatUpdateType.Secondary);
98+
}
99+
100+
public override void OnItemChange(Aisling affected, Debuff debuff)
101+
{
102+
affected.SealedModifier = AcModifer;
103+
}
104+
}
105+
67106
public class DebuffSunSeal : Debuff
68107
{
69108
private static double AcModifer => 0.25; // 75% (Armor * Modifier)
@@ -220,6 +259,45 @@ public override void OnItemChange(Aisling affected, Debuff debuff)
220259
}
221260
}
222261

262+
public class DebuffUasCradh : Debuff
263+
{
264+
private static StatusOperator AcModifer => new(Operator.Remove, 130);
265+
public override byte Icon => 211;
266+
public override int Length => 500;
267+
public override string Name => "Uas Cradh";
268+
269+
public override void OnApplied(Sprite affected, Debuff debuff)
270+
{
271+
if (affected.Debuffs.TryAdd(debuff.Name, debuff))
272+
{
273+
DebuffSpell = debuff;
274+
DebuffSpell.TimeLeft = DebuffSpell.Length;
275+
affected.BonusAc -= AcModifer.Value.Item2;
276+
}
277+
278+
if (affected is not Aisling aisling) return;
279+
InsertDebuff(aisling, debuff);
280+
aisling.Client.SendAttributes(StatUpdateType.Secondary);
281+
}
282+
283+
public override void OnEnded(Sprite affected, Debuff debuff)
284+
{
285+
affected.Debuffs.TryRemove(debuff.Name, out _);
286+
affected.BonusAc += AcModifer.Value.Item2;
287+
288+
if (affected is not Aisling aisling) return;
289+
aisling.Client.SendEffect(byte.MinValue, Icon);
290+
aisling.Client.SendServerMessage(ServerMessageType.OrangeBar1, "The curse lifted.");
291+
DeleteDebuff(aisling, debuff);
292+
aisling.Client.SendAttributes(StatUpdateType.Secondary);
293+
}
294+
295+
public override void OnItemChange(Aisling affected, Debuff debuff)
296+
{
297+
affected.BonusAc -= AcModifer.Value.Item2;
298+
}
299+
}
300+
223301
public class DebuffCriochArdCradh : Debuff
224302
{
225303
private static StatusOperator AcModifer => new(Operator.Remove, 80);
@@ -1683,6 +1761,84 @@ private static void ApplyPoison(Sprite affected, Debuff debuff)
16831761
}
16841762
}
16851763

1764+
public class DebuffUasPoison : Debuff
1765+
{
1766+
private static double Modifier => 0.13;
1767+
public override byte Icon => 201;
1768+
public override int Length => 400;
1769+
public override string Name => "Uas Puinsein";
1770+
1771+
public override void OnApplied(Sprite affected, Debuff debuff)
1772+
{
1773+
if (affected is Aisling { PoisonImmunity: true } immuneCheck)
1774+
{
1775+
immuneCheck.Client.SendServerMessage(ServerMessageType.ActiveMessage, "{=qYou are immune to Poison");
1776+
return;
1777+
}
1778+
1779+
if (affected.Debuffs.TryAdd(debuff.Name, debuff))
1780+
{
1781+
DebuffSpell = debuff;
1782+
DebuffSpell.TimeLeft = DebuffSpell.Length;
1783+
}
1784+
1785+
if (affected is Damageable damageable)
1786+
{
1787+
damageable.SendAnimationNearby(25, null, affected.Serial);
1788+
damageable.SendTargetedClientMethod(PlayerScope.NearbyAislings, client => client.SendSound(34, false));
1789+
}
1790+
1791+
if (affected is not Aisling aisling) return;
1792+
aisling.RegenTimerDisabled = true;
1793+
InsertDebuff(aisling, debuff);
1794+
aisling.Client.SendAttributes(StatUpdateType.Secondary);
1795+
}
1796+
1797+
public override void OnDurationUpdate(Sprite affected, Debuff debuff)
1798+
{
1799+
base.OnDurationUpdate(affected, debuff);
1800+
ApplyPoison(affected, debuff);
1801+
1802+
if (affected is Damageable damageable)
1803+
damageable.SendAnimationNearby(25, null, affected.Serial);
1804+
1805+
if (affected is not Aisling aisling) return;
1806+
aisling.Client.SendServerMessage(ServerMessageType.OrangeBar1, "Poisoned");
1807+
aisling.Client.SendAttributes(StatUpdateType.Vitality);
1808+
}
1809+
1810+
public override void OnEnded(Sprite affected, Debuff debuff)
1811+
{
1812+
affected.Debuffs.TryRemove(debuff.Name, out _);
1813+
if (affected is not Aisling aisling) return;
1814+
aisling.RegenTimerDisabled = false;
1815+
aisling.Client.SendEffect(byte.MinValue, Icon);
1816+
aisling.Client.SendServerMessage(ServerMessageType.OrangeBar1, "You're starting to feel better");
1817+
DeleteDebuff(aisling, debuff);
1818+
aisling.Client.SendAttributes(StatUpdateType.Vitality);
1819+
}
1820+
1821+
private static void ApplyPoison(Sprite affected, Debuff debuff)
1822+
{
1823+
if (affected.CurrentHp <= affected.MaximumHp * 0.04)
1824+
{
1825+
debuff.OnEnded(affected, debuff);
1826+
return;
1827+
}
1828+
1829+
var cap = (int)(affected.CurrentHp * Modifier);
1830+
1831+
if (affected is Monster monster)
1832+
{
1833+
if (cap > 65000) cap = 65000;
1834+
monster.CurrentHp -= cap;
1835+
return;
1836+
}
1837+
1838+
if (cap > 0) affected.CurrentHp -= cap;
1839+
}
1840+
}
1841+
16861842
public class DebuffArdPoison : Debuff
16871843
{
16881844
private static double Modifier => 0.08;

0 commit comments

Comments
 (0)