diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml
deleted file mode 100644
index d564359d..00000000
--- a/.idea/codeStyleSettings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
deleted file mode 100644
index 79a710fd..00000000
--- a/.idea/codeStyles/Project.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
deleted file mode 100644
index a55e7a17..00000000
--- a/.idea/codeStyles/codeStyleConfig.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
deleted file mode 100644
index 7f0771f3..00000000
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
deleted file mode 100644
index 17b6b9a1..00000000
--- a/.idea/inspectionProfiles/profiles_settings.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/markdown-exported-files.xml b/.idea/markdown-exported-files.xml
deleted file mode 100644
index 5d1f1293..00000000
--- a/.idea/markdown-exported-files.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml
deleted file mode 100644
index dbe0e461..00000000
--- a/.idea/markdown-navigator.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/markdown-navigator/profiles_settings.xml b/.idea/markdown-navigator/profiles_settings.xml
deleted file mode 100644
index 57927c5a..00000000
--- a/.idea/markdown-navigator/profiles_settings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 28a804d8..00000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index f7251ba2..00000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/mota-js.iml b/.idea/mota-js.iml
deleted file mode 100644
index 24643cc3..00000000
--- a/.idea/mota-js.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/mota-js.xml b/.idea/mota-js.xml
deleted file mode 100644
index 24643cc3..00000000
--- a/.idea/mota-js.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7f..00000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml
deleted file mode 100644
index 157a5562..00000000
--- a/.idea/watcherTasks.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/API列表.txt b/API列表.txt
deleted file mode 100644
index 2f2bb602..00000000
--- a/API列表.txt
+++ /dev/null
@@ -1,2159 +0,0 @@
-# 附录:API列表
-
-?> 目前版本**v2.6.5**,上次更新时间:* {docsify-updated} *
-
-这里将列出所有被转发到core的API,没有被转发的函数此处不会列出,请自行在代码中查看。
-
-本附录量较大,如有什么需求请自行Ctrl+F进行搜索。
-
-如有任何疑问,请联系小艾寻求帮助。
-
-## core.js
-
-core.js中只有很少的几个函数,主要是游戏开始前的初始化等。
-
-但是,core中定义了很多游戏运行时的状态,这些状态很多都会被使用到。
-
-``` text
-core.__SIZE__, core.__PIXELS__
-游戏窗口大小;对于13x13的游戏而言这两个值分别是13和416,15x15来说分别是15和480。
-
-
-core.material
-游戏中的所有资源列表,具体分为如下内容:
-core.material.animates (动画)
-core.material.bgms (背景音乐)
-core.material.enemys (怪物信息,来自于 project/enemys.js)
-core.material.icons (图标信息,来自于 project/icons.js)
-core.material.images (图片素材,存放了各项素材图片如items.png等)
- core.material.images.autotile (所有的自动元件图片)
- core.material.images.tilesets (所有的额外素材图片)
- core.material.images.images (用户引入的其他图片)
-core.material.items (道具信息)
-core.material.sounds (音效)
-
-
-core.animateFrame
-主要是记录和requestAnimationFrame相关的一些数据,常用的如下:
-core.animateFrame.totalTime (游戏总的运行时时间)
-core.animateFrame.weather (当前的天气信息)
-core.animateFrame.asyncId (当前的异步处理事件的内容)
-
-
-core.musicStatus
-主要是记录和音效相关的内容,常用的如下:
-core.musicStatus.bgmStatus (音乐开启状态)
-core.musicStatus.soundStatus (音效开启状态)
-core.musicStatus.playingBgm (当前正在播放的BGM)
-core.musicStatus.lastBgm (最近一次尝试播放的BGM)
-core.musicStatus.volume (当前的音量)
-core.musicStatus.cachedBgms (背景音乐的缓存内容)
-core.musicStatus.cacheBgmCount (背景音乐的缓存数量,默认值是4)
-
-
-core.platform
-游戏平台相关信息,常见的几个如下:
-core.platform.isPC (是否是电脑端)
-core.platform.isAndroid (是否是安卓端)
-core.platform.isIOS (是否是iOS端)
-core.platform.useLocalForage (是否开启了新版存档)
-
-
-core.domStyle
-游戏的界面信息,包含如下几个:
-core.domStyle.scale (当前的放缩比)
-core.domStyle.isVertical (当前是否是竖屏状态)
-core.domStyle.showStatusBar (当前是否显示状态栏)
-core.domStyle.toolbarBtn (当前是否显示工具栏)
-
-
-core.bigmap
-当前的地图的尺寸信息,主要包含如下几个
-core.bigmap.width (当前地图的宽度)
-core.bigmap.height (当前地图的高度)
-core.bigmap.offsetX (当前地图针对窗口左上角的偏移像素x)
-core.bigmap.offsetX (当前地图针对窗口左上角的偏移像素y)
-core.bigmap.tempCanvas (一个临时画布,可以用来临时绘制很多东西)
-
-
-core.saves
-和存档相关的信息,包含如下几个:
-core.saves.saveIndex (上次保存或读取的存档编号)
-core.saves.ids (当前存在存档的编号列表)
-core.saves.autosave (自动存档的信息)
-core.saves.favorite (收藏的存档)
-core.saves.favoriteNames (自定义存档的名称)
-
-
-core.status
-游戏的状态相关,是整个游戏中最重要的东西,其核心是如下几条:
-请注意,每次重新开始、存档或读档时,core.status都会重新初始化。
-core.status.played (当前是否在游戏中)
-core.status.gameOver (当前是否已经游戏结束,即win或lose)
-core.status.hero (勇士信息;此项和全塔属性中的hero大体是对应的)
- core.status.hero.name 勇士名
- core.status.hero.lv 当前等级
- core.status.hero.hpmax 当前生命上限
- core.status.hero.hp 当前生命值
- core.status.hero.manamax 当前魔力上限
- core.status.hero.mana 当前魔力值
- core.status.hero.atk 当前攻击力
- core.status.hero.def 当前防御力
- core.status.hero.mdef 当前护盾值
- core.status.hero.money 当前金币值
- core.status.hero.exp 当前经验值
- core.status.hero.loc 当前的位置信息
- core.status.hero.equipment 当前装上的装备
- core.status.hero.items 当前拥有的道具信息
- core.status.hero.flags 当前的各项flag信息
- core.status.hero.step 当前的步数值
- core.status.hero.statistics 当前的统计信息
-core.status.floorId (当前所在的楼层)
-core.status.maps (所有的地图信息)
-core.status.thisMap (当前的地图信息,等价于core.status.maps[core.status.floorId])
-core.status.bgmaps (所有背景层的信息)
-core.status.fgmaps (所有的前景层的信息)
-core.status.checkBlock (地图上的阻激夹域信息,也作为光环的缓存)
-core.status.lockControl (当前是否是控制锁定状态)
-core.status.automaticRoute (当前的自动寻路信息)
-core.status.route (当前记录的录像)
-core.status.replay (录像回放时要用到的信息)
-core.status.shops (所有全局商店信息)
-core.status.textAttribute (当前的文字属性,如颜色、背景等信息,和setText事件对应)
-core.status.globalAttribute (当前的全局属性,如边框色、装备栏等)
-core.status.curtainColor (当前色调层的颜色)
-core.status.globalAnimateObjs (当前的全局帧动画效果)
-core.status.floorAnimateObjs (当前的楼层贴图帧动画效果)
-core.status.boxAnimateObjs (当前的盒子帧动画效果,例如怪物手册中的怪物)
-core.status.autotileAnimateObjs (当前楼层的自动元件动画效果)
-core.status.globalAnimateStatus (当前的帧动画的状态)
-core.status.animateObjs (当前的播放动画信息)
-
-
-core.floorIds
-一个数组,表示所有的楼层ID,和全塔属性中的floorIds一致。
-
-
-core.floors
-从楼层文件中读取全部的地图数据。
-和core.status.maps不同的是,后者在每次重新开始和读档时都会重置,也允许被修改(会存入存档)。
-而core.floors全程唯一,不允许被修改。
-
-
-core.statusBar
-状态栏信息,例如状态栏图片,图标,以及各个内容的DOM定义等。
-core.statusBar.images (所有的系统图标,和icons.png对应)
-core.statusBar.icons (状态栏中绘制的图标内容)
-
-
-core.values
-所有的全局数值信息,和全塔属性中的values一致。
-此项允许被直接修改,会存入存档。
-
-
-core.flags
-所有的全塔开关,和全塔属性中的flags一致。
-此项不允许被直接修改,如有需要请使用“设置系统开关”事件,或者调用core.setGlobalFlag这个API。
-
-
-core.plugin
-定义的插件函数。
-
-
-core.doFunc(func, _this)
-执行一个函数,func为函数体或者插件中的函数名,_this为使用的this。
-如果func为一个字符串,则视为插件中的函数名,同时_this将被设置成core.plugin。
-此函数剩余参数将作为参数被传入func。
-```
-
-## actions.js
-
-actions.js主要是处理一些和用户交互相关的内容。
-
-```text
-core.registerAction(action, name, func, priority)
-注册一个用户交互行为。
-action:要注册的交互类型,如 ondown, onclick, keyDown 等等。
-name:你的自定义名称,可被注销使用;同名重复注册将后者覆盖前者。
-func:执行函数;可以是一个具体的函数体,或者是一个插件中的函数名。
-priority:优先级;优先级高的被注册项将会被执行。此项可不填,默认为0。
-返回:如果func返回true,则不会再继续执行其他的交互函数;否则会继续执行其他的交互函数。
-
-
-core.unregisterAction(action, name)
-注销一个用户交互行为。
-
-
-core.doRegisteredAction(action)
-执行一个用户交互行为。
-此函数将在该交互行为所注册的所有函数中,按照优先级从高到底依次执行。
-此函数剩余的参数将会作为参数传入该执行函数中。
-当某个执行函数返回true时将终止这一过程。
-
-
-core.onkeyDown(e)
-当按下某个键时的操作,e为KeyboardEvent。
-请勿直接覆盖或调用此函数,如有需要请注册一个"onkeyDown"的交互函数。
-
-
-core.onkeyUp(e)
-当放开某个键时的操作,e为KeyboardEvent。
-请勿直接覆盖或调用此函数,如有需要请注册一个"onkeyUp"的交互函数。
-
-
-core.pressKey(keyCode)
-当按住某个键不动时的操作,目前只对方向键有效。
-如果需要添加对于其他键的长按,请复写_sys_onkeyDown和_sys_onkeyUp。
-请勿直接覆盖或调用此函数,如有需要请注册一个"pressKey"的交互函数。
-
-
-core.keyDown(keyCode)
-当按下某个键时的操作,参数为该键的keyCode值。
-请勿直接覆盖或调用此函数,如有需要请注册一个"keyDown"的交互函数。
-
-
-core.keyUp(keyCode, altKey, fromReplay)
-当按下某个键时的操作,参数为该键的keyCode值。
-altKey标志了Alt键是否同时被按下,fromReplay表示是否是从录像回放中调用的。
-请勿直接覆盖或调用此函数,如有需要请注册一个"keyUp"的交互函数。
-
-
-core.ondown(loc)
-当点击屏幕时的操作。loc为点击的信息。
-请勿直接覆盖或调用此函数,如有需要请注册一个"ondown"的交互函数。
-注册的ondown交互函数需要接受x, y, px, py四个参数,代表点击的位置和像素坐标。
-
-
-core.onmove(loc)
-当在屏幕上滑动时的操作。loc为当前的坐标信息。
-请勿直接覆盖或调用此函数,如有需要请注册一个"onmove"的交互函数。
-注册的onmove交互函数需要接受x, y, px, py四个参数,代表当前的的位置和像素坐标。
-
-
-core.onup(loc)
-当从屏幕上离开时的操作。loc为当前的坐标信息。
-请勿直接覆盖或调用此函数,如有需要请注册一个"onup"的交互函数。
-注册的onup交互函数需要接受x, y, px, py四个参数,代表当前的的位置和像素坐标。
-
-
-core.onclick(x, y)
-当点击屏幕上的某点位置时执行的操作,请注意这里的x和y是位置坐标。
-一般而言,一个完整的ondown到onup将触发一个onclick事件。
-请勿直接覆盖或调用此函数,如有需要请注册一个"onclick"的交互函数。
-
-
-core.onmousewheel(direct)
-当滚动鼠标滑轮时执行的操作。direct为滑轮方向,上为1,下为-1。
-请勿直接覆盖或调用此函数,如有需要请注册一个"onmousewheel"的交互函数。
-
-
-core.keyDownCtrl()
-当长按Ctrl键不动时执行的操作。
-请勿直接覆盖或调用此函数,如有需要请注册一个"keyDownCtrl"的交互函数。
-
-
-core.longClick()
-当长按住屏幕时执行的操作。
-请勿直接覆盖或调用此函数,如有需要请注册一个"longClick"的交互函数。
-注册的交互函数如果某一项返回true,则之后仍然会继续触发该长按,
-如果全部返回false则将停止本次长按行为,直到手指离开屏幕并重新进行长按为止。
-```
-
-## control.js
-
-control.js将负责整个游戏的核心控制系统,分为如下几个部分:
-- requestAnimationFrame相关
-- 标题界面,开始和重新开始游戏
-- 自动寻路和人物行走相关
-- 画布、位置、阻激夹域、显伤等相关
-- 录像的回放相关
-- 存读档,自动存档,同步存档等相关
-- 人物属性和状态、位置、变量等相关
-- 天气、色调、音乐和音效的播放
-- 状态栏和工具栏相关
-- 界面resize相关
-
-```text
-// ------ requestAnimationFrame 相关 ------ //
-
-core.registerAnimationFrame(name, needPlaying, func)
-注册一个animationFrame。它将在每次浏览器的帧刷新时(约16.6ms)被执行。
-name:你的自定义名称,可被注销使用;同名重复注册将后者覆盖前者。
-needPlaying:如果此项为true,则仅在游戏开始后才会被执行(标题界面不执行)
-func:执行函数;可以是一个具体的函数体,或者是一个插件中的函数名。
-func可以接受一个timestamp作为参数,表示从整个页面加载完毕到当前时刻所经过的毫秒数。
-如果func执行报错,将在控制台打出一条信息,并自动进行注销。
-
-
-core.unregisterAnimationFrame(name)
-注销一个animationFrame,参数是你的上面的自定义名称。
-
-// ------ 开始界面相关 ------ //
-
-core.showStartAnimate(noAnimate, callback)
-重置所有内容并显示游戏标题界面。
-noAnimate如果为true则不会有淡入动画,callback为执行完毕的回调。
-
-
-core.hideStartAnimate(callback)
-淡出隐藏游戏标题界面,callback为执行完毕的回调。
-
-
-core.isPlaying()
-当前是否正在游戏中。
-
-
-core.clearStatus()
-清除所有的游戏状态和数据,包括状态栏的显示。
-
-// ------ 自动寻路、人物行走 ------ //
-
-core.stopAutomaticRoute()
-停止自动寻路的操作
-
-
-core.saveAndStopAutomaticRoute()
-保存剩下的寻路路线并停止自动寻路操作。主要用于打怪开门后继续寻路使用。
-
-
-core.continueAutomaticRoute()
-继续剩下的自动寻路操作。主要用于打怪开门后继续寻路使用。
-
-
-core.clearContinueAutomaticRoute()
-清空剩下的自动寻路操作。
-
-
-core.setAutomaticRoute(destX, destY, stepPostfix)
-尝试开始进行一个自动寻路。stepPostfix是鼠标拖动的路径。
-此函数将检测是否在寻路中(在则停止或双击瞬移),检测是否点击自己(转身或轻按),
-检测是否能单击瞬移,最后找寻自动寻路路线并开始寻路。
-
-
-core.setAutoHeroMove(steps)
-设置勇士的自动行走路线,并立刻开始行走。
-
-
-core.setHeroMoveInterval(callback)
-设置勇士行走动画。callback是每一步行走完毕后的回调。
-
-
-core.moveOneStep(x, y)
-每走完一步后执行的操作,被转发到了脚本编辑中,执行脚本编辑moveOneStep中的内容。
-
-
-core.moveAction(callback)
-尝试执行单步行走。callback是执行完毕的回调。
-如果勇士面对的方向是noPass的,将直接触发事件并执行回调。
-
-
-core.moveHero(direction, callback)
-令勇士朝一个方向行走。如果设置了callback,则只会行走一步,并执行回调。
-否则,将一直朝该方向行走,直到core.status.heroStop为true为止。
-direction可为"up","down","right","left",分别对应上,下,右,左。
-
-
-core.isMoving()
-当前是否正在处于行走状态
-
-
-core.waitHeroToStop(callback)
-停止勇士的行走,等待行动结束后,再异步执行回调。
-
-
-core.turnHero(direction)
-转向。如果设置了direction则会转到该方向,否则会右转。该函数会自动计入录像。
-direction可为"up","down","right","left",分别对应上,下,右,左。
-
-
-core.moveDirectly(destX, destY)
-尝试瞬间移动到某点,被转发到了脚本编辑中,执行脚本编辑中的内容。
-此函数返回非负值代表成功进行瞬移,返回值是省略的步数;如果返回-1则代表没有成功瞬移。
-
-
-core.tryMoveDirectly(destX, destY)
-尝试单击瞬移到某点。
-如果该点可被直接瞬间移动到,则直接瞬移到该点;否则尝试瞬移到相邻的上下左右点并行走一步。
-
-
-core.drawHero(status, offset)
-绘制勇士。
-status可选,为'stop','leftFoot'和'rightFoot'之一,不填或null默认是'stop'。
-offset可选,表示具体当前格子的偏移量。不填默认为0。
-此函数将重新计算地图的偏移量,调整窗口位置,绘制勇士和跟随者信息。
-
-// ------ 画布、位置、阻激夹域、显伤 ------ //
-
-core.setGameCanvasTranslate(canvas, x, y)
-设置某个画布的偏移量
-
-
-core.addGameCanvasTranslate(x, y)
-加减所有系统画布(ui和data除外)的偏移量。主要是被“画面震动”所使用。
-
-
-core.updateViewport()
-根据大地图的偏移量来更新窗口的视野范围。
-
-
-core.nextX(n) / core.nextY(n)
-获得勇士面对的第n个位置的横纵坐标。n可不填,默认为1。
-
-
-core.nearHero(x, y, n)
-判定某个点是否和勇士的距离不大于n。n可不填,默认为1。
-
-
-core.gatherFollowers()
-聚集所有的跟随者到勇士的位置。
-
-
-core.updateFollowers()
-更新跟随者们的坐标。
-
-
-core.updateCheckBlock(floorId)
-更新阻激夹域的信息,被转发到了脚本编辑中。
-
-
-core.checkBlock()
-检查勇士坐标点的阻激夹域信息。
-
-
-core.updateDamage(floorId, ctx)
-更新全地图的显伤。floorId可选,默认为当前楼层。
-ctx可选,为画布;如果不为空,则将会绘制到该画布上而不是damage层上。
-
-// ------ 录像相关 ------ //
-
-core.chooseReplayFile()
-弹出选择文件窗口,让用户选择录像文件。
-
-
-core.startReplay(list)
-开始播放一段录像。list为录像的操作数组。
-
-
-core.triggerReplay()
-播放或暂停录像,实际上是pauseReplay或resumeReplay之一。
-
-
-core.pauseReplay() / core.resumeReplay()
-暂停和继续录像播放。
-
-
-core.speedUpReplay() / core.speedDownReplay()
-加速和减速录像播放。
-
-
-core.setReplaySpeed(speed)
-直接设置录像回放速度。
-
-
-core.stopReplay(force)
-停止录像回放。如果force为true则强制停止。
-
-
-core.rewindReplay()
-回退一个录像节点。
-
-
-core.saveReplay() / core.bookReplay() / core.viewMapReplay()
-回放录像时的存档、查看怪物手册、浏览地图操作。
-
-
-core.isReplaying()
-当前是否正在录像播放中。
-
-
-core.registerReplayAction(name, func)
-注册一个自定义的录像行为。
-name:自定义名称,可用户注销使用。
-func:具体执行录像的函数,是一个函数体或者插件中的函数名。
-func需要接受action参数,代表录像回放时的当前操作行为。
-如果func返回true,则代表成功处理了此次操作,返回false代表没有进行处理。
-自己添加的录像项只能由数字、大小写、下划线线、冒号等符号组成,否则无法正常压缩和解压缩。
-对于自定义内容(比如中文文本或数组)请使用JSON.stringify再core.encodeBase64处理。
-请注意回放录像时的二次记录问题(即回放时录像会重新记录路线)。
-
-
-core.unregisterReplayAction(name)
-注销一个录像行为。此函数一般不应当被使用。
-
-// ------ 存读档相关 ------ //
-
-core.autosave(remoreLast)
-进行一个自动存档,实际上是加入到缓存之中。
-removeLast如果为true则会从路线中删除最后一项再存(打怪开门前的状态)。
-在事件处理中不允许调用本函数,如有需要请呼出存档页面。
-
-
-core.checkAutosave()
-将缓存的自动存档写入存储中。平均每五秒钟,或在窗口失去焦点时被执行。
-
-
-core.doSL(id, type)
-实际执行一个存读档事件。id为存档编号,自动存档为'autoSave'。
-type只能为'save', 'load', 'replayLoad'之一,代表存档、读档和从存档回放录像。
-
-
-core.syncSave(type) / core.syncLoad()
-向服务器同步存档,从服务器加载存档。type如果为'all'则会向服务器同步所有存档。
-
-
-core.saveData()
-获得要存档的内容,实际转发到了脚本编辑中,执行脚本编辑中的内容。
-
-
-core.loadData(data, callback)
-实际执行一次读档行为,data为读取到的数据,callback为执行完毕的回调。
-实际转发到了脚本编辑中,执行脚本编辑中的内容。
-
-
-core.getSave(index, callback)
-获得某个存档位的存档。index为存档编号,0代表自动存档。
-
-
-core.getSaves(ids, callback)
-获得若干个存档位的存档。ids为一个存档编号数组,0代表自动存档。
-
-
-core.getAllSaves(callback)
-获得全部的存档内容。目前仅被同步全部存档和下载全部存档所调用。
-
-
-core.getSaveIndexes(callback)
-刷新全部的存档信息,将哪些档位有存档的记录到core.saves.ids中。
-
-
-core.hasSave(index)
-判定某个存档位是否存在存档。index为存档编号,0代表自动存档。
-
-
-core.removeSave(index)
-删除某个存档。index为存档编号,0代表自动存档。
-
-
-// ------ 属性、状态、位置、变量等 ------ //
-
-core.setStatus(name, value)
-设置勇士当前的某个属性,name可为"atk","def","hp"等。
-如core.setStatus("atk", 100)则为设置勇士攻击为100。
-
-
-core.addStatus(name, value)
-加减勇士当前的某个属性,name可为"atk","def","hp"等。
-如core.addStatus("atk", 100)则为增加勇士攻击100点。
-等价于 core.setStatus(name, core.getStatus(name) + value)。
-
-
-core.getStatus(name)
-获得勇士的某个原始属性值,该值不受百分比增幅影响。
-譬如你有一件道具加10%的攻击,你可以使用该函数获得你的攻击被增幅前的数值
-
-
-core.getStatusOrDefault(status, name)
-尝试从status中获得某个原始属性值,该值不受百分比增幅影响;如果status为null或不存在对应属性值则从勇士属性中获取。
-此项在伤害计算函数中使用较多,例如传递新的攻击和防御来计算临界和1防减伤。
-
-
-core.getRealStatus(name)
-获得勇士的某个计算属性值。该属性值是在加成buff之后得到的。
-该函数等价于 core.getStatus(name) * core.getBuff(name)
-
-
-core.getRealStatusOrDefault(status, name)
-尝试从status中获得某个原始属性值再进行增幅,如果不存在则获取勇士本身的计算属性值。
-
-
-core.setBuff(name, value)
-设置勇士的某个属性的增幅值。value为1代表无增幅。
-
-
-core.addBuff(name, value)
-增减勇士的某个属性的增幅值。等价于 core.setBuff(name, core.getBuff(name) + value)
-
-
-core.getBuff(name)
-获得勇士的某个属性的增幅值。默认值是1。
-
-
-core.setHeroLoc(name, value, noGather)
-设置勇士位置属性。name只能为'x'(勇士x坐标), 'y'(勇士y坐标)和'direction'(勇士朝向)之一。
-如果noGather为true,则不会聚集所有的跟随者。
-譬如core.setHeroLoc("x", 1, true)则为设置勇士x坐标为1,不聚集所有跟随者。
-
-
-core.getHeroLoc(name)
-获得勇士的某个位置属性。如果name为null则直接返回core.status.hero.loc。
-譬如core.getHeroLoc("x")则返回勇士当前x坐标
-
-
-core.getLvName(lv)
-获得某个等级对应的名称,其在全塔属性的levelUp中定义。如果不存在则返回原始数值。
-
-
-core.setFlag(name, value)
-设置某个自定义变量或flag。如果value为null则会调用core.removeFlag进行删除。
-这里的变量与事件中使用的变量等价
-譬如core.setFlag("xxx",1)则为设置变量xxx为1。
-
-
-core.addFlag(name, value)
-加减某个自定义的变量或flag。等价于 core.setFlag(name, core.getFlag(name, 0) + value)
-这里的变量与事件中使用的变量等价
-譬如core.addFlag("xxx",1)则为增加变量xxx1
-
-
-core.getFlag(name, defaultValue)
-获得某个自定义的变量或flag。如果该flag不存在(从未赋值过),则返回defaultValue的值。
-这里的变量与事件中使用的变量等价
-譬如core.getFlag("xxx",1)则为获得变量xxx的值,如变量xxx不存在则返回1
-
-
-core.hasFlag(name)
-判定是否拥有某个自定义变量或flag。等价于 !!core.getFlag(name, 0)
-这里的变量与事件中使用的变量等价
-譬如core.hasFlag("xxx",1)则为判断变量xxx是否存在
-
-core.removeFlag(name)
-删除一个自定义变量或flag。
-
-
-core.lockControl() / core.unlockControl()
-锁定和解锁控制。常常应用于事件处理。
-
-
-core.debug()
-开启调试模式。此模式下可以按住Ctrl进行穿墙。
-
-// ------ 天气,色调,音乐和音效 ------ //
-
-core.setWeather(type, level)
-设置当前的天气。type只能为'rain', 'snow'或'fog',level为1-10之间代表强度信息。
-
-
-core.setCurtain(color, time, callback)
-更改画面色调。color为更改到的色调,是个三元或四元组;time为渐变时间,0代表立刻切换。
-譬如core.setCurtain([255,255,255,1], 0)即为无回调无等待更改画面色调为白色
-
-
-
-core.screenFlash(color, time, times, callback)
-画面闪烁。color为色调,三元或四元组;time为单次闪烁时间,times为总闪烁次数。
-
-
-core.playBgm(bgm, startTime)
-播放一个bgm。startTime可以控制开始时间,不填默认为0。
-如果bgm不存在、不被支持,或当前不允许播放背景音乐,则会跳过。
-
-
-core.pauseBgm() / core.resumeBgm()
-暂停和恢复当前bgm的播放。
-
-
-core.triggerBgm()
-更改当前bgm的播放状态。
-
-
-core.playSound(sound) / core.stopSound()
-播放一个音效,停止全部音效。
-如果sound不存在、不被支持,或当前不允许播放音效,则会忽略。
-
-
-core.checkBgm()
-检查bgm的状态。
-有的时候,刚打开页面时,浏览器是不允许自动播放标题界面bgm的,一定要经过一次用户操作行为。
-这时候我们可以给开始按钮增加core.checkBgm(),如果之前没有成功播放则重新播放。
-
-// ------ 状态栏和工具栏相关 ------ //
-
-core.clearStatusBar()
-清空状态栏的数据。
-
-
-core.updateStatusBar(doNotCheckAutoEvents)
-更新状态栏,被转发到了脚本编辑中。此函数还会根据是否在回放来设置工具栏的图标。
-如果doNotCheckAutoEvents为true则此时不检查自动事件。
-
-core.showStatusBar() / core.hideStatusBar(showToolbox)
-显示和隐藏状态栏。
-如果showToolbox为true,则在竖屏模式下不隐藏工具栏,方便手机存读档操作。
-
-
-core.updateHeroIcon()
-更新状态栏上的勇士图标。
-
-
-core.setToolbarButton(useButtom)
-设置工具栏是否是拓展键盘。
-
-// ------ resize 相关 ------ //
-
-core.registerResize(name, func)
-注册一个resize函数。
-name为自定义名称,可供注销使用。
-func可以是一个函数,或插件中的函数名,可以接受一个obj作为参数。
-具体详见resize函数。
-
-
-core.unregisterResize(name)
-注销一个resize函数。
-
-
-core.resize()
-屏幕分辨率改变后的重新自适应。
-此函数将根据当前的屏幕分辨率信息,生成一个obj,并传入各个注册好的resize函数中执行。
-```
-
-## enemys.js
-
-enemys.js中定义了一系列和怪物相关的API函数。
-
-```text
-core.hasSpecial(special, test)
-判断是否含有某个特殊属性。test为要检查的特殊属性编号。
-special为要测试的内容,允许接收如下类型参数:
- - 一个数字:将直接和test进行判等。
- - 一个数组:将检查test是否在该数组之中存在。
- - 一个怪物信息:将检查test是否在该怪物的特殊属性中存在
- - 一个字符串:视为怪物ID,将检查该怪物的特殊属性
-
-
-core.getSpecials()
-获得所有特殊属性的列表。实际上被转发到了脚本编辑中,执行脚本编辑中的内容。
-
-
-core.getSpecialText(enemy)
-获得某个怪物的全部特殊属性名称。enemy可以是怪物信息或怪物ID。
-将返回一个数组,每一项是该怪物所拥有的一个特殊属性的名称。
-
-
-core.getSpecialHint(enemy, special)
-获得怪物的某个特殊属性的描述。enemy可以是怪物信息或怪物ID,special为该特殊属性编号。
-
-
-core.canBattle(enemy, x, y, floorId)
-判定当前能否战胜某个怪物。
-enemy可以是怪物信息或怪物ID,x,y,floorId为当前坐标和楼层。(下同)
-能战胜返回true,不能战胜返回false。
-
-
-core.getDamage(enemy, x, y, floorId)
-获得某个怪物的全部伤害值。
-如果没有破防或无法战斗则返回null,否则返回具体的伤害值。
-
-
-core.getExtraDamage(enemy, x, y, floorId)
-获得某个怪物的额外伤害值(不可被护盾减伤)。
-目前暂时只包含了仇恨和固伤两者,如有需要可复写该函数。
-
-
-core.getDamageString(enemy, x, y, floorId)
-获得某个怪物伤害字符串和颜色信息,以便于在地图上绘制显伤。
-
-
-core.nextCriticals(enemy, number, x, y, floorId)
-获得接下来的N个临界值和临界减伤。enemy可以是怪物信息或怪物ID,x,y,floorId为当前坐标和楼层。
-number为要计算的临界值数量,不填默认为1。
-如果全塔属性中的useLoop开关被开启,则将使用循环法或二分法计算临界,否则使用回合法计算临界。
-返回一个二维数组 [[x1,y1],[x2,y2],...] 表示接下来的每个临界值和减伤值。
-
-
-core.getDefDamage(enemy, k, x, y, floorId)
-获得某个怪物的k防减伤值。k可不填默认为1,x,y,floorId为当前xy坐标和楼层。
-
-
-core.getEnemyInfo(enemy, hero, x, y, floorId)
-获得某个怪物的实际计算时的属性。该函数实际被转发到了脚本编辑中。
-hero可为null或一个对象,具体将使用core.getRealStatusOrDefault(hero, "atk")来获得攻击力数值。
-该函数应当返回一个对象,记录了怪物的实际计算时的属性。
-
-
-core.getDamageInfo(enemy, hero, x, y, floorId)
-获得某个怪物的战斗信息。该函数实际被转发到了脚本编辑中。
-hero可为null或一个对象,具体将使用core.getRealStatusOrDefault(hero, "atk")来获得攻击力数值。
-如果该函数返回null,则代表不可战斗(如没有破防,或无敌等)。
-否则,该函数应该返回一个对象,记录了战斗伤害信息,如战斗回合数等。
-从V2.5.5开始,该函数也允许直接返回一个数字,代表战斗伤害值,此时回合数将视为0。
-
-
-core.getCurrentEnemys(floorId)
-获得某个楼层不重复的怪物信息,floorId不填默认为当前楼层。该函数会被怪物手册所调用。
-该函数将返回一个列表,每一项都是一个不同的怪物,按照伤害值从小到大排序。
-另外值得注意的是,如果设置了某个怪物的displayIdInBook,则会返回对应的怪物。
-
-
-core.hasEnemyLeft(enemyId, floorId)
-检查某个楼层是否还有剩余的(指定)怪物。
-floorId为楼层ID,可忽略表示当前楼层。也可以填数组如["MT0","MT1"]同时检测多个楼层。
-enemyId如果不填或null则检查是否剩余任何怪物,否则只检查是否剩余指定的某类怪物。
-```
-
-## events.js
-
-events.js将处理所有和事件相关的操作,主要分为五个部分:
-- 游戏的开始和结束
-- 系统事件的处理
-- 自定义事件的处理
-- 点击状态栏图标所进行的操作
-- 一些具体事件的执行内容
-
-
-```text
-// ------ 游戏的开始和结束 ------ //
-
-core.resetGame(hero, hard, floorId, maps, values)
-重置整个游戏。该函数实际被转发到了脚本编辑中。
-
-
-core.startGame(hard, seed, route, callback)
-开始新游戏。
-hard为难度字符串,会被设置为core.status.hard。
-seed为开始时要设置的的种子,route为要开始播放的录像,callback为回调函数。
-该函数将重置整个游戏,执行startText事件,上传游戏人数统计信息等。
-
-
-core.win(reason, norank)
-游戏胜利,reason为结局名,norank如果为真则该结局不计入榜单。
-该函数实际被转发到了脚本编辑中,执行脚本编辑中的内容。
-
-
-core.lose(reason)
-游戏失败,reason为结局名。该函数实际被转发到了脚本编辑中,执行脚本编辑中的内容。
-
-
-core.gameOver(ending, fromReplay, norank)
-游戏结束。ending为获胜结局名,null代表失败;fromReplay标识是否是录像触发的。
-此函数将询问是否上传成绩(如果ending不是null),是否下载录像等,并重新开始。
-
-
-core.restart()
-重新开始游戏。本质上就是播放标题界面的BGM并调用showStartAnimate。
-
-
-core.confirmRestart()
-确认用户是否需要重新开始。
-
-// ------ 系统事件处理 ------ //
-
-core.registerSystemEvent(type, func)
-注册一个系统事件,即通过图块的默认触发器所触发的事件。
-type为一个要注册的事件类型,func为要执行的函数体或插件中的函数名。
-func需要接受(data, callback)作为参数,分别是触发点的图块信息,和执行完毕时的回调。
-如果注册一个已经存在的系统事件,比如openDoor,则会覆盖系统的默认函数。
-
-
-core.unregisterSystemEvent(type)
-注销一个系统事件。type是上面你注册的事件类型。
-
-
-core.doSystemEvent(type, data, callback)
-执行一个系统事件。type为事件类型,data为该事件点的图块信息,callback为执行完毕的回调。
-
-
-core.battle(id, x, y, force, callback)
-和怪物进行战斗。
-id为怪物的ID,x和y为怪物坐标,force如果为真将强制战斗,callback为执行完毕的回调。
-如果填写了怪物坐标,则会删除对应点的图块并执行该点战后事件。
-如果是在事件流的执行过程中调用此函数,则不会进行自动存档,且会强制战斗。
-
-
-core.beforeBattle(enemyId, x, y)
-战前事件。实际被转发到了脚本编辑中,执行脚本编辑中的内容,可以用于加上一些战前特效。
-此函数在“检测能否战斗和自动存档”【之后】执行。
-如果需要更早的战前事件,请在插件中覆重写 core.events.doSystemEvent 函数。
-此函数返回true则将继续本次战斗,返回false将不再战斗。
-
-
-core.afterBattle(enemyId, x, y, callback)
-战后事件,将执行扣血、加金币经验、特殊属性处理、战后事件处理等操作。
-实际被转发到了脚本编辑中,执行脚本编辑中的内容。
-
-
-core.openDoor(x, y, needKey, callback)
-尝试开一个门。x和y为门的坐标,needKey表示是否需要钥匙,callback为执行完毕的回调。
-如果不是一个有效的门,需要钥匙且未持有等,均会忽略此事件并直接执行callback。
-
-
-core.afterOpenDoor(doorId, x, y, callback)
-开完一个门后执行的事件,实际被转发到了脚本编辑中,执行脚本编辑中的内容。
-
-
-core.getItem(id, num, x, y, callback)
-获得若干个道具。itemId为道具ID,itemNum为获得的道具个数,不填默认为1。
-x和y为道具点的坐标,如果设置则会擦除地图上的该点,也可不填。
-譬如core.getItem("yellowKey",2)会直接获得两把黄钥匙。
-
-
-core.afterGetItem(id, x, y, callback)
-获得一个道具后执行的事件,实际被转发到了脚本编辑中,执行脚本编辑中的内容。
-
-
-core.getNextItem(noRoute)
-轻按,即获得面对的道具。如果noRoute为真则这个轻按行为不会计入录像。
-
-
-core.changeFloor(floorId, stair, heroLoc, time, callback, fromLoad)
-楼层切换。floorId为目标楼层ID,stair为是什么楼梯,heroLoc为目标点坐标。
-time为切换时间,callback为切换完毕的回调,fromLoad标志是否是从读档造成的切换。
-floorId也可以填":before"和":next"表示前一层和后一层。
-heroLoc为{"x": 0, "y": 0, "direction": "up"}的形式。不存在则从勇士位置取。
-如果stair不为null,则会在该楼层中找对应的图块作为目标点的坐标并覆盖heroLoc。
-一般设置的是"upFloor"和"downFloor",但也可以用任何其他的图块ID。
-
-
-core.changingFloor(floorId, heroLoc, fromLoad)
-正在执行楼层切换中执行的操作,实际被转发到了脚本编辑中。
-
-
-core.hasVisitedFloor(floorId)
-是否曾经到达过某一层。
-
-
-core.visitFloor(floorId)
-标记曾经到达了某一层。
-
-
-core.passNet(data)
-执行一个路障处理。这里只有毒衰咒网的处理,血网被移动到了updateCheckBlock中。
-
-
-core.pushBox(data)
-执行一个推箱子事件。
-
-
-core.afterPushBox()
-推箱子之后触发的事件,实际被转发到了脚本编辑中,执行脚本编辑中的内容。
-
-
-core.changeLight(id, x, y)
-踩灯后的事件。
-
-// ------ 自定义事件的处理 ------ //
-
-core.registerEvent(type, func)
-注册一个自定义事件。type为事件名,func为执行事件的函数体或插件中的函数名。
-func可以接受(data, x, y, prefix)参数,其中data为事件内容,x和y为该点坐标,prefix为该点前缀。
-同名注册的事件将进行覆盖。
-请记得在自定义处理事件完毕后调用core.doAction()再继续执行下一个事件!
-
-
-core.unregisterEvent(type)
-注销一个自定义事件。
-
-
-core.doEvent(data, x, y, prefix)
-执行一个自定义事件。data为事件内容,将根据data.type去注册的事件列表中查找对应的执行函数。
-x和y为该点坐标,prefix为该点前缀。执行事件时也会把(data, x, y, prefix)传入执行函数。
-
-
-core.setEvents(list, x, y, callback)
-设置自定义事件的执行列表,坐标和回调函数。
-
-
-core.startEvents(list, x, y, callback)
-开始执行一系列的自定义事件。list为事件列表,x和y为事件坐标,callback为执行完毕的回调。
-此函数将调用core.setEvents,然后停止勇士,再执行core.doAction()。
-
-
-core.doAction(keepUI)
-执行下一个自定义事件。
-此函数将检测事件列表是否全部执行完毕,如果是则执行回调函数。
-否则,将从事件列表中弹出下一个事件,并调用core.doEvent进行执行。
-如果keepUI为true,则不会清掉UI层和selector,适合于自己用脚本的绘制。
-
-
-core.insertAction(action, x, y, callback, addToLast)
-向当前的事件列表中插入一个或多个事件并执行。
-如果当前并不是在事件执行流中,则会调用core.startEvents()开始执行事件,否则仅仅执行插入操作。
-action为要插入的事件,可以是一个单独的事件,或者是一个事件列表。
-x,y,callback如果设置了且不为null,则会覆盖当前的坐标和回调函数。
-addToLast如果为真,则会插入到事件执行列表的尾部,否则是插入到执行列表的头部。
-
-
-core.getCommonEvent(name)
-根据名称获得某个公共事件内容。
-
-
-core.recoverEvents(data)
-恢复事件现场。一般用于呼出怪物手册、呼出存读档页面等时,恢复事件执行流。
-
-
-core.checkAutoEvents()
-检测自动事件并执行。
-
-
-core.precompile(events)
-尝试预编译一段事件。
-
-
-// ------ 点击状态栏图标时执行的一些操作 ------ //
-
-core.openBook(fromUserAction)
-尝试打开怪物手册。fromUserAction标志是否是从用户的行为触发,如按键或点击状态栏。(下同)
-不建议复写此函数,否则【呼出怪物手册】事件会出问题。
-
-
-core.useFly(fromUserAction)
-尝试使用楼传器。可以安全的复写此函数,参见文档-个性化-覆盖楼传事件。
-
-
-core.flyTo(toId, callback)
-尝试飞行到某个楼层,被转发到了脚本编辑中。
-如果此函数返回true代表成功进行了飞行,false代表不能进行飞行。
-
-
-core.openEquipbox(fromUserAction) / core.openToolbox(fromUserAction)
-尝试打开道具栏和装备栏。可以安全复写这两个函数。
-
-
-core.openQuickShop(fromUserAction) / core.openKeyBoard(fromUserAction)
-尝试打开快捷商店和虚拟键盘。可以安全复写这两个函数。
-
-
-core.save(fromUserAction) / core.load(fromUserAction)
-尝试打开存读档页面。
-不建议复写这两个函数,否则【呼出存读档页面】事件会出问题。
-
-
-core.openSettings(fromUserAction)
-尝试打开系统菜单。不建议复写此函数。
-
-
-// ------ 一些具体事件的执行内容 ------ //
-
-core.hasAsync()
-当前是否存在未执行完毕的异步事件。请注意正在播放的动画也算异步事件。
-
-
-core.follow(name) / core.unfollow(name)
-跟随勇士/取消跟随。name为行走图名称。
-在取消跟随时如果指定了name,则会从跟随列表中选取一个该行走图取消,否则取消所有跟随。
-跟随和取消跟随都会调用core.gatherFollowers()来聚集所有的跟随者。
-
-
-core.setValue(name, operator, value, prefix) / core.addValue(name, value, prefix)
-设置/增减某个数值。name可以是status:xxx,item:xxx或flag:xxx。
-value可以是一个表达式,将调用core.calValue()计算。prefix为前缀,独立开关使用,脚本中一般忽略。
-
-
-core.doEffect(effect, need, times)
-执行一个effect操作。该函数目前仅被全局商店的status:xxx+=yyy所调用。
-
-
-core.setEnemy(id, name, value, prefix)
-设置一个怪物属性。id为怪物的ID,name为要设置的项,比如hp,atk,def等等。
-value可以是一个表达式,将调用core.calValue()计算。prefix为前缀,独立开关使用,脚本中一般忽略。
-
-
-core.setFloorInfo(name, values, floorId, prefix)
-设置某层楼的楼层属性,其中name为该楼层属性对应的条目,values为要设置的值,floorId为楼层id,prefix一般直接忽略。
-譬如core.setFloorInfo("name","4", "MT1")则为设置MT1显示在状态栏中的层数为4
-
-
-core.setGlobalAttribute(name, value)
-设置一个全局属性,如边框颜色等。
-
-
-core.setGlobalFlag(name, value)
-设置一个全局开关,如enableXXX等。
-如果需要设置一个全局数值如红宝石数值,可以直接简单的修改core.values,因此没有单独列出函数。
-
-
-core.closeDoor(x, y, id, callback)
-执行一个关门事件。如果不是一个合法的门,或者该点不为空地,则会忽略本事件。
-
-
-core.showImage(code, image, sloc, loc, opacityVal, time, callback)
-显示一张图片。code为图片编号,image为图片内容或图片名。
-sloc为[x,y,w,h]形式,表示在原始图片上裁剪的区域,也可直接设为null表示整张图片。
-loc为[x,y,w,h]形式,表示在界面上绘制的位置和大小,w和h可忽略表示使用绘制大小。
-opacityVal为绘制的不透明度,time为淡入时间。
-此函数将创建一个画布,其z-index是100+code,即图片编号为1则是101,编号50则是150。
-请注意,curtain层的z-index是125,UI层的z-index是140;因此可以通过图片编号来调整覆盖关系。
-
-
-core.hideImage(code, time, callback)
-隐藏一张图片。code为图片编号,time为淡出时间。
-
-
-core.moveImage(code, to, opacityVal, time, callback)
-移动一张图片。code为图片编号,to为[x,y]表示目标位置,opacityVal目标不透明度,time为移动时间。
-
-
-core.showGif(name, x, y)
-绘制一张gif图片或取消所有绘制内容。如果name不设置则视为取消。x和y为左上角像素坐标。
-
-
-core.setVolume(value, time, callback)
-设置音量。value为目标音量大小,在0到1之间。time为音量渐变的时间。
-
-
-core.vibrate(time, callback)
-画面震动。time为震动时间。
-请注意,画面震动时间必须是500的倍数,系统也会自动把time调整为上整的500倍数值。
-
-
-core.eventMoveHero(steps, time, callback)
-使用事件移动勇士。time为每步的移动时间。
-steps为移动数组,可以接受'up','down','left','right','forward'和'backward'项。
-使用事件移动勇士将不会触发任何地图上的事件。
-
-
-core.jumpHero(ex, ey, time, callback)
-跳跃勇士。ex和ey为目标点的坐标,可以为null表示原地跳跃。time为总跳跃时间。
-
-
-core.openShop(shopId, needVisited)
-打开一个全局商店。needVisited表示是否需要该商店原本就是启用状态。
-如果该商店对应的实际上是一个全局事件,则会直接插入并执行。
-
-
-core.disableQuickShop(shopId)
-禁用一个全局商店,即把一个商店从启用变成禁用状态。
-
-
-core.canUseQuickShop(shopId)
-当前能否使用某个全局商店,实际被转发到了脚本编辑中。
-如果此函数返回null则表示可以使用,返回一个字符串表示不可以,该字符串表示不可以的原因。
-
-
-core.setHeroIcon(name, noDraw)
-设置勇士的行走图。
-name为行走图名称,noDraw如果为真则不会调用core.drawHero()函数进行刷新。
-
-
-core.checkLvUp()
-检查升级事件。该函数将判定当前是否升级(或连续升级),然后执行升级事件。
-
-
-core.tryUseItem(itemId)
-尝试使用一个道具。
-对于怪物手册和楼传器,将分别调用core.openBook()和core.useFly()函数。
-对于中心对称飞行器,则会调用core.drawCenterFly()函数。
-对于其他的道具,将检查是否拥有,能否使用,并且进行使用。
-```
-
-## icons.js
-
-icons.js主要是负责素材相关信息,比如某个素材在对应的图片上的位置。
-
-```text
-core.getClsFromId(id)
-根据某个素材的ID获得该素材的cls
-
-
-core.getTilesetOffset(id)
-根据某个素材来获得对应的tileset和坐标信息。
-如果该素材不是tileset,则返回null。
-```
-
-## items.js
-
-items.js主要负责一切和道具相关的内容。
-
-```text
-core.getItemEffect(itemId, itemNum)
-即捡即用类的道具获得时的效果。实际对应道具图块属性中的itemEffect框。
-
-
-core.getItemEffectTip(itemId)
-即捡即用类的道具获得时的额外提示,比如“,攻击+100”。
-实际对应道具图块属性中的itemEffectTip框。
-
-
-core.useItem(itemId, noRoute, callback)
-尝试使用一个道具。实际对应道具图块属性中的useItemEffect框。
-此函数也会调用一遍core.canUseItem(),如果无法使用将直接返回。
-noRoute如果为真,则这次使用道具的过程不会被计入录像。
-使用道具完毕后,对于消耗道具将自动扣除,永久道具不会扣除。
-
-
-core.canUseItem(itemId)
-当前能否使用某个道具。
-有些系统道具如破炸和上下楼器等,会在计算出目标点的坐标后存入core.status.event.ui。
-使用道具时将直接从core.status.event.ui调用,不会重新计算。
-
-
-core.itemCount(itemId)
-获得某个道具的个数。
-
-
-core.hasItem(itemId)
-当前是否拥有某个道具。等价于 core.itemCount(itemId) > 0
-请注意,装备上的装备不视为拥有该道具,即core.hasEquip()和core.hasItem()是完全不同的。
-
-
-core.hasEquip(itemId)
-当前是否装备上某个装备。
-请注意,装备上的装备不视为拥有该道具,即core.hasEquip()和core.hasItem()是完全不同的。
-
-
-core.getEquip(equipType)
-获得某个装备位的当前装备。equipType为装备类型,从0开始。
-如果该装备位没有装备则返回null,否则返回当前装备的ID。
-
-
-core.setItem(itemId, itemNum)
-设置某个道具的个数。
-
-
-core.addItem(itemId, itemNum)
-增减某个道具的个数,itemNum可不填默认为1。
-
-
-core.getEquipTypeByName(name)
-根据装备位名称来找到一个空的装备孔,适用于多重装备,装备位名称可在全塔属性中设置。
-如果没有一个装备孔是该装备名称,则返回-1。
-譬如:core.getEquipTypeByName("武器")默认返回全塔属性中武器对应的装备孔号0。
-
-
-core.getEquipTypeById(equipId)
-获得某个装备的装备类型。
-如果其type写的是装备名(多重装备),则调用core.getEquipTypeByName()函数。
-
-
-core.canEquip(equipId, hint)
-当前能否穿上某个装备。如果hint为真,则不可装备时会气泡提示原因。
-
-
-core.loadEquip(equipId, callback)
-穿上某个装备,equipId为装备id。
-
-
-core.unloadEquip(equipType, callback)
-脱下某个装备孔的装备。
-譬如core.unloadEquip(0)则为脱下0号装备孔中的装备,默认0号装备孔对应“武器”,1号装备孔对应“盾牌”
-
-
-core.compareEquipment(compareEquipId, beComparedEquipId)
-比较两个套装的差异。
-此函数将对所有的勇士属性包括生命魔力攻防护盾金币等进行比较。
-如果存在差异的,将作为一个对象返回其差异内容。
-
-
-core.quickSaveEquip(index)
-保存当前套装。index为保存的套装编号。
-
-
-core.quickLoadEquip()
-读取当前套装。index为读取的套装编号。
-
-
-core.getEquippedStatus(name)
-获得装备直接增加的属性数据。
-```
-
-## loader.js
-
-loader.js主要负责资源加载相关的内容。
-
-```text
-core.loadImage(imgName, callback)
-从 project/images/ 中加载一张图片。imgName为图片名。
-callback为执行完毕的回调函数,接收(imgName, image)即图片名和图片内容作为参数。
-如果图片不存在或加载失败则会在控制台打出一条错误日志,不会执行回调。
-
-
-core.loadImages(names, toSave, callback)
-从 project/images/ 中加载若干张图片。
-names为一个图片名的列表,toSave为加载并存到的对象。
-callback为全部加载完毕执行的回调。
-
-
-core.loadOneMusic(name)
-从 project/sounds/ 或第三方中加载一个音乐,并存入core.material.bgms中。name为音乐名。
-
-
-core.loadOneSound(name)
-从 project/sounds/ 中加载一个音效,并存入core.material.sounds中。name为音效名。
-
-
-core.loadBgm(name)
-预加载一个bgm并加入缓存列表core.musicStatus.cachedBgms。
-此函数将会检查bgm的缓存,预加载和静音播放。
-如果缓存列表溢出(core.musicStatus.cacheBgmCount)则通过LRU算法选择一个bgm并调用core.freeBgm()。
-
-
-core.freeBgm(name)
-释放一个bgm的内存并移出缓存列表。如果该bgm正在播放则也会立刻停止。
-```
-
-## map.js
-
-maps.js负责一切和地图相关的处理内容,包括如下几个方面:
-- 地图的初始化,保存和读取,地图数组的生成
-- 是否可移动或瞬间移动的判定
-- 地图的绘制
-- 获得某个点的图块信息
-- 启用和禁用图块,改变图块
-- 移动/跳跃图块,淡入淡出图块
-- 全局动画控制,动画的绘制
-
-```text
-// ------ 地图的初始化,保存和读取,地图数组的生成 ------ //
-
-core.loadFloor(floorId, map)
-从楼层或者存档中生成core.status.maps的内容。
-map为存档信息,如果某项在map中不存在则会从core.floors中读取。
-
-
-core.getNumberById(id)
-给定一个图块ID,找到图块对应的图块编号。
-
-
-core.initBlock(x, y, id, addInfo, eventFloor)
-给定一个数字,初始化一个图块信息。
-x和y为坐标,id为数字或者可以:t或:f结尾表示初始是启用还是禁用状态。
-addInfo如果为true则会填充上图块的默认信息,比如给怪物添加battle触发器。
-eventFloor如果设置为某个楼层信息,则会填充上该点的自定义或楼层切换事件。
-
-
-core.compressMap(mapArr, floorId)
-压缩地图。mapArr为要压缩的二维数组,floorId为对应的楼层。
-此函数将把mapArr和对应的楼层中的数组进行比较,并只取差异值进行存储。
-通过这种压缩地图的方式,不仅节省了存档空间,还支持了任意修改地图的接档。
-
-
-core.decompressMap(mapArr, floorId)
-解压缩地图。mapArr为压缩后的地图,floorId为对应的楼层。
-此函数返回解压后的二维数组。
-
-
-core.saveMap(floorId)
-将某层楼的数据生成存档所保存的内容。在core.saveData()中被调用。
-
-
-core.loadMap(data, floorId)
-从data中读取楼层数据,并调用core.loadFloor()进行初始化。
-
-
-core.removeMaps(fromId, toId)
-删除某个区域的地图。调用此函数后,这些楼层将不可飞,不可被浏览地图,也不计入存档。
-fromId和toId为要删除的起终点楼层ID;toId也可以不填代表只删除某一层。
-此函数适用于高层塔的砍层,例如每100层一个区域且互相独立,不可再返回的情况。
-
-
-core.resizeMap(floorId)
-根据某层楼的地图大小来调整大地图的画布大小。floorId可为null表示当前层。
-
-
-core.getMapArray(floorId, showDisable)
-生成某层楼的二维数组。floorId可不填代表当前楼层。
-showDisable若为真,则对于禁用的点会加上:f表示,否则视为0。
-
-
-core.getMapBlocksObj(floorId, showDisable)
-以x,y的形式返回每个点的图块信息。floorId可不填表示当前楼层。
-此函数将返回 {"0,0": {...}, "0,1": {...}} 这样的结构,其中内部为对应点的block信息。
-
-
-core.getBgMapArray(floorId, noCache)
-获得某层楼的背景层的二维数组。floorId可不填表示当前楼层。
-如果noCache为真则重新从剧本中读取而不使用缓存数据。
-
-
-core.getFgMapArray(floorId, noCache)
-获得某层楼的前景层的二维数组。floorId可不填表示当前楼层。
-如果noCache为真则重新从剧本中读取而不使用缓存数据。
-
-
-core.getBgNumber(x, y, floorId, noCache)
-获得某层楼的背景层中某个点的数字。floorId可不填表示当前楼层。
-如果noCache为真则重新从剧本中读取而不使用缓存数据。
-本函数实际等价于 core.getBgMapArray(floorId, noCache)[y][x]
-
-
-core.getBgNumber(x, y, floorId, noCache)
-获得某层楼的前景层中某个点的数字。参数和方法同上。
-
-// ------ 是否可移动或瞬间移动的判定 ------ //
-
-core.generateMovableArray(floorId, x, y, direction)
-生成全图或某个点的可通行方向数组。floorId为楼层Id,可不填默认为当前点。
-这里的可通行方向数组,指的是["up","down","left","right"]中的一个或多个组成的数组。
- - 如果不设置x和y,则会返回一个三维数组,其中每个点都是一个该点可通行方向的数组。
- - 如果设置了x和y但没有设置direction,则只会返回该点的可通行方向数组,
- - 如果设置了x和y以及direction,则会判定direction是否在该点可通行方向数组中,并返回true或false。
-可以使用core.inArray()来判定某个方向是否在可通行方向数组中。
-
-
-core.canMoveHero(x, y, direction, floorId)
-某个点是否可朝某个方向移动。x和y可选,不填或为null则默认为勇士当前点。
-direction可选,不填或为null则默认勇士当前朝向。floorId不填则默认为当前楼层。
-此函数将直接调用 core.generateMovableArray() 进行判定。
-
-
-core.canMoveDirectly(destX, destY)
-当前能否瞬间移动到某个点。
-如果可以瞬移则返回非负数,其值为该次瞬移所少走的步数;如果不能瞬移则返回-1。
-
-
-core.automaticRoute(destX, destY)
-找寻到目标点的一条自动寻路路径。
-
-// ------ 绘制地图相关 ------ //
-
-core.drawBlock(block, animate)
-重新绘制一个图块,block为图块信息。
-如果animate不为null则代表是通过全局动画的绘制,其值为当前的帧数。
-
-
-core.generateGroundPattern(floorId)
-生成某个楼层的地板信息。floorId不填默认为当前楼层。
-该函数可被怪物手册、对话框帧动画等地方使用。
-
-
-core.drawMap(floorId, callback)
-绘制某层楼的地图。floorId为目标楼层ID,可不填表示当前楼层。
-此函数会将core.status.floorId设置为floorId,并设置core.status.thisMap。
-将依次调用core.drawBg(), core.drawEvents()和core.drawFg()函数,最后绘制勇士和更新地图显伤。
-
-
-core.drawBg(floorId, ctx)
-绘制背景层。floorId为目标楼层ID,可不填表示当前楼层。
-如果ctx不为null,则背景层将绘制在该画布上而不是bg层上(drawThumbnail使用)。
-可以通过复写该函数,调整_drawFloorImages和_drawBgFgMap的顺序来调整背景图块和贴图的遮挡顺序。
-
-
-core.drawEvents(floorId, blocks, ctx)
-绘制事件层。floorId为目标楼层ID,可不填表示当前楼层。
-block表示要绘制的图块列表,可不填使用当前楼层的图块列表。
-如果ctx不为null,则背景层将绘制在该画布上而不是event层上(drawThumbnail使用)。
-
-
-core.drawFg(floorId, ctx)
-绘制前景层。floorId为目标楼层ID,可不填表示当前楼层。
-如果ctx不为null,则背景层将绘制在该画布上而不是fg层上(drawThumbnail使用)。
-可以通过复写该函数,调整_drawFloorImages和_drawBgFgMap的顺序来调整前景图块和贴图的遮挡顺序。
-
-
-core.drawThumbnail(floorId, blocks, options, toDraw)
-绘制一个楼层的缩略图。floorId为目标楼层ID,可不填表示当前楼层。
-block表示要绘制的图块列表,可不填使用当前楼层的图块列表。
-options为绘制选项(可为null),包括:
- heroLoc: 勇士位置;heroIcon:勇士图标(默认当前勇士);damage:是否绘制显伤;
- flags:当前的flags(在存读档时使用)
-toDraw为要绘制到的信息(可为null,或为一个画布名),包括:
- ctx:要绘制到的画布(名);x,y:起点横纵坐标(默认0);size:绘制大小(默认416/480);
- all:是否绘制全图(默认false);centerX,centerY:截取中心(默认为地图正中心)
-
-// ------ 获得某个点的图块信息 ------ //
-
-core.noPass(x, y, floorId)
-判定某个点是否有noPass(不可通行)的图块。
-
-
-core.npcExists(x, y, floorId)
-判定某个点是否有NPC的存在。
-
-
-core.terrainExists(x, y, id, floorId)
-判定某个点是否有(id对应的)地形存在。
-如果id为null,则只要存在terrains即为真,否则还会判定对应点的ID。
-
-
-core.stairExists(x, y, floorId)
-判定某个点是否存在楼梯。
-
-
-core.nearStair()
-判定当前勇士是否在楼梯上或旁边(距离不超过1)。
-
-
-core.enemyExists(x, y, id, floorId)
-判定某个点是否有(id对应的)怪物存在。
-如果id为null,则只要存在怪物即为真,否则还会判定对应点的怪物ID。
-请注意,如果需要判定某个楼层是否存在怪物请使用core.hasEnemyLeft()函数。
-
-
-core.getBlock(x, y, floorId, showDisable)
-获得某个点的当前图块信息。x和y为坐标;floorId为楼层ID,可忽略或null表示当前楼层。
-showDisable如果为true,则对于禁用的点和事件也会进行返回。
-如果该点不存在图块,则返回null。
-否则,返回值如下: {"index": xxx, "block": xxx}
-其中index为该点在该楼层blocks数组中的索引,block为该图块实际内容。
-
-
-core.getBlockId(x, y, floorId, showDisable)
-获得某个点的图块ID。如果该点不存在图块则返回null。
-
-
-core.getBlockCls(x, y, floorId, showDisable)
-获得某个点的图块类型。如果该点不存在图块则返回null。
-
-
-core.getBlockInfo(block)
-根据某个的图块信息获得其详细的素材信息。
-如果参数block为字符串,则视为图块ID;如果参数为数字,则视为图块的数字。
-此函数将返回一个非常详尽的素材信息,目前包括如下几项:
-number:素材数字;id:素材id;cls:素材类型;image:素材所在的素材图片;animate:素材的帧数。
-posX, posY:素材在该素材图片上的位置;height:素材的高度;faceIds:NPC朝向记录。
-
-
-core.searchBlock(id, floorId, showDisable)
-搜索一个图块出现过的所有位置。id为图块ID,也可以传入图块的数字。
-id支持通配符搜索,比如"*Door"可以搜索所有的门,"unknownEvent*"可以所有所有的unknownEvent。
-floorId为要搜索的楼层,可以是一个楼层ID,或者一个楼层数组。如果floorId不填则只搜索当前楼层。
-showDisable如果为真,则对于禁用的图块也会返回。
-此函数将返回一个数组,每一项为一个搜索到的结果:
-{"floorId": ..., "index": ..., "block": {...}, "x": ..., "y": ...}
-即包含该图块所在的楼层ID,在该楼层的blocks数组的索引,图块内容,和横纵坐标。
-
-
-// ------ 启用和禁用图块,改变图块 ------ //
-
-core.showBlock(x, y, floorId)
-将某个点从禁用变成启用状态。floorId可不填或null表示当前楼层。
-
-
-core.hideBlock(x, y, floorId)
-将某个点从启用变成禁用状态,但不会对其进行删除。floorId可不填或null表示当前楼层。
-此函数不会实际将该块从地图中进行删除,而是将该点设置为禁用,以供以后可能的启用事件。
-
-
-core.removeBlock(x, y, floorId)
-将从启用变成禁用状态,并尽可能将其从地图上删除。
-和hideBlock相比,如果该点不存在自定义事件(比如门或普通的怪物),则将直接从地图中删除。
-如果存在自定义事件,则简单的禁用它,以供以后可能的启用事件。
-
-
-core.removeBlockByIndex(index, floorId)
-每个楼层的图块存成一个数组,index即为该数组中的索引,每个索引对应该地图中的一个图块
-根据索引从地图的block数组中尽可能删除一个图块。floorId可不填或null表示当前楼层。
-
-
-core.removeBlockByIndexes(indexes, floorId)
-indexes为由索引组成的数组,如[0,1]等
-根据索引数组从地图的block数组中尽可能删除一系列图块。floorId可不填或null表示当前楼层。
-
-
-core.canRemoveBlock(block, floorId)
-block为图块信息,可由core.getBlock获取
-判定当前能否完全删除某个图块。floorId可不填或null表示当前楼层。
-如果该点存在自定义事件,或者是重生怪,则不可进行删除。
-
-
-core.showBgFgMap(name, loc, floorId, callback)
-显示某层楼中某个背景/前景层的图块。name只能为'bg'或'fg'表示背景或前景层。
-loc为该点坐标,floorId可不填默认为当前楼层。callback为执行完毕的回调。
-
-
-core.hideBgFgMap(name, loc, floorId, callback)
-隐藏某层楼中某个背景/前景层的图块。name只能为'bg'或'fg'表示背景或前景层。
-loc为该点坐标,floorId可不填默认为当前楼层。callback为执行完毕的回调。
-
-
-core.showFloorImage(loc, floorId, callback)
-显示某层楼中的某个楼层贴图。loc为该贴图的左上角坐标。floorId可省略表示当前楼层。
-
-
-core.hideFloorImage(loc, floorId, callback)
-隐藏某层楼中的某个楼层贴图。loc为该贴图的左上角坐标。floorId可省略表示当前楼层。
-
-
-core.setBlock(number, x, y, floorId)
-改变某个楼层的某个图块。
-number为要改变到的数字,也可以传入图块id(将调用core.getNumberById()来获得数字)。
-x,y和floorId为目标点坐标和楼层,可忽略为当前点和当前楼层。
-
-
-core.replaceBlock(fromNumber, toNumber, floorId)
-将某个或某些楼层中的所有某个图块替换成另一个图块
-fromNumber和toNumber为要被替换和替换到的数字。
-floorId可为某个楼层ID,或者一个楼层数组;如果不填只视为当前楼层。
-值得注意的是,使用此函数转了的点上的自定义事件可能无法被执行。
-如有需要,再对那些存在事件的点执行core.setBlock()即可
-
-
-core.setBgFgBlock(name, number, x, y, floorId)
-设置前景/背景层的某个图块。name只能为'bg'或'fg'表示前景或背景层。
-number为要设置到的图块数字,x,y和floorId为目标点坐标和楼层,可忽略为当前点和当前楼层。
-
-
-core.resetMap(floorId)
-重置某层或若干层的地图和楼层属性。
-floorId可为某个楼层ID,或者一个楼层数组如["MT1","MT2"](同时重置若干层);如果不填则只重置当前楼层。
-
-// ------ 移动/跳跃图块,淡入淡出图块 ------ //
-
-core.moveBlock(x, y, steps, time, keep, callback)
-移动一个图块,x和y为图块的坐标。
-steps为移动的数组,每一项只能是"up","down","left","right"之一。
-time为每一步的移动时间,不填默认为500ms。
-如果keep为真,则在移动完毕后将自动调用一个setBlock事件,改变目标点的图块(即不消失),
-否则会按照time时间来淡出消失。callback会执行完毕后的回调。
-
-
-core.jumpBlock(sx, sy, ex, ey, time, keep, callback)
-跳跃一个图块,sx和sy为图块的坐标,ex和ey为目标坐标。time为整个跳跃过程中的全程用时,不填默认500。
-如果keep为真,则在移动完毕后将自动调用一个setBlock事件,改变目标点的图块(即不消失),
-否则会按照time时间来淡出消失。callback会执行完毕后的回调。
-
-
-core.animateBlock(loc, type, time, callback)
-淡入/淡出一个或多个图块。
-loc为一个图块坐标,或者一个二维数组表示一系列图块坐标(将同时显示和隐藏)。
-type只能为'show'或'hide'表示是淡入但是淡出。time为动画时间,callback为执行完毕的回调。
-
-// ------ 全局动画控制,动画的绘制 ------ //
-
-core.addGlobalAnimate(block)
-添加一个全局帧动画。
-
-
-core.removeGlobalAnimate(x, y, name)
-删除一个或全部的全局帧动画。name可为'bg',null或'fg'表示某个图层。
-x和y如果为null,则会删除全部的全局帧动画,否则只会删除该点的该层的帧动画。
-
-
-core.drawBoxAnimate()
-绘制UI层的box动画,如怪物手册和对话框中的帧动画等。
-
-
-core.drawAnimate(name, x, y, alignWindow, callback)
-绘制一个动画。name为动画名,x和y为绘制的基准坐标,callback为绘制完毕的回调函数。
-此函数将播放动画音效,并异步开始绘制该动画。
-此函数会返回一个动画id,可以通过core.stopAnimate()立刻停止该动画的播放。
-
-
-core.stopAnimate(id, doCallback)
-立刻停止某个动画的播放。id为上面core.drawAnimate的返回值。
-如果doCallback为真,则会执行该动画所对应的回调函数。
-```
-
-## ui.js
-
-ui.js负责一切UI界面的绘制。主要包括三个部分:
-- 设置某个画布的属性的相关API
-- 具体的某个UI界面的绘制
-- 动态创建画布相关的API
-
-```text
-// ------ 设置某个画布的属性的相关API ------//
-这系列函数的name一般都是画布名,可以是系统画布或动态创建的画布。
-但也同时也允许直接传画布的context本身,将返回自身。
-
-
-core.getContextByName(name)
-根据画布名找到一个画布的context;支持系统画布和自定义画布。
-如果不存在画布此函数返回null。
-该参数也可以直接传画布的context自身,则返回自己。
-
-
-core.clearMap(name)
-清空某个画布图层。
-该函数的name也可以是'all',若为'all'则为清空所有系统画布。
-
-
-core.fillText(name, text, x, y, style, font, maxWidth)
-在某个画布上绘制一段文字。
-text为要绘制的文本,x,y为要绘制的坐标,style可选为绘制的样式,font可选为绘制的字体。(下同)
-style可直接使用"red","white"等或用"rgba(255,255,255,1)"或用"#FFFFFF"等方式来获得字体对应的颜色
-font的格式为"20px Verdana"前者为字体大小,后者为字体
-如果maxWidth不为null,则视为文字最大宽度,如果超过此宽度则会自动放缩文字直到自适应为止。
-请注意textAlign和textBaseline将决定绘制的左右对齐和上下对齐方式。
-具体可详见core.setTextAlign()和core.setTextBaseline()函数。
-譬如:core.fillText("ui", "这是要描绘的文字", 10, 10, "red", "20px Verdana", 100)
-即是在ui图层上,以10,10为起始点,描绘20像素大小,Verdana字体的红色字,长度不超过100像素
-
-
-core.fillBoldText(name, text, x, y, style, font)
-在某个画布上绘制一个描黑边的文字。
-
-
-core.fillRect(name, x, y, width, height, style)
-绘制一个矩形。width, height为矩形宽高,style可选为绘制样式。如果设置将调用core.setFillStyle()。(下同)
-
-
-core.strokeRect(name, x, y, width, height, style, lineWidth)
-绘制一个矩形的边框。style可选为绘制样式,如果设置将调用core.setStrokeStyle()。
-lineWidth如果设置将调用core.setLineWidth()。(下同)
-
-
-core.drawLine(name, x1, y1, x2, y2, style, lineWidth)
-绘制一条线,x1y1为起始点像素,x2y2为终止点像素。
-
-
-core.drawArrow(name, x1, y1, x2, y2, style, lineWidth)
-绘制一个箭头,x1y1为起始点像素,x2y2为终止点像素。
-
-
-core.setFont(name, font) / core.setLineWidth(name, lineWidth)
-设置一个画布的字体/线宽。
-
-
-core.setAlpha(name, font) / core.setOpacity(name, font)
-设置一个画布的绘制不透明度和画布本身的不透明度。
-两者区别如下:
- - setAlpha是设置"接下来绘制的内容的不透明度",不会对已经绘制的内容产生影响。
- > 比如setAlpha('ui', 0.5)则会在接下来的绘制中使用0.5的不透明度。
- - setOpacity是设置"画布本身的不透明度",已经绘制的内容也会产生影响。
- > 比如我已经在UI层绘制了一段文字,再setOpacity则也会让已经绘制的文字变得透明。
-尽量不要对系统画布使用setOpacity(因为会对已经绘制的内容产生影响),自定义创建的画布则不受此限制。
-
-
-core.setFillStyle(name, style) / core.setStrokeStyle(name, style)
-设置一个画布的填充样式/描边样式。
-
-
-core.setTextAlign(name, align)
-设置一个画布的文字横向对齐模式,这里的align只能为'left', 'right'和'center',分别对应左对齐,右对齐,居中。
-默认为'left'。
-
-
-core.setTextBaseline(name, baseline)
-设置一个画布的纵向对齐模式。有关textBaseline的说明可参见如下资料:
-http://www.runoob.com/tags/canvas-textbaseline.html
-默认值是'alphabetic'。
-请注意,系统画布在绘制前都是没有设置过textBaseline的,都是按照alphabetic进行坐标绘制。
-因此,如果你修改了系统画布的textBaseline来绘图,记得再绘制完毕后修改回来。
-
-
-core.calWidth(name, text, font)
-计算一段文字在某个画布上的绘制宽度,此函数其实是ctx.measureText()的包装。
-font可选,如果存在则会先设置该画布上的字体。
-此函数不会对文字进行换行,如需换行版本请使用core.splitLines()函数。
-
-
-core.splitLines(name, text, maxWidth, font)
-计算一段文字在某画布上换行分割的结果。
-text为文字内容,maxWidth为最大宽度,可为null表示不自动换行。
-font可选,如果存在则会先设置该画布上的字体。
-此函数将返回一个换行完毕的文本列表。
-
-
-core.drawImage(name, image, x, y, w, h, x1, y1, w1, h1)
-在一张画布上绘制一张图片,此函数其实是ctx.drawImage()的包装。
-可以查看下面的文档以了解各项参数的信息:
-http://www.w3school.com.cn/html5/canvas_drawimage.asp
-这里的image允许传一个图片,画布。也允许传递图片名,将从你导入的图片中获取图片内容。
-
-
-core.drawIcon(name, id, x, y, w, h)
-在一张画布上绘制一个图标。
-id为注册过的图标ID,也可以使用状态栏的图标ID,例如lv, hp, up, save, settings等。
-x和y为绘制的左上角坐标;w和h可选为绘制的宽高,如果不填或null则使用该图标的默认宽高。
-
-
-// ------ 具体的某个UI界面的绘制 ------ //
-core.closePanel()
-结束一切事件和UI绘制,关闭UI窗口,返回游戏。
-此函数将以此调用core.clearUI(),core.unlockControl(),并清空core.status.event里面的内容。
-
-
-core.clearUI()
-重置UI窗口。此函数将清掉所有的UI帧动画和光标,清空UI画布,并将alpha设为1。
-
-
-core.drawTip(text, id, clear)
-在左上角以气泡的形式绘制一段提示。
-text为文字内容,仅支持${}的表达式计算,不支持换行和变色。
-id可选,为同时绘制的图标ID,如果不为null则会同时绘制该图标(仅对32x32的素材有效)。
-也可以使用状态栏的图标ID,例如lv, hp, up, save, settings等。
-如果clear为true,则会清空当前所有正在显示的提示。
-
-
-core.clearTip()
-清空当前所有正在显示的提示。
-
-
-core.drawText(content, callback)
-绘制一段文字。contents为一个字符串或一个字符串数组,callback为全部绘制完毕的回调。
-支持所有的文字效果(如\n,${},\r,\\i,\\c,\\d,\\e等),也支持\t和\b的语法。
-如果当前在事件处理中或录像回放中,则会自动转成core.insertAction处理。
-不建议使用该函数,如有绘制文字的需求请尽量使用core.insertAction()插入剧情文本事件。
-
-
-core.drawWindowSelector(background, x, y, w, h)
-绘制一个WindowSkin的闪烁光标。background可为winskin的图片名或图片本身。
-x,y,w,h为绘制的左上角位置和宽高,都是像素为单位。
-
-
-core.drawWindowSkin(background, ctx, x, y, w, h, direction, px, py)
-绘制一个WindowSkin。background可为winskin的图片名或图片本身。
-ctx为画布名或画布本身,x,y,w,h为左上角位置和宽高,都是像素为单位。
-direction, px, py可选,如果设置则会绘制一个对话框箭头。
-
-
-core.drawBackground(left, top, right, bottom, posInfo)
-绘制一个背景图。此函数将使用你在【剧情文本设置】中设置的背景,即用纯色或WindowSkin来绘制。
-left, top, right, bottom为你要绘制的左上角和右下角的坐标。
-posInfo如果不为null则是一个含position, px和py的对象,表示一个对话框箭头的绘制。
-
-
-core.drawTextContent(ctx, content, config)
-根据配置在某个画布上绘制一段文字。此函数会被core.drawTextBox()所调用。
-ctx为画布名或画布本身,如果不设置则会忽略该函数。
-content为要绘制的文字内容,支持所有的文字效果(如\n,${},\r,\\i,\\c,\\d,\\e等)
- ,但不支持支持\t和\b的语法。
-config为绘制的配置项,目前可以包括如下几项:
- - left, top:在该画布上绘制的左上角像素位置,不设置默认为(0,0)。
- > 该函数绘制时会将textBaseline设置为'top',因此只需要考虑第一个字的左上角位置。
- - maxWidth:单行最大宽度,超过此宽度将自动换行,不设置不会自动换行。
- - color:默认颜色,为#XXXXXX形式。如果不设置则使用剧情文本设置中的正文颜色。
- - bold:是否粗体。如果不设置默认为false。
- - align:文字对齐方式,仅在maxWidth设置时有效,默认为'left'。
- - fontSize:字体大小,如果不设置则使用剧情文本设置中的正文字体大小。
- - lineHeight:绘制的行距值,如果不设置则使用fontSize*1.3(即1.3倍行距)。
- - time:打字机效果。若不为0,则会逐个字进行绘制,并设置core.status.event.interval定时器。
- - interval:字符间的间距。值表示绘制每个字符之间间隔的距离,默认为0。
-
-
-core.drawTextBox(content, showAll)
-绘制一个对话框。content为一个字符串或一个字符串数组。
-支持所有的文字效果(如\n,${},\r,\\i,\\c,\\d,\\e等),也支持\t和\b的语法。
-该函数将使用用户在剧情文本设置中的配置项进行绘制。
-实际执行时,会计算文本框宽度并绘制背景,绘制标题和头像,再调用core.drawTextContent()绘制正文内容。
-showAll可选,如果为true则不会使用打字机效果而全部显示,主要用于打字机效果的点击显示全部。
-
-
-core.drawScrollText(content, time, lineHeight, callback)
-绘制一个滚动字幕。content为绘制内容,time为总时间(默认为5000),lineHeight为行距比例(默认为1.4)。
-滚动字幕将绘制在UI上,支持所有的文字效果(如\n,${},\r,\\i,\\c,\\d,\\e等),但不支持\t和\b效果。
-可以通过剧情文本设置中的align控制是否居中绘制,offset控制其距离左边的偏移量。
-
-
-core.textImage(content, lineHeight)
-将文本图片化。content为绘制内容,lineHeight为行距比例(默认为1.4)。
-可以通过剧情文本设置中的align控制是否居中绘制。
-此函数将返回一个临时画布的canvas,供转绘到其他画布上使用。
-
-
-core.drawChoices(content, choices)
-绘制一个选项框。
-content可选,为选项上方的提示文字,支持所有的文字效果(如\n,${},\r,\\i,\\c,\\d,\\e等),也支持\t。
-choices必选,为要绘制的选项内容,是一个列表。其中的每一项:
- - 可以是一个字符串,表示选项文字,将使用剧情文本设置中的正文颜色来绘制,仅支持${}表达式计算。
- - 或者是一个包含text, color和icon的对象。
- > text必选,为要绘制的文字内容,仅支持${}的表达式计算,
- > color为要绘制的选项颜色,可以是#XXXXXX的格式或RGBA数组。不设置则使用正文颜色。
- > icon为要绘制的图标ID,支持使用素材的ID,或者系统图标。
-
-
-core.drawConfirmBox(text, yesCallback, noCallback)
-绘制一个确认框。text为确认文字,支持\n换行(但不支持自动换行)和${}表达式计算。
-yesCallback和noCallback分别为确定和取消的回调函数。
-可以在调用此函数前设置core.status.event.selection来控制默认的选中项(0确定1取消)。
-此函数和core.myconfirm的区别主要在于:
- - 此函数会清掉UI层原有的绘制信息,core.myconfirm不会清除。
- - 此函数可以用键盘进行操作,core.myconfirm必须用鼠标点击。
-另外请注意:本函数和事件流的执行不兼容,选择也不会进录像。
-如果需要在事件流中调用请使用提供选择项。
-
-
-core.drawWaiting(text)
-绘制一个等待界面,一般用于同步存档之类的操作。
-调用此函数后,需要再调用core.closePanel()才会恢复游戏。
-
-
-core.drawPagination(page, totalPage, y)
-绘制一个分页。y如果不设置则绘制在最后一行。
-
-
-core.drawBook(index) / core.drawBookDetail(index)
-绘制怪物手册,绘制怪物的详细信息。
-
-
-core.drawFly(page) / core.drawCenterFly() / core.drawShop(shopId)
-绘制楼传页面,中心对称飞行器,绘制商店
-
-
-core.drawToolbox(index) / core.drawEquipbox(index) / core.drawKeyBoard()
-绘制道具栏,绘制装备栏,绘制虚拟键盘。
-
-
-core.drawMaps(index, x, y) / core.drawSLPanel(index, refresh)
-绘制浏览地图,绘制存读档界面。
-
-
-core.drawStatusBar()
-自定义绘制状态栏,仅在状态栏canvas化开启时有效,实际被转发到了脚本编辑中。
-
-
-core.drawStatistics()
-绘制数据统计。将从脚本编辑中获得要统计的数据列表,再遍历所有地图进行统计。
-
-
-core.drawAbout() / core.drawHelp()
-绘制关于界面,帮助界面。
-
-// ------ 动态创建画布相关的API ------ //
-
-
-core.ui.createCanvas(name, x, y, width, height, z)
-动态创建一个自定义画布。name为要创建的画布名,如果已存在则会直接取用当前存在的。
-x,y为创建的画布相对窗口左上角的像素坐标,width,height为创建的长宽。
-z值为创建的纵向高度(关系到画布之间的覆盖),z值高的将覆盖z值低的;系统画布的z值可在个性化中查看。
-返回创建的画布的context,也可以通过core.dymCanvas[name]或core.getContextByName获得。
-
-
-core.ui.relocateCanvas(name, x, y)
-重新定位一个自定义画布。x和y为画布的左上角坐标,name为画布名。
-
-
-core.ui.resizeCanvas(name, width, height, styleOnly)
-重新设置一个自定义画布的大小。width和height为新设置的宽高。
-styleOnly控制是否只修改画布的显示大小(而不修改画布的内部大小)。
-如果styleOnly为true,则只修改其显示大小(即canvas.style.width);
-否则,则会同时修改画布的显示大小和内部大小并清空画布内容。
-
-
-core.ui.deleteCanvas(name)
-删除一个自定义画布。
-
-
-core.ui.deleteAllCanvas()
-删除所有的自定义画布。
-```
-
-## utils.js
-
-utils.js是一个工具函数库,里面有各个样板中使用到的工具函数。
-
-```text
-core.replayText(text, need, times)
-将一段文字中的${}(表达式)进行替换。need和time一般可以直接忽略。
-
-
-core.replaceValue(value)
-对一个表达式中的特殊规则进行替换,如status:xxx等。
-请注意,此项不会对独立开关如switch:A进行替换。
-
-
-core.calValue(value, prefix, need, time)
-计算一个表达式的值,支持status:xxx等的计算。
-prefix为前缀(switch:xxx的独立开关使用),need和time一般可以直接忽略。
-
-
-core.unshift(a, b) / core.push(a, b)
-将b插入到列表a之前或之后。b可以是一个元素或者一个数组。
-
-
-core.decompress(value)
-解压缩一个字符串并进行JSON解析。value可能会被LZString或LZW算法进行压缩。
-返回解压后的JSON格式内容,如果无法解压则返回null。
-
-
-core.setLocalStorage(key, value)
-将一个键值对存入localStorage中,会立刻返回结果。
-此函数会自动给key加上它的name作为前缀,以便于不同塔之间的区分。
-value为要存储的内容,存储前会被JSON转成字符串形式,并LZW算法进行压缩。
-如果value为null,则实际会调用core.removeLocalStorage()函数清除该key。
-localStorage为浏览器的默认存储,和存档无关,只有5M的空间大小。
-此函数立刻返回true或false,如果为false则代表存储失败,一般指的是空间满了。
-
-
-core.getLocalStorage(key, defaultValue)
-从localStorage中获得一个键的值,会立刻返回结果。
-此函数会自动给key加上它的name作为前缀,以便于不同塔之间的区分。
-如果对应的键值不存在或为null,则会返回defaultValue。
-返回的结果会被调用core.decompress进行解压缩和JSON解析。
-
-
-core.removeLocalStorage(key)
-从localStorage中删除一个键的值,会立刻返回。
-此函数会自动给key加上它的name作为前缀,以便于不同塔之间的区分。
-
-
-core.setLocalForage(key, value, successCallback, errorCallback)
-将一个键值对存入localForage中,异步返回结果。
-如果用户没有开启【新版存档】开关,则仍然会使用core.setLocalStorage()。
-localForage为一个开源库,项目地址 https://github.com/localForage/localForage
-一般存入的是indexedDB,这是一个浏览器的自带数据库,没有空间限制。
-successCallback和errorCallback均可选,表示该次存储成功或失败的回调,
-此函数为异步的,只能通过回调函数来获得存储的成功或失败信息。
-
-
-core.getLocalForage(key, defaultValue, successCallback, errorCallback)
-从localForage中获得一个键的值,异步返回结果。
-如果对应的键值不存在,则会使用defaultValue。
-如果获得成功,则会将core.decompress后的结果传入successCallback回调函数执行。
-errorCallback可选,如果失败,则会将错误信息传入errorCallback()。
-此函数是异步的,只能通过回调函数来获得读取的结果或错误信息。
-
-
-core.setGlobal(key, value)
-设置一个全局存储,适用于global:xxx。
-录像播放时将忽略此函数,否则直接调用core.setLocalStorage。
-
-
-core.getGlobal(key, value)
-获得一个全局存储,适用于global:xxx,支持录像。
-正常游戏时将使用core.getLocalStorage获得具体的数据,并将结果存放到录像中。
-录像播放时会直接从录像中获得对应的数据。
-
-
-core.clone(data, filter, recursion)
-深拷贝一个对象。有关浅拷贝,深拷贝,基本类型和引用类型等相关知识可参见:
-https://zhuanlan.zhihu.com/p/26282765
-filter为过滤函数,如果设置且不为null则需传递一个可接受(name, value)的函数,
-并返回true或false,表示该项是否应该被深拷贝。
-recursion表示该filter是否应递归向下传递,如果为true则递归函数也将传该filter。
-例如:
-core.clone(core.status.hero, function(name, value) {
- return name == 'items' || typeof value == 'number';
-}, false);
-这个例子将会深拷贝勇士的属性和道具。
-
-
-core.splitImage(image, width, height)
-等比例切分一张图片。width和height为每张子图片的宽高。
-请确保原始图片的宽度和高度都是是width和height的倍数。
-此函数将返回一个一维数组,每一项都是一张切分好的图片,横向再纵向排列。
-例如4x3的图片按1x1切分得到一个长度为12的数组,按如下方式进行排列:
-0 1 2 3
-4 5 6 7
-8 9 10 11
-可以将很多需要的图片拼在一张大图上,然后在插件的_afterLoadResources中切分。
-切分好的图片再存入core.material.images.images中,这样可以少很多IO请求。
-
-
-core.formatDate(date) / core.formatDate2(date) / core.formatTime(time)
-格式化日期和时间。
-
-
-core.setTwoDigits(x)
-将x变成两位数。其实就是 parseInt(x) < 10 ? "0" + x : x
-
-
-core.formatBigNumber(x, onMap)
-大数据格式化。x为要格式化的内容,如果不合法会返回???。
-onMap标记是否在地图上调用,如果为真则尝试格式化成六位,否则五位。
-
-
-core.arrayToRGB(color) / core.arrayToRGBA(color)
-将一个颜色数组,例如[255,0,0,1]转成#FF0000或rgba(255,0,0,1)的形式。
-
-
-core.encodeRoute(route)
-录像压缩和解压缩。route为要压缩的路线数组。
-此函数将尽可能对录像进行压缩。对于无法识别的项目(比如自己添加的),将不压缩而原样放入。
-例如,["up","up","left","move:3:5","test:2333","getNext","item:bomb","down"]
-将被压缩成"U2LM3:5(test:2333)GIbomb:D"。
-自己添加的录像项只能由数字、大小写、下划线线、冒号等符号组成,否则无法正常压缩和解压缩。
-对于自定义内容(比如中文文本或数组)请使用JSON.stringify再core.encodeBase64处理。
-压缩的结果将再次进行LZString.compressToBase64()的压缩以进一步节省空间。
-
-
-core.decodeRoute(route)
-解压缩一个录像,返回解压完毕的路线数组。
-
-
-core.isset(v)
-判定v是不是null, undefined或NaN。
-请尽量避免使用此函数,而是直接判定 v == null (请注意 null==undefined !)
-
-
-core.subarray(a, b)
-判定数组b是不是数组a的一个前缀子数组。
-如果是,则返回a中除去b后的剩余数组,否则返回null。
-
-
-core.inArray(array, element)
-判定array是不是一个数组,以及element是否在该数组中。
-
-
-core.clamp(x, a, b)
-将x限定在[a,b]区间内。
-
-
-core.getCookie(name)
-获得一个cookie值,如果不存在该cookie则返回null。
-
-
-core.setStatusBarInnerHTML(name, value, css)
-设置一个状态栏的innerHTML。此函数会自动设置状态栏的文字放缩和斜体等效果。
-name为状态栏的名称,如atk, def等。需要是core.statusBar中的一个合法项。
-value为要设置到的数值,如果是数字则会先core.formatBigNumber()进行格式化。
-css可选,为增添的额外css内容,比如可以设定颜色等。
-
-
-core.strlen(str)
-计算某个字符串的实际长度。每个字符的长度,ASCII码视为1,中文等视为2。
-
-
-core.reverseDirection(direction)
-翻转方向,即"up"转成"down", "left"转成"right"等。
-
-
-core.matchWildcard(pattern, string)
-进行通配符的匹配判定,目前仅支持*(可匹配0或任意个字符)。比如"a*b*c"可以匹配"aa012bc"。
-
-
-core.encodeBase64(str) / core.decodeBase64(str)
-将字符串进行base64加密或解密。
-可用于解压缩录像数据
-
-
-core.rand(num)
-使用伪种子生成伪随机数。该随机函数能被录像支持。
-num如果设置大于0,则生成一个[0, num-1]之间的数;否则生成一个0到1之间的浮点数。
-此函数为伪随机算法,SL大法无效。(即多次SL后调用的该函数返回的值都是相同的。)
-
-
-core.rand2(num)
-使用系统的随机数算法得到的随机数。该随机函数能被录像支持。
-num如果设置大于0,则生成一个[0, num-1]之间的数;否则生成一个0到2147483647之间的整数。
-此函数使用了系统的Math.random()函数,支持SL大法。
-但是,此函数会将生成的随机数值存入录像,因此如果调用次数太多则会导致录像文件过大。
-对于需要大量生成随机数,但又想使用真随机支持SL大法的(例如随机生成地图等),可以采用如下方式:
- var x = core.rand2(100); for (var i = 0; i < x; i++) core.rand()
-即先生成一个真随机数,根据该数来推进伪随机的种子,这样就可以放心调用core.rand()啦。
-
-
-core.readFile(success, error, accept)
-读取一个本地文件内容。success和error分别为读取成功或失败的回调函数。
-accept如果设置则控制能选择的文件类型。
-iOS平台暂不支持读取文件操作。
-
-
-core.readFileContent(content)
-读取到的文件内容。此函数会被APP等调用,来传递文件的具体内容。
-
-
-core.download(filename, content)
-生成一个文件并下载。filename为文件名,content为具体的文件内容。
-iOS平台暂不支持下载文件操作。
-
-
-core.copy(data)
-将一段内容拷贝到剪切板。
-
-
-core.myconfirm(hint, yesCallback, noCallback)
-弹窗绘制一段提示信息并让用户确认。hint为提示信息。
-yesCallback和noCallback分别为确定和取消的回调函数。
-此函数和core.drawConfirmBox的区别主要在于:
- - drawConfirmBox会清掉UI层原有的绘制信息,此函数不会清除。
- - drawConfirmBox可以用键盘进行操作,此函数必须用鼠标点击。
-另外请注意:本函数的选择也不会进录像,一般用于全局的提示。
-如果需要在事件流中调用请使用显示确认框或显示选择项。
-
-
-core.myprompt(hint, value, callback)
-弹窗让用户输入一段内容。hint为提示信息,value为框内的默认填写内容。
-callback为用户点击确认或取消后的回调。
-如果用户点击了确认,则会把框内的内容(可能是空串)传递给callback,否则把null传递给callback。
-
-
-core.showWithAnimate(obj, speed, callback) / core.hideWithAnimate(obj, speed, callback)
-动画淡入或淡出一个对象。
-
-
-core.same(a, b)
-判定a和b是否相同,包括类型相同和值相同。
-如果a和b都是数组,则会递归依次比较数组中的值;如果都是对象亦然。
-
-
-core.utils.http(type, url, formData, success, error, mimeType, responseType)
-发送一个异步HTTP请求。
-type为'GET'或者'POST';url为目标地址;formData如果是POST请求则为表单数据。
-success为成功后的回调,error为失败后的回调。
-mimeType和responseType如果设置将会覆盖默认值。
-
-
-lzw_encode(s) / lzw_decode(s)
-LZW压缩算法,来自https://gist.github.com/revolunet/843889
-```
diff --git a/HTML5魔塔样板使用说明文档.url b/HTML5魔塔样板使用说明文档.url
deleted file mode 100644
index 021c516b..00000000
--- a/HTML5魔塔样板使用说明文档.url
+++ /dev/null
@@ -1,5 +0,0 @@
-[{000214A0-0000-0000-C000-000000000046}]
-Prop3=19,2
-[InternetShortcut]
-IDList=
-URL=https://h5mota.com/games/template/docs/
\ No newline at end of file
diff --git a/README.md b/README.md
index cf3d90bf..2cc6acfb 100644
--- a/README.md
+++ b/README.md
@@ -57,6 +57,25 @@ HTML5 canvas制作的魔塔样板,支持全平台游戏!
## 更新说明
+### 2020.6.7 HTML5魔塔样板V2.7
+
+* [x] 大幅增强脚本编辑的自动补全和代码提示等功能
+* [x] 地图可以右键拉框批量复制剪切删除,额外素材可以拉框绘制区域
+* [x] 图片、音乐音效、动画的半自动注册,可以预览或试听
+* [x] 表格注释大幅精简,怪物特殊属性、图块出入方向、状态栏显示项等改为多选框
+* [x] 重构全局商店,支持任何事件类型
+* [x] 门信息、装备属性、难度分歧、楼层贴图、css等事件化
+* [x] 增加五图层插件,支持背景2层和前景2层
+* [x] 大量图片和几何图形事件支持翻转、旋转和预览
+* [x] 新增大量事件:勇士前进或撞击、事件转向、循环遍历,UI绘制等
+* [x] 选择项、确认框、等待用户操作等支持超时时间,可以制作QTE效果
+* [x] 事件编辑器支持更为强大的自动补全功能
+* [x] 初始化和读档对超高层的优化,现在能更好的支持超高层塔了
+* [x] 包括状态栏图标在内的大量素材进行更新
+* [x] 支持大地图浏览和选点
+* [x] 油漆桶和动态更改地图大小
+* [x] 大量细节优化,解决了许多历史遗留问题
+
### 2019.12.31 HTML5魔塔样板V2.6.6
* [x] 编辑器增加【最近使用的图块】的区域
diff --git a/_docs/api.md b/_docs/api.md
index e8e7d48d..2a959dfe 100644
--- a/_docs/api.md
+++ b/_docs/api.md
@@ -395,6 +395,7 @@ debug: fn()
moveOneStep: fn(callback?: fn())
每移动一格后执行的事件
+【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】
clearStatus: fn()
清除游戏状态和数据
@@ -483,6 +484,7 @@ moveHero: fn(direction?: string, callback?: fn())
例如:core.moveHero(); // 连续前进
direction: 可选,如果设置了就会先转身到该方向
callback: 可选,如果设置了就只走一步
+【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】
getRealStatusOrDefault: fn(status?: ?, name?: string)
从status中获得实际属性(增幅后的),如果不存在则从勇士属性中获取
@@ -523,7 +525,8 @@ clearStatusBar: fn()
moveAction: fn(callback?: fn())
尝试前进一步,如果面前不可被踏入就会直接触发该点事件
-请勿直接使用此函数,如有需要请使用「勇士前进一步或撞击」事件
+与「勇士前进一步或撞击」事件等价
+【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】
hasFlag: fn(name: string) -> bool
判定一个flag变量是否存在且不为false、0、''、null、undefined和NaN
@@ -954,6 +957,7 @@ unregisterSystemEvent: fn(type: string)
trigger: fn(x?: number, y?: number, callback?: fn())
触发(x,y)点的系统事件;会执行该点图块的script属性,同时支持战斗(会触发战后)、道具(会触发道具后)、楼层切换等等
callback: 执行完毕的回调函数
+【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】
restart: fn()
重新开始游戏;此函数将回到标题页面
@@ -1072,6 +1076,7 @@ x: 门的横坐标
y: 门的纵坐标
needKey: true表示需要钥匙,会导致机关门打不开
callback: 门完全打开后或打不开时的回调函数,可选
+【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】
setEnemy: fn(id: string, name: string, value: ?, prefix?: string)
设置一项敌人属性并计入存档
@@ -1104,6 +1109,7 @@ ex: 跳跃后的横坐标
ey: 跳跃后的纵坐标
time: 跳跃时长,单位为毫秒。不填视为半秒
callback: 跳跃完毕后的回调函数,可选
+【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】
closeDoor: fn(x: number, y: number, id: string, callback?: fn())
关门,目标点必须为空地
@@ -1112,6 +1118,7 @@ x: 横坐标
y: 纵坐标
id: 门的id,也可以用三种基础墙
callback: 门完全关上后的回调函数,可选
+【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】
eventMoveHero: fn(steps: [step], time?: number, callback?: fn())
强制移动主角(包括后退),这个函数的作者已经看不懂这个函数了
@@ -1119,6 +1126,7 @@ eventMoveHero: fn(steps: [step], time?: number, callback?: fn())
steps: 步伐数组,注意后退时跟随者的行为会很难看
time: 每步的用时,单位为毫秒。0或不填则取主角的移速,如果后者也不存在就取0.1秒
callback: 移动完毕后的回调函数,可选
+【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】
changeFloor: fn(floorId: string, stair?: string, heroLoc?: {x?: number, y?: number, direction?: string}, time?: number, callback?: fn())
场景切换
@@ -1128,6 +1136,7 @@ stair: 传送的位置
heroLoc: 传送的坐标;会覆盖stair
time: 传送的黑屏时间,单位为毫秒;不填为用户设置值
callback: 传送的回调函数
+【异步脚本,请勿在脚本中直接调用(而是使用对应的事件),否则可能导致录像出错】
getCommonEvent: fn(name: string) -> [?]
获得一个公共事件
diff --git a/_docs/element.md b/_docs/element.md
index d90b186b..fd400ed5 100644
--- a/_docs/element.md
+++ b/_docs/element.md
@@ -27,7 +27,7 @@
## 图块属性(快捷键C)
-
+
如上图,除怪物和道具外,所有素材的图块属性都定义在`project\maps.js`中。道具和怪物属性也支持清空和批量复制,下面逐一讲解各条目的含义和用法:
@@ -138,7 +138,7 @@
## 楼层属性(快捷键V)
-
+
1. **楼层ID:**`project/floors`中的文件名,不允许使用中文也不能直接修改。修改方法见上图底部,修改后必须立即刷新浏览器页面。
2. **楼层名:**楼层在楼传、上下楼黑屏和浏览地图界面的名称。
@@ -199,7 +199,7 @@
全塔属性共分为四部分:文件注册、初始勇士、全局数值、系统开关,您可以随时折叠其中任何一个部分。
-
+
### 文件注册
@@ -281,7 +281,7 @@
### 全局数值
-
+
这个类型的数值会保存在core.values中,可以直接在游戏中修改。
diff --git a/_docs/event.md b/_docs/event.md
index a1be436a..4098e86a 100644
--- a/_docs/event.md
+++ b/_docs/event.md
@@ -4,7 +4,7 @@
## 事件编辑(地图选点,快捷键X)
-
+
样板所有的事件都是依靠“触发器”完成的。例如,勇士碰到(绑定好的)楼梯可以触发changeFloor,碰到门可以触发openDoor,碰到怪物可以触发battle,碰到道具可以触发getItem,碰到箱子可以触发pushBox,走上冰面(背景层)可以触发ski.
@@ -40,7 +40,7 @@
### 楼梯、传送门事件
-
+
当您在地图上绘制楼梯、或绘制四种三帧箭头并右击绑定后,就创建了一个“楼层转换”事件,您可以在事件编辑器右侧看到一行代码(json),请注意对照。
diff --git a/_docs/index.html b/_docs/index.html
index 1c9733fd..69f7fb66 100644
--- a/_docs/index.html
+++ b/_docs/index.html
@@ -13,6 +13,8 @@
@@ -110,6 +113,7 @@
mergeNavbar: true,
formatUpdated: '{YYYY}-{MM}-{DD} {HH}:{mm}:{ss}',
plugins: [
+ /*
function(hook){
var renderScriptNode=function(str){
@@ -140,11 +144,14 @@
node.innerHTML=str
})
}
+ */
]
}
-
+
+
+
+