예제 #1
0
        /// <summary>
        /// Handles the actual buying of an item.
        /// </summary>
        /// <param name="player">The player.</param>
        /// <param name="itemId">The item.</param>
        /// <param name="amount">The amount.</param>
        /// <param name="money">Boolean indicating whether the buying is by money or not.</param>
        /// <returns>True if the buy was a success.</returns>
        private static bool HandleBuy(Models.Entities.Player player, uint itemId, uint amount, bool money)
        {
            var tempItem = Collections.ItemCollection.CreateItemById(itemId);
            var price    = money ?
                           tempItem.DbItem.Price * amount :
                           tempItem.DbItem.CPPrice * amount;

            if (money && player.Money < price || !money && player.CPs < price)
            {
                player.SendFormattedSystemMessage("LOW_MONEY", true, price, money ? "silvers" : "CPs", amount, tempItem.DbItem.Name);
                return(true);
            }

            player.AddActionLog("Buy", "IsMoney : " + money + " : " + itemId);

            if (money)
            {
                player.Money -= price;
            }
            else
            {
                player.CPs -= price;
            }

            for (int i = 0; i < amount; i++)
            {
                if (!player.Inventory.Add(itemId))
                {
                    player.ClientSocket.Disconnect(string.Format(Drivers.Messages.Errors.FAIL_BUY_ITEMS, itemId, amount, i, tempItem.DbItem.Price, price));
                    return(false);
                }
            }

            return(true);
        }
예제 #2
0
        public static bool HandleQueryEquipments(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet)
        {
            Models.Entities.Player viewPlayer = Collections.PlayerCollection.GetPlayerByClientId(packet.Data1);
            if (viewPlayer != null)
            {
                player.ClientSocket.Send(viewPlayer.GetSpawnPacket());
                foreach (var item in viewPlayer.Equipments.GetAll())
                {
                    item.ViewItem(viewPlayer, player);
                }

                if (viewPlayer.LoggedIn)
                {
                    viewPlayer.SendFormattedSystemMessage("VIEW_EQUIPMENTS", true, player.Name);
                }

                player.ClientSocket.Send(new Models.Packets.Misc.StringPacket
                {
                    String = viewPlayer.Spouse,
                    Action = Enums.StringAction.QueryMate
                });
            }

            return(true);
        }
예제 #3
0
        public static void Handle(Models.Entities.Player player)
        {
            player.AddActionLog("Login");

            if (player.HP == 0)
            {
                player.Revive(false);
            }

            player.SendFormattedSystemMessage("MOTD", true, player.Name);
            Console.WriteLine(Drivers.Messages.LOGIN_SUCCESS, player.Name);
        }
예제 #4
0
        public static bool Handle(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet)
        {
            var arenaBattle = player.Battle as Controllers.Arena.ArenaBattleController;

            if (player.Battle != null && !(player.Battle is Controllers.Arena.ArenaBattleController))
            {
                return(true);
            }

            Models.Items.Item item;
            if (!player.Inventory.TryGetItem(packet.ClientId, out item))
            {
                Database.Dal.Accounts.Ban(
                    player.DbPlayer.Account, Drivers.Messages.INVALID_USE_ITEM,
                    Database.Models.DbAccount.BanRangeType.Perm);
                player.ClientSocket.Disconnect(Drivers.Messages.INVALID_USE_ITEM);
                return(false);
            }

            if (item.IsMisc)
            {
                player.AddActionLog("ItemUsage", item.DbItem.Id);
                if (!Collections.ItemScriptCollection.Invoke(player, item.DbItem.Id))
                {
                    player.SendFormattedSystemMessage("ITEM_USAGE_NOT_FOUND", true, item.DbItem.Name, item.DbItem.Id);
                }
            }
            else
            {
                var position = (Enums.ItemPosition)packet.Data1;
                if (position != Enums.ItemPosition.Inventory)
                {
                    player.Equipments.Equip(item, position, true);
                }
            }

            return(true);
        }
예제 #5
0
        public static bool Handle(Models.Entities.Player player, Models.Packets.Message.MessagePacket packet)
        {
            if (packet.To == player.Name)
            {
                return(true);
            }

            var whisperPlayer = Collections.PlayerCollection.GetPlayerByName(packet.To);

            if (whisperPlayer != null)
            {
                packet.FromMesh = player.Mesh;
                packet.ToMesh   = whisperPlayer.Mesh;

                whisperPlayer.ClientSocket.Send(packet);
            }
            else
            {
                player.SendFormattedSystemMessage("PLAYER_NOT_FOUND_WHISPER", false, packet.To);

                if (Database.Dal.Players.GetPlayerByName(packet.To, Drivers.Settings.WorldSettings.Server) != null)
                {
                    var dbWhisper = (new Database.Models.DbWhisper
                    {
                        From = player.Name,
                        To = packet.To,
                        Message = packet.Message,
                        Mesh = player.Mesh,
                        Server = Drivers.Settings.WorldSettings.Server
                    })
                                    .Create();
                }
            }

            return(true);
        }
예제 #6
0
        /// <summary>
        /// Invokes the dialog tied with the npc.
        /// </summary>
        /// <param name="player">The player.</param>
        /// <param name="option">The option.</param>
        public void Invoke(Models.Entities.Player player, byte option)
        {
            var invokeId = Npc.ClientId;

            if (player.Map.IsDynamic)
            {
                if (player.Houses.Count > 0 && invokeId != 200000)
                {
                    var houseId = player.Houses.GetAll()
                                  .Where(house => house.DynamicMapId == player.MapId)
                                  .Select(house => house.DbPlayerHouse.MapId).FirstOrDefault() + 100000;

                    if (houseId == Npc.ClientId)
                    {
                        invokeId = 100000;
                    }
                }
            }

            if (!Collections.NPCScriptCollection.Invoke(player, invokeId, option))
            {
                player.SendFormattedSystemMessage("NPC_NOT_FOUND", true, invokeId);
            }
        }