Scenexe Socket Fiddler

Scenexe socket fiddler. Modify incoming and outgoing packets by writing functions for incoming and outgoing.

目前为 2023-01-07 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/457775/1135844/Scenexe%20Socket%20Fiddler.js

  1. // ==UserScript==
  2. // @name Scenexe Socket Fiddler
  3. // @namespace ScenexeSocketFiddler
  4. // @version 0.4
  5. // @description Scenexe socket fiddler. Modify incoming and outgoing packets by writing functions for incoming and outgoing.
  6. // @author discordtehe
  7. // @match https://*.scenexe.io
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. window.MSG_TYPES = {
  12. INCOMING: {
  13. GAME_UPDATE: 0,
  14. ADD_UPGRADE_POINT: 1,
  15. SET_STAT_UPGRADES: 2,
  16. ON_KILL: 3,
  17. RECEIVE_ANNOUNCEMENT: 4,
  18. RECEIVE_TIMER: 5,
  19. RECEIVE_NOTIFICATION: 6,
  20. RECEIVE_BODY_UPGRADES: 7,
  21. RECEIVE_WEAPON_UPGRADES: 8,
  22. PING: 9,
  23. RECEIVE_DIMENSION_ATTRIBUTES: 16,
  24. RECEIVE_CLASS_TREE: 17,
  25. COPY_TEXT: 32,
  26. ON_DEATH: 33,
  27. RENDER_ENTITY: 34,
  28. RECEIVE_TANK: 35,
  29. GATES_UPDATE: 36,
  30. EDITMODE: 37,
  31. SEND_TO_SERVER: 39,
  32. POPUP: 40,
  33. INIT_LEADERBOARD: 41,
  34. KICK_REASON: 42,
  35. ADD_STARS: 43,
  36. COMPLETE_ACHIEVEMENT: 44,
  37. CHANGE_ACHIEVEMENT_COMPLETION: 45
  38. },
  39. OUTGOING: {
  40. ROTATION_INPUT: 0,
  41. MOVEMENT_INPUT: 1,
  42. SHOOTING_INPUT: 2,
  43. PASSIVE_MODE: 3,
  44. SEND_CHAT_MESSAGE: 4,
  45. UPGRADE_STAT: 5,
  46. UPGRADE_BODY: 6,
  47. UPGRADE_WEAPON: 7,
  48. CHANGE_CONTROL_STATE: 8,
  49. PING: 9,
  50. CHANGE_CONTROL_POSITION: 10,
  51. SET_TYPING: 11,
  52. LOAD_WEAPON_UPGRADE: 16,
  53. LOAD_BODY_UPGRADE: 17,
  54. CHANGE_WEAPON: 18,
  55. CHANGE_BODY: 19,
  56. JOIN_GAME: 20,
  57. SESSION_ID: 21
  58. }
  59. }
  60.  
  61. window.incoming = (data)=>{return data};
  62. window.outgoing = (data)=>{return data};
  63.  
  64. WebSocket.prototype.addEventListener = new Proxy(WebSocket.prototype.addEventListener, {
  65. apply: function (target, scope, args) {
  66. if (args[0] === 'message') {
  67. args[1] = new Proxy(args[1], {
  68. apply: function(ftarget, fscope, fargs) {
  69. var decoded = decode(new Uint8Array(fargs[0].data));
  70. decoded = incoming(decoded);
  71. if (decoded != undefined)
  72. fargs[0] = new MessageEvent('message', {data: encode(decoded)})
  73. if (decoded != 'discard') {
  74. let fdata = ftarget.apply(fscope, fargs);
  75. return fdata;
  76. }
  77. return;
  78. }
  79. })
  80. }
  81. let data = target.apply(scope, args);
  82. return data;
  83. }
  84. })
  85.  
  86. WebSocket.prototype.send = new Proxy(WebSocket.prototype.send, {
  87. apply: function (target, scope, args) {
  88. var decoded = decodeInverse(new Uint8Array(args[0])); //decodeInverse because this data has been already encoded by scenexe's main.js
  89. decoded = outgoing(decoded);
  90. if (decoded != undefined)
  91. args[0] = encodeInverse(decoded);
  92. if (decoded != 'discard') {
  93. let data = target.apply(scope, args);
  94. return data;
  95. }
  96. return;
  97. }
  98. })