Advertisement
Guest User

f0rChr1s

a guest
May 3rd, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var ws;
  2. var reconnect;
  3. var calls = [];
  4. var callIndex = 1;
  5. var inroom = false;
  6. var target;
  7. var targetObject;
  8. var toggle = false;
  9. var macros;
  10. var loadChatInterval;
  11. var whispering = false;
  12. var renderCall = function(i) {
  13.   callIndex = i;
  14.   var call = calls[i - 1];
  15.   $('#reporter').html(call.reporter);
  16.   $('#room').html(call.room_name + ' [' + call.room_id + ']');
  17.   $('#message').html(call.message);
  18.   $('#pageCount').html(i + '/' + calls.length);
  19.   $('.flasher').show();
  20.   $('#callcontainer').show();
  21. }
  22. var nextCall = function(i) {
  23.   if (callIndex + 1 <= calls.length) {
  24.     renderCall(callIndex + 1);
  25.   }
  26. }
  27. var prevCall = function(i) {
  28.   if (callIndex - 1 > 0) {
  29.     renderCall(callIndex - 1);
  30.   }
  31. }
  32. var renderMacros = function() {
  33.   var macroList = '';
  34.   macros.forEach(function(macro) {
  35.     macroList += '' + '<li id="' + macro.id + '" class="list-group-item amacro">' + '<h4 class="list-group-item-heading"><small>Command:</small> ' + macro.macro + '</h4>' + '<p class="list-group-item-text">' + '<small>Key:</small> <b>' + macro.keypress + '</b>' + '<div style="margin-bottom: 25px;">' + '<button style="float: right;" type="submit" class="btn btn-success btn-danger btn-sm deletemacro">Delete</button>' + '<button style="float: right; margin-right: 5px" type="submit" class="btn btn-success btn-warning btn-sm editmacro">Edit</button>' + '</div>' + '</p>' + '</li>';
  36.   });
  37.   $('#macrolist').empty();
  38.   $('#macrolist').append(macroList);
  39.   $('#addmacrobtn').removeAttr('disabled');
  40. }
  41. var renderBusStops = function(busstops) {
  42.   var busStopList = '';
  43.   busstops.forEach(function(busstop) {
  44.     busStopList += '' + '<li class="list-group-item">' + '<button style="margin-top: -5px;" class="btn btn-sm btn-success pull-right busdestination" id="' + busstop.room_id + '">Take me there!</button>' +
  45.       busstop.name + '</li>'
  46.   });
  47.   $('#busstops').empty();
  48.   $('#busstops').append(busStopList);
  49.   $('#bus').fadeIn();
  50. }
  51. var loadChat = function() {
  52.   if (!inroom && ws.OPEN) {
  53.     ws.send('inroom');
  54.   }
  55. }
  56. var toggleChat = function() {
  57.   var $chatbox = $('#chatbox').find('input');
  58.   if ($('#toggle').hasClass('btn-success')) {
  59.     $chatbox.focus();
  60.     toggle = true;
  61.     $('#toggle').removeClass('btn-success').addClass('btn-danger').html('Chat Mode');
  62.   } else {
  63.     $chatbox.blur();
  64.     toggle = false;
  65.     $('#toggle').removeClass('btn-danger').addClass('btn-success').html('Game Mode');
  66.   }
  67. }
  68. connect = function() {
  69.   console.log('Attempting to connect to WebSocket...');
  70.   ws = new WebSocket('ws://ws.obborp.com:3000');
  71.   ws.onopen = function() {
  72.     console.log('WebSocket connected.');
  73.     var ping;
  74.     var ping_counter;
  75.     var sso = flashvars['sso.ticket'];
  76.     var data = JSON.stringify({
  77.       sso: sso
  78.     });
  79.     ws.send('sso_login ' + data);
  80.     loadChatInterval = setInterval(loadChat, 5000);
  81.     ws.onmessage = function(ev) {
  82.       var data = ev.data;
  83.       var msg_regex = /([^\s]+)*\s?(.+)?/;
  84.       var msg = data.match(msg_regex);
  85.       var command = msg[1] ? msg[1] : msg[0];
  86.       switch (command) {
  87.         case 'ready':
  88.           console.log('Ready.');
  89.           ws.send('look');
  90.           break;
  91.         case 'pong':
  92.           ping_counter--;
  93.           console.log('PONG.');
  94.           break;
  95.         case 'sso_login':
  96.           console.log('Authenticated.');
  97.           ws.send('hello');
  98.           ws.send('look');
  99.           ws.send('getmacros');
  100.           break;
  101.         case 'inroom':
  102.           if (!inroom) {
  103.             $('#loadingtext').fadeOut();
  104.             clearInterval(loadChatInterval);
  105.             inroom = true;
  106.             $('#chatbox').fadeIn();
  107.             $('#stats').fadeIn();
  108.             $('#chatbox').focus();
  109.             if (target) {
  110.               $('#statstarget').fadeIn();
  111.             }
  112.             ws.send('stats');
  113.           }
  114.           break;
  115.         case 'look':
  116.           var data = JSON.parse(msg[2]);
  117.           $('#head').html('<img id="headimg" src="https://www.habbo.com/habbo-imaging/avatarimage?figure=' + data.look + '&action=wav&direction=2&head_direction=3&gesture=srp&size=m&headonly=1">').fadeOut().fadeIn();
  118.           break;
  119.         case 'stats':
  120.           var data = JSON.parse(msg[2]);
  121.           $('#healthbar').width(data.health + '%');
  122.           $('#energybar').width(data.energy + '%');
  123.           break;
  124.         case 'targetstats':
  125.           var data = JSON.parse(msg[2]);
  126.           if (data.id == target) {
  127.             $('#targethealthbar').width(data.health + '%');
  128.             $('#targetenergybar').width(data.energy + '%');
  129.           } else {
  130.             $('#statstarget').fadeOut();
  131.             $('#headtarget').html('<img id="headimg" src="https://www.habbo.com/habbo-imaging/avatarimage?figure=' + data.look + '&action=wav&direction=2&head_direction=3&gesture=srp&size=m&headonly=1">')
  132.             $('#targethealthbar').width(data.health + '%');
  133.             $('#targetenergybar').width(data.energy + '%');
  134.             target = data.id;
  135.             targetObject = data;
  136.             $('#statstarget').fadeIn();
  137.           }
  138.           break;
  139.         case 'macros':
  140.           var data = JSON.parse(msg[2]);
  141.           macros = data;
  142.           renderMacros();
  143.           break;
  144.         case 'busstops':
  145.           var data = JSON.parse(msg[2]);
  146.           renderBusStops(data);
  147.           break;
  148.         case 'atm':
  149.           toggle = false;
  150.           $('#containeratm').fadeIn();
  151.           break;
  152.         case '911':
  153.           var data = JSON.parse(msg[2]);
  154.           calls.push(data);
  155.           renderCall(calls.length);
  156.           var policeBeep = document.getElementById('policeBeep');
  157.           policeBeep.play();
  158.           break;
  159.         case 'clear_wanted':
  160.           $('#content').empty();
  161.           $('#content').append('<span id="nobody">It looks like nobody is wanted.</span>');
  162.           $('#wanted').fadeIn();
  163.         case 'wanted':
  164.           var user = JSON.parse(msg[2]);
  165.           var charges = '';
  166.           for (charge of user.charges) {
  167.             charges += '<div style="width: 60%; float: left">Crime: ' + charge.crime + '</div>' + '<div style="width: 20%; float: left">' + charge.count + '</div>';
  168.           }
  169.           var criminal = '' + '<div style="width:100%; clear: left;">' + '<div style="width:20%; float:left">' + '<img src="https://www.habbo.com/habbo-imaging/avatarimage?figure=' + user.look + '&action=wav&direction=2&head_direction=3&gesture=srp&size=m&headonly=1">' + '</div>' + '<div style="width: 80%; float:left; padding-top:10px">' + '<div style="width: 60%; float: left">' + '<b>User: ' + user.username + '</b><br />' + '</div>' + charges + '</div>' + '</div>' + '<br />';
  170.           $('#content').append(criminal);
  171.           $('#nobody').remove();
  172.           break;
  173.         case 'whisper':
  174.           $('#chatinput').val(':whisper ' + targetObject.username + ' ');
  175.           $('#chatinput').focus();
  176.           whispering = true;
  177.           break;
  178.       }
  179.     }
  180.     ws.onclose = function() {
  181.       console.log('RIP WebSocket.');
  182.       clearInterval(ping);
  183.       ws.close();
  184.       if ($('#chatbox').is(':visible')) {
  185.         inroom = false;
  186.         $('#chatbox').fadeOut();
  187.         $('#stats').fadeOut();
  188.         $('#statstarget').fadeOut();
  189.         $('#loadingtext').fadeIn();
  190.       }
  191.       reconnect = setInterval(retry, 5000);
  192.     }
  193.     clearInterval(reconnect);
  194.     ping = setInterval(function() {
  195.       console.log('PING.');
  196.       ws.send('ping');
  197.       ping_counter++;
  198.     }, 30000);
  199.   }
  200. }
  201. retry = function() {
  202.   ws.close();
  203.   ws = undefined;
  204.   connect();
  205. }
  206. $(document).mouseup(function(ev) {
  207.   if (toggle) {
  208.     $('#chat').find('input').focus();
  209.   }
  210. });
  211. $(window).keydown(function(ev) {
  212.   var $chatbox = $('#chatbox').find('input');
  213.   if (ev.keyCode == 8) {
  214.     if (whispering) {
  215.       if ($chatbox.val().length <= (10 + targetObject.username.length)) {
  216.         $chatbox.val('');
  217.         whispering = false;
  218.       }
  219.     }
  220.   }
  221. });
  222. $(window).keypress(function(ev) {
  223.   var $chatbox = $('#chatbox').find('input');
  224.   if (whispering && !$chatbox.val().startsWith(':whisper')) {
  225.     whispering = false;
  226.   }
  227.   if (ev.keyCode == 13) {
  228.     if ($chatbox.is(':focus')) {
  229.       var message = $chatbox.val();
  230.       if (message.length) {
  231.         if (ws.OPEN) {
  232.           ws.send('say ' + JSON.stringify({
  233.             message: message,
  234.             shout: ev.shiftKey ? 'true' : 'false'
  235.           }));
  236.         }
  237.         $chatbox.focus();
  238.       } else {
  239.         if (!toggle) {
  240.           $chatbox.blur();
  241.         }
  242.       }
  243.       if (whispering) {
  244.         $chatbox.val(':whisper ' + targetObject.username + ' ', '');
  245.       } else {
  246.         $chatbox.val('');
  247.       }
  248.     } else {
  249.       $chatbox.focus();
  250.     }
  251.   }
  252.   if (!$chatbox.is(':focus') && !$('#macro').is(':visible') && !$('#containeratm').is(':visible')) {
  253.     if (typeof(macros) != 'undefined' && macros.length > 0) {
  254.       macros.forEach(function(macro) {
  255.         if (macro.keypress == String.fromCharCode(ev.keyCode)) {
  256.           if (ws.OPEN) {
  257.             ws.send('say ' + JSON.stringify({
  258.               message: macro.macro,
  259.               shout: ev.shiftKey
  260.             }));
  261.           }
  262.         }
  263.       });
  264.     }
  265.   }
  266. });
  267. connect();
  268. $(function() {
  269.   $('body').on('click', '#submitDeposit', function() {
  270.     var amount = $('#deposit').val();
  271.     ws.send('deposit ' + JSON.stringify({
  272.       amount: amount
  273.     }));
  274.   });
  275.   $('body').on('click', '#submitWithdraw', function() {
  276.     var amount = $('#withdraw').val();
  277.     ws.send('withdraw ' + JSON.stringify({
  278.       amount: amount
  279.     }));
  280.   });
  281.   $('#addmacrobtn').click(function() {
  282.     $(this).attr('disabled', 'disabled');
  283.     $('#macrolist').append('' + '<li id="addmacro" class="list-group-item">' + '<h4 class="list-group-item-heading">Add Macro</h4>' + '<p class="list-group-item-text">' + '<div class="form-group">' + '<label for="macro" class="control-label">Command</label>' + '<input type="text" class="macro form-control input-sm">' + '</div>' + '<div class="form-group">' + '<label for="key" class="control-label">Key</label>' + '<input type="text" class="key form-control input-sm" id="key">' + '</div>' + '<div style="margin-bottom: 25px;" class="form-group">' + '<p class="macroerror"></p>' + '<button id="add" class="btn btn-success btn-sm">Add</button>' + '</div>' + '</p>' + '</li>');
  284.     $('#macrolist').scrollTop($('#macrolist').scrollTop() + $('#addmacro').position().top);
  285.   });
  286.   $('#macrolist').on('click', '#add', function() {
  287.     $('#addmacrobtn').attr('disabled', 'disabled');
  288.     var macro = $('#addmacro').find('.macro').val();
  289.     var key = $('#addmacro').find('.key').val();
  290.     var dupes = $.grep(macros, function(e) {
  291.       return e.keypress == key;
  292.     });
  293.     if (dupes.length > 0) {
  294.       $('#addmacro').find('.macroerror').html('<small>A macro that uses that key already exists.</small>');
  295.       $('#addmacrobtn').removeAttr('disabled');
  296.     } else {
  297.       if (key.length > 1) {
  298.         $('#addmacro').find('.macroerror').html('<small>Please use a single key.</small>');
  299.         $('#addmacrobtn').removeAttr('disabled');
  300.       } else {
  301.         if (ws.OPEN) {
  302.           ws.send('addmacro ' + JSON.stringify({
  303.             macro: macro,
  304.             key: key
  305.           }));
  306.         }
  307.         $('#addmacro').remove();
  308.         $('#addmacrobtn').removeAttr('disabled');
  309.       }
  310.     }
  311.   });
  312.   $('#macrolist').on('click', '.deletemacro', function() {
  313.     $(this).attr('disabled', 'disabled');
  314.     var id = $(this).closest('.amacro').attr('id');
  315.     if (ws.OPEN) {
  316.       ws.send('deletemacro ' + JSON.stringify({
  317.         id: id
  318.       }));
  319.     }
  320.   });
  321.   $('#macrolist').on('click', '.editmacro', function() {
  322.     var id = $(this).closest('.amacro').attr('id');
  323.     var macro = $.grep(macros, function(e) {
  324.       return e.id == id;
  325.     })[0];
  326.     var id = $(this).closest('.amacro').replaceWith('' + '<li id="' + id + '" class="list-group-item macroedit">' + '<h4 class="list-group-item-heading">Edit Macro</h4>' + '<p class="list-group-item-text">' + '<div class="form-group">' + '<label for="macro" class="control-label">Command</label>' + '<input type="text" class="macro form-control input-sm" value="' + macro.macro + '">' + '</div>' + '<div class="form-group">' + '<label for="key" class="control-label">Key</label>' + '<input type="text" class="key form-control input-sm" id="key" value="' + macro.keypress + '">' + '</div>' + '<div style="margin-bottom: 25px;" class="form-group">' + '<p class="macroerror"></p>' + '<button class="btn btn-success btn-sm savemacroedit">Save</button>' + '</div>' + '</p>' + '</li>');
  327.   });
  328.   $('#macrolist').on('click', '.savemacroedit', function() {
  329.     $(this).attr('disabled', 'disabled');
  330.     $macroedit = $(this).closest('.macroedit');
  331.     var id = $macroedit.attr('id');
  332.     var macro = $macroedit.find('.macro').val();
  333.     var key = $macroedit.find('.key').val();
  334.     var dupes = $.grep(macros, function(e) {
  335.       return e.keypress == key;
  336.     });
  337.     if (dupes.length > 0 && dupes[0].id != id) {
  338.       $macroedit.find('.macroerror').html('<small>A macro that uses that key already exists.</small>');
  339.       $(this).attr('disabled', false);
  340.     } else {
  341.       if (key.length > 1) {
  342.         $macroedit.find('.macroerror').html('<small>Please use a single key.</small>');
  343.         $(this).attr('disabled', false);
  344.       } else {
  345.         if (ws.OPEN) {
  346.           ws.send('editmacro ' + JSON.stringify({
  347.             id: id,
  348.             macro: macro,
  349.             key: key
  350.           }));
  351.         }
  352.       }
  353.     }
  354.   });
  355.   $('#busstops').on('click', '.busdestination', function() {
  356.     var room_id = $(this).attr('id');
  357.     if (ws.OPEN) {
  358.       ws.send('bus ' + JSON.stringify({
  359.         room_id: room_id
  360.       }));
  361.       $('#bus').fadeOut();
  362.     }
  363.   });
  364.   $('#statstarget').click(function() {
  365.     target = undefined;
  366.     $(this).fadeOut();
  367.     if (ws.OPEN) {
  368.       ws.send('cleartarget');
  369.     }
  370.   });
  371.   $('#toggle').click(function() {
  372.     toggleChat();
  373.   });
  374.   $('#head').click(function() {
  375.     if (toggle) {
  376.       toggleChat();
  377.     }
  378.     if ($('#macro').is(':visible')) {
  379.       $('#macro').fadeOut();
  380.     } else {
  381.       $('#macro').fadeIn();
  382.     }
  383.   });
  384.   $('#togglemacro').click(function() {
  385.     if (toggle) {
  386.       toggleChat();
  387.     }
  388.     if ($('#macro').is(':visible')) {
  389.       $('#macro').fadeOut();
  390.     } else {
  391.       $('#macro').fadeIn();
  392.     }
  393.   });
  394. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement