Files
DP-S_Script/示例项目/杂项功能/杂项功能.nut
2026-04-16 16:27:53 +08:00

251 lines
11 KiB
Plaintext

function _Dps_sundry_nangua_Main_() {
local config = GlobalConfig.Get("杂项功能开关_Nangua.json");
if(config["杂项功能开关"]["摆摊开启两排格子"]){
NativePointer(S_Ptr("0x085C6EB8")).writeByteArray([0x66, 0x83, 0xF8, 0x0E]);
// 超过10个邮件时自动分开发送
Cb_ReqDBSendNewSystemMultiMail_Leave_Func._SendNewSystemMultiMail <- function(args) {
local num = args[2];
if (num > 10) {
Sq_CallFunc(S_Ptr("0x8556B68"), "int", ["pointer", "pointer", "int", "int", "int", "pointer", "int", "int", "int", "int"],
args[0], args[1], 10, args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
local left = num - 10;
local pack = Memory.alloc(0x1000);
for(local i = 0; i < left; i++){
Memory.copy(pack.add(61 * i), NativePointer(args[1]).add(61 * (i + 10)), 61);
}
Sq_CallFunc(S_Ptr("0x8556B68"), "int", ["pointer", "pointer", "int", "int", "int", "pointer", "int", "int", "int", "int"],
args[0], pack.C_Object, left, args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
}
}
}
// 设置最大等级
if(config["杂项功能开关"]["设置最高等级"][0]){
local level = config["杂项功能开关"]["设置最高等级"][1];
GameManager.SetGameMaxLevel(level);
}
// 装备解锁时间
if(config["杂项功能开关"]["装备解锁(单位:秒)"][0]){
local time = config["杂项功能开关"]["装备解锁(单位:秒)"][1];
GameManager.SetItemLockTime(time);
}
// 创建缔造者
if(config["杂项功能开关"]["创建缔造者"]){
GameManager.OpenCreateJob_CreatorMage();
}
// 自动解除魔法封印
if(config["杂项功能开关"]["自动解除魔法封印"]){
GameManager.OpenRandomAutomaticUnblocking();
}
// 开启装备与时装镶嵌
if(config["杂项功能开关"]["开启装备与时装镶嵌"]){
GameManager.FixEquipUseJewel();
}
// 修复下线卡城镇
if(config["杂项功能开关"]["修复下线卡城镇"]){
GameManager.FixSaveTown();
}
// 修复绝望之塔金币异常
if(config["杂项功能开关"]["修复绝望之塔金币异常"]){
GameManager.FixDespairGold();
}
// 绝望之塔通关后可以用门票继续进入
if(config["杂项功能开关"]["绝望之塔通关后可以用门票继续进入"]){
Sq_WriteByteArr(S_Ptr("0x0864416F"), [0xEB, 0x47]);
}
// 修复绝望之塔每10层进不去副本
Cb_TowerOfDespairMgr_SendAPCInfo_Enter_Func._TowerOfDespair <- function(args) {
local config = GlobalConfig.Get("杂项功能开关_Nangua.json");
if(config["杂项功能开关"]["修复绝望之塔每10层进不去副本"]){
local this_ptr = args[0];
local tod_layer = args[1];
local user = args[2];
local apc_mgr = NativePointer(this_ptr).add(213 * 4).readPointer();
local layer = NativePointer(tod_layer).readU16();
local apc_info = Memory.alloc(0x100000);
local new_tod_layer = Memory.alloc(2);
new_tod_layer.writeU16(layer);
Sq_CallFunc(S_Ptr("0x085FED2E"), "void", ["pointer", "pointer", "pointer"], apc_mgr, new_tod_layer.C_Object, apc_info.C_Object);
}
}
// 设置每日可交易金币上限值
if(config["杂项功能开关"]["设置每日可交易金币上限值"][0]){
local max = config["杂项功能开关"]["设置每日可交易金币上限值"][1];
GameManager.FixGlodTradeDaily(max);
}
// 强化13以上免刷新
if(config["杂项功能开关"]["强化13以上免刷新"]){
GameManager.Fix_13Upgrade();
}
// 开启14格技能栏
if(config["杂项功能开关"]["开启14格技能栏"]){
GameManager.Fix14Skill();
}
// 修复拍卖行消耗品上架
if(config["杂项功能开关"]["修复拍卖行消耗品上架"]){
GameManager.Fix_Auction_Regist_Item();
}
// 副本内可丢弃物品品级
if(config["杂项功能开关"]["副本内可丢弃物品品级(开启后可丢弃粉装,3为装备品级)"][0]){
local level = config["杂项功能开关"]["副本内可丢弃物品品级(开启后可丢弃粉装,3为装备品级)"][1];
GameManager.FixDungeonDropGrade(level);
}
// 发送邮件时验证关闭
if(config["杂项功能开关"]["发送邮件时验证关闭"]){
GameManager.FixEmailRemovalVerification();
}
// 关闭商店回购
Cb_Item_IsBanRedeemItem_Leave_Func.BanRedeemItemByNangua <- function(args) {
local config = GlobalConfig.Get("杂项功能开关_Nangua.json");
if (config["杂项功能开关"]["关闭商店回购"]) {
return 1;
}
}
// 无视创建角色时间直接删除角色
Cb_User_CheckDeleteCharacTime_Leave_Func.DeleteCharacByNangua <- function(args) {
local config = GlobalConfig.Get("杂项功能开关_Nangua.json");
if (config["杂项功能开关"]["无视创建角色时间直接删除角色"]) {
return 1;
}
}
// 忽略在副本门口禁止摆摊
Cb_CPrivateStore_IsAreaNearEntranceDungeon_Leave_Func.PrivateStoreByNangua <- function(args) {
local config = GlobalConfig.Get("杂项功能开关_Nangua.json");
if (config["杂项功能开关"]["忽略在副本门口禁止摆摊"]) {
return 1;
}
}
// 脱离公会后可立马加入新公会
Cb_MonitorNoticeGuildSecede_dispatch_Enter_Func.DeleteSecedeByNangua <- function(args) {
local config = GlobalConfig.Get("杂项功能开关_Nangua.json");
if (config["杂项功能开关"]["脱离公会后可立马加入新公会"]) {
local SUser = User(args[1]);
local charac_no = SUser.GetCID();
local updateQuery = "UPDATE d_guild.guild_member SET secede_time = '0000-00-00 00:00:00' where charac_no=" + charac_no + ";";
local column_type_list = ["int"];
local SqlObj = MysqlPool.GetInstance().GetConnect();
SqlObj.Select(updateQuery, column_type_list);
MysqlPool.GetInstance().PutConnect(SqlObj);
}
}
//公会普通信息互通
Cb_MonitorNoticeGuildChatMsg_Leave_Func.GUildMessagetoCommonByNangua <- function(args) {
local config = GlobalConfig.Get("杂项功能开关_Nangua.json");
if (config["杂项功能开关"]["公会聊天互通"]) {
local SUser = User(args[1]);
local msgData = args[2];
local senderName = NativePointer(msgData).add(18).readUtf8String();
if (SUser.GetCharacName() == senderName) {
local Guild_name = SUser.GetGuildName();
_Dps_GuildmsgBynangua_Main_.SendMessagetoCommon(msgData, Guild_name);
}
}
}
//公会超链接信息互通
Cb_MonitorNoticeGuildChatMsgHyperLink_Leave_Func.GUildMessagetoHyperLinkByNangua <- function(args) {
local config = GlobalConfig.Get("杂项功能开关_Nangua.json");
local SUser = User(args[1]);
local msgData = args[2];
local senderName = NativePointer(msgData).add(18).readUtf8String();
if (config["杂项功能开关"]["公会聊天互通"] && SUser.GetCharacName() == senderName) {
local guild_name = SUser.GetGuildName();
local Pack = _Dps_GuildmsgBynangua_Main_.SendMessagetoHyperLink(msgData, guild_name);
local users = World.GetOnlinePlayer();
users.apply(function(Value) {
local onguildName = Value.GetGuildName()
local guildkey = Sq_CallFunc(S_Ptr("0x822F46C"), "int", ["pointer"], Value.C_Object);
if (onguildName != guild_name && guildkey > 0) {
Value.Send(Pack);
}
});
Pack.Delete();
}
}
class _Dps_GuildmsgBynangua_Main_ {
function SendMessagetoCommon(msg, guild_name) {
local Pack = Packet();
Pack.Put_Header(0, 65);
Pack.Put_Byte(6);
Pack.Put_Byte(0);
local name = NativePointer(msg).add(18).readUtf8String();
_Dps_GuildmsgBynangua_Main_.api_InterfacePacketBuf_put_string(Pack, name);
Pack.Put_Byte(0);
local msgLen = NativePointer(msg).add(0x30).readU8();
local content = NativePointer(msg).add(0x31);
local extraMsg = " [" + guild_name + "]跨公会信息";
local extraContent = Memory.allocUtf8String(extraMsg);
local extraLen = extraMsg.len();
local newMsgLen = msgLen + extraLen;
Pack.Put_Int(newMsgLen)
Pack.Put_BinaryEx(content.C_Object, msgLen);
Pack.Put_BinaryEx(extraContent.C_Object, extraLen);
Pack.Put_Byte(0);
Pack.Finalize(true);
local users = World.GetOnlinePlayer();
users.apply(function(Value) {
local onguildName = Value.GetGuildName()
local guildkey = Sq_CallFunc(S_Ptr("0x822F46C"), "int", ["pointer"], Value.C_Object);
if (onguildName != guild_name && guildkey > 0) {
Value.Send(Pack);
}
});
Pack.Delete();
}
function SendMessagetoHyperLink(msg, guild_name) {
local Pack = Packet();
Pack.Put_Header(0, 371);
Pack.Put_Byte(6);
Pack.Put_Byte(0);
// 角色名
local name = NativePointer(msg).add(18).readUtf8String();
_Dps_GuildmsgBynangua_Main_.api_InterfacePacketBuf_put_string(Pack, name);
Pack.Put_Byte(0);
local msgLen = NativePointer(msg).add(361).readU8();
local content = NativePointer(msg).add(362);
local extraMsg = " [" + guild_name + "]跨公会信息";
local extraContent = Memory.allocUtf8String(extraMsg);
local extraLen = extraMsg.len();
local newMsgLen = msgLen + extraLen;
Pack.Put_Int(newMsgLen)
Pack.Put_BinaryEx(content.C_Object, msgLen);
Pack.Put_BinaryEx(extraContent.C_Object, extraLen);
local itemCount = NativePointer(msg).add(48).readU8();
Pack.Put_Byte(itemCount);
for (local i = 0; i < itemCount; i++) {
Pack.Put_BinaryEx(NativePointer(msg).add(104 * i + 49).C_Object, 104);
}
Pack.Finalize(true);
return Pack;
}
function api_InterfacePacketBuf_put_string(Pack, s) {
local p = Memory.allocUtf8String(s);
local len = s.len();
Pack.Put_Int(len);
Pack.Put_BinaryEx(p.C_Object, len);
}
}
}