private void OnRespawn(SocketIOEvent obj) { RespawnPacket packet = JsonUtility.FromJson <RespawnPacket>(obj.data); //the thread for respawn starts here StartCoroutine(RespawnPlayer(packet)); }
public static void ReadRespawn(Client client, PacketReader reader) { RespawnPacket rp = new RespawnPacket(); rp.Read(reader); if (!reader.Failed) { Client.HandlePacketRespawn(client, rp); } }
/// <summary> /// Gets a packet from the server and returns it. /// </summary> /// <returns>The received packet.</returns> public Packet GetPacket() { var packetID = (byte)_stream.ReadByte(); //_log.Debug("Got packet ID: " + packetID); // Spammy debug message if (!Enum.IsDefined(typeof(PacketType), (int)packetID)) { return(null); } var type = (PacketType)packetID; Packet pack = null; switch (type) { case PacketType.KeepAlive: pack = new KeepAlivePacket(_tools.ReadInt32()); break; case PacketType.LoginRequest: pack = new LoginRequestPacketSC { EntityID = _tools.ReadInt32(), NotUsed = _tools.ReadString(), LevelType = _tools.ReadString(), Gamemode = _tools.ReadInt32(), Dimension = _tools.ReadInt32(), Difficulty = _tools.ReadSignedByte(), WorldHeight = _tools.ReadByte(), // Not Used MaxPlayers = _tools.ReadByte() }; break; case PacketType.Handshake: pack = new HandshakePacketSC(_tools.ReadString()); break; case PacketType.ChatMessage: pack = new ChatMessagePacket(_tools.ReadString()); break; case PacketType.TimeUpdate: pack = new TimeUpdatePacket(_tools.ReadInt32()); break; case PacketType.EntityEquipment: pack = new EntityEquipmentPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt16(), _tools.ReadInt16()); break; case PacketType.SpawnPosition: pack = new SpawnPositionPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.UseEntity: pack = new UseEntityPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadBoolean()); break; case PacketType.UpdateHealth: pack = new UpdateHealthPacket(_tools.ReadInt16(), _tools.ReadInt16(), _tools.ReadSingle()); break; case PacketType.Respawn: pack = new RespawnPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadString()); break; case PacketType.Player: pack = new PlayerPacket(_tools.ReadBoolean()); break; case PacketType.PlayerPosition: pack = new PlayerPositionPacket(_tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadBoolean()); break; case PacketType.PlayerLook: pack = new PlayerLookPacket(_tools.ReadSingle(), _tools.ReadSingle(), _tools.ReadBoolean()); break; case PacketType.PlayerPositionAndLook: pack = new PlayerPositionAndLookPacket(_tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadSingle(), _tools.ReadSingle(), _tools.ReadBoolean()); break; case PacketType.PlayerDigging: pack = new PlayerDiggingPacket(_tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.PlayerBlockPlacement: pack = new PlayerBlockPlacementPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSlotData()); break; case PacketType.UseBed: pack = new UseBedPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32()); break; case PacketType.Animation: pack = new AnimationPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.NamedEntitySpawn: pack = new NamedEntitySpawnPacket(_tools.ReadInt32(), _tools.ReadString(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadInt16()); break; case PacketType.PickupSpawn: pack = new PickupSpawnPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.CollectItem: pack = new CollectItemPacket(_tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.AddObjectVehicle: pack = new AddObjectVehiclePacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32()); var ftEid = _tools.ReadInt32(); ((AddObjectVehiclePacket)pack).FireballThrowerID = ftEid; if (ftEid > 0) { var aovpPack = (AddObjectVehiclePacket)pack; aovpPack.SpeedX = _tools.ReadInt16(); aovpPack.SpeedY = _tools.ReadInt16(); aovpPack.SpeedZ = _tools.ReadInt16(); pack = aovpPack; } break; case PacketType.HoldingChange: pack = new HoldingChangePacket(_tools.ReadInt16()); break; case PacketType.MobSpawn: pack = new MobSpawnPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadEntityMetadata()); break; case PacketType.EntityPainting: pack = new EntityPaintingPacket(_tools.ReadInt32(), _tools.ReadString(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.ExperienceOrb: pack = new ExperienceOrbPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt16()); break; case PacketType.EntityVelocity: pack = new EntityVelocityPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt16(), _tools.ReadInt16()); break; case PacketType.DestroyEntity: pack = new DestroyEntityPacket(_tools.ReadInt32()); break; case PacketType.Entity: pack = new EntityPacket(_tools.ReadInt32()); break; case PacketType.EntityRelativeMove: pack = new EntityRelativeMovePacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.EntityLook: pack = new EntityLookPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.EntityLookAndRelativeMove: pack = new EntityLookAndRelativeMovePacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.EntityTeleport: pack = new EntityTeleportPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.EntityHeadLook: pack = new EntityHeadLookPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.EntityStatus: pack = new EntityStatusPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.AttachEntity: pack = new AttachEntityPacket(_tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.EntityMetadata: var entityMetadataPacket = new EntityMetadataPacket(_tools.ReadInt32()); var metaData = new List <sbyte>(); var b = true; while (b) { var value = _tools.ReadSignedByte(); if (value == 127) { b = false; } metaData.Add(value); } entityMetadataPacket.Metadata = metaData.ToArray(); break; case PacketType.EntityEffect: pack = new EntityEffectPacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadInt16()); break; case PacketType.RemoveEntityEffect: pack = new RemoveEntityEffectPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.Experience: pack = new ExperiencePacket(_tools.ReadSingle(), _tools.ReadInt16(), _tools.ReadInt16()); break; case PacketType.PreChunk: pack = new PreChunkPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadBoolean()); break; case PacketType.MapChunk: var mapChunkPacket = new MapChunkPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); mapChunkPacket.CompressedSize = _tools.ReadInt32(); mapChunkPacket.CompressedData = _tools.ReadSignedBytes(mapChunkPacket.CompressedSize); pack = mapChunkPacket; break; case PacketType.MultiBlockChange: var multiBlockChangePacket = new MultiBlockChangePacket(_tools.ReadInt32(), _tools.ReadInt32()); var arraySize = _tools.ReadInt16(); multiBlockChangePacket.ArraySize = arraySize; var coordinates = new short[arraySize, 3]; for (short i = 0; i < arraySize; i++) { coordinates[i, 0] = _tools.ReadInt16(); coordinates[i, 1] = _tools.ReadInt16(); coordinates[i, 2] = _tools.ReadInt16(); } multiBlockChangePacket.Coordinates = coordinates; var types = new sbyte[arraySize]; for (short i = 0; i < arraySize; i++) { types[i] = _tools.ReadSignedByte(); } multiBlockChangePacket.Types = types; var metadata = new sbyte[arraySize]; for (short i = 0; i < arraySize; i++) { metadata[i] = _tools.ReadSignedByte(); } multiBlockChangePacket.Metadata = metadata; pack = multiBlockChangePacket; break; case PacketType.BlockChange: pack = new BlockChangePacket(_tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.BlockAction: pack = new BlockActionPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.Explosion: var explosionPacket = new ExplosionPacket(_tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadDouble(), _tools.ReadSingle()); var recordCount = _tools.ReadInt32(); explosionPacket.Count = recordCount; var records = new sbyte[recordCount, 3]; for (var i = 0; i < recordCount; i++) { records[i, 0] = _tools.ReadSignedByte(); records[i, 1] = _tools.ReadSignedByte(); records[i, 2] = _tools.ReadSignedByte(); } explosionPacket.Records = records; pack = explosionPacket; break; case PacketType.SoundParticleEffect: pack = new SoundParticleEffectPacket(_tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadSignedByte(), _tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.NewInvalidState: pack = new NewInvalidStatePacket(_tools.ReadSignedByte(), _tools.ReadSignedByte()); break; case PacketType.Thunderbolt: pack = new ThunderboltPacket(_tools.ReadInt32(), _tools.ReadBoolean(), _tools.ReadInt32(), _tools.ReadInt32(), _tools.ReadInt32()); break; case PacketType.OpenWindow: pack = new OpenWindowPacket(_tools.ReadSignedByte(), _tools.ReadSignedByte(), _tools.ReadString(), _tools.ReadSignedByte()); break; case PacketType.CloseWindow: pack = new CloseWindowPacket(_tools.ReadSignedByte()); break; case PacketType.SetSlot: pack = new SetSlotPacket(_tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadSlotData()); break; case PacketType.WindowItems: var windowItemsPacket = new WindowItemsPacket(_tools.ReadSignedByte()); var count = _tools.ReadInt16(); windowItemsPacket.Count = count; var slotData = new SlotData[count]; for (short i = 0; i < count; i++) { slotData[i] = _tools.ReadSlotData(); } windowItemsPacket.SlotData = slotData; pack = windowItemsPacket; break; case PacketType.UpdateWindowProperty: pack = new UpdateWindowPropertyPacket(_tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadInt16()); break; case PacketType.Transaction: pack = new TransactionPacket(_tools.ReadSignedByte(), _tools.ReadInt16(), _tools.ReadBoolean()); break; case PacketType.CreativeInventoryAction: pack = new CreativeInventoryActionPacket(_tools.ReadInt16(), _tools.ReadSlotData()); break; case PacketType.UpdateSign: pack = new UpdateSignPacket(_tools.ReadInt32(), _tools.ReadInt16(), _tools.ReadInt32(), _tools.ReadString(), _tools.ReadString(), _tools.ReadString(), _tools.ReadString()); break; case PacketType.ItemData: pack = new ItemDataPacket(_tools.ReadInt16(), _tools.ReadInt16()); byte len = _tools.ReadByte(); ((ItemDataPacket)pack).Length = len; ((ItemDataPacket)pack).Text = _tools.ReadSignedBytes(len); break; case PacketType.IncrementStatistic: pack = new IncrementStatisticPacket(_tools.ReadInt32(), _tools.ReadSignedByte()); break; case PacketType.PlayerListItem: pack = new PlayerListItemPacket(_tools.ReadString(), _tools.ReadBoolean(), _tools.ReadInt16()); break; case PacketType.PluginMessage: pack = new PluginMessagePacket(_tools.ReadString()); var length = _tools.ReadInt16(); ((PluginMessagePacket)pack).Length = length; ((PluginMessagePacket)pack).Data = _tools.ReadSignedBytes(length); break; case PacketType.DisconnectKick: pack = new DisconnectKickPacket(_tools.ReadString()); break; } return(pack); }
IEnumerator RespawnPlayer(RespawnPacket packet) { yield return(new WaitForSeconds(3f)); if (packet.isBot) { string id = packet.id; string _name = packet.name; bool isBot = packet.isBot; Vector3 position = new Vector3(packet.posX, packet.posY, packet.posZ); Quaternion rotation = Quaternion.identity; int charId = packet.charId; float maxHealth = packet.maxHealth; float currentHealth = packet.currentHealth; if (maxHealth != 100) { maxHealth = 100; } if (currentHealth != 100) { currentHealth = 100; } Debug.Log("Respawning: " + (PlayerFaction)charId + " is bot: " + isBot + " at: " + position); GameObject playerPrefab = null; playerPrefab = warriorAIPrefab; if ((PlayerFaction)charId == PlayerFaction.Orc) { playerPrefab = orcAIPrefab; } GameObject player = Instantiate(playerPrefab, position, rotation); if (players.ContainsKey(id)) { Destroy(players[id]); players.Remove(id); } AI p = player.GetComponent <AI>(); if (id == localID) { localPlayer = player; } p.SetUpAI(id, charId, _name, maxHealth, currentHealth); players.Add(id, p); } else { string id = packet.id; Vector3 pos = new Vector3(packet.posX, packet.posY, packet.posZ); float ch = packet.currentHealth; players[id].GetComponent <vThirdPersonController>().currentHealth = 100; players[id].gameObject.SetActive(true); players[id].isDead = false; players[id].transform.position = pos; players[id].transform.rotation = Quaternion.identity; players[id].SetHealth(ch); try { ToggleAds(false); } catch (Exception ex) { Debug.Log(ex.Message + " | " + ex.StackTrace); } } }
public static void HandlePacketRespawn(Client client, RespawnPacket packet) { client.Owner.HandleRespawn(); }
public void NetThread() { SessionIDRequest sessionID = new SessionIDRequest(Storage.Network.UserName, Storage.Network.Password); sessionID.SendRequest(); SharedSecretGenerator sharedSecret = new SharedSecretGenerator(); //random byte[16] gen Timer positionUpdater = new Timer(PositionSender, null, Timeout.Infinite, 50); //create position updater Socket networkSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); networkSocket.Connect(Storage.Network.Server, Storage.Network.Port); _stream = new EnhancedStream(networkSocket); Handshake handshake = new Handshake(_stream); handshake.Send(Storage.Network.UserName, Storage.Network.Server, Storage.Network.Port); // connect Storage.Network.IsConnected = true; while (Storage.Network.IsConnected) { switch (_packetIDbuffer = (byte)_stream.ReadByte()) { case 0x00: KeepAlive keepAlive = new KeepAlive(_stream); break; case 0x01: LoginRequest loginRequest = new LoginRequest(_stream); //positionUpdater.Change(0, 50); ClientSettings clientSettings = new ClientSettings(_stream); clientSettings.Send(); break; case 0x03: ChatMessage chatMessage = new ChatMessage(_stream); break; case 0x04: TimeUpdate timeUpdate = new TimeUpdate(_stream); break; case 0x05: EntityEquipment entityEquipment = new EntityEquipment(_stream); break; case 0x06: SpawnPosition spawnPosition = new SpawnPosition(_stream); break; case 0x08: UpdateHealth updateHealth = new UpdateHealth(_stream); break; case 0x09: RespawnPacket respawnPacket = new RespawnPacket(_stream); break; case 0x0D: _playerPositionLook = new PlayerPositionLook(_stream); break; case 0x10: HeldItemChange heldItemChange = new HeldItemChange(_stream); break; case 0x11: UseBed useBed = new UseBed(_stream); break; case 0x12: Animation animation = new Animation(_stream); break; case 0x14: SpawnNamedEntity spawnNamedEntity = new SpawnNamedEntity(_stream); break; case 0x16: CollectItem collectItem = new CollectItem(_stream); break; case 0x17: SpawnObjectVehicle spawnObjectVehicle = new SpawnObjectVehicle(_stream); break; case 0x18: SpawnMob spawnMob = new SpawnMob(_stream); break; case 0x19: SpawnPainting spawnPainting = new SpawnPainting(_stream); break; case 0x1A: SpawnExperienceOrb spawnExperienceOrb = new SpawnExperienceOrb(_stream); break; case 0x1C: EntityVelocity entityVelocity = new EntityVelocity(_stream); break; case 0x1D: DestroyEntity destroyEntity = new DestroyEntity(_stream); break; case 0x1E: Entity entity = new Entity(_stream); break; case 0x1F: EntityRelativeMove entityRelativeMove = new EntityRelativeMove(_stream); break; case 0x20: EntityLook entityLook = new EntityLook(_stream); break; case 0x21: EntityLookRelativeMove entityLookRelativeMove = new EntityLookRelativeMove(_stream); break; case 0x22: EntityTeleport entityTeleport = new EntityTeleport(_stream); break; case 0x23: EntityHeadLook entityHeadLook = new EntityHeadLook(_stream); break; case 0x26: EntityStatus entityStatus = new EntityStatus(_stream); break; case 0x27: AttachEntity attachEntity = new AttachEntity(_stream); break; case 0x28: EntityMetadata entityMetadata = new EntityMetadata(_stream); break; case 0x29: EntityEffect entityEffect = new EntityEffect(_stream); break; case 0x2A: RemoveEntityEffect removeEntityEffect = new RemoveEntityEffect(_stream); break; case 0x2B: SetExperience setExperience = new SetExperience(_stream); break; case 0x33: ChunkData mapChunk = new ChunkData(_stream); break; case 0x34: MultiBlockChange multiBlockChange = new MultiBlockChange(_stream); break; case 0x35: BlockChange blockChange = new BlockChange(_stream); break; case 0x36: BlockAction blockAction = new BlockAction(_stream); break; case 0x37: BlockBreakAnimation blockBreakAnimation = new BlockBreakAnimation(_stream); break; case 0x38: MapChunkBulk mapChunkBulk = new MapChunkBulk(_stream); break; case 0x3C: Explosion explosion = new Explosion(_stream); break; case 0x3D: SoundParticleEffect soundParticleEffect = new SoundParticleEffect(_stream); break; case 0x3E: NamedSoundEffect namedSoundEffect = new NamedSoundEffect(_stream); break; case 0x46: ChangeGameState changeGameState = new ChangeGameState(_stream); break; case 0x47: Thunderbolt thunderbolt = new Thunderbolt(_stream); break; case 0x64: OpenWindow openWindow = new OpenWindow(_stream); break; case 0x65: CloseWindow closeWindow = new CloseWindow(_stream); break; case 0x67: SetSlot setSlot = new SetSlot(_stream); break; case 0x68: SetWindowItems setWindowItems = new SetWindowItems(_stream); break; case 0x69: UpdateWindowProperty updateWindowProperty = new UpdateWindowProperty(_stream); break; case 0x6A: ConfirmTransaction confirmTransaction = new ConfirmTransaction(_stream); break; case 0x6B: CreativeInventoryAction creativeInventoryAction = new CreativeInventoryAction(_stream); break; case 0x6C: EnchantItem enchantItem = new EnchantItem(_stream); break; case 0x82: UpdateSign updateSign = new UpdateSign(_stream); break; case 0x83: ItemData itemData = new ItemData(_stream); break; case 0x84: UpdateTileEntity updateTileEntity = new UpdateTileEntity(_stream); break; case 0xC8: IncrementStatistic incrementStatistic = new IncrementStatistic(_stream); break; case 0xC9: PlayerListItem playerListItem = new PlayerListItem(_stream); break; case 0xCA: PlayerAbilities playerAbilities = new PlayerAbilities(_stream); break; case 0xCB: TabComplete tabcomplete = new TabComplete(_stream); break; case 0xFA: PluginMessage pluginMessage = new PluginMessage(_stream); break; case 0xFC: EncryptionKeyResponse encryptionKeyResponse = new EncryptionKeyResponse(_stream); encryptionKeyResponse.Get(); _stream = new AesStream(networkSocket, _stream, sharedSecret.Get); ClientStatuses clientStatuses = new ClientStatuses(_stream); clientStatuses.Send(0); break; case 0xFD: EncryptionKeyRequest encryptionKeyRequest = new EncryptionKeyRequest(_stream, sharedSecret.Get, sessionID.GetID(), Storage.Network.UserName); // encryptionKeyResponse = new EncryptionKeyResponse(_stream); encryptionKeyResponse.Send(encryptionKeyRequest.GetEncSharedSecret(), encryptionKeyRequest.GetEncToken()); break; case 0xFF: positionUpdater = null; DisconnectKick disconnectKick = new DisconnectKick(_stream); networkSocket.Disconnect(false); break; default: throw new Exception("We got a Unknown Packet (" + _packetIDbuffer + ")from the Server. This should not happen: Error in Packet parser"); } } }