/// <summary> /// Determines if the player has advanced a level /// </summary> private void CheckForLevelup() { var xpTable = DatManager.PortalDat.XpTable; var maxLevel = GetMaxLevel(); if (Level >= maxLevel) { return; } var startingLevel = Level; bool creditEarned = false; // increases until the correct level is found while ((ulong)(TotalExperience ?? 0) >= xpTable.CharacterLevelXPList[(Level ?? 0) + 1]) { Level++; // increase the skill credits if the chart allows this level to grant a credit if (xpTable.CharacterLevelSkillCreditList[Level ?? 0] > 0) { AvailableSkillCredits += (int)xpTable.CharacterLevelSkillCreditList[Level ?? 0]; TotalSkillCredits += (int)xpTable.CharacterLevelSkillCreditList[Level ?? 0]; creditEarned = true; } // break if we reach max if (Level == maxLevel) { PlayParticleEffect(PlayScript.WeddingBliss, Guid); break; } } if (Level > startingLevel) { var message = (Level == maxLevel) ? $"You have reached the maximum level of {Level}!" : $"You are now level {Level}!"; message += (AvailableSkillCredits > 0) ? $"\nYou have {AvailableExperience:#,###0} experience points and {AvailableSkillCredits} skill credits available to raise skills and attributes." : $"\nYou have {AvailableExperience:#,###0} experience points available to raise skills and attributes."; var levelUp = new GameMessagePrivateUpdatePropertyInt(this, PropertyInt.Level, Level ?? 1); var currentCredits = new GameMessagePrivateUpdatePropertyInt(this, PropertyInt.AvailableSkillCredits, AvailableSkillCredits ?? 0); if (Level != maxLevel && !creditEarned) { var nextLevelWithCredits = 0; for (int i = (Level ?? 0) + 1; i <= maxLevel; i++) { if (xpTable.CharacterLevelSkillCreditList[i] > 0) { nextLevelWithCredits = i; break; } } message += $"\nYou will earn another skill credit at level {nextLevelWithCredits}."; } if (Fellowship != null) { Fellowship.OnFellowLevelUp(this); } if (AllegianceNode != null) { AllegianceNode.OnLevelUp(); } Session.Network.EnqueueSend(levelUp); SetMaxVitals(); // play level up effect PlayParticleEffect(PlayScript.LevelUp, Guid); Session.Network.EnqueueSend(new GameMessageSystemChat(message, ChatMessageType.Advancement), currentCredits); } }
/// <summary> /// Determines if the player has advanced a level /// </summary> private void CheckForLevelup() { var xpTable = DatManager.PortalDat.XpTable; var maxLevel = GetMaxLevel(); if (Level >= maxLevel) { return; } var startingLevel = Level; bool creditEarned = false; // if level is not under 275(false) do normal stuff, otherwise if over 274(true) do custom function. // increases until the correct level is found while ((ulong)(TotalExperience ?? 0) >= ((Level < 275) ? xpTable.CharacterLevelXPList[(Level ?? 0) + 1] : (ulong)Catch275(false, startingLevel))) { Level++; // increase the skill credits if the chart allows this level to grant a credit // gotta limit this to levels 275 and under otherwise causes crash. if (Level <= 275) { if (xpTable.CharacterLevelSkillCreditList[Level ?? 0] > 0) { AvailableSkillCredits += (int)xpTable.CharacterLevelSkillCreditList[Level ?? 0]; TotalSkillCredits += (int)xpTable.CharacterLevelSkillCreditList[Level ?? 0]; creditEarned = true; } } // if a player is level 300 or higher and level is also divisible by 30 evenly give a skill credit. if (Level > 275) { if (Level >= 300 && Level % 30 == 0) { AvailableSkillCredits += 1; TotalSkillCredits += 1; creditEarned = true; } } // break if we reach max if (Level == maxLevel) { PlayParticleEffect(PlayScript.WeddingBliss, Guid); break; } } if (Level > startingLevel) { var message = (Level == maxLevel) ? $"You have reached the maximum level of {Level}!" : $"You are now level {Level}!"; message += (AvailableSkillCredits > 0) ? $"\nYou have {AvailableExperience:#,###0} experience points and {AvailableSkillCredits} skill credits available to raise skills and attributes." : $"\nYou have {AvailableExperience:#,###0} experience points available to raise skills and attributes."; var levelUp = new GameMessagePrivateUpdatePropertyInt(this, PropertyInt.Level, Level ?? 1); var currentCredits = new GameMessagePrivateUpdatePropertyInt(this, PropertyInt.AvailableSkillCredits, AvailableSkillCredits ?? 0); // 275 and under code. if (Level != maxLevel && !creditEarned && Level <= 275) { var nextLevelWithCredits = 0; for (int i = (Level ?? 0) + 1; i <= maxLevel; i++) { if (xpTable.CharacterLevelSkillCreditList[i] > 0) { nextLevelWithCredits = i; break; } } message += $"\nYou will earn another skill credit at level {nextLevelWithCredits}."; } if (Fellowship != null) { Fellowship.OnFellowLevelUp(this); } if (AllegianceNode != null) { AllegianceNode.OnLevelUp(); } Session.Network.EnqueueSend(levelUp); SetMaxVitals(); // play level up effect PlayParticleEffect(PlayScript.LevelUp, Guid); Session.Network.EnqueueSend(new GameMessageSystemChat(message, ChatMessageType.Advancement), currentCredits); } }