Example #1
0
        //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))));
            }
        }