Compare commits
No commits in common. "Script1.1" and "master" have entirely different histories.
|
|
@ -116,45 +116,8 @@ Gm_InputFunc_Handle["test"] <- function(SUser, CmdString) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Timer.SetTimeOut(function() {
|
Timer.SetTimeOut(function() {
|
||||||
|
|
||||||
// // Sq_Rsa_GenerateKey();
|
|
||||||
// local str = format("%08x010101010101010101010101010101010101010101010101010101010101010155914510010403030101", 1);
|
|
||||||
// local Byte = Sq_Rsa_Private_Encrypt(str);
|
|
||||||
// local EnStr = _base64_encode(Byte);
|
|
||||||
// print(EnStr);
|
|
||||||
|
|
||||||
// local passwd = "1";
|
|
||||||
|
|
||||||
// Sq_WriteByteArr(S_Ptr("0x081E907E"), [0x90, 0x90, 0x90, 0x90, 0x90]);
|
|
||||||
// Sq_WriteByteArr(S_Ptr("0x0081E9085"), [0x0F, 0x94, 0xC0]);
|
|
||||||
|
|
||||||
// Sq_WriteByteArr(S_Ptr("0x81731F2"), Haker.AsmGenerateMcd(
|
|
||||||
// "mov eax,0",
|
|
||||||
// "ret" ));
|
|
||||||
|
|
||||||
}, 1);
|
}, 1);
|
||||||
|
|
||||||
|
|
||||||
// // //玩家新增道具时
|
|
||||||
// Cb_wdzsdfge_Enter_Func <- {};
|
|
||||||
// Cb_wdzsdfge_Leave_Func <- {};
|
|
||||||
// _Hook_Register_Currency_Func_("0x81731F2", ["pointer", "pointer", "pointer", "int"], Cb_wdzsdfge_Enter_Func, Cb_wdzsdfge_Leave_Func);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Cb_wdzsdfge_Leave_Func["11"] <- function(args) {
|
|
||||||
// print("登录请求: ");
|
|
||||||
// print("args[0]: " + args[0]);
|
|
||||||
// NativePointer(args[0]).Output(512);
|
|
||||||
// print("args[1]: " + args[1]);
|
|
||||||
// //NativePointer(args[1]).Output(512);
|
|
||||||
// print("args[2]: " + args[2]);
|
|
||||||
// NativePointer(args[2]).Output(512);
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,168 +0,0 @@
|
||||||
class _DPS_Login_Gateway_ {
|
|
||||||
|
|
||||||
//数据库连接
|
|
||||||
MysqlObject = null;
|
|
||||||
|
|
||||||
PackHandleMap = null;
|
|
||||||
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
PackHandleMap = {};
|
|
||||||
|
|
||||||
MysqlObject = Mysql(Str_Ptr("127.0.0.1"), 3306, Str_Ptr("taiwan_cain"), Str_Ptr("game"), Str_Ptr("uu5!^%jg"));
|
|
||||||
MysqlObject.Exec_Sql(format("SET NAMES %s", "latin1"));
|
|
||||||
|
|
||||||
//创建一个Http Server
|
|
||||||
try {
|
|
||||||
local HS = HttpServer("0.0.0.0", "41817");
|
|
||||||
HS.Listen(function(SocketObject, Header, Msg) {
|
|
||||||
getroottable()._DPS_Login_Gateway_Object_._HttpServer_Event_DPS_(SocketObject, Header, Msg);
|
|
||||||
});
|
|
||||||
} catch (exception) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
PackHandleMap["/GetConfig"] <- function(SocketObject, Header, Jso) {
|
|
||||||
local Config = sq_ReadJsonFile("/dp_s/OfficialConfig/登录器配置.json");
|
|
||||||
//读取DPS登录器的配置并发送
|
|
||||||
SocketObject.Write(Config);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PackHandleMap["/Login"] <- function(SocketObject, Header, Jso) {
|
|
||||||
if (!Jso.rawin("account")) return;
|
|
||||||
if (!Jso.rawin("passwd")) return;
|
|
||||||
local account = Jso.account;
|
|
||||||
local passwd = Jso.passwd;
|
|
||||||
local passwd_hash = MD5_Hash(passwd);
|
|
||||||
|
|
||||||
|
|
||||||
//正则表达式 只允许字母和数字
|
|
||||||
local regex = regexp("^[A-Za-z0-9]{1,19}$");
|
|
||||||
if (!regex.match(account)) {
|
|
||||||
SocketObject.Write({
|
|
||||||
error = "账号只能包含字母和数字且长度小于20"
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
local sql = format("select UID from d_taiwan.accounts where accountname='%s' and password='%s';", account, passwd_hash);
|
|
||||||
local Ret = MysqlObject.Select(sql, ["int"]);
|
|
||||||
if (Ret && Ret.len() > 0) {
|
|
||||||
local Uid = Ret[0][0];
|
|
||||||
local str = format("%08x010101010101010101010101010101010101010101010101010101010101010155914510010403030101", Uid);
|
|
||||||
local Byte = Sq_Rsa_Private_Encrypt(str);
|
|
||||||
local EnStr = MD5.base64_encode(Byte);
|
|
||||||
//发送登录Token
|
|
||||||
SocketObject.Write({
|
|
||||||
token = EnStr
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
SocketObject.Write({
|
|
||||||
error = "账号或密码错误!"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}.bindenv(this);
|
|
||||||
|
|
||||||
|
|
||||||
PackHandleMap["/Register"] <- function(SocketObject, Header, Jso) {
|
|
||||||
|
|
||||||
if (!Jso.rawin("account")) return;
|
|
||||||
if (!Jso.rawin("passwd")) return;
|
|
||||||
|
|
||||||
local account = Jso.account;
|
|
||||||
local passwd = Jso.passwd;
|
|
||||||
|
|
||||||
|
|
||||||
//正则表达式 只允许字母和数字
|
|
||||||
local regex = regexp("^[A-Za-z0-9]{1,19}$");
|
|
||||||
if (account.len() == 0 || !regex.match(account)) {
|
|
||||||
SocketObject.Write({
|
|
||||||
error = "账号只能包含字母和数字且长度大于0小于20"
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (passwd.len() == 0 || !regex.match(passwd)) {
|
|
||||||
SocketObject.Write({
|
|
||||||
error = "密码只能包含字母和数字且长度大于0小于20"
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (GetAccountByName(account) != null) {
|
|
||||||
SocketObject.Write({
|
|
||||||
error = "账号已存在"
|
|
||||||
})
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
local passwd_hash = MD5_Hash(passwd);
|
|
||||||
|
|
||||||
|
|
||||||
local sql = format("INSERT INTO d_taiwan.accounts(accountname, password)VALUES( '%s' , '%s');", account, passwd_hash);
|
|
||||||
MysqlObject.Exec_Sql(sql);
|
|
||||||
local Ret = MysqlObject.Select("SELECT LAST_INSERT_ID()", ["int"]);
|
|
||||||
if (Ret && Ret.len() > 0) {
|
|
||||||
local Uid = Ret[0][0].tostring();
|
|
||||||
MysqlObject.Exec_Sql(format("INSERT INTO d_taiwan.member_info(m_id, user_id)VALUES('%s','%s');", Uid, Uid));
|
|
||||||
MysqlObject.Exec_Sql(format("INSERT INTO d_taiwan.member_white_account(m_id)VALUES('%s')", Uid));
|
|
||||||
MysqlObject.Exec_Sql(format("INSERT INTO taiwan_login.member_login(m_id)VALUES('%s')", Uid));
|
|
||||||
MysqlObject.Exec_Sql(format("INSERT INTO taiwan_billing.cash_cera(account, cera,mod_tran,mod_date, reg_date)VALUES('%s',0,0,NOW(), NOW())", Uid));
|
|
||||||
MysqlObject.Exec_Sql(format("INSERT INTO taiwan_billing.cash_cera_point(account, cera_point,mod_date, reg_date)VALUES('%s',0,NOW(), NOW())", Uid));
|
|
||||||
SocketObject.Write({
|
|
||||||
success = "账号注册成功,现在您可以登录了!"
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
}.bindenv(this);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function GetAccountByName(account) {
|
|
||||||
local sql = format("select UID , accountname, password from d_taiwan.accounts where accountname='%s'", account);
|
|
||||||
local Ret = MysqlObject.Select(sql, ["int", "string", "string"]);
|
|
||||||
print(Ret);
|
|
||||||
if (!Ret || Ret.len() == 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
uid = Ret[0][0],
|
|
||||||
account = Ret[0][1],
|
|
||||||
passwd = Ret[0][2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function _HttpServer_Event_DPS_(SocketObject, Header, Msg) {
|
|
||||||
if (PackHandleMap.rawin(Header.path)) {
|
|
||||||
local Jso = null;
|
|
||||||
try {
|
|
||||||
Jso = Json.Decode(Msg);
|
|
||||||
} catch (exception) {
|
|
||||||
|
|
||||||
}
|
|
||||||
if (!Jso) return;
|
|
||||||
PackHandleMap[Header.path](SocketObject, Header, Jso);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
SocketObject.Write({
|
|
||||||
error = "error url"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function MD5_Hash(str) {
|
|
||||||
local Ctx = Memory.alloc(0x100);
|
|
||||||
MD5.MD5_Init(Ctx.C_Object);
|
|
||||||
MD5.MD5_Update(Ctx.C_Object, Memory.allocUtf8String(str).C_Object, str.len());
|
|
||||||
local Result = Memory.alloc(16);
|
|
||||||
MD5.MD5_Final(Result.C_Object, Ctx.C_Object);
|
|
||||||
return MD5.hex_encode(Result.readUtf8String(16));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Timer.SetTimeOut(function() {
|
|
||||||
getroottable()._DPS_Login_Gateway_Object_ <- _DPS_Login_Gateway_();
|
|
||||||
}, 1);
|
|
||||||
|
|
@ -1,95 +0,0 @@
|
||||||
/*
|
|
||||||
文件名:装备拓展.nut
|
|
||||||
路径:MyProject/装备拓展.nut
|
|
||||||
创建日期:2026-01-15 10:02
|
|
||||||
文件用途:
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Cb_ItemGloballyUniqueIdentifier_t_SetServerId_Enter_Func <- {};
|
|
||||||
Cb_ItemGloballyUniqueIdentifier_t_SetServerId_Leave_Func <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x08894782", ["pointer", "int", "pointer"], Cb_ItemGloballyUniqueIdentifier_t_SetServerId_Enter_Func, Cb_ItemGloballyUniqueIdentifier_t_SetServerId_Leave_Func);
|
|
||||||
|
|
||||||
// Cb_CInventory_MakeItemPacket_Enter_Func <- {};
|
|
||||||
// Cb_CInventory_MakeItemPacket_Leave_Func <- {};
|
|
||||||
// _Hook_Register_Currency_Func_("0x084FC6BC", ["pointer", "int", "int", "pointer", "int"], Cb_CInventory_MakeItemPacket_Enter_Func, Cb_CInventory_MakeItemPacket_Leave_Func);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class EquipmentExpandC {
|
|
||||||
|
|
||||||
MysqlObject = null;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
MysqlObject = Mysql(Str_Ptr("127.0.0.1"), 3306, Str_Ptr("taiwan_cain"), Str_Ptr("game"), Str_Ptr("uu5!^%jg"));
|
|
||||||
MysqlObject.Exec_Sql(format("SET NAMES %s", "latin1"));
|
|
||||||
|
|
||||||
local check_table_sql = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'equip_only_id';"
|
|
||||||
local Ret = MysqlObject.Select(check_table_sql, ["int"]);
|
|
||||||
if (Ret.len() == 0 || Ret[0][0] == null) {
|
|
||||||
local sql = "CREATE TABLE equip_only_id (id INT(11) NOT NULL AUTO_INCREMENT COMMENT '32位自增唯一ID,初始值10000', PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '纯自增ID表' AUTO_INCREMENT=10000;";
|
|
||||||
MysqlObject.Exec_Sql(sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
//HOOKServerId生成uuid
|
|
||||||
Cb_ItemGloballyUniqueIdentifier_t_SetServerId_Enter_Func["_装备拓展_"] <- function(args) {
|
|
||||||
args[1] = GenerateUUID();
|
|
||||||
print("赋予唯一id: " + args[1]);
|
|
||||||
return args;
|
|
||||||
}.bindenv(this);
|
|
||||||
|
|
||||||
// //补充数据包
|
|
||||||
// Cb_CInventory_MakeItemPacket_Leave_Func["_装备拓展_"] <- function(args) {
|
|
||||||
|
|
||||||
// // local ItemObj = Item(Sq_CallFunc(S_Ptr("0x084FC1DE"), "int", ["pointer", "int", "int", "pointer"], args[0], args[1], args[2]));
|
|
||||||
// // print("装备编号: " + ItemObj.GetIndex());
|
|
||||||
// // local Pack = Packet(args[3]);
|
|
||||||
// // local Buffer = Memory.alloc(30);
|
|
||||||
// // //无需重置为0 需要写数据的地方自己会覆写
|
|
||||||
|
|
||||||
// // Buffer.add(18).writeInt(NativePointer())
|
|
||||||
|
|
||||||
// // Pack.Put_BinaryEx(DB_JewelSocketData.C_Object, 30);
|
|
||||||
// }.bindenv(this);
|
|
||||||
|
|
||||||
// //额外数据包,发送装备数据给本地处理
|
|
||||||
// Cb_InterfacePacketBuf_put_packet_Leave_Func["_装备拓展_"] <- function(args) {
|
|
||||||
// local Inven_Item = NativePointer(args[1]);
|
|
||||||
// if (Inven_Item.add(1).readU8() == 1) {
|
|
||||||
// local Uuid = Inven_Item.add(21).readInt();
|
|
||||||
// print("uuid: " + Uuid);
|
|
||||||
// local Pack = Packet(args[0]);
|
|
||||||
// print("包位置: " + Pack.GetPos());
|
|
||||||
// // Pack.Put_BinaryEx(JewelSocketData.C_Object, 30);
|
|
||||||
// }
|
|
||||||
// }.bindenv(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
function GenerateUUID() {
|
|
||||||
MysqlObject.Exec_Sql("INSERT INTO equip_only_id VALUES ();");
|
|
||||||
local Ret = MysqlObject.Select("SELECT LAST_INSERT_ID() AS new_auto_id;", ["int"]);
|
|
||||||
return Ret[0][0];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cb_CInventory_insertItemIntoInventory_Leave_Func["_装备拓展_"] <- function(args) {
|
|
||||||
// local SUser = User(NativePointer(args[0]).readPointer());
|
|
||||||
// local ItemObject = Item(NativePointer(Haker.CpuContext.ebp).add(12).C_Object);
|
|
||||||
// local ServerId = NativePointer(ItemObject.C_Object).add(21).readInt();
|
|
||||||
// //数据库主键从10000开始自增
|
|
||||||
// if (ServerId< 10000) {
|
|
||||||
// local NewUuid = GenerateUUID();
|
|
||||||
// NativePointer(ItemObject.C_Object).add(21).writeInt(NewUuid);
|
|
||||||
// }
|
|
||||||
// }.bindenv(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Timer.SetTimeOut(function() {
|
|
||||||
|
|
||||||
getroottable()._EquipmentExpand_ <- EquipmentExpandC();
|
|
||||||
|
|
||||||
print("特殊插件·装备拓展 - 已加载");
|
|
||||||
}, 1);
|
|
||||||
|
|
@ -262,17 +262,12 @@ class HttpServer {
|
||||||
|
|
||||||
//处理函数
|
//处理函数
|
||||||
Handler = null;
|
Handler = null;
|
||||||
//服务ID
|
|
||||||
ServerId = null;
|
|
||||||
|
|
||||||
|
|
||||||
constructor(host, service = "80") {
|
constructor(host, service = "80") {
|
||||||
Host = host;
|
Host = host;
|
||||||
Service = service;
|
Service = service;
|
||||||
|
|
||||||
if (getroottable().rawin("HttpServer_" + Host + "_" + Service)){
|
|
||||||
throw "端口被占用";
|
|
||||||
}
|
|
||||||
getroottable()["HttpServer_" + Host + "_" + Service] <- this;
|
getroottable()["HttpServer_" + Host + "_" + Service] <- this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -280,20 +275,15 @@ class HttpServer {
|
||||||
//记录处理函数
|
//记录处理函数
|
||||||
Handler = Func;
|
Handler = Func;
|
||||||
|
|
||||||
ServerId = Sq_CreateHttpServer(Host, Service, this);
|
local success = Sq_CreateHttpServer(Host, Service, this);
|
||||||
if (ServerId) {
|
if (success) {
|
||||||
::print("Server started successfully.");
|
::print("Server started successfully.");
|
||||||
} else {
|
} else {
|
||||||
::print("Failed to start server.");
|
::print("Failed to start server.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function Stop()
|
function Event(SocketObject, Msg) {
|
||||||
{
|
Timer.SetTimeOut(Handler, 1, HttpResponse(SocketObject), Msg);
|
||||||
Sq_StopHttpServer(ServerId);
|
|
||||||
}
|
|
||||||
|
|
||||||
function Event(SocketObject, Header, Msg) {
|
|
||||||
Timer.SetTimeOut(Handler, 1, HttpResponse(SocketObject), Header, Msg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -146,11 +146,7 @@ class Item extends Base_C_Object {
|
||||||
this = null;
|
this = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取UUID
|
|
||||||
function GetUuid() {
|
|
||||||
Attribute.seek(21);
|
|
||||||
return Attribute.readn('i');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//是否可打包
|
//是否可打包
|
||||||
|
|
|
||||||
|
|
@ -21,78 +21,31 @@ class MD5 {
|
||||||
Sq_CallFunc(MD5_Final_ptr, "void", ["pointer", "pointer"], Ctx, Result);
|
Sq_CallFunc(MD5_Final_ptr, "void", ["pointer", "pointer"], Ctx, Result);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 16进制编码函数
|
|
||||||
// 参数: input - 可以是字符串或字节数组或Memory对象
|
|
||||||
// 返回: 32位16进制小写字符串(默认格式)
|
|
||||||
function hex_encode(input) {
|
|
||||||
local byteArray = [];
|
|
||||||
|
|
||||||
// 如果输入是字符串,转换为字节数组
|
|
||||||
if (typeof input == "string") {
|
|
||||||
for (local i = 0; i < input.len(); i++) {
|
|
||||||
byteArray.append(input[i].tointeger() & 0xFF);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 如果输入是数组,直接使用
|
|
||||||
else {
|
|
||||||
byteArray = input;
|
|
||||||
}
|
|
||||||
|
|
||||||
local encoded = "";
|
|
||||||
|
|
||||||
for (local i = 0; i < byteArray.len(); i++) {
|
|
||||||
local byte = byteArray[i] & 0xFF;
|
|
||||||
encoded += format("%02x", byte);
|
|
||||||
}
|
|
||||||
|
|
||||||
return encoded;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Base64 编码函数
|
|
||||||
// 参数: input - 可以是字符串或字节数组
|
|
||||||
// 返回: base64 编码后的字符串
|
|
||||||
function base64_encode(input) {
|
function base64_encode(input) {
|
||||||
local base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
local base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
|
local inputLength = input.len();
|
||||||
// 如果输入是字符串,转换为字节数组
|
|
||||||
local byteArray = [];
|
|
||||||
if (typeof input == "string") {
|
|
||||||
for (local i = 0; i< input.len(); i++) {
|
|
||||||
byteArray.append(input[i].tointeger() & 0xFF);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 假设是数组,直接使用
|
|
||||||
byteArray = input;
|
|
||||||
}
|
|
||||||
|
|
||||||
local inputLength = byteArray.len();
|
|
||||||
local i = 0;
|
local i = 0;
|
||||||
local j = 0;
|
local j = 0;
|
||||||
local charArray3 = array(3);
|
local charArray3 = array(3);
|
||||||
local charArray4 = array(4);
|
local charArray4 = array(4);
|
||||||
local encoded = "";
|
local encoded = "";
|
||||||
|
|
||||||
// 处理每3个字节为一组
|
while (inputLength--) {
|
||||||
local pos = 0;
|
charArray3[i++] = input[inputLength];
|
||||||
while (pos< inputLength) {
|
|
||||||
charArray3[i++] = byteArray[pos++];
|
|
||||||
|
|
||||||
if (i == 3) {
|
if (i == 3) {
|
||||||
// 将3个字节转换为4个base64字符
|
|
||||||
charArray4[0] = (charArray3[0] & 0xfc) >> 2;
|
charArray4[0] = (charArray3[0] & 0xfc) >> 2;
|
||||||
charArray4[1] = ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4);
|
charArray4[1] = ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4);
|
||||||
charArray4[2] = ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6);
|
charArray4[2] = ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6);
|
||||||
charArray4[3] = charArray3[2] & 0x3f;
|
charArray4[3] = charArray3[2] & 0x3f;
|
||||||
|
|
||||||
for (i = 0; i< 4; i++) {
|
for (i = 0; i< 4; i++) {
|
||||||
encoded += base64_chars.slice(charArray4[i], charArray4[i] + 1);
|
encoded += base64_chars[charArray4[i]];
|
||||||
}
|
}
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理剩余的字节(不足3个字节的情况)
|
if (i) {
|
||||||
if (i > 0) {
|
|
||||||
for (j = i; j< 3; j++) {
|
for (j = i; j< 3; j++) {
|
||||||
charArray3[j] = 0;
|
charArray3[j] = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -103,10 +56,9 @@ class MD5 {
|
||||||
charArray4[3] = charArray3[2] & 0x3f;
|
charArray4[3] = charArray3[2] & 0x3f;
|
||||||
|
|
||||||
for (j = 0; j< i + 1; j++) {
|
for (j = 0; j< i + 1; j++) {
|
||||||
encoded += base64_chars.slice(charArray4[j], charArray4[j] + 1);
|
encoded += base64_chars[charArray4[j]];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加填充字符 '='
|
|
||||||
while (i++<3) {
|
while (i++<3) {
|
||||||
encoded += "=";
|
encoded += "=";
|
||||||
}
|
}
|
||||||
|
|
@ -115,7 +67,6 @@ class MD5 {
|
||||||
return encoded;
|
return encoded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function GetFile(FileName) {
|
function GetFile(FileName) {
|
||||||
local Io = IO(FileName, "r+");
|
local Io = IO(FileName, "r+");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -101,9 +101,9 @@ class Packet extends Base_C_Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function GetString(a3, a4) {
|
function GetString(a3,a4) {
|
||||||
local data = Memory.alloc(a3);
|
local data = Memory.alloc(a3);
|
||||||
if (Sq_CallFunc(S_Ptr("0x858D2BC"), "int", ["pointer", "pointer", "int", "int", "int"], this.C_Object, data.C_Object, a3, a4)) {
|
if (Sq_CallFunc(S_Ptr("0x858D2BC"), "int", ["pointer", "pointer","int","int","int"], this.C_Object, data.C_Object,a3,a4)) {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -114,16 +114,4 @@ class Packet extends Base_C_Object {
|
||||||
Sq_Delete_Point(this.C_Object);
|
Sq_Delete_Point(this.C_Object);
|
||||||
// Sq_Packet_Delete(this.C_Object);
|
// Sq_Packet_Delete(this.C_Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetPos() {
|
|
||||||
return Sq_CallFunc(S_Ptr("0x8110B4C"), "int", ["pointer"], this.C_Object);
|
|
||||||
}
|
|
||||||
|
|
||||||
function SetPos(pos) {
|
|
||||||
Sq_CallFunc(S_Ptr("0x822B7B0"), "int", ["pointer", "int"], this.C_Object, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetLength() {
|
|
||||||
return Sq_CallFunc(S_Ptr("0x848F438"), "int", ["pointer"], this.C_Object);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -686,7 +686,7 @@ _Hook_Register_Currency_Func_("0x81f92ca", ["pointer", "int", "int", "int", "poi
|
||||||
//移动物品
|
//移动物品
|
||||||
Cb_DisPatcher_MoveItem_Enter_Func <- {};
|
Cb_DisPatcher_MoveItem_Enter_Func <- {};
|
||||||
Cb_DisPatcher_MoveItem_Leave_Func <- {};
|
Cb_DisPatcher_MoveItem_Leave_Func <- {};
|
||||||
_Hook_Register_Currency_Func_("0x81C5B76", ["pointer", "pointer", "pointer", "void"], Cb_DisPatcher_MoveItem_Enter_Func, Cb_DisPatcher_MoveItem_Leave_Func);
|
_Hook_Register_Currency_Func_("0x81C5B76", ["pointer", "pointer", "pointer", "void"],Cb_DisPatcher_MoveItem_Enter_Func, Cb_DisPatcher_MoveItem_Leave_Func);
|
||||||
|
|
||||||
// 注册道具转职Hook
|
// 注册道具转职Hook
|
||||||
Cb_ChangeGrowType_Item_Enter_Func <- {};
|
Cb_ChangeGrowType_Item_Enter_Func <- {};
|
||||||
|
|
@ -699,52 +699,6 @@ Cb_ItemVendingMachine_ProcessIPG_ResultOutput_Leave_Func <- {};
|
||||||
_Hook_Register_Currency_Func_("0x8178676", ["pointer", "pointer", "int", "int", "pointer", "int"], Cb_ItemVendingMachine_ProcessIPG_ResultOutput_Enter_Func, Cb_ItemVendingMachine_ProcessIPG_ResultOutput_Leave_Func);
|
_Hook_Register_Currency_Func_("0x8178676", ["pointer", "pointer", "int", "int", "pointer", "int"], Cb_ItemVendingMachine_ProcessIPG_ResultOutput_Enter_Func, Cb_ItemVendingMachine_ProcessIPG_ResultOutput_Leave_Func);
|
||||||
|
|
||||||
|
|
||||||
//商城购买道具收包
|
|
||||||
Cb_ItemVendingMachine_BuyAuctionItem_Enter_Func <- {};
|
|
||||||
Cb_ItemVendingMachine_BuyAuctionItem_Leave_Func <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x81769f6", ["pointer", "pointer", "int", "pointer"], Cb_ItemVendingMachine_BuyAuctionItem_Enter_Func, Cb_ItemVendingMachine_BuyAuctionItem_Leave_Func);
|
|
||||||
|
|
||||||
|
|
||||||
// 构建地图
|
|
||||||
Cb_CBattle_Field_ConsistMap_Enter_Func <- {};
|
|
||||||
Cb_CBattle_Field_ConsistMap_Leave_Func <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x083031D2", ["pointer", "void"], Cb_CBattle_Field_ConsistMap_Enter_Func, Cb_CBattle_Field_ConsistMap_Leave_Func);
|
|
||||||
|
|
||||||
// 击杀怪物时
|
|
||||||
Cb_CBattle_Field_kill_monster_Enter_Func <- {};
|
|
||||||
Cb_CBattle_Field_kill_monster_Leave_Func <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x0830BC78", ["pointer", "pointer", "pointer", "pointer", "pointer", "int"], Cb_CBattle_Field_kill_monster_Enter_Func, Cb_CBattle_Field_kill_monster_Leave_Func);
|
|
||||||
|
|
||||||
// 副本中角色死亡
|
|
||||||
Cb_CParty_die_user_Enter_Func <- {};
|
|
||||||
Cb_CParty_die_user_Leave_Func <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x085A7828", ["pointer", "pointer", "void"], Cb_CParty_die_user_Enter_Func, Cb_CParty_die_user_Leave_Func);
|
|
||||||
|
|
||||||
//NPC商店购买发包
|
|
||||||
Cb_BuyItem_send_Enter <- {};
|
|
||||||
Cb_BuyItem_send_Leave <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x081BE20A", ["pointer", "pointer", "pointer", "void"], Cb_BuyItem_send_Enter, Cb_BuyItem_send_Leave);
|
|
||||||
|
|
||||||
//获取深渊派对
|
|
||||||
Cb_GetHellPartyDifficulty_Enter_Func <- {};
|
|
||||||
Cb_GetHellPartyDifficulty_Leave_Func <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x082FFA2E", ["pointer", "int", "int"], Cb_GetHellPartyDifficulty_Enter_Func, Cb_GetHellPartyDifficulty_Leave_Func);
|
|
||||||
|
|
||||||
// 初始化并启动活动
|
|
||||||
Cb_CEventManager_TriggerEventStart_Enter <- {};
|
|
||||||
Cb_CEventManager_TriggerEventStart_Leave <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x08115CC6", ["pointer", "int", "int", "int"], Cb_CEventManager_TriggerEventStart_Enter, Cb_CEventManager_TriggerEventStart_Leave);
|
|
||||||
|
|
||||||
// 装备红字打书检查
|
|
||||||
Cb_CItemAmplifier_checkInvestableItem_Enter <- {};
|
|
||||||
Cb_CItemAmplifier_checkInvestableItem_Leave <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x08234980", ["pointer", "pointer", "pointer", "int", "bool"], Cb_CItemAmplifier_checkInvestableItem_Enter, Cb_CItemAmplifier_checkInvestableItem_Leave);
|
|
||||||
|
|
||||||
// 物品删除 CInventory::delete_item
|
|
||||||
Cb_CInventory_delete_item_Enter <- {};
|
|
||||||
Cb_CInventory_delete_item_Leave <- {};
|
|
||||||
_Hook_Register_Currency_Func_("0x0850400C", ["pointer", "int", "int", "int", "int", "int", "int"], Cb_CInventory_delete_item_Enter, Cb_CInventory_delete_item_Leave);
|
|
||||||
|
|
||||||
function _Hook_Register_Currency_DelayHook_() {
|
function _Hook_Register_Currency_DelayHook_() {
|
||||||
//五国时的热点函数
|
//五国时的热点函数
|
||||||
//获取Item Rarity
|
//获取Item Rarity
|
||||||
|
|
|
||||||
BIN
lib/libAurora.so
BIN
lib/libAurora.so
Binary file not shown.
Loading…
Reference in New Issue