Greasy Fork 还支持 简体中文。

ScenexeSocketFiddler

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

目前為 2023-01-07 提交的版本,檢視 最新版本

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.cn-greasyfork.org/scripts/457775/1135834/ScenexeSocketFiddler.js

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