一部分任务系统
This commit is contained in:
parent
87df9d9e9c
commit
4bc212f292
@ -1438,6 +1438,9 @@ control.prototype.checkBlock = function () {
|
|||||||
var damage = core.status.checkBlock.damage[loc];
|
var damage = core.status.checkBlock.damage[loc];
|
||||||
if (damage) {
|
if (damage) {
|
||||||
core.status.hero.hp -= damage;
|
core.status.hero.hp -= damage;
|
||||||
|
core.taskSystem.tasksInfo.forEach(v => v.tasks.forEach(a => {
|
||||||
|
if (a.type==="specialBlock"&&core.status.checkBlock.type[loc][a.specialType])a.has++
|
||||||
|
}))
|
||||||
var text =
|
var text =
|
||||||
Object.keys(core.status.checkBlock.type[loc] || {}).join(",") || "伤害";
|
Object.keys(core.status.checkBlock.type[loc] || {}).join(",") || "伤害";
|
||||||
core.drawTip("受到" + text + damage + "点");
|
core.drawTip("受到" + text + damage + "点");
|
||||||
|
@ -189,7 +189,16 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
} else {
|
} else {
|
||||||
// 每次抵达楼层执行的事件
|
// 每次抵达楼层执行的事件
|
||||||
core.insertAction(core.floors[floorId].eachArrive);
|
core.insertAction(core.floors[floorId].eachArrive);
|
||||||
|
core.taskSystem.tasksInfo.forEach(v => v.tasks.forEach(a => {
|
||||||
|
switch (a.type) {
|
||||||
|
case "changeFloor":
|
||||||
|
a.has++
|
||||||
|
break;
|
||||||
|
case "arrival":
|
||||||
|
if (a.floorId === floorId) a.has = 1
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}))
|
||||||
// 首次抵达楼层时执行的事件(后插入,先执行)
|
// 首次抵达楼层时执行的事件(后插入,先执行)
|
||||||
if (!core.hasVisitedFloor(floorId)) {
|
if (!core.hasVisitedFloor(floorId)) {
|
||||||
core.insertAction(core.floors[floorId].firstArrive);
|
core.insertAction(core.floors[floorId].firstArrive);
|
||||||
@ -417,7 +426,29 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
} else {
|
} else {
|
||||||
core.updateStatusBar();
|
core.updateStatusBar();
|
||||||
}
|
}
|
||||||
|
core.taskSystem.tasksInfo.forEach(v => v.tasks.forEach(a => {
|
||||||
|
switch (a.type) {
|
||||||
|
case "kill":
|
||||||
|
|
||||||
|
if (a.kill === enemyId && (!a.floorIds || a.floorIds.includes(core.status.floorId))) a.has++
|
||||||
|
break
|
||||||
|
case "killLocs":
|
||||||
|
a.killLocs.forEach(b => {
|
||||||
|
if (x === b[0] && y === b[1] && core.status.floorId === b[2]) a.has++
|
||||||
|
})
|
||||||
|
break
|
||||||
|
case "killCount":
|
||||||
|
if (!a.floorIds || a.floorIds.includes(core.status.floorId)) a.has++
|
||||||
|
break
|
||||||
|
case "killSpecial":
|
||||||
|
if (!a.floorIds || a.floorIds.includes(core.status.floorId)) {
|
||||||
|
|
||||||
|
if (core.hasSpecial(special, a.killSpecial)) a.has++
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
}))
|
||||||
// 如果已有事件正在处理中
|
// 如果已有事件正在处理中
|
||||||
if (core.status.event.id == null)
|
if (core.status.event.id == null)
|
||||||
core.continueAutomaticRoute();
|
core.continueAutomaticRoute();
|
||||||
@ -1292,7 +1323,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
time: new Date().getTime(),
|
time: new Date().getTime(),
|
||||||
cg: cg,
|
cg: cg,
|
||||||
animateObjs: core.status.animateObjs.filter(v => v.loop),
|
animateObjs: core.status.animateObjs.filter(v => v.loop),
|
||||||
playing: [...core.plugin.playing].filter(v => v.loop)
|
playing: [...core.plugin.playing].filter(v => v.loop),
|
||||||
|
task: core.taskSystem.save()
|
||||||
};
|
};
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
@ -1337,6 +1369,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
core.setFlag("__fromLoad__", true);
|
core.setFlag("__fromLoad__", true);
|
||||||
|
|
||||||
// TODO:增加自己的一些读档处理
|
// TODO:增加自己的一些读档处理
|
||||||
|
core.taskSystem.load(data.task)
|
||||||
core.ui.statusBar.clearItemInfo();
|
core.ui.statusBar.clearItemInfo();
|
||||||
core.ui.statusBar.update();
|
core.ui.statusBar.update();
|
||||||
core.status.animateObjs = data.animateObjs
|
core.status.animateObjs = data.animateObjs
|
||||||
|
@ -27450,23 +27450,260 @@ let time=0
|
|||||||
},
|
},
|
||||||
"任务系统": function () {
|
"任务系统": function () {
|
||||||
// 在此增加新插件
|
// 在此增加新插件
|
||||||
this.task = { //任务总表(键名和id后期改为"floorId+'.'+npc+'.'+Number"的格式,即“楼层名.npc名.任务序号”)
|
class TaskSystem {
|
||||||
1: { id: 1, name: "寻找丢失的钱袋", text: "梅尔森的钱袋被小偷偷走了,去找到小偷并拿回梅尔森的钱袋", type: "物品" }
|
constructor() {
|
||||||
|
this.tasksInfo = []
|
||||||
|
}
|
||||||
|
setTask(name, text, info, n) {
|
||||||
|
this.tasksInfo.push({ name, text, n, tasks: info.map(v => new Task(v)) })
|
||||||
|
this.tasksInfo[this.tasksInfo.length - 1].complter = this.checkTask(this.tasksInfo.length - 1)
|
||||||
|
}
|
||||||
|
checkTask(index) {
|
||||||
|
if (this.tasksInfo[index].success) return true
|
||||||
|
else return this.tasksInfo[index].tasks.reduce((a, b) => a + Number(b.check()), 0) >= this.tasksInfo[index].n
|
||||||
|
}
|
||||||
|
removeTaskByName(name) {
|
||||||
|
const index = this.tasksInfo.findIndex(v => v.name === name)
|
||||||
|
removeTask(index)
|
||||||
|
}
|
||||||
|
removeTask(index) {
|
||||||
|
this.tasksInfo.splice(index, 1)
|
||||||
|
}
|
||||||
|
clearTesk() {
|
||||||
|
this.tasksInfo = []
|
||||||
|
}
|
||||||
|
checkAll() {
|
||||||
|
for (let i = 0; i < this.tasksInfo.length; i++) {
|
||||||
|
this.checkTask(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
submitTask() {
|
||||||
|
if (!flags.score) flags.score = 0
|
||||||
|
for (let i = 0; i < this.tasksInfo.length; i++) {
|
||||||
|
flags.score += Number(this.tasksInfo[i].complter)
|
||||||
|
}
|
||||||
|
this.clearTesk()
|
||||||
|
}
|
||||||
|
successTesk(index) {
|
||||||
|
this.tasksInfo[index].success = true
|
||||||
|
this.tasksInfo[index].complter = true
|
||||||
|
}
|
||||||
|
successTeskByName(name) {
|
||||||
|
const index = this.tasksInfo.findIndex(v => v.name === name)
|
||||||
|
this.tsuccessTesk(index)
|
||||||
|
}
|
||||||
|
save() {
|
||||||
|
return this.tasksInfo.map(v => {
|
||||||
|
const c = core.clone(v)
|
||||||
|
const b = v.tasks.map(a => a.save());
|
||||||
|
c.tasks = b
|
||||||
|
return c
|
||||||
|
})
|
||||||
|
}
|
||||||
|
load(data) {
|
||||||
|
this.tasksInfo = data.map(v => {
|
||||||
|
const c = core.clone(v)
|
||||||
|
const b = v.tasks.map(a => new Task(a))
|
||||||
|
c.tasks = b
|
||||||
|
return c
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.taskAccept = function (id) { //任务接取
|
}
|
||||||
let accept = core.getFlag("accept") ?? []; //正在进行任务
|
class Task {
|
||||||
let success = core.getFlag("success") ?? []; //已提交任务
|
constructor(info) {
|
||||||
let nocontinue = false
|
this.type = info.type
|
||||||
accept.forEach(v => { if (v.id === id) nocontinue = ture })
|
this.text = info.text
|
||||||
success.forEach(v => { if (v.id === id) nocontinue = ture })
|
if (info.type === "checkItem") {
|
||||||
if (nocontinue) return //已接取或已完成该任务return
|
this.checkItem = info.checkItem
|
||||||
let task = this.task[id] //获取任务内容
|
this.count = info.count
|
||||||
switch (task.type) {
|
this.operator = info.operator
|
||||||
case "物品":
|
this.has = info.has ?? core.itemCount(this.checkItem)
|
||||||
|
} else if (info.type === "checkStatus") {
|
||||||
|
this.checkStatus = info.checkStatus
|
||||||
|
this.count = info.count
|
||||||
|
this.operator = info.operator
|
||||||
|
this.has = core.getRealStatus(this.checkStatus)
|
||||||
|
} else if (info.type === "checkFlag") {
|
||||||
|
this.checkFlag = info.checkFlag
|
||||||
|
this.count = info.count
|
||||||
|
this.operator = info.operator
|
||||||
|
this.has = info.has ?? core.getFlag(this.checkFlag)
|
||||||
|
} else if (info.type === "checkBlock") {
|
||||||
|
this.checkBlock = info.checkBlock
|
||||||
|
this.count = info.count
|
||||||
|
this.operator = info.operator
|
||||||
|
this.floorIds = info.floorIds
|
||||||
|
this.has = info.has ?? core.searchBlock(this.checkBlock, this.floorIds).length
|
||||||
|
} else if (info.type === "checkEnemyType") {
|
||||||
|
this.checkEnemyType = info.checkEnemyType
|
||||||
|
this.count = info.count
|
||||||
|
this.operator = info.operator
|
||||||
|
this.floorIds = info.floorIds
|
||||||
|
this.has = info.has ?? core.searchBlockWithFilter(block => block.event.cls.startsWith("enemy") && block.event.type === this.checkEnemyType, this.floorIds).length
|
||||||
|
} else if (info.type === "kill") {
|
||||||
|
this.kill = info.kill
|
||||||
|
this.count = info.count
|
||||||
|
this.has = info.has ?? 0
|
||||||
|
this.operator = info.operator
|
||||||
|
} else if (info.type === "killLocs") {
|
||||||
|
this.killLocs = info.killLocs
|
||||||
|
this.count = info.count
|
||||||
|
this.has = info.has ?? 0
|
||||||
|
this.operator = info.operator
|
||||||
|
} else if (info.type === "killCount") {
|
||||||
|
this.count = info.count
|
||||||
|
this.has = info.has ?? 0
|
||||||
|
this.operator = info.operator
|
||||||
|
} else if (info.type === "killSpecial") {
|
||||||
|
this.killSpecial = info.killSpecial
|
||||||
|
this.count = info.count
|
||||||
|
this.has = info.has ?? 0
|
||||||
|
this.operator = info.operator
|
||||||
|
} else if (info.type === "killAll") {
|
||||||
|
this.floorIds = info.floorIds
|
||||||
|
this.has = info.has ?? core.searchBlockWithFilter(block => block.event.cls.startsWith("enemy"), this.floorIds).length
|
||||||
|
} else if (info.type === "specialBlock") {
|
||||||
|
this.specialType = info.specialType
|
||||||
|
this.count = info.count
|
||||||
|
this.has = info.has ?? 0
|
||||||
|
this.operator = info.operator
|
||||||
|
} else if (info.type === "changeFloor") {
|
||||||
|
this.count = info.count
|
||||||
|
this.has = info.has ?? 0
|
||||||
|
this.operator = info.operator
|
||||||
|
} else if (info.type === "arrival") {
|
||||||
|
this.floorId = info.floorId
|
||||||
|
this.has = info.has ?? 0
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
|
}
|
||||||
|
check() {
|
||||||
|
if (this.type === "checkItem") return this.checkInfo(this.count, this.has = core.itemCount(this.checkItem))
|
||||||
|
else if (this.type === "checkStatus") return this.checkInfo(this.count, this.has = core.getRealStatus(this.checkStatus))
|
||||||
|
else if (this.type === "checkFlag") return this.checkInfo(this.count, this.has = core.getFlag(this.checkFlag))
|
||||||
|
else if (this.type === "checkBlock") return this.checkInfo(this.count, this.has = core.searchBlock(this.checkBlock, this.floorIds).length)
|
||||||
|
else if (this.type === "checkEnemyType") return this.checkInfo(this.count, this.has = core.searchBlockWithFilter(block => block.event.cls.startsWith("enemy") && block.event.type === this.checkEnemyType, this.floorIds).length)
|
||||||
|
else if (this.type === "killAll") return this.has = core.searchBlockWithFilter(block => block.event.cls.startsWith("enemy"), this.floorIds).length, this.has === 0
|
||||||
|
else if (this.type === "specialBlock" || this.type === "changeFloor" || this.type === "kill" || this.type === "killSpecial" || this.type === "killLocs" || this.type === "killCount") return this.checkInfo(this.count, this.has)
|
||||||
|
else if (this.type === "arrival") return Boolean(this.has)
|
||||||
|
else if (this.type === "outer") return false
|
||||||
|
|
||||||
|
}
|
||||||
|
checkInfo(check, has) {
|
||||||
|
switch (this.operator) {
|
||||||
|
case "=":
|
||||||
|
return has === check
|
||||||
|
case "<":
|
||||||
|
return has < check
|
||||||
|
case "<=":
|
||||||
|
return has <= check
|
||||||
|
case ">":
|
||||||
|
return has > check
|
||||||
|
case ">=":
|
||||||
|
return has >= check
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
save() {
|
||||||
|
let info = { type: this.type, text: this.text }
|
||||||
|
if (info.type === "checkItem") {
|
||||||
|
info.checkItem = this.checkItem
|
||||||
|
info.count = this.count
|
||||||
|
info.operator = this.operator
|
||||||
|
info.has = this.has
|
||||||
|
} else if (info.type === "checkStatus") {
|
||||||
|
info.checkStatus = this.checkStatus
|
||||||
|
info.count = this.count
|
||||||
|
info.operator = this.operator
|
||||||
|
info.has = this.has
|
||||||
|
} else if (info.type === "checkFlag") {
|
||||||
|
info.checkFlag = this.checkFlag
|
||||||
|
info.count = this.count
|
||||||
|
info.operator = this.operator
|
||||||
|
info.has = this.has
|
||||||
|
} else if (info.type === "checkBlock") {
|
||||||
|
info.checkBlock = this.checkBlock
|
||||||
|
info.count = this.count
|
||||||
|
info.operator = this.operator
|
||||||
|
info.floorIds = this.floorIds
|
||||||
|
info.has = this.has
|
||||||
|
} else if (info.type === "checkEnemyType") {
|
||||||
|
info.checkEnemyType = this.checkEnemyType
|
||||||
|
info.count = this.count
|
||||||
|
info.operator = this.operator
|
||||||
|
info.floorIds = this.floorIds
|
||||||
|
info.has = this.has
|
||||||
|
} else if (info.type === "kill") {
|
||||||
|
info.kill = this.kill
|
||||||
|
info.count = this.count
|
||||||
|
info.has = this.has
|
||||||
|
info.operator = this.operator
|
||||||
|
} else if (info.type === "killLocs") {
|
||||||
|
info.killLocs = this.killLocs
|
||||||
|
info.count = this.locs.length
|
||||||
|
info.has = this.has
|
||||||
|
info.operator = this.operator
|
||||||
|
} else if (info.type === "killCount") {
|
||||||
|
info.count = this.count
|
||||||
|
info.has = this.has
|
||||||
|
info.operator = this.operator
|
||||||
|
} else if (info.type === "killSpecial") {
|
||||||
|
info.killSpecial = this.killSpecial
|
||||||
|
info.count = this.count
|
||||||
|
info.has = this.has
|
||||||
|
info.operator = this.operator
|
||||||
|
} else if (info.type === "killAll") {
|
||||||
|
info.floorIds = this.floorIds
|
||||||
|
info.has = this.has
|
||||||
|
} else if (info.type === "specialBlock") {
|
||||||
|
info.specialType = this.specialType
|
||||||
|
info.count = this.count
|
||||||
|
info.has = this.has
|
||||||
|
info.operator = this.operator
|
||||||
|
} else if (info.type === "changeFloor") {
|
||||||
|
info.count = this.count
|
||||||
|
info.has = this.has
|
||||||
|
info.operator = this.operator
|
||||||
|
} else if (info.type === "arrival") {
|
||||||
|
info.floorId = this.floorId
|
||||||
|
info.has = this.has
|
||||||
|
}
|
||||||
|
return info
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
core.taskSystem = new TaskSystem()
|
||||||
|
|
||||||
|
core.registerEvent("setTask", (data) => {
|
||||||
|
core.taskSystem.setTask(data.name, data.text, data.info, data.n)
|
||||||
|
core.doAction()
|
||||||
|
})
|
||||||
|
core.registerEvent("removeTask", (data) => {
|
||||||
|
core.taskSystem.removeTask(data.index)
|
||||||
|
core.doAction()
|
||||||
|
})
|
||||||
|
core.registerEvent("removeTaskByName", (data) => {
|
||||||
|
core.taskSystem.removeTaskByName(data.name)
|
||||||
|
core.doAction()
|
||||||
|
})
|
||||||
|
core.registerEvent("successTask", (data) => {
|
||||||
|
core.taskSystem.successTask(data.index)
|
||||||
|
core.doAction()
|
||||||
|
})
|
||||||
|
core.registerEvent("successTaskByName", (data) => {
|
||||||
|
core.taskSystem.successTaskByName(data.name)
|
||||||
|
core.doAction()
|
||||||
|
})
|
||||||
|
core.registerEvent("clearTask", () => {
|
||||||
|
core.taskSystem.clearTask()
|
||||||
|
core.doAction()
|
||||||
|
})
|
||||||
|
|
||||||
|
core.registerEvent("submitTask", () => {
|
||||||
|
core.taskSystem.submitTask()
|
||||||
|
core.doAction()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user