添加示例项目
This commit is contained in:
12
示例项目/任务清除卷/Proj.ifo
Normal file
12
示例项目/任务清除卷/Proj.ifo
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"ProjectName": "任务清除卷",
|
||||
"ProjectDescribe": "清理各类型任务以及重置相关任务",
|
||||
"ProjectAuthor": "南瓜",
|
||||
"ProjectVersion": 1.3,
|
||||
"ProjectConfig": "任务相关配置_南瓜.json",
|
||||
"ProjectFiles": [
|
||||
"任务清除卷.nut"
|
||||
],
|
||||
"ProjectIcon":"http://103.36.223.176:5244/d/DP_S/logo2.png?sign=aH3AjsyJgmomCqT3To_QfDY6a2RlSI-T3eUmtW0raoA=:0",
|
||||
"ProjectRunFunc": "_Dps_QuestInfo_nangua_Main_"
|
||||
}
|
||||
231
示例项目/任务清除卷/任务清除卷.nut
Normal file
231
示例项目/任务清除卷/任务清除卷.nut
Normal file
@@ -0,0 +1,231 @@
|
||||
_NG_QUEST_GRADE_COMMON_UNIQUE <- 5 //普通任务
|
||||
_NG_QUEST_GRADE_EPIC <- 0 //主线任务
|
||||
_NG_QUEST_GRADE_ACHIEVEMENT <- 2 //成就任务
|
||||
|
||||
// 任务类型与排除列表的映射
|
||||
_QUEST_EXCLUDE_MAP <- {
|
||||
[_NG_QUEST_GRADE_COMMON_UNIQUE] = "普通任务需排除任务ID",
|
||||
[_NG_QUEST_GRADE_ACHIEVEMENT] = "成就任务需排除任务ID",
|
||||
[_NG_QUEST_GRADE_EPIC] = "主线任务需排除任务ID"
|
||||
}
|
||||
|
||||
function clear_all_quest_by_character_level_nangua(SUser, Item_id) {
|
||||
local Cofig = GlobalConfig.Get("任务相关配置_南瓜.json");
|
||||
local poolMapping = {
|
||||
[Cofig["主线任务完成券道具ID"]] = _NG_QUEST_GRADE_EPIC,
|
||||
[Cofig["普通任务完成券道具ID"]] = _NG_QUEST_GRADE_COMMON_UNIQUE,
|
||||
[Cofig["成就任务完成券道具ID"]] = _NG_QUEST_GRADE_ACHIEVEMENT
|
||||
};
|
||||
// 获取对应的type
|
||||
local quest_type = poolMapping[Item_id];
|
||||
// 玩家任务信息
|
||||
local user_quest = SUser.GetQuest();
|
||||
|
||||
// 玩家已完成任务信息
|
||||
local WongWork_CQuestClear = NativePointer(user_quest).add(4);
|
||||
// 玩家当前等级
|
||||
local charac_lv = SUser.GetCharacLevel();
|
||||
// 本次完成任务数量
|
||||
local clear_quest_cnt = 0;
|
||||
// 获取pvf数据
|
||||
local data_manager = Sq_CallFunc(S_Ptr("0x80CC19B"), "pointer");
|
||||
|
||||
// 使用全局排除列表
|
||||
local exclude_quset_id = _QUEST_EXCLUDE_MAP.rawin(quest_type) ? Cofig[_QUEST_EXCLUDE_MAP[quest_type]] : [];
|
||||
|
||||
//完成当前已接任务
|
||||
for (local i = 0; i < 20; i++) {
|
||||
// 任务id
|
||||
local doing_quest_id = NativePointer(user_quest).add(4 * (i + 7500 + 2)).readInt();
|
||||
|
||||
if (doing_quest_id > 0) {
|
||||
// 获取当前任务的数据
|
||||
local quest = Sq_CallFunc(S_Ptr("0x835FDC6"), "pointer", ["pointer", "int"], data_manager, doing_quest_id);
|
||||
if (quest) {
|
||||
// 任务类型
|
||||
local quest_grade = NativePointer(quest).add(8).readInt();
|
||||
|
||||
// 判断任务类型并且不在排除列表中
|
||||
if (quest_grade == quest_type && exclude_quset_id.find(doing_quest_id) == null) {
|
||||
// 无条件完成任务
|
||||
SUser.ClearQuest_Gm(doing_quest_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 遍历所有任务ID
|
||||
for (local quest_id = 1; quest_id < 30000; quest_id++) {
|
||||
// 检查任务是否在排除列表中
|
||||
if (exclude_quset_id.find(quest_id) != null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 跳过已完成的任务
|
||||
local isCleared = isClearedQuest(WongWork_CQuestClear.C_Object, quest_id);
|
||||
if (isCleared) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 获取任务数据
|
||||
local quest = Sq_CallFunc(S_Ptr("0x835FDC6"), "pointer", ["pointer", "int"], data_manager, quest_id);
|
||||
if (quest) {
|
||||
// 任务类型
|
||||
local quest_grade = NativePointer(quest).add(8).readInt();
|
||||
|
||||
if (quest_grade == quest_type) {
|
||||
// 只判断任务最低等级要求 忽略 职业/前置 等任务要求 可一次性完成当前等级所有任务
|
||||
local quest_min_lv = NativePointer(quest).add(0x20).readInt();
|
||||
|
||||
if (quest_min_lv <= charac_lv) {
|
||||
Sq_CallFunc(S_Ptr("0x808BA78"), "int", ["pointer", "int"], WongWork_CQuestClear.C_Object, quest_id);
|
||||
|
||||
// 本次自动完成任务计数
|
||||
clear_quest_cnt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 通知客户端更新
|
||||
if (clear_quest_cnt > 0) {
|
||||
local Pack = Packet();
|
||||
Sq_CallFunc(S_Ptr("0x868B044"), "int", ["pointer"], SUser.C_Object);
|
||||
Sq_CallFunc(S_Ptr("0x86ABBA8"), "int", ["pointer", "pointer"], user_quest, Pack.C_Object);
|
||||
SUser.Send(Pack);
|
||||
Pack.Delete();
|
||||
// 公告通知客户端本次自动完成任务数据
|
||||
SUser.SendNotiPacketMessage("已自动完成当前等级任务数量: " + clear_quest_cnt, 8);
|
||||
}else{
|
||||
SUser.SendNotiPacketMessage("没有可清理的任务", 8);
|
||||
SUser.GiveItem(Item_id, 1);
|
||||
}
|
||||
}
|
||||
|
||||
//指定每日任务完成券
|
||||
function QUEST_ByMRFuncBynangua(SUser, ItemId) {
|
||||
local Cofig = GlobalConfig.Get("任务相关配置_南瓜.json");
|
||||
// 玩家已完成任务信息
|
||||
local user_quest = SUser.GetQuest();
|
||||
local WongWork_CQuestClear = NativePointer(user_quest).add(4);
|
||||
|
||||
// 是否有任务已被清理
|
||||
local anyTaskCleared = false;
|
||||
|
||||
// 遍历并完成每一个任务
|
||||
for (local i = 0; i < Cofig["指定完成每日任务ID"].len(); i++) {
|
||||
local quest_id = Cofig["指定完成每日任务ID"][i];
|
||||
local isCleared = isClearedQuest(WongWork_CQuestClear.C_Object, quest_id);
|
||||
|
||||
if (isCleared) {
|
||||
continue;
|
||||
} else {
|
||||
SUser.ClearQuest_Gm(quest_id);
|
||||
anyTaskCleared = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (anyTaskCleared) {
|
||||
SUser.SendNotiPacketMessage("指定每日任务已完成!", 8);
|
||||
} else {
|
||||
SUser.SendNotiPacketMessage("没有可清理的任务", 8);
|
||||
SUser.GiveItem(ItemId, 1);
|
||||
}
|
||||
}
|
||||
|
||||
//指定每日任务重置券
|
||||
function QUEST_ByCZMRFuncBynangua(SUser, ItemId) {
|
||||
local Cofig = GlobalConfig.Get("任务相关配置_南瓜.json");
|
||||
// 玩家已完成任务信息
|
||||
local user_quest = SUser.GetQuest();
|
||||
local WongWork_CQuestClear = NativePointer(user_quest).add(4);
|
||||
|
||||
// 是否有任务被重置
|
||||
local anyTaskReset = false;
|
||||
|
||||
// 遍历并重置每一个任务
|
||||
for (local i = 0; i < Cofig["指定完成每日任务ID"].len(); i++) {
|
||||
local quest_id = Cofig["指定完成每日任务ID"][i];
|
||||
local isCleared = isClearedQuest(WongWork_CQuestClear.C_Object, quest_id);
|
||||
|
||||
if (!isCleared) {
|
||||
continue;
|
||||
} else {
|
||||
Sq_CallFunc(S_Ptr("0x808BAAC"), "int", ["pointer", "int"], WongWork_CQuestClear.C_Object, quest_id);
|
||||
anyTaskReset = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (anyTaskReset) {
|
||||
//通知客户端更新任务列表
|
||||
Sq_CallFunc(S_Ptr("0x868B044"), "int", ["pointer"], SUser.C_Object);
|
||||
local Pack = Packet();
|
||||
Sq_CallFunc(S_Ptr("0x86ABBA8"), "int", ["pointer", "pointer"], user_quest, Pack.C_Object);
|
||||
SUser.Send(Pack);
|
||||
Pack.Delete();
|
||||
SUser.SendNotiPacketMessage("指定每日任务已重置!", 8);
|
||||
} else {
|
||||
SUser.SendNotiPacketMessage("没有可重置的任务", 8);
|
||||
SUser.GiveItem(ItemId, 1);
|
||||
}
|
||||
}
|
||||
|
||||
//重置所有任务为未完成状态
|
||||
function QUEST_ByALLFuncBynangua(SUser, ItemId) {
|
||||
local GetState = SUser.GetState()
|
||||
local user_quest = SUser.GetQuest();
|
||||
local WongWork_CQuestClear = NativePointer(user_quest).add(4);
|
||||
//清空已接任务列表
|
||||
for (local i = 0; i < 20; i++) {
|
||||
NativePointer(user_quest).add(4 * (i + 7500 + 2)).writeInt(0);
|
||||
}
|
||||
//所有任务设置未完成状态
|
||||
for (local i = 0; i < 29999; i++) {
|
||||
Sq_CallFunc(S_Ptr("0x808BAAC"), "int", ["pointer", "int"], WongWork_CQuestClear.C_Object, i);
|
||||
}
|
||||
//通知客户端更新任务列表
|
||||
Sq_CallFunc(S_Ptr("0x868B044"), "int", ["pointer"], SUser.C_Object);
|
||||
local Pack = Packet();
|
||||
Sq_CallFunc(S_Ptr("0x86ABBA8"), "int", ["pointer", "pointer"], user_quest, Pack.C_Object);
|
||||
SUser.Send(Pack);
|
||||
Pack.Delete();
|
||||
SUser.SendNotiPacketMessage("所有任务已重置!", 8);
|
||||
}
|
||||
|
||||
function isClearedQuest(C_Object, questID) {
|
||||
return Sq_CallFunc(S_Ptr("0x808BAE0"), "bool", ["pointer", "int"], C_Object, questID);
|
||||
}
|
||||
|
||||
//加载入口
|
||||
function _Dps_QuestInfo_nangua_Main_() {
|
||||
_Dps_QuestInfo_nangua_Logic_();
|
||||
}
|
||||
|
||||
//重载入口
|
||||
function _Dps_QuestInfo_nangua_Main_Reload_(OldConfig) {
|
||||
Cb_Use_Item_Sp_Func.rawdelete(OldConfig["主线任务完成券道具ID"].tointeger());
|
||||
Cb_Use_Item_Sp_Func.rawdelete(OldConfig["普通任务完成券道具ID"].tointeger());
|
||||
Cb_Use_Item_Sp_Func.rawdelete(OldConfig["成就任务完成券道具ID"].tointeger());
|
||||
Cb_Use_Item_Sp_Func.rawdelete(OldConfig["指定每日任务完成券道具ID"].tointeger());
|
||||
Cb_Use_Item_Sp_Func.rawdelete(OldConfig["指定每日任务重置券道具ID"].tointeger());
|
||||
Cb_Use_Item_Sp_Func.rawdelete(OldConfig["重置所有任务道具ID"].tointeger());
|
||||
|
||||
//重新注册
|
||||
_Dps_QuestInfo_nangua_Logic_();
|
||||
}
|
||||
|
||||
function _Dps_QuestInfo_nangua_Logic_() {
|
||||
local Cofig = GlobalConfig.Get("任务相关配置_南瓜.json");
|
||||
// 主线任务完成券
|
||||
Cb_Use_Item_Sp_Func[Cofig["主线任务完成券道具ID"]] <- clear_all_quest_by_character_level_nangua;
|
||||
// 普通任务完成券
|
||||
Cb_Use_Item_Sp_Func[Cofig["普通任务完成券道具ID"]] <- clear_all_quest_by_character_level_nangua;
|
||||
// 成就任务完成券
|
||||
Cb_Use_Item_Sp_Func[Cofig["成就任务完成券道具ID"]] <- clear_all_quest_by_character_level_nangua;
|
||||
// 每日任务完成券
|
||||
Cb_Use_Item_Sp_Func[Cofig["指定每日任务完成券道具ID"]] <- QUEST_ByMRFuncBynangua;
|
||||
// 每日任务重置券
|
||||
Cb_Use_Item_Sp_Func[Cofig["指定每日任务重置券道具ID"]] <- QUEST_ByCZMRFuncBynangua;
|
||||
// 所有任务重置券
|
||||
Cb_Use_Item_Sp_Func[Cofig["重置所有任务道具ID"]] <- QUEST_ByALLFuncBynangua;
|
||||
}
|
||||
12
示例项目/任务清除卷/任务相关配置_南瓜.json
Normal file
12
示例项目/任务清除卷/任务相关配置_南瓜.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"主线任务完成券道具ID":2021458801,
|
||||
"普通任务完成券道具ID":2021458802,
|
||||
"成就任务完成券道具ID":2021458804,
|
||||
"重置所有任务道具ID":2021458813,
|
||||
"指定每日任务完成券道具ID":2021458803,
|
||||
"指定每日任务重置券道具ID":20214588091,
|
||||
"指定完成每日任务ID":[2411, 2412],
|
||||
"主线任务需排除任务ID":[1111111],
|
||||
"普通任务需排除任务ID":[4443, 7898, 7889, 7895, 7892, 7873, 7876, 7870, 7879, 4065, 4068, 999, 7827, 7817, 7824, 7820, 7834, 7837, 7831, 7840, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 7848, 7842, 7845, 7851, 7866, 7855, 7862, 7859, 7814, 7810, 7807, 7803, 7886, 7882, 2708, 2710, 2712, 2702],
|
||||
"成就任务需排除任务ID":[1111111]
|
||||
}
|
||||
Reference in New Issue
Block a user