//Calculates bonus EXP for Links and Chains public static void AddBattleBonusEXP(Player attacker, BattleNpc defender, CommandResultContainer actionContainer) { ushort baseExp = GetBaseEXP(attacker, defender); //Only bother calculating the rest if there's actually exp to be gained. //0 exp sends no message if (baseExp > 0) { int totalBonus = 0;//GetMod(Modifier.bonusEXP) var linkCount = defender.GetMobMod(MobModifier.LinkCount); totalBonus += GetLinkBonus((byte)Math.Min(linkCount, 255)); StatusEffect effect = attacker.statusEffects.GetStatusEffectById((uint)StatusEffectId.EXPChain); ushort expChainNumber = 0; uint timeLimit = 100; if (effect != null) { expChainNumber = effect.GetTier(); timeLimit = (uint)(GetChainTimeLimit(expChainNumber)); actionContainer?.AddEXPAction(new CommandResult(attacker.actorId, 33919, 0, expChainNumber, (byte)timeLimit)); } totalBonus += GetChainBonus(expChainNumber); StatusEffect newChain = Server.GetWorldManager().GetStatusEffect((uint)StatusEffectId.EXPChain); newChain.SetSilent(true); newChain.SetDuration(timeLimit); newChain.SetTier((byte)(Math.Min(expChainNumber + 1, 255))); attacker.statusEffects.AddStatusEffect(newChain, attacker, true, true); actionContainer?.AddEXPActions(attacker.AddExp(baseExp, (byte)attacker.GetClass(), (byte)(totalBonus.Min(255)))); } }