Пример #1
0
        /// <summary>
        /// Applies death penality if enabled.
        /// </summary>
        /// <param name="player">Death player entity.</param>
        private void ProcessDeathPenality(IPlayerEntity player)
        {
            if (_worldConfiguration.Death.DeathPenalityEnabled)
            {
                decimal expLossPercent = _gameResources.Penalities.GetDecExpPenality(player.Object.Level);

                if (expLossPercent <= 0)
                {
                    return;
                }

                player.PlayerData.Experience -= player.PlayerData.Experience * (long)(expLossPercent / 100m);
                player.PlayerData.DeathLevel  = player.Object.Level;

                if (player.PlayerData.Experience < 0)
                {
                    if (_gameResources.Penalities.GetLevelDownPenality(player.Object.Level))
                    {
                        CharacterExpTableData previousLevelExp = _gameResources.ExpTables.GetCharacterExp(player.Object.Level - 1);

                        player.Object.Level--;
                        player.PlayerData.Experience = previousLevelExp.Exp + player.PlayerData.Experience;
                    }
                    else
                    {
                        player.PlayerData.Experience = 0;
                    }
                }

                _playerPacketFactory.SendPlayerExperience(player);
            }
        }
Пример #2
0
        /// <inheritdoc />
        public void GiveExeperience(IPlayerEntity player, long experience)
        {
            if (player.PlayerData.Mode.HasFlag(ModeType.MODE_EXPUP_STOP))
            {
                return;
            }

            var exp = CalculateExtraExperience(player, experience);

            // TODO: experience to party

            if (GiveExperienceToPlayer(player, exp))
            {
                _moverPacketFactory.SendUpdateAttributes(player, DefineAttributes.HP, player.Attributes[DefineAttributes.HP]);
                _moverPacketFactory.SendUpdateAttributes(player, DefineAttributes.MP, player.Attributes[DefineAttributes.MP]);
                _moverPacketFactory.SendUpdateAttributes(player, DefineAttributes.FP, player.Attributes[DefineAttributes.FP]);
                _playerPacketFactory.SendPlayerSetLevel(player, player.Object.Level);
                _playerPacketFactory.SendPlayerStatsPoints(player);
            }

            _playerPacketFactory.SendPlayerExperience(player);
            // TODO: send packet to friends, messenger, guild, couple, party, etc...
        }