diff --git a/_server/data.comment.js b/_server/data.comment.js index 7afe0f36..43080322 100644 --- a/_server/data.comment.js +++ b/_server/data.comment.js @@ -153,6 +153,11 @@ data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_type": "textarea", "_data": "初始生命值" }, + "mana": { + "_leaf": true, + "_type": "textarea", + "_data": "初始魔力值,只在enableMana开启时才有效" + }, "atk": { "_leaf": true, "_type": "textarea", @@ -389,6 +394,12 @@ data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_bool": "bool", "_data": "是否是否启用生命上限" }, + "enableMana": { + "_leaf": true, + "_type": "checkbox", + "_bool": "bool", + "_data": "是否开启魔力值" + }, "enableMDef": { "_leaf": true, "_type": "checkbox", @@ -431,6 +442,12 @@ data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = "_bool": "bool", "_data": "是否涉及毒衰咒;如果此项为false则不会在状态栏中显示毒衰咒的debuff" }, + "enableSkill": { + "_leaf": true, + "_type": "checkbox", + "_bool": "bool", + "_data": "是否启用技能栏" + }, "flyNearStair": { "_leaf": true, "_type": "checkbox", diff --git a/docs/personalization.md b/docs/personalization.md index 30260cd3..c72a346f 100644 --- a/docs/personalization.md +++ b/docs/personalization.md @@ -554,6 +554,8 @@ this.myfunc = function(x) { 通过这种,将脚本和自定义事件混用的方式,可以达到和RM中公共事件类似的效果,即一个调用触发一系列事件。 + + ## 技能塔的支持 其实,在HTML5上制作技能塔是完全可行的。 要支持技能塔,可能需要如下几个方面: -- 魔力(和上限)的定义添加 +- 魔力(和上限)的添加;技能的定义 - 状态栏的显示 - 技能的触发(按键与录像问题) - 技能的效果 -下面依次进行描述。 +从V2.5开始,魔力和技能的定义被内置到了样板中,因此十分方便。 -### 魔力的定义添加 +### 魔力的定义添加;技能的定义 -当我们定义了魔力的ID,比如`mana`后,要使用它,一般有两种方式:属性获取`status:mana`或者flag标记`flag:mana`。 +从V2.5开始,提供了status:mana选项,可以直接代表当前魔力值。 -如果要属性获取,则需要打开`data.js`文件,并在`hero`中添加定义。 +如果要启用,需要开启全塔属性的enableMana选项。 -通过这种方式定义的,可以通过`core.setStatus('mana', 0)`以及`core.getStatus('mana')`来设置或获取。 +如果需要魔力上限,则可以使用flag:manaMax来表示当前的魔力最大值。 -``` js -'hero': { - // ... 上略 - 'mana': 0, // 增添mana定义,可以放在experience之后。同理可定义manaMax表示当前最大魔力值。 -} -``` +同时,我们可以使用flag:skill表示当前开启的技能编号,flag:skillName表示当前开启的技能名称。 -如果要flag标记,则无需额外在任何地方进行定义。只需要在设置或取用的时候使用 `core.setFlag('mana', 0)` 或 `core.getFlag('mana', 0)` 即可。 - -下面我都使用属性获取的方式来进行说明。 +如果flag:skill不为0,则代表当前处于某个技能开启状态,且状态栏显示flag:skillName值。伤害计算函数中只需要对flag:skill进行处理即可。 ### 状态栏的显示 -首先我们需要额外新增一个状态栏;请参见[自定义状态栏(新增显示项)](#自定义状态栏(新增显示项))。 +从V2.5开始,魔力值和技能名的状态栏项目已经被添加,可以直接使用。 -我们可以在魔力那一行显示当前值和最大值: +在脚本编辑-updateStatusBar中,可以对状态栏显示内容进行修改。 ``` js -core.setStatus('mana', Math.min(core.getStatus('mana'), core.getStatus('manaMax'))); // 如果魔力存在上限,则不能超过其上限值 -core.statusBar.mana.innerHTML = core.getStatus('mana') + '/' + core.getStatus('manaMax', 0); // 显示比如 6/30 这样 -``` - -如果我们还需要显示当前使用的技能名,也是可以的;定义一个ID为skill,然后按照上面的做法新增一行。 - -请注意,如果是中文字符,需要取消斜体(不然会非常难看的)! - -``` js -core.statusBar.skill.style.fontStyle = 'normal'; // 取消斜体显示 -core.statusBar.skill.innerHTML = core.getFlag('skillName', '无'); // 使用flag:skillName表示当前激活的技能名。 + // 设置魔力值 + if (core.flags.enableMana) { + // 也可以使用flag:manaMax来表示最大魔力值 + // core.status.hero.mana = Math.max(core.status.hero.mana, core.getFlag('manaMax', 10)); + // core.statusBar.mana.innerHTML = core.status.hero.mana + "/" + core.getFlag('manaMax', 10); + } + // 设置技能栏 + if (core.flags.enableSkill) { + // 可以用flag:kill表示当前开启的技能类型,flag:skillName显示技能名;详见文档-个性化-技能塔的支持 + core.statusBar.skill.innerHTML = core.getFlag('skillName', '无'); + } ``` ### 技能的触发 @@ -716,7 +713,7 @@ case 87: // W 举个例子,我设置一个勇士的技能:二倍斩,开启技能消耗5点魔力,下一场战斗攻击力翻倍。 -那么,直接在`getDamageInfo`中进行判断: +那么,直接在脚本编辑的`getDamageInfo`中进行判断: ``` js if (core.getFlag('skill', 0)==1) { // 开启了技能1 @@ -724,7 +721,7 @@ if (core.getFlag('skill', 0)==1) { // 开启了技能1 } ``` -然后在脚本编辑的战后事件中进行魔力值的扣除: +然后在脚本编辑的`afterBattle`中进行魔力值的扣除: ``` js if (core.getFlag('skill', 0)==1) { // 开启了技能1 diff --git a/editor-mobile.html b/editor-mobile.html index 161e7897..cd51f4ed 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -355,6 +355,10 @@

+
+ +

+

@@ -379,6 +383,10 @@

+
+ +

+
diff --git a/editor.html b/editor.html index cce7d36c..0ae3917b 100644 --- a/editor.html +++ b/editor.html @@ -341,6 +341,10 @@

+
+ +

+

@@ -365,6 +369,10 @@

+
+ +

+
diff --git a/index.html b/index.html index 62182c53..2a05eb95 100644 --- a/index.html +++ b/index.html @@ -62,6 +62,10 @@

+
+ +

+

@@ -86,6 +90,10 @@

+
+ +

+
diff --git a/libs/control.js b/libs/control.js index 0a6ce796..d69826b6 100644 --- a/libs/control.js +++ b/libs/control.js @@ -2807,6 +2807,8 @@ control.prototype.resize = function(clientWidth, clientHeight) { if (!core.flags.enableKeys) count--; if (!core.flags.enablePZF) count--; if (!core.flags.enableName) count--; + if (!core.flags.enableMana) count--; + if (!core.flags.enableSkill) count--; var statusLineHeight = BASE_LINEHEIGHT * 9 / count; var statusLineFontSize = DEFAULT_FONT_SIZE; @@ -3086,6 +3088,12 @@ control.prototype.resize = function(clientWidth, clientHeight) { display: core.flags.enableHPMax ? 'block': 'none' } }, + { + id: 'manaCol', + rules: { + display: core.flags.enableMana ? 'block': 'none' + } + }, { id: 'mdefCol', rules: { @@ -3110,6 +3118,12 @@ control.prototype.resize = function(clientWidth, clientHeight) { display: core.flags.enableLevelUp ? 'block': 'none' } }, + { + id: 'skillCol', + rules: { + display: core.flags.enableSkill ? 'block': 'none' + } + }, { id: 'keyCol', rules: { diff --git a/main.js b/main.js index 1abb2b91..cee1293a 100644 --- a/main.js +++ b/main.js @@ -55,6 +55,7 @@ function main() { 'nameCol': document.getElementById('nameCol'), 'lvCol': document.getElementById('lvCol'), 'hpmaxCol': document.getElementById('hpmaxCol'), + 'manaCol': document.getElementById('manaCol'), 'mdefCol': document.getElementById('mdefCol'), 'moneyCol': document.getElementById('moneyCol'), 'expCol': document.getElementById('expCol'), @@ -62,6 +63,7 @@ function main() { 'keyCol': document.getElementById('keyCol'), 'pzfCol': document.getElementById('pzfCol'), 'debuffCol': document.getElementById('debuffCol'), + 'skillCol': document.getElementById('skillCol'), 'hard': document.getElementById('hard'), }; this.mode = 'play'; @@ -82,12 +84,14 @@ function main() { 'lv': document.getElementById('img-lv'), 'hpmax': document.getElementById('img-hpmax'), 'hp': document.getElementById("img-hp"), + 'mana': document.getElementById("img-mana"), 'atk': document.getElementById("img-atk"), 'def': document.getElementById("img-def"), 'mdef': document.getElementById("img-mdef"), 'money': document.getElementById("img-money"), 'experience': document.getElementById("img-experience"), 'up': document.getElementById("img-up"), + 'skill': document.getElementById('img-skill'), 'book': document.getElementById("img-book"), 'fly': document.getElementById("img-fly"), 'toolbox': document.getElementById("img-toolbox"), @@ -133,12 +137,14 @@ function main() { 'lv': document.getElementById('lv'), 'hpmax': document.getElementById('hpmax'), 'hp': document.getElementById('hp'), + 'mana': document.getElementById('mana'), 'atk': document.getElementById('atk'), 'def': document.getElementById("def"), 'mdef': document.getElementById('mdef'), 'money': document.getElementById("money"), 'experience': document.getElementById("experience"), 'up': document.getElementById('up'), + 'skill': document.getElementById('skill'), 'yellowKey': document.getElementById("yellowKey"), 'blueKey': document.getElementById("blueKey"), 'redKey': document.getElementById("redKey"), diff --git a/project/data.js b/project/data.js index 74c27764..ef3da6f1 100644 --- a/project/data.js +++ b/project/data.js @@ -75,6 +75,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "lv": 1, "hpmax": 9999, "hp": 1000, + "mana": 0, "atk": 100, "def": 100, "mdef": 100, @@ -197,6 +198,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "enableName": false, "enableLv": false, "enableHPMax": false, + "enableMana": false, "enableMDef": true, "enableMoney": true, "enableExperience": false, @@ -204,6 +206,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "enableKeys": true, "enablePZF": false, "enableDebuff": false, + "enableSkill": false, "flyNearStair": true, "pickaxeFourDirections": false, "bombFourDirections": false, diff --git a/project/functions.js b/project/functions.js index fff7e6bb..4cc5e5fa 100644 --- a/project/functions.js +++ b/project/functions.js @@ -617,7 +617,7 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = else core.statusBar.lv.style.fontStyle = 'normal'; // 设置生命上限、生命值、攻防魔防金币和经验值 - var statusList = ['hpmax', 'hp', 'atk', 'def', 'mdef', 'money', 'experience']; + var statusList = ['hpmax', 'hp', 'mana', 'atk', 'def', 'mdef', 'money', 'experience']; statusList.forEach(function (item) { // 向下取整 if (core.isset(core.status.hero[item])) @@ -632,6 +632,18 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.statusBar.def.innerHTML = core.formatBigNumber(Math.floor(core.getFlag('equip_def_buff',1)*core.getStatus('def'))); core.statusBar.mdef.innerHTML = core.formatBigNumber(Math.floor(core.getFlag('equip_mdef_buff',1)*core.getStatus('mdef'))); } + + // 设置魔力值 + if (core.flags.enableMana) { + // 也可以使用flag:manaMax来表示最大魔力值;详见文档-个性化-技能塔的支持 + // core.status.hero.mana = Math.max(core.status.hero.mana, core.getFlag('manaMax', 10)); + // core.statusBar.mana.innerHTML = core.status.hero.mana + "/" + core.getFlag('manaMax', 10); + } + // 设置技能栏 + if (core.flags.enableSkill) { + // 可以用flag:kill表示当前开启的技能类型,flag:skillName显示技能名;详见文档-个性化-技能塔的支持 + core.statusBar.skill.innerHTML = core.getFlag('skillName', '无'); + } // 可以在这里添加自己额外的状态栏信息,比如想攻击显示 +0.5 可以这么写: // if (core.hasFlag('halfAtk')) core.statusBar.atk.innerHTML += "+0.5";