Exemplo n.º 1
0
        protected override void serverClient_ClientDisposed(object sender, EventArgs e)
        {
            Client c = (Client)sender;
            if (c.MyCharacter != null && c.MyCharacter.Online)
            {
                c.MyCharacter.Online = false;

                MapEngine engine = GetMapEngine(c.MyCharacter.MapId);
                engine.ActiveClientEntities.Remove(c.MyCharacter);
                Client[] clients = GetClientsForChars(engine.GetCharactersInRange(c.MyCharacter.Position, 150).ToArray());

                accountManager.ExitGame(c.AccountID);
                UpdateFriendsStatus(c);

                if (c.MyCharacter.Guild != null)
                {
                    GuildMember g = c.MyCharacter.Guild.Members.Single(x => x.Character.CharacterId == c.MyCharacter.CharacterId);
                    g.Online = false;
                    SendToGuild(c.MyCharacter.Guild, PacketManager.SendGuildMemberInfo(g));
                }
                if (c.MyCharacter.Party != null)
                {
                    LeavePartyInfo i = new LeavePartyInfo
                    {
                        PartyID = c.MyCharacter.Party.PartyID
                    };
                    ClientLeaveParty(c);
                }

                ClientConnectionChanged(null, new PlayerConnectionChangedEventArgs(c.MyCharacter, c.MyCharacter.Online));

                byte[] bufferRemoveCharacter = PacketManager.SendRemoveCharacter(c.MyCharacter, RemoveCharacterEffect.None);
                SendToClients(bufferRemoveCharacter, clients);

                if (c.MyCharacter.Pet != null && !c.MyCharacter.Pet.IsSealed)
                {
                    byte[] bufferRemovePet = PacketManager.SendRemovePet(c.MyCharacter.Pet);
                    SendToClients(bufferRemovePet, clients);

                    petManager.UpdatePet(c.MyCharacter.Pet);
                }
            }

            base.serverClient_ClientDisposed(sender, e);
        }
Exemplo n.º 2
0
 public ClientLeavePartyEventArgs(LeavePartyInfo i)
 {
     info = i;
 }
Exemplo n.º 3
0
        void c_ClientChannelChangeInfo(object sender, ClientChannelChangeEventArgs e)
        {
            Client c = (Client)sender;
            ChannelChangeInfo cci = e.Info;

            if (c.MyCharacter != null && c.MyCharacter.Online)
            {
                MapEngine mapEngine = GetMapEngine(c.MyCharacter.MapId);
                Client[] clients = GetClientsForChars(mapEngine.GetCharactersInRange(c.MyCharacter.Position, 150).ToArray());

                switch (cci.Something2)
                {
                    case 1:
                        c.MyCharacter.Online = false;
                        mapEngine.ActiveClientEntities.Remove(c.MyCharacter);
                        UpdateFriendsStatus(c);
                        if (c.MyCharacter.Guild != null)
                        {
                            GuildMember g = c.MyCharacter.Guild.Members.Single(x => x.Character.CharacterId == c.MyCharacter.CharacterId);
                            g.Online = false;
                            SendToGuild(c.MyCharacter.Guild, PacketManager.SendGuildMemberInfo(g));
                        }
                        if (c.MyCharacter.Party != null)
                        {
                            LeavePartyInfo i = new LeavePartyInfo
                            {
                                PartyID = c.MyCharacter.Party.PartyID
                            };

                            ClientLeaveParty(c);
                        }

                        ClientConnectionChanged(null, new PlayerConnectionChangedEventArgs(c.MyCharacter, false));
                        // send friends i has quit the game

                        byte[] bufferSendChannelChange = PacketManager.SendChannelChange(cci.Something, cci.Something2);
                        c.Send(bufferSendChannelChange);

                        byte[] bufferRemoveCharacter = null;

                        bufferRemoveCharacter = PacketManager.SendRemoveCharacter(c.MyCharacter, RemoveCharacterEffect.None);
                        SendToClients(bufferRemoveCharacter, clients);

                        if (c.MyCharacter.Pet != null && !c.MyCharacter.Pet.IsSealed)
                        {
                            mapEngine.ActiveClientEntities.Remove(c.MyCharacter.Pet);
                            byte[] bufferRemovePet = PacketManager.SendRemovePet(c.MyCharacter.Pet);
                            SendToClients(bufferRemovePet, clients);
                        }

                        break;

                    case 0:
                        c.MyCharacter.Online = false;
                        mapEngine.ActiveClientEntities.Remove(c.MyCharacter);
                        UpdateFriendsStatus(c);
                        if (c.MyCharacter.Guild != null)
                        {
                            GuildMember g = c.MyCharacter.Guild.Members.Single(x => x.Character.CharacterId == c.MyCharacter.CharacterId);
                            g.Online = false;
                            SendToGuild(c.MyCharacter.Guild, PacketManager.SendGuildMemberInfo(g));
                        }
                        if (c.MyCharacter.Party != null)
                        {
                            LeavePartyInfo i = new LeavePartyInfo
                            {
                                PartyID = c.MyCharacter.Party.PartyID
                            };
                            ClientLeaveParty(c);
                        }

                        ClientConnectionChanged(null, new PlayerConnectionChangedEventArgs(c.MyCharacter, false));
                        // send friends i has quit the game

                        accountManager.ExitGame(c.AccountID);

                        bufferRemoveCharacter = PacketManager.SendRemoveCharacter(c.MyCharacter, RemoveCharacterEffect.None);
                        SendToClients(bufferRemoveCharacter, clients);

                        if (c.MyCharacter.Pet != null && !c.MyCharacter.Pet.IsSealed)
                        {
                            mapEngine.ActiveClientEntities.Remove(c.MyCharacter.Pet);
                            byte[] bufferRemovePet = PacketManager.SendRemovePet(c.MyCharacter.Pet);
                            SendToClients(bufferRemovePet, clients);
                        }

                        break;
                }
            }
        }
Exemplo n.º 4
0
        public static LeavePartyInfo RecvLeaveParty(Packet p)
        {
            p.Skip(2);
            int partyid = p.ReadInt();

            LeavePartyInfo i = new LeavePartyInfo
            {
                PartyID = partyid
            };

            return i;
        }