package Virtual;

import java.net.Socket;
import java.sql.*;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Random;
import java.net.ServerSocket;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;

import Database.Database;
import Database.DatabaseClient;
import Encoding.*;
import Manager.Catalogo;
import Manager.Room;
import Manager.Pathfinding;
import Manager.ModTool;
import Server.Utility;
import Manager.Furniture;

public class VirtualServer implements Runnable
{

    public Socket Client;
    public Database db;
    public DatabaseClient DB;
    public Comunication TH;
    public Packet X;
    public Catalogo ct;
    public Thread thread;
    public Utility Utility;
    public Room rm;
    public ModTool M;
    public ServerSocket Server1;
    public Thread thcam;

    
    public VirtualServer(Socket Client,Database db,Comunication TH,Thread thread, Room rm,ServerSocket Server1){

        this.Client = Client;
        this.db = db;
        this.TH = TH;
        this.thread = thread;
        this.rm = rm;
        this.Server1 = Server1;
        DB = new DatabaseClient(db); //DATABASE CLIENT
        X = new Packet(Client); //PACCHETTI
        ct = new Catalogo(DB); //CATALOGO
        Utility = new Utility(DB); //UTILY
        M = new ModTool(DB,Utility,TH); //MODERATION
     }

      
    public String[] user;
    public String data;
          
        public void run()
        {

            try
               {
                  String header = "";
                  boolean development = true; //Modalità Sviluppatore

                  user = new String[100];

                  while(true){
                      
                       data = X.ReadPacket();
                       
                       if(!data.equals("")){

                        if(data.equals("<policy-file-request/>")){ policy(); break; }

                        data = data.substring(3); //Elimina i primi 3 char
                        header = data.substring(0,2); //Header Pacchetti primi 2
                        System.out.println("I->> " + data); //Packet Input

                        switch(base64.Decode(header)){
                            case 206: PacketCN(); break; //CN
                            case 415: PacketF_(); break; //F_
                            case 41: PacketCi(); break; //@i
                            case 39: PacketCg(); break; //@g
                            case 37: PacketCe(); break; //@e
                            case 33: PacketCa(); break; //@a
                            case 101: PacketAe(); break; //Ae
                            case 391: PacketFG(); break; //FG
                            case 215: PacketCW(); break; //CW
                            case 53: PacketHu(); break; //@u
                            case 230: PacketCf(); break; //Cf
                            case 52: PacketHt(); break; //@t
                            case 380: PacketEI(); break; //E|
                            case 434: PacketFr(); break; //Fr
                            case 433: PacketFq(); break; //Fq
                            case 432: PacketFp(); break; //Fp
                            case 435: PacketFs(); break; //Fs
                            case 436: PacketFt(); break; //Ft
                            case 182: PacketBv(); break; //Bv
                            case 430: PacketFn(); break; //Fn
                            case 431: PacketFo(); break; //Fo
                            case 439: PacketFw(); break; //Fw
                            case 100: PacketAd(); break; //Ad
                            case 382: PacketE_(); break; //E~
                            case 3011: PacketoC(); break; //oC
                            case 438: PacketFv(); break; //Fv
                            case 437: PacketFu(); break; //Fu
                            case 19: PacketChS(); break; //@S
                            case 20: PacketChT(); break; //@T
                            case 387: PacketFC(); break; //FC
                            case 29: PacketChPQ(); break; //@]
                            case 44: PacketHl(); break; //@l
                            case 102: PacketAf(); break; //Af
                            case 94: PacketAf(); break; //A^
                            case 454:  PacketGF(); break; //GF
                            case 261:  PacketDE(); break; //DE
                            case 459:  PacketGK(); break; //GK
                            case 450:  PacketGB(); break; //GB
                            case 93:  PacketAPQL(); break; //A]
                            case 453:  PacketGE(); break; //GE
                            case 451:  PacketGC(); break; //GC
                            case 262:  PacketDF(); break; //DF
                            case 455:  PacketGG(); break; //GG
                            //case 463:  PacketGO(); break; //GO
                            case 317: PacketDP(); break; //D}
                            case 318: PacketDO(); break; //D~
                            case 75: PacketAK(); break; //AK
                            case 461: PacketGM(); break; //GM
                            case 400: PacketFP(); break; //FP
                            case 462: PacketGN(); break; //GN
                            case 97: PacketAa(); break; //Aa
                            case 56: PacketHx(); break; //@x
                            case 388: PacketFD(); break; //FD
                            case 157: PacketBA(); break; //B]
                            case 155: PacketBPQ(); break; //B[
                            case 159: PacketB_(); break; //B_
                            case 55: PacketHw(); break; //@w
                            case 23: PacketChW(); break; //@W
                            case 73: PacketAI(); break; //AI
                            case 371: PacketEs(); break; //Es
                            case 95: PacketA_(); break; //A_
                            case 384: PacketFCh(); break; //F@
                            case 345: PacketEY(); break; //EY
                            case 392: PacketFH(); break; //FH
                            case 346: PacketEZ(); break; //EZ
                            case 348: PacketESl(); break; //E\
                            case 3030: PacketoV(); break; //oV
                            case 386: PacketFB(); break; //FB
                            case 96: PacketAD(); break; //A`
                            case 393: PacketFI(); break; //FI
                            case 347: PacketEPq(); break; //E[
                            case 67: PacketAC(); break; //AC
                            case 90: PacketAZ(); break; //AZ
                            case 341: PacketEU(); break; //EU
                            case 343: PacketEW(); break; //EW

                            default: if(development) System.out.println("HEADER <" + header + "> NON CODATO!");  break;
                        }

                       }else{ break; }

                 }
             if(roomstats){ rm.deleteuseroom(Integer.parseInt(user[0])); /*Elimina utente dalle altre room*/ }
             //<editor-fold defaultstate="collapsed" desc="Disconnessione Utente dagli Amici">
           ResultSet friends1 = DB.Query("SELECT * FROM messenger_friendships WHERE userid = '" + user[0] + "'");
           while(friends1.next()){
               if(TH.isOnline(friends1.getInt("friendid"))){
                    TH.SendPacketID(friends1.getInt("friendid"), "@M" + "H" + (char)2 + "H" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "IHH" + (char)2 + "H" + (char)2 + user[9] + (char)2 + (char)2 + (char)2 + (char)1);
               }
           }
           ResultSet friends2 = DB.Query("SELECT * FROM messenger_friendships WHERE friendid = '" + user[0] + "'");
           while(friends2.next()){
               if(TH.isOnline(friends2.getInt("userid"))){
                    TH.SendPacketID(friends2.getInt("userid"), "@M" + "H" + (char)2 + "H" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "IHH" + (char)2 + "H" + (char)2 + user[9] + (char)2 + (char)2 + (char)2 + (char)1);
               }
           }
                  //</editor-fold>
             X.co.close();
             X.ci.close();
             Client.close();
             if(user[0] != null){ TH.Delete(Integer.parseInt(user[0])); }
             System.out.println("Chiusura connessione " + Client.getInetAddress());

               }
                   catch (Exception e)
               {
                    e.printStackTrace();
               }

        }
        
        //<editor-fold defaultstate="collapsed" desc="Login">
        //<editor-fold defaultstate="collapsed" desc="Policy">
        private void policy()
        {
            X.SendPacket("<?xml version=\"1.0\"?>\r\n<!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\">\r\n<cross-domain-policy>\r\n   <allow-access-from domain=\"*\" to-ports=\"1-65535\" />\r\n</cross-domain-policy>" + (char)0);
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="CN">
        private void PacketCN()
        {
            X.SendPacket("DA" + vl64.Encode(9) + vl64.Encode(0) + vl64.Encode(0) + vl64.Encode(1) + vl64.Encode(1) + vl64.Encode(3) + vl64.Encode(0) + vl64.Encode(2) + vl64.Encode(1) + vl64.Encode(4) + vl64.Encode(0) + vl64.Encode(5) + "dd-MM-yyyy" + vl64.Encode(7) + (char)2 + vl64.Encode(8) + "hotel-co.uk" + vl64.Encode(9) + (char)2);
            //X.SendPacket("@A" + "19134206031341430719659968609242212423441523519501186741886336819626804115740");
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Autenticate">
        private void PacketF_()
        {

            try{
                        ResultSet userdate = DB.Query("SELECT id,username,figure,rank,sex,mission,credits,pixels,tickets,lastvisit,respects FROM utenti WHERE ssoticket = '" + data.substring(4) + "' LIMIT 1");

                        if(userdate.next()){

                            if(TH.isOnline(userdate.getInt("id"))){
                                Client.close();
                                return;
                            }
                           user[0] = userdate.getString("id");
                           user[1] = userdate.getString("username");
                           user[2] = userdate.getString("figure");
                           user[3] = userdate.getString("rank");
                           user[4] = userdate.getString("sex");
                           user[5] = userdate.getString("mission");
                           user[6] = userdate.getString("credits");
                           user[7] = userdate.getString("tickets");
                           user[8] = userdate.getString("pixels");
                           user[9] = userdate.getString("lastvisit");
                           user[10] = userdate.getString("respects");

                        }else{      
                            X.SendPacket("D_" + "D_1");
                            data = "";
                            return;
                        }
                        TH.HashAddID(Integer.parseInt(user[0]), X.co);


                        ResultSet fuserights = DB.Query("SELECT fuseright FROM system_fuserights WHERE minrank <= '" + user[3] + "'");
                        StringBuffer addString = new StringBuffer();
                        int i = 0;
                        while (fuserights.next())
                        {
                        i++;
                        addString.append(fuserights.getString("fuseright") + (char)2);
                        }


                        int room = 0;
                        String principal_room = "";
                      ResultSet room_p = DB.Query("SELECT * FROM rooms WHERE principal = 1 AND owner = '" + user[1] + "'");
                      while(room_p.next()) room = room_p.getInt("id");
                      if(room > 0) principal_room = vl64.Encode(room);
                      else principal_room = vl64.Encode(0);
                        
                        X.SendPacket("@B" + vl64.Encode(i) + addString + (char)1 + "GLH" + (char)1 + "DbIH" + (char)1 + "@C" + (char)1 + "HEI" + (char)1 + "Fv" + vl64.Encode(Integer.parseInt(user[8])) + (char)1 + "GG" + principal_room + (char)1 + "GJRGH");

                        
                        ResultSet fav = DB.Query("SELECT * FROM rooms_favourite WHERE user_id = '" + user[0] + "'");
                      while(fav.next()){
                          X.SendPacket("GK" + vl64.Encode(fav.getInt("room_id")) + "I");
                      }

                        // Invia Categorie Stanze
                      int cat_n = 0;
                      String cat_packet = new String();
                      ResultSet cat = DB.Query("SELECT * FROM rooms_category");
                      while(cat.next()){
                          if(cat.getInt("default") > 0) cat_packet += vl64.Encode(0) + cat.getString("title") + (char)2;
                          else cat_packet += vl64.Encode(1) + vl64.Encode(cat.getInt("id")) + cat.getString("title") + (char)2;
                          cat_n++;
                      }
                      if(cat_n > 0) cat_packet += vl64.Encode(1) + (char)1;
                      else cat_packet += vl64.Encode(0) + (char)1;
                      X.SendPacket("C]RB" + cat_packet);

                        if(Integer.parseInt(user[3]) >= 6){
                        PacketHS(); //Mod Tool
                        }

                    //X.SendPacket("BK" + "Benvenuto in LiveXenon Emulator Java");
                    //X.SendPacket("Ba" + "LiveXenon Emulator Java" + (char)2 + "http://livexenon.info/" + (char)2);

                       X.SendPacket("@E" + user[0] + (char)2 + user[1] + (char)2 + user[2] + (char)2 + user[4] + (char)2 + (char)2 + (char)2 + "H" + (char)2 + "HIHKK" + (char)1 +
                               ConsoleGeneral() + (char)1 +
                               "@F" + user[6] + ".0" + (char)2 + (char)1 +
                               "@Ghabbo_club" + (char)2 + vl64.Encode(30) + vl64.Encode(1) + vl64.Encode(3) + vl64.Encode(1) + "HHHH"); //HC
                                //"@Ghabbo_club" + (char)2 + "QGRHKIIIX@DRN"); //VIP
                       //"@Ghabbo_club" + (char)2 + "QGRHKIIIX@DRN"); //VIP

                       //<editor-fold defaultstate="collapsed" desc="Timer Pixels">
                        Timer timer = new Timer();
                        TimerTask SendPixels = new SendPixels();

                        timer.schedule(SendPixels, 0, (20 * 60) * 1000);
                        //</editor-fold>

                       PacketEI(); // Invio stanze pubbliche

                       //<editor-fold defaultstate="collapsed" desc="Invia Richieste di Amicizia Ricevute">
                       ResultSet requestcount = DB.Query("SELECT COUNT(requestid) AS count FROM messenger_friendrequests WHERE userid_to = '" + user[0] + "'");
                       requestcount.next();
                       int num_request = requestcount.getInt("count");
                       int RequestIDs[] = new int[num_request];
                       int ru = 0;
                       ResultSet requests = DB.Query("SELECT * FROM messenger_friendrequests WHERE userid_to = '" + user[0] + "'");
                       while(requests.next()){ RequestIDs[ru] = requests.getInt("userid_from"); ru++; }
                       for(int z = 0; z < num_request; z++){
                           ResultSet userr = DB.Query("SELECT id,username FROM utenti WHERE id = '" + RequestIDs[z] + "'");
                           userr.next();
                           X.SendPacket("BD" + vl64.Encode(userr.getInt("id")) + userr.getString("username") + (char)2 + userr.getInt("id") + (char)2);
                       }
                       //</editor-fold>
                       //<editor-fold defaultstate="collapsed" desc="Connessione agli amici">
                       ResultSet friends1 = DB.Query("SELECT * FROM messenger_friendships WHERE userid = '" + user[0] + "'");
           while(friends1.next()){
               if(TH.isOnline(friends1.getInt("friendid"))){
                    TH.SendPacketID(friends1.getInt("friendid"), "@M" + "H" + "I" + "H" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "IIH" + user[2] + (char)2 + "H" + (char)2 + user[5] + (char)2 + (char)2 + (char)2);
               }
           }
           ResultSet friends2 = DB.Query("SELECT * FROM messenger_friendships WHERE friendid = '" + user[0] + "'");
           while(friends2.next()){
               if(TH.isOnline(friends2.getInt("userid"))){
                    TH.SendPacketID(friends2.getInt("userid"), "@M" + "H" + "I" + "H" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "IIH" + user[2] + (char)2 + "H" + (char)2 + user[5] + (char)2 + (char)2 + (char)2);
               }
           }
                       //</editor-fold>

                        

                       }catch (Exception con)
                       {
                           con.printStackTrace();
                       }
                       
                      }
        //</editor-fold>
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Console">
        //<editor-fold defaultstate="collapsed" desc="Console General">
        public String ConsoleGeneral(){
            try{
                        ArrayList<Integer> consoleid = new ArrayList<Integer>();
                        ResultSet consoledate = DB.Query("SELECT friendid FROM messenger_friendships WHERE userid = '" + user[0] + "'");
                        while (consoledate.next())
                        {
                            consoleid.add(consoledate.getInt("friendid"));
                        }
                        ResultSet consoledata = DB.Query("SELECT userid FROM messenger_friendships WHERE friendid = '" + user[0] + "'");
                        while (consoledata.next())
                        {
                            consoleid.add(consoledata.getInt("userid"));
                        }
                        int v;
                         StringBuffer online = new StringBuffer();
                         StringBuffer offline = new StringBuffer();
                        for (v=0; v<consoleid.size(); v++)
                        {
                            String namec = ""; String figurec = ""; String missionc = ""; String lastvisit = ""; int roomid = 0;
                            if(TH.isOnline(consoleid.get(v)))
                            {
                                ResultSet onlinedata = DB.Query("SELECT username,figure,mission,room_id FROM utenti WHERE id = '" + consoleid.get(v) + "'");

                                while (onlinedata.next())
                                    {
                                       namec = onlinedata.getString("username");
                                       figurec = onlinedata.getString("figure");
                                       missionc = onlinedata.getString("mission");
                                       roomid = onlinedata.getInt("room_id");
                                       online.append(vl64.Encode(consoleid.get(v)) + namec + (char)2 + "II" + ((roomid != 0) ? vl64.Encode(1) : vl64.Encode(0)) + figurec + (char)2 + "H" +  missionc + (char)2 + (char)2 + (char)2);
                                    }
                                //online.append(vl64.Encode(consoleid.get(v)) + namec + (char)2 + "II" + ((roomid != 0) ? vl64.Encode(1) : vl64.Encode(0)) + figurec + (char)2 + "H" +  missionc + (char)2 + (char)2);
                            }else{
                                ResultSet onlinedata = DB.Query("SELECT username,lastvisit FROM utenti WHERE id = '" + consoleid.get(v) + "'");

                                while (onlinedata.next())
                                    {
                                       namec = onlinedata.getString("username");
                                       lastvisit = onlinedata.getString("lastvisit");
                                       offline.append(vl64.Encode(consoleid.get(v)) + namec + (char)2 + "IHH" + (char)2 + "H" + (char)2 + lastvisit + (char)2 + (char)2);
                                    }
                                //offline.append(vl64.Encode(consoleid.get(v)) + namec + (char)2 + "IHH" + (char)2 + "H" + (char)2 + lastvisit + (char)2 + (char)2);
                            }

                        }

                       String console = ("@L" + vl64.Encode(200) + vl64.Encode(200)+ vl64.Encode(600)+ vl64.Encode(900) + vl64.Encode(0) + vl64.Encode(consoleid.size()) + online + offline + "PYH");
        return console;
        }catch (Exception cn){
            cn.printStackTrace();
            return "";
        }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Cerca in Console">
        private void PacketCi()
        {
            String keyw = data.substring(3);
            String keyword = data.substring((keyw.length() - (vl64.Encode(vl64.Decode(keyw))).length()));
            try{
                ResultSet count = DB.Query("SELECT COUNT(id) AS count FROM utenti WHERE username LIKE '%"+ keyword +"%' LIMIT 10");
                count.next();
                int num_rows = count.getInt("count");
                String users[][] = new String[num_rows][5];
            ResultSet userdate = DB.Query("SELECT id,username,figure,mission,room_id,lastvisit FROM utenti WHERE username LIKE '%"+ keyword +"%' LIMIT 10");
            StringBuffer not_friends = new StringBuffer(10);
            StringBuffer friends = new StringBuffer(10);
              int c = 0;
              int y = 0;
              int friends_c = 0;
                 while (userdate.next())
                     {
                      users[y][0] = userdate.getString("id");
                      users[y][1] = userdate.getString("username");
                      users[y][2] = userdate.getString("figure");
                      users[y][3] = userdate.getString("mission");
                      users[y][4] = userdate.getString("room_id");
                      y++;
                      }


              for(int i = 0; i < users.length; i++){
                  boolean is_friend = false;
                  ResultSet friend = DB.Query("SELECT * FROM messenger_friendships WHERE userid = '" + users[i][0] + "'");
                  while(friend.next()){ is_friend = (friend.getString("friendid") == null) ? false : true; }

                  ResultSet friend1 = DB.Query("SELECT * FROM messenger_friendships WHERE friendid = '" + users[i][0] + "'");
                  while(friend1.next()){ is_friend = (friend1.getString("userid") == null) ? false : true; }

                  if(!is_friend){
                      not_friends.append(vl64.Encode(Integer.parseInt(users[i][0])) + users[i][1] + (char)2 + users[i][3] + (char)2 + ((TH.isOnline(Integer.parseInt(users[i][0]))) ? vl64.Encode(1) : vl64.Encode(0)) + ((Integer.parseInt(users[i][4]) != 0) ? vl64.Encode(1) : vl64.Encode(0)) + (char)2 + vl64.Encode(1) + ((TH.isOnline(Integer.parseInt(users[i][0]))) ? users[i][2]: "") + (char)2 + (char)2 + (char)2);
                      c++;
                  }else{
                      friends.append(vl64.Encode(Integer.parseInt(users[i][0])) + users[i][1] + (char)2 + users[i][3] + (char)2 + ((TH.isOnline(Integer.parseInt(users[i][0]))) ? vl64.Encode(1) : vl64.Encode(0)) + ((Integer.parseInt(users[i][4]) != 0) ? vl64.Encode(1) : vl64.Encode(0)) + (char)2 + vl64.Encode(1) + ((TH.isOnline(Integer.parseInt(users[i][0]))) ? users[i][2]: "") + (char)2 + (char)2 + (char)2);
                      friends_c++;
                  }
              }
                      X.SendPacket("Fs" + vl64.Encode(friends_c) + friends + vl64.Encode(c) + not_friends + (char)1);

              }catch (Exception con)
              {
                 con.printStackTrace();
              }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Invia Amicizia">
        private void PacketCg()
        {
            try{
                      ResultSet userdate = DB.Query("SELECT id,username FROM utenti WHERE username = '"+ data.substring(data.length() - base64.Decode(data.substring(2,4))) +"' LIMIT 1");
                      int id = 0;
                      while (userdate.next())
                      {
                          id = userdate.getInt("id");
                          if(TH.isOnline(userdate.getInt("id"))){
                                TH.SendPacketID(userdate.getInt("id"),"BD" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + user[0] + (char)2);
                          }
                      }
                      DB.Update("INSERT INTO messenger_friendrequests (userid_from, userid_to) VALUES ('"+ user[0] +"', '"+ id +"')");
            }catch (Exception con)
            {
                 con.printStackTrace();
            }

        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Accetta Amicizia">
        private void PacketCe()
        {
            try{
                      ResultSet userdate = DB.Query("SELECT username,figure,mission,lastvisit FROM utenti WHERE id = '"+ vl64.Decode(data.substring(3)) +"' LIMIT 1");

                        //data.substring(3); //ID PERSONA ACCETTATA
                      while (userdate.next())
                      {
                        if(TH.isOnline(vl64.Decode(data.substring(3)))){
                         X.SendPacket("@M" + "H" + "I" + "H" + data.substring(3) + userdate.getString("username") + (char)2 + "IIH" + userdate.getString("figure") + (char)2 + "H" + userdate.getString("mission") + (char)2 + (char)2);
                         TH.SendPacketID(vl64.Decode(data.substring(3)), "@M" + "H" + "I" + "H" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "IIH" +  user[2] + (char)2 + "H" + user[5] + (char)2 + (char)2);
                        }else{
                         X.SendPacket("@M" + "H" + "I" + "H" + data.substring(3) + userdate.getString("username") + (char)2 + "IHH" + (char)2 + "H" + (char)2 + userdate.getString("lastvisit") + (char)2 + (char)2);
                         //TH.SendPacketID(vl64.Decode(data.substring(3)), "@M" + "HIH" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "IHH" + (char)2 + "H" + (char)2 + user[9] + (char)2 + (char)2);
                        }
                      }

                      DB.Update("DELETE FROM messenger_friendrequests WHERE userid_from = '" + vl64.Decode(data.substring(3)) + "' AND userid_to = '" + user[0] + "'");
                      DB.Update("INSERT INTO messenger_friendships VALUES ('" + user[0] + "', '" + vl64.Decode(data.substring(3)) + "')");
            }catch (Exception con)
            {
                 con.printStackTrace();
            }

        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Rifiuta Amicizia">
        private void PacketChf(){
        try {
            DB.Update("DELETE FROM messenger_friendrequests WHERE userid_from = '" + vl64.Decode(data.substring(4)) + "' AND userid_to = '" + user[0] + "'");
        }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="ConsoleChat">
        private void PacketCa()
        {
            try{
                            int iduser = vl64.Decode(data.substring(2));
                            String parola = data.substring(vl64.Encode(iduser).length() + 4);
                        if(TH.isOnline(iduser)){
                            TH.SendPacketID(iduser, "BF" + vl64.Encode(Integer.parseInt(user[0])) + parola + (char)2);
                            DB.Update("INSERT INTO messenger_messages (userid,friendid,sent_on,message) VALUES ('"+user[0]+"','"+iduser+"','"+Utility.Date()+"','"+parola+"')");
                         }else{
                            X.SendPacket("DE" + vl64.Encode(5) + vl64.Encode(iduser)); //CONTROLLARE
                         }

            }catch (Exception con)
            {
                 con.printStackTrace();
            }

        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Raggiungi Amico">
        private void PacketDF()
        {
            try{

            int userid = vl64.Decode(data.substring(2));
            ResultSet roomid = DB.Query("SELECT room_id FROM utenti WHERE id = '" + userid + "' LIMIT 1");
            roomid.next();
            if(roomid.getInt("room_id") != 0){
            data = "FG" + vl64.Encode(roomid.getInt("room_id")) + "@@M";
            PacketFG();
            PacketCf();
            }

            }catch (Exception con)
            {
                 con.printStackTrace();
            }

        }
        //</editor-fold>
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Room">
        boolean roomstats = false;              
        //<editor-fold defaultstate="collapsed" desc="Azioni Room">
        //<editor-fold defaultstate="collapsed" desc="Add/Remove Principal">
        private void PacketFCh(){
            try{
            int roomid = vl64.Decode(data.substring(2));
            int principal = 0;
            ResultSet p_r = DB.Query("SELECT principal,id FROM rooms WHERE owner = '" + user[1] + "'");
            while(p_r.next()){
                if(p_r.getInt("principal") == 1) principal = p_r.getInt("id");
            }
            if(principal != 0) DB.Update("UPDATE rooms SET principal = 0 WHERE id = '" + principal + "'");
            if(roomid != 0) DB.Update("UPDATE rooms SET principal = 1 WHERE id = '" + roomid + "'");
            X.SendPacket("GG" + data.substring(2) + (char)1);
            } catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Modifica Icona Stanza">
        private void PacketFB(){
            try {
                String figure = data.substring(2 + vl64.Encode(vl64.Decode(data.substring(2))).length());
                DB.Update("UPDATE rooms SET figure = '" + figure + "I' WHERE id = '" + idroom + "'");

                X.SendPacket("GI" + vl64.Encode(vl64.Decode(data.substring(2))) + vl64.Encode(1));
                X.SendPacket("GH" + vl64.Encode(vl64.Decode(data.substring(2))));
            }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Room Votes">
        private void PacketDE(){
            try {
               int voto = vl64.Decode(data.substring(2));
               DB.Update("INSERT INTO room_votes (roomid,userid,vote) VALUES ('"+idroom+"','"+user[0]+"','"+voto+"')");
               X.SendPacket("EY" + rm.LoadVotes(idroom, Integer.parseInt(user[0])));
            }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Room Editor">
        //<editor-fold defaultstate="collapsed" desc="Editor">
        private void PacketFP(){
            try {
                String packet = new String("GQ" + data.substring(2));
                String users_rights = Utility.getRoomsRightUsers(vl64.Decode(data.substring(2)));
                String query = new String("SELECT * FROM rooms WHERE id = '" + vl64.Decode(data.substring(2)) + "'");
                ResultSet roominfo = DB.Query(query);
                while(roominfo.next()){
                    if(roominfo.getString("tag").length() > 0){
                        String tags[] = roominfo.getString("tag").split(",");
                        if(tags.length > 1) packet += roominfo.getString("name") + (char)2 + roominfo.getString("description") + (char)2 + vl64.Encode(roominfo.getInt("is_closed")) + vl64.Encode(roominfo.getInt("category_id")) + vl64.Encode(roominfo.getInt("max_visitors")) + vl64.Encode(roominfo.getInt("max_visitors_to_edit")) + "H" + tags[0] + (char)2 + tags[1] + (char)2 + users_rights + vl64.Encode(roominfo.getInt("pets_enter")) + vl64.Encode(roominfo.getInt("pets_eat")) + vl64.Encode(roominfo.getInt("block_squares")) + vl64.Encode(roominfo.getInt("hide_wall")) + (char)1;
                        else packet += roominfo.getString("name") + (char)2 + roominfo.getString("description") + (char)2 + vl64.Encode(roominfo.getInt("is_closed")) + vl64.Encode(roominfo.getInt("category_id")) + vl64.Encode(roominfo.getInt("max_visitors")) + vl64.Encode(roominfo.getInt("max_visitors_to_edit")) + "H" + tags[0] + (char)2 + "" + (char)2 + users_rights + vl64.Encode(roominfo.getInt("pets_enter")) + vl64.Encode(roominfo.getInt("pets_eat")) + vl64.Encode(roominfo.getInt("block_squares")) + vl64.Encode(roominfo.getInt("hide_wall")) + (char)1;
                    }else{
                        packet += roominfo.getString("name") + (char)2 + roominfo.getString("description") + (char)2 + vl64.Encode(roominfo.getInt("is_closed")) + vl64.Encode(roominfo.getInt("category_id")) + vl64.Encode(roominfo.getInt("max_visitors")) + vl64.Encode(roominfo.getInt("max_visitors_to_edit")) + "H" + users_rights + vl64.Encode(roominfo.getInt("pets_enter")) + vl64.Encode(roominfo.getInt("pets_eat")) + vl64.Encode(roominfo.getInt("block_squares")) + vl64.Encode(roominfo.getInt("hide_wall")) + (char)1;
                    }
                }
                X.SendPacket(packet);
            } catch(Exception en){
                en.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Save Changes">
        private void PacketFQ(){
            try{
                
            }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Delete Single User Right">
        private void PacketAa(){
            int habbo_number = vl64.Decode(data.substring(2));
            int math = 0;
            String packettt = "";
            String packett = "";
            String packetu = "";
            packetu += vl64.Encode(habbo_number);
            for(int i = 0; i < habbo_number; i++){
                math = 2 + packetu.length();
                packettt = data.substring(math);
                DB.Update("DELETE FROM rooms_rights WHERE user_id = '" + vl64.Decode(packettt) + "' AND room_id = '" + idroom + "'");
                X.SendPacket("G" + vl64.Encode(idroom) + vl64.Encode(vl64.Decode(packettt)) + (char)1);
                packetu += vl64.Encode(vl64.Decode(packettt));
            }
            // Packet Aa+I +SA
            // GhNprCkw|_C{1}
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Delete Room">
        private void PacketChW(){
            DB.Update("DELETE FROM rooms WHERE id = '" + vl64.Decode(data.substring(2)) + "'");
            DB.Update("DELETE FROM rooms_chronology WHERE room_id = '" + vl64.Decode(data.substring(2)) + "'");
            DB.Update("DELETE FROM rooms_favourite WHERE room_id = '" + vl64.Decode(data.substring(2)) + "'");
            DB.Update("DELETE FROM rooms_events WHERE room_id = '" + vl64.Decode(data.substring(2)) + "'");
            DB.Update("DELETE FROM rooms_rights WHERE room_id = '" + vl64.Decode(data.substring(2)) + "'");
            X.SendPacket("@R" + (char)1);
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Delete All Users Rights">
        private void PacketBPQ(){
            try{
                String packet = "";
                ResultSet query = DB.Query("SELECT * FROM rooms_rights WHERE room_id = '" + vl64.Decode(data.substring(2)) + "'");
                while(query.next()){
                    packet += "G" + data.substring(2) + vl64.Encode(query.getInt("user_id")) + (char)1;
                }
                DB.Update("DELETE FROM rooms_rights WHERE room_id = '" + vl64.Decode(data.substring(2)) + "'");
                X.SendPacket(packet);
            }catch(Exception en){
                en.printStackTrace();
            }
        }
        //</editor-fold>
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Exit">
        private void PacketHu()
        {
            try{
                // invio ai miei amici che non posso essere raggiunto
            ResultSet friends1 = DB.Query("SELECT * FROM messenger_friendships WHERE userid = '" + user[0] + "'");
           while(friends1.next()){
               if(TH.isOnline(friends1.getInt("friendid"))){
                    TH.SendPacketID(friends1.getInt("friendid"), "@M" + "H" + (char)2 + "H" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "IIH" + user[2] + (char)2 + "H" + (char)2 + user[5] + (char)2 + (char)2 + (char)2 + (char)1);
               }
           }
           ResultSet friends2 = DB.Query("SELECT * FROM messenger_friendships WHERE friendid = '" + user[0] + "'");
           while(friends2.next()){
               if(TH.isOnline(friends2.getInt("userid"))){
                    TH.SendPacketID(friends2.getInt("userid"), "@M" + "H" + (char)2 + "H" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "IIH" + user[2] + (char)2 + "H" + (char)2 + user[5] + (char)2 + (char)2 + (char)2 + (char)1);
               }
           }

           if(Utility.is_event(idroom)){
               ResultSet info = DB.Query("SELECT owner FROM rooms WHERE id = '" + idroom + "'");
               info.next();
               if(info.getString("owner").equals(user[1])){
                   DB.Update("DELETE FROM rooms_events WHERE room_id = '" + idroom + "'");
               }
           }

                    X.SendPacket("@R");
                    if(roomstats){ rm.deleteuseroom(Integer.parseInt(user[0])); /*Elimina utente dalle altre room*/ }
                    roomstats = false;
        }catch (Exception con)
                       {
                           con.printStackTrace();
                       }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Pubblicità Room">
        private void PacketBv()
        {
          X.SendPacket("DB" + "http://images.habbo.com/images/440/Ad5191608St1Sz2570Sq4269978V0Id1.gif" + (char)2 + "http://livexenon.info/" + (char)2); //600x360.gif
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Room Info">
        String model;
        int idroom;
        private void PacketFG() //Room Info
        {
            try{

            String passwordroom = "";
            String owner = "";
            if(roomstats){ rm.deleteuseroom(Integer.parseInt(user[0])); /*Elimina utente dalle altre room*/ }
            roomstats = false;

               idroom = vl64.Decode(data.substring(2));
               int password = base64.Decode(data.substring(2 + vl64.Encode(idroom).length(),4 + vl64.Encode(idroom).length()));
               passwordroom = data.substring(4 + vl64.Encode(idroom).length(), password + 4 + vl64.Encode(idroom).length());

           ResultSet roomhy = DB.Query("SELECT model,password,owner FROM rooms WHERE id = '" + idroom + "' LIMIT 1");
           roomhy.next();
           owner = roomhy.getString("owner");

            if(!owner.equals(user[1])){
                   if(!passwordroom.equals(roomhy.getString("password"))){
                      X.SendPacket("@a" + "fhFF");
                      PacketHu();
                      return;
                   }
            }


               model = roomhy.getString("model");

           ResultSet rights = DB.Query("SELECT COUNT(room_id) AS count FROM rooms_rights WHERE room_id = '" + idroom + "' AND user_id = '" + user[0] + "'");
                  rights.next();
                  int user_right = rights.getInt("count");
                  String valuej = "";
           if(user_right == 1){
               valuej = "@j" + (char)1;
           }

           String valueo = "";
           if(Integer.parseInt(user[3]) >= 6 || owner.equals(user[1])){
               valueo = "@o" + (char)1;
           }

               X.SendPacket("Bf" + "http://livexenon.info/" + idroom + (char)2 + (char)1 +
                            "AE" + model + (char)2 + vl64.Encode(idroom) +(char)1 +
                            "@n" + "wallpaper"+ (char)2 + "" + (char)2 + (char)1 +
                            "@n" + "landscape" + (char)2 + "0.0" + (char)2 + (char)1 +
                            valuej +
                            valueo +
                            "EY" + rm.LoadVotes(idroom, Integer.parseInt(user[0])) + (char)1);


               if(Utility.is_event(idroom)){
               ResultSet room_event = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + idroom + "'");
               room_event.next();
               X.SendPacket("Er" + room_event.getInt("id") + (char)2 + owner + (char)2 + room_event.getInt("room_id") + (char)2 + vl64.Encode(room_event.getInt("category_id")) + room_event.getString("title") + (char)2 + room_event.getString("description") + (char)2 + room_event.getString("start_time") + (char)2 + ((room_event.getString("tag").isEmpty()) ? vl64.Encode(0) : "J" + room_event.getString("tag")) + (char)1);
           }else{
               X.SendPacket("Er-1");
           }

               rm.adduser(idroom, Integer.parseInt(user[0])); //Aggiunge user in room

           }catch (Exception ex)
           {
                 ex.printStackTrace();
           }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Room Data">
        public static String Mid(String text, int start, int end)
        {
        return (text.length() < end + 1) ? text.substring(start, text.length()-1) : text.substring(start, end);
        }
        private void PacketCf()
        {
            roomstats = true;
            try{

                  String packet = new String();
                  ResultSet result = DB.Query("SELECT * FROM rooms WHERE id = '" + idroom + "'");
                  result.next();

                            if(result.getString("figure").length() > 0){
                                String tag[] = (result.getString("tag")).split(",");
                                if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure") + "H");
                                else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure") + "H");
                            }else if(result.getString("tag").length() > 0){
                                String tag[] = (result.getString("tag")).split(",");
                                if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHIH");
                                else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHIH");
                            }else{
                                packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "J" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHIH");
                            }
                  String owner = result.getString("owner");
                  int no_wall = result.getInt("hide_wall");


                String heightmap = "";


                ResultSet roomdat = DB.Query("SELECT door_x,door_y,heightmap,door_dir FROM room_models WHERE id = '" + model + "'");

                while(roomdat.next()){
                                    x = roomdat.getInt("door_x");
                                    y = roomdat.getInt("door_y");
                                   // String mr[] = roomdat.getString("heightmap").split("\n");
                                   // int my = mr.length;
                                   // int mx = mr[0].length();
                                   // String [][] models = new String[my][mx];

                                   // for(int i = 0; i < my; i++){
                                   //     for (int j = 0; j < mx; j++){
                                   //           models[i][j] = Mid(mr[i],i,i + 1);
                                   //           System.out.println(models[i][j]);
                                   //     }
                                   // }

                                    heightmap = roomdat.getString("heightmap").replaceAll("\n", "");
                                    rotation = roomdat.getInt("door_dir");

                }
                                    xold = x;
                                    yold = y;
                                    cx = x;
                                    cy = y;
                                    rm.posizione(Integer.parseInt(user[0]),x,y,rotation); //Invia posizione

                  

                  X.SendPacket("@_" + heightmap + (char)2 + (char)1 +
                               "GV" + heightmap + (char)2 + (char)1 +
                                    "@\\" + rm.generateuser(idroom, Integer.parseInt(user[0])) + (char)1 +
                                    "@^" + "H" + (char)1 +
                                    "@`" + rm.getItemRoom(idroom)+ (char)1 + //Furni
                                    //"@`" + publicitems + (char)1 + //Furni PUBLIC
                                    "@m" + rm.getWallItemRoom(idroom) + (char)1 + //Pareti
                                    "@\\" + "I" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + user[5] + (char)2 + user[2] + (char)2 + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(x) + vl64.Encode(y) + "0.0" + (char)2 + "JIm" + (char)2 + "MMM" + (char)2 + (char)1 +
                                    "GW" + "I" + vl64.Encode(idroom) + ((owner.equals(user[1]) || Integer.parseInt(user[3]) >= 3) ? vl64.Encode(1) : vl64.Encode(0)) + (char)1 +
                                    "GX" + vl64.Encode(no_wall));

           X.SendPacket("GF" + "I" + packet); //ROOM EDITOR



           int[][] actions = rm.SendUserActions(idroom);
           for(int i = 0; i < actions.length; i++){
               X.SendPacket("@b" + "I" + vl64.Encode(actions[i][0]) + vl64.Encode(actions[i][3]) + vl64.Encode(actions[i][4]) + "0.0" + (char)2 + vl64.Encode(actions[i][5]) + vl64.Encode(actions[i][5]) + "///" + (char)2);
               X.SendPacket("G`" + vl64.Encode(actions[i][0]) + vl64.Encode(actions[i][1]));
               X.SendPacket("Ge" + vl64.Encode(actions[i][0]) + vl64.Encode(actions[i][2]));
               if(actions[i][6] == Integer.parseInt(user[0])){
                   String dat = new String();
                   if(waiteleport == false){
                       dat = "@b" + "I" + vl64.Encode(actions[i][0]) + vl64.Encode(actions[i][3]) + vl64.Encode(actions[i][4]) + "0.0" + (char)2 + vl64.Encode(actions[i][5]) + vl64.Encode(actions[i][5]) + "///" + (char)2 + (char)1;
                   }
                   rm.sendroom(idroom, dat + "G`" + vl64.Encode(actions[i][0]) + vl64.Encode(actions[i][1]) + (char)1 + "Ge" + vl64.Encode(actions[i][0]) + vl64.Encode(actions[i][2]));

               }
           }

           // invio ai miei amici che posso essere raggiunto
           ResultSet friends1 = DB.Query("SELECT * FROM messenger_friendships WHERE userid = '" + user[0] + "'");
           while(friends1.next()){
               if(TH.isOnline(friends1.getInt("friendid"))){
                    TH.SendPacketID(friends1.getInt("friendid"), "@M" + "H" + (char)2 + "H" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "III" + user[2] + (char)2 + "H" + (char)2 + user[5] + (char)2 + (char)2 + (char)2);
               }
           }
           ResultSet friends2 = DB.Query("SELECT * FROM messenger_friendships WHERE friendid = '" + user[0] + "'");
           while(friends2.next()){
               if(TH.isOnline(friends2.getInt("userid"))){
                    TH.SendPacketID(friends2.getInt("userid"), "@M" + "H" + (char)2 + "H" + vl64.Encode(Integer.parseInt(user[0])) + user[1] + (char)2 + "III" + user[2] + (char)2 + "H" + (char)2 + user[5] + (char)2 + (char)2 + (char)2);
               }
           }

           if(waiteleport){ TeleportComplete(); }
           }catch (Exception dat)
           {
                 dat.printStackTrace();
           }

        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Public Room">
        private void PacketFD()
        {
            int idroompublic = vl64.Decode(data.substring(2));
            X.SendPacket("BK" + "Impossibile Accedere");
            //X.SendPacket("GE" + "RK" + "hh_room_nlobby" + (char)2 + "[Sw");
            //X.SendPacket("Bf" + "http://www.habbo.com/client/public/welcome_lounge/0" + (char)2);
            //model = "newbie_lobby";
            //X.SendPacket("AE" + "newbie_lobby"+ (char)2 +"H");
        }

       //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Pathfinding">

            int x;
            int y;

            int xold;
            int yold;

            int cx;
            int cy;

            int rotation = 2;

            boolean c = false;

            public boolean in = false;

        private void PacketAK()
        {

            x = vl64.Decode(data.substring(2));
            y = vl64.Decode(data.substring(2 + vl64.Encode(x).length()));

            if(in){
            if(thcam.isAlive()){
              thcam.stop();
            }
            }


            in = true;
            thcam = new Thread(new Pathfinding(x,y,rm,idroom,Integer.parseInt(user[0])));
            thcam.start();

            
            /*while(cx != x || cy != y)
            {
                  if(cy < y){
                     cy++;
                   }

                   if(cx < x){
                     cx++;
                   }

                   if(cy > y){
                     cy--;
                   }

                   if(cx > x){
                     cx--;
                   }

            if (xold > cx && yold > cy)
                rotation = 7;
            else if(xold < cx && yold < cy)
                rotation = 3;
            else if(xold > cx && yold < cy)
                rotation = 5;
            else if(xold < cx && yold > cy)
                rotation = 1;
            else if(xold > cx)
                rotation = 6;
            else if(xold < cx)
                rotation = 2;
            else if(yold < cy)
                rotation = 4;
            else if(yold > cy)
                rotation = 0;
                  rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(xold) + vl64.Encode(yold) + "0.0" + (char)2 + vl64.Encode(rotation) + vl64.Encode(rotation) + "/flatctrl useradmin/mv " + cx + "," + cy + ",0.0//" + (char)2);
                  
                  rm.posizione(Integer.parseInt(user[0]),cx,cy,rotation);
            try{
            Thread.sleep(500); //Attesa mezzo secondo
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
                  xold = cx;
                  yold = cy;
            }
            
            rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(x) + vl64.Encode(y) + "0.0" + (char)2 + vl64.Encode(rotation) + vl64.Encode(rotation) + "/flatctrl useradmin//" + (char)2);
            rm.posizione(Integer.parseInt(user[0]),x,y,rotation);

            xold = cx;
            yold = cy;
            cx = x;
            cy = y;*/

        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Vista dell'Hotel">
        private void PacketCW()
        {
           X.SendPacket("@S");
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Dare Diritti">
        private void PacketAD()
        {
           int userid = vl64.Decode(data.substring(2));
           DB.Update("INSERT INTO rooms_rights (room_id , user_id) VALUES ('"+idroom+"', '"+userid+"')");
           TH.SendPacketID(userid, "@j");
        }
        //</editor-fold>
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Furni">
        //<editor-fold defaultstate="collapsed" desc="Comprare Furni">
        private void PacketAd()
        {
          try{
            int idpage = vl64.Decode(data.substring(2));
            int idfurno = vl64.Decode(data.substring(2 + vl64.Encode(idpage).length()));
            String extra = "";
            if(base64.Decode(data.substring(2 + vl64.Encode(idpage).length() + vl64.Encode(idfurno).length(), 2 + vl64.Encode(idpage).length() + vl64.Encode(idfurno).length() + 2)) != 0){
            extra = data.substring(2 + vl64.Encode(idpage).length() + vl64.Encode(idfurno).length() + 2);
            }


            
            ResultSet fid = DB.Query("SELECT item_ids,amount,cost_credits,cost_pixels FROM catalog_items WHERE id = '" + idfurno + "'"); fid.next();
            int furniture_id = fid.getInt("item_ids");
            int amount = fid.getInt("amount");
            int cost_credits = fid.getInt("cost_credits");
            int cost_pixels = fid.getInt("cost_pixels");


            Furniture furno = new Furniture(furniture_id, DB);
            if(furno.Interaction.toLowerCase().equals("pet")){
                String datas[] = extra.split("\n");
                String PetName = datas[0];
                String Race = datas[1];
                String Color = datas[2];

                Integer.parseInt(Race);

                if(PetName.length() < 1 || PetName.length() > 16)
                {
                    return;
                }

                if(Race.length() != 3)
                {
                    return;
                }

                if(Color.length() != 6)
                {
                    return;
                }
            }else if(furno.Interaction.toLowerCase().equals("roomeffect")){
                double number = 0;

                number = Double.parseDouble(extra);

                extra = (number + "").replace(",", ".");
            }else if(furno.Interaction.toLowerCase().equals("postit")){
                extra = "FFFF33";
            }else if(furno.Interaction.toLowerCase().equals("dimmer")){
                extra = "1,1,1,#000000,255";
            }else if(furno.Interaction.toLowerCase().equals("trophy")){
                GregorianCalendar gc = new GregorianCalendar();
                Calendar ca = Calendar.getInstance();
                extra = user[1] + (char)9 + gc.get(Calendar.DATE) + "-" + gc.get(Calendar.MONTH) + 1 + "-" + gc.get(Calendar.YEAR) + (char)9 + extra;
            }else{
                extra = "";
            }


            int bool_credits = 0;
            int bool_pixels = 0;
            if(Integer.parseInt(user[6]) < cost_credits) bool_credits = 1;
            if(Integer.parseInt(user[8]) < cost_pixels) bool_pixels = 1;
            if(bool_credits == 1 || bool_pixels == 1){
                X.SendPacket("AD" + vl64.Encode(bool_credits) + vl64.Encode(bool_pixels) + (char)2);
                return;
            }


            ResultSet fur = DB.Query("SELECT item_name,type,sprite_id FROM furniture WHERE id = '" + furniture_id + "'"); fur.next();
            String item_name = fur.getString("item_name");
            String type = fur.getString("type");
            int sprite_id = fur.getInt("sprite_id");

            for(int i = 0; i < amount; i++){
                ResultSet countu = DB.Query("SELECT COUNT(id) AS num_rows FROM user_items"); countu.next();
                int fu = countu.getInt("num_rows");

                ResultSet countr = DB.Query("SELECT COUNT(id) AS num_rows FROM room_items"); countr.next();
                int ff = countr.getInt("num_rows");

                int idnew = fu + ff + 1;

                if(furno.Interaction.toLowerCase().equals("teleport")){
                    DB.Update("INSERT INTO user_items (id,user_id,base_item,extra_data) VALUES('" + idnew  + "', '" + user[0] + "', '" + furniture_id + "', 'T" + (idnew+1) + "')");
                    DB.Update("INSERT INTO user_items (id,user_id,base_item,extra_data) VALUES('" + (idnew+1)  + "', '" + user[0] + "', '" + furniture_id + "', 'T" + idnew + "')");
                }else{
                    DB.Update("INSERT INTO user_items (id,user_id,base_item,extra_data) VALUES('" + idnew  + "', '" + user[0] + "', '" + furniture_id + "', '"+extra+"')");
                }
                }

            int total_credits = Integer.parseInt(user[6]) - cost_credits;
            user[6] = "" + total_credits;

            int total_pixels = Integer.parseInt(user[7]) - cost_pixels;
            user[8] = "" + total_pixels;

            if(cost_credits > 0) X.SendPacket("@F" + total_credits + ".0" + (char)2);
            if(cost_pixels > 0) X.SendPacket("Fv" + vl64.Encode(total_pixels) + vl64.Encode(0) + (char)2);

            X.SendPacket("AC" + vl64.Encode(furniture_id) + item_name + (char)2 + vl64.Encode(cost_credits) + vl64.Encode(cost_pixels) + vl64.Encode(1) + type.toLowerCase() + (char)2 + vl64.Encode(sprite_id) + (char)2 + vl64.Encode(1) + vl64.Encode(-1) + (char)1 + "Ae");
            X.SendPacket("BL" + rm.getUserItem(Integer.parseInt(user[0])));
            
          }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Muovere Furni">
        private void PacketAI()
        {
          try{
            int idfurno = vl64.Decode(data.substring(2));
            int x = vl64.Decode(data.substring(2 + vl64.Encode(idfurno).length()));
            int y = vl64.Decode(data.substring(2 + vl64.Encode(idfurno).length() + vl64.Encode(x).length()));
            int frot = vl64.Decode(data.substring(2 + vl64.Encode(idfurno).length() + vl64.Encode(x).length() + vl64.Encode(y).length()));

              ResultSet itemid = DB.Query("SELECT base_item FROM room_items WHERE id = '" + idfurno + "' LIMIT 1");
              itemid.next();

            rm.sendroom(idroom, "A_" + vl64.Encode(idfurno) + vl64.Encode(itemid.getInt("base_item")) + vl64.Encode(x) + vl64.Encode(y) + vl64.Encode(frot) + (char)2 + "H" + (char)2 + "M");
            DB.Update("UPDATE room_items SET x = '"+x+"', y = '"+y+"', rot = '"+frot+"' WHERE id = '"+idfurno+"'");
          }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="PRE-Buy Furni">
        private void PacketoV(){
            try {
               int idfurno = vl64.Decode(data.substring(2));

               ResultSet itemid = DB.Query("SELECT item_ids FROM catalog_items WHERE id = '" + idfurno + "' LIMIT 1");
               itemid.next();

               ResultSet itemids = DB.Query("SELECT sprite_id,allow_gift FROM furniture WHERE id = '"+itemid.getInt("item_ids")+"' LIMIT 1");
               itemids.next();
               //X.SendPacket("In" + vl64.Encode(itemid.getInt("item_ids")) + "I"); //I = REGALO, H = NO REGALO
               //X.SendPacket("In" + vl64.Encode(idfurno) + "I"); //I = REGALO, H = NO REGALO
               
               X.SendPacket("In" + vl64.Encode(idfurno) + vl64.Encode(itemids.getInt("allow_gift"))); //I = REGALO, H = NO REGALO
            }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>        
        //<editor-fold defaultstate="collapsed" desc="User Inventory">
        private void PacketoC(){
            String items = rm.getUserItem(Integer.parseInt(user[0]));
            X.SendPacket("BL" + items);
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Posa Furno in stanza">
        private void PacketAZ(){
            try{
                int longs = base64.Decode(data.substring(2, 4));
                String assi = data.substring(4 , (longs+4));
                String asse[] = assi.split(" ");

                ResultSet query = DB.Query("SELECT base_item, extra_data FROM user_items WHERE id = '" + asse[0] + "'");
                query.next();
                String extra_data = query.getString("extra_data");

                ResultSet query2 = DB.Query("SELECT sprite_id FROM furniture WHERE id = '" + query.getString("base_item") + "'");
                query2.next();
                int sprite_id = query2.getInt("sprite_id");

                DB.Update("DELETE FROM user_items WHERE id = '" + asse[0] + "'");

                if(asse[1].substring(0,1).equals(":")){
                    DB.Update("INSERT INTO room_items (id,room_id,base_item,extra_data,x,y,z,rot,wall_pos) VALUES ('" + asse[0] + "', '" + idroom + "', '" + sprite_id + "', '" + extra_data + "', 0, 0, 0, 0, '" + asse[1] + " " + asse[2] + " " + asse[3] + "')");
                    X.SendPacket("Ac" + vl64.Encode(Integer.parseInt(asse[0])));
                    ResultSet id = DB.Query("SELECT id FROM room_items WHERE id = '" + asse[0] + "'"); id.next();
                    rm.sendroom(idroom, "AS" + id.getInt("id") + (char)2 + vl64.Encode(sprite_id) + asse[1] + " " + asse[2] + " " + asse[3] + "" + (char)2 + extra_data + (char)2);
                }else{
                    DB.Update("INSERT INTO room_items (id,room_id,base_item,extra_data,x,y,z,rot,wall_pos) VALUES ('" + asse[0] + "', '" + idroom + "', '" + sprite_id + "', '" + extra_data + "', '" + asse[1] + "', '" + asse[2] + "', '0', 0, '')");
                    X.SendPacket("Ac" + vl64.Encode(Integer.parseInt(asse[0])));
                    ResultSet id = DB.Query("SELECT id,z FROM room_items WHERE id = '" + asse[0] + "'"); id.next();
                    rm.sendroom(idroom, "A]" + vl64.Encode(id.getInt("id")) + vl64.Encode(sprite_id) + vl64.Encode(Integer.parseInt(asse[1])) + vl64.Encode(Integer.parseInt(asse[2])) + vl64.Encode(0) + "0.0" + (char)2 + extra_data + (char)2 + "M");
                }
            }catch(Exception con){
                con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Prendi Furno dalla stanza">
        private void PacketAC(){
            try{
                int length = 2 + vl64.Encode(vl64.Decode(data.substring(2))).length();
                int furno_id = vl64.Decode(data.substring(length));
                ResultSet furno = DB.Query("SELECT id,extra_data,base_item,wall_pos FROM room_items WHERE id = '" + furno_id + "'");
                furno.next();
                String base_item = furno.getString("base_item");
                String extra_data = furno.getString("extra_data");
                String wall_pos = furno.getString("wall_pos");
                String idf = furno.getString("id");
                DB.Update("DELETE FROM room_items WHERE id = '" + furno_id + "'");
                ResultSet sprite = DB.Query("SELECT id FROM furniture WHERE sprite_id = '" + base_item + "'"); sprite.next();
                int id = sprite.getInt("id");
                DB.Update("INSERT INTO user_items (id,user_id,base_item,extra_data) VALUES('" + idf + "', '" + user[0] + "', '" + id + "', '" + extra_data + "')");

                if(wall_pos.length() > 0 ) rm.sendroom(idroom, "AT" + idf + (char)2);
                else rm.sendroom(idroom, "A^" + idf + (char)2);

                X.SendPacket("Ab" + rm.getSingularItem(Integer.parseInt(idf)));
            }catch(Exception con){
                con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Cambia Status Furno Item">
        boolean waiteleport = false;
        int telecopy_id = 0;
        private void PacketFH(){
            try {
               int furno_id = vl64.Decode(data.substring(2));

               ResultSet datas = DB.Query("SELECT extra_data,base_item,x,y,rot FROM room_items WHERE id = '" + furno_id + "'"); datas.next();
                int sprite_id = datas.getInt("base_item");
                String extra = datas.getString("extra_data");
                int fx = datas.getInt("x");
                int fy = datas.getInt("y");
                int frot = datas.getInt("rot");

                ResultSet interactions = DB.Query("SELECT interaction_modes_count,interaction_type,vending_ids FROM furniture WHERE sprite_id = '" + sprite_id + "'");
                interactions.next();
                int interaction = interactions.getInt("interaction_modes_count");
                String int_type = interactions.getString("interaction_type");
                String vending_ids = interactions.getString("vending_ids");
               
                if(int_type.equals("default")){
                    int status = 0;
                    if(extra.length() > 0) status = Integer.parseInt(extra); 
                    if(status == (interaction-1)) status = 0;
                    else status++;

                    DB.Update("UPDATE room_items SET extra_data = '" + status + "' WHERE id = '" + furno_id + "'");

                    rm.sendroom(idroom, "AX" + furno_id + (char)2 + status + (char)2);
                }else if(int_type.equals("vendingmachine")){
                    rm.getposizione(Integer.parseInt(user[0]));
                    if((((fx+1) == rm.getx()) && frot == 0) || (((fy+1) == rm.gety()) && frot == 2) || (((fx+1) == rm.getx()) && frot == 2) || (((fy+1) == rm.gety()) && frot == 0)){
                        String vend[] = vending_ids.split(",");
                        int rot = 0;
                        if(frot == 2){
                            rot = 0;
                        }else if(frot == 0){
                            rot = 4;
                        }
                        Random vend_rand = new Random();
                        int rand_num = vend_rand.nextInt(vend.length);
                        rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(rm.getx()) + vl64.Encode(rm.gety()) + "0.0" + (char)2 + vl64.Encode(rot) + vl64.Encode(rot) + "///" + (char)2);
                        rm.posizione(Integer.parseInt(user[0]),rm.getx(),rm.gety(),rot);
                        rm.sendroom(idroom, "AX" + furno_id + (char)2 + 1);
                        Thread.sleep(500);
                        rm.sendroom(idroom, "Gb" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(Integer.parseInt(vend[rand_num])));
                        rm.addUserVending(Integer.parseInt(user[0]), Integer.parseInt(vend[rand_num]));
                        rm.sendroom(idroom, "AX" + furno_id + (char)2 + 0);
                    }
                }else if(int_type.equals("teleport")){
                    rm.getposizione(Integer.parseInt(user[0]));
                    if((((fx+1) == rm.getx()) && frot == 0) || (((fy+1) == rm.gety()) && frot == 2) || (((fx+1) == rm.getx()) && frot == 2) || (((fy+1) == rm.gety()) && frot == 4)){
                        rm.sendroom(idroom, "AX" + furno_id + (char)2 + 1);
                        int rotf = 0;
                        if(sprite_id == 2476){
                            if(frot == 0) rotf = 4;
                            else if(frot == 2) rotf = 6;
                            else if(frot == 4) rotf = 0;
                            else if(frot == 6) rotf = 2;
                        }else{
                            if(frot == 0) rotf = 6;
                            else if(frot == 2) rotf = 0;
                        }
                        rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(rm.getx()) + vl64.Encode(rm.gety()) + "0.0" + (char)2 + vl64.Encode(rotf) + vl64.Encode(rotf) + "//mv " + fx + "," + fy + ",0.0//" + (char)2);
                        Thread.sleep(500);
                        rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(fx) + vl64.Encode(fy) + "0.0" + (char)2 + vl64.Encode(rotf) + vl64.Encode(rotf) + "///" + (char)2);
                        rm.sendroom(idroom, "AX" + furno_id + (char)2 + 0);
                        String telecopy = extra.substring(1);
                        ResultSet query = DB.Query("SELECT COUNT(id) AS is_inroom FROM room_items WHERE id = '" + telecopy + "'"); query.next();
                        if(query.getInt("is_inroom") == 1){
                            ResultSet teleport = DB.Query("SELECT * FROM room_items WHERE id = '" + telecopy + "'"); teleport.next();
                            if(idroom != teleport.getInt("room_id")){
                                rm.sendroom(idroom, "AX" + furno_id + (char)2 + 0);
                                rm.sendroom(idroom, "AX" + furno_id + (char)2 + 2);
                                Thread.sleep(1000);
                                rm.sendroom(idroom, "AX" + furno_id + (char)2 + 0);
                                if(roomstats){ rm.deleteuseroom(Integer.parseInt(user[0])); /*Elimina utente dalle altre room*/ }
                                roomstats = false;
                                data = "FG" + vl64.Encode(teleport.getInt("room_id")) + "@@M";
                                PacketFG(); 
                                waiteleport = true;
                                telecopy_id = Integer.parseInt(telecopy);
                            }else{
                                rm.sendroom(idroom, "AX" + furno_id + (char)2 + 0);
                                rm.sendroom(idroom, "AX" + furno_id + (char)2 + 2);
                                Thread.sleep(1000);
                                rm.sendroom(idroom, "AX" + furno_id + (char)2 + 0);
                                int f1rot = teleport.getInt("rot");
                                int f1x = teleport.getInt("x");
                                int f1y = teleport.getInt("y");
                                int newfurno = teleport.getInt("id");
                                int xt = 0;
                                int yt = 0;
                                if(teleport.getInt("base_item") == 2476){
                                    if(f1rot == 0){
                                        xt = f1x;
                                        yt = f1y-1;
                                    }else if(f1rot == 2){
                                        xt = f1x+1;
                                        yt = f1y;
                                    }else if(f1rot == 4){
                                        xt = f1x;
                                        yt = f1y+1;
                                    }else if(f1rot == 6){
                                        xt = f1x-1;
                                        yt = f1y;
                                    }
                                }else{
                                    if(f1rot == 0){
                                        xt = f1x+1;
                                        yt = f1y;
                                        f1rot = 2;
                                    }else if(f1rot == 2){
                                        xt = f1x;
                                        yt = f1y-1;
                                        f1rot = 4;
                                    }
                                }
                                rm.sendroom(idroom, "AX" + newfurno + (char)2 + 2);
                                Thread.sleep(1000);
                                rm.sendroom(idroom, "AX" + newfurno + (char)2 + 1);
                                rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(f1x) + vl64.Encode(f1y) + "0.0" + (char)2 + vl64.Encode(f1rot) + vl64.Encode(f1rot) + "///" + (char)2);
                                Thread.sleep(500);
                                rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(f1x) + vl64.Encode(f1y) + "0.0" + (char)2 + vl64.Encode(f1rot) + vl64.Encode(f1rot) + "//mv " + xt + "," + yt + ",0.0//" + (char)2);
                                Thread.sleep(500);
                                rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(xt) + vl64.Encode(yt) + "0.0" + (char)2 + vl64.Encode(f1rot) + vl64.Encode(f1rot) + "///" + (char)2);
                                rm.posizione(Integer.parseInt(user[0]),xt,yt,f1rot);
                                rm.sendroom(idroom, "AX" + newfurno + (char)2 + 0);
                            }
                        }
                    }
                }

            }catch(Exception con){ con.printStackTrace(); }
        }
        private void TeleportComplete(){
            try{
                ResultSet teleport = DB.Query("SELECT * FROM room_items WHERE id = '" + telecopy_id + "'"); teleport.next();
                int f1rot = teleport.getInt("rot");
                int f1x = teleport.getInt("x");
                int f1y = teleport.getInt("y");
                int newfurno = teleport.getInt("id");
                int xt = 0;
                int yt = 0;
                if(teleport.getInt("base_item") == 2476){
                    if(f1rot == 0){
                        xt = f1x;
                        yt = f1y-1;
                    }else if(f1rot == 2){
                        xt = f1x+1;
                        yt = f1y;
                    }else if(f1rot == 4){
                        xt = f1x;
                        yt = f1y+1;
                    }else if(f1rot == 6){
                        xt = f1x-1;
                        yt = f1y;
                    }
                }else{
                    if(f1rot == 0){
                        xt = f1x+1;
                        yt = f1y;
                        f1rot = 2;
                    }else if(f1rot == 2){
                        xt = f1x;
                        yt = f1y-1;
                        f1rot = 4;
                    }
                }
                rm.sendroom(idroom, "AX" + newfurno + (char)2 + 2);
                Thread.sleep(1000);
                rm.sendroom(idroom, "AX" + newfurno + (char)2 + 1);
                rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(f1x) + vl64.Encode(f1y) + "0.0" + (char)2 + vl64.Encode(f1rot) + vl64.Encode(f1rot) + "///" + (char)2);
                Thread.sleep(500);
                rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(f1x) + vl64.Encode(f1y) + "0.0" + (char)2 + vl64.Encode(f1rot) + vl64.Encode(f1rot) + "//mv " + xt + "," + yt + ",0.0//" + (char)2);
                Thread.sleep(500);
                rm.sendroom(idroom, "@b" + "I" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(xt) + vl64.Encode(yt) + "0.0" + (char)2 + vl64.Encode(f1rot) + vl64.Encode(f1rot) + "///" + (char)2);
                rm.posizione(Integer.parseInt(user[0]),xt,yt,f1rot);
                rm.sendroom(idroom, "AX" + newfurno + (char)2 + 0);
                waiteleport = true;
                telecopy_id = 0;
            }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Cambia Status Furno Wall">
        private void PacketFI(){
            try{
                int furno_id = vl64.Decode(data.substring(2));

                ResultSet datas = DB.Query("SELECT extra_data,base_item FROM room_items WHERE id = '" + furno_id + "'"); datas.next();
                int sprite_id = datas.getInt("base_item");
                int extra = datas.getInt("extra_data");

                ResultSet interactions = DB.Query("SELECT interaction_modes_count FROM furniture WHERE sprite_id = '" + sprite_id + "'");
                interactions.next();
                int interaction = interactions.getInt("interaction_modes_count");

                int status = extra;
                if(extra == interaction) status = 0;
                else status++;

                DB.Update("UPDATE room_items SET extra_data = '" + status + "' WHERE id = '" + furno_id + "'");

                ResultSet id = DB.Query("SELECT * FROM room_items WHERE id = '" + furno_id + "'"); id.next();
                rm.sendroom(idroom, "AU" + id.getInt("id") + (char)2 + vl64.Encode(id.getInt("base_item")) + id.getString("wall_pos") + (char)2 + status + (char)2);
            }catch(Exception con){
                con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Wallpaper & Landscape">
        private void PacketAB(){
            try{
            int id = vl64.Decode(data.substring(2));


            }catch(Exception con){
                con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="MoodLight">
        private void PacketEU(){
            try{
            X.SendPacket("Em" + "KIIJ#0053F7" + (char)2 + "PSJJ#74F5F5" + (char)2 + "PSKJ#74F5F5" + (char)2 + "PS");

            }catch(Exception con){
                con.printStackTrace();
            }
        }
        private void PacketEW(){
            try{
            X.SendPacket("AU" + "2841506" + (char)2 + "[nO:w=3,8 l=13,65 l" + (char)2 + "2,1,2,#82F349,76" + (char)2);

            }catch(Exception con){
                con.printStackTrace();
            }
        }
        //</editor-fold>
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Eventi">
        //<editor-fold defaultstate="collapsed" desc="Create Event">
        private void PacketEY(){
            try{
                ResultSet query = DB.Query("SELECT room_id FROM utenti WHERE id = '" + user[0] + "'");
                query.next();
                int room = query.getInt("room_id");

                ResultSet roomq = DB.Query("SELECT is_closed,owner FROM rooms WHERE id = '" + room + "'");
                roomq.next();
                if(!roomq.getString("owner").equals(user[1]))
                    X.SendPacket("Eo" + vl64.Encode(0) + vl64.Encode(2) + (char)1);
                else if(roomq.getInt("is_closed") != 0)
                    X.SendPacket("Eo" + vl64.Encode(0) + vl64.Encode(3) + (char)1);
                else
                    X.SendPacket("Eo" + vl64.Encode(1) + vl64.Encode(0) + (char)1);
            } catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Create Event 2">
        private void PacketEZ(){
            try{
            String divide[] = (data.substring(2)).split("@");
            int category = vl64.Decode(divide[0]);
            String tag1 = "";
            String tag2 = "";
            String nome = divide[1].substring(1);
            String desc = divide[2].substring(1, ( divide[2].substring(1).length()));
            if(vl64.Decode(divide[2].substring( (divide[2].substring(1).length()))) == 2){
                tag1 = divide[3].substring(1);
                tag2 = divide[4].substring(1);
            }else if(vl64.Decode(divide[2].substring( (divide[2].substring(1).length()))) == 1){
                tag1 = divide[3].substring(1);
            }

            Calendar cal = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("H:mm");
            String time = sdf.format(cal.getTime());
            String tags = "";
            String tagsc = "";
            if(vl64.Decode(divide[2].substring( (divide[2].substring(1).length()))) == 1){ tags += tag1; tagsc += tag1 + (char)2; }
            if(vl64.Decode(divide[2].substring( (divide[2].substring(1).length()))) == 2){
                tags += tag1 + "," + tag2; tagsc += tag1 + (char)2 + tag2 + (char)2;
            }

            DB.Update("INSERT INTO rooms_events (title,description,tag,room_id,category_id,start_time) VALUES ('" + nome + "', '" + desc + "', '" + tags + "', '" + idroom + "', '" + category + "', '" + time + "')");
            ResultSet event_id = DB.Query("SELECT id FROM rooms_events WHERE room_id = '" + idroom + "'"); event_id.next();
            X.SendPacket("Er" + event_id.getInt("id") + (char)2 + user[1] + (char)2 + idroom + (char)2 + vl64.Encode(category) + nome + (char)2 + desc + (char)2 + time + (char)2 + ((tagsc.isEmpty()) ? vl64.Encode(0) : "J" + tagsc) + (char)1);
            // Er2517151{2}eLDainos{2}2380240{2}QAI mie furni{2}molto bello!{2}19:09{2}H{1}
            // Er2517151{2}eLDainos{2}2380240{2}RAciao{2}ciaooo{2}15:23{2}Jciaus{2}ciaoa{2}{1}
            }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Edit Event">
        private void PacketESl(){
         try{
        String divide[] = (data.substring(2)).split("@");
            int category = vl64.Decode(divide[0]);
            String tag1 = "";
            String tag2 = "";
            String nome = divide[1].substring(1);
            String desc = divide[2].substring(1, ( divide[2].substring(1).length() ));
            if(vl64.Decode(divide[2].substring( (divide[2].substring(1).length()))) == 2){
                tag1 = divide[3].substring(1);
                tag2 = divide[4].substring(1);
            }else if(vl64.Decode(divide[2].substring( (divide[2].substring(1).length()))) == 1){
                tag1 = divide[3].substring(1);
            }

            String tags = "";
            String tagsc = "";
            if(vl64.Decode(divide[2].substring( (divide[2].substring(1).length()))) == 1){ tags += tag1; tagsc += tag1 + (char)2; }
            if(vl64.Decode(divide[2].substring( (divide[2].substring(1).length()))) == 2){ tags += tag1 + "," + tag2; tagsc += tag1 + (char)2 + tag2 + (char)2; }

            DB.Update("UPDATE rooms_events SET category_id = '" + category + "', title = '" + nome + "', description = '" + desc + "', tag = '" + tags + "' WHERE room_id = '" + idroom + "'");
            ResultSet event_id = DB.Query("SELECT id,start_time FROM rooms_events WHERE room_id = '" + idroom + "'"); event_id.next();
            X.SendPacket("Er" + event_id.getInt("id") + (char)2 + user[1] + (char)2 + idroom + (char)2 + vl64.Encode(category) + nome + (char)2 + desc + (char)2 + event_id.getString("start_time") + (char)2 + ((tagsc.isEmpty()) ? vl64.Encode(0) : "J" + tagsc) + (char)1);
         }catch(Exception con){ con.printStackTrace(); }
         }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Delete Event">
        private void PacketEPq(){
            try {
                DB.Update("DELETE FROM rooms_events WHERE room_id = '" + idroom + "'");
                X.SendPacket("Er-1");
            }catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Azioni Utente">
        //<editor-fold defaultstate="collapsed" desc="Change Look">
        private void PacketHl()
        {
            String figure = data.substring(data.length() - base64.Decode(data.substring(5,7)));
            String sex = (data.substring(4,5)).toLowerCase();

          rm.sendroom(idroom, "DJ" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + figure + (char)2 + sex + (char)2 + (char)2); //Invia cambiamenti look alla room
          X.SendPacket("DJ" + vl64.Encode(-1) + figure + (char)2 + sex + (char)2 + (char)2); //Aggiorna il proprio client del nuovo profilo
          user[2] = figure; user[4] = sex;
          DB.Update("UPDATE utenti SET figure = '"+figure+"', sex = '"+sex+"' WHERE id = '"+user[0]+"'");
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Saluta">
        private void PacketAS() //Saluta
        {
            rm.sendroom(idroom, "Ga" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))));
            //X.SendPacket("Ga" + "I"); //I = ID USER IN ROOM
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Nuvoletta parla">
        private void PacketDP() //Nuvoletta parla On
        {
            rm.sendroom(idroom, "Ei" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + "I");
            //X.SendPacket("Ei" + vl64.Encode(Integer.parseInt(user[0])) + "I"); //I = ID USER IN ROOM
        }
        private void PacketDO() //Nuvoletta parla Off
        {
            rm.sendroom(idroom, "Ei" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + "H");
            //X.SendPacket("Ei" + vl64.Encode(Integer.parseInt(user[0])) + "H"); //I = ID USER IN ROOM
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Chat in room">
        private void PacketHt() //PARLA
        {
                    String messaggio = data.substring(4);
                    if(messaggio.substring(0,1).equals(":") && Integer.parseInt(user[3]) >= 6){ CM(messaggio.substring(1)); }else{
                    rm.sendroom(idroom, "@X" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + messaggio + (char)2 + vl64.Encode(0));
                    DB.Update("INSERT INTO chatlogs (user_id,room_id,full_date,timestamp,message) VALUES ('"+user[0]+"','"+idroom+"','"+Utility.Date()+"','"+System.currentTimeMillis()+"','"+messaggio+"')");
                    }                    
        }
        public void PacketHw(){ //GRIDA
                    String messaggio = data.substring(4);
                    rm.sendroom(idroom, "@Z" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + messaggio + (char)2 + vl64.Encode(0));
                    DB.Update("INSERT INTO chatlogs (user_id,room_id,full_date,timestamp,message) VALUES ('"+user[0]+"','"+idroom+"','"+Utility.Date()+"','"+System.currentTimeMillis()+"','"+messaggio+"')");
        }
        public void PacketHx(){ //SUSSURRA
            try{
                    String messaggio = data.substring(4);
                    String[] dat;
                    dat = messaggio.split(" " , 2);
                    messaggio = messaggio.substring(dat[0].length()+1);
                    int idusm = Utility.getIDfromUserName(dat[0]);
                    X.SendPacket("@Y" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + messaggio + (char)2 + vl64.Encode(0));
                    if(idusm != Integer.parseInt(user[0])){
                    TH.SendPacketID(idusm, "@Y" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + messaggio + (char)2 + vl64.Encode(0));
                    }
                    DB.Update("INSERT INTO chatlogs (user_id,room_id,full_date,timestamp,message) VALUES ('"+user[0]+"','"+idroom+"','"+Utility.Date()+"','"+System.currentTimeMillis()+"','"+messaggio+"')");
        }catch (Exception ch)
        {
          ch.printStackTrace();
        }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="User Showcase">
        private void PacketB_(){
            try{
                int iduser = vl64.Decode(data.substring(2));
                StringBuffer allbadge = new StringBuffer();
                int c = 0;
                ResultSet badge = DB.Query("SELECT badge_id,badge_slot FROM user_badges WHERE user_id = '"+iduser+"' AND badge_slot > '0'");

                while(badge.next()){
                    c++;
                    allbadge.append(vl64.Encode(badge.getInt("badge_slot")) + badge.getString("badge_id") + (char)2);
                }

                String[] tagse;
                StringBuffer alltag = new StringBuffer();
                int i = 0;

                ResultSet tags = DB.Query("SELECT tag FROM user_tags WHERE user_id = '"+iduser+"' LIMIT 1");
                if(tags.next()){
                    tagse = (tags.getString("tag")).split(",");

                        for(i=0; i < tagse.length; i++){
                            alltag.append(tagse[i] + (char)2);
                        }
                }

                X.SendPacket("E^" + vl64.Encode(iduser) + vl64.Encode(i) + alltag); //Tags
                X.SendPacket("Cd" + vl64.Encode(iduser) + vl64.Encode(c) + allbadge); //Badges
            } catch(Exception en){
                en.printStackTrace();
        }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="User Dance">
        private void PacketAPQL(){
            String dance_type = data.substring(2);
             rm.addUserDance(Integer.parseInt(user[0]), vl64.Decode(dance_type));
             rm.sendroom(idroom, "G`" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + dance_type + (char)1);
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Send Respect">
        private void PacketEs(){
            try{
            int userid = vl64.Decode(data.substring(2));
            DB.Update("UPDATE utenti SET respects = respects + 1 WHERE id = '" + userid + "'");
            rm.sendroom(idroom, "Fx" + vl64.Encode(userid) + vl64.Encode(1));

            //user[10] = Integer.toString(Integer.parseInt(user[10])+1);


            } catch(Exception con){ con.printStackTrace(); }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Kick User">
        //A_XRB
        private void PacketA_(){

        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Badge Editor">
        private void PacketBA(){
        try{
            StringBuffer set = new StringBuffer();
            int s = 0;
            StringBuffer unset = new StringBuffer();
            int u = 0;
            ResultSet badge = DB.Query("SELECT badge_id,badge_slot FROM user_badges WHERE user_id = '"+user[0]+"'");

            while(badge.next()){

                 u++;
                 unset.append(badge.getString("badge_id") + (char)2);

                 if(badge.getInt("badge_slot") != 0){
                  s++;
                  set.append(vl64.Encode(badge.getInt("badge_slot")) + badge.getString("badge_id") + (char)2);
                 }

            }

            X.SendPacket("Ce" + vl64.Encode(u) + unset + vl64.Encode(s) + set);

        } catch(Exception en){
                en.printStackTrace();
        }
        }
        //</editor-fold>
        //</editor-fold>        
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Catalogo">
        //<editor-fold defaultstate="collapsed" desc="Section Catalogo">
        private void PacketAe()
        {
                X.SendPacket(ct.catasection(Integer.parseInt(user[3])));
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Pagine Catalogo">
        private void PacketAf()
        {
                int idpage = vl64.Decode(data.substring(2));
                if(idpage != -1){ X.SendPacket("A" + ct.catapage(idpage)); }
        }
        //</editor-fold>
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Navigatore">
        //<editor-fold defaultstate="collapsed" desc="Public Room">
        private void PacketEI()
        {
            X.SendPacket("GBRFZ^THMy Camp Rock 2officialrooms_it/IT_MCR2_navi.gifHKKtv_studio[WwHhh_room_tv_studio_generalPTQK[^THTeatro di HabboHKKtheatredromeZRwHhh_room_theaterPTQJX_THLa TegolaHRBKrooftopXjwHhh_room_rooftopPTPiY_THChromide ClubHQCKthe_chromide_clubXTwHhh_room_discoPTRJZ_THHabbo LidoHSDKhabbo_lido[yvHhh_room_pool,hh_people_poolRLRE[_THHabbo Mallofficialrooms_it/Habbo_mall.pngHSBJhyfqEHIngresso Habbo MallFrankMallHSBQFHHYeOHHHHHIX`THHabbo SalottoHHKmain_lobby[QwHhh_room_lobbyRGRHY`THTerrazza Telefilm MagazineHKKsun_terraceYZwHhh_room_sun_terraceRLRQZ`THHabbo CinemaHJKhabbo_cinemaYTwHhh_room_cinemaPTQE[`THLa Vecchia ScuolaHHKold_skool[iwHhh_room_old_skoolPYQiXaTHPizzeria CapriHSAKpizzeriaYWwHhh_room_pizzaRGRIYaTICioÃ¨ LoungeHHKbasement_lobby[RwHhh_room_floorlobbiesPTRBZaTIGiardino di CartoniHHKchillX]wHhh_room_chillRLQS[aTIHPFKpicnic[ZwHhh_room_picnicRLQQXbTIBibliotecaHHKlibraryZZwHhh_room_libraryRLPQYbTIPalestraHPAKsport[]wHhh_room_sportSHPTZbTISala da TheHHKtearoomX^wHhh_room_tearoomSHQT[bTIParco Live!HIKgate_parkXfwHhh_room_gate_parkRLR]XcTIClub MammothHHKclub_mammothY]wHhh_room_clubmammothPTRSYcTIGiardino GalleggianteHHKfloatinggardenZfwHhh_room_floatinggardenPOP^ZcTIParcoofficialrooms_hq/hh_room_park_it.pngHHKparkZ[wHhh_room_park,hh_room_park_itRLQI[cTISalotto ClassicoHHKwelcome_lounge[SwHhh_room_nlobbyQFRKXdTIRockol CafeHHKice_cafeYUwHhh_room_icecafePTSGYdTILa TanaHHKthe_denZhwHhh_room_denRLSJZdTISunset CafeHHKsunset_cafeYjwHhh_room_sunsetcafePOSh[dTIOrientHHKorientZ]wHhh_room_orientPTSS");
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Room Show">
        private void PacketFr()
        {
            try{
            String stanze = "";
                          ResultSet result = DB.Query("SELECT * FROM rooms WHERE owner = '" + user[1] + "'");
                          while(result.next()){
                              stanze += result.getInt("id") + ",";
                          }
                          String stanze_sp[] = stanze.split(",");
                        String packet = new String();

                           int i = 0;
                           if(!stanze.isEmpty()){
                           for(int z = 0; z < stanze_sp.length; z++){

                        if(!Utility.is_event(Integer.parseInt(stanze_sp[z]))){
                        result = DB.Query("SELECT * FROM rooms WHERE id = '" + stanze_sp[z] + "'");
                        while (result.next()){

                            if(result.getString("figure").length() > 0){
                                String tag[] = (result.getString("tag")).split(",");
                                if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure"));
                                else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure"));
                            }else if(result.getString("tag").length() > 0){
                                String tag[] = (result.getString("tag")).split(",");
                                if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                            }else{
                                packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "J" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHI");
                            }
                            i++;
                        }
                           }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + stanze_sp[z] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                ResultSet query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + stanze_sp[z] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                            }
                           }
                           }
                        packet += "" + (char)1;
                        String packetc = "GCQA" + (char)2 + vl64.Encode(i) + packet;
                          X.SendPacket(packetc);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Get The Rooms Where Are My Friends">
        private void PacketFq()
        {
            try{
                ResultSet result1 = DB.Query("SELECT * FROM messenger_friendships WHERE userid = " + user[0]);
                        String friends = new String();
                        int f = 1;
                        while(result1.next()){
                            friends += "" + result1.getInt("friendid") + ",";
                            f++;
                        }
                        String split[] = friends.split(",");
                        String packet = new String();
                        int i = 0;
                        String stanze = new String();
                        for(int y = 0; y < (f-1); y++){
                            ResultSet result = DB.Query("SELECT * FROM utenti WHERE id = '" + split[y] + "'");
                            while (result.next()){
                                stanze += "" + result.getInt("room_id") + ",";
                            }
                        }
                        String stanze_sp[] = stanze.split(",");
                        if(!stanze.isEmpty()){
                        for(int z = 0; z < stanze_sp.length; z++){
                            if(!Utility.is_event(Integer.parseInt(stanze_sp[z]))){
                                ResultSet result = DB.Query("SELECT * FROM rooms WHERE id = '" + stanze_sp[z] + "'");
                                while(result.next()){
                                if(result.getString("figure").length() > 0){
                                    String tag[] = (result.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure"));
                                    else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure"));
                                }else if(result.getString("tag").length() > 0){
                                    String tag[] = (result.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                    else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" +(char)2 + "HHHI");
                                }else{
                                    packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHI");
                                }
                                i++;
                                }
                            }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + stanze_sp[z] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                ResultSet query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + stanze_sp[z] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                            }
                        }
                        }
                        packet += "" + (char)1;
                        String packetc = "GCPA" + (char)2 + vl64.Encode(i) + packet;

                        X.SendPacket(packetc);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Get My Friends Rooms">
        private void PacketFp()
        { 
            try{
                ResultSet result1 = DB.Query("SELECT * FROM messenger_friendships WHERE userid = " + user[0]);
                        String friends = new String();
                        int f = 1;
                        while(result1.next()){
                            friends += "" + result1.getInt("friendid") + ",";
                            f++;
                        }
                        String split[] = friends.split(",");
                        String packet = new String();
                        int i = 0;
                        String stanze = new String();

                        if(!friends.isEmpty()){
                        for(int y = 0; y < (f-1); y++){
                            String sy = split[y];
                            String name = Utility.getUserNamefromID(sy);
                            ResultSet result = DB.Query("SELECT * FROM rooms WHERE owner = '" + name + "'");
                            while(result.next()){
                                stanze += result.getInt("id") + ",";
                            }
                            String stanze_sp[] = stanze.split(",");
                            if(stanze_sp.length > 1){
                            for(int z = 0; z < stanze_sp.length; z++){
                                if(!Utility.is_event(Integer.parseInt(stanze_sp[z]))){
                                    result = DB.Query("SELECT * FROM rooms WHERE id = '" + stanze_sp[z] + "' AND owner = '" + name + "'");
                                    while(result.next()){
                                        if(result.getString("figure").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure"));
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure"));
                                        }else if(result.getString("tag").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                        }else{
                                            packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHI");
                                        }
                                        i++;
                                    }
                                }else{
                                    String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + stanze_sp[z] + "' AND owner = '" + name + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                ResultSet query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + stanze_sp[z] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                                }
                            }
                        }
                        }
                        }
                        packet += "" + (char)1;
                        String packetc = "GCK" + (char)2 + vl64.Encode(i) + packet;
                        X.SendPacket(packetc);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Favourites Rooms">
        private void PacketFs()
        {
            try{
                String stanze_favorite = new String();
                          ResultSet result = DB.Query("SELECT * FROM rooms_favourite WHERE user_id = " + user[0]);
                          while(result.next()){
                              stanze_favorite += result.getInt("room_id") + ",";
                          }
                          String split[] = stanze_favorite.split(",");
                          String packet = new String();
                          int i = 0;
                          if(!stanze_favorite.isEmpty()){
                          for(int y = 0; y < split.length; y++){
                            if(!Utility.is_event(Integer.parseInt(split[y]))){
                                result = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                    while(result.next()){
                                        if(result.getString("figure").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure"));
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure"));
                                        }else if(result.getString("tag").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                        }else{
                                            packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHI");
                                        }
                                        i++;
                                    }
                            }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                ResultSet query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + split[y] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                            }
                          }
                          }
                          packet += "" + (char)1;
                          String packetc = "GCRA" + (char)2 + vl64.Encode(i) + packet;
                          X.SendPacket(packetc);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Last Rooms Visited">
        private void PacketFt()
        {
            try{
                int i = 0;
                          int rows = 0;
                            String packet = new String();
                            String stanze_sp = "";
                            ResultSet query2 = DB.Query("SELECT * FROM rooms_chronology WHERE user_id = '" + user[0] + "'");
                            while(query2.next()) rows++;
                            ResultSet query = DB.Query("SELECT * FROM rooms_chronology WHERE user_id = '" + user[0] + "' ORDER BY id DESC LIMIT 0,25");
                            while(query.next()){
                              stanze_sp += query.getInt("room_id") + ",";
                          }
                            if(rows > 25){
                                for(int m = 1; m < (rows-26); m++){
                                    DB.Update("DELETE FROM rooms_chronology WHERE id = '" + m + "'");
                                }
                           }
                          String split[] = stanze_sp.split(",");
                          if(!stanze_sp.isEmpty()){
                          for(int y = 0; y < split.length; y++){
                            if(!Utility.is_event(Integer.parseInt(split[y]))){
                                ResultSet result = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                    while(result.next()){
                                        if(result.getString("figure").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure"));
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure"));
                                        }else if(result.getString("tag").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                        }else{
                                            packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHI");
                                        }
                                        i++;
                                    }
                            }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + split[y] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                            }

                              }
                          }
                            packet += "" + (char)1;
                            String packetc = "GCSA" + (char)2 + vl64.Encode(i) + packet;

                            X.SendPacket(packetc);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Get Rooms">
        private void PacketFn()
        {
            try{
                if(data.substring(2,4).equals("@B")){
                //Get Rooms By Users Active
                int i = 0;
                          String stanze_sp = "";
                          String packet = new String();
                          ResultSet query = DB.Query("SELECT * FROM rooms ORDER BY users_active DESC LIMIT 0,30");
                          while(query.next()){
                              stanze_sp += query.getInt("id") + ",";
                          }
                          String split[] = stanze_sp.split(",");
                          if(!stanze_sp.isEmpty()){
                          for(int y = 0; y < split.length; y++){
                            if(!Utility.is_event(Integer.parseInt(split[y]))){
                                ResultSet result = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                    while(result.next()){
                                        if(result.getString("figure").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure"));
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure"));
                                        }else if(result.getString("tag").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                        }else{
                                            packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHI");
                                        }
                                        i++;
                                    }
                          }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + split[y] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                            }
                          }
                          }
                          packet += "" + (char)1;
                          String packetc = "GCI-1" + (char)2 + vl64.Encode(i) + packet;

                          X.SendPacket(packetc);

                }else if(data.substring(2,4).equals("@A")){
                    //Get Rooms By Category
                    String bodyst3 = data.substring(4);
                          String stanze_sp = "";
                          String packet = "";
                          int i = 0;
                          ResultSet query = DB.Query("SELECT * FROM rooms WHERE category_id = '" + bodyst3 + "'");
                            while(query.next()){
                              stanze_sp += query.getInt("id") + ",";
                          }
                          String split[] = stanze_sp.split(",");
                          if(!stanze_sp.isEmpty()){
                          for(int y = 0; y < split.length; y++){
                            if(!Utility.is_event(Integer.parseInt(split[y]))){
                                ResultSet result = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                    while(result.next()){
                                        if(result.getString("figure").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure"));
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure"));
                                        }else if(result.getString("tag").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                        }else{
                                            packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHI");
                                        }
                                        i++;
                                    }
                          }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + split[y] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                            }
                          }
                          }
                          packet += "" + (char)1;

                          X.SendPacket("GCI" + bodyst3 + (char)2 + vl64.Encode(i) + packet);

                }
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Get Rooms By Score">
        private void PacketFo() 
        {
            try{
                int i = 0;
                          String stanze_sp = "";
                          String packet = new String();

                          ResultSet query = DB.Query("SELECT * FROM rooms ORDER BY score DESC LIMIT 0,25");
                          while(query.next()){
                              stanze_sp += query.getInt("id") + ",";
                          }
                          String split[] = stanze_sp.split(",");
                          if(!stanze_sp.isEmpty()){
                          for(int y = 0; y < split.length; y++){
                            if(!Utility.is_event(Integer.parseInt(split[y]))){
                                ResultSet result = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                    while(result.next()){
                                        if(result.getString("figure").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure"));
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure"));
                                        }else if(result.getString("tag").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                        }else{
                                            packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHI");
                                        }
                                        i++;
                                    }
                          }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + split[y] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                            }
                          }
                          }
                          packet += "" + (char)1;
                          String packetc = "GCJ" + (char)2 + vl64.Encode(i) + packet;

                          X.SendPacket(packetc);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Get Events">
        private void PacketFw()
        {
            try{
                if(data.substring(2,4).equals("@B")){
                //Get All Events
                int i = 0;
                          int num = 0;
                          String roomid = new String();
                          String packet = new String();
                          ResultSet query1 = DB.Query("SELECT * FROM rooms_events");
                          while(query1.next()){ roomid += query1.getInt("room_id") + ","; num++; }

                          String room_id[] = roomid.split(",");
                          for(int y = 0; y < num; y++){
                              String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = new String();
                              ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + room_id[y] + "'");
                              while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                              ResultSet query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + room_id[y] + "'");


                               while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                          }
                          packet += "" + (char)1;
                          String packetc = "GCPC-1" + (char)2 + vl64.Encode(i) + packet;

                          X.SendPacket(packetc);
                }else if(data.substring(2,4).equals("@A")){
                    //Get Events By Category
                    String bodyst3 = data.substring(4);
                        int i = 0;
                          int num = 0;
                          String roomid = new String();
                          String packet = new String();
                          ResultSet query1 = DB.Query("SELECT * FROM rooms_events");
                          while(query1.next()){ roomid += query1.getInt("room_id") + ","; num++; }

                          String room_id[] = roomid.split(",");
                          for(int y = 0; y < num; y++){
                              String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = new String();
                              ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + room_id[y] + "'");
                              while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                              ResultSet query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + room_id[y] + "' AND category_id = '" + bodyst3 + "'");


                              while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + query.getString("figure"));
                                    else packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + query.getString("figure"));
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHI");
                                  }
                                  i++;
                              }
                          }
                          packet += "" + (char)1;
                          String packetc = "GCPC" + bodyst3 + (char)2 + vl64.Encode(i) + packet;

                          X.SendPacket(packetc);

                }
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold> 
        //<editor-fold defaultstate="collapsed" desc="Get Active Tags">
        private void PacketE_()
        {
            try{
                int i = 0;
                            int y = 0;
                            String tag_users = new String();
                            String tags = new String();
                            String packet = new String();

                            ResultSet result1 = DB.Query("SELECT * FROM rooms_tags ORDER BY popularity DESC LIMIT 0,50");
                            while(result1.next()){ tags += result1.getString("rooms_id") + "|"; y++; }

                            String split[] = tags.split("|");
                            for(int a = 0; a < y; a++){
                                String split1[] = split[a].split(",");
                                int total = 0;
                                for(int b = 0; b < split1.length; b++){
                                    ResultSet resultB = DB.Query("SELECT * FROM rooms WHERE id = '" + split1[b] + "'");
                                    while(resultB.next()) total = total+resultB.getInt("users_active");
                                }
                                tag_users += total + ",";
                            }


                            ResultSet query = DB.Query("SELECT * FROM rooms_tags ORDER BY popularity DESC LIMIT 0,50");

                            String tag_users_s[] = tag_users.split(",");
                            while(query.next()){ packet += "" + query.getString("name") + (char)2 + vl64.Encode(Integer.parseInt(tag_users_s[i])); i++; }
                            packet += (char)1;
                            String packetc = "GD" +  vl64.Encode(i) + packet;

                            X.SendPacket(packetc);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Search Rooms By Tag">
        private void PacketFv()
        {
            try{
                String packet = new String();
                        int i = 0;
                        String rooms = new String();
                        String bodyst3 = data.substring(4);
                        ResultSet query1 = DB.Query("SELECT * FROM rooms_tags WHERE name = '" + bodyst3 + "'");
                        while(query1.next()) rooms = query1.getString("rooms_id");

                        String split[] = rooms.split(",");
                        for(int a = 0; a < split.length; a++){

                            if(!Utility.is_event(Integer.parseInt(split[a]))){
                            ResultSet result = DB.Query("SELECT * FROM rooms WHERE id = '" + split[a] + "'");
                            while(result.next()){
                                        if(result.getString("figure").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + result.getString("figure"));
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + result.getString("figure"));
                                        }else if(result.getString("tag").length() > 0){
                                            String tag[] = (result.getString("tag")).split(",");
                                            if(tag.length > 1) packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                            else packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                        }else{
                                            packet += (vl64.Encode(result.getInt("id")) + "H" + result.getString("name") + (char)2 + result.getString("owner") + (char)2 + vl64.Encode(result.getInt("is_closed")) + vl64.Encode(result.getInt("users_active")) + vl64.Encode(result.getInt("max_visitors")) + result.getString("description") + (char)2 + "H" + vl64.Encode(result.getInt("trade_on")) + vl64.Encode(result.getInt("score")) + vl64.Encode(result.getInt("category_id")) + (char)2 + "HHHHI");
                                        }
                                        i++;
                                    }
                          }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + split[a] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                ResultSet query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + split[a] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                  }
                                  i++;
                              }
                          }
                        }
                        packet += "" + (char)1;
                        String packetc = "GCQB" + bodyst3 + (char)2 + vl64.Encode(i) + packet;

                        X.SendPacket(packetc);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Search Rooms By Keyword">
        private void PacketFu()
        {
            try{
                String help = "";
                        String packet = new String();
                        int i = 0;
                        String rooms = new String();
                        String bodyst3 = data.substring(4);
                        ResultSet query1 = DB.Query("SELECT * FROM rooms_tags WHERE name = '" + bodyst3 + "'");
                        while(query1.next()) rooms += query1.getString("rooms_id") + ",";

                        String split[] = rooms.split(",");
                        if(!rooms.isEmpty()){
                        for(int a = 0; a < split.length; a++){
                            if(!Utility.is_event(Integer.parseInt(split[a]))){
                            ResultSet query = DB.Query("SELECT * FROM rooms WHERE id = '" + split[a] + "'");

                            while(query.next()){
                              if(query.getString("figure").length() > 0){
                                  String tag[] = (query.getString("tag")).split(",");
                                  help += query.getInt("id") + ",";
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + query.getString("figure"));
                                    else packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + query.getString("figure"));
                              }else if(query.getString("tag").length() > 0){
                                  help += query.getInt("id") + ",";
                                  String tag[] = (query.getString("tag")).split(",");
                                  if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                  else packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                              }else{
                                  help += query.getInt("id") + ",";
                                  packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "HHHHI");
                              }
                              i++;
                            }
                            }else{
                                  String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + split[a] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                ResultSet query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + split[a] + "'");
                                while(query.next()){
                                  if(figure.length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      help += query.getInt("id") + ",";
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + query.getString("figure"));
                                    else packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + query.getString("figure"));
                                  }else if(query.getString("tag").length() > 0){
                                      String tag[] = (query.getString("tag")).split(",");
                                      help += query.getInt("id") + ",";
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  }else{
                                      help += query.getInt("id") + ",";
                                      packet += (vl64.Encode(query.getInt("id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHI");
                                  }
                                  i++;
                              }
                            }
                        }
                        }


                        String shelp[] = help.split(",");
                        String stanze_sp = "";
                        ResultSet query = DB.Query("SELECT * FROM rooms WHERE name LIKE '%" + bodyst3 + "%'");
                        while(query.next()){
                              stanze_sp += query.getInt("id") + ",";
                          }
                          split = stanze_sp.split(",");
                          if(!stanze_sp.isEmpty()){
                          for(int y = 0; y < split.length; y++){
                            if(!Utility.is_event(Integer.parseInt(split[y]))){
                                query = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                    while(query.next()){
                                        if(query.getString("figure").length() > 0){
                                   if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                    String tag[] = (query.getString("tag")).split(",");
                                    help += query.getInt("id") + ",";
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + query.getString("figure"));
                                    else packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + query.getString("figure"));
                                    i++;
                                  }
                                        }else if(query.getString("tag").length() > 0){
                                  if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                    help += query.getInt("id") + ",";
                                    String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                    else packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                    i++;
                                  }
                                        }else{
                                  if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                    help += query.getInt("id") + ",";
                                    packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "HHHHI");
                                    i++;
                                  }
                                        }
                                    }
                          }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + split[y] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                      help += query.getInt("id") + ",";
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  i++;
                                  }
                                  }else if(query.getString("tag").length() > 0){
                                      if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                      help += query.getInt("id") + ",";
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  i++;
                                  }
                                  }else{
                                      if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                      help += query.getInt("id") + ",";
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                      i++;
                                  }
                                  }
                              }
                            }
                          }
                          }

                        query = null;
                        shelp = null;
                        stanze_sp = "";

                        shelp = help.split(",");
                        query = DB.Query("SELECT * FROM rooms WHERE owner LIKE '%" + bodyst3 + "%'");
                        while(query.next()){
                              stanze_sp += query.getInt("id") + ",";
                          }
                          split = stanze_sp.split(",");
                          if(!stanze_sp.isEmpty()){
                          for(int y = 0; y < split.length; y++){
                            if(!Utility.is_event(Integer.parseInt(split[y]))){
                                query = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                    while(query.next()){
                                        if(query.getString("figure").length() > 0){
                                   if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                    String tag[] = (query.getString("tag")).split(",");
                                    help += query.getInt("id") + ",";
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + query.getString("figure"));
                                    else packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + query.getString("figure"));
                                    i++;
                                  }
                                        }else if(query.getString("tag").length() > 0){
                                  if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                    help += query.getInt("id") + ",";
                                    String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                    else packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                    i++;
                                  }
                                        }else{
                                  if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                    help += query.getInt("id") + ",";
                                    packet += (vl64.Encode(query.getInt("id")) + "H" + query.getString("name") + (char)2 + query.getString("owner") + (char)2 + vl64.Encode(query.getInt("is_closed")) + vl64.Encode(query.getInt("users_active")) + vl64.Encode(query.getInt("max_visitors")) + query.getString("description") + (char)2 + "H" + vl64.Encode(query.getInt("trade_on")) + vl64.Encode(query.getInt("score")) + vl64.Encode(query.getInt("category_id")) + (char)2 + "HHHHI");
                                    i++;
                                  }
                                        }
                                    }
                          }else{
                                String start_time = "";
                                String owner = new String();
                              int is_closed = 0;
                              int users_active = 0;
                              int max_visitors = 0;
                              int trade_on = 0;
                              int score = 0;
                              String figure = "";

                                ResultSet other_data = DB.Query("SELECT * FROM rooms WHERE id = '" + split[y] + "'");
                                while(other_data.next()){
                                  owner = other_data.getString("owner");
                                  is_closed = other_data.getInt("is_closed");
                                  users_active = other_data.getInt("users_active");
                                  max_visitors = other_data.getInt("max_visitors");
                                  trade_on = other_data.getInt("trade_on");
                                  score = other_data.getInt("score");
                                  figure = other_data.getString("figure");
                              }

                                query = DB.Query("SELECT * FROM rooms_events WHERE room_id = '" + split[y] + "'");

                                while(query.next()){
                                  if(figure.length() > 0){
                                      if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                      help += query.getInt("id") + ",";
                                      String tag[] = (query.getString("tag")).split(",");
                                    if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + figure);
                                    else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + figure);
                                  i++;
                                  }
                                  }else if(query.getString("tag").length() > 0){
                                      if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                      help += query.getInt("id") + ",";
                                      String tag[] = (query.getString("tag")).split(",");
                                      if(tag.length > 1) packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + tag[1] + (char)2 + "HHHI");
                                      else packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "J" + tag[0] + (char)2 + "" + (char)2 + "HHHI");
                                  i++;
                                  }
                                  }else{
                                      if(Utility.array_search(query.getInt("id"), shelp) == 0){
                                      help += query.getInt("id") + ",";
                                      packet += (vl64.Encode(query.getInt("room_id")) + "I" + query.getString("title") + (char)2 + owner + (char)2 + vl64.Encode(is_closed) + vl64.Encode(users_active) + vl64.Encode(max_visitors) + query.getString("description") + (char)2 + "H" + vl64.Encode(trade_on) + vl64.Encode(score) + vl64.Encode(query.getInt("category_id")) + query.getString("start_time") + (char)2 + "HHHHH");
                                      i++;
                                  }
                                  }
                              }
                            }
                          }
                          }
                        if(i > 0) packet += vl64.Encode(1) + (char)1;
                        else packet += vl64.Encode(0) + (char)1;

                        X.SendPacket("GCPB" + bodyst3 + (char)2 + vl64.Encode(i) + packet);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Add Room Favourite">
        private void PacketChS()
        {
            try{
                X.SendPacket("GK" +  data.substring(2) + "I");
                DB.Update("INSERT INTO rooms_favourite VALUES (" + user[0] + ", " + vl64.Decode(data.substring(2)) + ")");
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
         //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Delete Room Favourite">
        private void PacketChT()
        {
            try{
                DB.Update("DELETE FROM rooms_favourite WHERE room_id = " + vl64.Decode(data.substring(2)));
                X.SendPacket("GK" +  data.substring(2) + "H");
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Open New Room Windows">
        private void PacketFC()
        {
            try{
                int count = 0;
                          ResultSet query = DB.Query("SELECT count(id) FROM rooms WHERE id = " + user[0]);
                          while(query.next()){
                              count = query.getInt("count(id)");
                          }
                          X.SendPacket("H@" + vl64.Encode((count < 50) ? 0 : 1) + "RL" + (char)1);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Create New Room">
        private void PacketChPQ()
        {
            try{
                int id = 0;
                          ResultSet query = DB.Query("SELECT id FROM rooms ORDER BY id DESC LIMIT 0,1");
                          if(query.next()){ id = query.getInt("id")+1; }else{ id = 1; }
                          String split[] = (data.substring(4)).split("@G");
                          DB.Update("INSERT INTO rooms VALUES (null, '" + split[0] + "', '', '" + user[1] + "', 25, 0, 0, 1, '', 0, '', 0, '', '" + split[1] + "', 0, 50, 1, 1, 1, 0)");
                          X.SendPacket("@{" + vl64.Encode(id) + split[0] + (char)2 + (char)1);
            }catch (Exception con)
            {
                 con.printStackTrace();
            }
        }
         //</editor-fold>
        //</editor-fold>       
        //<editor-fold defaultstate="collapsed" desc="Mod Tool">
        //<editor-fold defaultstate="collapsed" desc="Mod General">
        private void PacketHS()
        {
            try{
                String parentmess = "";
                String parentroom = "";
                int mess = 0;
                int room = 0;

                ResultSet parent = DB.Query("SELECT type,message FROM moderation_presets WHERE enabled = '1'");
                while(parent.next()){
                    //1 = User Message, 2 = Room Message
                    switch(parent.getInt("type"))
                    {
                        case 1:
                            parentmess += parent.getString("message") + (char)2;
                            mess++;
                            break;
                        case 2:
                            parentroom += parent.getString("message") + (char)2;
                            room++;
                            break;
                    }

                }

            StringBuffer general = new StringBuffer();
            general.append("HS");
            general.append(vl64.Encode(-1));
            general.append(vl64.Encode(mess)); //Count UserMessage
            general.append(parentmess);  //UserMessage
            general.append(vl64.Encode(0));
            general.append(vl64.Encode(14));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(room)); //Count RoomMessage
            general.append(parentroom); //RoomMessage
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append("test" + (char)2);
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append("test" + (char)2);
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append(vl64.Encode(1));
            general.append("test" + (char)2);

            X.SendPacket(general.toString());

            //M.sendtickets(Integer.parseInt(user[0]));

           }catch (Exception en)
           {
                 en.printStackTrace();
           }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Mod InfoUser">
        private void PacketGF()
        {
            try{
            int iduser = vl64.Decode(data.substring(2));
            double tr = 0;
            double ul = 0;
            int cm = 0;
            int ab = 0;
            int ca = 0;
            int bn = 0;

            ResultSet modinfo = DB.Query("SELECT * FROM user_info WHERE user_id = '" + iduser + "' LIMIT 1");
            if(modinfo.next()){
            tr = modinfo.getDouble("reg_timestamp");
            ul = modinfo.getDouble("login_timestamp");
            cm = modinfo.getInt("cfhs");
            ab = modinfo.getInt("cfhs_abusive");
            ca = modinfo.getInt("cautions");
            bn = modinfo.getInt("bans");
            }

            StringBuffer moduser = new StringBuffer();
            moduser.append("HU"); //HEADER
            moduser.append(data.substring(2)); //ID utente in VL64
            moduser.append(Utility.getUserNamefromID(iduser)); //Nome utente
            moduser.append((char)2);
            moduser.append(vl64.Encode((int)Math.ceil((System.currentTimeMillis() - tr) / 100000))); //Tempo registrazione (VL64 in minuti)
            moduser.append(vl64.Encode((int)Math.ceil((System.currentTimeMillis() - ul) / 100000))); //Ultimo login (VL64 in minuti)
            moduser.append(vl64.Encode((TH.isOnline(iduser) == true) ? 1 : 0)); //Boolean Online = 1 Offline = 0
            moduser.append(vl64.Encode(cm)); //Chiamate mod (VL64)
            moduser.append(vl64.Encode(ab)); //Abuso chiamata mod (VL64)
            moduser.append(vl64.Encode(ca)); //Cautela (VL64)
            moduser.append(vl64.Encode(bn)); //Ban (VL64)
            
            X.SendPacket(moduser.toString());
             }catch (Exception en)
           {
                 en.printStackTrace();
           }
        }

        private void PacketGG(){
            try{
            int iduser = vl64.Decode(data.substring(2));
            StringBuffer chatuser = new StringBuffer();
            int c = 0;
            String name = Utility.getUserNamefromID(iduser);
            ResultSet chus = DB.Query("SELECT message FROM chatlogs WHERE user_id = '"+iduser+"' ORDER BY timestamp DESC");
            while(chus.next()){
                c++;
                chatuser.append(vl64.Encode(1) + vl64.Encode(1) + vl64.Encode(iduser) + name + (char)2 + chus.getString("message") + (char)2);
            }
            X.SendPacket("HX" + vl64.Encode(iduser) + name + (char)2 + vl64.Encode(1) + vl64.Encode(0) + vl64.Encode(6) + "TEST" + (char)2 + vl64.Encode(c) + chatuser);
           }catch (Exception en)
           {
                 en.printStackTrace();
           }
            
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Mod Room Setting">
        private void PacketGK()
        {
            try{
                int idroome = vl64.Decode(data.substring(2));

                StringBuffer rooms = new StringBuffer();

                ResultSet room = DB.Query("SELECT name,description,tag,users_active,owner FROM rooms WHERE id = '"+idroome+"'");
                room.next();
                int us_active = room.getInt("users_active");
                String owner = room.getString("owner");
                String name = room.getString("name");
                String description = room.getString("description");
                //String tag = room.getString("tag");
                
                rooms.append(vl64.Encode(idroome));
                rooms.append(vl64.Encode(us_active));

                rooms.append(vl64.Encode(0)); //BOOLEAN 1 = OWNER IS IN ROOM, 0 OWNER IS NOT IN ROOM

                rooms.append(vl64.Encode(Utility.getIDfromUserName(owner))); //ID PROPRIETARIO
                rooms.append(owner + (char)2); //NOME PROPRIETARIO
                rooms.append(vl64.Encode(idroome)); //ID ROOM
                rooms.append(name + (char)2); //NOME ROOM
                rooms.append(description + (char)2); //DESCRIZIONE ROOM

                rooms.append(vl64.Encode(0)); //BOOLEAN TAG

                rooms.append(vl64.Encode(0)); //BOOLEAN EVENT

                X.SendPacket("HZ" + rooms);

        } catch(Exception en){
                en.printStackTrace();
        }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Manage Ticket">
        private void PacketGE(){
           try{
           String message = data.substring(4,base64.Decode(data.substring(2,4)));
           int spazzatura = vl64.Decode(data.substring(4 + base64.Decode(data.substring(2,4))));
           int type = vl64.Decode(data.substring(4 + base64.Decode(data.substring(2,4)) + vl64.Encode(spazzatura).length()));
           int usereported = vl64.Decode(data.substring(4 + base64.Decode(data.substring(2,4)) + vl64.Encode(spazzatura).length() + vl64.Encode(type).length()));

           //ID CHIAMATA
           ResultSet maxidti = DB.Query("SELECT MAX(id) AS maxid FROM moderation_tickets");
           maxidti.next();
           int idticket = maxidti.getInt("maxid");
           idticket++;
           //ROOM INFO
           ResultSet queryus = DB.Query("SELECT room_id FROM utenti WHERE id = '"+ user[0] +"'");
           queryus.next();
           int roomin = queryus.getInt("room_id");
           ResultSet queryrm = DB.Query("SELECT name FROM rooms WHERE id = '"+ roomin +"'");
           queryrm.next();
           String roomname = queryrm.getString("name");
           //SCORE
           ResultSet scorem = DB.Query("SELECT COUNT(id) AS scorem FROM moderation_tickets WHERE room_id = '"+roomin+"' AND sender_id = '"+user[0]+"'");
           scorem.next();
           int scoremax = scorem.getInt("scorem");
           scoremax++;
          
           String Ticket = M.ticket(idticket,1,scoremax,type,Integer.parseInt(user[0]),usereported,0,message,roomin,roomname);

          ResultSet queryticket = DB.Query("SELECT id FROM utenti WHERE rank >= '6'");
          while(queryticket.next()){
          int sendto = queryticket.getInt("id");
          if(TH.isOnline(sendto)){
              TH.SendPacketID(sendto, Ticket);
          }
          }

          DB.Update("INSERT INTO moderation_tickets (score,type,status,sender_id,reported_id,message,room_id,room_name,timestamp) VALUES ('"+scoremax+"', '"+type+"','0','"+user[0]+"','"+usereported+"','"+message+"','"+roomin+"','"+roomname+"','"+System.currentTimeMillis()+"')");
          DB.Update("UPDATE user_info SET cfhs = cfhs + 1 WHERE user_id = '"+user[0]+"'");

          }catch (Exception con)
          {
             con.printStackTrace();
          }
        }

        private void PacketGB(){
        try{
        int spazzatura = vl64.Decode(data.substring(2));
        int idticket = vl64.Decode(data.substring(2 + vl64.Encode(spazzatura).length()));

        DB.Update("UPDATE moderation_tickets SET moderator_id = '"+user[0]+"', status = '1' WHERE id = '"+idticket+"'");

        ResultSet pickticket = DB.Query("SELECT * FROM moderation_tickets WHERE id = '"+idticket+"' LIMIT 1");
        pickticket.next();
        int idticketa = pickticket.getInt("id");
        String Ticket = M.ticket(pickticket.getInt("id"),2,pickticket.getInt("score"),pickticket.getInt("type"),pickticket.getInt("sender_id"),pickticket.getInt("reported_id"), pickticket.getInt("moderator_id"), pickticket.getString("message"),pickticket.getInt("room_id"), pickticket.getString("room_name"));
        
        ResultSet queryticket = DB.Query("SELECT id FROM utenti WHERE rank >= '6'");
          while(queryticket.next()){
          int sendto = queryticket.getInt("id");
          if(TH.isOnline(sendto)){
           if(sendto == Integer.parseInt(user[0])){
              TH.SendPacketID(sendto, Ticket);
           }else{
              TH.SendPacketID(sendto, "HR" + vl64.Encode(idticketa) + vl64.Encode(0));
           }
          }
          }
        
        }catch (Exception con)
        {
          con.printStackTrace();
        }
        
        }

        private void PacketGC()
        {
            try{

            int releasenumber = vl64.Decode(data.substring(2));
            int idticket = vl64.Decode(data.substring(2+vl64.Encode(releasenumber).length()));

            DB.Update("UPDATE moderation_tickets SET moderator_id = '0', status = '0' WHERE id = '"+idticket+"'");

        ResultSet pickticket = DB.Query("SELECT * FROM moderation_tickets WHERE id = '"+idticket+"' LIMIT 1");
        pickticket.next();

        String Ticket = M.ticket(pickticket.getInt("id"),1,pickticket.getInt("score"),pickticket.getInt("type"),pickticket.getInt("sender_id"),pickticket.getInt("reported_id"), pickticket.getInt("moderator_id"), pickticket.getString("message"),pickticket.getInt("room_id"), pickticket.getString("room_name"));
        
        M.sendmod(Ticket);
        
        }catch (Exception con)
        {
          con.printStackTrace();
        }
        }
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Mod Message">
        private void PacketGN(){ //ALERT USER
            int iduser = vl64.Decode(data.substring(2));
            String message = (data.substring(4+vl64.Encode(iduser).length()));
            message = message.substring(0, message.length() - 2);
            TH.SendPacketID(iduser, "BK" + message);
        }

        private void PacketGM(){ //CAUTION USER
            int iduser = vl64.Decode(data.substring(2));
            String message = (data.substring(4+vl64.Encode(iduser).length()));
            message = message.substring(0, message.length() - 2);
            TH.SendPacketID(iduser, "BK" + message);
            DB.Update("UPDATE user_info SET cautions = cautions + 1 WHERE user_id = '"+iduser+"'");
        }
        /*private void PacketGO(){ //KICK USER
            int iduser = vl64.Decode(data.substring(2));
            String message = (data.substring(4+vl64.Encode(iduser).length()));
            message = message.substring(0, message.length() - 2);
            TH.SendPacketID(iduser, "@R");

            TH.SendPacketID(iduser, "BK" + message);
        }*/
        //</editor-fold>
        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Comandi">
        private void CM(String CM){
        
            String[] SP;
            SP = CM.split(" ");
            
            if(SP[0].equals("comandi")){
                X.SendPacket("BK" + "Comandi LiveXenon Emulator\n" +
                             "\n" +
                             ":offline [minuti]\n" +
                             ":effetto [id]\n" +
                             ":roomalert [messaggio]\n" +
                             ":esci\n" +
                             ":ha [messaggio]");
                return;
            }
            if(SP[0].equals("offline")){
                PacketDc(Integer.parseInt(SP[1]));
                return;
            }
            if(SP[0].equals("ha")){
                int i;
                String m = "";
                for(i=1; i<SP.length; i++){ if(i==1){ m = m + SP[i]; continue; } m = m + " " + SP[i]; }
                TH.SendAll("BK" + m);
                return;
            }
            if(SP[0].equals("effetto")){
                rm.sendroom(idroom, "Ge" + vl64.Encode(rm.getidusroom(Integer.parseInt(user[0]))) + vl64.Encode(Integer.parseInt(SP[1]))); //TEST EFFETTO
                return;
            }
            if(SP[0].equals("roomalert")){
                String m = "";
                for(int i=1; i<SP.length; i++){ if(i==1){ m = m + SP[i]; continue; } m = m + " " + SP[i]; }
                rm.sendroom(idroom, "BK" + m);
                return;
            }
            if(SP[0].equals("esci")){
                X.SendPacket("D_" + "D_1");
                return;
            }
            if(SP[0].equals("linkalert")){ //NOT IN LIST
                X.SendPacket("B!" + "LiveXenonGroup" + (char)2 + "http://www.youtube.com/" + (char)2);
                return;
            }
            if(SP[0].equals("ban")){ //NOT IN LIST
                X.SendPacket("@c" + "MESSAGGIO" + (char)2);
                return;
            }

            X.SendPacket("BK" + "COMANDO NON TROVATO");
            
        }

        //</editor-fold>
        //<editor-fold defaultstate="collapsed" desc="Chiusura Hotel">
        private void PacketDc(int time)
        {
            try
            {
                TH.SendAll("Dc" + vl64.Encode(time)); //In minuti
                Timer timer = new Timer();
                TimerTask CLOSE = new CLOSE();
                
                timer.schedule(CLOSE, (time * 60) * 1000);
                System.out.println("Chiusura server tra: " + time + " Minuto/i");

                Server1.close(); //Chiude canale connessione nuovi utenti

            }
              catch (Exception ex)
            {
              System.out.println("Errore Server: " + ex);
            }
        }
       //</editor-fold>

        //<editor-fold defaultstate="collapsed" desc="Timer Send Pixels">
        private class SendPixels extends TimerTask {
            public void run(){
                DB.Update("UPDATE utenti SET pixels = pixels + 20 WHERE id = '" + user[0] + "'");
                int pixels = Integer.parseInt(user[8]) + 20;
                X.SendPacket("Fv" + vl64.Encode(pixels) + vl64.Encode(20) + (char)1);
                user[8] = pixels + "";
            }
        }
        //</editor-fold>
}

//<editor-fold defaultstate="collapsed" desc="Timer Close">
class CLOSE extends TimerTask {

    public void run() {
        System.exit(0);
    }
}
//</editor-fold>

