Merge branch 'v2.0' of https://github.com/ckcz123/mota-js into v2.0

This commit is contained in:
oc 2018-10-30 22:47:09 +08:00
commit a68f3ccf74
15 changed files with 312 additions and 260 deletions

View File

@ -63,18 +63,19 @@ return code;
*/;
shopsub
: '商店 id' IdString '标题' EvalString '图标' IdString BGNL? Newline '快捷商店栏中名称' EvalString BGNL? Newline '使用' ShopUse_List '消耗' EvalString BGNL? Newline '显示文字' EvalString BGNL? Newline shopChoices+ BEND
: '商店 id' IdString '标题' EvalString '图标' IdString BGNL? Newline '快捷商店栏中名称' EvalString '共用times' Bool BGNL? Newline '使用' ShopUse_List '消耗' EvalString BGNL? Newline '显示文字' EvalString BGNL? Newline shopChoices+ BEND
/* shopsub
tooltip : 全局商店,消耗填-1表示每个选项的消耗不同,正数表示消耗数值
helpUrl : https://ckcz123.github.io/mota-js/#/event?id=%e5%85%a8%e5%b1%80%e5%95%86%e5%ba%97
default : ["shop1","贪婪之神","blueShop","1F金币商店",null,"20+10*times*(times+1)","勇敢的武士啊, 给我${need}金币就可以:"]
default : ["shop1","贪婪之神","blueShop","1F金币商店",false,null,"20+10*times*(times+1)","勇敢的武士啊, 给我${need}金币就可以:"]
var code = {
'id': IdString_0,
'name': EvalString_0,
'icon': IdString_1,
'textInList': EvalString_1,
'commonTimes': Bool_0,
'use': ShopUse_List_0,
'need': EvalString_2,
'text': EvalString_3,
@ -1638,7 +1639,7 @@ ActionParser.prototype.parse = function (obj,type) {
choice.text,choice.need||'',text_effect,text_choices]);
}
return MotaActionBlocks['shopsub'].xmlText([
obj.id,obj.name,obj.icon,obj.textInList,obj.use,obj.need,parser.EvalString(obj.text),text_choices,next
obj.id,obj.name,obj.icon,obj.textInList,obj.commonTimes,obj.use,obj.need,parser.EvalString(obj.text),text_choices,next
]);
}
var next=null;

View File

@ -257,7 +257,7 @@ data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_type": "event",
"_event": "firstArrive",
"_range": "thiseval==null || thiseval instanceof Array",
"_data": "游戏开始前剧情。\n可以双击进入事件编辑器。\n如果无剧情直接留一个空数组即可。"
"_data": "游戏开始前剧情,可以执行任意自定义事件。\n双击进入事件编辑器。\n如果无剧情直接留一个空数组即可。"
},
"shops": {
"_leaf": true,

View File

@ -129,6 +129,18 @@ functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
}
}
},
"actions": {
"_leaf": false,
"_type": "object",
"_data": {
"onKeyUp": {
"_leaf": true,
"_type": "textarea",
"_lint": true,
"_data": "按键处理;可以在这里自定义快捷键,详见文档-个性化-自定义快捷键"
}
}
},
"control": {
"_leaf": false,
"_type": "object",

View File

@ -1587,6 +1587,7 @@ core.insertAction([
"icon": "blueShop", // 商店图标blueShop为蓝色商店pinkShop为粉色商店
"textInList": "1F金币商店", // 在快捷商店栏中显示的名称
"use": "money", // 商店所要使用的。只能是"money"或"experience"。
"commonTimes": true, // 是否使用全局次数
"need": "20+10*times*(times+1)", // 商店需要的金币/经验数值可以是一个表达式以times作为参数计算。
// 这里用到的times为该商店的已经的访问次数。首次访问该商店时times的值为0。
// 上面的例子是50层商店的计算公式。你也可以写任意其他的计算公式只要以times作为参数即可。
@ -1634,6 +1635,7 @@ core.insertAction([
- icon 为商店的图标在icons.js的npcs中定义。如woman可代表一个商人。
- textInList 为其在快捷商店栏中显示的名称,如"3楼金币商店"等
- use 为消耗的类型是金币money还是经验experience
- commonTimes 是否使用全局次数如果为true则可以多个快捷商店共享相同的次数
- need 是一个表达式,计算商店所需要用到的数值。
- 可以将times作为参数times为该商店已经访问过的次数第一次访问时times是0。
- 如果对于每个选项都需要不同的数值,这里设为"-1";可参见下面经验商店的例子。
@ -1873,8 +1875,6 @@ core.insertAction([
它将显示全塔属性中的startText内容可以修改成自己的提供战斗动画开启选择设置初始福利并正式开始游戏。
全塔属性的startText只能使用纯文本类型其他的事件均无效。
我们可以修改脚本编辑`setInitData`函数来对于不同难度分别设置初始属性。
其参数hard分为对应全塔属性中levelChooseButtons中的第二项分别对应不同的难度并会在游戏中传输在状态栏显示。

View File

@ -496,34 +496,28 @@ this.useEquipment = function (itemId) { // 使用装备
如果需要绑定某个快捷键为处理一段事件,也是可行的。
要修改按键,我们可以在`actions.js`的`keyUp`进行处理:
要修改按键,我们可以在脚本编辑的`onKeyUp`进行处理:
比如,我们设置一个快捷键进行绑定,比如`W`其keycode是87有关每个键的keycode搜一下就能得到
比如,我们设置一个快捷键进行绑定,比如`Y`其keycode是89有关每个键的keycode搜一下就能得到
然后在`actions.js`的`keyUp`函数的`switch`中进行处理。
然后在脚本编辑的`onKeyUp`函数的`switch`中进行处理。
``` js
case 87: // W
if (core.status.heroStop) {
// ... 在这里写你要执行脚本
// 请使用同步脚本,请勿执行任何异步代码,否则可能导致游戏过程或录像出现问题。
core.insertAction([...]) // 例如,插入一段自定义事件并执行。
case 89: // 使用该按键的keyCode比如Y键就是89
// 还可以再判定altKey是否被按下即 if (altKey) { ...
// core.status.route.push("key:"+keyCode); // 录像的支持,这句话加不加最好仔细进行测试
// ... 在这里写你要执行脚本
// **强烈建议所有新增的自定义快捷键均能给个对应的道具可点击,以方便手机端的行为**
if (core.hasItem('...')) {
core.useItem('...');
}
break;
```
强烈建议所有新增的自定义快捷键均给个对应的永久道具可点击,以方便手机端的行为。
在勇士处于停止的条件下按下W键时将执行你写的脚本代码。请只使用同步脚本而不要使用异步代码不然可能导致游戏出现问题。
`core.status.route.push("key:"+keyCode);` 这句话是对录像的支持。
**录像的支持可能比较诡异,在不同条件下都是不同的;因此加不加最好分开独立进行测试。**
!> H5不支持组合快捷键所以不存在`W+1`这种组合快捷键的说法!
!> 手机端可以通过长按任何位置调出虚拟键盘,再进行按键,和键盘按键是等价的效果!
可以使用altKey来判断Alt键是否被同时按下。
## 公共事件
@ -609,7 +603,7 @@ core.statusBar.mana.style.fontStyle = 'normal'; // 这一行会取消斜体。
- 技能的触发(按键与录像问题)
- 技能的效果
从V2.5开始,魔力和技能的定义被内置到了样板中,因此十分方便
从V2.5开始,内置了"二倍斩"技能,可以仿照其制作自己的技能
### 魔力的定义添加;技能的定义
@ -684,11 +678,10 @@ else { // 关闭技能
下面是一个很简单的例子当勇士按下W后触发我们上面定义的二倍斩技能。
``` js
case 87: // W
if (core.status.heroStop) { // 当前停止状态这个if需要加不能在行走过程中触发不然容易出错。
if (core.hasItem('skill1')) { // 判定该技能道具是否存在
core.useItem('skill1'); // 使用道具(该技能)
}
case 87: // W开启技能“二倍斩”
// 检测技能栏是否开启,是否拥有“二倍斩”这个技能道具
if (core.flags.enableSkill && core.hasItem('skill1')) {
core.useItem('skill1');
}
break;
```
@ -724,13 +717,21 @@ if (core.getFlag('skill', 0)==1) { // 开启了技能1
然后在脚本编辑的`afterBattle`中进行魔力值的扣除:
``` js
if (core.getFlag('skill', 0)==1) { // 开启了技能1
core.status.hero.mana -= 5; // 扣除5点魔力值
core.setFlag('skill', 0); // 自动关闭技能
// 战后的技能处理,比如扣除魔力值
if (core.flags.enableSkill) {
// 检测当前开启的技能类型
var skill = core.getFlag('skill', 0);
if (skill==1) { // 技能1二倍斩
core.status.hero.mana-=5; // 扣除5点魔力值
}
// 关闭技能
core.setFlag('skill', 0);
core.setFlag('skillName', '无');
}
```
!> 开启技能后建议将全塔属性的useLoop置为true即改用循环计算临界值这样临界计算才不会出问题
 
通过上述这几种方式我们就能成功的让H5支持技能啦

View File

@ -8,7 +8,7 @@ function actions() {
}
actions.prototype.init = function () {
this.actionsdata = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.actions;
}
////// 按下某个键时 //////
@ -291,150 +291,7 @@ actions.prototype.keyUp = function(keyCode, altKey) {
if(!core.status.played)
return;
// 0~9的AltKey
if (altKey && keyCode>=48 && keyCode<=57 && core.status.heroStop) {
core.items.quickLoadEquip(keyCode-48);
return;
}
switch (keyCode) {
case 27: // ESC
if (core.status.heroStop)
core.openSettings(true);
break;
case 71: // G
if (core.status.heroStop)
core.useFly(true);
break;
case 81: // Q
if (core.status.heroStop)
core.openEquipbox(true);
break;
case 88: // X
if (core.status.heroStop)
core.openBook(true);
break;
case 65: // A
if (core.status.heroStop)
core.doSL("autoSave", "load");
break;
case 66: // B
if (core.status.heroStop)
core.ui.drawStatistics();
break;
case 83: // S
if (core.status.heroStop)
core.save(true);
break;
case 68: // D
if (core.status.heroStop)
core.load(true);
break;
case 69: // E
if (core.status.heroStop)
core.ui.drawCursor();
break;
case 84: // T
if (core.status.heroStop)
core.openToolbox(true);
break;
case 90: // Z
if (core.status.heroStop)
core.turnHero();
break;
case 75: case 86: // K/V
if (core.status.heroStop)
core.openQuickShop(true);
break;
case 32: // SPACE
if (core.status.heroStop)
core.getNextItem();
break;
case 72: // H
if (core.status.heroStop)
core.ui.drawHelp();
break;
case 82: // R
if (core.status.heroStop) {
if (core.hasFlag('debug')) {
core.drawText("\t[系统提示]调试模式下无法回放录像");
}
else {
core.ui.drawReplay();
}
}
break;
case 33: case 34: // PAGEUP/PAGEDOWN
if (core.status.heroStop)
core.ui.drawMaps();
break;
case 77: // M
if (core.status.heroStop) {
core.ui.drawPaint();
}
break;
case 37: // UP
break;
case 38: // DOWN
break;
case 39: // RIGHT
break;
case 40: // DOWN
break;
case 49: // 快捷键1: 破
if (core.status.heroStop && core.hasItem('pickaxe')) {
if (core.canUseItem('pickaxe')) {
core.useItem('pickaxe');
}
else {
core.drawTip('当前不能使用破墙镐');
}
}
break;
case 50: // 快捷键2: 炸
if (core.status.heroStop) {
if (core.hasItem('bomb')) {
if (core.canUseItem('bomb')) {
core.useItem('bomb');
}
else {
core.drawTip('当前不能使用炸弹');
}
}
else if (core.hasItem('hammer')) {
if (core.canUseItem('hammer')) {
core.useItem('hammer');
}
else {
core.drawTip('当前不能使用圣锤');
}
}
}
break;
case 51: // 快捷键3: 飞
if (core.status.heroStop && core.hasItem('centerFly')) {
core.events.useItem('centerFly');
}
break;
case 52: // 快捷键4破冰/冰冻/地震/上下楼器/...
if (core.status.heroStop) {
var list = ["icePickaxe", "snow", "earthquake", "upFly", "downFly", "jumpShoes", "lifeWand", "poisonWine", "weakWine", "curseWine", "superWine"];
for (var i=0;i<list.length;i++) {
var itemId = list[i];
if (core.canUseItem(itemId)) {
core.useItem(itemId);
break;
}
}
}
break;
case 118: // F7开启debug模式
if (core.status.heroStop)
core.debug();
break;
}
this.actionsdata.onKeyUp(keyCode, altKey);
if (core.isset(core.status.automaticRoute)&&core.status.automaticRoute.autoHeroMove) {
core.stopAutomaticRoute();
@ -1199,6 +1056,8 @@ actions.prototype.clickShop = function(x,y) {
});
core.updateStatusBar();
shop.times++;
if (shop.commonTimes)
core.setFlag('commonTimes', shop.times);
core.events.openShop(core.status.event.data.id);
}
// 离开
@ -2357,15 +2216,8 @@ actions.prototype.clickReplay = function (x, y) {
case 0:
{
core.ui.closePanel();
var hard=core.status.hard, route=core.clone(core.status.route);
var seed = core.getFlag('seed');
core.resetStatus(core.firstData.hero, hard, core.firstData.floorId, null, core.initStatus.maps);
core.events.setInitData(hard);
core.setFlag('seed', seed);
core.setFlag('rand', seed);
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
core.startReplay(route);
}, true);
var hard=core.status.hard, seed = core.getFlag('seed');
core.startGame(hard, seed, core.clone(core.status.route));
break;
}
case 1:

View File

@ -318,32 +318,6 @@ control.prototype.resetStatus = function(hero, hard, floorId, route, maps, value
core.status.played = true;
}
////// 开始游戏 //////
control.prototype.startGame = function (hard, callback) {
console.log('开始游戏');
this.resetStatus(core.firstData.hero, hard, core.firstData.floorId, null, core.initStatus.maps);
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
if (core.isset(callback)) callback();
}, true);
setTimeout(function () {
// Upload
var formData = new FormData();
formData.append('type', 'people');
formData.append('name', core.firstData.name);
formData.append('version', core.firstData.version);
formData.append('platform', core.platform.isPC?"PC":core.platform.isAndroid?"Android":core.platform.isIOS?"iOS":"");
formData.append('hard', core.encodeBase64(hard));
formData.append('hardCode', core.getFlag('hard', 0));
formData.append('base64', 1);
core.utils.http("POST", "/games/upload.php", formData);
})
}
////// 重新开始游戏;此函数将回到标题页面 //////
control.prototype.restart = function() {
this.showStartAnimate();
@ -1041,7 +1015,7 @@ control.prototype.updateViewport = function() {
////// 绘制勇士 //////
control.prototype.drawHero = function (direction, x, y, status, offset) {
if (!core.isPlaying()) return;
if (!core.isPlaying() || core.status.isStarting) return;
var scan = {
'up': {'x': 0, 'y': -1},
@ -1679,14 +1653,7 @@ control.prototype.chooseReplayFile = function () {
return;
}
core.dom.startPanel.style.display = 'none';
core.resetStatus(core.firstData.hero, obj.hard, core.firstData.floorId, null, core.initStatus.maps);
core.setFlag('seed', obj.seed);
core.setFlag('rand', obj.seed);
core.events.setInitData(obj.hard);
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
core.startReplay(core.decodeRoute(obj.route));
}, true);
core.startGame(obj.hard, obj.seed, core.decode(obj.route));
}, function () {
})
@ -2263,15 +2230,7 @@ control.prototype.doSL = function (id, type) {
if (data.version != core.firstData.version) {
// core.drawTip("存档版本不匹配");
if (confirm("存档版本不匹配!\n你想回放此存档的录像吗\n可以随时停止录像播放以继续游戏。")) {
core.dom.startPanel.style.display = 'none';
var seed = data.hero.flags.seed;
core.resetStatus(core.firstData.hero, data.hard, core.firstData.floorId, null, core.initStatus.maps);
core.events.setInitData(data.hard);
core.setFlag('seed', seed);
core.setFlag('rand', seed);
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
core.startReplay(core.decodeRoute(data.route));
}, true);
core.startGame(data.hard, data.hero.flags.seed, core.decodeRoute(data.route));
}
return;
}

View File

@ -356,8 +356,8 @@ core.prototype.resetStatus = function(hero, hard, floorId, route, maps, values)
}
////// 开始游戏 //////
core.prototype.startGame = function (hard, callback) {
core.control.startGame(hard, callback);
core.prototype.startGame = function (hard, seed, route, callback) {
core.events.startGame(hard, seed, route, callback);
}
////// 重新开始游戏;此函数将回到标题页面 //////

View File

@ -76,38 +76,83 @@ events.prototype.initGame = function () {
}
////// 游戏开始事件 //////
events.prototype.startGame = function (hard) {
events.prototype.startGame = function (hard, seed, route, callback) {
if (core.status.isStarting) return;
core.status.isStarting = true;
core.hideStartAnimate(function() {
core.drawText(core.clone(core.firstData.startText), function() {
if (core.flags.showBattleAnimateConfirm) { // 是否提供“开启战斗动画”的选择项
var start = function () {
console.log('开始游戏');
core.resetStatus(core.firstData.hero, hard, core.firstData.floorId, null, core.initStatus.maps);
core.status.isStarting = true;
if (core.isset(seed)) {
core.setFlag('seed', seed);
core.setFlag('rand', seed);
}
else core.utils.__init_seed();
core.events.setInitData(hard);
core.clearMap('all');
core.clearStatusBar();
var post_start = function () {
core.status.isStarting = false;
core.changeFloor(core.status.floorId, null, core.status.hero.loc, null, function() {
if (core.isset(callback)) callback();
}, true);
setTimeout(function () {
// Upload
var formData = new FormData();
formData.append('type', 'people');
formData.append('name', core.firstData.name);
formData.append('version', core.firstData.version);
formData.append('platform', core.platform.isPC?"PC":core.platform.isAndroid?"Android":core.platform.isIOS?"iOS":"");
formData.append('hard', core.encodeBase64(hard));
formData.append('hardCode', core.getFlag('hard', 0));
formData.append('base64', 1);
core.utils.http("POST", "/games/upload.php", formData);
})
}
core.insertAction(core.clone(core.firstData.startText), null, null, function() {
if (!core.status.replay.replaying && core.flags.showBattleAnimateConfirm) { // 是否提供“开启战斗动画”的选择项
core.status.event.selection = core.flags.battleAnimate ? 0 : 1;
core.ui.drawConfirmBox("你想开启战斗动画吗?\n之后可以在菜单栏中开启或关闭。\n强烈建议新手开启此项", function () {
core.data.flags.battleAnimate = true;
core.flags.battleAnimate = true;
core.setLocalStorage('battleAnimate', true);
core.startGame(hard);
core.utils.__init_seed();
core.events.setInitData(hard);
post_start();
}, function () {
core.data.flags.battleAnimate = false;
core.flags.battleAnimate = false;
core.setLocalStorage('battleAnimate', false);
core.startGame(hard);
core.utils.__init_seed();
core.events.setInitData(hard);
post_start();
});
}
else {
core.startGame(hard);
core.utils.__init_seed();
core.events.setInitData(hard);
post_start();
}
});
if (core.isset(route)) {
core.startReplay(route);
}
}
if (core.isset(route)) {
core.dom.startPanel.style.display = 'none';
start();
}
else {
core.hideStartAnimate(function() {
start();
})
}
}
////// 不同难度分别设置初始属性 //////
@ -589,11 +634,8 @@ events.prototype.doAction = function() {
this.doAction();
break;
case "showImage": // 显示图片
if (core.isset(data.loc) && core.isset(core.material.images.images[data.name])) {
core.canvas.image.drawImage(core.material.images.images[data.name],
core.calValue(data.loc[0]), core.calValue(data.loc[1]));
}
else core.clearMap('image');
if (!core.isset(data.loc)) data.loc=[];
core.events.showImage(data.name, data.loc[0], data.loc[1]);
this.doAction();
break;
case "animateImage": // 淡入淡出图片
@ -1361,6 +1403,14 @@ events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback
}, 25);
}
////// 绘制图片 //////
events.prototype.showImage = function (name, x, y) {
if (core.isset(name) && core.isset(x) && core.isset(y) && core.isset(core.material.images.images[name])) {
core.canvas.image.drawImage(core.material.images.images[name], x, y);
}
else core.clearMap('image');
}
////// 图片淡入/淡出 //////
events.prototype.animateImage = function (type, image, loc, time, keep, callback) {
time = time||0;
@ -1532,6 +1582,8 @@ events.prototype.vibrate = function(time, callback) {
events.prototype.openShop = function(shopId, needVisited) {
var shop = core.status.shops[shopId];
shop.times = shop.times || 0;
if (shop.commonTimes)
shop.times = core.getFlag('commonTimes', 0);
shop.visited = shop.visited || false;
if (needVisited && !shop.visited) {
if (shop.times==0) core.drawTip("该商店尚未开启");

View File

@ -20,6 +20,7 @@ utils.prototype.replaceText = function (text) {
////// 计算表达式的值 //////
utils.prototype.calValue = function (value) {
if (!core.isset(value)) return value;
if (typeof value == 'number') {
return value;
}

View File

@ -78,8 +78,8 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"mana": 0,
"atk": 100,
"def": 100,
"mdef": 100,
"money": 100,
"mdef": 0,
"money": 0,
"experience": 0,
"equipment": [],
"items": {

View File

@ -202,6 +202,19 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
// 增加仇恨值
core.setFlag('hatred', core.getFlag('hatred',0)+core.values.hatred);
// 战后的技能处理,比如扣除魔力值
if (core.flags.enableSkill) {
// 检测当前开启的技能类型
var skill = core.getFlag('skill', 0);
if (skill==1) { // 技能1二倍斩
core.status.hero.mana-=5; // 扣除5点魔力值
}
// 关闭技能
core.setFlag('skill', 0);
core.setFlag('skillName', '无');
}
core.updateStatusBar();
@ -477,6 +490,11 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var enemyInfo = core.enemys.getEnemyInfo(enemy, hero_hp, hero_atk, hero_def, hero_mdef, x, y, floorId);
var mon_hp = enemyInfo.hp, mon_atk = enemyInfo.atk, mon_def = enemyInfo.def, mon_special = enemyInfo.special;
// 技能的处理
if (core.getFlag('skill', 0)==1) { // 开启了技能1二倍斩
hero_atk *= 2; // 计算时攻击力翻倍
}
// 如果是无敌属性,且勇士未持有十字架
if (this.hasSpecial(mon_special, 20) && !core.hasItem("cross"))
return null; // 不可战斗
@ -563,6 +581,153 @@ functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
*/
// 别忘了在事件中调用“更新怪物数据”事件!
}
},
"actions": {
"onKeyUp": function (keyCode, altKey) {
// 键盘按键处理,可以在这里自定义快捷键列表
// keyCode当前按键的keyCode每个键的keyCode自行百度
// altKeyAlt键是否被按下为true代表同时按下了Alt键
// 可以在这里任意增加或编辑每个按键的行为
// 如果处于正在行走状态,则不处理
if (!core.status.heroStop)
return;
// Alt+0~9快捷换上套装
if (altKey && keyCode>=48 && keyCode<=57) {
core.items.quickLoadEquip(keyCode-48);
return;
}
// 根据keyCode值来执行对应操作
switch (keyCode) {
case 27: // ESC打开菜单栏
core.openSettings(true);
break;
case 88: // X使用怪物手册
core.openBook(true);
break;
case 71: // G使用楼传器
core.useFly(true);
break;
case 65: // A读取自动存档回退
core.doSL("autoSave", "load");
break;
case 83: // S存档
core.save(true);
break;
case 68: // D独挡
core.load(true);
break;
case 69: // E打开光标
core.ui.drawCursor();
break;
case 84: // T打开道具栏
core.openToolbox(true);
break;
case 81: // Q打开装备栏
core.openEquipbox(true);
break;
case 90: // Z转向
core.turnHero();
break;
case 75: case 86: // K/V打开快捷商店列表
core.openQuickShop(true);
break;
case 32: // SPACE轻按
core.getNextItem();
break;
case 82: // R回放录像
if (core.hasFlag('debug')) {
core.drawText("\t[系统提示]调试模式下无法回放录像");
}
else {
core.ui.drawReplay();
}
break;
case 33: case 34: // PgUp/PgDn浏览地图
core.ui.drawMaps();
break;
case 77: // M绘图模式
core.ui.drawPaint();
break;
case 66: // B打开数据统计
core.ui.drawStatistics();
break;
case 72: // H打开帮助页面
core.ui.drawHelp();
break;
case 49: // 快捷键1: 破
if (core.hasItem('pickaxe')) {
if (core.canUseItem('pickaxe')) {
core.useItem('pickaxe');
}
else {
core.drawTip('当前不能使用破墙镐');
}
}
break;
case 50: // 快捷键2: 炸
if (core.hasItem('bomb')) {
if (core.canUseItem('bomb')) {
core.useItem('bomb');
}
else {
core.drawTip('当前不能使用炸弹');
}
}
else if (core.hasItem('hammer')) {
if (core.canUseItem('hammer')) {
core.useItem('hammer');
}
else {
core.drawTip('当前不能使用圣锤');
}
}
break;
case 51: // 快捷键3: 飞
if (core.hasItem('centerFly')) {
core.events.useItem('centerFly');
}
break;
case 52: // 快捷键4破冰/冰冻/地震/上下楼器/... 其他道具依次判断
{
var list = ["icePickaxe", "snow", "earthquake", "upFly", "downFly", "jumpShoes", "lifeWand", "poisonWine", "weakWine", "curseWine", "superWine"];
for (var i=0;i<list.length;i++) {
var itemId = list[i];
if (core.canUseItem(itemId)) {
core.useItem(itemId);
break;
}
}
}
break;
case 118: // F7开启debug模式
core.debug();
break;
case 87: // W开启技能“二倍斩”
// 检测是否拥有“二倍斩”这个技能道具
if (core.hasItem('skill1')) {
core.useItem('skill1');
}
break;
// 在这里可以任意新增或编辑已有的快捷键内容
/*
case 0: // 使用该按键的keyCode
// 还可以再判定altKey是否被按下即 if (altKey) { ...
// ... 在这里写你要执行脚本
// **强烈建议所有新增的自定义快捷键均能给个对应的道具可点击,以方便手机端的行为**
if (core.hasItem('...')) {
core.useItem('...');
}
break;
*/
}
}
},
"control": {

View File

@ -236,7 +236,8 @@ icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
'moneyPocket': 46,
'shoes': 47,
'hammer': 48,
'jumpShoes': 49
'jumpShoes': 49,
'skill1': 30,
},
'autotile': { // 所有的Autotile列表后面的index简单取0即可
'autotile': 0,

View File

@ -295,6 +295,11 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"cls": "tools",
"name": "跳跃靴",
"text": "能跳跃到前方两格处"
},
"skill1": {
"cls": "constants",
"name": "技能:二倍斩",
"text": "可以打开或关闭主动技能二倍斩"
}
},
"itemEffect": {
@ -373,7 +378,8 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"redJewel": "core.status.hero.atk += core.values.redJewel",
"blueJewel": "core.status.hero.def += core.values.blueJewel",
"greenJewel": "core.status.hero.mdef += core.values.greenJewel",
"yellowJewel": "core.insertAction([\n\t{\"type\": \"choices\", \"choices\": [\n\t\t{\"text\": \"攻击+1\", \"action\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:atk\", \"value\": \"status:atk+1\"}\n\t\t]},\n\t\t{\"text\": \"防御+2\", \"action\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:def\", \"value\": \"status:def+2\"}\n\t\t]},\n\t\t{\"text\": \"生命+200\", \"action\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:hp\", \"value\": \"status:hp+200\"}\n\t\t]},\n\t]}\n]);"
"yellowJewel": "core.insertAction([\n\t{\"type\": \"choices\", \"choices\": [\n\t\t{\"text\": \"攻击+1\", \"action\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:atk\", \"value\": \"status:atk+1\"}\n\t\t]},\n\t\t{\"text\": \"防御+2\", \"action\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:def\", \"value\": \"status:def+2\"}\n\t\t]},\n\t\t{\"text\": \"生命+200\", \"action\": [\n\t\t\t{\"type\": \"setValue\", \"name\": \"status:hp\", \"value\": \"status:hp+200\"}\n\t\t]},\n\t]}\n]);",
"skill1": "// 二倍斩的flag:skill为1\nif (core.getFlag('skill', 0)==0) { // 判断当前是否已经开了技能\n\tif (core.getStatus('mana')>=5) { // 这里要写当前能否开技能的条件判断,比如魔力值至少要多少\n\t\tcore.setFlag('skill', 1); // 开技能1\n\t\tcore.setFlag('skillName', '二倍斩'); // 设置技能名\n\t}\n\telse {\n\t\tcore.drawTip(\"魔力不足,无法开启技能\");\n\t}\n}\nelse { // 关闭技能\n\tcore.setFlag('skill', 0); // 关闭技能状态\n\tcore.setFlag('skillName', '无');\n}"
},
"canUseItemEffect": {
"book": "true",
@ -401,6 +407,7 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"redJewel": "true",
"blueJewel": "true",
"greenJewel": "true",
"yellowJewel": "true"
"yellowJewel": "true",
"skill1": "true"
}
}

View File

@ -79,6 +79,7 @@ maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
'65':{'cls': 'items', 'id': 'hammer'}, // 圣锤
'68':{'cls': 'items', 'id': 'lifeWand'}, // 生命魔杖
'69':{'cls': 'items', 'id': 'jumpShoes'}, // 生命魔杖
'70':{'cls': 'items', 'id': 'skill1'}, // 技能:二倍斩
////////////////////////// 门、楼梯、传送点部分 //////////////////////////