Example #1
0
        //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); }
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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); }
        }
Example #4
0
        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); }
        }
Example #5
0
        /*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); }
        }
Example #6
0
        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;
            }
        }
Example #7
0
        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;
            }
        }