-
Notifications
You must be signed in to change notification settings - Fork 105
/
runtime.d.ts
3052 lines (2529 loc) · 117 KB
/
runtime.d.ts
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/**
* @file runtime.d.ts 运行时的类型标注
* @author 秋橙 & tocque
*/
interface TextContentConfig {
left?: number
top?: number
maxWidth?: number
color?: rgbarray | string
align?: 'left' | 'center' | 'right'
fontSize: number
lineHeight?: number
time?: number
font?: string
letterSpacing?: number
bold?: boolean
italic?: boolean
}
type direction = 'up' | 'down' | 'left' | 'right'
type move = 'forward' | direction
type loc = { direction: direction, x: number, y: number }
type rgbarray = [number, number, number, number]
type Events = MotaAction[] | string
type Block = {
x: number,
y: number,
id: number,
event: {
cls: string,
id: string,
[key: string]: any
}
}
type frameObj = {
angle: number
index: number
mirror: number
opacity: number
x: number
y: number
zoom: number
}
type CtxRefer = string | CanvasRenderingContext2D | HTMLCanvasElement | HTMLImageElement
type Animate = {
frame: number
frames: frameObj[][]
images: HTMLImageElement[]
ratio: number
se: string
}
type Floor = {
title: string,
ratio: number
}
type ResolvedMap = {
floorId: string
afterBattle: { [x: string]: Events }
afterOpenDoor: { [x: string]: Events }
afterGetItem: { [x: string]: Events }
autoEvent: Event
beforeBattle: { [x: string]: Events }
canFlyFrom: boolean
canFltTo: boolean
canUseQuickShop: boolean
cannotMove: Object
cannotMoveIn: Object
cannotViewMap: boolean
changeFloor: {
[x: string]: {
floorId: ':before' | ':after' | ':now' | string
loc?: [number, number]
stair?: 'upFloor' | 'downFloor' | ':symmetry' | ':symmetry_x' | ':symmetry_y' | 'flyPoint'
direction?: 'left' | 'right' | 'up' | 'down' | ':left' | ':right' | ':back' | ':hero' | ':backhero'
time?: number
ignoreChangeFloor?: boolean
}
}
defaultGround: string
bgm: string | Array<string>
bgmap: number[][]
/** 事件层 */
map: number[][]
fgmap: number[][]
width: number
height: number
images: Array<{
canvas: 'bg' | 'auto' | 'fg'
name: string
x: number
y: number
reverse?: ':x' | ':y' | ':o'
disable?: boolean
sx?: number
sy?: number
w?: number
h?: number
frame?: number
}>
name: string
ratio: number
title: string
weather: [string, number]
blocks: Array<Block>
}
type Enemy = {
id: string
name: string
displayIdInBook: string
special: number | number[]
hp: number
atk: number
def: number
money: number
exp: number
point: number
[key: string]: any
}
type Item = {
cls: string
[key: string]: any
}
type Save = {
}
type MotaAction = {
type: string,
[key: string]: any
} | string
type SystemFlags = {
enableXxx: boolean
flyNearStair: boolean
steelDoorWithoutKey: boolean
betweenAttackMax: boolean
ignoreChangeFloor: boolean
disableShopOnDamage: boolean
blurFg: boolean
}
type event = { type: string, [key: string]: any }
type step = 'up' | 'down' | 'left' | 'right' | 'forward' | 'backward'
type HeroStatus = {
equipment: []
lv: number
name: string
hp: number
hpmax: number
mana: number
manamax: number
atk: number
def: number
mdef: number
money: number
exp: number
loc: {
direction: direction
x: number
y: number
}
items: {
keys: { [key: string]: number }
constants: { [key: string]: number }
tools: { [key: string]: number }
equips: { [key: string]: number }
}
flags: { [key: string]: any }
steps: number
statistics: {
battle: number
battleDamage: number
currTime: number
exp: number
extraDamage: number
hp: number
ignoreSteps: number
money: number
moveDirectly: number
poisonDamage: number
start: number
totalTime: number
}
[key: string]: any
}
type gameStatus = {
played: boolean
gameOver: boolean
/** 当前勇士状态信息。例如core.status.hero.atk就是当前勇士的攻击力数值 */
hero: HeroStatus
/** 当前层的floorId */
floorId: string
/** 获得所有楼层的地图信息 */
maps: { [key: string]: ResolvedMap }
/** 获得当前楼层信息,等价于core.status.maps[core.status.floorId] */
thisMap: ResolvedMap
bgmaps: { [key: string]: number[][] }
fgmaps: { [key: string]: number[][] }
mapBlockObjs: { [key: string]: any }
/** 显伤伤害 */
checkBlock: {
ambush: { [x: string]: [number, number, string, direction] }
repulse: { [x: string]: [number, number, string, direction] }
damage: { [x: string]: number }
needCache: boolean
type: { [x: string]: { [x: string]: boolean } }
cache: {
[s: string]: {
hp_buff: number
atk_buff: number
def_buff: number
guards: Array<[number, number, string]>
}
}
}
damage: {
posX: number
posY: number
data: Array<{
[x: string]: {
text: string
px: number
py: number
color: string | Array<number>
}
}>
extraData: Array<{
[x: string]: {
text: string
px: number
py: number
color: string | Array<number>
alpha: number
}
}>
}
lockControl: boolean
/** 勇士移动状态 */
heroMoving: number
heroStop: boolean
// 自动寻路相关
automaticRoute: {
autoHeroMove: boolean
autoStep: number
movedStep: number
destStep: number
destX: any
destY: any
offsetX: any
offsetY: any
autoStepRoutes: []
moveStepBeforeStop: []
lastDirection: any
cursorX: any
cursorY: any
moveDirectly: boolean
},
// 按下键的时间:为了判定双击
downTime: number
ctrlDown: boolean
// 路线&回放
route: string[],
replay: {
replaying: boolean
pausing: boolean
/** 正在某段动画中 */animate: boolean
toReplay: string[]
totalList: string[]
speed: number
steps: number
save: []
}
// event事件
shops: {}
event: {
id: string
data: any
selection: any
ui: any
interval: number
}
autoEvents: Events
textAttribute: {
position: string
offset: number
title: rgbarray
background: rgbarray
text: rgbarray
titlefont: number
textfont: number
bold: boolean
time: number
letterSpacing: number
animateTime: number
},
globalAttribute: {
equipName: string[]
statusLeftBackground: string
statusTopBackground: string
toolsBackground: string
borderColor: string
statusBarColor: string
floorChangingStyle: string
font: string
}
curtainColor: null
// 动画
globalAnimateObjs: []
floorAnimateObjs: []
boxAnimateObjs: []
autotileAnimateObjs: []
globalAnimateStatus: number
animateObjs: []
}
/** @file control.js 主要用来进行游戏控制,比如行走控制、自动寻路、存读档等等游戏核心内容。 */
declare class control {
/**
* 开启调试模式, 此模式下可以按Ctrl键进行穿墙, 并忽略一切事件。
* 此模式下不可回放录像和上传成绩。
*/
debug(): void
/**
* 刷新状态栏和地图显伤
* 2.9.1优化:非必须立刻执行的刷新(一般是伤害相关的除外)的延迟到下一动画帧执行
* @param doNotCheckAutoEvents 是否不检查自动事件
* @param immediate 是否立刻刷新,而非延迟到下一动画帧刷新
*/
updateStatusBar(doNotCheckAutoEvents?: boolean, immediate?: boolean): void
/** 删除某个flag/变量 */
removeFlag(name: string): void
/** 设置某个独立开关 */
setSwitch(x: number, y: number, floorId: string, name: string, value: any): void
/** 获得某个独立开关 */
getSwitch(x: number, y: number, floorId: string, name: string, defaultValue: any): any
/** 增加某个独立开关 */
addSwitch(x: number, y: number, floorId: string, name: string, value: any): void
/** 判定某个独立开关 */
hasSwitch(x: number, y: number, floorId: string, name: string): boolean
/** 删除独立开关 */
removeSwitch(x: number, y: number, floorId: string, name: string): boolean
/** 设置大地图的偏移量 */
setGameCanvasTranslate(canvasId: string, x: number, y: number): void
/** 更新大地图的可见区域 */
updateViewport(): void
/** 立刻聚集所有的跟随者 */
gatherFollowers(): void
/** 回放下一个操作 */
replay(): void
/**
* 进入标题画面
* @example core.showStartAnimate(); // 重启游戏但不重置bgm
* @param noAnimate 可选,true表示不由黑屏淡入而是立即亮屏
* @param callback 可选,完全亮屏后的回调函数
*/
showStartAnimate(noAnimate?: boolean, callback?: () => void): void
/**
* 淡出标题画面
* @example core.hideStartAnimate(core.startGame); // 淡出标题画面并开始新游戏,跳过难度选择
* @param callback 标题画面完全淡出后的回调函数
*/
hideStartAnimate(callback?: () => void): void
/**
* 半自动寻路,用于鼠标或手指拖动
* @example core.setAutomaticRoute(0, 0, [{direction: "right", x: 4, y: 9}, {direction: "right", x: 5, y: 9}, {direction: "right", x: 6, y: 9}, {direction: "up", x: 6, y: 8}]);
* @param destX 鼠标或手指的起拖点横坐标
* @param destY 鼠标或手指的起拖点纵坐标
* @param stepPostfix 拖动轨迹的数组表示,每项为一步的方向和目标点。
*/
setAutomaticRoute(destX: number, destY: number, stepPostfix: Array<{ direction: direction, x: number, y: number }>): void
/**
* 连续行走
* @example core.setAutoHeroMove([{direction: "up", step: 1}, {direction: "left", step: 3}, {direction: "right", step: 3}, {direction: "up", step: 9}]); // 上左左左右右右上9
* @param steps 压缩的步伐数组,每项表示朝某方向走多少步
*/
setAutoHeroMove(steps: Array<{ direction: direction, step: number }>): void
/**
* 尝试前进一步,如果面前不可被踏入就会直接触发该点事件
* @example core.moveAction(core.doAction); // 尝试前进一步,然后继续事件处理。常用于在事件流中让主角像自由行动时一样前进一步,可以照常触发moveOneStep(跑毒和计步)和面前的事件(包括但不限于阻激夹域捕)
* @param callback 走一步后的回调函数,可选
*/
moveAction(callback?: () => void): void
/**
* 连续前进,不撞南墙不回头
* @example core.moveHero(); // 连续前进
* @param direction 可选,如果设置了就会先转身到该方向
* @param callback 可选,如果设置了就只走一步
*/
moveHero(direction?: direction, callback?: () => void): void
/**
* 等待主角停下
* @example core.waitHeroToStop(core.vibrate); // 等待主角停下,然后视野左右抖动1秒
* @param callback 主角停止后的回调函数
*/
waitHeroToStop(callback?: () => void): void
/**
* 主角转向并计入录像,不会导致跟随者聚集,会导致视野重置到以主角为中心
* @example core.turnHero(); // 主角顺时针旋转90°,即单击主角或按下Z键的效果
* @param direction 主角的新朝向,可为 up, down, left, right, :left, :right, :back 七种之一
*/
turnHero(direction?: direction): void
/**
* 尝试瞬移,如果该点有图块/事件/阻激夹域捕则会瞬移到它旁边再走一步(不可踏入的话当然还是触发该点事件),这一步的方向优先和瞬移前主角的朝向一致
* @example core.tryMoveDirectly(6, 0); // 尝试瞬移到地图顶部的正中央,以样板0层为例,实际效果是瞬移到了上楼梯下面一格然后向上走一步并触发上楼事件
* @param destX 目标点的横坐标
* @param destY 目标点的纵坐标
*/
tryMoveDirectly(destX: number, destY: number): void
/**
* 绘制主角和跟随者并重置视野到以主角为中心
* @example core.drawHero(); // 原地绘制主角的静止帧
* @param status 绘制状态,一般用stop
* @param offset 相对主角逻辑位置的偏移量,不填视为无偏移
* @param frame 绘制第几帧
*/
drawHero(status?: 'stop' | 'leftFoot' | 'rightFoot', offset?: number, frame?: number): void
/**
* 获取主角面前第n格的横坐标
* @example core.closeDoor(core.nextX(), core.nextY(), 'yellowDoor', core.turnHero); // 在主角面前关上一扇黄门,然后主角顺时针旋转90°
* @param n 目标格与主角的距离,面前为正数,背后为负数,脚下为0,不填视为1
*/
nextX(n?: number): number
/**
* 获取主角面前第n格的纵坐标
* @example core.jumpHero(core.nextX(2), core.nextY(2)); // 主角向前跃过一格,即跳跃靴道具的使用效果
* @param n 目标格与主角的距离,面前为正数,背后为负数,脚下为0,不填视为1
*/
nextY(n?: number): number
/**
* 判定主角是否身处某个点的锯齿领域(取曼哈顿距离)
* @example core.nearHero(6, 6, 6); // 判定主角是否身处点(6,6)的半径为6的锯齿领域
* @param x 领域的中心横坐标
* @param y 领域的中心纵坐标
* @param n 领域的半径,不填视为1
*/
nearHero(x: number, y: number, n?: number): boolean
/**
* 请不要直接使用该函数,请使用core.updateStatusBar()代替!重算并绘制地图显伤
* @example core.updateDamage(); // 更新当前地图的显伤,绘制在显伤层(废话)
* @param floorId 地图id,不填视为当前地图。预览地图时填写
* @param ctx 绘制到的画布,如果填写了就会画在该画布而不是显伤层
*/
updateDamage(floorId?: string, ctx?: CanvasRenderingContext2D): void
/** 仅重绘地图显伤 */
drawDamage(ctx?: CanvasRenderingContext2D): void
/**
* 设置主角的某个属性
* @example core.setStatus('loc', {x : 0, y : 0, direction : 'up'}); // 设置主角位置为地图左上角,脸朝上
* @param name 属性的英文名,其中'x'、'y'和'direction'会被特殊处理为 core.setHeroLoc(name, value),其他的('exp'被视为'exp')会直接对 core.status.hero[name] 赋值
* @param value 属性的新值
*/
setStatus<K extends keyof HeroStatus>(name: K, value: HeroStatus[K]): void
/**
* 增减主角的某个属性,等价于core.setStatus(name, core.getStatus(name) + value)
* @example core.addStatus('name', '酱'); // 在主角的名字后加一个“酱”字
* @param name 属性的英文名
* @param value 属性的增量,请注意旧量和增量中只要有一个是字符串就会把两者连起来成为一个更长的字符串
*/
addStatus<K extends keyof HeroStatus>(name: K, value: HeroStatus[K]): void
/**
* 读取主角的某个属性,不包括百分比修正
* @example core.getStatus('loc'); // 读取主角的坐标和朝向
* @param name 属性的英文名,其中'x'、'y'和'direction'会被特殊处理为 core.getHeroLoc(name),其他的('exp'被视为'exp')会直接读取 core.status.hero[name]
* @returns 属性值
*/
getStatus<K extends keyof HeroStatus>(name: K): HeroStatus[K]
/**
* 计算主角的某个属性,包括百分比修正
* @example core.getRealStatus('atk'); // 计算主角的攻击力,包括百分比修正。战斗使用的就是这个值
* @param name 属性的英文名,请注意只能用于数值类属性哦,否则乘法会得到NaN
*/
getRealStatus<K extends keyof HeroStatus>(name: K): HeroStatus[K]
/** 获得某个状态的名字 */
getStatusLabel<K extends keyof HeroStatus>(name: K): string
/**
* 设置主角某个属性的百分比修正倍率,初始值为1,
* 倍率存放在flag: '__'+name+'_buff__' 中
* @example core.setBuff('atk', 0.5); // 主角能发挥出的攻击力减半
* @param name 属性的英文名,请注意只能用于数值类属性哦,否则随后的乘法会得到NaN
* @param value 新的百分比修正倍率,不填(效果上)视为1
*/
setBuff<K extends keyof HeroStatus>(name: K, value?: HeroStatus[K]): void
/**
* 增减主角某个属性的百分比修正倍率,加减法叠加和抵消。等价于 core.setBuff(name, core.getBuff(name) + value)
* @example core.addBuff('atk', -0.1); // 主角获得一层“攻击力减一成”的负面效果
* @param name 属性的英文名,请注意只能用于数值类属性哦,否则随后的乘法会得到NaN
* @param value 倍率的增量
*/
addBuff<K extends keyof HeroStatus>(name: K, value: HeroStatus[K]): void
/**
* 读取主角某个属性的百分比修正倍率,初始值为1
* @example core.getBuff('atk'); // 主角当前能发挥出多大比例的攻击力
* @param name 属性的英文名
*/
getBuff<K extends keyof HeroStatus>(name: HeroStatus[K]): number
/**
* 获得或移除毒衰咒效果
* @param action 获得还是移除,'get'为获得,'remove'为移除
* @param type 要获得或移除的毒衰咒效果
*/
triggerDebuff(action: string, type: string | string[]): void
/**
* 设置勇士位置
* 值得注意的是,这句话虽然会使勇士改变位置,但并不会使界面重新绘制;
* 如需立刻重新绘制地图还需调用:core.clearMap('hero'); core.drawHero(); 来对界面进行更新。
* @example core.setHeroLoc('x', 5) // 将勇士当前位置的横坐标设置为5。
* @param name 要设置的坐标属性
* @param value 新值
* @param noGather 是否聚集跟随者
*/
setHeroLoc(name: 'x' | 'y', value: number, noGather?: boolean): void
setHeroLoc(name: 'direction', value: direction, noGather?: boolean): void
/**
* 读取主角的位置和/或朝向
* @example core.getHeroLoc(); // 读取主角的位置和朝向
* @param name 要读取横坐标还是纵坐标还是朝向还是都读取
* @returns name ? core.status.hero.loc[name] : core.status.hero.loc
*/
getHeroLoc(): { x: number, y: number, direction: direction }
getHeroLoc(name: 'x' | 'y'): number
getHeroLoc(name: 'direction'): direction
/**
* 根据级别的数字获取对应的名称,后者定义在全塔属性
* @example core.getLvName(); // 获取主角当前级别的名称,如“下级佣兵”
* @param lv 级别的数字,不填则视为主角当前的级别
* @returns 级别的名称,如果不存在就还是返回数字
*/
getLvName(lv?: number): string | number
/**
* 获得下次升级需要的经验值。
* 升级扣除模式下会返回经验差值;非扣除模式下会返回总共需要的经验值。
* 如果无法进行下次升级,返回null。
*/
getNextLvUpNeed(): number
/**
* 设置一个flag变量
* @example core.setFlag('poison', true); // 令主角中毒
* @param name 变量名,支持中文
* @param value 变量的新值,不填或填null视为删除
*/
setFlag(name: string, value?: any): void
/**
* 增减一个flag变量,等价于 core.setFlag(name, core.getFlag(name, 0) + value)
* @example core.addFlag('hatred', 1); // 增加1点仇恨值
* @param name 变量名,支持中文
* @param value 变量的增量
*/
addFlag(name: string, value: number | string): void
/**
* 读取一个flag变量
* @param name 变量名,支持中文
* @param defaultValue 当变量不存在时的返回值,可选(事件流中默认填0)。
* @returns flags[name] ?? defaultValue
*/
getFlag(name: string, defaultValue?: any): any
/**
* 判定一个flag变量是否存在且不为false、0、''、null、undefined和NaN
* @example core.hasFlag('poison'); // 判断主角当前是否中毒
* @param name 变量名,支持中文
* @returns !!core.getFlag(name)
*/
hasFlag(name: string): boolean
/**
* 设置天气,不计入存档。如需长期生效请使用core.events._action_setWeather()函数
* @example core.setWeather('fog', 10); // 设置十级大雾天
* @param type 新天气的类型,不填视为无天气
* @param level 新天气(晴天除外)的级别,必须为不大于10的正整数,不填视为5
*/
setWeather(type?: 'rain' | 'snow' | 'sun' | 'fog' | 'cloud' | string, level?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10): void
/** 注册一个天气 */
registerWeather(name: string, initFunc: (level: number) => void, frameFunc?: (timestamp: number, level: number) => void): void
/** 注销一个天气 */
unregisterWeather(name: string): void;
/**
* 更改画面色调,不计入存档。如需长期生效请使用core.events._action_setCurtain()函数
* @example core.setCurtain(); // 恢复画面色调,用时四分之三秒
* @param color 一行三列(第四列视为1)或一行四列(第四列若大于1则会被视为1,第四列若为负数则会被视为0)的颜色数组,不填视为[0, 0, 0, 0]
* @param time 渐变时间,单位为毫秒。不填视为750ms,负数视为0(无渐变,立即更改)
* @param callback 更改完毕后的回调函数,可选。事件流中常取core.doAction
*/
setCurtain(color?: [number, number, number, number?], time?: number, moveMode?: string, callback?: () => void): void
/**
* 画面闪烁
* @example core.screenFlash([255, 0, 0, 1], 3); // 红屏一闪而过
* @param color 一行三列(第四列视为1)或一行四列(第四列若大于1则会被视为1,第四列若填负数则会被视为0)的颜色数组,必填
* @param time 单次闪烁时长,实际闪烁效果为先花其三分之一的时间渐变到目标色调,再花剩余三分之二的时间渐变回去
* @param times 闪烁的总次数,不填或填0都视为1
* @param callback 闪烁全部完毕后的回调函数,可选
*/
screenFlash(color: [number, number, number, number?], time: number, times?: number, moveMode?: string, callback?: () => void): void
/**
* 播放背景音乐,中途开播但不计入存档且只会持续到下次场景切换。如需长期生效请将背景音乐的文件名赋值给flags.__bgm__
* @example core.playBgm('bgm.mp3', 30); // 播放bgm.mp3,并跳过前半分钟
* @param bgm 背景音乐的文件名,支持全塔属性中映射前的中文名
* @param startTime 跳过前多少秒,不填则不跳过
*/
playBgm(bgm: string, startTime?: number): void
/**
* 注册一个 animationFrame
* @param name 名称,可用来作为注销使用
* @param needPlaying 是否只在游戏运行时才执行(在标题界面不执行)
* @param func 要执行的函数,或插件中的函数名;可接受timestamp(从页面加载完毕到当前所经过的时间)作为参数
*/
registerAnimationFrame(name: string, needPlaying: boolean, func?: (timestamp: number) => void): void
/** 注销一个animationFrame */
unregisterAnimationFrame(name: string): void
/** 游戏是否已经开始 */
isPlaying(): boolean
/** 清除游戏状态和数据 */
clearStatus(): void
/** 清除自动寻路路线 */
clearAutomaticRouteNode(x?: any, y?: any): void
/** 停止自动寻路操作 */
stopAutomaticRoute(): void
/** 保存剩下的寻路,并停止 */
saveAndStopAutomaticRoute(): void
/** 继续剩下的自动寻路操作 */
continueAutomaticRoute(): void
/** 清空剩下的自动寻路列表 */
clearContinueAutomaticRoute(callback?: () => any): void
/** 设置行走的效果动画 */
setHeroMoveInterval(callback?: () => any): void
/** 每移动一格后执行的事件 */
moveOneStep(callback?: () => any): void
/** 当前是否正在移动 */
isMoving(): boolean
/** 瞬间移动 */
moveDirectly(destX?: any, destY?: any, ignoreSteps?: any): void
/** 改变勇士的不透明度 */
setHeroOpacity(opacity?: number, moveMode?: string, time?: any, callback?: () => any): void
/** 加减画布偏移 */
addGameCanvasTranslate(x?: number, y?: number): void
/**
* 设置视野范围
* px,py: 左上角相对大地图的像素坐标,不需要为32倍数
*/
setViewport(px?: number, py?: number): void
/** 移动视野范围 */
moveViewport(x: number, y: number, moveMode?: string, time?: number, callback?: () => any): void
/** 更新跟随者坐标 */
updateFollowers(): void
/** 更新领域、夹击、阻击的伤害地图 */
updateCheckBlock(floorId?: string): void
/** 检查并执行领域、夹击、阻击事件 */
checkBlock(): void
/** 选择录像文件 */
chooseReplayFile(): void
/** 开始播放 */
startReplay(list?: any): void
/** 更改播放状态 */
triggerReplay(): void
/** 暂停播放 */
pauseReplay(): void
/** 恢复播放 */
resumeReplay(): void
/** 单步播放 */
stepReplay(): void
/** 加速播放 */
speedUpReplay(): void
/** 减速播放 */
speedDownReplay(): void
/** 设置播放速度 */
setReplaySpeed(speed?: number): void
/** 停止播放 */
stopReplay(force?: boolean): void
/** 回退 */
rewindReplay(): void
/** 是否正在播放录像 */
isReplaying(): boolean
/**
* 注册一个录像行为
* @param name 自定义名称,可用于注销使用
* @param func 具体执行录像的函数,可为一个函数或插件中的函数名;
* 需要接受一个action参数,代表录像回放时的下一个操作
* func返回true代表成功处理了此录像行为,false代表没有处理此录像行为。
*/
registerReplayAction(name: string, func: (action?: string) => boolean): void
/** 注销一个录像行为 */
unregisterReplayAction(name: string): void
/** 自动存档 */
autosave(removeLast?: any): void
/** 实际进行自动存档 */
checkAutosave(): void
/** 实际进行存读档事件 */
doSL(id?: string, type?: any): void
/** 同步存档到服务器 */
syncSave(type?: any): void
/** 从服务器加载存档 */
syncLoad(): void
/** 存档到本地 */
saveData(): any
/** 从本地读档 */
loadData(data?: any, callback?: () => any): any
/** 获得某个存档内容 */
getSave(index?: any, callback?: () => any): any
/** 获得某些存档内容 */
getSaves(ids?: any, callback?: () => any): any
/** 获得所有存档内容 */
getAllSaves(callback?: () => any): any
/** 获得所有存在存档的存档位 */
getSaveIndexes(callback?: () => any): any
/** 判断某个存档位是否存在存档 */
hasSave(index?: number): boolean
/** 删除某个存档 */
removeSave(index?: number, callback?: () => any): void
/** 从status中获得属性,如果不存在则从勇士属性中获取 */
getStatusOrDefault(status?: any, name?: string): any
/** 从status中获得实际属性(增幅后的),如果不存在则从勇士属性中获取 */
getRealStatusOrDefault(status?: any, name?: string): any
/** 获得勇士原始属性(无装备和衰弱影响) */
getNakedStatus(name?: string): any
/** 锁定用户控制,常常用于事件处理 */
lockControl(): void
/** 解锁用户控制 */
unlockControl(): void
/** 清空录像折叠信息 */
clearRouteFolding(): void
/** 检查录像折叠信息 */
checkRouteFolding(): void
/** 获得映射文件名 */
getMappedName(name?: string): string
/** 暂停背景音乐的播放 */
pauseBgm(): void
/** 恢复背景音乐的播放 */
resumeBgm(resumeTime?: number): void
/** 设置背景音乐的播放速度和音调 */
setBgmSpeed(speed: number, usePitch?: boolean): void
/** 设置音乐图标的显隐状态 */
setMusicBtn(): void
/** 开启或关闭背景音乐的播放 */
triggerBgm(): void
/** 播放一个音效 */
playSound(sound: string, pitch?: number, callback?: () => any): number
/** 停止(所有)音频 */
stopSound(id?: number): void
/** 获得正在播放的所有(指定)音效的id列表 */
getPlayingSounds(name?: string): Array<number>
/** 检查bgm状态 */
checkBgm(): void
/** 设置屏幕放缩 */
setDisplayScale(delta: number): void
/** 清空状态栏 */
clearStatusBar(): void
/** 显示状态栏 */
showStatusBar(): void
/** 隐藏状态栏 */
hideStatusBar(showToolbox?: boolean): void
/** 更新状态栏的勇士图标 */
updateHeroIcon(name: string): void
/** 改变工具栏为按钮1-8 */
setToolbarButton(useButton?: boolean): void
/**
* 注册一个resize函数
* @param name 名称,可供注销使用
* @param func 可以是一个函数,或者是插件中的函数名;可以接受obj参数,详见resize函数。
*/
registerResize(name: string, func: (obj: any) => void): void
/** 注销一个resize函数 */
unregisterResize(name: string): void
/** 屏幕分辨率改变后重新自适应 */
resize(): void
}
/**@file events.js将处理所有和事件相关的操作。 */
declare class events {
/**
* 开始新游戏
* @example core.startGame('咸鱼乱撞', 0, ''); // 开始一局咸鱼乱撞难度的新游戏,随机种子为0
* @param hard 难度名,会显示在左下角(横屏)或右下角(竖屏)
* @param seed 随机种子,相同的种子保证了录像的可重复性
* @param route 经由base64压缩后的录像,用于从头开始的录像回放
* @param callback 回调函数,可选
*/
startGame(hard: string, seed: number, route: string, callback?: () => void): void
/**
* 游戏结束
* @example core.gameOver(); // 游戏失败
* @param ending 结局名,省略表示失败
* @param fromReplay true表示在播放录像,可选
* @param norank true表示不计入榜单,可选
*/
gameOver(ending?: string, fromReplay?: boolean, norank?: boolean): void
/**
* 战斗,如果填写了坐标就会删除该点的敌人并触发战后事件
* @example core.battle('greenSlime'); // 和从天而降的绿头怪战斗(如果打得过)
* @param id 敌人id,必填
* @param x 敌人的横坐标,可选
* @param y 敌人的纵坐标,可选
* @param force true表示强制战斗,可选
* @param callback 回调函数,可选
*/
battle(id: string, x?: number, y?: number, force?: boolean, callback?: () => void): void
/**
* 开门(包括三种基础墙)
* @example core.openDoor(0, 0, true, core.jumpHero); // 打开左上角的门,需要钥匙,然后主角原地跳跃半秒
* @param x 门的横坐标
* @param y 门的纵坐标
* @param needKey true表示需要钥匙,会导致机关门打不开
* @param callback 门完全打开后或打不开时的回调函数,可选
*/
openDoor(x: number, y: number, needKey?: boolean, callback?: () => void): void
/**
* 获得道具并提示,如果填写了坐标就会删除该点的该道具
* @example core.getItem('book'); // 获得敌人手册并提示
* @param id 道具id,必填
* @param num 获得的数量,不填视为1,填了就别填坐标了
* @param x 道具的横坐标,可选
* @param y 道具的纵坐标,可选
* @param callback 回调函数,可选
*/
getItem(id: string, num?: number, x?: number, y?: number, callback?: () => void): void
/**
* 场景切换
* @example core.changeFloor('MT0'); // 传送到主塔0层,主角坐标和朝向不变,黑屏时间取用户设置值
* @param floorId 传送的目标地图id,可以填':before'和':after'分别表示楼下或楼上
* @param stair 传送的位置,可以填':now'(保持不变,可省略),':symmetry'(中心对称),':symmetry_x'(左右对称),':symmetry_y'(上下对称)或图块id(该图块最好在目标层唯一,一般为'downFloor'或'upFloor')
* @param heroLoc 传送的坐标(如果填写了,就会覆盖上述的粗略目标位置)和传送后主角的朝向(不填表示保持不变)
* @param time 传送的黑屏时间,单位为毫秒。不填为用户设置值
* @param callback 黑屏结束后的回调函数,可选
*/
changeFloor(floorId: string, stair?: string, heroLoc?: { x?: number, y?: number, direction?: direction }, time?: number, callback?: () => void): void
/**
* 执行下一个事件指令,常作为回调
* @example core.setCurtain([0,0,0,1], undefined, null, core.doAction); // 事件中的原生脚本,配合勾选“不自动执行下一个事件”来达到此改变色调只持续到下次场景切换的效果
* @param keepUI true表示不清除UI画布和选择光标
*/
doAction(keepUI?: true): void
/**
* 插入一段事件;此项不可插入公共事件,请用 core.insertCommonEvent
* @example core.insertAction('一段文字'); // 插入一个显示文章
* @param action 单个事件指令,或事件指令数组
* @param x 新的当前点横坐标,可选
* @param y 新的当前点纵坐标,可选
* @param callback 新的回调函数,可选
* @param addToLast 插入的位置,true表示插入到末尾,否则插入到开头
*/
insertAction(action: Events, x?: number, y?: number, callback?: () => void, addToLast?: boolean): void
/**
* 设置一项敌人属性并计入存档
* @example core.setEnemy('greenSlime', 'def', 0); // 把绿头怪的防御设为0
* @param id 敌人id
* @param name 属性的英文缩写
* @param value 属性的新值,可选
* @param operator 操作符,可选
* @param prefix 独立开关前缀,一般不需要,下同