/
queue.js
89 lines (87 loc) · 2.87 KB
/
queue.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
(function(app){
let Task=Include("core/task/task.js")
var re=/\|\|/
app.RegisterCallback("app.core.task.queuenext",function() {
if (app.GetTaskID()=="queue"){
app.CurrentTask.Next()
}
})
app.RegisterCallback("app.core.task.queuefail",function() {
if (app.GetTaskID()=="queue"){
app.CurrentTask.Fail()
}
})
app.RegisterCallback("core.task.to.move", function (data) {
if (app.GetTaskID()=="queue" && data) {
app.NewMove("walk", data, "app.core.task.queuenext", { OnFail: "app.core.task.queuefail"}).Start()
}
})
app.Bind("Response.core.task.queue.to", "core.task.to.move")
let Queue=function (){
Task.call(this,"queue")
this.Execute=function (data,onFinish,onFail) {
Task.prototype.Execute.call(this,data,onFinish,onFail)
if (!data){
data=""
}
let queue=data.split(re)
app.Data.Queue={
Queue:CloneArray(queue,true),
Remain:CloneArray(queue,true),
}
this.Next()
}
this.OnClose=function() {
delete(app.Data.Queue)
}
this.Next=function () {
if (app.Data.Queue.Remain.length===0){
this.Finish()
return
}
let str=app.Data.Queue.Remain.shift()
let current=new Directive(str)
switch (current.Command){
case "#to":
this.To(current.Data)
break
case "#afterbusy":
this.Afterbusy(current.Data)
break
case "#do":
this.Do(current.Data)
break
case "#delay":
this.Delay(current.Data)
break
case "#loop":
if (!app.Stopped){
app.Data.Queue.Remain=CloneArray(app.Data.Queue.Queue)
}
this.Next()
default:
this.Do(str)
}
}
this.To=function(data) {
app.Send("l")
app.Check(app.CheckLevelFull)
app.Response("core", "task.queue.to",data)
}
this.Afterbusy=function () {
app.CheckBusy("app.core.task.queuenext")
}
this.Do=function(data) {
app.Send(data)
app.ExecuteCallback("app.core.task.queuenext")
}
this.Delay=function(data) {
if (isNaN(data)||(data-0)<=0){
throw "delay 的秒数必须为正数"
}
world.DoAfterSpecial((data-0)/1000, 'App.ExecuteCallback("app.core.task.queuenext")', 12);
}
}
Queue.prototype = Object.create(Task.prototype)
app.RegisterTask(new Queue())
})(App)