Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
 public ShopContainer(int npcId, ItemsContainer items)
 {
     this.npcId = npcId;
     this.items = items;
 }