@@ -64,6 +64,45 @@ public override void OnItemChange(Aisling affected, Debuff debuff)
64
64
}
65
65
}
66
66
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
+
67
106
public class DebuffSunSeal : Debuff
68
107
{
69
108
private static double AcModifer => 0.25 ; // 75% (Armor * Modifier)
@@ -220,6 +259,45 @@ public override void OnItemChange(Aisling affected, Debuff debuff)
220
259
}
221
260
}
222
261
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
+
223
301
public class DebuffCriochArdCradh : Debuff
224
302
{
225
303
private static StatusOperator AcModifer => new ( Operator . Remove , 80 ) ;
@@ -1683,6 +1761,84 @@ private static void ApplyPoison(Sprite affected, Debuff debuff)
1683
1761
}
1684
1762
}
1685
1763
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
+
1686
1842
public class DebuffArdPoison : Debuff
1687
1843
{
1688
1844
private static double Modifier => 0.08 ;
0 commit comments