@@ -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+
67106public 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+
223301public 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+
16861842public class DebuffArdPoison : Debuff
16871843{
16881844 private static double Modifier => 0.08 ;
0 commit comments