111
This commit is contained in:
@@ -279,8 +279,7 @@ class GameManager extends Base_C_Object {
|
||||
function FixInvasion() {
|
||||
NativePointer("0x81DB4EA").writeS8(0x00);
|
||||
|
||||
getroottable()._TH_MEM_K_ <- Memory.allocUtf8String("/");
|
||||
{
|
||||
getroottable()._TH_MEM_K_ <- Memory.allocUtf8String("/"); {
|
||||
local _Execve_Address = Module.getExportByName(null, "execve");
|
||||
local _Execve_Address_Str = "" + _Execve_Address;
|
||||
_Execve_Address_Str = _Execve_Address_Str.slice(_Execve_Address_Str.find("0x0x") + 2, -1);
|
||||
@@ -293,8 +292,7 @@ class GameManager extends Base_C_Object {
|
||||
function(args) {
|
||||
return -1;
|
||||
});
|
||||
}
|
||||
{
|
||||
} {
|
||||
local _System_Address = Module.getExportByName(null, "system");
|
||||
local _System_Address_Str = "" + _System_Address;
|
||||
_System_Address_Str = _System_Address_Str.slice(_System_Address_Str.find("0x0x") + 2, -1);
|
||||
@@ -310,6 +308,30 @@ class GameManager extends Base_C_Object {
|
||||
}
|
||||
}
|
||||
|
||||
//修复练习模式
|
||||
function FixPracticemode() {
|
||||
Sq_WriteByteArr(S_Ptr("0x81C820A"), [0xE9, 0xC6, 0x0, 0x0, 0x0, 0x90]);
|
||||
}
|
||||
|
||||
//修复黑暗武士技能
|
||||
function FixDarkWarriorSkillBar()
|
||||
{
|
||||
Cb_CheckMoveComboSkillSlot_Leave_Func["DPSOFF"] <- function (args)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// //调用群助手发送消息
|
||||
// function GroupAssistantSendAMessage() {
|
||||
// //私有方法 发送带参数的Post请求
|
||||
// local SO = Http("129.211.27.104", "9080");
|
||||
// local Res = SO.Post("/dof/chat", Json.Encode({
|
||||
// username = "倾泪寒",
|
||||
// text = "倾泪寒爆史诗了!",
|
||||
// groupId = 416424738
|
||||
// }), "application/json");
|
||||
// }
|
||||
}
|
||||
//热重载
|
||||
getroottable()._HotFixPath_ <- {};
|
||||
@@ -318,22 +340,34 @@ getroottable()._HotFixPathChangeTimer_ <- {};
|
||||
function _Reload_List_Write_(Path) {
|
||||
local NowTime = Sq_GetTimestampString().slice(-9).tointeger();
|
||||
if (!getroottable()._HotFixPathChangeTimer_.rawin(Path) || NowTime - getroottable()._HotFixPathChangeTimer_[Path] > 1000) {
|
||||
//判断类型
|
||||
if (endswith(Path, ".nut")) {
|
||||
dofile(Path);
|
||||
print("位于 [" + Path + "] 的脚本已重载")
|
||||
} else if (endswith(Path, ".json")) {
|
||||
try {
|
||||
local PArr = split(Path, "/");
|
||||
local RealName = PArr[PArr.len() - 1];
|
||||
GlobalConfig.LoadJson(RealName, Path);
|
||||
Timer.SetTimeOut(function() {
|
||||
//判断类型
|
||||
if (endswith(Path, ".nut")) {
|
||||
dofile(Path);
|
||||
print("位于 [" + Path + "] 的脚本已重载")
|
||||
} else if (endswith(Path, ".json")) {
|
||||
try {
|
||||
local PArr = split(Path, "/");
|
||||
local RealName = PArr[PArr.len() - 1];
|
||||
|
||||
print("位于 [" + Path + "] 的配置已重载");
|
||||
//在载入新配置之前 先拿到旧配置保存起来
|
||||
local OldConfig = GlobalConfig.Get(RealName);
|
||||
GlobalConfig.LoadJson(RealName, Path);
|
||||
|
||||
} catch (exception) {
|
||||
//如果存在项目 并且有重载入口 则调用重载入口
|
||||
if (_GlobalOfficial_Project.ReloadProjectMap.rawin(RealName)) {
|
||||
local ProjectStartFunc = _GlobalOfficial_Project.ReloadProjectMap[RealName];
|
||||
if (getroottable().rawin(ProjectStartFunc + "Reload_")) {
|
||||
getroottable()[ProjectStartFunc + "Reload_"](OldConfig);
|
||||
}
|
||||
}
|
||||
print("位于 [" + Path + "] 的配置已重载");
|
||||
|
||||
} catch (exception) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}, 500)
|
||||
getroottable()._HotFixPathChangeTimer_[Path] <- NowTime;
|
||||
}
|
||||
}
|
||||
@@ -24,12 +24,12 @@ class Http {
|
||||
return encoded;
|
||||
}
|
||||
|
||||
function Request(Type, Url, Content) {
|
||||
function Request(Type, Url, Content, DataType) {
|
||||
local RequestBuffer = Type + " " + Url + " HTTP/1.1\r\nHost: " + Host + "\r\n";
|
||||
|
||||
if (Content) {
|
||||
RequestBuffer += "Content-Length: " + Content.len() + "\r\n";
|
||||
RequestBuffer += "Content-Type: application/x-www-form-urlencoded\r\n";
|
||||
RequestBuffer += "Content-Type: " + DataType + "\r\n";
|
||||
RequestBuffer += "\r\n";
|
||||
RequestBuffer += Content;
|
||||
} else {
|
||||
@@ -39,16 +39,19 @@ class Http {
|
||||
}
|
||||
|
||||
// 发送请求
|
||||
function Post(Url, params = null) {
|
||||
function Post(Url, params = null, DataType = "application/x-www-form-urlencoded") {
|
||||
local content = null;
|
||||
if (params != null && typeof params == "table") {
|
||||
content = _EncodeParams(params); // 编码参数
|
||||
}
|
||||
return Request("POST", Url, content);
|
||||
else if (params != null && typeof params == "string") {
|
||||
content = params;
|
||||
}
|
||||
return Request("POST", Url, content, DataType);
|
||||
}
|
||||
|
||||
function Get(Url, Content = null) {
|
||||
return Request("GET", Url, Content);
|
||||
function Get(Url, Content = null, DataType = "application/x-www-form-urlencoded") {
|
||||
return Request("GET", Url, Content, DataType);
|
||||
}
|
||||
|
||||
|
||||
@@ -243,8 +246,7 @@ class HttpResponse {
|
||||
response += "Content-Length: " + JsonString.len() + "\r\n";
|
||||
response += "\r\n";
|
||||
response += JsonString;
|
||||
}
|
||||
else if(typeof Msg == "string") {
|
||||
} else if (typeof Msg == "string") {
|
||||
response += "Content-Type: text/plain\r\n";
|
||||
response += "Content-Length: " + Msg.len() + "\r\n";
|
||||
response += "\r\n";
|
||||
|
||||
@@ -33,6 +33,11 @@ class Inven extends Base_C_Object {
|
||||
return Sq_Inven_GetItemById(this.C_Object, Idx);
|
||||
}
|
||||
|
||||
//获取金币
|
||||
function GetMoney() {
|
||||
return Sq_CallFunc(S_Ptr("0x817a188"), "int", ["pointer"], SUser.C_Object);
|
||||
}
|
||||
|
||||
//检查背包是否拥有指定数量的指定道具
|
||||
function CheckItemCount(ItemId, ItemCount) {
|
||||
if (ItemId == 0) {
|
||||
|
||||
@@ -4,41 +4,60 @@
|
||||
创建日期:2025-03-30 00:03
|
||||
文件用途:官方项目
|
||||
*/
|
||||
function _Start_Official_Project_() {
|
||||
// 定义 ANSI 颜色代码
|
||||
local COLOR_RESET = "\x1b[0m";
|
||||
local COLOR_MAGENTA = "\x1b[95m";
|
||||
local COLOR_CYAN = "\x1b[96m";
|
||||
local COLOR_YELLOW = "\x1b[93m";
|
||||
local COLOR_RED = "\x1b[91m";
|
||||
class _Official_Project_ {
|
||||
ReloadProjectMap = null;
|
||||
|
||||
constructor() {
|
||||
//在全局中注册自己
|
||||
getroottable()._GlobalOfficial_Project <- this;
|
||||
ReloadProjectMap = {};
|
||||
|
||||
|
||||
local WorkPath = "/dp_s/OfficialProject";
|
||||
local Dirs = sq_GetListDirs(WorkPath);
|
||||
if (Dirs.len() > 0) {
|
||||
print(format("\n\n\t\t\t\t%s开始加载DP-S插件市场项目%s", COLOR_YELLOW, COLOR_RESET));
|
||||
Init();
|
||||
}
|
||||
foreach(DirPath in Dirs) {
|
||||
local FilePaths = sq_GetListFiles(WorkPath + "/" + DirPath);
|
||||
|
||||
foreach(FilePath in FilePaths) {
|
||||
//找到项目文件
|
||||
if (FilePath == "Proj.ifo") {
|
||||
local Config = sq_ReadJsonFile(WorkPath + "/" + DirPath + "/" + FilePath);
|
||||
if (Config) {
|
||||
try {
|
||||
local ProjectFiles = Config.ProjectFiles;
|
||||
//载入所有项目文件
|
||||
foreach(ProjectFile in ProjectFiles) {
|
||||
sq_RunScript("OfficialProject/" + DirPath + "/" + ProjectFile);
|
||||
function Init() {
|
||||
// 定义 ANSI 颜色代码
|
||||
local COLOR_RESET = "\x1b[0m";
|
||||
local COLOR_MAGENTA = "\x1b[95m";
|
||||
local COLOR_CYAN = "\x1b[96m";
|
||||
local COLOR_YELLOW = "\x1b[93m";
|
||||
local COLOR_RED = "\x1b[91m";
|
||||
|
||||
|
||||
local WorkPath = "/dp_s/OfficialProject";
|
||||
local Dirs = sq_GetListDirs(WorkPath);
|
||||
if (Dirs.len() > 0) {
|
||||
print(format("\n\n\t\t\t\t%s开始加载DP-S插件市场项目%s", COLOR_YELLOW, COLOR_RESET));
|
||||
}
|
||||
foreach(DirPath in Dirs) {
|
||||
local FilePaths = sq_GetListFiles(WorkPath + "/" + DirPath);
|
||||
|
||||
foreach(FilePath in FilePaths) {
|
||||
//找到项目文件
|
||||
if (FilePath == "Proj.ifo") {
|
||||
local Config = sq_ReadJsonFile(WorkPath + "/" + DirPath + "/" + FilePath);
|
||||
if (Config) {
|
||||
try {
|
||||
//读取配置文件建立Map
|
||||
local ProjectConfig = Config.ProjectConfig;
|
||||
if(ProjectConfig.len() > 0){
|
||||
ReloadProjectMap.rawset(ProjectConfig,Config.ProjectRunFunc);
|
||||
}
|
||||
|
||||
local ProjectFiles = Config.ProjectFiles;
|
||||
//载入所有项目文件
|
||||
foreach(ProjectFile in ProjectFiles) {
|
||||
sq_RunScript("OfficialProject/" + DirPath + "/" + ProjectFile);
|
||||
}
|
||||
//调用启动函数
|
||||
getroottable()[Config.ProjectRunFunc]();
|
||||
//播报脚本已加载
|
||||
print(format("%s[ %s ]%s" + " 脚本项目已加载 --- 当前版本: %s%.2f%s", COLOR_YELLOW, Config.ProjectName, COLOR_RESET, COLOR_YELLOW, Config.ProjectVersion, COLOR_RESET));
|
||||
} catch (exception) {
|
||||
//播报脚本未加载
|
||||
print(format("%s[ %s ]%s" + " 脚本项目未加载 --- 当前版本: %s%.2f%s", COLOR_RED, Config.ProjectName, COLOR_RESET, COLOR_RED, Config.ProjectVersion, COLOR_RESET));
|
||||
}
|
||||
//调用启动函数
|
||||
getroottable()[Config.ProjectRunFunc]();
|
||||
//播报脚本已加载
|
||||
print(format("%s[ %s ]%s" + " 脚本项目已加载 --- 当前版本: %s%.2f%s", COLOR_YELLOW, Config.ProjectName, COLOR_RESET, COLOR_YELLOW, Config.ProjectVersion, COLOR_RESET));
|
||||
} catch (exception) {
|
||||
//播报脚本未加载
|
||||
print(format("%s[ %s ]%s" + " 脚本项目未加载 --- 当前版本: %s%.2f%s", COLOR_RED, Config.ProjectName, COLOR_RESET, COLOR_RED, Config.ProjectVersion, COLOR_RESET));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +91,7 @@ class Packet extends Base_C_Object {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
function GetBinary(len) {
|
||||
local data = Memory.alloc(len);
|
||||
if (Sq_CallFunc(S_Ptr("0x858D3B2"), "int", ["pointer", "pointer"], this.C_Object, data.C_Object)) {
|
||||
@@ -99,6 +100,14 @@ class Packet extends Base_C_Object {
|
||||
return null;
|
||||
}
|
||||
|
||||
function GetString(a3,a4) {
|
||||
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)) {
|
||||
return data;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function Delete() {
|
||||
Sq_CallFunc(S_Ptr("0x858DE80"), "void", ["pointer"], this.C_Object);
|
||||
Sq_Delete_Point(this.C_Object);
|
||||
|
||||
@@ -13,6 +13,8 @@ class RBTreeNode {
|
||||
parent = null;
|
||||
color = null;
|
||||
Info = null;
|
||||
|
||||
name = null;
|
||||
constructor(key, func_info) {
|
||||
this.key = key;
|
||||
this.time = key;
|
||||
@@ -43,7 +45,7 @@ class RedBlackTree {
|
||||
this.root = this.nil;
|
||||
}
|
||||
|
||||
function insert(key, func_info) {
|
||||
function insert(key, func_info, gname = null) {
|
||||
local z = RBTreeNode(key, func_info);
|
||||
local y = this.nil;
|
||||
local x = this.root;
|
||||
@@ -66,6 +68,7 @@ class RedBlackTree {
|
||||
z.left = this.nil;
|
||||
z.right = this.nil;
|
||||
z.color = "red";
|
||||
if (gname) z.name = gname;
|
||||
this.insertFixup(z);
|
||||
this.size++;
|
||||
}
|
||||
@@ -286,4 +289,26 @@ class RedBlackTree {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function findNodeByName(node,name) {
|
||||
if (node == this.nil) {
|
||||
return null;
|
||||
}
|
||||
if (node.name == name) {
|
||||
return node;
|
||||
}
|
||||
local leftResult = findNodeByName(node.left, name);
|
||||
if (leftResult) {
|
||||
return leftResult;
|
||||
}
|
||||
return findNodeByName(node.right, name);
|
||||
}
|
||||
|
||||
// 新增方法:根据 name 移除节点
|
||||
function removeNodeByName(name) {
|
||||
local targetNode = this.findNodeByName(this.root,name);
|
||||
if (targetNode) {
|
||||
this.deleteNode(targetNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -88,12 +88,24 @@ class Timer {
|
||||
//Cron字符串
|
||||
local NextTimestep = Info[2];
|
||||
//执行函数
|
||||
func.acall(func_args);
|
||||
local Flag = func.acall(func_args);
|
||||
//继续构建下一次任务
|
||||
Date_Exec_Tree.insert(Sq_Cron_Next(NextTimestep, time()), Info);
|
||||
if(Flag == null || Flag == true) Date_Exec_Tree.insert(Sq_Cron_Next(NextTimestep, time()), Info, Node.name);
|
||||
}
|
||||
|
||||
function SetCronTask(target_func, CronString, ...) {
|
||||
function SetCronTask(target_func, build_info, ...) {
|
||||
local CronString = "";
|
||||
local TaskName = null;
|
||||
//如果是字符串直接就是Cron字符串
|
||||
if (typeof build_info == "string") {
|
||||
CronString = build_info;
|
||||
}
|
||||
//如果是Table 则有名字
|
||||
else if (typeof build_info == "table") {
|
||||
CronString = build_info.Cron;
|
||||
TaskName = build_info.Name;
|
||||
}
|
||||
|
||||
local NowTimestep = time();
|
||||
|
||||
//下一次执行的时间
|
||||
@@ -115,7 +127,11 @@ class Timer {
|
||||
//间隔时间戳时间
|
||||
func_info.push(CronString);
|
||||
|
||||
_Timer_Object.Date_Exec_Tree.insert(NextTimestep, func_info);
|
||||
_Timer_Object.Date_Exec_Tree.insert(NextTimestep, func_info, TaskName);
|
||||
}
|
||||
|
||||
function RemoveCronTask(name) {
|
||||
_Timer_Object.Date_Exec_Tree.removeNodeByName(name);
|
||||
}
|
||||
|
||||
function Update() {
|
||||
|
||||
@@ -777,4 +777,71 @@ function User::DropItem(ItemId, Xpos, Ypos) {
|
||||
Sq_WriteByteArr(S_Ptr("0x85A773C"), [0x89, 0x44, 0x24, 0x04, 0x8B, 0x45, 0x08]);
|
||||
NativePointer("0x085A7599").writeShort(300);
|
||||
NativePointer("0x085A759F").writeShort(240);
|
||||
}
|
||||
|
||||
//角色类 发送邮件函数 (标题, 正文, 金币, 道具列表[[3037,100],[3038,100]])
|
||||
function User::ReqDBSendMultiMail(title, text, gold, item_list) {
|
||||
Timer.SetTimeOut(function(SUser,title, text, gold, item_list) {
|
||||
local Cid = SUser.GetCID();
|
||||
// 获取分割后的道具列表
|
||||
local subLists;
|
||||
local maxSlots = 10;
|
||||
local length = item_list.len();
|
||||
if (length <= maxSlots) {
|
||||
subLists = [item_list];
|
||||
} else {
|
||||
subLists = [];
|
||||
for (local i = 0; i< length; i += maxSlots) {
|
||||
local end = i + maxSlots;
|
||||
if (end > length) {
|
||||
end = length;
|
||||
}
|
||||
subLists.append(item_list.slice(i, end));
|
||||
}
|
||||
}
|
||||
if (subLists) {
|
||||
// 为每个子列表发送邮件
|
||||
for (local i = 0; i< subLists.len(); ++i) {
|
||||
local subList = subLists[i];
|
||||
|
||||
// 添加道具附件
|
||||
local vector = Memory.alloc(100);
|
||||
|
||||
Sq_CallFunc(S_Ptr("0x81349D6"), "pointer", ["pointer"], vector.C_Object);
|
||||
Sq_CallFunc(S_Ptr("0x817A342"), "pointer", ["pointer"], vector.C_Object);
|
||||
//将所有要发送的道具写入Vector
|
||||
for (local j = 0; j< subList.len(); ++j) {
|
||||
//道具ID 分配4字节内存
|
||||
local item_id = Memory.alloc(4);
|
||||
//道具数量 分配4字节内存
|
||||
local item_cnt = Memory.alloc(4);
|
||||
//写入道具ID和数量
|
||||
item_id.writeInt(subList[j][0]);
|
||||
item_cnt.writeInt(subList[j][1]);
|
||||
|
||||
local pair = Memory.alloc(100);
|
||||
|
||||
Sq_CallFunc(S_Ptr("0x81B8D41"), "pointer", ["pointer", "pointer", "pointer"], pair.C_Object, item_id.C_Object, item_cnt.C_Object);
|
||||
Sq_CallFunc(S_Ptr("0x80DD606"), "pointer", ["pointer", "pointer"], vector.C_Object, pair.C_Object);
|
||||
}
|
||||
|
||||
// 邮件支持10个道具附件格子
|
||||
local addition_slots = Memory.alloc(1000);
|
||||
|
||||
for (local j = 0; j< 10; ++j) {
|
||||
Sq_CallFunc(S_Ptr("0x80CB854"), "pointer", ["pointer"], addition_slots.add(j * 61).C_Object);
|
||||
}
|
||||
|
||||
Sq_CallFunc(S_Ptr("0x8556A14"), "int", ["pointer", "pointer", "int"], vector.C_Object, addition_slots.C_Object, 10);
|
||||
|
||||
local title_ptr = Memory.allocUtf8String(title); // 邮件标题
|
||||
local text_ptr = Memory.allocUtf8String(text); // 邮件正文
|
||||
|
||||
local text_len = text.len(); // 邮件正文长度
|
||||
|
||||
// 发邮件给角色
|
||||
Sq_CallFunc(S_Ptr("0x8556B68"), "int", ["pointer", "pointer", "int", "int", "int", "pointer", "int", "int", "int", "int"], title_ptr.C_Object, addition_slots.C_Object, subList.len(), gold, Cid, text_ptr.C_Object, text_len, 0, 99, 1);
|
||||
}
|
||||
}
|
||||
}, 1,this,title, text, gold, item_list);
|
||||
}
|
||||
@@ -138,6 +138,21 @@ Gm_InputFunc_Handle["完成任务"] <- function(SUser, CmdString) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
Gm_InputFunc_Handle["测试"] <- function(SUser, CmdString) {
|
||||
SUser.ClearQuest_Gm(674);
|
||||
SUser.ClearQuest_Gm(649);
|
||||
|
||||
SUser.ClearQuest_Gm(675);
|
||||
SUser.ClearQuest_Gm(650);
|
||||
}
|
||||
|
||||
|
||||
Cb_History_MileageSet_Func["_DPS_上线自动完成任务_"] <- function(SUser, Data) {
|
||||
SUser.ClearQuest_Gm(101);
|
||||
}
|
||||
|
||||
|
||||
Gm_InputFunc_Handle.M <- function(SUser, CmdString) {
|
||||
local PartyObj = SUser.GetParty();
|
||||
// Sq_CallFunc(S_Ptr("0x85A73A6"), "int", ["pointer", "pointer", "int"], PartyObj.C_Object, SUser.C_Object, 3037);
|
||||
@@ -302,6 +317,8 @@ function TestCronTask(str) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Gm_InputFunc_Handle.WEQ <- function(SUser, CmdString) {
|
||||
// // World.MoveArea(SUser, 1, 0, 55, 349);
|
||||
|
||||
@@ -333,6 +350,9 @@ Gm_InputFunc_Handle.WEQ <- function(SUser, CmdString) {
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
Gm_InputFunc_Handle.QS <- function(SUser, CmdString) {
|
||||
SUser.RechargeCeraPoint(10000);
|
||||
};
|
||||
@@ -357,103 +377,250 @@ function UserdataSliceStr(Data) {
|
||||
return Ret;
|
||||
}
|
||||
|
||||
// MultiMailBoxCloseRindroMap <- null;
|
||||
// Cb_MultiMailBoxReqSend_Enter_Func.CloseRindro <- function(args) {
|
||||
// MultiMailBoxCloseRindroMap = Memory.alloc(144370 * 4);
|
||||
// MultiMailBoxCloseRindroMap.add(144369 * 4).writeInt(0);
|
||||
// args[1] = MultiMailBoxCloseRindroMap.C_Object;
|
||||
// return args;
|
||||
// }
|
||||
// Cb_MultiMailBoxReqSend_Leave_Func.CloseRindro <- function(args) {
|
||||
// MultiMailBoxCloseRindroMap = null;
|
||||
// }
|
||||
|
||||
// //Hook
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
//品级对应的RGB
|
||||
rarityColorMap <- {
|
||||
"0": [255, 255, 255], // 普通
|
||||
"1": [104, 213, 237], // 高级
|
||||
"2": [179, 107, 255], // 稀有
|
||||
"3": [255, 0, 255], // 神器
|
||||
"4": [255, 180, 0], // 史诗
|
||||
"5": [255, 102, 102], // 勇者
|
||||
"6": [255, 20, 147], // 深粉红色
|
||||
"7": [255, 215, 0] // 金色
|
||||
};
|
||||
|
||||
function xorEncryptDecrypt(BlobObj, Key) {
|
||||
for (local i = 0; i< Key.len(); i++) {
|
||||
local currentKeyChar = Key[i % Key.len()];
|
||||
BlobObj[i] = BlobObj[i] ^ currentKeyChar;
|
||||
//通过道具ID获取RGB
|
||||
function RarityColor(item_id) {
|
||||
local PvfItemObj = PvfItem.GetPvfItemById(item_id);
|
||||
if (PvfItemObj == null) {
|
||||
return;
|
||||
}
|
||||
local Arr = [];
|
||||
foreach(value in BlobObj) {
|
||||
Arr.append(value);
|
||||
}
|
||||
return Arr;
|
||||
local CItem_get_rarity = PvfItemObj.GetRarity(); // 装备品级
|
||||
return rarityColorMap[(CItem_get_rarity).tostring()];
|
||||
}
|
||||
|
||||
function base64_encode(input) {
|
||||
local base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
local inputLength = input.len();
|
||||
local i = 0;
|
||||
local j = 0;
|
||||
local charArray3 = array(3);
|
||||
local charArray4 = array(4);
|
||||
local encoded = "";
|
||||
|
||||
while (inputLength--) {
|
||||
charArray3[i++] = input[inputLength];
|
||||
if (i == 3) {
|
||||
charArray4[0] = (charArray3[0] & 0xfc) >> 2;
|
||||
charArray4[1] = ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4);
|
||||
charArray4[2] = ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6);
|
||||
charArray4[3] = charArray3[2] & 0x3f;
|
||||
user_equ_plan <- {};
|
||||
|
||||
for (i = 0; i< 4; i++) {
|
||||
encoded += base64_chars[charArray4[i]];
|
||||
function GetEquip(SUser) {
|
||||
//获取玩家背包
|
||||
local InvenObj = SUser.GetInven();
|
||||
if (!InvenObj) {
|
||||
return;
|
||||
}
|
||||
local equArr = {};
|
||||
|
||||
// 读穿戴装备(10-21) + 时装(0-9)
|
||||
for (local i = 0; i< 26; i++) {
|
||||
// // 跳过非上衣时装,若需要换全部时装注释掉这段if
|
||||
// if (i != 3 && (i < 10 || i > 21)) {
|
||||
// equArr[i] <- {
|
||||
// "id": 0,
|
||||
// "lv": 0
|
||||
// };
|
||||
// continue;
|
||||
// }
|
||||
|
||||
local ItemObj = InvenObj.GetSlot(0, i);
|
||||
local equId = ItemObj.GetIndex();
|
||||
local item_upgrade = ItemObj.GetUpgrade();
|
||||
local item_name = PvfItem.GetNameById(equId);
|
||||
if (item_upgrade > 0) {
|
||||
item_name = "+" + item_upgrade + " " + item_name;
|
||||
}
|
||||
//id:装备id lv:时装数据库uid/装备品级
|
||||
equArr[i] <- {
|
||||
"id": equId > 0 ? equId : 0,
|
||||
"lv": equId > 0 ? NativePointer(ItemObj.C_Object).add(7).readU32() : 0
|
||||
};
|
||||
|
||||
if (equId > 0) {
|
||||
local AdMsgObj = AdMsg();
|
||||
AdMsgObj.PutType(2);
|
||||
AdMsgObj.PutString(" ");
|
||||
AdMsgObj.PutEquipment("[" + item_name + "]", ItemObj, RarityColor(equId));
|
||||
AdMsgObj.PutString("已登记");
|
||||
AdMsgObj.Finalize();
|
||||
SUser.Send(AdMsgObj.MakePack());
|
||||
AdMsgObj.Delete();
|
||||
}
|
||||
}
|
||||
return equArr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function SaveEquipPlan(SUser, id) {
|
||||
local charac_no = SUser.GetCID().tostring();
|
||||
if (!(charac_no in user_equ_plan)) {
|
||||
user_equ_plan[charac_no] <- {};
|
||||
}
|
||||
local info = GetEquip(SUser);
|
||||
user_equ_plan[charac_no]["equPlan" + id] <- info;
|
||||
local AdMsgObj = AdMsg();
|
||||
AdMsgObj.PutType(2);
|
||||
AdMsgObj.PutString(" ");
|
||||
AdMsgObj.PutString("方案[" + id + "]已启用");
|
||||
AdMsgObj.Finalize();
|
||||
World.SendAll(AdMsgObj.MakePack());
|
||||
AdMsgObj.Delete();
|
||||
}
|
||||
|
||||
function PutOnEquip(SUser, equPlan, id) {
|
||||
local charac_no = SUser.GetCID().tostring();
|
||||
local InvenObj = SUser.GetInven();
|
||||
if (!InvenObj) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 遍历遍历穿戴栏0-21 时装栏 0-104 和 装备栏 3-56
|
||||
for (local i = 0; i< 22; i++) {
|
||||
if (equPlan[i].id) {
|
||||
local type = i< 10 ? 2 : 1; // type 1装备 2时装
|
||||
local startIndex = type == 2 ? 0 : 3; // 背包时装栏从0开始,背包装备栏从3开始
|
||||
local endIndex = type == 2 ? 105 : 57; //背包时装栏到104,背包装备栏到56
|
||||
for (local j = startIndex; j< endIndex; j++) {
|
||||
local equOut = InvenObj.GetSlot(type, j);
|
||||
local equId = equOut.GetIndex();
|
||||
if (equPlan[i].id == equId && equPlan[i].lv == NativePointer(equOut.C_Object).add(7).readU32()) {
|
||||
Sq_CallFunc(S_Ptr("0x0865EED2"), "int", ["pointer", "int", "int", "int"], SUser.C_Object, type == 2 ? 1 : 0, j, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (i) {
|
||||
for (j = i; j< 3; j++) {
|
||||
charArray3[j] = 0;
|
||||
}
|
||||
SUser.SendItemSpace(1);
|
||||
SUser.SendItemSpace(0);
|
||||
SUser.SendItemSpace(7);
|
||||
|
||||
charArray4[0] = (charArray3[0] & 0xfc) >> 2;
|
||||
charArray4[1] = ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4);
|
||||
charArray4[2] = ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6);
|
||||
charArray4[3] = charArray3[2] & 0x3f;
|
||||
|
||||
for (j = 0; j< i + 1; j++) {
|
||||
encoded += base64_chars[charArray4[j]];
|
||||
}
|
||||
SUser.SendNotiPacket(0, 2, 0);
|
||||
SUser.SendNotiPacket(1, 2, 1);
|
||||
SUser.SendNotiPacket(7, 2, 7);
|
||||
|
||||
while (i++<3) {
|
||||
encoded += "=";
|
||||
}
|
||||
}
|
||||
local Bq = Sq_CallFunc(S_Ptr("0x80DD584"), "pointer", ["pointer", "int"], SUser.C_Object, 2);
|
||||
Sq_CallFunc(S_Ptr("0x85427A0"), "void", ["pointer", "pointer"], Bq, SUser.C_Object);
|
||||
// RefreshTheLockOfEquipment(SUser, InvenObj);
|
||||
// Sq_CallFunc(S_Ptr("0x84FAE0A"), "void", ["pointer", "int", "int", "int"], InvenObj.C_Object, NativePointer(InvenObj.C_Object).readInt(), 21, 0);
|
||||
|
||||
return encoded;
|
||||
// 刷新装备栏锁头(不含穿戴栏暂无法刷新)
|
||||
// Sq_CallFunc(S_Ptr("0x84FAF8E"), "void", ["pointer"], InvenObj.C_Object);
|
||||
//// 刷新时装栏锁头(不含穿戴栏暂无法刷新)
|
||||
//Sq_CallFunc(S_Ptr("0x084FAFBE"), "void", ["pointer"], InvenObj.C_Object);
|
||||
// 刷新技能
|
||||
Sq_CallFunc(S_Ptr("0x866C46A"), "void", ["pointer"], SUser.C_Object);
|
||||
//// 刷新角色状态
|
||||
//Sq_CallFunc(S_Ptr("0x867BA5C"), "int", ["pointer", "int", "int", "int"], SUser.C_Object, 0, 2, 0);
|
||||
//Sq_CallFunc(S_Ptr("0x867BA5C"), "int", ["pointer", "int", "int", "int"], SUser.C_Object, 1, 2, 1);
|
||||
user_equ_plan[charac_no].startTime <- time(); // 记录结束时间
|
||||
SUser.SendNotiPacketMessage("装备方案[" + id + "]切换结束!!", 2);
|
||||
}
|
||||
|
||||
Timer.SetTimeOut(function() {
|
||||
local Key = "desaqe";
|
||||
local Str = "Test Data";
|
||||
print("old: " + Str);
|
||||
local StrPointer = Memory.allocUtf8String(Str);
|
||||
local BlobObj = StrPointer.readBinary(Str.len());
|
||||
local Arr = xorEncryptDecrypt(BlobObj, Key);
|
||||
StrPointer.writeByteArray(Arr);
|
||||
//此时str已不可读 需要掌控其指针 与 长度
|
||||
local NewStrPointer = StrPointer;
|
||||
local encodestr = base64_encode(NewStrPointer.readUtf8String(Str.len()));
|
||||
print("encode: " + encodestr);
|
||||
function RefreshTheLockOfEquipment(SUser, InvenObj) {
|
||||
local Pack = Packet();
|
||||
//Clear
|
||||
Sq_CallFunc(S_Ptr("0x80CB8E6"), "int", ["pointer"], Pack.C_Object);
|
||||
Pack.Put_Header(0, 251);
|
||||
//GetIndex
|
||||
local Index = Sq_CallFunc(S_Ptr("0x8110B4C"), "int", ["pointer"], Pack.C_Object);
|
||||
Pack.Put_Short(0);
|
||||
local V7 = 0;
|
||||
for (local i = 0; i< 21; i++) {
|
||||
local Flag = NativePointer(InvenObj.C_Object).add((61 * i) + 48).readU8();
|
||||
if (Flag) {
|
||||
Pack.Put_Byte(0);
|
||||
Pack.Put_Short(i);
|
||||
Pack.Put_Byte(1);
|
||||
Pack.Put_Int(500000);
|
||||
// local Bq = Sq_CallFunc(S_Ptr("0x828B5DE"), "pointer", ["pointer", "int"], SUser.C_Object, 2);
|
||||
// Sq_CallFunc(S_Ptr("0x828B5DE"), "char", ["pointer", "pointer"], Bq, Pack.C_Object);
|
||||
V7++;
|
||||
}
|
||||
}
|
||||
local Buf = Memory.alloc(4);
|
||||
Buf.writeInt(Index);
|
||||
Sq_CallFunc(S_Ptr("0x8110B28"), "int", ["pointer", "pointer", "int"], Pack.C_Object, Buf.C_Object, V7);
|
||||
Pack.Finalize(1);
|
||||
SUser.Send(Pack);
|
||||
Pack.Delete();
|
||||
|
||||
print("发包了");
|
||||
}
|
||||
|
||||
function api_PutOnEquip(SUser, id) {
|
||||
local charac_no = SUser.GetCID().tostring();
|
||||
if (!(charac_no in user_equ_plan)) {
|
||||
SUser.SendNotiPacketMessage("方案不存在!!", 2);
|
||||
return;
|
||||
}
|
||||
local equPlanKey = "equPlan" + id;
|
||||
if (!user_equ_plan[charac_no].rawin(equPlanKey)) {
|
||||
SUser.SendNotiPacketMessage("方案[" + id + "]不存在!!!", 2);
|
||||
return;
|
||||
}
|
||||
local equPlan = user_equ_plan[charac_no][equPlanKey];
|
||||
|
||||
//换装指令冷却时间,5scd
|
||||
if (user_equ_plan[charac_no].rawin("startTime")) {
|
||||
local currentTime = time();
|
||||
local timeDiff = user_equ_plan[charac_no].startTime - currentTime + 5;
|
||||
if (timeDiff > 0) {
|
||||
SUser.SendNotiPacketMessage("换装功能冷却中,还有<" + timeDiff + ">秒才能使用!", 2);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
PutOnEquip(SUser, equPlan, id);
|
||||
}
|
||||
|
||||
function MoveItem_send(SUser, type, slot, Bodyslot) {
|
||||
local Pack = Packet();
|
||||
Pack.Put_Header(1, 19);
|
||||
Pack.Put_Byte(1); //默认1
|
||||
Pack.Put_Byte(type); //协议, 0时装 1装备
|
||||
Pack.Put_Short(slot); // 背包槽位slot
|
||||
Pack.Put_Int(1); // 默认1未知
|
||||
Pack.Put_Byte(3); // 默认3穿戴栏
|
||||
Pack.Put_Short(Bodyslot); //穿戴栏slot(0-25)
|
||||
Pack.Finalize(true);
|
||||
SUser.Send(Pack);
|
||||
local v6 = Sq_CallFunc(S_Ptr("0x081935A2"), "pointer", []);
|
||||
Sq_CallFunc(S_Ptr("0x867BA5C"), "int", ["pointer", "pointer", "int", "int", "int", "int"], v6, SUser.C_Object, type, slot, 3, Bodyslot);
|
||||
Pack.Delete();
|
||||
}
|
||||
|
||||
function Save_equFnc(SUser, CmdString) {
|
||||
local arr = split(CmdString, " ");
|
||||
local id = arr[1].tointeger();
|
||||
SaveEquipPlan(SUser, id);
|
||||
}
|
||||
|
||||
|
||||
// 注册命令1
|
||||
Gm_InputFunc_Handle.rawset("pl", Save_equFnc);
|
||||
|
||||
function change_equFnc(SUser, CmdString) {
|
||||
local arr = split(CmdString, " ");
|
||||
local id = arr[1].tointeger();
|
||||
api_PutOnEquip(SUser, id);
|
||||
}
|
||||
|
||||
// 注册命令
|
||||
Gm_InputFunc_Handle.rawset("on", change_equFnc);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
local BlobObj = NewStrPointer.readBinary(Str.len());
|
||||
local Arr = xorEncryptDecrypt(BlobObj, Key);
|
||||
NewStrPointer.writeByteArray(Arr);
|
||||
print("new: " + NewStrPointer.readUtf8String());
|
||||
}, 1);
|
||||
|
||||
*/
|
||||
|
||||
|
||||
//分割道具列表
|
||||
@@ -583,13 +750,41 @@ Gm_InputFunc_Handle.TTT <- function(SUser, CmdString) {
|
||||
// [3038, 200]
|
||||
// ]);
|
||||
|
||||
SUser.DropItem(27095, 800, 200);
|
||||
local InvenObj = SUser.GetInven();
|
||||
for (local i = 0; i< 21; i++) {
|
||||
local Flag = NativePointer(InvenObj.C_Object).add((61 * i) + 48).readU8();
|
||||
print("i: " + i + " Flag: " + Flag);
|
||||
}
|
||||
|
||||
|
||||
// SUser.MainTaskCompleted();
|
||||
};
|
||||
|
||||
|
||||
// getroottable()._LenheartUserLoseEfficacyState_ <- Memory.alloc(577477);
|
||||
// Memory.reset(getroottable()._LenheartUserLoseEfficacyState_,577477);
|
||||
// Cb_SendMess_Enter_Func["Rindro"] <- function(args) {
|
||||
// local PackCopyBuffer = Memory.alloc(10001);
|
||||
// Memory.copy(PackCopyBuffer, NativePointer(args[2]), 1000);
|
||||
// local Pack = Packet(PackCopyBuffer.C_Object);
|
||||
|
||||
// local Type = Pack.GetByte();
|
||||
|
||||
// if(Type == 1 || Type == 33){
|
||||
// Pack.GetShort();
|
||||
// Pack.GetInt();
|
||||
// local StrLen = Pack.GetInt();
|
||||
// local SStr = Pack.GetString(256,StrLen);
|
||||
// local Str= SStr.readUtf8String();
|
||||
// // print("对话长度:" + StrLen);
|
||||
// print("对话:" + Str);
|
||||
// if(Str.find("asd") != null){
|
||||
// args[1] = getroottable()._LenheartUserLoseEfficacyState_.C_Object;
|
||||
// print("屏蔽词");
|
||||
// return args;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
@@ -671,15 +866,61 @@ ClientSocketPackFuncMap.rawset(21091001, function(SUser, Jso) {
|
||||
// // SUser.SendNotiPacketMessage("出纳上到几点方柏霓撒娇扩大年级卡萨", 7);
|
||||
// }
|
||||
|
||||
// //定义一个显示的变量
|
||||
// getroottable().TaskCount <- 0;
|
||||
|
||||
// //任务
|
||||
// function Task() {
|
||||
// getroottable().TaskCount++;
|
||||
// print("定时任务执行了一次,当前执行次数为:" + getroottable().TaskCount);
|
||||
// }
|
||||
|
||||
// //注册一个定时任务 每五秒执行一次 任务名为 TestCronName
|
||||
// Timer.SetCronTask(Task, {
|
||||
// Cron = "0/5 * * * * *",
|
||||
// Name = "TestCronName"
|
||||
// });
|
||||
|
||||
|
||||
function _Jump_DropItem_check_error_()
|
||||
{
|
||||
//如果没有创建过这个模拟内存就创建
|
||||
if(!getroottable().rawin("_EmptyCharacInfo_Flag_")){
|
||||
getroottable()._EmptyCharacInfo_Flag_ <- Memory.alloc(17);
|
||||
Memory.reset(getroottable()._EmptyCharacInfo_Flag_,17);
|
||||
}
|
||||
//如果没有创建过这个跳转Flag就创建并初始化
|
||||
if(!getroottable().rawin("_EmptyHook_Flag_")){
|
||||
getroottable()._EmptyHook_Flag_ <- false;
|
||||
}
|
||||
}
|
||||
|
||||
Timer.SetTimeOut(function() {
|
||||
// //私有方法 发送带参数的Post请求
|
||||
// local SO = Http("129.211.27.104", "9080");
|
||||
// local Res = SO.Post("/dof/chat", Json.Encode({
|
||||
// username = "系统公告",
|
||||
// text = "倾泪寒在格蓝迪发电站爆出了【雷剑-苦轮】!真是人品爆炸!!!",
|
||||
// groupId = 850022626
|
||||
// }), "application/json");
|
||||
|
||||
|
||||
|
||||
// Cb_DropItem_check_error_Enter_Func.Rindro <- function(args){
|
||||
// getroottable()._EmptyHook_Flag_ = true;
|
||||
// args[1] = getroottable()._EmptyCharacInfo_Flag_.C_Object;
|
||||
// return args;
|
||||
// }
|
||||
// Cb_DropItem_check_error_Leave_Func.Rindro <- function(args){
|
||||
// if(getroottable()._EmptyHook_Flag_){
|
||||
// getroottable()._EmptyHook_Flag_ = false;
|
||||
// return 19;
|
||||
// }
|
||||
// }
|
||||
}, 1)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Gm_InputFunc_Handle["aaa"] <- function(SUser, cmd) {
|
||||
// 获取角色背包
|
||||
local InvenObj = SUser.GetInven();
|
||||
|
||||
@@ -47,6 +47,7 @@ class Fiendwar {
|
||||
|
||||
//玩家发送消息HOOK 为了攻坚队频道和团长公告
|
||||
function base_input_hook(CUser, CmdString) {
|
||||
|
||||
if (!CUser) return true;
|
||||
local SUser = User(CUser);
|
||||
//超时空频道
|
||||
@@ -55,6 +56,7 @@ class Fiendwar {
|
||||
if (Localtion.Area <= 1) {
|
||||
return true;
|
||||
} else {
|
||||
print(111);
|
||||
if (CmdString.find("RindroType") == 8) {
|
||||
local Jso = {
|
||||
op = 20063027,
|
||||
@@ -73,6 +75,7 @@ class Fiendwar {
|
||||
}
|
||||
|
||||
function base_input_hook2(args) {
|
||||
|
||||
local type = args[2];
|
||||
local SUser = User(args[1]);
|
||||
local msg = args[3];
|
||||
@@ -95,6 +98,7 @@ class Fiendwar {
|
||||
|
||||
//玩家消息分发
|
||||
function PlayerNotiMsgDistribute(Jso) {
|
||||
|
||||
local SUser = World.GetUserByUidCid(Jso.uid, Jso.cid);
|
||||
if (!SUser) return;
|
||||
local CUserList = Jso.list;
|
||||
@@ -242,6 +246,7 @@ class Fiendwar {
|
||||
Cb_Move_Area_Func.Fiendwar <- move_area_hook.bindenv(this); //区域移动
|
||||
Base_InputHookFunc_Handle.Fiendwar <- base_input_hook.bindenv(this); //玩家发送消息
|
||||
Cb_reach_game_world_Func.Fiendwar <- Login_Hook.bindenv(this); //上线HOOK
|
||||
Cb_Server_Chat_Log_Leave_Func.Luke <- base_input_hook2.bindenv(this); //玩家发送消息
|
||||
|
||||
//注册收包
|
||||
GatewaySocketPackFuncMap.rawset(20063010, FiendwarSendAreaUserCallBack.bindenv(this)); //玩家移动后的区域广播包
|
||||
|
||||
@@ -324,7 +324,7 @@ _Hook_Register_Currency_Func_("0x086B330A", ["pointer", "pointer", "bool", "void
|
||||
//刷新攻城怪物函数, 控制下一只刷新的攻城怪物id
|
||||
Cb_CVillageMonsterArea_GetAttackedMonster_Enter_Func <- {};
|
||||
Cb_CVillageMonsterArea_GetAttackedMonster_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x086B3AEA", ["pointer", "int", "int"], Cb_CVillageMonsterArea_GetAttackedMonster_Enter_Func, Cb_CVillageMonsterArea_GetAttackedMonster_Leave_Func);
|
||||
_Hook_Register_Currency_Func_("0x086B3AEA", ["pointer", "int", "pointer"], Cb_CVillageMonsterArea_GetAttackedMonster_Enter_Func, Cb_CVillageMonsterArea_GetAttackedMonster_Leave_Func);
|
||||
|
||||
//正在挑战的攻城怪物
|
||||
Cb_CVillageMonster_OnFightVillageMonster_Enter_Func <- {};
|
||||
@@ -448,11 +448,46 @@ _Hook_Register_Currency_Func_("0x08608D58", ["pointer", "int", "bool"], Cb_Check
|
||||
|
||||
|
||||
//检查每日日程时间 提供者: ZZ
|
||||
Cb_User_CheckDailyScheduleTime_Enter_Func<-{};
|
||||
Cb_User_CheckDailyScheduleTime_Leave_Func<-{};
|
||||
_Hook_Register_Currency_Func_("0x846C0A8",["int","int","int"],Cb_User_CheckDailyScheduleTime_Enter_Func,Cb_User_CheckDailyScheduleTime_Leave_Func);
|
||||
Cb_User_CheckDailyScheduleTime_Enter_Func <- {};
|
||||
Cb_User_CheckDailyScheduleTime_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x846C0A8", ["int", "int", "int"], Cb_User_CheckDailyScheduleTime_Enter_Func, Cb_User_CheckDailyScheduleTime_Leave_Func);
|
||||
|
||||
//绝望之塔获取上次挑战时间 提供者: ZZ
|
||||
Cb_User_TOD_UserState_getLastClearTime_Enter_Func<-{};
|
||||
Cb_User_TOD_UserState_getLastClearTime_Leave_Func<-{};
|
||||
_Hook_Register_Currency_Func_("0x864387E",["pointer"],Cb_User_TOD_UserState_getLastClearTime_Enter_Func,Cb_User_TOD_UserState_getLastClearTime_Leave_Func);
|
||||
Cb_User_TOD_UserState_getLastClearTime_Enter_Func <- {};
|
||||
Cb_User_TOD_UserState_getLastClearTime_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x864387E", ["pointer"], Cb_User_TOD_UserState_getLastClearTime_Enter_Func, Cb_User_TOD_UserState_getLastClearTime_Leave_Func);
|
||||
|
||||
|
||||
Cb_CItem_IsRoutingItem_Enter_Func <- {};
|
||||
Cb_CItem_IsRoutingItem_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x08150f18", ["pointer", "int"], Cb_CItem_IsRoutingItem_Enter_Func, Cb_CItem_IsRoutingItem_Leave_Func);
|
||||
|
||||
//调整箱使用
|
||||
Cb_ModItemattr_Enter_Func <- {};
|
||||
Cb_ModItemattr_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x8200B08", ["pointer", "pointer", "pointer", "int"], Cb_ModItemattr_Enter_Func, Cb_ModItemattr_Leave_Func);
|
||||
|
||||
//个人金库整理
|
||||
Cb_CCargo_sort_Enter_Func <- {};
|
||||
Cb_CCargo_sort_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x850BD0C", ["pointer", "pointer"], Cb_CCargo_sort_Enter_Func, Cb_CCargo_sort_Leave_Func);
|
||||
|
||||
// 玩家断开链接时 提供者:南瓜
|
||||
Cb_CUser_LogoutToPCRoom_Enter_Func <- {};
|
||||
Cb_CUser_LogoutToPCRoom_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x0868170C", ["pointer", "int"], Cb_CUser_LogoutToPCRoom_Enter_Func, Cb_CUser_LogoutToPCRoom_Leave_Func);
|
||||
|
||||
// 购买道具时的检查错误
|
||||
Cb_BuyItem_check_error_Enter_Func <- {};
|
||||
Cb_BuyItem_check_error_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x081BE46A", ["pointer", "pointer", "pointer", "int"], Cb_BuyItem_check_error_Enter_Func, Cb_BuyItem_check_error_Leave_Func);
|
||||
|
||||
// 服务器被Kill时(不含炸频道等)
|
||||
Cb_Server_ClossByKill_Enter_Func <- {};
|
||||
Cb_Server_ClossByKill_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x082FD90E", ["pointer", "int"], Cb_Server_ClossByKill_Enter_Func, Cb_Server_ClossByKill_Leave_Func);
|
||||
|
||||
// 收到玩家聊天信息
|
||||
Cb_SendMess_Enter_Func <- {};
|
||||
Cb_SendMess_Leave_Func <- {};
|
||||
_Hook_Register_Currency_Func_("0x081F3540", ["pointer", "pointer","pointer","int"], Cb_SendMess_Enter_Func, Cb_SendMess_Leave_Func);
|
||||
@@ -40,6 +40,7 @@ function InitPluginInfo() {
|
||||
//Log.Put("error", "测试错误日志");
|
||||
|
||||
GameManager.OpenCreateJob_CreatorMage();
|
||||
GameManager.FixPracticemode();
|
||||
|
||||
|
||||
// function IndependenceDropLogic(SUser, MonsterId, MonsterLevel, Xpos, Ypos, DgnName, DgnId, DgnLevel,DgnDiff, HellDiff)
|
||||
@@ -88,7 +89,7 @@ function main() {
|
||||
// Sq_Conversion("這是一個繁體字符串");
|
||||
|
||||
|
||||
_Start_Official_Project_();
|
||||
_Official_Project_();
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user