public void DealDamage(Character character, Character target, AttackData attack) { StatsContainer targetContainer = target.GetStatsContainer(); if (target is Mob) { targetContainer.SetStat(StatType.TARGET_ID, (int)character.Id); target.SelectionState = SelectionState.ATTACK; } int health = (int)targetContainer.GetStat(StatType.HEALTH).value; targetContainer.SetStat(StatType.HEALTH, health - attack.damage); foreach (var item in charactersManager.GetClientsInRange(character.Position, 50)) { Server.Instance.SendData(item.Value.ip, new DamageInfoPacket(attack)); } if (target.IsDead) { if (target is Player) { target.GetStatsContainer().SetStat(StatType.HEALTH, (int)30); short posX = (short)KingdomsManager.kingdoms[(byte)target.GetStat(StatType.KINGDOM)].spawnPoint.X; short posZ = (short)KingdomsManager.kingdoms[(byte)target.GetStat(StatType.KINGDOM)].spawnPoint.Z; target.SnapToPosition((short)posX, (short)posZ); } else { ServerManager.Instance.CharactersManager.DespawnCharacter(target); } character.SelectionState = SelectionState.SELECTION; target.SelectionState = SelectionState.SELECTION; if (character is Player) { StatsContainer killerContainer = character.GetStatsContainer(); int exp = (int)killerContainer.GetStat(StatType.EXPERIENCE).value; killerContainer.SetStat(StatType.EXPERIENCE, exp + 25); if ((int)killerContainer.GetStat(StatType.EXPERIENCE).value >= 100) { killerContainer.SetStat(StatType.EXPERIENCE, 0); short level = (short)killerContainer.GetStat(StatType.LEVEL).value; killerContainer.SetStat(StatType.LEVEL, (short)(level + 1)); } int goldReward = new Random().Next(20, 100); character.AddStatInt(StatType.GOLD, goldReward); int dropOrNot = new Random().Next(0, 4); ItemsContainer inventory = character.GetItemsContainer(ItemsContainerId.INVENTORY); if (inventory != null && dropOrNot == 0) { int freeSlot = inventory.GetFreeSlot(); if (freeSlot != -1) { inventory.AddItem(freeSlot, ServerManager.Instance.ItemsManager.CreateItemData(new ItemData() { baseId = new Random().Next(1, 8), })); } } ServerManager.Instance.QuestsManager.ExecuteEventsForAll(QuestEvent.MONSTER_DEFEAT, character.Id, target.BaseId); } if (character is Mob) { Mob m = character as Mob; m.SnapToPosition(m.StartPosX, m.StartPosZ); } } }
public ShopContainer(int npcId, ItemsContainer items) { this.npcId = npcId; this.items = items; }