修改任务系统
This commit is contained in:
parent
405fed5123
commit
5112693089
11 changed files with 1645 additions and 1013 deletions
214
.codex/mcp_996_gui_proxy.js
Normal file
214
.codex/mcp_996_gui_proxy.js
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
const URL = process.env.MCP_996_GUI_URL;
|
||||
const AUTH = process.env.MCP_996_GUI_AUTH;
|
||||
const fs = require("fs");
|
||||
const LOG = process.env.MCP_996_GUI_LOG || "C:\\Users\\Administrator\\.codex\\mcp_996_gui_proxy.log";
|
||||
|
||||
function log(message) {
|
||||
try {
|
||||
fs.appendFileSync(LOG, `${new Date().toISOString()} ${message}\n`, "utf8");
|
||||
} catch {
|
||||
// Logging must never break the MCP server.
|
||||
}
|
||||
}
|
||||
|
||||
log(`start pid=${process.pid}`);
|
||||
|
||||
const tools = [
|
||||
{
|
||||
name: "list_rule_files",
|
||||
description: "List all client GUI API rule files.",
|
||||
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
||||
},
|
||||
{
|
||||
name: "list_versions",
|
||||
description: "List available client GUI API versions.",
|
||||
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
||||
},
|
||||
{
|
||||
name: "list_apis",
|
||||
description: "Search client GUI APIs by keyword.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
keyword: { type: "string", default: "" },
|
||||
limit: { type: "integer", default: 50 },
|
||||
version: { type: "string", default: "" },
|
||||
},
|
||||
additionalProperties: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "generate_lua",
|
||||
description: "Generate client Lua code from the original natural language query.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
query: { type: "string" },
|
||||
top_k: { type: "integer", default: 3 },
|
||||
version: { type: "string", default: "" },
|
||||
},
|
||||
required: ["query"],
|
||||
additionalProperties: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "generate_lua_996",
|
||||
description: "Alias of generate_lua for 996 API client GUI code generation.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
query: { type: "string" },
|
||||
top_k: { type: "integer", default: 3 },
|
||||
version: { type: "string", default: "" },
|
||||
},
|
||||
required: ["query"],
|
||||
additionalProperties: false,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
let input = Buffer.alloc(0);
|
||||
|
||||
process.stdin.on("data", (chunk) => {
|
||||
log(`stdin bytes=${chunk.length}`);
|
||||
input = Buffer.concat([input, chunk]);
|
||||
readMessages();
|
||||
});
|
||||
|
||||
process.stdin.on("end", () => log("stdin end"));
|
||||
process.on("uncaughtException", (error) => log(`uncaught ${error.stack || error.message || error}`));
|
||||
|
||||
function readMessages() {
|
||||
while (true) {
|
||||
let headerEnd = input.indexOf("\r\n\r\n");
|
||||
let separatorLength = 4;
|
||||
if (headerEnd < 0) {
|
||||
headerEnd = input.indexOf("\n\n");
|
||||
separatorLength = 2;
|
||||
}
|
||||
if (headerEnd < 0) return;
|
||||
|
||||
const header = input.slice(0, headerEnd).toString("ascii");
|
||||
const match = /Content-Length:\s*(\d+)/i.exec(header);
|
||||
if (!match) {
|
||||
input = input.slice(headerEnd + separatorLength);
|
||||
continue;
|
||||
}
|
||||
|
||||
const length = Number(match[1]);
|
||||
const start = headerEnd + separatorLength;
|
||||
const end = start + length;
|
||||
if (input.length < end) return;
|
||||
|
||||
const body = input.slice(start, end).toString("utf8");
|
||||
input = input.slice(end);
|
||||
|
||||
log(`message ${body}`);
|
||||
handle(JSON.parse(body)).catch((error) => {
|
||||
respond(JSON.parse(body).id, null, {
|
||||
code: -32603,
|
||||
message: error && error.message ? error.message : String(error),
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function handle(message) {
|
||||
if (message.id === undefined) return;
|
||||
log(`handle ${message.method}`);
|
||||
|
||||
if (message.method === "initialize") {
|
||||
respond(message.id, {
|
||||
protocolVersion: message.params?.protocolVersion || "2025-03-26",
|
||||
capabilities: { tools: { listChanged: false } },
|
||||
serverInfo: { name: "996 Client GUI Proxy", version: "1.0.0" },
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.method === "tools/list") {
|
||||
respond(message.id, { tools });
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.method === "tools/call") {
|
||||
const name = message.params?.name;
|
||||
const args = message.params?.arguments || {};
|
||||
const result = await callRemote(name, args);
|
||||
respond(message.id, { content: [{ type: "text", text: stringifyResult(result) }] });
|
||||
return;
|
||||
}
|
||||
|
||||
respond(message.id, null, { code: -32601, message: `Unknown method: ${message.method}` });
|
||||
}
|
||||
|
||||
async function callRemote(name, args) {
|
||||
if (!URL || !AUTH) throw new Error("MCP_996_GUI_URL or MCP_996_GUI_AUTH is missing");
|
||||
|
||||
const init = await post(null, {
|
||||
jsonrpc: "2.0",
|
||||
id: 1,
|
||||
method: "initialize",
|
||||
params: {
|
||||
protocolVersion: "2025-03-26",
|
||||
capabilities: {},
|
||||
clientInfo: { name: "codex-996-gui-proxy", version: "1.0.0" },
|
||||
},
|
||||
});
|
||||
|
||||
const session = init.session;
|
||||
await post(session, { jsonrpc: "2.0", method: "notifications/initialized", params: {} });
|
||||
|
||||
const response = await post(session, {
|
||||
jsonrpc: "2.0",
|
||||
id: 2,
|
||||
method: "tools/call",
|
||||
params: { name, arguments: args },
|
||||
});
|
||||
return response.data?.result ?? response.data;
|
||||
}
|
||||
|
||||
async function post(session, payload) {
|
||||
const headers = {
|
||||
Authorization: AUTH,
|
||||
Accept: "application/json, text/event-stream",
|
||||
"Content-Type": "application/json",
|
||||
};
|
||||
if (session) headers["mcp-session-id"] = session;
|
||||
|
||||
const response = await fetch(URL, {
|
||||
method: "POST",
|
||||
headers,
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
|
||||
const text = await response.text();
|
||||
if (!response.ok) throw new Error(`Remote MCP HTTP ${response.status}: ${text}`);
|
||||
|
||||
return {
|
||||
session: response.headers.get("mcp-session-id"),
|
||||
data: parseMcpBody(text),
|
||||
};
|
||||
}
|
||||
|
||||
function parseMcpBody(text) {
|
||||
if (!text || !text.trim()) return null;
|
||||
const dataLine = text
|
||||
.split(/\r?\n/)
|
||||
.find((line) => line.startsWith("data:"));
|
||||
return JSON.parse(dataLine ? dataLine.slice(5).trim() : text);
|
||||
}
|
||||
|
||||
function stringifyResult(result) {
|
||||
if (typeof result === "string") return result;
|
||||
return JSON.stringify(result, null, 2);
|
||||
}
|
||||
|
||||
function respond(id, result, error) {
|
||||
const payload = error
|
||||
? { jsonrpc: "2.0", id, error }
|
||||
: { jsonrpc: "2.0", id, result };
|
||||
const body = JSON.stringify(payload);
|
||||
log(`respond id=${id} bytes=${Buffer.byteLength(body, "utf8")} error=${Boolean(error)}`);
|
||||
process.stdout.write(`Content-Length: ${Buffer.byteLength(body, "utf8")}\r\n\r\n${body}`);
|
||||
}
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -27,3 +27,6 @@ Mirserver/Mir200/!Setup.txt
|
|||
Mirserver/DBServer/dbsrc.ini
|
||||
client/env.json
|
||||
|
||||
# Local Codex MCP config
|
||||
.codex/config.toml
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ ServerName=996Mir
|
|||
ServerAddr=127.0.0.1
|
||||
GatePort=7200
|
||||
GateAddr=127.0.0.1
|
||||
ServerPath=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\DBServer\
|
||||
ServerPath=E:\传奇版本\bayuMir\Mirserver\DBServer\
|
||||
plateformid=1881
|
||||
DynamicIPMode=0
|
||||
Attack=0
|
||||
|
|
@ -28,12 +28,12 @@ ServerID=1881
|
|||
ServerType=0
|
||||
|
||||
[DBSetup]
|
||||
HeroDBName=box_6
|
||||
SQLIP=10.10.10.1
|
||||
HeroDBName=box
|
||||
SQLIP=127.0.0.1
|
||||
SQLUSERNAME=sa
|
||||
SQLPASSWORD=www.996m2.com
|
||||
SQLPORT=1433
|
||||
|
||||
[DB]
|
||||
LogDir=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\DBServer\\Log\
|
||||
LogDir=E:\传奇版本\bayuMir\Mirserver\DBServer\\Log\
|
||||
|
||||
|
|
|
|||
|
|
@ -221,18 +221,18 @@ BoneKingMonster1=BoneCaptain
|
|||
BoneKingMonster2=BoneArcher
|
||||
BoneKingMonster3=BoneSpearman
|
||||
[Share]
|
||||
BaseDir=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\share\
|
||||
GuildDir=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\GuildBase\Guilds\
|
||||
GuildFile=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\ShareV\
|
||||
BaseDir=E:\传奇版本\bayuMir\Mirserver\Mir200\share\
|
||||
GuildDir=E:\传奇版本\bayuMir\Mirserver\Mir200\GuildBase\Guilds\
|
||||
GuildFile=E:\传奇版本\bayuMir\Mirserver\Mir200\ShareV\
|
||||
VentureDir=d:\Mirserver11\Mir200\ShareV\
|
||||
ConLogDir=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\ConLogDir\
|
||||
CastleDir=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\Castle\
|
||||
EnvirDir=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\Envir\
|
||||
MapDir=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\map\
|
||||
NoticeDir=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\Notice\
|
||||
ConLogDir=E:\传奇版本\bayuMir\Mirserver\Mir200\ConLogDir\
|
||||
CastleDir=E:\传奇版本\bayuMir\Mirserver\Mir200\Castle\
|
||||
EnvirDir=E:\传奇版本\bayuMir\Mirserver\Mir200\Envir\
|
||||
MapDir=E:\传奇版本\bayuMir\Mirserver\Mir200\map\
|
||||
NoticeDir=E:\传奇版本\bayuMir\Mirserver\Mir200\Notice\
|
||||
PlugDir=.\
|
||||
LogDir=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\Log\
|
||||
CastleFile=F:\°ËÓò¹¥ËÙ\bayuMir\Mirserver\Mir200\Castle\List.txt
|
||||
LogDir=E:\传奇版本\bayuMir\Mirserver\Mir200\Log\
|
||||
CastleFile=E:\传奇版本\bayuMir\Mirserver\Mir200\Castle\List.txt
|
||||
PayMentPointName=秒卡点
|
||||
ChatDir=.\ChatLog\
|
||||
GameGold=人民币
|
||||
|
|
|
|||
113
Mirserver/Mir200/Envir/QuestDiary/cfgcsv/cfg_主线任务 - 复制.lua
Normal file
113
Mirserver/Mir200/Envir/QuestDiary/cfgcsv/cfg_主线任务 - 复制.lua
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
-- cfg_主线任务
|
||||
local config = {
|
||||
[1] = {
|
||||
id = 1,
|
||||
next = 2,
|
||||
enabled = true,
|
||||
title = "[主线]了解首充",
|
||||
desc = "了解首充后,前往任意地图击杀任意怪物5只。",
|
||||
doingDesc = "前往任意地图击杀任意怪物。",
|
||||
rewardText = "经验100万、金币5000",
|
||||
visit = { type = "module", keys = { "ShouChongOBJ" }, open = "ShouChongOBJ_main" },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "money", "金币", 5000 } },
|
||||
},
|
||||
[2] = {
|
||||
id = 2,
|
||||
next = 3,
|
||||
enabled = true,
|
||||
title = "[主线]拜访渡劫天尊",
|
||||
desc = "拜访渡劫天尊后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、金币10000",
|
||||
visit = { type = "npc", ids = { 6 }, scripts = { "转生" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[3] = {
|
||||
id = 3,
|
||||
next = 4,
|
||||
enabled = true,
|
||||
title = "[主线]拜访神兽淬体",
|
||||
desc = "拜访神兽淬体后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "神兽之血*50、神兽之骨*50",
|
||||
visit = { type = "npc", ids = { 5 }, scripts = { "神兽淬体" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "item", "神兽之血", 50, 0 }, { "item", "神兽之骨", 50, 0 } },
|
||||
},
|
||||
[4] = {
|
||||
id = 4,
|
||||
next = 5,
|
||||
enabled = true,
|
||||
title = "[主线]拜访紫金仙人",
|
||||
desc = "拜访紫金仙人后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、千年玄石*50、金币10000",
|
||||
visit = { type = "npc", ids = { 189 }, scripts = { "紫金葫芦" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "item", "千年玄石", 50, 0 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[5] = {
|
||||
id = 5,
|
||||
next = 6,
|
||||
enabled = true,
|
||||
title = "[主线]了解绝学NPC",
|
||||
desc = "了解绝学NPC后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "灵石*50、武林秘籍*1",
|
||||
visit = { type = "npc", ids = { 12 }, scripts = { "绝学修炼" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "item", "灵石", 50, 0 }, { "item", "武林秘籍", 1, 0 } },
|
||||
},
|
||||
[6] = {
|
||||
id = 6,
|
||||
next = 7,
|
||||
enabled = true,
|
||||
title = "[主线]拜访幸运仙子",
|
||||
desc = "拜访幸运仙子后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、金币10000",
|
||||
visit = { type = "npc", ids = { 11 }, scripts = { "幸运项链" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[7] = {
|
||||
id = 7,
|
||||
next = 8,
|
||||
enabled = true,
|
||||
title = "[主线]前往装备重铸",
|
||||
desc = "前往装备重铸后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、金币10000",
|
||||
visit = { type = "npc", ids = { 10 }, scripts = { "装备重铸" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[8] = {
|
||||
id = 8,
|
||||
next = 9,
|
||||
enabled = true,
|
||||
title = "[主线]前往武器升级",
|
||||
desc = "前往武器升级后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "黑铁矿石*4、金币10000",
|
||||
visit = { type = "npc", ids = { 13 }, scripts = { "武器升级" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "item", "黑铁矿石", 4, 0 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[9] = {
|
||||
id = 9,
|
||||
next = nil,
|
||||
enabled = true,
|
||||
title = "[主线]任务结束",
|
||||
desc = "主线任务已完成。",
|
||||
doingDesc = "主线任务已完成。",
|
||||
rewardText = "无",
|
||||
visit = nil,
|
||||
target = nil,
|
||||
rewards = {},
|
||||
finish = true,
|
||||
},
|
||||
}
|
||||
return config
|
||||
285
Mirserver/Mir200/Envir/QuestDiary/cfgcsv/cfg_主线任务.lua
Normal file
285
Mirserver/Mir200/Envir/QuestDiary/cfgcsv/cfg_主线任务.lua
Normal file
|
|
@ -0,0 +1,285 @@
|
|||
-- cfg_主线任务
|
||||
local config = {
|
||||
[1] = {
|
||||
next = 2,
|
||||
enabled = true,
|
||||
title = "[主线]了解首充",
|
||||
desc = "了解首充后,前往任意地图击杀任意怪物5只。",
|
||||
doingDesc = "前往任意地图击杀任意怪物。",
|
||||
rewardText = "经验100万、金币5000",
|
||||
visit_type = "module",
|
||||
ShouChongOBJ = "",
|
||||
visit_open = "ShouChongOBJ_main",
|
||||
visit_ids_1 = 0,
|
||||
visit_scripts_1 = "",
|
||||
target_type = "kill_mon",
|
||||
target_count = 5,
|
||||
target_map = "*",
|
||||
target_mon = "*",
|
||||
finish = false,
|
||||
reward = {
|
||||
[1] = {
|
||||
type = "money",
|
||||
name = "经验",
|
||||
num = 1000000,
|
||||
bind = 0,
|
||||
},
|
||||
[2] = {
|
||||
type = "money",
|
||||
name = "金币",
|
||||
num = 5000,
|
||||
bind = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
next = 3,
|
||||
enabled = true,
|
||||
title = "[主线]拜访渡劫天尊",
|
||||
desc = "拜访渡劫天尊后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、金币10000",
|
||||
visit_type = "npc",
|
||||
ShouChongOBJ = "",
|
||||
visit_open = "",
|
||||
visit_ids_1 = 6,
|
||||
visit_scripts_1 = "转生",
|
||||
target_type = "kill_mon",
|
||||
target_count = 5,
|
||||
target_map = "*",
|
||||
target_mon = "*",
|
||||
finish = false,
|
||||
reward = {
|
||||
[1] = {
|
||||
type = "money",
|
||||
name = "经验",
|
||||
num = 1000000,
|
||||
bind = 0,
|
||||
},
|
||||
[2] = {
|
||||
type = "money",
|
||||
name = "金币",
|
||||
num = 10000,
|
||||
bind = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
next = 4,
|
||||
enabled = true,
|
||||
title = "[主线]拜访神兽淬体",
|
||||
desc = "拜访神兽淬体后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "神兽之血*50、神兽之骨*50",
|
||||
visit_type = "npc",
|
||||
ShouChongOBJ = "",
|
||||
visit_open = "",
|
||||
visit_ids_1 = 5,
|
||||
visit_scripts_1 = "神兽淬体",
|
||||
target_type = "kill_mon",
|
||||
target_count = 5,
|
||||
target_map = "*",
|
||||
target_mon = "*",
|
||||
finish = false,
|
||||
reward = {
|
||||
[1] = {
|
||||
type = "item",
|
||||
name = "神兽之血",
|
||||
num = 50,
|
||||
bind = 0,
|
||||
},
|
||||
[2] = {
|
||||
type = "item",
|
||||
name = "神兽之骨",
|
||||
num = 50,
|
||||
bind = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
next = 5,
|
||||
enabled = true,
|
||||
title = "[主线]拜访紫金仙人",
|
||||
desc = "拜访紫金仙人后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、千年玄石*50、金币10000",
|
||||
visit_type = "npc",
|
||||
ShouChongOBJ = "",
|
||||
visit_open = "",
|
||||
visit_ids_1 = 189,
|
||||
visit_scripts_1 = "紫金葫芦",
|
||||
target_type = "kill_mon",
|
||||
target_count = 5,
|
||||
target_map = "*",
|
||||
target_mon = "*",
|
||||
finish = false,
|
||||
reward = {
|
||||
[1] = {
|
||||
type = "money",
|
||||
name = "经验",
|
||||
num = 1000000,
|
||||
bind = 0,
|
||||
},
|
||||
[2] = {
|
||||
type = "item",
|
||||
name = "千年玄石",
|
||||
num = 50,
|
||||
bind = 0,
|
||||
},
|
||||
[3] = {
|
||||
type = "money",
|
||||
name = "金币",
|
||||
num = 10000,
|
||||
bind = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
next = 6,
|
||||
enabled = true,
|
||||
title = "[主线]了解绝学NPC",
|
||||
desc = "了解绝学NPC后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "灵石*50、武林秘籍*1",
|
||||
visit_type = "npc",
|
||||
ShouChongOBJ = "",
|
||||
visit_open = "",
|
||||
visit_ids_1 = 12,
|
||||
visit_scripts_1 = "绝学修炼",
|
||||
target_type = "kill_mon",
|
||||
target_count = 5,
|
||||
target_map = "*",
|
||||
target_mon = "*",
|
||||
finish = false,
|
||||
reward = {
|
||||
[1] = {
|
||||
type = "item",
|
||||
name = "灵石",
|
||||
num = 50,
|
||||
bind = 0,
|
||||
},
|
||||
[2] = {
|
||||
type = "item",
|
||||
name = "武林秘籍",
|
||||
num = 1,
|
||||
bind = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
next = 7,
|
||||
enabled = true,
|
||||
title = "[主线]拜访幸运仙子",
|
||||
desc = "拜访幸运仙子后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、金币10000",
|
||||
visit_type = "npc",
|
||||
ShouChongOBJ = "",
|
||||
visit_open = "",
|
||||
visit_ids_1 = 11,
|
||||
visit_scripts_1 = "幸运项链",
|
||||
target_type = "kill_mon",
|
||||
target_count = 5,
|
||||
target_map = "*",
|
||||
target_mon = "*",
|
||||
finish = false,
|
||||
reward = {
|
||||
[1] = {
|
||||
type = "money",
|
||||
name = "经验",
|
||||
num = 1000000,
|
||||
bind = 0,
|
||||
},
|
||||
[2] = {
|
||||
type = "money",
|
||||
name = "金币",
|
||||
num = 10000,
|
||||
bind = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
next = 8,
|
||||
enabled = true,
|
||||
title = "[主线]前往装备重铸",
|
||||
desc = "前往装备重铸后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、金币10000",
|
||||
visit_type = "npc",
|
||||
ShouChongOBJ = "",
|
||||
visit_open = "",
|
||||
visit_ids_1 = 10,
|
||||
visit_scripts_1 = "装备重铸",
|
||||
target_type = "kill_mon",
|
||||
target_count = 5,
|
||||
target_map = "*",
|
||||
target_mon = "*",
|
||||
finish = false,
|
||||
reward = {
|
||||
[1] = {
|
||||
type = "money",
|
||||
name = "经验",
|
||||
num = 1000000,
|
||||
bind = 0,
|
||||
},
|
||||
[2] = {
|
||||
type = "money",
|
||||
name = "金币",
|
||||
num = 10000,
|
||||
bind = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
next = 9,
|
||||
enabled = true,
|
||||
title = "[主线]前往武器升级",
|
||||
desc = "前往武器升级后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "黑铁矿石*4、金币10000",
|
||||
visit_type = "npc",
|
||||
ShouChongOBJ = "",
|
||||
visit_open = "",
|
||||
visit_ids_1 = 13,
|
||||
visit_scripts_1 = "武器升级",
|
||||
target_type = "kill_mon",
|
||||
target_count = 5,
|
||||
target_map = "*",
|
||||
target_mon = "*",
|
||||
finish = false,
|
||||
reward = {
|
||||
[1] = {
|
||||
type = "item",
|
||||
name = "黑铁矿石",
|
||||
num = 4,
|
||||
bind = 0,
|
||||
},
|
||||
[2] = {
|
||||
type = "money",
|
||||
name = "金币",
|
||||
num = 10000,
|
||||
bind = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
[9] = {
|
||||
next = 0,
|
||||
enabled = true,
|
||||
title = "[主线]任务结束",
|
||||
desc = "主线任务已完成。",
|
||||
doingDesc = "主线任务已完成。",
|
||||
rewardText = "无",
|
||||
visit_type = "",
|
||||
ShouChongOBJ = "",
|
||||
visit_open = "",
|
||||
visit_ids_1 = 0,
|
||||
visit_scripts_1 = "",
|
||||
target_type = "",
|
||||
target_count = 0,
|
||||
target_map = "",
|
||||
target_mon = "",
|
||||
finish = true,
|
||||
reward = {},
|
||||
},
|
||||
}
|
||||
return config
|
||||
|
|
@ -5,117 +5,67 @@ MainLineTaskOBJ.STATUS_WAIT_VISIT = 0
|
|||
MainLineTaskOBJ.STATUS_DOING = 1
|
||||
MainLineTaskOBJ.STATUS_FINISH = 9
|
||||
|
||||
MainLineTaskOBJ.cfg = {
|
||||
[1] = {
|
||||
id = 1,
|
||||
next = 2,
|
||||
enabled = true,
|
||||
title = "[主线]了解首充",
|
||||
desc = "了解首充后,前往任意地图击杀任意怪物5只。",
|
||||
doingDesc = "前往任意地图击杀任意怪物。",
|
||||
rewardText = "经验100万、金币5000",
|
||||
visit = { type = "module", keys = { "ShouChongOBJ" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "money", "金币", 5000 } },
|
||||
},
|
||||
[2] = {
|
||||
id = 2,
|
||||
next = 3,
|
||||
enabled = true,
|
||||
title = "[主线]拜访渡劫天尊",
|
||||
desc = "拜访渡劫天尊后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、金币10000",
|
||||
visit = { type = "npc", ids = { 6 }, scripts = { "转生" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[3] = {
|
||||
id = 3,
|
||||
next = 4,
|
||||
enabled = true,
|
||||
title = "[主线]拜访神兽淬体",
|
||||
desc = "拜访神兽淬体后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "神兽之血*50、神兽之骨*50",
|
||||
visit = { type = "npc", ids = { 5 }, scripts = { "神兽淬体" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "item", "神兽之血", 50, 0 }, { "item", "神兽之骨", 50, 0 } },
|
||||
},
|
||||
[4] = {
|
||||
id = 4,
|
||||
next = 5,
|
||||
enabled = true,
|
||||
title = "[主线]拜访紫金仙人",
|
||||
desc = "拜访紫金仙人后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、千年玄石*50、金币10000",
|
||||
visit = { type = "npc", ids = { 189 }, scripts = { "紫金葫芦" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "item", "千年玄石", 50, 0 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[5] = {
|
||||
id = 5,
|
||||
next = 6,
|
||||
enabled = true,
|
||||
title = "[主线]了解绝学NPC",
|
||||
desc = "了解绝学NPC后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "灵石*50、武林秘籍*1",
|
||||
visit = { type = "npc", ids = { 12 }, scripts = { "绝学修炼" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "item", "灵石", 50, 0 }, { "item", "武林秘籍", 1, 0 } },
|
||||
},
|
||||
[6] = {
|
||||
id = 6,
|
||||
next = 7,
|
||||
enabled = true,
|
||||
title = "[主线]拜访幸运仙子",
|
||||
desc = "拜访幸运仙子后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、金币10000",
|
||||
visit = { type = "npc", ids = { 11 }, scripts = { "幸运项链" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[7] = {
|
||||
id = 7,
|
||||
next = 8,
|
||||
enabled = true,
|
||||
title = "[主线]前往装备重铸",
|
||||
desc = "前往装备重铸后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "经验100万、金币10000",
|
||||
visit = { type = "npc", ids = { 10 }, scripts = { "装备重铸" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "money", "经验", 1000000 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[8] = {
|
||||
id = 8,
|
||||
next = 9,
|
||||
enabled = true,
|
||||
title = "[主线]前往武器升级",
|
||||
desc = "前往武器升级后,前往任意地图击杀怪物5只。",
|
||||
doingDesc = "前往任意地图击杀怪物。",
|
||||
rewardText = "黑铁矿石*4、金币10000",
|
||||
visit = { type = "npc", ids = { 13 }, scripts = { "武器升级" } },
|
||||
target = { type = "kill_mon", count = 5, map = "*", mon = "*" },
|
||||
rewards = { { "item", "黑铁矿石", 4, 0 }, { "money", "金币", 10000 } },
|
||||
},
|
||||
[9] = {
|
||||
id = 9,
|
||||
next = nil,
|
||||
enabled = true,
|
||||
title = "[主线]任务结束",
|
||||
desc = "主线任务已完成。",
|
||||
doingDesc = "主线任务已完成。",
|
||||
rewardText = "无",
|
||||
visit = nil,
|
||||
target = nil,
|
||||
rewards = {},
|
||||
finish = true,
|
||||
},
|
||||
MainLineTaskOBJ.cfg = Func.require("cfg_Ö÷ÏßÈÎÎñ")
|
||||
|
||||
local function appendCfgValue(list, value)
|
||||
if value == nil or value == "" or tonumber(value) == 0 then
|
||||
return
|
||||
end
|
||||
table.insert(list, value)
|
||||
end
|
||||
|
||||
local function normalizeTaskCfg(cfg)
|
||||
for id, task in pairs(cfg or {}) do
|
||||
task.id = tonumber(task.id or id) or id
|
||||
|
||||
if not task.visit and task.visit_type and task.visit_type ~= "" then
|
||||
local visit = { type = task.visit_type }
|
||||
if visit.type == "module" then
|
||||
visit.keys = {}
|
||||
appendCfgValue(visit.keys, task.visit_keys_1)
|
||||
if #visit.keys <= 0 and task.ShouChongOBJ ~= nil then
|
||||
table.insert(visit.keys, "ShouChongOBJ")
|
||||
end
|
||||
if #visit.keys <= 0 and task.visit_open and task.visit_open ~= "" then
|
||||
table.insert(visit.keys, string.gsub(task.visit_open, "_main$", ""))
|
||||
end
|
||||
if task.visit_open and task.visit_open ~= "" then
|
||||
visit.open = task.visit_open
|
||||
end
|
||||
elseif visit.type == "npc" then
|
||||
visit.ids = {}
|
||||
appendCfgValue(visit.ids, task.visit_ids_1)
|
||||
visit.scripts = {}
|
||||
appendCfgValue(visit.scripts, task.visit_scripts_1)
|
||||
end
|
||||
task.visit = visit
|
||||
end
|
||||
|
||||
if not task.target and task.target_type and task.target_type ~= "" then
|
||||
task.target = {
|
||||
type = task.target_type,
|
||||
count = tonumber(task.target_count) or 0,
|
||||
map = task.target_map,
|
||||
mon = task.target_mon,
|
||||
}
|
||||
end
|
||||
|
||||
if not task.rewards then
|
||||
task.rewards = {}
|
||||
for _, reward in ipairs(task.reward or {}) do
|
||||
table.insert(task.rewards, {
|
||||
reward.type,
|
||||
reward.name,
|
||||
tonumber(reward.num) or 0,
|
||||
tonumber(reward.bind) or 0,
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
return cfg
|
||||
end
|
||||
|
||||
MainLineTaskOBJ.cfg = normalizeTaskCfg(MainLineTaskOBJ.cfg)
|
||||
|
||||
function MainLineTaskOBJ:getTask(id)
|
||||
return self.cfg[tonumber(id or 1)]
|
||||
|
|
@ -419,12 +369,33 @@ GameEvent.add(EventCfg.onKillMon, function(actor, mon, itype, kill, monName, map
|
|||
MainLineTaskOBJ:onKillMon(actor, mon, itype, kill, monName, mapID)
|
||||
end, MainLineTaskOBJ)
|
||||
|
||||
MainLineTaskOBJ.allowFunc = { "query", "visit" }
|
||||
MainLineTaskOBJ.allowFunc = { "query", "visit", "route" }
|
||||
|
||||
function MainLineTaskOBJ:query(actor)
|
||||
self:sync(actor)
|
||||
end
|
||||
|
||||
function MainLineTaskOBJ:route(actor)
|
||||
if not isnotnull(actor) then
|
||||
return
|
||||
end
|
||||
if self:getStatus(actor) ~= self.STATUS_WAIT_VISIT then
|
||||
return
|
||||
end
|
||||
local id = self:getTaskId(actor)
|
||||
local task = self:getValidTask(id)
|
||||
if not task or task.finish or not task.visit then
|
||||
return
|
||||
end
|
||||
local visit = task.visit
|
||||
if visit.type == "module" and visit.open then
|
||||
Message:SubLink(actor, visit.open)
|
||||
return
|
||||
end
|
||||
if visit.type == "npc" and visit.ids and visit.ids[1] then
|
||||
opennpcshowex(actor, tonumber(visit.ids[1]), 6, 2)
|
||||
end
|
||||
end
|
||||
function MainLineTaskOBJ:visit(actor, p1, p2, p3, data)
|
||||
local visitKey = p1
|
||||
if type(data) == "table" then
|
||||
|
|
|
|||
|
|
@ -14,6 +14,10 @@ end
|
|||
TaskShowOBJ.UIfile = getUifile()
|
||||
TaskShowOBJ.mainLineData = nil
|
||||
|
||||
local function canRouteMainLine(data)
|
||||
return data and tonumber(data.status or 0) == 0 and not data.finish
|
||||
end
|
||||
|
||||
local function getShortDesc(data)
|
||||
local status = tonumber(data.status or 0) or 0
|
||||
if data.finish then
|
||||
|
|
@ -60,6 +64,26 @@ local function getRewardItems(data)
|
|||
end
|
||||
|
||||
|
||||
function TaskShowOBJ:createMainLineTouch()
|
||||
if not self.ui or GUI:Win_IsNull(self.ui.TaskShow_Layout) then
|
||||
return
|
||||
end
|
||||
self.ui.MainLineTouch_Layout = GUI:Layout_Create(self.ui.TaskShow_Layout, "MainLineTouch_Layout", 0, 58, 202, 130, false)
|
||||
GUI:setTouchEnabled(self.ui.MainLineTouch_Layout, false)
|
||||
GUI:addOnClickEvent(self.ui.MainLineTouch_Layout, function()
|
||||
local data = self.mainLineData or (MainLineTaskOBJ and MainLineTaskOBJ.data)
|
||||
if canRouteMainLine(data) then
|
||||
ssrMessage:SubLink("MainLineTaskOBJ_route")
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function TaskShowOBJ:updateMainLineTouch(data)
|
||||
if self.ui and self.ui.MainLineTouch_Layout and GUI:Win_IsNotNull(self.ui.MainLineTouch_Layout) then
|
||||
GUI:setTouchEnabled(self.ui.MainLineTouch_Layout, canRouteMainLine(data))
|
||||
end
|
||||
end
|
||||
|
||||
function TaskShowOBJ:main()
|
||||
local parent = GUI:Win_FindParent(110)
|
||||
if GUI:Win_IsNotNull(parent) then
|
||||
|
|
@ -71,6 +95,7 @@ function TaskShowOBJ:main()
|
|||
self.ui = GUI:ui_delegate(parent)
|
||||
|
||||
if self.UIfile == "game/Tongyong/TaskShowUI" then
|
||||
self:createMainLineTouch()
|
||||
self:renderMainLine(self.mainLineData or (MainLineTaskOBJ and MainLineTaskOBJ.data))
|
||||
ssrMessage:SubLink("MainLineTaskOBJ_query")
|
||||
SL:ScheduleOnce(function()
|
||||
|
|
@ -94,6 +119,7 @@ end
|
|||
|
||||
function TaskShowOBJ:renderMainLine(data)
|
||||
if not data or not self.ui then
|
||||
self:updateMainLineTouch(nil)
|
||||
return
|
||||
end
|
||||
if GUI:Win_IsNotNull(self.ui.TaskTitle_Text) then
|
||||
|
|
@ -114,11 +140,13 @@ function TaskShowOBJ:renderMainLine(data)
|
|||
if GUI:Win_IsNotNull(self.ui.TaskReward_Text) then
|
||||
GUI:Text_setString(self.ui.TaskReward_Text, "奖励:")
|
||||
end
|
||||
self:updateMainLineTouch(data)
|
||||
if GUI:Win_IsNotNull(self.ui.RewardItems_Layout) then
|
||||
GUI:removeAllChildren(self.ui.RewardItems_Layout)
|
||||
local items = getRewardItems(data)
|
||||
if #items <= 0 then
|
||||
local EmptyReward_Text = GUI:Text_Create(self.ui.RewardItems_Layout, "EmptyReward_Text", 0, 24, 12, "#ffd36a", "无")
|
||||
local EmptyReward_Text = GUI:Text_Create(self.ui.RewardItems_Layout, "EmptyReward_Text", 0, 24, 12, "#ffd36a",
|
||||
"无")
|
||||
GUI:setAnchorPoint(EmptyReward_Text, 0.00, 0.50)
|
||||
GUI:Text_enableOutline(EmptyReward_Text, "#000000", 1)
|
||||
return
|
||||
|
|
@ -129,19 +157,23 @@ function TaskShowOBJ:renderMainLine(data)
|
|||
end
|
||||
local name = item.name or item[1]
|
||||
local count = tonumber(item.count or item[2]) or 1
|
||||
local x = 22 + (i - 1) * 44
|
||||
local y = 29
|
||||
local x = 22 + (i - 1) * 60
|
||||
local y = 4
|
||||
local index = SL:GetMetaValue("ITEM_INDEX_BY_NAME", name)
|
||||
if index then
|
||||
local itemShow = GUI:ItemShow_Create(self.ui.RewardItems_Layout, "RewardItem_" .. i, x, y, {
|
||||
local itemshow_bg = GUI:Image_Create(self.ui.RewardItems_Layout, "RewardItemBg_" .. i, x, y,
|
||||
"res/custom/43/1.png")
|
||||
local bg_size = GUI:getContentSize(itemshow_bg)
|
||||
local itemShow = GUI:ItemShow_Create(itemshow_bg, "RewardItem_" .. i, bg_size.width / 2, bg_size.height / 2, {
|
||||
index = index,
|
||||
count = count,
|
||||
bgVisible = true,
|
||||
bgVisible = false,
|
||||
look = true
|
||||
})
|
||||
GUI:setScale(itemShow, 0.86)
|
||||
GUI:setAnchorPoint(itemShow, 0.50, 0.50)
|
||||
else
|
||||
local RewardText = GUI:Text_Create(self.ui.RewardItems_Layout, "RewardText_" .. i, x - 18, y, 11, "#ffd36a", tostring(name or "奖励"))
|
||||
local RewardText = GUI:Text_Create(self.ui.RewardItems_Layout, "RewardText_" .. i, x - 18, y, 11,
|
||||
"#ffd36a", tostring(name or "奖励"))
|
||||
GUI:setAnchorPoint(RewardText, 0.00, 0.50)
|
||||
GUI:Text_enableOutline(RewardText, "#000000", 1)
|
||||
end
|
||||
|
|
@ -157,15 +189,18 @@ function TaskShowOBJ:upLuanDou(data)
|
|||
self.ui[list_Layout] = GUI:Layout_Create(self.ui.rank_list, list_Layout, 0, 0, 200, 30, false)
|
||||
|
||||
local list_rank = string.format("list_rank_%d", i)
|
||||
self.ui[list_rank] = GUI:Text_Create(self.ui[list_Layout], list_rank, 27, 16, 16, SL:GetHexColorByStyleId(255 - i), i)
|
||||
self.ui[list_rank] = GUI:Text_Create(self.ui[list_Layout], list_rank, 27, 16, 16,
|
||||
SL:GetHexColorByStyleId(255 - i), i)
|
||||
GUI:setAnchorPoint(self.ui[list_rank], 0.50, 0.50)
|
||||
|
||||
local list_name = string.format("list_name_%d", i)
|
||||
self.ui[list_name] = GUI:Text_Create(self.ui[list_Layout], list_name, 101, 16, 16, SL:GetHexColorByStyleId(255 - i), v[2])
|
||||
self.ui[list_name] = GUI:Text_Create(self.ui[list_Layout], list_name, 101, 16, 16,
|
||||
SL:GetHexColorByStyleId(255 - i), v[2])
|
||||
GUI:setAnchorPoint(self.ui[list_name], 0.50, 0.50)
|
||||
|
||||
local list_jifen = string.format("list_jifen_%d", i)
|
||||
self.ui[list_jifen] = GUI:Text_Create(self.ui[list_Layout], list_jifen, 172, 16, 16, SL:GetHexColorByStyleId(255 - i), v[3])
|
||||
self.ui[list_jifen] = GUI:Text_Create(self.ui[list_Layout], list_jifen, 172, 16, 16,
|
||||
SL:GetHexColorByStyleId(255 - i), v[3])
|
||||
GUI:setAnchorPoint(self.ui[list_jifen], 0.50, 0.50)
|
||||
end
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1 +1 @@
|
|||
{"gm":0,"signkey":"634eff98723b31da43ed35f0dd4edf36","oper_mode":1,"modlist":"http://list.dhsf.xqhuyu.com/testmodlist/modlist_tool_1942.txt","resolution":"1024x768","channel":1}
|
||||
{"modlist":"http:\/\/list.dhsf.xqhuyu.com\/testmodlist\/modlist_tool_1942.txt","channel":1,"gm":0,"signkey":"634eff98723b31da43ed35f0dd4edf36","resolution":"1136x640","oper_mode":2}
|
||||
11
csv/cfg_主线任务.csv
Normal file
11
csv/cfg_主线任务.csv
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
序列,下一任务,是否启用,标题,待拜访描述,进行中描述,奖励描述,拜访类型,模块Key_1,模块打开对象,NPC_ID_1,NPC脚本_1,目标类型,目标数量,目标地图,目标怪物,奖励_1_类型,奖励_1_名称,奖励_1_数量,奖励_1_绑定,奖励_2_类型,奖励_2_名称,奖励_2_数量,奖励_2_绑定,奖励_3_类型,奖励_3_名称,奖励_3_数量,奖励_3_绑定,是否结束任务
|
||||
id,next,enabled,title,desc,doingDesc,rewardText,visit_type,visit_keys_1,visit_open,visit_ids_1,visit_scripts_1,target_type,target_count,target_map,target_mon,reward_1_type,reward_1_name,reward_1_num,reward_1_bind,reward_2_type,reward_2_name,reward_2_num,reward_2_bind,reward_3_type,reward_3_name,reward_3_num,reward_3_bind,finish
|
||||
1,2,TRUE,[主线]了解首充,了解首充后,前往任意地图击杀任意怪物5只。,前往任意地图击杀任意怪物。,经验100万、金币5000,module,ShouChongOBJ,ShouChongOBJ_main,,,kill_mon,5,*,*,money,经验,1000000,0,money,金币,5000,0,,,,,
|
||||
2,3,TRUE,[主线]拜访渡劫天尊,拜访渡劫天尊后,前往任意地图击杀怪物5只。,前往任意地图击杀怪物。,经验100万、金币10000,npc,,,6,转生,kill_mon,5,*,*,money,经验,1000000,0,money,金币,10000,0,,,,,
|
||||
3,4,TRUE,[主线]拜访神兽淬体,拜访神兽淬体后,前往任意地图击杀怪物5只。,前往任意地图击杀怪物。,神兽之血*50、神兽之骨*50,npc,,,5,神兽淬体,kill_mon,5,*,*,item,神兽之血,50,0,item,神兽之骨,50,0,,,,,
|
||||
4,5,TRUE,[主线]拜访紫金仙人,拜访紫金仙人后,前往任意地图击杀怪物5只。,前往任意地图击杀怪物。,经验100万、千年玄石*50、金币10000,npc,,,189,紫金葫芦,kill_mon,5,*,*,money,经验,1000000,0,item,千年玄石,50,0,money,金币,10000,0,
|
||||
5,6,TRUE,[主线]了解绝学NPC,了解绝学NPC后,前往任意地图击杀怪物5只。,前往任意地图击杀怪物。,灵石*50、武林秘籍*1,npc,,,12,绝学修炼,kill_mon,5,*,*,item,灵石,50,0,item,武林秘籍,1,0,,,,,
|
||||
6,7,TRUE,[主线]拜访幸运仙子,拜访幸运仙子后,前往任意地图击杀怪物5只。,前往任意地图击杀怪物。,经验100万、金币10000,npc,,,11,幸运项链,kill_mon,5,*,*,money,经验,1000000,0,money,金币,10000,0,,,,,
|
||||
7,8,TRUE,[主线]前往装备重铸,前往装备重铸后,前往任意地图击杀怪物5只。,前往任意地图击杀怪物。,经验100万、金币10000,npc,,,10,装备重铸,kill_mon,5,*,*,money,经验,1000000,0,money,金币,10000,0,,,,,
|
||||
8,9,TRUE,[主线]前往武器升级,前往武器升级后,前往任意地图击杀怪物5只。,前往任意地图击杀怪物。,黑铁矿石*4、金币10000,npc,,,13,武器升级,kill_mon,5,*,*,item,黑铁矿石,4,0,money,金币,10000,0,,,,,
|
||||
9,,TRUE,[主线]任务结束,主线任务已完成。,主线任务已完成。,无,,,,,,,,,,,,,,,,,,,,,,TRUE
|
||||
|
Loading…
Reference in a new issue