@@ -1279,15 +1279,15 @@ public void SetLevel(int level, bool resetExperience = false)
12791279 public void AddLevels ( int levels = 1 , bool resetExperience = true )
12801280 {
12811281 ClassBase ? classDescriptor = null ;
1282- var messageList = new List < string > ( ) ;
1283- int targetLevel = Math . Clamp ( Level + levels , 1 , Options . Instance . Player . MaxLevel ) ;
1284-
1282+ List < ( string , Color ) > messageList = [ ] ;
1283+
1284+ var targetLevel = Math . Clamp ( Level + levels , 1 , Options . Instance . Player . MaxLevel ) ;
12851285 if ( levels > 0 )
12861286 {
12871287 while ( Level < targetLevel )
12881288 {
12891289 SetLevel ( Level + 1 , resetExperience ) ;
1290- messageList . Add ( Strings . Player . LevelUp . ToString ( Level ) ) ;
1290+ messageList . Add ( ( Strings . Player . LevelUp . ToString ( Level ) , CustomColors . Combat . LevelUp ) ) ;
12911291
12921292 if ( ( classDescriptor ? . Id == ClassId || ClassBase . TryGet ( ClassId , out classDescriptor ) ) && classDescriptor ? . Spells != default )
12931293 {
@@ -1300,7 +1300,9 @@ public void AddLevels(int levels = 1, bool resetExperience = true)
13001300
13011301 var spellInstance = new Spell ( spell . Id ) ;
13021302 _ = TryTeachSpell ( spellInstance , false ) ;
1303- messageList . Add ( Strings . Player . LearnedSpell . ToString ( spellInstance . SpellName ) ) ;
1303+ messageList . Add (
1304+ ( Strings . Player . LearnedSpell . ToString ( spellInstance . SpellName ) , CustomColors . Alerts . Info )
1305+ ) ;
13041306 }
13051307 }
13061308
@@ -1313,7 +1315,7 @@ public void AddLevels(int levels = 1, bool resetExperience = true)
13131315 while ( targetLevel < Level )
13141316 {
13151317 SetLevel ( Level - 1 ) ;
1316- messageList . Add ( Strings . Player . LevelLost . ToString ( Level ) ) ;
1318+ messageList . Add ( ( Strings . Player . LevelLost . ToString ( Level ) , CustomColors . Combat . LevelLost ) ) ;
13171319
13181320 if ( ( classDescriptor ? . Id == ClassId || ClassBase . TryGet ( ClassId , out classDescriptor ) ) && classDescriptor ? . Spells != default )
13191321 {
@@ -1325,44 +1327,39 @@ public void AddLevels(int levels = 1, bool resetExperience = true)
13251327 }
13261328
13271329 ForgetSpell ( FindSpell ( spell . Id ) , true ) ;
1328- messageList . Add ( Strings . Player . ForgotSpell . ToString ( SpellBase . GetName ( spell . Id ) ) ) ;
1330+ messageList . Add (
1331+ ( Strings . Player . ForgotSpell . ToString ( SpellBase . GetName ( spell . Id ) ) , CustomColors . Alerts . Info )
1332+ ) ;
13291333 }
13301334 }
13311335
13321336 StartCommonEventsWithTrigger ( CommonEventTrigger . LevelDown ) ;
1333- PacketSender . SendActionMsg ( this , Strings . Combat . LevelDown , CustomColors . Combat . LevelDown ) ;
1334- levels ++ ;
1337+ PacketSender . SendActionMsg ( this , Strings . Combat . LevelDown , CustomColors . Combat . LevelLost ) ;
13351338 }
13361339 }
13371340
1338- foreach ( var message in messageList )
1341+ RecalculateStatsAndPoints ( ) ;
1342+ UnequipInvalidItems ( ) ;
1343+ PacketSender . SendExperience ( this ) ;
1344+ PacketSender . SendPointsTo ( this ) ;
1345+ PacketSender . SendPlayerSpells ( this ) ;
1346+ PacketSender . SendEntityDataToProximity ( this ) ;
1347+
1348+ if ( StatPoints > 0 )
13391349 {
1340- PacketSender . SendChatMsg (
1341- this ,
1342- message ,
1343- ChatMessageType . Experience ,
1344- levels > 0 ? CustomColors . Combat . LevelUp : CustomColors . Combat . LevelDown ,
1345- Name
1346- ) ;
1350+ messageList . Add ( ( Strings . Player . StatPoints . ToString ( StatPoints ) , CustomColors . Combat . StatPoints ) ) ;
13471351 }
13481352
1349- if ( StatPoints > 0 )
1353+ foreach ( var ( message , color ) in messageList )
13501354 {
13511355 PacketSender . SendChatMsg (
13521356 this ,
1353- Strings . Player . StatPoints . ToString ( StatPoints ) ,
1357+ message ,
13541358 ChatMessageType . Experience ,
1355- CustomColors . Combat . StatPoints ,
1359+ color ,
13561360 Name
13571361 ) ;
13581362 }
1359-
1360- RecalculateStatsAndPoints ( ) ;
1361- UnequipInvalidItems ( ) ;
1362- PacketSender . SendExperience ( this ) ;
1363- PacketSender . SendPointsTo ( this ) ;
1364- PacketSender . SendPlayerSpells ( this ) ;
1365- PacketSender . SendEntityDataToProximity ( this ) ;
13661363 }
13671364
13681365 public void GiveExperience ( long amount )
@@ -5459,17 +5456,24 @@ public void SwapSpells(int spell1, int spell2)
54595456 PacketSender . SendPlayerSpellUpdate ( this , spell2 ) ;
54605457 }
54615458
5462- public void ForgetSpell ( int spellSlot , bool removeBoundSpell = false )
5459+ public bool ForgetSpell ( int spellSlot , bool removeBoundSpell = false )
54635460 {
5461+ if ( spellSlot < 0 || Spells . Count <= spellSlot )
5462+ {
5463+ return false ;
5464+ }
5465+
54645466 if ( ! SpellBase . Get ( Spells [ spellSlot ] . SpellId ) . Bound || removeBoundSpell )
54655467 {
54665468 Spells [ spellSlot ] . Set ( Spell . None ) ;
54675469 PacketSender . SendPlayerSpellUpdate ( this , spellSlot ) ;
54685470 UnequipInvalidItems ( ) ;
5471+ return true ;
54695472 }
54705473 else
54715474 {
54725475 PacketSender . SendChatMsg ( this , Strings . Combat . TryForgetBoundSpell , ChatMessageType . Spells ) ;
5476+ return false ;
54735477 }
54745478 }
54755479
0 commit comments