From aefb5f1fecece88da0fb51cb909dcbf84d5918bd Mon Sep 17 00:00:00 2001 From: Zhang Chen Date: Thu, 21 Jun 2018 12:06:19 +0800 Subject: [PATCH] Update personalization.md --- docs/personalization.md | 93 ++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 38 deletions(-) diff --git a/docs/personalization.md b/docs/personalization.md index 7d95980d..a50d8afe 100644 --- a/docs/personalization.md +++ b/docs/personalization.md @@ -678,15 +678,15 @@ if (core.getFlag('skill', 0)==1) { // 开启了技能1 1. 每个角色弄一张行走图。相关信息参见[自定义事件:setHeroIcon](event#setHeroIcon:更改角色行走图)。 2. [覆盖楼传事件](#覆盖楼传事件),这样可以通过点工具栏的楼层传送按钮来切换角色。当然你也完全可以自己写一个道具,或[自定义快捷键](#自定义快捷键)来进行绑定。 -3. 在脚本编辑的setInitData中初始化新角色的属性值。 - ```js +3. 将下述代码直接贴入脚本编辑 - 插件编写中。 + ``` js // 所有需要保存的内容;这些保存的内容不会多角色共用,在切换时会进行恢复。 // 你也可以自行新增或删除,比如不共用金币则可以加上"money"的初始化,不共用道具则可以加上"items"的初始化, // 多角色共用hp的话则删除hp,等等。总之,不共用的属性都在这里进行定义就好。 - var initData = { + var hero1 = { // 1号勇士(默认的是0号) "floorId": "MT0", // 该角色楼层ID - "icon": "hero2.png", // 角色的行走图名称 - "name": "2号角色", + "icon": "hero1.png", // 角色的行走图名称 + "name": "1号角色", "lv": 1, "hp": 1000, "atk": 10, @@ -695,41 +695,58 @@ if (core.getFlag('skill', 0)==1) { // 开启了技能1 "loc": {"x": 0, "y": 0, "direction": "up"}, // 不共用的数据都可以在这里加上定义 } - core.setFlag("hero1", initData); // 将属性值存到变量中 + + // 初始化该勇士 + this.initHero1 = function () { + core.status.hero.icon = "hero.png"; + core.setFlag("hero1", core.clone(hero1)); // 将属性值存到变量中 + } + + // 切换勇士 + this.changeHero = function () { + var saveList = Object.keys(hero1); + + // 保存当前内容 + var toSave = {}; + saveList.forEach(function(name) { + if (name=='floorId') toSave[name] = core.status.floorId; // 楼层单独设置 + else toSave[name] = core.clone(core.status.hero[name]); // 使用core.clone()来创建新对象 + }) + + var currHeroId = core.getFlag("heroId", 0); // 获得当前角色ID + var toHeroId = (currHeroId+1)%2; // 获得要切换到的角色ID,比如 0->1,1->0 + + core.setFlag("hero"+currHeroId, toSave); // 将当前角色信息进行保存 + + var data = core.getFlag("hero"+toHeroId); // 获得要切换的角色保存内容 + + // 设置角色的属性值 + saveList.forEach(function(name) { + if (name != 'floorId') + core.status.hero[name] = core.clone(data[name]); + }) + + // 插入事件:改变角色行走图并进行楼层切换 + core.insertAction([ + {"type": "setHeroIcon", "name": data.icon||"hero.png"}, // 改变行走图 + {"type": "changeFloor", "floorId": data.floorId, "loc": [data.loc.x, data.loc.y], + "direction": data.loc.direction, "time": 0} // 楼层切换事件 + ]) + core.setFlag("heroId", toHeroId); // 保存切换到的角色ID + } ``` -4. 道具(或快捷键)的脚本如下。 - ```js - // 这个saveList和上面的初始化定义中的的key,除了不要icon(行走图名称)其他应完全相同。 - var saveList = ["floorId", "name", "lv", "hp", "atk", "def", "mdef", "loc"]; - - // 保存当前内容 - var toSave = {}; - saveList.forEach(function(name) { - if (name=='floorId') toSave[name] = core.status.floorId; // 楼层单独设置 - else toSave[name] = core.clone(core.status.hero[name]); // 使用core.clone()来创建新对象 - }) - - var currHeroId = core.getFlag("heroId", 0); // 获得当前角色ID - var toHeroId = (currHeroId+1)%2; // 获得要切换到的角色ID,比如 0->1,1->0 - - core.setFlag("hero"+currHeroId, toSave); // 将当前角色信息进行保存 - - var data = core.getFlag("hero"+toHeroId); // 获得要切换的角色保存内容 - - // 设置角色的属性值 - saveList.forEach(function(name) { - if (core.isset(core.status.hero[name]) && core.isset(data[name])) - core.status.hero[name] = core.clone(data[name]); - }) - - // 插入事件:改变角色行走图并进行楼层切换 - core.insertAction([ - {"type": "setHeroIcon", "name": data.icon||"hero.png"}, // 改变行走图 - {"type": "changeFloor", "floorId": data.floorId, "loc": [data.loc.x, data.loc.y], - "direction": data.loc.direction, "time": 0} // 楼层切换事件 - ]) - core.setFlag("heroId", toHeroId); // 保存切换到的角色ID +3. 在脚本编辑 - setInitData中加上`core.plugin.initHero1()`来初始化新勇士。 + ``` js + function(hard) { + // ... 上略 + core.events.afterLoadData(); + + // 初始化新勇士 + core.plugin.initHero1(); + } ``` +4. 如果需要切换角色(包括事件、道具或者快捷键等),可以直接调用自定义JS脚本: `core.plugin.changeHero();` 。 + ## 根据难度分歧来自定义地图