diff --git a/docs/personalization.md b/docs/personalization.md index f7d4422b..4814f924 100644 --- a/docs/personalization.md +++ b/docs/personalization.md @@ -639,47 +639,64 @@ core.statusBar.skill.innerHTML = core.getFlag('skillName', '无'); // 使用flag ### 技能的触发 -我们可以按键触发技能。有关绑定按键请参见[自定义快捷键](#自定义快捷键)。 +#### 使用道具作为技能 -下面是一个很简单的例子,当勇士按下W后,如果魔力不小于5点则允许开启技能"二倍斩",再次按W则关闭技能。 +由于手机端按键十分不方便,虚拟键盘不好用,因此强烈推荐**给每个技能设置一个道具图标,在道具栏点击使用!** + +下面是个很简单的例子,要制作一个技能"二倍斩"。 + +我们可以设置一个道具,其cls是`constants`(永久道具),ID比如是`skill1`。 + +该道具的使用判定`canUseItemEffect`是`true`(表示任意时候都可使用),使用效果`useItemEffect`是: ``` js -case 87: // W - if (core.status.heroStop) { // 当前停止状态;这个if需要加,不能在行走过程中触发不然容易出错。 - if (core.getFlag('skill', 0)==0) { // 判断当前是否已经开了技能 - if (core.getStatus('mana')>=5) { // 这里要写当前能否开技能的条件判断,比如魔力值至少要多少 - core.setFlag('skill', 1); // 开技能1 - core.setFlag('skillName', '二倍斩'); // 设置技能名 - } - else { - core.drawTip("魔力不足,无法开技能"); - } - } - else { // 关闭技能 - core.setFlag('skill', 0); // 关闭技能状态 - core.setFlag('skillName', '无'); - } - core.updateStatusBar(); // 立刻更新状态栏和地图显伤 - core.status.route.push("key:"+keyCode); // 录像的支持!这句话必须要加,不然录像回放会出错! +if (core.getFlag('skill', 0)==0) { // 判断当前是否已经开了技能 + if (core.getStatus('mana')>=5) { // 这里要写当前能否开技能的条件判断,比如魔力值至少要多少 + core.setFlag('skill', 1); // 开技能1 + core.setFlag('skillName', '二倍斩'); // 设置技能名 } - break; + else { + core.drawTip("魔力不足,无法开技能"); + } +} +else { // 关闭技能 + core.setFlag('skill', 0); // 关闭技能状态 + core.setFlag('skillName', '无'); +} ``` 简单的说,用flag:skill判断当前开启的技能,flag:skillName表示该技能名。(可在状态栏显示) -在勇士处于停止的条件下,按下W键时,判断当前是否开启了技能,如果开启则关闭,没开则再判断是否允许开启(魔力值够不够等)。 +该(技能)道具任何时候都可被使用;使用时,判断当前是否开启了技能,如果开启则关闭,没开则再判断是否允许开启(魔力值够不够等)。 -`core.status.route.push("key:"+keyCode);` 这句话是对录像的支持,一定要加(这样录像播放时也会模拟该按键)。 +#### 快捷键触发技能 + +在PC端,我们还可以按键触发技能。 + +在技能的道具定义完毕后,再将该道具绑定到一个快捷键上。有关绑定按键请参见[自定义快捷键](#自定义快捷键)。 + +下面是一个很简单的例子,当勇士按下W后,触发我们上面定义的二倍斩技能。 + +``` js +case 87: // W + if (core.status.heroStop) { // 当前停止状态;这个if需要加,不能在行走过程中触发不然容易出错。 + if (core.hasItem('skill1')) { // 判定该技能道具是否存在 + core.useItem('skill1'); // 使用道具(该技能) + } + } + break; +``` + +在勇士处于停止的条件下,按下W键时,判断技能的道具是否存在,如果存在再使用它。 !> 1,2,3这三个键被默认绑定到了破炸飞;如果想用的话也是一样,只不过是把已有的实现进行替换。 -!> 手机端可以通过长按任何位置调出虚拟键盘,再进行按键,和键盘按键是等价的效果! - ### 技能的效果 最后一点就是技能的效果;其实到了这里就和RM差不多了。 技能的效果要分的话有地图类技能,战斗效果类技能,后续影响类技能什么的,这里只介绍最简单的战斗效果类技能。 + 其他的几类技能根据需求可能更为麻烦,有兴趣可自行进行研究。 战斗效果内技能要改两个地方:战斗伤害计算,战后扣除魔力值。 diff --git a/project/functions.js b/project/functions.js index 4405a44b..168941a4 100644 --- a/project/functions.js +++ b/project/functions.js @@ -123,9 +123,8 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = var equipAnimate = 'hand'; if (core.flags.equipment) { var equipId = (core.status.hero.equipment||[])[0]; - if (core.isset(equipId) && core.isset(core.material.items[equipId]) - && core.isset(core.material.items[equipId].equip.animate)) - equipAnimate = core.material.items[equipId].equip.animate; + if (core.isset(core.material.items[equipId]) && core.isset(core.material.items[equipId].equip.animate)) + equipAnimate = core.material.items[equipId].equip.animate; } core.playSound('attack.mp3'); core.drawAnimate(equipAnimate, x, y);