tianta/runtime.d.ts

3052 lines
117 KiB
TypeScript
Raw Permalink Normal View History

2022-10-16 21:58:52 +08:00
/**
* @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 01
*/
nextX(n?: number): number
/**
* n格的纵坐标
* @example core.jumpHero(core.nextX(2), core.nextY(2)); // 主角向前跃过一格,即跳跃靴道具的使用效果
* @param n 01
*/
nextY(n?: number): number
/**
* 齿()
* @example core.nearHero(6, 6, 6); // 判定主角是否身处点66的半径为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变量是否存在且不为false0''nullundefined和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 105
*/
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 1110[0, 0, 0, 0]
* @param time 750ms0
* @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 1110
* @param time
* @param times 01
* @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
*/
setEnemy<K extends keyof Enemy>(id: string, name: K, value?: Enemy[K], operator?: string, prefix?: string): void
/** 设置某个点的敌人属性 */
setEnemyOnPoint<K extends keyof Enemy>(x: number, y: number, floorId: string, name: K, value?: Enemy[K], operator?: string, prefix?: string): void
/** 重置某个点的敌人属性 */
resetEnemyOnPoint(x: number, y: number, floorId?: string): void
/** 将某个点已经设置的敌人属性移动到其他点 */
moveEnemyOnPoint(fromX: number, fromY: number, toX: number, toY: number, floorId?: string): void
/**
*
* @example core.setFloorInfo('ratio', 2, 'MT0'); // 把主塔0层的血瓶和宝石变为双倍效果
* @param name
* @param values
* @param floorId id
* @param prefix
*/
setFloorInfo<K extends keyof Floor>(name: K, values?: Floor[K] | boolean | number | string | [number, number] | [string, number?] | Array<string | [number, number, string, number?, number?]>, floorId?: string, prefix?: string): void
/**
*
* @example core.setGlobalFlag('steelDoorWithoutKey', true); // 使全塔的所有铁门都不再需要钥匙就能打开
* @param name
* @param value !core.flags[name]
*/
setGlobalFlag(name: keyof SystemFlags, value: boolean): void
/**
*
* @example core.closeDoor(0, 0, 'yellowWall', core.jumpHero); // 在左上角关掉一堵黄墙,然后主角原地跳跃半秒
* @param x
* @param y
* @param id id
* @param callback
*/
closeDoor(x: number, y: number, id: string, callback?: () => void): void
/**
*
* @example core.showImage(1, core.material.images.images['winskin.png'], [0,0,128,128], [0,0,416,416], 0.5, 1000); // 裁剪winskin.png的最左边128×128px放大到铺满整个视野1秒内淡入到50%透明编号为1
* @param code 50100z值z值为125UI层为140
* @param image
* @param sloc
* @param loc
* @param opacityVal 11
* @param time 0
* @param callback
*/
showImage(code: number, image: string | HTMLImageElement, sloc?: Array<number>, loc?: Array<number>, opacityVal?: number, time?: number, callback?: () => void): void
/**
*
* @example core.hideImage(1, 1000, core.jumpHero); // 1秒内淡出1号图片然后主角原地跳跃半秒
* @param code
* @param time
* @param callback
*/
hideImage(code: number, time?: number, callback?: () => void): void
/**
* /
* @example core.moveImage(1, null, 0.5); // 1秒内把1号图片变为50%透明
* @param code
* @param to
* @param opacityVal
* @param moveMode
* @param time 1
* @param callback
*/
moveImage(code: number, to?: [number?, number?], opacityVal?: number, moveMode?: string, time?: number, callback?: () => void): void
/**
*
* @param code
* @param center
* @param angle
* @param moveMode
* @param time 1
* @param callback
*/
rotateImage(code: number, center?: [number?, number?], angle?: number, moveMode?: string, time?: number, callback?: () => void): void
/** 放缩一张图片 */
scaleImage(code: number, center?: [Number?, number?], scale?: number, moveMode?: string, time?: number, callback?: () => void): void
/**
*
* @example core.showGif(); // 擦除所有动图
* @param name
* @param x
* @param y
*/
showGif(name?: string, x?: number, y?: number): void
/**
* bgm的音量
* @example core.setVolume(0, 100, core.jumpHero); // 0.1秒内淡出bgm然后主角原地跳跃半秒
* @param value 01
* @param time 1000
* @param callback
*/
setVolume(value: number, time?: number, callback?: () => void): void
/**
*
* @example core.vibrate(); // 视野左右抖动1秒
* @param direction
* @param time
* @param speed
* @param power
* @param callback
*/
vibrate(direction?: string, time?: number, speed?: number, power?: number, callback?: () => void): void
/**
* 退
* @example core.eventMoveHero(['forward'], 125, core.jumpHero); // 主角强制前进一步用时1/8秒然后主角原地跳跃半秒
* @param steps 退
* @param time 00.1
* @param callback
*/
eventMoveHero(steps: step[], time?: number, callback?: () => void): void
/**
* ex和ey为目标点的坐标null表示原地跳跃time为总跳跃时间
* @example core.jumpHero(); // 主角原地跳跃半秒
* @param ex
* @param ey
* @param time
* @param callback
*/
jumpHero(ex?: number, ey?: number, time?: number, callback?: () => void): void
/**
*
* @example core.setHeroIcon('npc48.png', true); // 把主角从阳光变成样板0层左下角的小姐姐但不立即刷新
* @param name core.status.hero.image
* @param noDraw true表示不立即刷新
*/
setHeroIcon(name: string, noDraw?: boolean): void
/**
* 使
* @example core.tryUseItem('pickaxe'); // 尝试使用破墙镐
* @param itemId id
*/
tryUseItem(itemId: string): void
/** 初始化游戏 */
resetGame(hero?: HeroStatus, hard?: any, floorId?: string, maps?: any, values?: any): void
/** 游戏获胜事件 */
win(reason?: string, norank?: boolean, noexit?: boolean): void
/** 游戏失败事件 */
lose(reason?: string): void
/** 重新开始游戏;此函数将回到标题页面 */
restart(): void
/** 询问是否需要重新开始 */
confirmRestart(): void
/**
*
* @param type
* @param func (data,callback)
*/
registerSystemEvent(type: string, func: (data?: any, callback?: () => void) => void): void
/** 注销一个系统事件 */
unregisterSystemEvent(type: string): void
/** 执行一个系统事件 */
doSystemEvent(type: string, data?: any, callback?: () => any): void
/**
* (x,y)script属性
*/
trigger(x?: number, y?: number, callback?: () => any): void
/** 战斗前触发的事件 */
beforeBattle(enemyId?: string, x?: number, y?: number): void
/** 战斗结束后触发的事件 */
afterBattle(enemyId?: string, x?: number, y?: number): void
/** 开一个门后触发的事件 */
afterOpenDoor(doorId?: string, x?: number, y?: number): void
/** 获得一个道具后的shij */
afterGetItem(id?: string, x?: number, y?: number, isGentleClick?: boolean): void
/**
*
* @param noRoute true则不计入录像
*/
getNextItem(noRoute?: boolean): void
/** 楼层转换中 */
changingFloor(floorId?: string, heroLoc?: any): void
/** 转换楼层结束的事件 */
afterChangeFloor(floorId?: string): void
/** 是否到达过某个楼层 */
hasVisitedFloor(floorId?: string): boolean
/** 到达某楼层 */
visitFloor(floorId?: string): void
/** 推箱子 */
pushBox(data?: any): void
/** 推箱子后的事件 */
afterPushBox(): void
/** 当前是否在冰上 */
onSki(number?: number): boolean
/**
*
* @param type
* @param func (data, x, y, prefix)
* data为事件内容x和y为当前点坐标nullprefix为当前点前缀
*/
registerEvent(type: string, func: (data: any, x?: number, y?: number, prefix?: string) => void): void
/** 注销一个自定义事件 */
unregisterEvent(type: string): void
/** 执行一个自定义事件 */
doEvent(data?: any, x?: number, y?: number, prefix?: any): void
/** 直接设置事件列表 */
setEvents(list?: any, x?: number, y?: number, callback?: () => any): void
/** 开始执行一系列自定义事件 */
startEvents(list?: any, x?: number, y?: number, callback?: () => any): void
/**
*
* @example core.insertCommonEvent('加点事件', [3]);
* @param name
* @param args flag:arg1, flag:arg2, ...
* @param x
* @param y
* @param callback
* @param addToLast true表示插入到末尾
*/
insertCommonEvent(name?: string, args?: any, x?: number, y?: number, callback?: () => any, addToLast?: boolean): void
/** 获得一个公共事件 */
getCommonEvent(name: string): any
/** 恢复一个事件 */
recoverEvents(data?: any): void
/** 检测自动事件 */
checkAutoEvents(): void
/** 当前是否在执行某个自动事件 */
autoEventExecuting(symbol?: string, value?: any): boolean
/** 当前是否执行过某个自动事件 */
autoEventExecuted(symbol?: string, value?: any): boolean
/** 将当前点坐标入栈 */
pushEventLoc(x?: number, y?: number, floorId?: string): boolean
/** 将当前点坐标入栈 */
popEventLoc(): any
/** 预编辑事件 */
precompile(data?: any): any
/** 点击怪物手册时的打开操作 */
openBook(fromUserAction?: boolean): void
/** 点击楼层传送器时的打开操作 */
useFly(fromUserAction?: boolean): void
/** 飞往某一层 */
flyTo(toId?: string, callback?: () => boolean): void
/** 点击存档按钮时的打开操作 */
save(fromUserAction?: boolean): void
/** 点击读档按钮时的打开操作 */
load(fromUserAction?: boolean): void
/** 点击装备栏时的打开操作 */
openEquipbox(fromUserAction?: boolean): void
/** 点击工具栏时的打开操作 */
openToolbox(fromUserAction?: boolean): void
/** 点击快捷商店按钮时的打开操作 */
openQuickShop(fromUserAction?: boolean): void
/** 点击虚拟键盘时的打开操作 */
openKeyBoard(fromUserAction?: boolean): void
/** 点击设置按钮时的操作 */
openSettings(fromUserAction?: boolean): void
/** 当前是否有未处理完毕的异步事件(不包含动画和音效) */
hasAsync(): boolean
/** 立刻停止所有异步事件 */
stopAsync(): void
/**
*
* @param name 4x4的行走图名称
*/
follow(name: string): void
/**
*
* @param name
*/
unfollow(name?: string): void
/** 数值操作 */
setValue(name: string, operator: string, value: any, prefix?: string): void
/** 数值增减 */
addValue(name: string, value: any, prefix?: string): void
/** 设置全塔属性 */
setGlobalAttribute(name: string, value: any): void
/** 设置剧情文本的属性 */
setTextAttribute(data: any): void
/** 清除对话框 */
clearTextBox(code: number): void
/** 移动对话框 */
moveTextBox(code: number, loc: [number], relative: boolean, moveMode?: string, time?: number, callback?: () => any): void
/** 设置文件别名 */
setNameMap(name: string, value?: string): void
/** 检查升级事件 */
checkLvUp(): void
}
/** @file actions.js 定义了玩家的操作控制 */
declare class actions {
/**
*
* @param action ondown, onclick, keyDown
* @param name 使
* @param func
* func返回true
* @param priority 0
*/
registerAction(action: string, name: string, func: string | ((...params: any) => void), priority?: number): void
/** 注销一个用户交互行为 */
unregisterAction(action: string, name: string): void
/** 执行一个用户交互行为 */
doRegisteredAction(action: string, ...params: any): void
/** 按下某个键时 */
onkeyDown(e: KeyboardEvent): void
/** 放开某个键时 */
onkeyUp(e: KeyboardEvent): void
/** 按住某个键时 */
pressKey(keyCode: number): void
/** 根据按下键的code来执行一系列操作 */
keyDown(keyCode: number): void
/** 根据放开键的code来执行一系列操作 */
keyUp(keyCode: number, altKey?: boolean, fromReplay?: boolean): void
/** 点击(触摸)事件按下时 */
ondown(loc: number[]): void
/** 当在触摸屏上滑动时 */
onmove(loc: number[]): void
/** 当点击(触摸)事件放开时 */
onup(loc: number[]): void
/** 具体点击屏幕上(x,y)点时,执行的操作 */
onclick(x: number, y: number, px: number, py: number, stepPostfix?: any): void
/** 滑动鼠标滚轮时的操作 */
onmousewheel(direct: 1 | -1): void
/** 长按Ctrl键时 */
keyDownCtrl(): void
/** 长按 */
longClick(x: number, y: number, px: number, py: number, fromEvent?: boolean): void
/** 点击自绘状态栏时 */
onStatusBarClick(e?: MouseEvent): void
}
/** @file enemys.js 定义了一系列和敌人相关的API函数。 */
declare class enemys {
/**
*
* @example core.hasSpecial('greenSlime', 1) // 判定绿头怪有无先攻属性
* @param special id或敌人对象或正整数数组或自然数
* @param test
* @returns special为数组或数且含有test或相等special为敌人id或对象且具有此属性true
*/
hasSpecial(special: number | number[] | string | Enemy, test: number): boolean
/**
*
* @example core.getSpecialText('greenSlime') // ['先攻', '3连击', '破甲', '反击']
* @param enemy id或敌人对象core.material.enemys.greenSlime
* @returns
*/
getSpecialText(enemy: string | Enemy): string[]
/**
*
* @example core.getSpecialHint('bat', 1) // '先攻:怪物首先攻击'
* @param enemy id或敌人对象
* @param special
* @returns
*/
getSpecialHint(enemy: string | Enemy, special: number): string
/** 获得某个敌人的某项属性值 */
getEnemyValue(enemy: string | Enemy, name: string, x?: number, y?: number, floorId?: string): any
/**
*
* @example core.canBattle('greenSlime',0,0,'MT0') // 能否打败主塔0层左上角的绿头怪假设有
* @param enemy id或敌人对象
* @param x
* @param y
* @param floorId
* @returns true表示可以打败false表示无法打败
*/
canBattle(enemy: string | Enemy, x?: number, y?: number, floorId?: string): boolean
/**
*
* @example core.getDamage('greenSlime',0,0,'MT0') // 绿头怪的总伤害
* @param enemy id或敌人对象
* @param x
* @param y
* @param floorId
* @returns null
*/
getDamage(enemy: string | Enemy, x?: number, y?: number, floorId?: string): number
/**
*
* @example core.getDamageString('greenSlime', 0, 0, 'MT0') // 绿头怪的地图显伤
* @param enemy id或敌人对象
* @param x
* @param y
* @param floorId
* @returns damage: 表示伤害值或为'???'color: 形如'#RrGgBb'
*/
getDamageString(enemy: string | Enemy, x?: number, y?: number, floorId?: string): {
damage: string,
color: string
}
/**
* useLoop开关选择回合法或二分法
* @example core.nextCriticals('greenSlime', 9, 0, 0, 'MT0') // 绿头怪接下来的9个临界
* @param enemy id或敌人对象
* @param number 1
* @param x
* @param y
* @param floorId
* @returns
*/
nextCriticals(enemy: string | Enemy, number?: number, x?: number, y?: number, floorId?: string): number[][]
/**
* 使
* @example core.nextCriticals('greenSlime', 10, 0, 0, 'MT0') // 再加10点防御能使绿头怪的伤害降低多少
* @param enemy id或敌人对象
* @param k 1
* @param x
* @param y
* @param floorId
* @returns
*/
getDefDamage(enemy: string | Enemy, k?: number, x?: number, y?: number, floorId?: string): number
/**
*
* @example core.getCurrentEnemys('MT0') // 主塔0层的敌人集合
* @param floorId id
* @returns
*/
getCurrentEnemys(floorId?: string): Enemy[]
/**
*
* @example core.hasEnemyLeft('greenSlime', ['sample0', 'sample1']) // 样板0层和1层是否有漏打的绿头怪
* @param enemyId id
* @param floorId id或其数组
* @returns true表示有敌人被漏打false表示敌人已死光
*/
hasEnemyLeft(enemyId?: string, floorId?: string | string[]): boolean
/** 获得所有怪物原始数据的一个副本 */
getEnemys(): any
/** 获得所有特殊属性定义 */
getSpecials(): [number, string | ((enemy: Enemy) => string), string | ((enemy: Enemy) => string),
string | [number, number, number, number?], number?][]
/** 获得所有特殊属性的颜色 */
getSpecialColor(enemy: string | Enemy): Array<string | [number, number, number, number?]>
/** 获得所有特殊属性的额外标记 */
getSpecialFlag(enemy: string | Enemy): Array<number>
/** 获得怪物真实属性 */
getEnemyInfo(enemy: string | Enemy, hero?: any, x?: number, y?: number, floorId?: string): {
hp: number
def: number
atk: number
money: number
exp: number
point: number
special: number | number[]
guards: Array<[number, number, string]>
[x: string]: any
}
/** 获得战斗伤害信息(实际伤害计算函数) */
getDamageInfo(enemy: string | Enemy, hero?: any, x?: number, y?: number, floorId?: string): {
mon_hp: number
mon_atk: number
mon_def: number
init_damage: number
per_damage: number
hero_per_damage: number
turn: number
damage: number
[x: string]: any
}
}
/** @file maps.js负责一切和地图相关的处理内容 */
declare class maps {
/**
* id得到数字
* @example core.getNumberById('yellowWall'); // 1
* @param id id
* @returns project\maps.jsproject\icons.js中的
*/
getNumberById(id: string): number
/**
*
* @example core.getMapArray('MT0'); // 生成主塔0层的事件层矩阵隐藏的图块视为0
* @param floorId id
* @param showDisable true表示隐藏的图块也会被表示出来
* @returns 访[y][x]
*/
getMapArray(floorId?: string, noCache?: boolean): number[][]
/** 判定图块的事件层数字不存在为0 */
getMapNumber(floorId?: string, noCache?: boolean): number
/**
*
* @example core.getBgMapArray('MT0'); // 生成主塔0层的背景层矩阵使用缓存
* @param floorId id
* @param noCache true表示不使用缓存
* @returns 访[y][x]
*/
getBgMapArray(floorId?: string, noCache?: boolean): number[][]
/**
*
* @example core.getFgMapArray('MT0'); // 生成主塔0层的前景层矩阵使用缓存
* @param floorId id
* @param noCache true表示不使用缓存
* @returns 访[y][x]
*/
getFgMapArray(floorId?: string, noCache?: boolean): number[][]
/**
*
* @example core.getBgNumber(); // 判断主角脚下的背景层图块的数字
* @param x
* @param y
* @param floorId id
* @param true表示不使用缓存而强制重算
*/
getBgNumber(x?: number, y?: number, floorId?: string, noCache?: boolean): number
/**
*
* @example core.getFgNumber(); // 判断主角脚下的前景层图块的数字
* @param x
* @param y
* @param floorId id
* @param true表示不使用缓存而强制重算
*/
getFgNumber(x?: number, y?: number, floorId?: string, noCache?: boolean): number
/**
*
* @example core.generateMovableArray(); // 判断当前地图主角从各点能向何方向移动
* @param floorId id
* @returns
*/
generateMovableArray(floorId?: string): Array<Array<Array<direction>>>
/**
*
* @exmaple core.canMoveHero(); // 判断主角是否可以前进一步
* @param x
* @param y
* @param direction
* @param floorId id
* @returns true表示可移动false表示不可移动
*/
canMoveHero(x?: number, y?: number, direction?: direction, floorId?: string): boolean
/**
*
* @example core.canMoveDirectly(0, 0); // 能否瞬移到地图左上角
* @param destX
* @param destY
* @returns -1
*/
canMoveDirectly(destX: number, destY: number): number
/**
*
* @example core.automaticRoute(0, 0); // 自动寻路到地图左上角
* @param destX
* @param destY
* @returns loc属性组成的一维数组
*/
automaticRoute(destX: number, destY: number): Array<{ direction: direction, x: number, y: number }>
/**
*
* @example core.drawMap(); // 绘制当前地图
* @param floorId id
* @param callback
*/
drawMap(floorId?: string, callback?: () => void): void
/**
*
*/
redrawMap(): void
/**
*
* @example core.drawBg(); // 绘制当前地图的背景层
* @param floorId id
* @param ctx ctx
*/
drawBg(floorId?: string, ctx?: CanvasRenderingContext2D): void
/**
*
* @example core.drawEvents(); // 绘制当前地图的事件层
* @param floorId id
* @param blocks
* @param ctx ctx
*/
drawEvents(floorId?: string, blocks?: Block[], ctx?: CanvasRenderingContext2D): void
/**
*
* @example core.drawFg(); // 绘制当前地图的前景层
* @param floorId id
* @param ctx ctx
*/
drawFg(floorId?: string, ctx?: CanvasRenderingContext2D): void
/**
*
* @example core.drawThumbnail(); // 绘制当前地图的缩略图
* @param floorId id
* @param blocks
* @param options flags用于存读档
*/
drawThumbnail(floorId?: string, blocks?: Block[], options?: {
heroLoc?: [number, number]
heroIcon?: string
/** 是否绘制显伤 */
damage?: boolean
/** 存读档时使用,可以无视 */
flags?: { [x: string]: any }
ctx?: CtxRefer
x?: number
y?: number
/** 绘制大小 */
size?: number
/** 绘制全图 */
all?: boolean
/** 绘制的视野中心 */
centerX?: number
/** 绘制的视野中心 */
centerY?: number
/** 存读档时使用,可以无视 */
noHD: boolean
}): void
/**
* cannotIn属性
* @example core.noPass(0, 0); // 判断地图左上角能否被踏入
* @param x
* @param y
* @param floorId id
* @returns true表示可踏入
*/
noPass(x: number, y: number, floorId?: string): boolean
/**
* id
* @example if(core.getBlockId(x1, y1) != 'greenSlime' && core.getBlockId(x2, y2) != 'redSlime') core.openDoor(x3, y3); // 一个简单的机关门事件,打败或炸掉这一对绿头怪和红头怪就开门
* @param x
* @param y
* @param floorId id
* @param showDisable nulltrue表示不返回null
* @returns idnull
*/
getBlockId(x: number, y: number, floorId?: string, showDisable?: boolean): string | null
/** 判定某个点的图块数字空图块为0 */
getBlockNumber(x: number, y: number, floorId?: string, showDisable?: boolean): number
/**
*
* @example if(core.getBlockCls(x1, y1) != 'enemys' && core.getBlockCls(x2, y2) != 'enemy48') core.openDoor(x3, y3); // 另一个简单的机关门事件,打败或炸掉这一对不同身高的敌人就开门
* @param x
* @param y
* @param floorId id
* @param showDisable nulltrue表示不返回null
* @returns npcnpc
*/
getBlockCls(x: number, y: number, floorId?: string, showDisable?: boolean): 'terrains' | 'animates' | 'enemys' | 'enemy48' | 'items' | 'npcs' | 'npc48' | 'autotile' | 'tileset' | null
/**
* ,
* @example core.searchBlock('*Door'); // 搜索当前地图的所有门
* @param id id0
* @param floorId id
* @param showDisable true表示计入
* @returns
*/
searchBlock(id: string, floorId?: string | Array<string>, showDisable?: boolean): Array<{ floorId: string, index: number, x: number, y: number, block: Block }>
/**
*
* @example core.searchBlockWithFilter(function (block) { return block.event.id.endsWith('Door'); }); // 搜索当前地图的所有门
* @param blockFilter block输入boolean值
* @param floorId id
* @param showDisable true表示计入
* @returns
*/
searchBlockWithFilter(blockFilter: (block: Block) => boolean, floorId?: string | Array<string>, showDisable?: boolean): Array<{ floorId: string, index: number, x: number, y: number, block: Block }>
/**
* /
* @example core.showBlock(0, 0); // 显示地图左上角的图块
* @param x
* @param y
* @param floorId id
*/
showBlock(x: number, y: number, floorId?: string): void
/**
*
* @example core.hideBlock(0, 0); // 隐藏地图左上角的图块
* @param x
* @param y
* @param floorId id
*/
hideBlock(x: number, y: number, floorId?: string): void
/**
*
* @example core.removeBlock(0, 0); // 尝试删除地图左上角的图块
* @param x
* @param y
* @param floorId id
*/
removeBlock(x: number, y: number, floorId?: string): void
/**
*
* @example core.setBlock(1, 0, 0); // 把地图左上角变成黄墙
* @param number '1'id
* @param x
* @param y
* @param floorId id
*/
setBlock(number: number | string, x: number, y: number, floorId?: string): void
/**
*
* @example core.replaceBlock(21, 22, core.floorIds); // 把游戏中地上当前所有的黄钥匙都变成蓝钥匙
* @param fromNumber
* @param toNumber
* @param floorId id或其数组
*/
replaceBlock(fromNumber: number, toNumber: number, floorId?: string | Array<string>): void
/**
*
* @example core.setBgFgBlock('bg', 167, 6, 6); // 把当前地图背景层的中心块改为滑冰
* @param name
* @param number '1'id
* @param x
* @param y
* @param floorId id
*/
setBgFgBlock(name: 'bg' | 'fg', number: number | string, x: number, y: number, floorId?: string): void
/**
*
* @example core.moveBlock(0, 0, ['down']); // 令地图左上角的图块下移一格,用时半秒,再花半秒淡出
* @param x
* @param y
* @param steps
* @param time
* @param keep true表示不淡出
* @param callback
*/
moveBlock(x: number, y: number, steps: step[], time?: number, keep?: boolean, callback?: () => void): void
/**
* V2.7
* @example core.jumpBlock(0, 0, 0, 0); // 令地图左上角的图块原地跳跃半秒,再花半秒淡出
* @param sx
* @param sy
* @param ex
* @param ey
* @param time
* @param keep true表示不淡出
* @param callback
*/
jumpBlock(sx: number, sy: number, ex: number, ey: number, time?: number, keep?: boolean, callback?: () => void): void
/**
* 使使core.drawHeroAnimate(name, callback)
* @example core.drawAnimate('attack', core.nextX(), core.nextY(), false, core.vibrate); // 在主角面前一格播放普攻动画动画停止后视野左右抖动1秒
* @param name
* @param x
* @param y
* @param alignWindow
* @param callback
* @returns core.stopAnimate()
*/
drawAnimate(name: string, x: number, y: number, alignWindow: boolean, callback?: () => void): number
/**
*
* @param name
* @param callback
* @returns core.stopAnimate()
*/
drawHeroAnimate(name: string, callback?: () => void): number
/**
*
* @param id drawAnimate或drawHeroAnimate返回值
* @param doCallback
*/
stopAnimate(id?: number, doCallback?: boolean): void
/** 获得当前正在播放的所有指定动画的id列表 */
getPlayingAnimates(name?: string): Array<number>
/** 加载某个楼层(从剧本或存档中) */
loadFloor(floorId: string, map?: any): ResolvedMap
/** 根据需求解析出blocks */
extractBlocks(map?: any): void
/** 根据需求为UI解析出blocks */
extractBlocks(map?: any, flags?: any): void
/** 根据数字获得图块 */
getBlockByNumber(number: number): Block
/** 根据ID获得图块 */
getBlockById(id: string): Block
/** 获得当前事件点的ID */
getIdOfThis(id?: string): string
/** 初始化一个图块 */
initBlock(x?: number, y?: number, id?: string | number, addInfo?: boolean, eventFloor?: any): Block
/** 压缩地图 */
compressMap(mapArr?: any, floorId?: string): object
/** 解压缩地图 */
decompressMap(mapArr?: any, floorId?: string): object
/** 将当前地图重新变成数字,以便于存档 */
saveMap(floorId?: string): any
/** 将存档中的地图信息重新读取出来 */
loadMap(data?: any, floorId?: string, flags?: any): object
/** 更改地图画布的尺寸 */
resizeMap(floorId?: string): void
/** 以x,y的形式返回每个点的事件 */
getMapBlocksObj(floorId?: string, noCache?: boolean): object
/** 获得某些点可否通行的信息 */
canMoveDirectlyArray(locs?: any): object
/** 绘制一个图块 */
drawBlock(block?: any, animate?: any): void
/** 生成groundPattern */
generateGroundPattern(floorId?: string): void
/** 某个点是否存在NPC */
npcExists(x?: number, y?: number, floorId?: string): boolean
/** 某个点是否存在(指定的)地形 */
terrainExists(x?: number, y?: number, id?: string, floorId?: string): boolean
/** 某个点是否存在楼梯 */
stairExists(x?: number, y?: number, floorId?: string): boolean
/** 当前位置是否在楼梯边;在楼传平面塔模式下对箭头也有效 */
nearStair(): boolean
/** 某个点是否存在(指定的)怪物 */
enemyExists(x?: number, y?: number, id?: string, floorId?: string): boolean
/** 获得某个点的block */
getBlock(x?: number, y?: number, floorId?: string, showDisable?: boolean): Block
/** 获得某个图块或素材的信息包括IDcls图片坐标faceIds等等 */
getBlockInfo(block?: any): any
/** 获得某个图块对应行走图朝向向下的那一项的id如果不存在行走图绑定则返回自身id */
getFaceDownId(block?: any): string
/** 根据图块的索引来隐藏图块 */
hideBlockByIndex(index?: any, floorId?: string): void
/** 一次性隐藏多个block */
hideBlockByIndexes(indexes?: any, floorId?: string): void
/** 根据block的索引尽可能删除该块 */
removeBlockByIndex(index?: any, floorId?: string): void
/** 一次性删除多个block */
removeBlockByIndexes(indexes?: any, floorId?: string): void
/** 显示前景/背景地图 */
showBgFgMap(name?: string, loc?: any, floorId?: string, callback?: () => any): void
/** 隐藏前景/背景地图 */
hideBgFgMap(name?: string, loc?: any, floorId?: string, callback?: () => any): void
/** 显示一个楼层贴图 */
showFloorImage(loc?: any, floorId?: string, callback?: () => any): void
/** 隐藏一个楼层贴图 */
hideFloorImage(loc?: any, floorId?: string, callback?: () => any): void
/** 动画形式转变某点图块 */
animateSetBlock(number?: number | string, x?: number, y?: number, floorId?: string, time?: number, callback?: () => any): void
/** 动画形式同时转变若干点图块 */
animateSetBlocks(number?: number | string, locs?: any, floorId?: string, time?: number, callback?: () => any): void
/** 事件转向 */
turnBlock(direction?: string, x?: number, y?: number, floorId?: string): void
/** 重置地图 */
resetMap(floorId?: string | string[]): void
/** 显示/隐藏某个块时的动画效果 */
animateBlock(loc?: any, type?: any, time?: any, callback?: () => any): void
/** 添加一个全局动画 */
addGlobalAnimate(block?: any): void
/** 删除一个或所有全局动画 */
removeGlobalAnimate(x?: number, y?: number, name?: string): void
/** 绘制UI层的box动画 */
drawBoxAnimate(): void
}
/** @file loader.js 主要负责资源的加载 */
declare class loader {
/** 加载一系列图片 */
loadImages(dir: any, names: any, toSave: any, callback?: () => any): any
/** 加载某一张图片 */
loadImage(dir: any, imgName?: any, callback?: () => any): any
/** 从zip中加载一系列图片 */
loadImagesFromZip(url?: any, names?: any, toSave?: any, onprogress?: any, onfinished?: any): any
/** 加载一个音乐 */
loadOneMusic(name?: string): any
/** 加载一个音效 */
loadOneSound(name?: string): any
/** 加载一个bgm */
loadBgm(name?: string): any
/** 释放一个bgm的缓存 */
freeBgm(name?: string): any
}
/** @file items.js 主要负责一切和道具相关的内容。 */
declare class items {
/**
*
* @example core.getItemEffect('redPotion', 10) // 执行获得10瓶红血的效果
* @param itemId id
* @param itemNum 1
*/
getItemEffect(itemId: string, itemNum?: number): void
/**
*
* @example core.getItemEffectTip(redPotion) // (获得 红血瓶)',生命+100'
* @param itemId id
* @returns itemEffectTip的内容
*/
getItemEffectTip(itemId: string): string
/**
* 使
* @example core.useItem('pickaxe', true) // 使用破墙镐,不计入录像,无回调
* @param itemId id
* @param noRoute 使true
* @param callback 使使
*/
useItem(itemId: string, noRoute?: boolean, callback?: () => void): void
/**
* 使
* @example core.canUseItem('pickaxe') // 能否使用破墙镐
* @param itemId id
* @returns true表示可以使用
*/
canUseItem(itemId: string): boolean
/**
*
* @example core.itemCount('yellowKey') // 持有多少把黄钥匙
* @param itemId id
* @returns 穿
*/
itemCount(itemId: string): number
/**
* (穿)
* @example core.hasItem('yellowKey') // 主角是否持有黄钥匙
* @param itemId id
* @returns true表示持有
*/
hasItem(itemId: string): boolean
/**
* 穿
* @example core.hasEquip('sword5') // 主角是否装备了神圣剑
* @param itemId id
* @returns true表示已装备
*/
hasEquip(itemId: string): boolean
/**
*
* @example core.getEquip(1) // 主角目前装备了什么盾牌
* @param equipType
* @returns idnull表示未穿戴
*/
getEquip(equipType: number): string
/**
*
* @example core.setItem('yellowKey', 3) // 设置黄钥匙为3把
* @param itemId id
* @param itemNum 0
*/
setItem(itemId: string, itemNum?: number): void
/**
*
* @example core.addItem('yellowKey', -2) // 没收两把黄钥匙
* @param itemId id
* @param itemNum
*/
addItem(itemId: string, itemNum?: number): void
/**
*
* @example core.getEquipTypeById('shield5') // 1盾牌
* @param equipId id
* @returns
*/
getEquipTypeById(equipId: string): number | string
/**
* 穿
* @example core.canEquip('sword5', true) // 主角可以装备神圣剑吗,如果不能会有提示
* @param equipId id
* @param hint 穿
* @returns true表示可以穿上false表示无法穿上
*/
canEquip(equipId: string, hint: boolean): boolean
/**
* 穿
* @example core.loadEquip('sword5') // 尝试装备上背包里的神圣剑,无回调
* @param equipId id
* @param callback 穿
*/
loadEquip(equipId: string, callback?: () => void): void
/**
*
* @example core.unloadEquip(1) // 卸下盾牌,无回调
* @param equipType
* @param callback
*/
unloadEquip(equipType: number, callback?: () => void): void
/**
*
* @example core.compareEquipment('sword5', 'shield5') // 比较神圣剑和神圣盾的优劣
* @param compareEquipId id
* @param beComparedEquipId id
* @returns 0
*/
compareEquipment(compareEquipId: string, beComparedEquipId: string): { [key: string]: number }
/**
*
* @example core.quickSaveEquip(1) // 将当前套装保存为1号套装
* @param index
*/
quickSaveEquip(index: number): void
/**
*
* @example core.quickLoadEquip(1) // 快速换上1号套装
* @param index
*/
quickLoadEquip(index: number): void
/** 获得所有道具 */
getItems(): void
/** 删除某个物品 */
removeItem(itemId?: string, itemNum?: number): void
/** 根据类型获得一个可用的装备孔 */
getEquipTypeByName(name?: string): void
/**
*
* @example core.setEquip('sword1', 'value', 'atk', 300, '+='); // 设置铁剑的攻击力数值再加300
* @param equipId id
* @param valueType valuepercentage
* @param name atk
* @param value
* @param operator +=
* @param prefix
*/
setEquip(equipId: string, valueType: string, name: string, value: any, operator?: string, prefix?: string): void
}
/** @file ui.js 主要用来进行UI窗口的绘制如对话框、怪物手册、楼传器、存读档界面等等。*/
declare class ui {
/**
* contextnull
* context自身
*/
getContextByName(canvas: CtxRefer): CanvasRenderingContext2D
/**
*
* name为画布名context本身
* name也可以是'all'all则为清空所有系统画布
*/
clearMap(name: CtxRefer, x?: number, y?: number, w?: number, h?: number): void
/**
*
* @param text
* @param style
* @param font
*/
fillText(name: CtxRefer, text: string, x: number, y: number, style?: string, font?: string, maxWidth?: number): void
/**
*
* @param text
* @param style
* @param strokeStyle
* @param font
*/
fillBoldText(name: CtxRefer, text: string, x: number, y: number, style?: string, strokeStyle?: string, font?: string, maxWidth?: number, lineWidth?: number): void
/**
* style可选为绘制样式
* @param style
* @param angle
*/
fillRect(name: CtxRefer, x: number, y: number, width: number, height: number, style?: string, angle?: number): void
/**
*
* @param style
*/
strokeRect(name: CtxRefer, x: number, y: number, width: number, height: number, style: string, lineWidth?: number, angle?: number): void
/**
* name为要创建的画布名
* x,y为创建的画布相对窗口左上角的像素坐标width,height为创建的长宽
* zIndex为创建的纵向高度z值高的将覆盖z值低的z值可在个性化中查看
* contextcore.dymCanvas[name]
*/
createCanvas(name: string, x: number, y: number, width: number, height: number, zIndex: number): CanvasRenderingContext2D
/** 重新定位一个自定义画布 */
relocateCanvas(name: string, x: number, y: number, useDelta: boolean): void
/**
*
* @param styleOnly styletrue
* @param isTempCanvas true
*/
resizeCanvas(name: string, x?: number, y?: number, styleOnly?: boolean, isTempCanvas?: boolean): void
/** 设置一个自定义画布的旋转角度 */
rotateCanvas(name: CtxRefer, angle: number, centerX?: number, centerY?: number): void
/** 删除一个自定义画布 */
deleteCanvas(name: string | ((name: string) => boolean)): void
/** 清空所有的自定义画布 */
deleteAllCanvas(): void
/**
*
* 8canvas的drawImage的八个参数完全相同
* http://www.w3school.com.cn/html5/canvas_drawimage.asp 了解更多。
* @param name context
* @param image images中去获取
*/
drawImage(name: CtxRefer,
image: CanvasImageSource | string, dx: number, dy: number): void
drawImage(name: CtxRefer,
image: CanvasImageSource | string, dx: number, dy: number, dw: number, dh: number): void
drawImage(name: CtxRefer,
image: CanvasImageSource | string,
sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void
/** 根据最大宽度自动缩小字体 */
setFontForMaxWidth(name: string | CanvasRenderingContext2D, text: string, maxWidth: number, font?: any): string
/** 在某个canvas上绘制一个圆角矩形 */
fillRoundRect(name: string | CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number, style?: string, angle?: number): void
/** 在某个canvas上绘制一个圆角矩形的边框 */
strokeRoundRect(name: string | CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number, style?: string, lineWidth?: number, angle?: number): void
/** 在某个canvas上绘制一个多边形 */
fillPolygon(name: string | CanvasRenderingContext2D, nodes?: any, style?: string): void
/** 在某个canvas上绘制一个多边形的边框 */
strokePolygon(name: string | CanvasRenderingContext2D, nodes?: any, style?: string, lineWidth?: number): void
/** 在某个canvas上绘制一个椭圆 */
fillEllipse(name: string | CanvasRenderingContext2D, x: number, y: number, a: number, b: number, angle?: number, style?: any): void
/** 在某个canvas上绘制一个圆 */
fillCircle(name: string | CanvasRenderingContext2D, x: number, y: number, r: number, style?: string): void
/** 在某个canvas上绘制一个椭圆的边框 */
strokeEllipse(name: string | CanvasRenderingContext2D, x: number, y: number, a: number, b: number, angle?: number, style?: string, lineWidth?: number): void
/** 在某个canvas上绘制一个圆的边框 */
strokeCircle(name: string | CanvasRenderingContext2D, x: number, y: number, r: any, style?: string, lineWidth?: number): void
/** 在某个canvas上绘制一个扇形 */
fillArc(name: string | CanvasRenderingContext2D, x: number, y: number, r: number, start: number, end: number, style?: string): void
/** 在某个canvas上绘制一段弧 */
strokeArc(name: string | CanvasRenderingContext2D, x: number, y: number, r: number, start: number, end: number, style?: string, lineWidth?: number): void
/** 保存某个canvas状态 */
saveCanvas(name: string | CanvasRenderingContext2D): void
/** 加载某个canvas状态 */
loadCanvas(name: string | CanvasRenderingContext2D): void
/** 设置某个canvas的baseline */
setTextBaseline(name: string | CanvasRenderingContext2D, baseline: any): void
/** 字符串自动换行的分割 */
splitLines(name: string | CanvasRenderingContext2D, text: string, maxWidth?: number, font?: string): void
/** 在某个canvas上绘制一个图标 */
drawIcon(name: string | CanvasRenderingContext2D, id: string, x: number, y: number, w?: number, h?: number, frame?: number): void
/** 结束一切事件和绘制关闭UI窗口返回游戏进程 */
closePanel(): void
/** 清空UI层内容 */
clearUI(): void
/**
*
* @param text ${}
* @param id ID
* @param frame
*/
drawTip(text: string, id?: string, frame?: number): void
/** 地图中间绘制一段文字 */
drawText(contents: string, callback?: () => any): void
/** 自绘选择光标 */
drawUIEventSelector(code: number, background: string, x: number, y: number, w: number, h: number, z?: number): void
/** 清除一个或多个选择光标 */
clearUIEventSelector(code: number | number[]): void
/** 绘制一个确认框 */
drawConfirmBox(text: string, yesCallback?: () => void, noCallback?: () => void): void
/** 绘制WindowSkin */
drawWindowSkin(background: any, ctx: string | CanvasRenderingContext2D, x: number, y: number, w: string, h: string, direction?: any, px?: any, py?: any): void
/** 绘制一个背景图可绘制winskin或纯色背景支持小箭头绘制 */
drawBackground(left: string, top: string, right: string, bottom: string, posInfo?: any): void
/**
*
* @param ctx
* @param content \n, \r[...], \i[...], \c[...], \d, \e
* @param config
* left, topmaxWidthcoloralign
* fontSizelineHeighttimefont
* @returns
*/
drawTextContent(ctx: string | CanvasRenderingContext2D, content: string, config: TextContentConfig): any
/** 获得某段文字的预计绘制高度;参见 drawTextContent */
getTextContentHeight(content: string, config?: any): void
/** 绘制一个对话框 */
drawTextBox(content: string, config?: any): void
/** 绘制滚动字幕 */
drawScrollText(content: string, time: number, lineHeight?: number, callback?: () => any): void
/** 文本图片化 */
textImage(content: string, lineHeight?: number): any
/** 绘制一个选项界面 */
drawChoices(content: string, choices: any): void
/** 绘制等待界面 */
drawWaiting(text: string): void
/** 绘制分页 */
drawPagination(page?: any, totalPage?: any, y?: number): void
/** 绘制怪物手册 */
drawBook(index?: any): void
/** 绘制楼层传送器 */
drawFly(page?: any): void
/** 获得所有应该在道具栏显示的某个类型道具 */
getToolboxItems(cls: string): string[]
/** 绘制状态栏 */
drawStatusBar(): void
/** 绘制灯光效果 */
drawLight(name: string | CanvasRenderingContext2D, color?: any, lights?: any, lightDec?: number): void
/** 在某个canvas上绘制一条线 */
drawLine(name: string | CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number, style?: string, lineWidth?: number): void
/** 在某个canvas上绘制一个箭头 */
drawArrow(name: string | CanvasRenderingContext2D, x1: number, y1: number, x2: number, y2: number, style?: string, lineWidth?: number): void
/** 设置某个canvas的文字字体 */
setFont(name: string | CanvasRenderingContext2D, font: string): void
/** 设置某个canvas的线宽度 */
setLineWidth(name: string | CanvasRenderingContext2D, lineWidth: number): void
/** 设置某个canvas的alpha值返回设置之前画布的不透明度。 */
setAlpha(name: string | CanvasRenderingContext2D, alpha: number): number
/** 设置某个canvas的filter属性 */
setFilter(name: string | CanvasRenderingContext2D, filter: any): void
/** 设置某个canvas的透明度尽量不要使用本函数而是全部换成setAlpha实现 */
setOpacity(name: string | CanvasRenderingContext2D, opacity: number): void
/** 设置某个canvas的绘制属性如颜色等 */
setFillStyle(name: string | CanvasRenderingContext2D, style: string): void
/** 设置某个canvas边框属性 */
setStrokeStyle(name: string | CanvasRenderingContext2D, style: string): void
/** 设置某个canvas的对齐 */
setTextAlign(name: string | CanvasRenderingContext2D, align: string): void
/** 计算某段文字的宽度 */
calWidth(name: string | CanvasRenderingContext2D, text: string, font?: string): number
}
/** 工具类 主要用来进行一些辅助函数的计算 */
declare class utils {
/**
* ${}
* @example core.replaceText('衬衫的价格是${status:hp}镑${item:yellowKey}便士。'); // 把主角的生命值和持有的黄钥匙数量代入这句话
* @param text 使${}js表达式idid
* @returns
*/
replaceText(text: string, prefix?: string): string
/**
* 如status:xxx等
* @example core.replaceValue('衬衫的价格是${status:hp}镑${item:yellowKey}便士。'); // 把这两个冒号表达式替换为core.getStatus('hp')和core.itemCount('yellowKey')这样的函数调用
* @param value
* @returns
*/
replaceValue(value: string): string
/**
* 支持status:xxx等的计算
* @example core.calValue('status:hp + status:def'); // 计算主角的生命值加防御力
* @param value
* @param prefix
* @returns
*/
calValue(value: string, prefix?: string): any
/**
* ba的开头a.unshift(b)b只能是单项的不足
* @example core.unshift(todo, {type: 'unfollow'}); // 在事件指令数组todo的开头插入“取消所有跟随者”指令
* @param a
* @param b
* @returns a本身得到的
*/
unshift(a: any[], b: any): any[]
/**
* ba的末尾a.push(b)b只能是单项的不足
* @example core.push(todo, {type: 'unfollow'}); // 在事件指令数组todo的末尾插入“取消所有跟随者”指令
* @param a
* @param b
* @returns a本身得到的
*/
push(a: any[], b: any): any[]
/**
* 适用于global:xxx
* @example core.setBlobal('一周目已通关', true); // 设置全局存储“一周目已通关”为true方便二周目游戏中的新要素。
* @param key
* @param value null表示清除此全局存储
*/
setGlobal(key: string, value?: any): void
/**
* 适用于global:xxx
* @example if (core.getGlobal('一周目已通关', false) === true) core.getItem('dagger'); // 二周目游戏进行到此处时会获得一把屠龙匕首
* @param key
* @param defaultValue nullundefined时
* @returns
*/
getGlobal(key: string, defaultValue?: any): any
/**
* ()
* @example core.clone(core.status.hero, (name, value) => (name == 'items' || typeof value == 'number'), false); // 深拷贝主角的属性和道具
* @param data
* @param filter data为数组或对象时拷贝哪些项或属性true表示拷贝
* @param recursion true表示过滤器也被递归
* @returns
*/
clone<T>(data?: T, filter?: (name: string, value: any) => boolean, recursion?: boolean): T
/** 深拷贝一个1D或2D的数组 */
cloneArray(data?: Array<number> | Array<Array<number>>): Array<number> | Array<Array<number>>
/**
*
* @example core.splitImage(core.material.images.images['npc48.png'], 32, 48); // 把npc48.png切分成若干32×48px的小人
* @param image []
* @param width 32
* @param height
* @returns
*/
splitImage(image?: string | HTMLImageElement, width?: number, height?: number): HTMLImageElement[]
/**
* 10000w,e,z,j,g
* @example core.formatBigNumber(123456789, false); // "12346w"
* @param x
* @param onMap true表示用于地图显伤56
* @returns
*/
formatBigNumber(x: number, onMap?: boolean): string
/** 变速移动 */
applyEasing(mode?: string): (number) => number;
/**
*
* @example core.arrayToRGB([102, 204, 255]); // "#66ccff",加载画面的宣传色
* @param color 255
* @returns 使
*/
arrayToRGB(color: [number, number, number]): string
/**
*
* @example core.arrayToRGBA([102, 204, 255]); // "rgba(102,204,255,1)"
* @param color 255011
* @returns
*/
arrayToRGBA(color: [number, number, number, number]): string
/**
* base64压缩
* @example core.encodeRoute(core.status.route); // 一压当前录像
* @param route 0-9A-Za-z和下划线JSON.stringify预处理再base64压缩才能交由一压
* @returns
*/
encodeRoute(route: string[]): string
/**
*
* @example core.decodeRoute(core.encodeRoute(core.status.route)); // 一压当前录像再解压-_-|
* @param route
* @returns
*/
decodeRoute(route: string): string[]
/**
* nullundefined和NaN
* @example core.isset(0/0); // false因为0/0等于NaN
* @param v
* @returns false表示待测值为nullundefinedNaN或未填写true表示为其他值!(v == null || v != v)
*/
isset(v?: any): boolean
/**
*
* @example core.subarray(['ad', '米库', '小精灵', '小破草', '小艾'], ['ad', '米库', '小精灵']); // ['小破草', '小艾']
* @param a b短将返回null
* @param b a长将返回null
* @returns b不是a的前缀将返回nulla去掉此前缀后的剩余数组
*/
subarray(a?: any[], b?: any[]): any[] | null
/**
* array是不是一个数组element是否在该数组中
* @param array false
* @param element
* @returns array为数组且具有element这项truefalse
*/
inArray(array?: any, element?: any): boolean
/**
* x限定在[a,b]a和b可交换
* @example core.clamp(1200, 1, 1000); // 1000
* @param x !x为true时x一律视为0
* @param a b将导致与b交换
* @param b a将导致与a交换
*/
clamp(x: number, a: number, b: number): number
/**
*
* @example core.setStatusBarInnerHTML('hp', core.status.hero.hp, 'color: #66CCFF'); // 更新状态栏中的主角生命,使用加载画面的宣传色
* @param name 'hp', 'atk', 'def'core.statusBar中的一个合法项
* @param value 6
* @param css css样式
*/
setStatusBarInnerHTML(name: string, value: any, css?: string): void
/**
* Verdana不是等宽字体
* @example core.strlen('无敌ad'); // 6
* @param str
* @returns 2ASCII字符为1
*/
strlen(str: string): number
/**
*
* @example core.playSound(core.matchWildcard('*Key', itemId) ? 'item.mp3' : 'door.mp3'); // 判断捡到的是钥匙还是别的道具,从而播放不同的音效
* @param pattern 0
* @param string
* @returns true表示匹配成功false表示匹配失败
*/
matchWildcard(pattern: string, string: string): boolean
/**
* base64加密
* @example core.encodeBase64('If you found this note in a small wooden box with a heart on it'); // "SWYgeW91IGZvdW5kIHRoaXMgbm90ZSBpbiBhIHNtYWxsIHdvb2RlbiBib3ggd2l0aCBhIGhlYXJ0IG9uIGl0"
* @param str
* @returns
*/
encodeBase64(str: string): string
/**
* base64解密
* @example core.decodeBase64('SWYgeW91IGZvdW5kIHRoaXMgbm90ZSBpbiBhIHNtYWxsIHdvb2RlbiBib3ggd2l0aCBhIGhlYXJ0IG9uIGl0'); // "If you found this note in a small wooden box with a heart on it"
* @param str
* @returns
*/
decodeBase64(str: string): string
/**
* SL的随机数
* @exmaple 1 + core.rand(6); // 随机生成一个小于7的正整数模拟骰子的效果
* @param num num的随机自然数1
* @returns 使
*/
rand(num?: number): number
/**
* SL的随机数
* @exmaple 1 + core.rand2(6); // 随机生成一个小于7的正整数模拟骰子的效果
* @param num 02147483648
* @returns [0, num)
*/
rand2(num?: number): number
/**
*
* @example core.download('route.txt', core.status.route); // 弹窗请求下载录像
* @param filename
* @param content
*/
download(filename: string, content: string | String[]): void
/**
* core.drawConfirmBox()
* @example core.myconfirm('重启游戏?', core.restart); // 弹窗询问玩家是否重启游戏
* @param hint
* @param yesCallback
* @param noCallback
*/
myconfirm(hint: string, yesCallback: () => void, noCallback?: () => void): void
/**
* ,
* @example core.same(['1', 2], ['1', 2]); // true
*/
same(a?: any, b?: any): boolean
/**
* []
* @param success
* @param error
* @param readType DataUrl形式读取
*/
readFile(success, error, readType): void
/**
* []
* @param content
*/
readFileContent(content): void
/**
*
*/
copy(data: string): void
/**
* HTTP请求 []
* @param type
* @param url
* @param formData POST请求则为表单数据
* @param success
* @param error
*/
http(type: 'GET' | 'POST', url: string, formData: FormData, success: () => void, error: () => void): void
/** 获得浏览器唯一的guid */
getGuid(): string
/** 解压缩一个数据 */
decompress(value: any): any
/** 设置本地存储 */
setLocalStorage(key: string, value?: any): void
/** 获得本地存储 */
getLocalStorage(key: string, defaultValue?: any): any
/** 移除本地存储 */
removeLocalStorage(key: string): void
/** 往数据库写入一段数据 */
setLocalForage(key: string, value?: any, successCallback?: () => void, errorCallback?: () => void): void
/** 从数据库读出一段数据 */
getLocalForage(key: string, defaultValue?: any, successCallback?: (data: any) => void, errorCallback?: () => void): void
/** 移除数据库的数据 */
removeLocalForage(key: string, successCallback?: () => void, errorCallback?: () => void): void
/** 格式化日期为字符串 */
formatDate(date: Date): string
/** 格式化日期为最简字符串 */
formatDate2(date: Date): string
/** 格式化时间 */
formatTime(time: number): string
/** 两位数显示 */
setTwoDigits(x: number): string
/** 格式化文件大小 */
formatSize(size: number): string
/** 访问浏览器cookie */
getCookie(name: string): string
/**
*
* @param turn
* @param direction
*/
turnDirection(turn: 'up' | 'down' | 'left' | 'right' | ':left' | ':right' | ':back', direction?: string): string
/** 是否满足正则表达式 */
matchRegex(pattern: string, string: string): string
/** 让用户输入一段文字 */
myprompt(hint: string, value: string, callback?: (data?: string) => any): void
/** 动画显示某对象 */
showWithAnimate(obj?: any, speed?: number, callback?: () => any): void
/** 动画使某对象消失 */
hideWithAnimate(obj?: any, speed?: number, callback?: () => any): void
/** 解压一段内容 */
unzip(blobOrUrl?: any, success?: (data: any) => void, error?: (error: string) => void, convertToText?: boolean, onprogress?: (loaded: number, total: number) => void): void
}
/** 和图标相关的函数 */
declare class icons {
/** 获得所有图标类型 */
getIcons(): void
/** 根据ID获得其类型 */
getClsFromId(id?: string): string
/** 获得所有图标的ID */
getAllIconIds(): void
/** 根据图块数字或ID获得所在的tileset和坐标信息 */
getTilesetOffset(id?: string): void
}
declare class plugin {
}
type core = {
/** 地图可视部分大小 */
readonly __SIZE__: number;
/** 地图像素 */
readonly __PIXELS__: number;
/** 地图像素的一半 */
readonly __HALF_SIZE__: number;
/** 游戏素材 */
readonly material: {
readonly animates: { [key: string]: Animate },
readonly images: {
airwall: HTMLImageElement
animates: HTMLImageElement
enemys: HTMLImageElement
enemy48: HTMLImageElement
items: HTMLImageElement
npcs: HTMLImageElement
npc48: HTMLImageElement
terrains: HTMLImageElement
autotile: { [x: string]: HTMLImageElement }
images: { [x: string]: HTMLImageElement }
tilesets: { [x: string]: HTMLImageElement }
},
readonly bgms: { [key: string]: HTMLAudioElement },
readonly sounds: { [key: string]: HTMLAudioElement },
readonly ground: CanvasRenderingContext2D
/**
*
* @example core.material.enemys.greenSlime // 获得绿色史莱姆的属性数据
*/
readonly enemys: { [key: string]: Enemy },
/** 道具信息 */
readonly items: { [key: string]: Item }
readonly icons: { [key: string]: { [key: string]: number } },
}
readonly timeout: {
turnHeroTimeout: any,
onDownTimeout: any,
sleepTimeout: any,
}
readonly interval: {
heroMoveInterval: any,
onDownInterval: any,
}
readonly animateFrame: {
totalTime: number
totalTimeStart: number
globalAnimate: boolean,
globalTime: number
selectorTime: number
selectorUp: boolean,
animateTime: number
moveTime: number
lastLegTime: number
leftLeg: boolean,
readonly weather: {
time: number
type: any
nodes: [],
data: any
fog: any,
cloud: any,
},
readonly tips: {
time: number
offset: number
list: [],
lastSize: number
},
readonly asyncId: {}
}
readonly musicStatus: {
audioContext: AudioContext,
/** 是否播放BGM */bgmStatus: boolean
/** 是否播放SE */soundStatus: boolean
/** 正在播放的BGM */playingBgm: string
/** 上次播放的bgm */lastBgm: string
gainNode: GainNode,
/** 正在播放的SE */playingSounds: {}
/** 音量 */volume: number
/** 缓存BGM内容 */cachedBgms: string[]
/** 缓存的bgm数量 */cachedBgmCount: number
}
readonly platform: {
/** 是否http */isOnline: boolean
/** 是否是PC */isPC: boolean
/** 是否是Android */isAndroid: boolean
/** 是否是iOS */isIOS: boolean
string: string
/** 是否是微信 */isWeChat: boolean
/** 是否是QQ */isQQ: boolean
/** 是否是Chrome */isChrome: boolean
/** 是否支持复制到剪切板 */supportCopy: boolean
fileInput: null
/** 是否支持FileReader */fileReader: null
/** 读取成功 */successCallback: null
/** 读取失败 */errorCallback: null
}
readonly dom: { [key: string]: HTMLElement }
/** dom样式 */
readonly domStyle: {
scale: number,
isVertical: boolean,
showStatusBar: boolean,
toolbarBtn: boolean,
}
readonly bigmap: {
canvas: string[],
offsetX: number // in pixel
offsetY: number
posX: number
posY: number
width: number // map width and height
height: number
v2: boolean
threshold: number
extend: number
scale: number
tempCanvas: CanvasRenderingContext2D // A temp canvas for drawing
cacheCanvas: CanvasRenderingContext2D
}
readonly saves: {
saveIndex: number
readonly ids: { [key: number]: boolean }
autosave: {
data: Save[]
max: number
storage: true
time: number
updated: boolean
}
favorite: []
readonly favoriteName: {}
}
readonly initStatus: gameStatus;
readonly dymCanvas: { [key: string]: CanvasRenderingContext2D }
/** 游戏状态 */
readonly status: gameStatus
/**
*
* @example core.floors[core.status.floorId].events // 获得本楼层的所有自定义事件
*/
readonly floors: { [key: string]: ResolvedMap }
readonly floorIds: string[]
readonly statusBar: {
readonly icons: { [x: string]: HTMLImageElement }
}
readonly materials: string[]
readonly control: control
readonly loader: loader
readonly events: events
readonly enemys: enemys
readonly items: items
readonly maps: maps
readonly ui: ui
readonly utils: utils
readonly icons: icons
readonly actions: actions
readonly plugin: plugin
} & control & events & loader & enemys & items & maps & ui & utils & icons & actions & plugin
type main = {
editorOpened: boolean
readonly core: core
readonly dom: { [key: string]: HTMLElement }
/** 游戏版本,发布后会被随机,请勿使用该属性 */
readonly version: string
readonly useCompress: boolean
readonly savePages: number
readonly mode: 'play' | 'editor'
readonly statusBar: {
images: { [x: string]: HTMLElement }
icons: { [x: string]: number | null | undefined }
[x: string]: HTMLElement | object
}
readonly __VERSION__: string
readonly __VERSION_CODE__: number
readonly images: string[]
/** 输出内容极不好用建议换成console我甚至不知道样板为什么会有这个东西*/
log(e: string | Error, error: boolean): void
}
declare class Sprite {
x: number
y: number
width: number
height: number
zIndex: number
reference: 'game' | 'window'
canvas: HTMLCanvasElement
context: CanvasRenderingContext2D
name: string
readonly count: number
/** sprite
* @param reference
* @param name sprite的名称便core.dymCanvas获取
*/
constructor(x: number, y: number, w: number, h: number, z: number, reference?: 'game' | 'window', name?: string)
/** 初始化 */
init(): void
/** 设置css特效 */
setCss(css: string): Sprite
/**
* sprite
* @param isDelta sprite会相对于原先的位置进行移动
*/
move(x: number, y: number, isDelta?: boolean): Sprite
/**
* sprite的大小
* @param {boolean} styleOnly css效果
*/
resize(w: number, h: number, styleOnly?: boolean): Sprite
/** 旋转画布 */
rotate(angle: number, cx?: number, cy?: number): Sprite
/** 擦除画布 */
clear(x: number, y: number, w?: number, h?: number): Sprite
/** 删除 */
destroy(): void
/** 添加事件监听器 */
addEventListener: HTMLCanvasElement['addEventListener']
/** 删除事件监听器 */
removeEventListenr: HTMLCanvasElement['addEventListener']
}
declare let main: main
declare let core: core
declare let flags: { [x: string]: any }
declare let hero: HeroStatus