Exemplo n.º 1
0
        private void UpdatePlayerStats(Player player)
        {
            CreatureBaseStats baseStats = GetBaseStats(player);

            baseStats.CopyTo(player.GameStats);

            int itemsAttack  = 0,
                itemsDefense = 10,
                itemsImpact  = 1,
                itemsBalance = 1;

            lock (player.Inventory.ItemsLock)
            {
                for (int i = 0; i < 20; i++)
                {
                    if (!player.Inventory.Items.ContainsKey(i))
                    {
                        continue;
                    }

                    ItemTemplate itemTemplate = player.Inventory.Items[i].ItemTemplate;

                    EquipmentStat equipmentStat = itemTemplate.CatigorieStat as EquipmentStat;
                    if (equipmentStat != null)
                    {
                        itemsAttack  += equipmentStat.MinAtk;
                        itemsDefense += equipmentStat.Def;
                        itemsImpact  += equipmentStat.Impact;
                        itemsBalance += equipmentStat.Balance;
                    }

                    if (itemTemplate.Passivities != null)
                    {
                        foreach (var passivity in itemTemplate.Passivities)
                        {
                            player.GameStats.Passivities.Add(passivity);
                        }
                    }
                }
            }

            player.GameStats.Attack  = (int)(baseStats.Attack + (0.03f * baseStats.Power + 3) * itemsAttack);
            player.GameStats.Defense = (int)(baseStats.Defense + (0.01f * baseStats.Endurance + 0.5) * itemsDefense);
            player.GameStats.Impact  = (int)(itemsImpact * (0.01f * player.GameStats.ImpactFactor + 0.05));
            player.GameStats.Balance = (int)(itemsBalance * (0.01f * player.GameStats.BalanceFactor + 0.07));

            if (player.PlayerMount != 0 && Data.Data.Mounts.ContainsKey(player.PlayerMount))
            {
                player.GameStats.Movement = (short)Data.Data.Mounts[player.PlayerMount].SpeedModificator;
            }
            else
            {
                player.GameStats.Movement = baseStats.Movement;
            }

            player.EffectsImpact.ResetChanges(player);
            player.EffectsImpact.ApplyChanges(player.GameStats);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Remove Stat and attribute to character base on oldEquipment
 /// </summary>
 /// <param name="newEquipment">New equipment.</param>
 public void GearOff(EquipmentStat newEquipment)
 {
     for (int i = 0; i < 5; i++)
     {
         statTable.StatChange(newEquipment.stats[i] * -1.0f, i);
     }
     for (int i = 0; i < 12; i++)
     {
         statTable.AttributeChange(newEquipment.attributes[i] * -1.0f, i);
     }
 }
Exemplo n.º 3
0
        private static void AppendNpcStats(List <CreatureBaseStats> stats)
        {
            if (File.Exists("data/items.bin"))
            {
                File.Delete("data/items.bin");
            }
            File.Copy(Path.GetFullPath("../../../../datapack/gameserver/data/npc_templates.bin"), "data/items.bin");

            Data.Data.LoadItemTemplates();

            List <int> maxDefense = GetMaxByLevel(
                t =>
            {
                EquipmentStat equipmentStat = t.CatigorieStat as EquipmentStat;
                if (equipmentStat != null)
                {
                    return(equipmentStat.Def);
                }
                return(-1);
            });

            List <int> maxImpact = GetMaxByLevel(
                t =>
            {
                EquipmentStat equipmentStat = t.CatigorieStat as EquipmentStat;
                if (equipmentStat != null)
                {
                    return(equipmentStat.Impact);
                }
                return(-1);
            });

            List <int> maxBalance = GetMaxByLevel(
                t =>
            {
                EquipmentStat equipmentStat = t.CatigorieStat as EquipmentStat;
                if (equipmentStat != null)
                {
                    return(equipmentStat.Balance);
                }
                return(-1);
            });

            if (File.Exists("data/npc_templates.bin"))
            {
                File.Delete("data/npc_templates.bin");
            }
            File.Copy(Path.GetFullPath("../../../../datapack/gameserver/data/npc_templates.bin"), "data/npc_templates.bin");

            Data.Data.LoadNpcTemplates();

            int critChanse    = 0,
                critResist    = 0,
                power         = 0,
                endurance     = 0,
                impactFactor  = 0,
                balanceFactor = 0,
                resist        = 0;

            for (int i = 0; i < 8; i++)
            {
                critChanse    += stats[i].CritChanse;
                critResist    += stats[i].CritResist;
                power         += stats[i].Power;
                endurance     += stats[i].Endurance;
                impactFactor  += stats[i].ImpactFactor;
                balanceFactor += stats[i].BalanceFactor;
                resist        += stats[i].WeakeningResist;
            }

            critChanse    /= 8;
            critResist    /= 8;
            power         /= 8;
            endurance     /= 8;
            impactFactor  /= 8;
            balanceFactor /= 8;
            resist        /= 8;

            foreach (var f1 in Data.Data.NpcTemplates.Values)
            {
                foreach (var template in f1.Values)
                {
                    stats.Add(
                        new CreatureBaseStats
                    {
                        NpcHuntingZoneId = template.HuntingZoneId,
                        NpcId            = template.Id,
                        NpcName          = template.Name,
                        Level            = template.Level,

                        HpBase = (int)(1000 * (1 + template.Level * 0.33)
                                       * (template.Size == NpcSize.Small ? 0.26 : 1)
                                       * (template.Size == NpcSize.Large ? 1.41 : 1)
                                       * (template.IsFreeNamed ? 1.71 : 1)
                                       * (template.IsElite ? 2.121 : 1)
                                       * (template.IsVillager ? 50 : 1)
                                       ),

                        Attack = 1,

                        Defense = (int)(maxDefense[template.Level] * 0.79
                                        * (template.Size == NpcSize.Small ? 0.59 : 1)
                                        ),

                        Impact     = maxImpact[template.Level] * 2,
                        Balance    = maxBalance[template.Level] * 2,
                        CritChanse = critChanse,
                        CritResist = critResist,
                        CritPower  = 2,

                        Power         = power,
                        Endurance     = endurance,
                        ImpactFactor  = impactFactor,
                        BalanceFactor = balanceFactor,
                        AttackSpeed   = 100,
                        Movement      = (short)template.Shape.WalkSpeed,

                        WeakeningResist = resist,
                        PeriodicResist  = resist,
                        StunResist      = resist,
                    });
                }
            }
        }