mana & skill

This commit is contained in:
oc 2018-10-30 02:58:21 +08:00
parent de972f87f4
commit 1ddde2137d
9 changed files with 104 additions and 31 deletions

View File

@ -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",

View File

@ -554,6 +554,8 @@ this.myfunc = function(x) {
通过这种将脚本和自定义事件混用的方式可以达到和RM中公共事件类似的效果即一个调用触发一系列事件。
<!--
## 自定义状态栏(新增显示项)
在V2.2以后,我们可以自定义状态栏背景图(全塔属性 - statusLeftBackground等等。
@ -594,56 +596,51 @@ core.statusBar.mana.innerHTML = core.getFlag('mana', 0) + '/' + core.getFlag('ma
core.statusBar.mana.style.fontStyle = 'normal'; // 这一行会取消斜体。如果是汉字(比如技能名)的话,斜体起来会非常难看,可以通过这一句取消。
```
-->
## 技能塔的支持
其实在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

View File

@ -355,6 +355,10 @@
<img id="img-hp">
<p class='statusLabel statusText' id='hp'></p>
</div>
<div class="status" id='manaCol'>
<img id="img-mana">
<p class='statusLabel statusText' id='mana'></p>
</div>
<div class="status">
<img id="img-atk">
<p class='statusLabel statusText' id='atk'></p>
@ -379,6 +383,10 @@
<img id="img-up">
<p class='statusLabel statusText' id='up'></p>
</div>
<div class="status" id="skillCol">
<img id="img-skill">
<p class='statusLabel statusText' id='skill' style='font-style: normal'></p>
</div>
<div class="status" id='keyCol'>
<span class='statusLabel' id='yellowKey' style="color:#FFCCAA"></span>
<span class='statusLabel' id='blueKey' style="color:#AAAADD"></span>

View File

@ -341,6 +341,10 @@
<img id="img-hp">
<p class='statusLabel statusText' id='hp'></p>
</div>
<div class="status" id='manaCol'>
<img id="img-mana">
<p class='statusLabel statusText' id='mana'></p>
</div>
<div class="status">
<img id="img-atk">
<p class='statusLabel statusText' id='atk'></p>
@ -365,6 +369,10 @@
<img id="img-up">
<p class='statusLabel statusText' id='up'></p>
</div>
<div class="status" id="skillCol">
<img id="img-skill">
<p class='statusLabel statusText' id='skill' style='font-style: normal'></p>
</div>
<div class="status" id='keyCol'>
<span class='statusLabel' id='yellowKey' style="color:#FFCCAA"></span>
<span class='statusLabel' id='blueKey' style="color:#AAAADD"></span>

View File

@ -62,6 +62,10 @@
<img id="img-hp">
<p class='statusLabel statusText' id='hp'></p>
</div>
<div class="status" id='manaCol'>
<img id="img-mana">
<p class='statusLabel statusText' id='mana'></p>
</div>
<div class="status">
<img id="img-atk">
<p class='statusLabel statusText' id='atk'></p>
@ -86,6 +90,10 @@
<img id="img-up">
<p class='statusLabel statusText' id='up'></p>
</div>
<div class="status" id="skillCol">
<img id="img-skill">
<p class='statusLabel statusText' id='skill' style='font-style: normal'></p>
</div>
<div class="status" id='keyCol'>
<span class='statusLabel' id='yellowKey' style="color:#FFCCAA"></span>
<span class='statusLabel' id='blueKey' style="color:#AAAADD"></span>

View File

@ -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: {

View File

@ -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"),

View File

@ -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,

View File

@ -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";