public static void ProcessClientPacket(int packetID) { switch ((PacketID)packetID) { case PacketID.entityUpdate: #region entityUpdate var entityUpdate = new EntityUpdate(creader); if (players.ContainsKey(entityUpdate.guid)) { entityUpdate.Filter(players[entityUpdate.guid]); entityUpdate.Merge(players[entityUpdate.guid]); } else { players.Add(entityUpdate.guid, entityUpdate); } if (entityUpdate.name != null) { RefreshPlayerlist(); } SendUDP(entityUpdate.Data); break; #endregion case PacketID.entityAction: #region entity action EntityAction entityAction = new EntityAction(creader); switch (entityAction.type) { case ActionType.talk: break; case ActionType.staticInteraction: break; case ActionType.pickup: break; case ActionType.drop: //send item back to dropper because dropping is disabled to prevent chatspam if (form.radioButtonDestroy.Checked) { new ChatMessage() { message = "item destroyed" }.Write(cwriter); } else { var serverUpdate = new ServerUpdate(); var pickup = new ServerUpdate.Pickup() { guid = guid, item = entityAction.item }; serverUpdate.pickups.Add(pickup); if (form.radioButtonDuplicate.Checked) { serverUpdate.pickups.Add(pickup); } serverUpdate.Write(cwriter); } break; case ActionType.callPet: var petCall = new SpecialMove() { Guid = guid }; SendUDP(petCall.data); break; default: //unknown type break; } break; #endregion case PacketID.hit: #region hit var hit = new Hit(creader); var attack = new Attack() { Target = (ushort)hit.target, Damage = hit.damage, Stuntime = hit.stuntime, Skill = hit.isYellow, Type = hit.type, ShowLight = hit.showlight == 1, Critical = hit.critical == 1 }; SendUDP(attack.data); lastTarget = attack.Target; break; #endregion case PacketID.passiveProc: #region passiveProc var passiveProc = new PassiveProc(creader); var proc = new Proc() { Target = (ushort)passiveProc.target, Type = passiveProc.type, Modifier = passiveProc.modifier, Duration = passiveProc.duration }; SendUDP(proc.data); break; #endregion case PacketID.shoot: #region shoot var shootPacket = new Resources.Packet.Shoot(creader); var shootDatagram = new Resources.Datagram.Shoot() { Position = shootPacket.position, Velocity = shootPacket.velocity, Scale = shootPacket.scale, Particles = shootPacket.particles, Projectile = shootPacket.projectile }; SendUDP(shootDatagram.data); break; #endregion case PacketID.chat: #region chat var chatMessage = new ChatMessage(creader); if (chatMessage.message.ToLower() == @"/plane") { Console.Beep(); var serverUpdate = new ServerUpdate() { blockDeltas = VoxModel.Parse("model.vox"), }; foreach (var block in serverUpdate.blockDeltas) { block.position.x += 8286946; block.position.y += 8344456; block.position.z += 220; } serverUpdate.Write(cwriter); } else { var chat = new Chat(chatMessage.message) { Sender = guid //client doesn't send this //(ushort)chatMessage.sender }; SendUDP(chat.data); } break; #endregion case PacketID.chunk: #region chunk var chunk = new Chunk(creader); break; #endregion case PacketID.sector: #region sector var sector = new Sector(creader); break; #endregion case PacketID.version: #region version var version = new ProtocolVersion(creader); if (version.version != 3) { version.version = 3; version.Write(cwriter, true); } else { var connect = new Connect(); SendUDP(connect.data); } break; #endregion default: form.Log("unknown client packet\n", Color.Magenta); break; } }