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); }
/// <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); } }
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, }); } } }