moomoo.io typing text animation

just join game and press enter

  1. // ==UserScript==
  2. // @name moomoo.io typing text animation
  3. // @namespace http://bzzzzdzzzz.blogspot.com/
  4. // @description just join game and press enter
  5. // @author BZZZZ
  6. // @include /^https?\:\/\/(sandbox\.)?moomoo\.io\/([?#]|$)/
  7. // @version 0.3
  8. // @grant none
  9. // @run-at document-end
  10. // @inject-into content
  11. // ==/UserScript==
  12.  
  13. {
  14. const a=document.createElement('div');
  15. a.setAttribute('onclick',`"use strict";
  16. function string_to_chat_packet(s){
  17. var l=s.length;
  18. var buf=new ArrayBuffer(6+l);
  19. var view=new Uint8Array(buf);
  20. view[0]=146;
  21. view[1]=162;
  22. view[2]=99;
  23. view[3]=104;
  24. view[4]=145;
  25. view[5]=160+l;
  26. while(l--)view[6+l]=s.charCodeAt(l);
  27. return buf;
  28. }
  29. var anim=[
  30. '/',
  31. '-',
  32. '\\\\',
  33. '|'
  34. ].map(s=>string_to_chat_packet('typing '+s));
  35. var discard_message=string_to_chat_packet('[message discarded]');
  36. var frame=0;
  37. var frame_count=anim.length;
  38. var chat_style=document.getElementById('chatHolder').style;
  39. var first_send=true;
  40. var message_to_send=false;
  41. var was_chat_active=false;
  42. var old_send=WebSocket.prototype.send;
  43. WebSocket.prototype.send=function(data){
  44. if(first_send){
  45. first_send=false;
  46. window.setInterval(()=>{
  47. if(message_to_send){
  48. old_send.call(this,message_to_send);
  49. message_to_send=false;
  50. was_chat_active=false;
  51. return;
  52. }
  53. if(chat_style.display=='none'){
  54. if(was_chat_active)old_send.call(this,discard_message);
  55. was_chat_active=false;
  56. return;
  57. }
  58. was_chat_active=true;
  59. if(frame==frame_count)frame=0;
  60. old_send.call(this,anim[frame++]);
  61. },560);
  62. }
  63. if(
  64. data instanceof Uint8Array
  65. &&data.length>6
  66. &&data[0]==146
  67. &&data[1]==162
  68. &&data[2]==99
  69. &&data[3]==104
  70. &&data[4]==145
  71. &&data[5]>160
  72. ){
  73. var off=data.byteOffset;
  74. message_to_send=data.buffer.slice(off,off+data.length);
  75. return;
  76. }
  77. return old_send.call(this,data);
  78. };`);
  79. a.click();
  80. }