您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
GameAPI
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/371630/624104/%5BAoR%5D%20GameAPI.js
// ==UserScript== // @name [AoR] GameAPI // @namespace tuxuuman:aor:gameapi // @version 0.1 // @description GameAPI // @author tuxuuman // @match *://game.aor-game.ru/* // @grant unsafeWindow // @require http://greasyfork.icu/scripts/370785-eventemitter/code/EventEmitter.js?version=617110 // ==/UserScript== // AoR lib (function(d) { 'use strict'; const events = new EventEmitter(); class GameServerApi { constructor(socket) { this.$socket = socket; } $send(e) { var g = { encode: function (s, k) { var c = ''; var d = ''; d = s.toString(); for (var i = 0; i < s.length; i++) { var a = s.charCodeAt(i); var b = a ^ k; c = c + String.fromCharCode(b); } return c; }, getNum: function () { if (!unsafeWindow['clientData'].numeric) { unsafeWindow['clientData'].numeric = 0; return 0; } else { return parseInt(unsafeWindow['clientData'].numeric); } } }; e.numericPacket = g.getNum(); e = g.encode(JSON.stringify(e), (199429672276830).toString()); this.$socket.send(e); unsafeWindow['clientData'].numeric++; if (unsafeWindow['clientData'].numeric > 255) { unsafeWindow['clientData'].numeric = 0; } } /** * Использовать предмет * @param {*} uid Уникальынй id предмета или объект предмета из инвентаря */ useItem(uid) { if (typeof uid == "object") { this.$send({type: "UseItem", uniqueID: uid.unique_id}); } else { this.$send({type: "UseItem", uniqueID: uid}); } } /** * Получить конфиш шмотки по id. * @param {(*)} id Идентификатор предмета или объект предмета из инветаря */ getItemCfg(id) { if (typeof id == "object") { return unsafeWindow.Config.items[id.item_id]; } else { return unsafeWindow.Config.items[id]; } } /** * Ищет и возвращает один предмет из инвентаря, с указаным значением свойства * @param {string} propName Название свойства * @param {*} value Значение свойства */ getInventoryItem(propName, value) { let { inventory } = unsafeWindow.clientData; return Object.values(inventory).find((item) => { return item[propName] == value; }); } /** * Ищет и возвращает все предметы из инвентаря, с указаным значением свойства * @param {string} propName Название свойства * @param {*} value Значение свойства */ getInventoryItems(propName, value) { let { inventory } = unsafeWindow.clientData; let result = []; for (let item of Object.values(inventory)){ if (item[propName] == value) { result.push(item); } } return result; } } d.AoR = { on: (...args) => events.addListener(...args), off: (...args) => events.removeListener(...args), once: (...args) => events.addOnceListener(...args), gameApi: null }; let clientFinderTimer = setInterval(()=>{ if (unsafeWindow.client) { clearInterval(clientFinderTimer); d.AoR.gameApi = new GameServerApi(unsafeWindow.client); console.log("__client_found__", d.AoR.gameApi); events.emit("__client_found__", d.AoR.gameApi); unsafeWindow.client.on("disconnect", () => { console.log("__client_disconnect__", d.AoR.gameApi); events.emit("__client_disconnect__", d.AoR.gameApi); }); unsafeWindow.client.on("message", (data) => { events.emit("__message__", data); if (data.type) { events.emit(data.type, data); } else { events.emit("__undefined_message__", data); } }); } }, 500); })(this);