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); }
public ClientLeavePartyEventArgs(LeavePartyInfo i) { info = i; }
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; } } }
public static LeavePartyInfo RecvLeaveParty(Packet p) { p.Skip(2); int partyid = p.ReadInt(); LeavePartyInfo i = new LeavePartyInfo { PartyID = partyid }; return i; }