コード例 #1
0
        public static bool HandleRequestInvite(Models.Entities.Player player, Models.Packets.Team.TeamActionPacket packet)
        {
            if (player.Team == null)
            {
                return(true);
            }

            if (!player.Team.IsLeader(player))
            {
                return(true);
            }

            Models.Maps.IMapObject mapObject;
            if (player.GetFromScreen(packet.ClientId, out mapObject))
            {
                var newMember = mapObject as Models.Entities.Player;
                if (newMember != null && newMember.Team == null)
                {
                    player.Team.PendingInvite = newMember.ClientId;
                    packet.ClientId           = player.ClientId;
                    newMember.ClientSocket.Send(packet);
                }
            }

            return(true);
        }
コード例 #2
0
        public static bool HandleCourt(Models.Entities.Player player, Models.Packets.Entities.InteractionPacket packet)
        {
            if (packet.TargetClientId == player.ClientId)
            {
                return(false);
            }

            if (player.Spouse != "None")
            {
                return(true);
            }

            Models.Maps.IMapObject obj;
            if (player.GetFromScreen(packet.TargetClientId, out obj))
            {
                var marriageTarget = obj as Models.Entities.Player;
                if (marriageTarget != null)
                {
                    if (marriageTarget.Spouse != "None")
                    {
                        return(true);
                    }

                    player.PendingSpouse = marriageTarget.ClientId;
                    marriageTarget.ClientSocket.Send(packet);
                }
            }

            return(true);
        }
コード例 #3
0
        public static bool HandleAcceptJoin(Models.Entities.Player player, Models.Packets.Team.TeamActionPacket packet)
        {
            if (player.Team == null)
            {
                return(true);
            }

            if (!player.Team.IsLeader(player))
            {
                return(true);
            }

            Models.Maps.IMapObject mapObject;
            if (packet.ClientId == player.Team.PendingJoin &&
                player.GetFromScreen(packet.ClientId, out mapObject))
            {
                var newMember = mapObject as Models.Entities.Player;
                if (newMember != null && newMember.Team == null)
                {
                    if (player.Team.Add(newMember))
                    {
                        var newTeamMemberPacket = new Models.Packets.Team.TeamMemberPacket
                        {
                            Name     = newMember.Name,
                            ClientId = newMember.ClientId,
                            Mesh     = newMember.Mesh,
                            MaxHP    = newMember.MaxHP,
                            HP       = newMember.HP
                        };

                        foreach (var member in player.Team.GetMembers())
                        {
                            if (member.ClientId != newMember.ClientId)
                            {
                                newMember.ClientSocket.Send(new Models.Packets.Team.TeamMemberPacket
                                {
                                    Name     = member.Name,
                                    ClientId = member.ClientId,
                                    Mesh     = member.Mesh,
                                    MaxHP    = member.MaxHP,
                                    HP       = member.HP
                                });
                                member.ClientSocket.Send(newTeamMemberPacket);
                            }
                        }

                        newMember.ClientSocket.Send(newTeamMemberPacket);

                        packet.ClientId = player.ClientId;
                        newMember.ClientSocket.Send(packet);
                    }
                }
            }

            return(true);
        }
コード例 #4
0
ファイル: Request.cs プロジェクト: arcadeindy/CandyConquer
        public static bool Handle(Models.Entities.Player player, Models.Packets.Trade.TradePacket packet)
        {
            if (player.Trade.Trading && player.Trade.Partner == null)
            {
                player.SendSystemMessage("SELF_ALREADY_TRADE");
                return(true);
            }
            else if (player.Trade.Trading)
            {
                if (!player.Trade.Requesting)
                {
                    packet.Action         = Enums.TradeAction.ShowTable;
                    packet.TargetClientId = player.Trade.Partner.ClientId;
                    player.ClientSocket.Send(packet);

                    packet.TargetClientId = player.ClientId;
                    player.Trade.Partner.ClientSocket.Send(packet);

                    player.Trade.WindowOpen = true;
                    player.Trade.Partner.Trade.WindowOpen = true;
                }

                return(true);
            }

            Models.Maps.IMapObject obj;
            if (player.GetFromScreen(packet.TargetClientId, out obj))
            {
                var target = obj as Models.Entities.Player;
                if (!target.Trade.Trading)
                {
                    player.Trade.Begin(target);
                    target.Trade.Begin(player);

                    target.Trade.Requesting = false;
                    player.Trade.Requesting = true;

                    packet.TargetClientId = player.ClientId;
                    target.ClientSocket.Send(packet);
                }
                else
                {
                    player.SendSystemMessage("TARGET_ALREADY_TRADE");
                }
            }
            else
            {
                player.ClientSocket.Disconnect(Drivers.Messages.Errors.INVALID_TRADE_TARGET);
            }

            return(true);
        }
コード例 #5
0
ファイル: Query.cs プロジェクト: arcadeindy/CandyConquer
        public static bool HandleQueryPlayer(Models.Entities.Player player, Models.Packets.Client.DataExchangePacket packet)
        {
            Models.Maps.IMapObject obj;
            if (packet.Data1 > 1000000 && player.GetFromScreen(packet.Data1, out obj))
            {
                var objPlayer = (obj as Models.Entities.Player);

                objPlayer.ClientSocket.Send(player.GetSpawnPacket());
                player.ClientSocket.Send(objPlayer.GetSpawnPacket());
            }

            return(true);
        }
コード例 #6
0
        public static bool HandlePacket(Models.Entities.Player player, Models.Packets.Items.GroundItemPacket packet)
        {
            if (packet.Action == Enums.GroundItemAction.Pickup && player.Map != null)
            {
                Models.Maps.IMapObject mapObject;
                if (player.GetFromScreen(packet.ClientId, out mapObject))
                {
                    var item = mapObject as Models.Items.Item;

                    if (item != null && Tools.RangeTools.GetDistanceU(player.X, player.Y, item.X, item.Y) < 2)
                    {
                        if (!item.PlayerDrop && DateTime.UtcNow < item.DropTime.AddMilliseconds(Data.Constants.Time.DropTimeShare) &&
                            item.DropClientId != player.ClientId)
                        {
                            player.SendSystemMessage("NOT_OWNER_ITEM");
                        }
                        else
                        {
                            Task.Run(async() => await item
                                     .ResetLocationAsync(true, () =>
                            {
                                if (item.DropMoney > 0)
                                {
                                    player.AddActionLog("PickUpMoney", item.DropMoney);
                                    player.Money += item.DropMoney;
                                }
                                else
                                {
                                    player.AddActionLog("PickUpItem", item.DbItem.Id);
                                    player.Inventory.Add(item);
                                }
                            }, (e) =>
                            {
                                player.ClientSocket.LastException = e;
                                player.ClientSocket.Disconnect(Drivers.Messages.Errors.FATAL_ERROR_TITLE);
                            }));
                        }
                    }
                }

                return(true);
            }

            return(false);
        }
コード例 #7
0
        public static bool HandleRequestJoin(Models.Entities.Player player, Models.Packets.Team.TeamActionPacket packet)
        {
            if (player.Team != null)
            {
                return(true);
            }

            Models.Maps.IMapObject mapObject;
            if (player.GetFromScreen(packet.ClientId, out mapObject))
            {
                var leader = mapObject as Models.Entities.Player;
                if (leader != null && leader.Team != null && leader.Team.IsLeader(leader))
                {
                    leader.Team.PendingJoin = player.ClientId;
                    packet.ClientId         = player.ClientId;
                    leader.ClientSocket.Send(packet);
                }
            }

            return(true);
        }
コード例 #8
0
        public static bool HandleNpcRequest(Models.Entities.Player player, Models.Packets.Entities.NpcRequestPacket packet)
        {
            if (!player.Alive)
            {
                return(true);
            }

            if (packet.Option == 255)
            {
                player.CurrentNpc = null;
                return(true);
            }

            if (Collections.ShopCollection.ContainsShop(packet.NpcId))
            {
                player.AddActionLog("OpenShop", packet.NpcId);

                if (player.ContainsInScreen(packet.NpcId))
                {
                    Helpers.Packets.Npc.Dialog.OpenShop(player, packet.NpcId);
                }
            }
            else
            {
                Models.Maps.IMapObject mapObject;
                if (player.GetFromScreen(packet.NpcId, out mapObject))
                {
                    var npc = mapObject as Models.Entities.Npc;
                    if (npc != null)
                    {
                        player.AddActionLog("NpcRequest", packet.NpcId + " " + packet.Option);

                        player.CurrentNpc = npc;
                        npc.Invoke(player, packet.Option);
                    }
                }
            }

            return(true);
        }
コード例 #9
0
        public static bool HandleMarry(Models.Entities.Player player, Models.Packets.Entities.InteractionPacket packet)
        {
            if (packet.TargetClientId == player.ClientId)
            {
                return(false);
            }

            if (player.Spouse != "None")
            {
                return(true);
            }

            Models.Maps.IMapObject obj;
            if (player.GetFromScreen(packet.TargetClientId, out obj))
            {
                var marriageTarget = obj as Models.Entities.Player;
                if (marriageTarget != null)
                {
                    if (marriageTarget.Spouse != "None")
                    {
                        return(true);
                    }

                    if (marriageTarget.PendingSpouse != player.ClientId)
                    {
                        return(true);
                    }

                    player.AddActionLog("Marriage", player.Name + " : " + marriageTarget.Name);

                    marriageTarget.Spouse = player.Name;
                    player.Spouse         = marriageTarget.Name;

                    player.ClientSocket.Send(new Models.Packets.Misc.StringPacket
                    {
                        Action = Enums.StringAction.Mate,
                        Data   = player.ClientId,
                        String = marriageTarget.Name
                    });

                    marriageTarget.ClientSocket.Send(new Models.Packets.Misc.StringPacket
                    {
                        Action = Enums.StringAction.Mate,
                        Data   = marriageTarget.ClientId,
                        String = player.Name
                    });

                    var fireworks = new Models.Packets.Misc.StringPacket
                    {
                        Action    = Enums.StringAction.MapEffect,
                        PositionX = player.X,
                        PositionY = player.Y,
                        String    = "firework-2love"
                    };

                    player.ClientSocket.Send(fireworks);

                    fireworks.PositionX = marriageTarget.X;
                    fireworks.PositionY = marriageTarget.Y;
                    marriageTarget.ClientSocket.Send(fireworks);

                    Collections.PlayerCollection.BroadcastFormattedMessage("MARRIAGE_CONGRATZ", player.Name, marriageTarget.Name);
                }
            }

            return(true);
        }
コード例 #10
0
        public static bool HandleApplyJoin(Models.Entities.Player player, Models.Packets.Guilds.GuildPacket packet)
        {
            if (player.Battle != null)
            {
                return(true);
            }

            if (packet.Data == player.ClientId)
            {
                return(false);
            }

            if (player.Guild != null)
            {
                return(false);
            }

            Models.Maps.IMapObject mapObject = null;

            if (player.ApplyGuildMemberClientId == 0)
            {
                if (player.GetFromScreen(packet.Data, out mapObject))
                {
                    var requestPlayer = mapObject as Models.Entities.Player;
                    if (requestPlayer != null)
                    {
                        if (requestPlayer.Guild != null && (
                                requestPlayer.GuildMember.Rank == Enums.GuildRank.GuildLeader ||
                                requestPlayer.GuildMember.Rank == Enums.GuildRank.DeputyLeader
                                ))
                        {
                            requestPlayer.ApplyGuildMemberClientId = player.ClientId;

                            requestPlayer.ClientSocket.Send(new Models.Packets.Guilds.GuildPacket
                            {
                                Action = Enums.GuildAction.ApplyJoin,
                                Data   = player.ClientId
                            });
                        }
                    }
                }

                return(true);
            }

            if (player.ApplyGuildMemberClientId != packet.Data)
            {
                return(true);
            }

            player.ApplyGuildMemberClientId = 0;

            if (player.GetFromScreen(packet.Data, out mapObject))
            {
                var invitePlayer = mapObject as Models.Entities.Player;
                if (invitePlayer != null)
                {
                    if (invitePlayer.Guild != null && (
                            invitePlayer.GuildMember.Rank == Enums.GuildRank.GuildLeader ||
                            invitePlayer.GuildMember.Rank == Enums.GuildRank.DeputyLeader
                            ))
                    {
                        invitePlayer.Guild.AddMember(player, Enums.GuildRank.Member);
                    }
                }
            }

            return(true);
        }