//Marked virtual so ConsolePlayer can override it public virtual void SendMessage(byte pid, string message) { try { foreach (string line in SplitLines(message)) { if (!loggedIn) { return; } Packet msgPacket = new Packet(66); msgPacket.Append((byte)ServerPacket.Message); msgPacket.Append(pid); msgPacket.Append(Sanitize(line)); this.SendPacket(msgPacket); } } catch (IOException) { } catch (SocketException) { } catch (Exception e) { Program.server.logger.log(e); } }
public static void GlobalBlockchange(short x, short y, short z, byte type) { Packet blockPacket = new Packet(8); blockPacket.Append((byte)ServerPacket.Blockchange); blockPacket.Append(x); blockPacket.Append(y); blockPacket.Append(z); blockPacket.Append(type); foreach (Player p in Program.server.playerlist) { try { if (p != null && p.loggedIn && !p.disconnected) { p.SendPacket(blockPacket); } } catch { p.Disconnect(false); } } }
public void SendPlayerPositionChange(Player p) { try { Packet posChange = new Packet(10); posChange.Append((byte)ServerPacket.MoveRotate); posChange.Append(p.id); posChange.Append(p.x); posChange.Append(p.y); posChange.Append(p.z); posChange.Append(p.rotx); posChange.Append(p.roty); this.SendPacket(posChange); } catch (IOException) { } catch (SocketException) { } catch (Exception e) { Program.server.logger.log(e); } }
public void SendSpawn(short[] pos, byte[] rot) { try { Packet spawn = new Packet(10); //Now move+rotate (teleport) spawn.Append((byte)ServerPacket.MoveRotate); //Move+Rotate spawn.Append((byte)255); // Self spawn.Append(pos[0]); //x position spawn.Append(pos[1]); //y position spawn.Append(pos[2]); //z position spawn.Append(rot[0]); //x rotation spawn.Append(rot[1]); //y rotation this.SendPacket(spawn); } catch (IOException) { } catch (SocketException) { } catch (Exception e) { Program.server.logger.log(e); } }
/*public void SendMap(ref byte[] leveldata, short width, short height, short depth) * { * try * { * byte[] buffer = new byte[leveldata.Length + 4]; * BitConverter.GetBytes(IPAddress.HostToNetworkOrder(leveldata.Length)).CopyTo(buffer, 0); * for (int i = 0; i < leveldata.Length; ++i) * { * buffer[4 + i] = leveldata[i]; * } * buffer = GZip(buffer); * int number = (int)Math.Ceiling(((double)buffer.Length) / 1024); * for (int i = 1; buffer.Length > 0; ++i) * { * Packet chunk = new Packet(1028); * short length = (short)Math.Min(buffer.Length, 1024); * chunk.Append((byte)ServerPacket.MapChunk); * chunk.Append(length); * chunk.Append(byteArraySlice(ref buffer, 0, length)); * for (short j = length; j < 1024; j++) * { * chunk.Append((byte)0); * } * byte[] tempbuffer = new byte[buffer.Length - length]; * Buffer.BlockCopy(buffer, length, tempbuffer, 0, buffer.Length - length); * buffer = tempbuffer; * chunk.Append((byte)((i * 100.0) / number)); * this.SendPacket(chunk); * System.Threading.Thread.Sleep(1); * } * Packet mapFinal = new Packet(7); * mapFinal.Append((byte)ServerPacket.MapFinal); * mapFinal.Append((short)width); * mapFinal.Append((short)depth); * mapFinal.Append((short)height); * this.SendPacket(mapFinal); * * //Spawn player * this.SpawnPlayer(this, true); * this.SendSpawn(new short[3] { 8 * 32 + 16, 64, 8 * 32 + 16 }, new byte[2] { 0, 0 }); * * //Spawn other players * foreach (Player p in Program.server.playerlist) * { * if (p != null && p.loggedIn && p != this) * { * this.SpawnPlayer(p, false); * } * } * * //Spawn self * GlobalSpawnPlayer(this); * } * catch (IOException) { } * catch (SocketException) { } * catch (Exception e) { Program.server.logger.log(e); } * * } */ public void SendMap(World w) { try { byte[] buffer = new byte[w.blocks.Length + 4]; BitConverter.GetBytes(IPAddress.HostToNetworkOrder(w.blocks.Length)).CopyTo(buffer, 0); for (int i = 0; i < w.blocks.Length; ++i) { buffer[4 + i] = Blocks.ConvertType(w.blocks[i]); } buffer = GZip(buffer); int number = (int)Math.Ceiling(((double)buffer.Length) / 1024); for (int i = 1; buffer.Length > 0; ++i) { Packet chunk = new Packet(1028); short length = (short)Math.Min(buffer.Length, 1024); chunk.Append((byte)ServerPacket.MapChunk); chunk.Append(length); chunk.Append(byteArraySlice(ref buffer, 0, length)); for (short j = length; j < 1024; j++) { chunk.Append((byte)0); } byte[] tempbuffer = new byte[buffer.Length - length]; Buffer.BlockCopy(buffer, length, tempbuffer, 0, buffer.Length - length); buffer = tempbuffer; chunk.Append((byte)((i * 100.0) / number)); this.SendPacket(chunk); System.Threading.Thread.Sleep(1); } Packet mapFinal = new Packet(7); mapFinal.Append((byte)ServerPacket.MapFinal); mapFinal.Append(w.width); mapFinal.Append(w.height); mapFinal.Append(w.depth); this.SendPacket(mapFinal); //Spawn player (convert map coordinates to player coordinates and set player pos) this.x = (short)(w.spawnx << 5); this.y = (short)(w.spawny << 5); this.z = (short)(w.spawnz << 5); this.rotx = w.srotx; this.roty = w.sroty; this.SpawnPlayer(this, true); //Spawn other players foreach (Player p in Program.server.playerlist) { if (p != null && p.loggedIn && p != this) { this.SpawnPlayer(p, false); } } //Spawn self GlobalSpawnPlayer(this); this.world = w; } catch (IOException) { } catch (SocketException) { } catch (Exception e) { Program.server.logger.log(e); } }
public static void Base(Player p, string message, byte newrank) { if (message.Trim().Equals("")) { p.SendMessage(0xFF, "No player specified"); return; } Player pl = uMiner.Player.FindPlayer(p, message, false); if (pl != null) { if (pl.username.Equals(p.username)) { p.SendMessage(0xFF, "You can't change your own rank!"); } if (pl.rank < newrank || p.rank > pl.rank || p.username.Equals("[console]")) { byte oldRank = pl.rank; pl.rank = newrank; Program.server.playerRanksDict[pl.username.ToLower()] = pl.rank; Program.server.saveRanks(); if (newrank == 0) { pl.prefix = "[:(]"; } else if (newrank < Rank.RankLevel("operator")) { pl.prefix = ""; } else if (newrank == Rank.RankLevel("operator")) { pl.prefix = "+"; } else if (newrank == Rank.RankLevel("owner")) { pl.prefix = "@"; } //Clear the player's binding as a safeguard pl.binding = Bindings.None; //If the person was OP before, disable adminium editing //Vice versa as well if (oldRank >= Rank.RankLevel("operator") && newrank < Rank.RankLevel("operator")) { Packet deop = new Packet(2); deop.Append((byte)ServerPacket.RankUpdate); deop.Append((byte)0x0); pl.SendPacket(deop); } else if (oldRank < Rank.RankLevel("operator") && newrank >= Rank.RankLevel("operator")) { Packet deop = new Packet(2); deop.Append((byte)ServerPacket.RankUpdate); deop.Append((byte)0x64); pl.SendPacket(deop); } //Despawn and respawn player Packet despawn = new Packet(2); despawn.Append((byte)ServerPacket.PlayerDie); despawn.Append(pl.id); foreach (Player ply in Program.server.playerlist) { if (ply != null && ply != pl && ply.loggedIn && !ply.disconnected) { ply.SendPacket(despawn); } } uMiner.Player.GlobalSpawnPlayer(pl); uMiner.Player.GlobalMessage(p.GetFormattedName() + "&e set " + pl.GetFormattedName() + "&e's rank to " + Rank.GetColor(newrank) + Rank.RankName(newrank) + "&e"); } else { p.SendMessage(0xFF, "Player " + pl.GetFormattedName() + "&e cannot have rank set to " + Rank.GetColor(newrank) + Rank.RankName(newrank)); } return; } }