コード例 #1
0
        /// <summary>
        /// Attempts to create a guild.
        /// </summary>
        /// <param name="player">The player who becomes the leader.</param>
        /// <param name="name">The name of the guild.</param>
        /// <returns>True if the guild was created.</returns>
        public static bool Create(Models.Entities.Player player, string name)
        {
            if (GetGuildByName(name) != null)
            {
                return(false);
            }

            var guild = new Guild(new Database.Models.DbGuild
            {
                Name             = name,
                Announcement     = Drivers.Messages.NEW_GUILD_ANNOUNCEMENT,
                AnnouncementDate = Drivers.Time.GetTime(Drivers.Time.TimeType.Day),
                Fund             = 0,
                CPsFund          = 0,
                Level            = 0,
                Server           = Drivers.Settings.WorldSettings.Server
            });

            if (guild.DbGuild.Create() && _guilds.TryAdd(guild.Id, guild))
            {
                guild.AddMember(player, Enums.GuildRank.GuildLeader, false);

                player.UpdateClientGuild();

                player.UpdateScreen(true);

                return(true);
            }

            return(false);
        }
コード例 #2
0
        public static bool ChangeDirection(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet)
        {
            player.Direction    = packet.Direction;
            player.AttackPacket = null;

            player.UpdateScreen(false, packet);
            return(true);
        }
コード例 #3
0
        public static bool GetItemSet(Models.Entities.Player player, DataExchangePacket packet)
        {
            player.ClientSocket.Send(packet);
            player.LoggedIn = true;

            foreach (var dbOwnerItem in Database.Dal.Inventories.GetInventory(player.DbPlayer.Id))
            {
                var item = Collections.ItemCollection.CreateItemById((uint)dbOwnerItem.ItemId);
                item.DbOwnerItem = dbOwnerItem;
                if (!string.IsNullOrWhiteSpace(dbOwnerItem.Color))
                {
                    item.Color = dbOwnerItem.Color.ToEnum <Enums.ItemColor>();
                }
                item.Gem1 = dbOwnerItem.Gem1.ToEnum <Enums.Gem>();
                item.Gem2 = dbOwnerItem.Gem2.ToEnum <Enums.Gem>();

                if (!player.Inventory.Add(item))
                {
                    player.ClientSocket.Disconnect(Drivers.Messages.Errors.FAILED_TO_LOAD_INVENTORY);
                    return(false);
                }
            }

            foreach (var dbOwnerItem in Database.Dal.Equipments.GetEquipments(player.DbPlayer.Id))
            {
                var item = Collections.ItemCollection.CreateItemById((uint)dbOwnerItem.ItemId);
                item.DbOwnerItem = dbOwnerItem;
                item.Position    = dbOwnerItem.Position.ToEnum <Enums.ItemPosition>();
                if (!string.IsNullOrWhiteSpace(dbOwnerItem.Color))
                {
                    item.Color = dbOwnerItem.Color.ToEnum <Enums.ItemColor>();
                }
                item.Gem1 = dbOwnerItem.Gem1.ToEnum <Enums.Gem>();
                item.Gem2 = dbOwnerItem.Gem2.ToEnum <Enums.Gem>();

                if (!player.Equipments.Equip(item, item.Position, false, false, true))
                {
                    player.ClientSocket.Disconnect(Drivers.Messages.Errors.FAILED_TO_LOAD_EQUIPMENTS);
                    return(false);
                }
            }

            player.UpdateScreen(false);
            return(true);
        }
コード例 #4
0
        public static bool GetSurroundings(Models.Entities.Player player, DataExchangePacket packet)
        {
            if (player.Map != null)
            {
                player.Map.DisplayWeather(player);
            }

            player.UpdateScreen(true);

            if (player.MapChangeEvents.Count > 0)
            {
                Action <Models.Entities.Player> mapChangeEvent;
                while (player.MapChangeEvents.TryDequeue(out mapChangeEvent))
                {
                    mapChangeEvent.Invoke(player);
                }
            }
            return(true);
        }
コード例 #5
0
        public static bool ChangeAction(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet)
        {
            var action = (Enums.PlayerAction)packet.Data1Low;

            player.AttackPacket = null;

            if (player.Action != Enums.PlayerAction.Sit || player.Action != Enums.PlayerAction.Lie)
            {
                if (action == Enums.PlayerAction.Sit || action == Enums.PlayerAction.Lie)
                {
                    player.UpdateStamina();
                }
            }

            player.Action = action;

            player.UpdateScreen(false, packet);
            return(true);
        }
コード例 #6
0
        /// <summary>
        /// Adds a member to the guild.
        /// </summary>
        /// <param name="player">The player.</param>
        /// <param name="rank">The starting rank.</param>
        /// <param name="update">A boolean determining whether the client of the player should be updated.</param>
        public void AddMember(Models.Entities.Player player, Enums.GuildRank rank, bool update = true)
        {
            var guildMember = new GuildMember(new Database.Models.DbGuildRank
            {
                GuildId        = Guild.Id,
                PlayerId       = player.DbPlayer.Id,
                PlayerName     = player.Name,
                PlayerLevel    = player.Level,
                SilverDonation = 0,
                CPDonation     = 0,
                GuildRank      = rank.ToString(),
                JoinDate       = Drivers.Time.GetTime(Drivers.Time.TimeType.Day)
            });

            if (guildMember.DbGuildRank.Create() && _members.TryAdd(player.DbPlayer.Id, guildMember))
            {
                player.AddActionLog("JoinGuild", Guild.Id);

                guildMember.Player = player;
                player.Guild       = Guild;
                player.GuildMember = guildMember;

                if (rank == Enums.GuildRank.GuildLeader)
                {
                    Guild.GuildLeader = guildMember;
                }

                if (update)
                {
                    player.UpdateClientGuild();
                    player.UpdateScreen(true);
                }
            }

            _cachedSortedMembers = null;
        }
コード例 #7
0
        public static bool Handle(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet)
        {
            if (!player.Alive && DateTime.UtcNow > player.DeadTime)
            {
                player.ClientSocket.Disconnect(Drivers.Messages.Errors.JUMP_WHILE_DEAD);
                return(false);
            }

            if (packet.ClientId != player.ClientId)
            {
                Database.Dal.Accounts.Ban(
                    player.DbPlayer.Account, Drivers.Messages.JUMP_OTHER_PLAYER,
                    Database.Models.DbAccount.BanRangeType.Perm);
                player.ClientSocket.Disconnect(Drivers.Messages.JUMP_OTHER_PLAYER);
                return(false);
            }

            player.Action       = Enums.PlayerAction.None;
            player.AttackPacket = null;

            ushort newX = packet.Data1Low;
            ushort newY = packet.Data1High;

            if (Tools.RangeTools.GetDistanceU(newX, newY, player.X, player.Y) > 28)
            {
                player.Pullback();
                return(true);
            }

            if (!player.Map.ValidCoord(newX, newY))
            {
                player.Pullback();
                return(false);
            }

            if (player.LastMovementMode == Enums.WalkMode.Jump && DateTime.UtcNow <= player.LastMovementTime.AddMilliseconds(400))
            {
                player.SpeedHackChecks++;
                if (player.SpeedHackChecks >= 3)
                {
                    // speedhack ...
                    if (player.SpeedHackChecks >= 10)
                    {
                        player.ClientSocket.Disconnect(Drivers.Messages.SPEEDHACK);
                        return(false);
                    }

                    player.Pullback();
                    return(true);
                }
            }
            else
            {
                player.SpeedHackChecks = 0;
            }

            if (player.Battle != null)
            {
                if (!player.Battle.EnterArea(player))
                {
                    player.Pullback();
                    return(true);
                }
                else if (!player.Battle.LeaveArea(player))
                {
                    player.Pullback();
                    return(true);
                }
            }

            if (Tools.CalculationTools.ChanceSuccess(Data.Constants.Chances.StaminaOnJump))
            {
                player.Stamina = (byte)Math.Min(100, player.Stamina + 7);
            }

            player.X = newX;
            player.Y = newY;
            player.LastMovementMode = Enums.WalkMode.Jump;
            player.LastMovementTime = DateTime.UtcNow;
            player.ClientSocket.Send(packet);
            player.UpdateScreen(false, packet, Enums.UpdateScreenFlags.Idle);

            return(true);
        }
コード例 #8
0
 public static bool Handle(Models.Entities.Player player, Models.Packets.Message.MessagePacket packet)
 {
     player.UpdateScreen(false, packet);
     return(true);
 }
コード例 #9
0
        public static bool HandlePacket(Models.Entities.Player player, Models.Packets.Location.WalkPacket packet)
        {
            if (packet.ClientId != player.ClientId)
            {
                Database.Dal.Accounts.Ban(
                    player.DbPlayer.Account, Drivers.Messages.MOVE_OTHER_PLAYER,
                    Database.Models.DbAccount.BanRangeType.Perm);
                player.ClientSocket.Disconnect(Drivers.Messages.MOVE_OTHER_PLAYER);
                return(false);
            }
            player.Action           = Enums.PlayerAction.None;
            player.AttackPacket     = null;
            player.LastMovementMode = packet.Mode;

            int newX = 0, newY = 0;
            int newDir = 0;

            switch (packet.Mode)
            {
            case Enums.WalkMode.Walk:
            case Enums.WalkMode.Run:
            {
                newDir = (int)packet.Direction % 8;
                newX   = player.X + Data.Constants.Movement.DeltaX[newDir];
                newY   = player.Y + Data.Constants.Movement.DeltaY[newDir];

                if (DateTime.UtcNow < player.LastMovementTime.AddMilliseconds(100))
                {
                    player.SpeedHackChecks++;
                    if (player.SpeedHackChecks >= 3)
                    {
                        // speedhack ...
                        if (player.SpeedHackChecks >= 10)
                        {
                            player.ClientSocket.Disconnect(Drivers.Messages.SPEEDHACK);
                            return(false);
                        }

                        player.Pullback();
                        return(true);
                    }
                }
                else
                {
                    player.SpeedHackChecks = 0;
                }
                break;
            }

            case Enums.WalkMode.Mount:
            {
                newDir = (int)packet.Direction % 24;
                newX   = player.X + Data.Constants.Movement.DeltaMountX[newDir];
                newY   = player.Y + Data.Constants.Movement.DeltaMountY[newDir];

                if (DateTime.UtcNow < player.LastMovementTime.AddMilliseconds(400))
                {
                    player.SpeedHackChecks++;
                    if (player.SpeedHackChecks >= 3)
                    {
                        // speedhack ...
                        if (player.SpeedHackChecks >= 10)
                        {
                            player.ClientSocket.Disconnect(Drivers.Messages.SPEEDHACK);
                            return(false);
                        }

                        player.Pullback();
                        return(true);
                    }
                }
                else
                {
                    player.SpeedHackChecks = 0;
                }
                break;
            }

            default:
                return(false);
            }

            if (player.Map.ValidCoord((ushort)newX, (ushort)newY))
            {
                player.LastMovementTime = DateTime.UtcNow;
                player.X = (ushort)newX;
                player.Y = (ushort)newY;

                player.ClientSocket.Send(packet);
                player.UpdateScreen(false, packet, Enums.UpdateScreenFlags.Idle);

                if (player.Battle != null)
                {
                    if (!player.Battle.EnterArea(player))
                    {
                        player.Pullback();
                    }
                    else if (!player.Battle.LeaveArea(player))
                    {
                        player.Pullback();
                    }
                }

                return(true);
            }

            return(false);
        }