public static void Join(Client pClient, MMatchStage pStage) { if (pStage.Clients.Count < pStage.nMaxPlayers) { pClient.mPlace = MMatchPlace.Stage; pClient.mStage = pStage; pClient.mClientFlags = PacketFlags.Stage; lock (pStage.Clients) pStage.Clients.Add(pClient); PacketWriter pPacket = new PacketWriter(Operation.StageJoin, CryptFlags.Encrypt); pPacket.Write(pClient.mClientUID); pPacket.Write(pStage.uidStage); pPacket.Write(Convert.ToInt32(pClient.mChannel.lStages.IndexOf(pStage) + 1)); pPacket.Write(pStage.szName); foreach (Client c in pStage.Clients) c.Send(pPacket); pPacket = new PacketWriter(Operation.MatchObjectCache, CryptFlags.Encrypt); pPacket.Write((byte)ObjectCache.Expire); pPacket.Write(pStage.Clients.Count, 152); foreach (Client c in pStage.Clients) { pPacket.Write((Int32)0); pPacket.Write(c.mClientUID); pPacket.Write(c.mCharacter.szName, 32); pPacket.Write(c.mCharacter.szClanName, 16); pPacket.Write((Int32)c.mCharacter.nLevel); pPacket.Write((Int32)c.mAccount.nUGradeID); pPacket.Write((Int32)0); pPacket.Write((Int32)0); pPacket.Write((Int32)0);//CLID pPacket.Write((Int32)0);//Emblem pPacket.Write((Int32)c.mCharacter.nSex); pPacket.Write((byte)c.mCharacter.nHair); pPacket.Write((byte)c.mCharacter.nFace); pPacket.Write((Int16)0); foreach (Item i in c.mCharacter.nEquippedItems) pPacket.Write(i.nItemID); pPacket.Write((Int32)1); pPacket.Write((Int32)5); pPacket.Write((Int32)25); } pClient.Send(pPacket); UpdateStageCache(pStage, pClient, ObjectCache.Keep); UpdateMaster(pStage); } StageList(pClient); }
public static void UpdateStageCache(MMatchStage stage, Client client, ObjectCache cache) { PacketWriter pPacket = new PacketWriter(Operation.MatchObjectCache, CryptFlags.Encrypt); pPacket.Write((byte)cache); pPacket.Write(1, 140); pPacket.Write((Int32)0); pPacket.Write(client.mClientUID); pPacket.Write(client.mCharacter.szName, 32); pPacket.Write(client.mCharacter.szClanName, 16); pPacket.Write(Convert.ToInt32(client.mCharacter.nLevel)); pPacket.Write((Int32)client.mAccount.nUGradeID); pPacket.Write((Int32)0); pPacket.Write((Int32)0); pPacket.Write(client.mCharacter.nCLID); pPacket.Write((Int32)0);//Emblem pPacket.Write((Int32)client.mCharacter.nSex); pPacket.Write((byte)client.mCharacter.nHair); pPacket.Write((byte)client.mCharacter.nFace); pPacket.Write((Int16)0); foreach (Item i in client.mCharacter.nEquippedItems) pPacket.Write(i.nItemID); lock (stage.Clients) { foreach (Client c in stage.Clients) { if (c == client) continue; c.Send(pPacket); } } }
public static void UpdateMaster(MMatchStage pStage) { PacketWriter pPacket = new PacketWriter(Operation.StageMaster, CryptFlags.Encrypt); pPacket.Write(pStage.uidStage); pPacket.Write(pStage.stageMaster.mClientUID); foreach (Client c in pStage.Clients) { c.Send(pPacket); } }