├── tutorialsrc ├── LEARN_Teleport │ ├── Game.rpgproject │ ├── img │ │ └── mndtitle │ │ │ ├── CmdOptions.png │ │ │ ├── CmdSelect.png │ │ │ ├── CmdHomepage.png │ │ │ ├── CmdStartGame.png │ │ │ ├── CmdContinueGame.png │ │ │ └── MandaravaTestLogo.png │ ├── js │ │ ├── main.js │ │ ├── plugins.js │ │ ├── libs │ │ │ ├── iphone-inline-video.browser.js │ │ │ ├── lz-string.js │ │ │ ├── fpsmeter.js │ │ │ └── pixi-picture.js │ │ └── plugins │ │ │ ├── LEARN_TitleMenu.js │ │ │ └── LEARN_Teleport.js │ ├── README.MD │ ├── data │ │ ├── CommonEvents.json │ │ ├── MapInfos.json │ │ ├── Weapons.json │ │ ├── Armors.json │ │ ├── Actors.json │ │ ├── Troops.json │ │ ├── Enemies.json │ │ ├── Items.json │ │ ├── States.json │ │ ├── Skills.json │ │ ├── Map006.json │ │ ├── System.json │ │ ├── Map008.json │ │ ├── Map007.json │ │ ├── Map009.json │ │ ├── Map005.json │ │ └── Classes.json │ └── index.html ├── LEARN_TankWarGame │ ├── Preview.gif │ ├── mndtankwar │ │ ├── Logo.png │ │ ├── Explode.png │ │ ├── YouLose.png │ │ ├── YouWin.png │ │ ├── BulletRed.png │ │ ├── TankEnemy.png │ │ ├── TitleBack.png │ │ ├── Background.png │ │ └── TankPlayer.png │ └── se │ │ ├── TankWarFire.m4a │ │ ├── TankWarFire.ogg │ │ ├── TankWarLost.m4a │ │ ├── TankWarLost.ogg │ │ ├── TankWarStart.m4a │ │ └── TankWarStart.ogg ├── LEARN_TitleMenu │ ├── mndtitle │ │ ├── GameLogo.png │ │ ├── CmdHomepage.png │ │ ├── CmdOptions.png │ │ ├── CmdSelect.png │ │ ├── TitleBack1.png │ │ ├── TitleBack2.png │ │ ├── TitleBack3.png │ │ ├── CmdStartGame.png │ │ └── CmdContinueGame.png │ └── LEARN_TitleMenu.js └── LEARN_Teleport.js ├── README.md ├── .gitattributes ├── modified └── README.MD ├── LICENSE ├── indie ├── MND_ChangeResolution.js ├── MND_SkipLoadError.js ├── MND_ChangeScreenSize.js ├── MND_ProtectProfile2.js ├── MND_GetSetSelfSwitch.js ├── MND_Rename.js ├── MND_ProtectProfile.js └── MND_MenuBackground.js └── others └── mv_profile_modifier.html /tutorialsrc/LEARN_Teleport/Game.rpgproject: -------------------------------------------------------------------------------- 1 | RPGMV 1.5.0 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/README.md -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/Preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/Preview.gif -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/mndtankwar/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/mndtankwar/Logo.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/se/TankWarFire.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/se/TankWarFire.m4a -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/se/TankWarFire.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/se/TankWarFire.ogg -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/se/TankWarLost.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/se/TankWarLost.m4a -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/se/TankWarLost.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/se/TankWarLost.ogg -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/se/TankWarStart.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/se/TankWarStart.m4a -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/se/TankWarStart.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/se/TankWarStart.ogg -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/mndtitle/GameLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TitleMenu/mndtitle/GameLogo.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/mndtankwar/Explode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/mndtankwar/Explode.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/mndtankwar/YouLose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/mndtankwar/YouLose.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/mndtankwar/YouWin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/mndtankwar/YouWin.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/mndtitle/CmdHomepage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TitleMenu/mndtitle/CmdHomepage.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/mndtitle/CmdOptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TitleMenu/mndtitle/CmdOptions.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/mndtitle/CmdSelect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TitleMenu/mndtitle/CmdSelect.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/mndtitle/TitleBack1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TitleMenu/mndtitle/TitleBack1.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/mndtitle/TitleBack2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TitleMenu/mndtitle/TitleBack2.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/mndtitle/TitleBack3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TitleMenu/mndtitle/TitleBack3.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/mndtankwar/BulletRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/mndtankwar/BulletRed.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/mndtankwar/TankEnemy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/mndtankwar/TankEnemy.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/mndtankwar/TitleBack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/mndtankwar/TitleBack.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/img/mndtitle/CmdOptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_Teleport/img/mndtitle/CmdOptions.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/img/mndtitle/CmdSelect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_Teleport/img/mndtitle/CmdSelect.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/mndtitle/CmdStartGame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TitleMenu/mndtitle/CmdStartGame.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/mndtankwar/Background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/mndtankwar/Background.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TankWarGame/mndtankwar/TankPlayer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TankWarGame/mndtankwar/TankPlayer.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/img/mndtitle/CmdHomepage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_Teleport/img/mndtitle/CmdHomepage.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/img/mndtitle/CmdStartGame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_Teleport/img/mndtitle/CmdStartGame.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/mndtitle/CmdContinueGame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_TitleMenu/mndtitle/CmdContinueGame.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/img/mndtitle/CmdContinueGame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_Teleport/img/mndtitle/CmdContinueGame.png -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/img/mndtitle/MandaravaTestLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XMandarava/Plugins4RMMV/HEAD/tutorialsrc/LEARN_Teleport/img/mndtitle/MandaravaTestLogo.png -------------------------------------------------------------------------------- /modified/README.MD: -------------------------------------------------------------------------------- 1 | **一些修改自其他作者的插件,插件版权归原版权人所有,仅供学习、参考。** 2 | 3 | ## YEP_MessageCore.js 4 | 5 | 本插件基于YEP MessageCore 1.19修改而来,使之支持中文自动换行,原版本只支持英语等以空格分隔单词的语言的自动换行,不适用于中文、日文等不使用单词分隔符的语言。使用时在插件参数中将`Word Wrapping`设置为`true`。 -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/js/main.js: -------------------------------------------------------------------------------- 1 | //============================================================================= 2 | // main.js 3 | //============================================================================= 4 | 5 | PluginManager.setup($plugins); 6 | 7 | window.onload = function() { 8 | SceneManager.run(Scene_Boot); 9 | }; 10 | -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/README.MD: -------------------------------------------------------------------------------- 1 | + 这是传送插件`Teleport.js` 的演示项目源码,建议配合教程使用。 2 | + 传送插件的制作教程地址:http://www.jianshu.com/p/42f3e4865941 3 | 4 | ## 安装方法 5 | 6 | 1. 启动 RPG Maker MV 1.5 (或以上版本,本项目使用RMMV1.5创建),新建一个游戏项目,名称任意。 7 | 2. 退出 RPG Maker MV。 8 | 3. 将本文件夹内的所有内容复制到新建的游戏项目内替换掉同名文件夹和文件。 9 | 4. 使用 RPG Maker MV 重新打开本项目即可。 10 | 11 | by Mandarava(鳗驼螺) -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/js/plugins.js: -------------------------------------------------------------------------------- 1 | // Generated by RPG Maker. 2 | // Do not edit this file directly. 3 | var $plugins = 4 | [ 5 | {"name":"LEARN_TitleMenu","status":true,"description":"","parameters":{}}, 6 | {"name":"LEARN_Teleport","status":true,"description":"用于制作传送道具和传送技能。(v1.0)","parameters":{"Teleport Start AnimationId":"117","Teleport End AnimationId":"120"}} 7 | ]; 8 | -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/CommonEvents.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"list":[{"code":0,"indent":0,"parameters":[]}],"name":"","switchId":1,"trigger":0}, 4 | {"id":2,"list":[{"code":0,"indent":0,"parameters":[]}],"name":"","switchId":1,"trigger":0}, 5 | {"id":3,"list":[{"code":0,"indent":0,"parameters":[]}],"name":"","switchId":1,"trigger":0}, 6 | {"id":4,"list":[{"code":0,"indent":0,"parameters":[]}],"name":"","switchId":1,"trigger":0} 7 | ] -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/MapInfos.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | null, 4 | null, 5 | null, 6 | null, 7 | {"id":5,"expanded":true,"name":"世界之源","order":1,"parentId":0,"scrollX":817,"scrollY":466.5}, 8 | {"id":6,"expanded":false,"name":"东之海","order":2,"parentId":5,"scrollX":819,"scrollY":466.5}, 9 | {"id":7,"expanded":false,"name":"西之森","order":3,"parentId":5,"scrollX":819,"scrollY":466.5}, 10 | {"id":8,"expanded":false,"name":"北之墓","order":4,"parentId":5,"scrollX":832,"scrollY":640}, 11 | {"id":9,"expanded":false,"name":"南之雪","order":5,"parentId":5,"scrollX":819,"scrollY":466.5} 12 | ] -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Weapons.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"animationId":6,"description":"","etypeId":1,"traits":[{"code":31,"dataId":1,"value":0},{"code":22,"dataId":0,"value":0}],"iconIndex":97,"name":"剑","note":"","params":[0,0,10,0,0,0,0,0],"price":500,"wtypeId":2}, 4 | {"id":2,"animationId":6,"description":"","etypeId":1,"traits":[{"code":31,"dataId":1,"value":0},{"code":22,"dataId":0,"value":0}],"iconIndex":99,"name":"斧","note":"","params":[0,0,10,0,0,0,0,0],"price":500,"wtypeId":4}, 5 | {"id":3,"animationId":1,"description":"","etypeId":1,"traits":[{"code":31,"dataId":1,"value":0},{"code":22,"dataId":0,"value":0}],"iconIndex":101,"name":"杖","note":"","params":[0,0,10,0,0,0,0,0],"price":500,"wtypeId":6}, 6 | {"id":4,"animationId":11,"description":"","etypeId":1,"traits":[{"code":31,"dataId":1,"value":0},{"code":22,"dataId":0,"value":0}],"iconIndex":102,"name":"弓","note":"","params":[0,0,10,0,0,0,0,0],"price":500,"wtypeId":7} 7 | ] -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Armors.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"atypeId":5,"description":"","etypeId":2,"traits":[{"code":22,"dataId":1,"value":0}],"iconIndex":128,"name":"盾牌","note":"","params":[0,0,0,10,0,0,0,0],"price":300}, 4 | {"id":2,"atypeId":1,"description":"","etypeId":3,"traits":[{"code":22,"dataId":1,"value":0}],"iconIndex":130,"name":"帽子","note":"","params":[0,0,0,10,0,0,0,0],"price":300}, 5 | {"id":3,"atypeId":1,"description":"","etypeId":4,"traits":[{"code":22,"dataId":1,"value":0}],"iconIndex":135,"name":"衣服","note":"","params":[0,0,0,10,0,0,0,0],"price":300}, 6 | {"id":4,"atypeId":1,"description":"","etypeId":5,"traits":[{"code":22,"dataId":1,"value":0}],"iconIndex":145,"name":"戒指","note":"","params":[0,0,0,0,10,0,0,0],"price":300}, 7 | {"id":5,"atypeId":1,"description":"刻有特殊咒语的石书,携带后可让魔物无法发现和攻击。","etypeId":5,"traits":[{"code":22,"dataId":1,"value":0}],"iconIndex":75,"name":"隐石","note":"","params":[0,0,0,0,0,0,0,0],"price":0} 8 | ] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 XMandarava 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Actors.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"battlerName":"Actor1_1","characterIndex":0,"characterName":"Actor1","classId":1,"equips":[1,1,2,3,0],"faceIndex":0,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"霍尔德","nickname":"","note":"","profile":""}, 4 | {"id":2,"battlerName":"Actor1_8","characterIndex":7,"characterName":"Actor1","classId":2,"equips":[2,1,2,3,0],"faceIndex":7,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"泰雷兹","nickname":"","note":"","profile":""}, 5 | {"id":3,"battlerName":"Actor3_8","characterIndex":7,"characterName":"Actor3","classId":3,"equips":[3,0,2,3,4],"faceIndex":7,"faceName":"Actor3","traits":[],"initialLevel":1,"maxLevel":99,"name":"玛莎","nickname":"","note":"","profile":""}, 6 | {"id":4,"battlerName":"Actor2_7","characterIndex":6,"characterName":"Actor2","classId":4,"equips":[4,0,2,3,4],"faceIndex":6,"faceName":"Actor2","traits":[],"initialLevel":1,"maxLevel":99,"name":"卢修斯","nickname":"","note":"","profile":""}, 7 | {"id":5,"battlerName":"Actor1_1","characterIndex":0,"characterName":"Actor1","classId":1,"equips":[1,1,2,3,0],"faceIndex":0,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"Jack","nickname":"","note":"","profile":""}, 8 | {"id":6,"battlerName":"Actor3_8","characterIndex":7,"characterName":"Actor3","classId":3,"equips":[3,0,2,3,4],"faceIndex":7,"faceName":"Actor3","traits":[],"initialLevel":1,"maxLevel":99,"name":"Rose","nickname":"","note":"","profile":""} 9 | ] -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Troops.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"members":[{"enemyId":1,"x":336,"y":436,"hidden":false},{"enemyId":1,"x":480,"y":436,"hidden":false}],"name":"蝙蝠*2","pages":[{"conditions":{"actorHp":50,"actorId":1,"actorValid":false,"enemyHp":50,"enemyIndex":0,"enemyValid":false,"switchId":1,"switchValid":false,"turnA":0,"turnB":0,"turnEnding":false,"turnValid":false},"list":[{"code":0,"indent":0,"parameters":[]}],"span":0}]}, 4 | {"id":2,"members":[{"enemyId":2,"x":337,"y":436,"hidden":false},{"enemyId":2,"x":480,"y":436,"hidden":false}],"name":"史莱姆*2","pages":[{"conditions":{"actorHp":50,"actorId":1,"actorValid":false,"enemyHp":50,"enemyIndex":0,"enemyValid":false,"switchId":1,"switchValid":false,"turnA":0,"turnB":0,"turnEnding":false,"turnValid":false},"list":[{"code":0,"indent":0,"parameters":[]}],"span":0}]}, 5 | {"id":3,"members":[{"enemyId":3,"x":408,"y":436,"hidden":false}],"name":"兽人","pages":[{"conditions":{"actorHp":50,"actorId":1,"actorValid":false,"enemyHp":50,"enemyIndex":0,"enemyValid":false,"switchId":1,"switchValid":false,"turnA":0,"turnB":0,"turnEnding":false,"turnValid":false},"list":[{"code":0,"indent":0,"parameters":[]}],"span":0}]}, 6 | {"id":4,"members":[{"enemyId":4,"x":408,"y":436,"hidden":false}],"name":"牛头怪","pages":[{"conditions":{"actorHp":50,"actorId":1,"actorValid":false,"enemyHp":50,"enemyIndex":0,"enemyValid":false,"switchId":1,"switchValid":false,"turnA":0,"turnB":0,"turnEnding":false,"turnValid":false},"list":[{"code":0,"indent":0,"parameters":[]}],"span":0}]} 7 | ] -------------------------------------------------------------------------------- /indie/MND_ChangeResolution.js: -------------------------------------------------------------------------------- 1 | //============================================ 2 | // MND_ChangeResolution.js 3 | //============================================ 4 | /*: 5 | * @plugindesc Change screen resolution.(v1.0) 6 | * @author Mandarava 7 | * 8 | * @param Screen Width 9 | * @type Number 10 | * @desc Screen width 11 | * @default 816 12 | * 13 | * @param Screen Height 14 | * @type Number 15 | * @desc Screen height 16 | * @default 624 17 | * 18 | * @help 19 | * Set the Screen Width and Screen Height as you wish. 20 | */ 21 | 22 | /*:zh 23 | * @plugindesc 修改游戏屏幕分辨率。(v1.0) 24 | * @author Mandarava(鳗驼螺) 25 | * 26 | * @param Screen Width 27 | * @type Number 28 | * @desc 屏幕宽度 29 | * @default 816 30 | * 31 | * @param Screen Height 32 | * @type Number 33 | * @desc 屏幕高度 34 | * @default 624 35 | * 36 | * @help 37 | * 配置 Screen Width 和 Screen Height 即可。 38 | */ 39 | 40 | (function($){ 41 | var params=PluginManager.parameters("MND_ChangeResolution"); 42 | var screenWidth=Number(params["Screen Width"]); 43 | var screenHeight=Number(params["Screen Height"]); 44 | 45 | SceneManager._screenWidth = screenWidth; 46 | SceneManager._screenHeight = screenHeight; 47 | SceneManager._boxWidth = screenWidth; 48 | SceneManager._boxHeight = screenHeight; 49 | 50 | var newWidth = screenWidth - window.innerWidth; 51 | var newHeight = screenHeight - window.innerHeight; 52 | window.moveBy(- newWidth / 2, - newHeight / 2); 53 | window.resizeBy(newWidth, newHeight); 54 | })(); -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Mandarava Test - www.popotu.com 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Enemies.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"actions":[{"conditionParam1":0,"conditionParam2":0,"conditionType":0,"rating":5,"skillId":1}],"battlerHue":0,"battlerName":"Bat","dropItems":[{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0}],"exp":0,"traits":[{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":31,"dataId":1,"value":0}],"gold":0,"name":"蝙蝠","note":"","params":[200,0,30,30,30,30,30,30]}, 4 | {"id":2,"actions":[{"conditionParam1":0,"conditionParam2":0,"conditionType":0,"rating":5,"skillId":1}],"battlerHue":0,"battlerName":"Slime","dropItems":[{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0}],"exp":0,"traits":[{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":31,"dataId":1,"value":0}],"gold":0,"name":"史莱姆","note":"","params":[250,0,30,30,30,30,30,30]}, 5 | {"id":3,"actions":[{"conditionParam1":0,"conditionParam2":0,"conditionType":0,"rating":5,"skillId":1}],"battlerHue":0,"battlerName":"Orc","dropItems":[{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0}],"exp":0,"traits":[{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":31,"dataId":1,"value":0}],"gold":0,"name":"兽人","note":"","params":[300,1,31,32,33,34,35,36]}, 6 | {"id":4,"actions":[{"conditionParam1":0,"conditionParam2":0,"conditionType":0,"rating":5,"skillId":1}],"battlerHue":0,"battlerName":"Minotaur","dropItems":[{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0},{"dataId":1,"denominator":1,"kind":0}],"exp":0,"traits":[{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":31,"dataId":1,"value":0}],"gold":0,"name":"牛头怪","note":"","params":[500,0,800,30,30,30,30,30]} 7 | ] -------------------------------------------------------------------------------- /indie/MND_SkipLoadError.js: -------------------------------------------------------------------------------- 1 | //============================================ 2 | // MND_SkipLoadError.js 3 | //============================================ 4 | 5 | /*: 6 | * @plugindesc Alert the missing file, and skip the file missing error. (v1.0.2) 7 | * @author Mandarava 8 | * 9 | * @help 10 | * Just setup and enable it. Recommend for debug purpose only, not for release. 11 | * For RPG Maker MV 1.4.1 only. For 1.5 or higher, use MND_SkipFileMissingError.js instead. 12 | */ 13 | 14 | /*:zh 15 | * @plugindesc 以弹窗显示与插件、图片、声音文件缺失有关的错误停息,并尝试忽略错误继续游戏。(v1.0.2) 16 | * @author Mandarava(鳗驼螺) 17 | * 18 | * @help 19 | * 本插件不需要配置;建议只在开发测试时使用,不建议在发布游戏时使用。 20 | * 本插件只针对 RPG Maker MV 1.4.1,如果针对1.5或更高版本请使用 MND_SkipFileMissingError.js。 21 | * 22 | */ 23 | 24 | PluginManager.checkErrors = function() { 25 | var url = this._errorUrls.shift(); 26 | if (url) { 27 | alert('Failed to load: ' + url); 28 | } 29 | }; 30 | 31 | ImageManager.loadSvActor = function(filename, hue) { 32 | var path=require("path"); 33 | var folder = path.join(path.dirname(process.mainModule.filename), 'img/sv_actors/'); 34 | var file = folder + filename + '.png'; 35 | if(require("fs").existsSync(file)){ 36 | return this.loadBitmap('img/sv_actors/', filename, hue, false); 37 | }else{ 38 | alert("Failed to load: "+file); 39 | return this.loadEmptyBitmap(); 40 | } 41 | }; 42 | 43 | ImageManager.isReady = function() { 44 | for (var key in this.cache._inner) { 45 | var bitmap = this.cache._inner[key].item; 46 | if (bitmap.isError()) { 47 | alert('Failed to load: ' + bitmap.url); 48 | bitmap=ImageManager.loadEmptyBitmap(); 49 | this.cache.setItem(key, bitmap); 50 | } 51 | if (!bitmap.isReady()) { 52 | return false; 53 | } 54 | } 55 | return true; 56 | }; 57 | 58 | AudioManager.checkWebAudioError = function(webAudio) { 59 | if (webAudio && webAudio.isError()) { 60 | alert('Failed to load: ' + webAudio.url); 61 | webAudio.initialize(""); 62 | } 63 | }; -------------------------------------------------------------------------------- /indie/MND_ChangeScreenSize.js: -------------------------------------------------------------------------------- 1 | //============================================ 2 | // MND_ChangeScreenSize.js 3 | //============================================ 4 | 5 | /*: 6 | * @plugindesc 随时随地更改游戏屏幕尺寸(不会造成可视范围扩大或缩小)。 7 | * 8 | * @author: Mandarava(鳗驼螺) 9 | * 10 | * @param Full Screen on startup 11 | * @type boolean 12 | * @on 开启全屏 13 | * @off 关闭全屏 14 | * @desc 在游戏启动时是否自动进入全屏 15 | * 16 | * @param Screen width 17 | * @type number 18 | * @desc 游戏启动时游戏屏幕的宽度 19 | * 默认值:816 20 | * @default 816 21 | * 22 | * @param Screen height 23 | * @type number 24 | * @desc 游戏启动时游戏屏幕的高度 25 | * 默认值:624 26 | * @default 624 27 | * 28 | * @help 29 | * 本插件用于改变窗口大小,但不会缩放游戏的可视化区域。如果需要能同时改变可视区 30 | * 域的可以使用 MND_ChangeResolution.js。这个插件的唯一用处(我能想到的)就 31 | * 是在写教程时需要抓图,但默认的游戏窗口尺寸太大,想要缩小点,如果手动缩放,无 32 | * 法保证每次缩放大小都一样,如果用这个插件就能保证每次截图的窗口都一样大小。 33 | * 插件命令: 34 | * ChangeScreenSize 1024 768 #修改游戏屏幕尺寸为1024x768 35 | * RestoreScreenSize #恢复为默认游戏屏幕尺寸(816x624) 36 | * Fullscreen true #开启全屏 37 | * Fullscreen false #退出全屏 38 | */ 39 | 40 | var params = PluginManager.parameters("MND_ChangeScreenSize"); 41 | var isFullScreen = String(params["Full Screen on startup"] || false); 42 | var screenWidth = Number(params["Screen width"]) || 816; 43 | var screenHeight = Number(params["Screen height"]) || 624; 44 | 45 | if(isFullScreen != "false" && isFullScreen) Graphics._switchFullScreen(); 46 | else setScreenSize(screenWidth, screenHeight); 47 | 48 | var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; 49 | Game_Interpreter.prototype.pluginCommand = function(command, args){ 50 | _Game_Interpreter_pluginCommand.call(this, command, args); 51 | 52 | switch(command){ 53 | case "ChangeScreenSize"://修改分辨率,插件命令格式:ChangeScreenSize [width] [height] 54 | var _screenWidth = Number(args[0]) || 816; 55 | var _screenHeight = Number(args[1]) || 624; 56 | setScreenSize(_screenWidth, _screenHeight); 57 | break; 58 | case "RestoreScreenSize"://恢复为默认分辨率,插件命令格式:RestoreScreenSize 59 | setScreenSize(816, 624); 60 | break; 61 | case "Fullscreen"://进入或退出全屏,插件命令格式:Fullscreen true/false 62 | if(args[0] != "false" && args[0]) Graphics._requestFullScreen(); 63 | else Graphics._cancelFullScreen(); 64 | break; 65 | default: break; 66 | } 67 | } 68 | 69 | function setScreenSize(screenWidth, screenHeight){ 70 | var deltaWidth = screenWidth - window.innerWidth; 71 | var deltaHeight = screenHeight - window.innerHeight; 72 | window.moveBy(- deltaWidth / 2, - deltaHeight / 2); 73 | window.resizeBy(deltaWidth, deltaHeight); 74 | } 75 | -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Items.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"animationId":41,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":11,"dataId":0,"value1":0,"value2":500}],"hitType":0,"iconIndex":176,"itypeId":1,"name":"药水","note":"","occasion":0,"price":50,"repeats":1,"scope":7,"speed":0,"successRate":100,"tpGain":0}, 4 | {"id":2,"animationId":41,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":12,"dataId":0,"value1":0,"value2":200}],"hitType":0,"iconIndex":176,"itypeId":1,"name":"魔法药水","note":"","occasion":0,"price":100,"repeats":1,"scope":7,"speed":0,"successRate":100,"tpGain":0}, 5 | {"id":3,"animationId":45,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":22,"dataId":4,"value1":1,"value2":0},{"code":22,"dataId":5,"value1":1,"value2":0},{"code":22,"dataId":6,"value1":1,"value2":0},{"code":22,"dataId":7,"value1":1,"value2":0},{"code":22,"dataId":8,"value1":1,"value2":0},{"code":22,"dataId":9,"value1":1,"value2":0},{"code":22,"dataId":10,"value1":1,"value2":0}],"hitType":0,"iconIndex":176,"itypeId":1,"name":"驱魔药草","note":"","occasion":0,"price":200,"repeats":1,"scope":7,"speed":0,"successRate":100,"tpGain":0}, 6 | {"id":4,"animationId":49,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"b.mhp / 2","type":3,"variance":20},"description":"","effects":[{"code":22,"dataId":1,"value1":1,"value2":0}],"hitType":0,"iconIndex":176,"itypeId":1,"name":"兴奋剂","note":"","occasion":0,"price":300,"repeats":1,"scope":9,"speed":0,"successRate":100,"tpGain":0}, 7 | {"id":5,"animationId":0,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":72,"itypeId":1,"name":"回城卷轴","note":"","occasion":2,"price":500,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0}, 8 | {"id":6,"animationId":0,"consumable":false,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":72,"itypeId":1,"name":"回城卷轴·永久","note":"","occasion":2,"price":5000,"repeats":1,"scope":0,"speed":0,"successRate":100,"tpGain":0}, 9 | {"id":7,"animationId":0,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":0,"itypeId":1,"name":"","note":"","occasion":0,"price":0,"repeats":1,"scope":7,"speed":0,"successRate":100,"tpGain":0}, 10 | {"id":8,"animationId":0,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":0,"itypeId":1,"name":"","note":"","occasion":0,"price":0,"repeats":1,"scope":7,"speed":0,"successRate":100,"tpGain":0}, 11 | {"id":9,"animationId":0,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":0,"itypeId":1,"name":"","note":"","occasion":0,"price":0,"repeats":1,"scope":7,"speed":0,"successRate":100,"tpGain":0}, 12 | {"id":10,"animationId":0,"consumable":true,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":0,"itypeId":1,"name":"","note":"","occasion":0,"price":0,"repeats":1,"scope":7,"speed":0,"successRate":100,"tpGain":0} 13 | ] -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/js/libs/iphone-inline-video.browser.js: -------------------------------------------------------------------------------- 1 | /*! npm.im/iphone-inline-video */ 2 | var makeVideoPlayableInline=function(){"use strict";/*! npm.im/intervalometer */ 3 | function e(e,n,r,i){function t(r){d=n(t,i),e(r-(a||r)),a=r}var d,a;return{start:function(){d||t(0)},stop:function(){r(d),d=null,a=0}}}function n(n){return e(n,requestAnimationFrame,cancelAnimationFrame)}function r(e,n,r,i){function t(n){Boolean(e[r])===Boolean(i)&&n.stopImmediatePropagation(),delete e[r]}return e.addEventListener(n,t,!1),t}function i(e,n,r,i){function t(){return r[n]}function d(e){r[n]=e}i&&d(e[n]),Object.defineProperty(e,n,{get:t,set:d})}function t(e,n,r){r.addEventListener(n,function(){return e.dispatchEvent(new Event(n))})}function d(e,n){Promise.resolve().then(function(){e.dispatchEvent(new Event(n))})}function a(e){var n=new Audio;return t(e,"play",n),t(e,"playing",n),t(e,"pause",n),n.crossOrigin=e.crossOrigin,n.src=e.src||e.currentSrc||"data:",n}function o(e,n,r){(m||0)+200=e.video.duration}function s(e){var n=this;n.video.readyState>=n.video.HAVE_FUTURE_DATA?(n.hasAudio||(n.driver.currentTime=n.video.currentTime+e*n.video.playbackRate/1e3,n.video.loop&&u(n)&&(n.driver.currentTime=0)),o(n.video,n.driver.currentTime)):n.video.networkState!==n.video.NETWORK_IDLE||n.video.buffered.length||n.video.load(),n.video.ended&&(delete n.video[g],n.video.pause(!0))}function c(){var e=this,n=e[b];return e.webkitDisplayingFullscreen?void e[E]():("data:"!==n.driver.src&&n.driver.src!==e.src&&(o(e,0,!0),n.driver.src=e.src),void(e.paused&&(n.paused=!1,e.buffered.length||e.load(),n.driver.play(),n.updater.start(),n.hasAudio||(d(e,"play"),n.video.readyState>=n.video.HAVE_ENOUGH_DATA&&d(e,"playing")))))}function v(e){var n=this,r=n[b];r.driver.pause(),r.updater.stop(),n.webkitDisplayingFullscreen&&n[T](),r.paused&&!e||(r.paused=!0,r.hasAudio||d(n,"pause"),n.ended&&(n[g]=!0,d(n,"ended")))}function p(e,r){var i=e[b]={};i.paused=!0,i.hasAudio=r,i.video=e,i.updater=n(s.bind(i)),r?i.driver=a(e):(e.addEventListener("canplay",function(){e.paused||d(e,"playing")}),i.driver={src:e.src||e.currentSrc||"data:",muted:!0,paused:!0,pause:function(){i.driver.paused=!0},play:function(){i.driver.paused=!1,u(i)&&o(e,0)},get ended(){return u(i)}}),e.addEventListener("emptied",function(){var n=!i.driver.src||"data:"===i.driver.src;i.driver.src&&i.driver.src!==e.src&&(o(e,0,!0),i.driver.src=e.src,n?i.driver.play():i.updater.stop())},!1),e.addEventListener("webkitbeginfullscreen",function(){e.paused?r&&!i.driver.buffered.length&&i.driver.load():(e.pause(),e[E]())}),r&&(e.addEventListener("webkitendfullscreen",function(){i.driver.currentTime=e.currentTime}),e.addEventListener("seeking",function(){A.indexOf(100*e.currentTime|0)<0&&(i.driver.currentTime=e.currentTime)}))}function l(e){var n=e[b];e[E]=e.play,e[T]=e.pause,e.play=c,e.pause=v,i(e,"paused",n.driver),i(e,"muted",n.driver,!0),i(e,"playbackRate",n.driver,!0),i(e,"ended",n.driver),i(e,"loop",n.driver,!0),r(e,"seeking"),r(e,"seeked"),r(e,"timeupdate",g,!1),r(e,"ended",g,!1)}function f(e,n,r){void 0===n&&(n=!0),void 0===r&&(r=!0),r&&!h||e[b]||(p(e,n),l(e),e.classList.add("IIV"),!n&&e.autoplay&&e.play(),/iPhone|iPod|iPad/.test(navigator.platform)||console.warn("iphone-inline-video is not guaranteed to work in emulated environments"))}var m,y="undefined"==typeof Symbol?function(e){return"@"+(e||"@")+Math.random()}:Symbol,h="object-fit"in document.head.style&&/iPhone|iPod/i.test(navigator.userAgent)&&!matchMedia("(-webkit-video-playable-inline)").matches,b=y(),g=y(),E=y("nativeplay"),T=y("nativepause"),A=[],k=0;return f.isWhitelisted=h,f}(); -------------------------------------------------------------------------------- /indie/MND_ProtectProfile2.js: -------------------------------------------------------------------------------- 1 | //============================== 2 | // MND_ProtectProfile2.js 3 | // Copyright (c) 2017 Mandarava 4 | // Homepage: www.popotu.com 5 | //============================== 6 | 7 | /*: 8 | * @plugindesc 用于加密存档的插件,可指定加密密码。(v1.0) 9 | * @author Mandarava(鳗驼螺) 10 | * @version 1.0 11 | * 12 | * @param Password 13 | * @text 存档密码 14 | * @desc 任意数字,通常取0~26之间的数字。 15 | * @type Number 16 | * @default 66 17 | * 18 | * @help 19 | * 使用时请修改存档密码,不要使用默认值哦! 20 | * 本插件采用凯撒加密算法,强度较低,好处是不会增加存档内容长度。可以采取的提高 21 | * 算法强度的方法,包括:对几偶数上的字符采用不同的偏移量,在特定位置添加混淆字 22 | * 符或字符串等。要使用加密强度较高的版本请使用 MND_ProtectProfile.js 插件。 23 | * 24 | * by Mandarava(鳗驼螺) 25 | */ 26 | 27 | (function($){ 28 | 29 | var params=PluginManager.parameters("MND_ProtectProfile2"); 30 | var password=Number(params["Password"]) || 66; 31 | 32 | DataManager.saveGameWithoutRescue = function(savefileId) { 33 | var json = JsonEx.stringify(this.makeSaveContents()); 34 | if (json.length >= 200000) { 35 | console.warn('Save data too big!'); 36 | } 37 | json=encrypt(json, password); //对json字符串进行加密 38 | StorageManager.save(savefileId, json); 39 | this._lastAccessedId = savefileId; 40 | var globalInfo = this.loadGlobalInfo() || []; 41 | globalInfo[savefileId] = this.makeSavefileInfo(); 42 | this.saveGlobalInfo(globalInfo); 43 | return true; 44 | }; 45 | 46 | DataManager.loadGameWithoutRescue = function(savefileId) { 47 | var globalInfo = this.loadGlobalInfo(); 48 | if (this.isThisGameFile(savefileId)) { 49 | var json = StorageManager.load(savefileId); 50 | json=decrypt(json, password); //对加密过的json字符串进行解密 51 | this.createGameObjects(); 52 | this.extractSaveContents(JsonEx.parse(json)); 53 | this._lastAccessedId = savefileId; 54 | return true; 55 | } else { 56 | return false; 57 | } 58 | }; 59 | 60 | //===字符串加密解密算法========= 61 | //凯撒加密算法改自:https://github.com/bukinoshita/caesar-encrypt 62 | function numToChar(num){ 63 | return String.fromCharCode(97 + num); 64 | } 65 | function charToNum(char){ 66 | return char.charCodeAt(0) - 97; 67 | } 68 | function caesar(char, shift){ 69 | return numToChar(charToNum(char) + (shift % 26)); 70 | } 71 | function caesarDec(char, shift){ 72 | return numToChar(charToNum(char) - (shift % 26)); 73 | } 74 | function encryptByCaesar(value, shift){ 75 | var letters = value.split(''); 76 | return letters.map(function (letter) { return caesar(letter, shift); }).join(""); 77 | } 78 | function decryptByCaesar(value, shift){ 79 | var letters = value.split(''); 80 | return letters.map(function (letter) { return caesarDec(letter, shift); }).join(""); 81 | } 82 | 83 | /** 84 | * 加密字符串 85 | * @param text 要加密的字符串 86 | * @param shift 解密密码(任意数字,通常取0~26之间的数字) 87 | * @returns {*} 88 | */ 89 | function encrypt(text, shift) { 90 | var result=LZString.compressToBase64(text); 91 | result=encryptByCaesar(result, shift); 92 | return result; 93 | } 94 | 95 | /** 96 | * 解密字符串 97 | * @param text 要解密的字符串 98 | * @param shift 解密密码(任意数字,通常取0~26之间的数字) 99 | */ 100 | function decrypt(text, shift) { 101 | var result=decryptByCaesar(text, shift); 102 | result=LZString.decompressFromBase64(result); 103 | return result; 104 | } 105 | //=========================== 106 | 107 | })(); -------------------------------------------------------------------------------- /indie/MND_GetSetSelfSwitch.js: -------------------------------------------------------------------------------- 1 | //============================================ 2 | // MND_GetSetSelfSwitch.js 3 | //============================================ 4 | /*: 5 | * @plugindesc Get / set the self switch of the event.(v1.0) 6 | * @author Mandarava 7 | * 8 | * @help 9 | * 10 | * JavaScript code: 11 | * 12 | * Set the self switch for the event: 13 | * SetSelfSwitch(eventId, switchId, value, mapId) 14 | * - eventId: event id. 15 | * - switchId: self switch id, e.g. "A", "B", "C", "D". 16 | * - value: value of the self switch, e.g. true, false. 17 | * - mapId: the map id where the event is, if null, means in current map. 18 | * 19 | * Set all self switches for all events in current map: 20 | * SetAllSelfSwitches(switchId, value); 21 | * - switchId: self switch id, e.g. "A", "B", "C", "D". 22 | * - value: value of the self switch, e.g. true, false. 23 | * 24 | * Get the self switch of the event: 25 | * GetSelfSwitch(eventId, switchId, mapId) 26 | * - eventId: event id. 27 | * - switchId: self switch id, e.g. "A", "B", "C", "D". 28 | * - mapId: the map id where the event is, if null, means in current map. 29 | * 30 | * Javascript example: 31 | * 32 | * SetSelfSwitch(1, "A", true); 33 | * SetSelfSwitch(1, "A", true, 2); 34 | * 35 | * SetAllSelfSwitches("A", true); 36 | * 37 | * GetSelfSwitch(1, "A") 38 | * GetSelfSwitch(1, "A", 2) 39 | * 40 | */ 41 | 42 | /*:zh 43 | * @plugindesc 获取和设置指定Map中指定Event的指定自有开关的开关状态。(v1.0) 44 | * @author Mandarava(鳗驼螺) 45 | * 46 | * @help 47 | * 48 | * 在脚本中调用以下方法: 49 | * 50 | * 设置事件自有开关状态: 51 | * SetSelfSwitch(eventId, switchId, value, mapId) 52 | * - eventId: 事件id。 53 | * - switchId: 自有开关的id,可选值:"A", "B", "C", "D" 54 | * - value: 开关状态,可选值:true, false 55 | * - mapId: 事件所在的地图id,如果不提供或为null,则为当前地图。 56 | * 57 | * 设置当前地图中所有事件的自有开关状态: 58 | * SetAllSelfSwitches(switchId, value); 59 | * - switchId: 自有开关的id,可选值:"A", "B", "C", "D" 60 | * - value: 开关状态,可选值:true, false 61 | * 62 | * 获取事件自有开关状态: 63 | * GetSelfSwitch(eventId, switchId, mapId) 64 | * - eventId: 事件id。 65 | * - switchId: 自有开关的id,可选值:"A", "B", "C", "D"。 66 | * - mapId: 事件所在的地图id,如果不提供或为null,则为当前地图。 67 | * 68 | * 示例: 69 | * SetSelfSwitch(1, "A", true); //设置当前地图上ID为1的事件的自有开关A的开关状态为true 70 | * SetSelfSwitch(1, "A", true, 2); //设置ID为2的地图上ID为1的事件的自有开关A的开关状态为true 71 | * 72 | * SetAllSelfSwitches("A", true); //设置当前地图上所有事件的自有开关A的开关状态为true 73 | * 74 | * GetSelfSwitch(1, "A") //获取当前地图上ID为1的事件的自有开关A的开关状态 75 | * GetSelfSwitch(1, "A", 2) //获取ID为2的地图上ID为1的事件的自有开关A的开关状态 76 | * 77 | */ 78 | 79 | (function($){ 80 | 81 | GetSelfSwitch=function(eventId, switchId, mapId){ 82 | if (!switchId.match(/^[A-D]$/)) return; 83 | eventId = Number(eventId) 84 | mapId = mapId || $gameMap.mapId(); 85 | if (eventId > 0) { 86 | var key = [mapId, eventId, switchId]; 87 | return $gameSelfSwitches.value(key); 88 | } 89 | return false; 90 | } 91 | 92 | SetSelfSwitch=function(eventId, switchId, value, mapId){ 93 | if (!switchId.match(/^[A-D]$/)) return; 94 | mapId = mapId || $gameMap.mapId(); 95 | _setSelfSwitch(eventId, switchId, value, mapId); 96 | } 97 | 98 | SetAllSelfSwitches=function(switchId, value){ 99 | if (!switchId.match(/^[A-D]$/)) return; 100 | var mapId=$gameMap.mapId(); 101 | for (var i = 1; i < $dataMap.events.length; i++) { 102 | _setSelfSwitch(i, switchId, value, mapId); 103 | } 104 | } 105 | 106 | function _setSelfSwitch(eventId, switchId, value, mapId){ 107 | eventId = Number(eventId); 108 | if (eventId > 0) { 109 | var key = [mapId, eventId, switchId]; 110 | $gameSelfSwitches.setValue(key, value); 111 | } 112 | } 113 | 114 | })(); -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/States.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"autoRemovalTiming":0,"chanceByDamage":100,"iconIndex":1,"maxTurns":1,"message1":"倒下了!","message2":"被打败了!","message3":"","message4":"复活了!","minTurns":1,"motion":3,"name":"无法战斗","note":"1 号状态在 HP 变为 0 时会自动附加。","overlay":0,"priority":100,"releaseByDamage":false,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":4,"stepsToRemove":100,"traits":[{"code":23,"dataId":9,"value":0}]}, 4 | {"id":2,"autoRemovalTiming":2,"chanceByDamage":100,"description":"","iconIndex":0,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","minTurns":1,"motion":0,"name":"防御","note":"","overlay":0,"priority":0,"removeAtBattleEnd":true,"removeByDamage":false,"removeByRestriction":true,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":62,"dataId":1,"value":0}]}, 5 | {"id":3,"autoRemovalTiming":0,"chanceByDamage":100,"description":"","iconIndex":0,"maxTurns":1,"message1":"","message2":"","message3":"","message4":"","minTurns":1,"motion":0,"name":"不死之身","note":"","overlay":0,"priority":0,"removeAtBattleEnd":true,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":14,"dataId":1,"value":0}]}, 6 | {"id":4,"autoRemovalTiming":0,"chanceByDamage":100,"iconIndex":2,"maxTurns":1,"message1":"中毒了!","message2":"中毒了!","message3":"","message4":"中的毒消失了!","minTurns":1,"motion":1,"overlay":1,"name":"中毒","note":"","priority":50,"releaseByDamage":false,"removeAtBattleEnd":false,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":22,"dataId":7,"value":-0.1}]}, 7 | {"id":5,"autoRemovalTiming":1,"chanceByDamage":100,"iconIndex":3,"maxTurns":5,"message1":"陷入了黑暗!","message2":"陷入了黑暗!","message3":"","message4":"的黑暗消失了!","minTurns":3,"motion":1,"name":"黑暗","note":"","overlay":2,"priority":60,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":22,"dataId":0,"value":-0.5}]}, 8 | {"id":6,"autoRemovalTiming":1,"chanceByDamage":100,"iconIndex":4,"maxTurns":5,"message1":"沉默了!","message2":"沉默了!","message3":"","message4":"的沉默解除了!","minTurns":3,"motion":1,"name":"沉默","note":"","overlay":3,"priority":65,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":false,"removeByRestriction":false,"removeByWalking":false,"restriction":0,"stepsToRemove":100,"traits":[{"code":42,"dataId":1,"value":0}]}, 9 | {"id":7,"autoRemovalTiming":1,"chanceByDamage":50,"iconIndex":5,"maxTurns":4,"message1":"被激怒了!","message2":"被激怒了!","message3":"","message4":"恢复了理智!","minTurns":2,"motion":1,"name":"愤怒","note":"","overlay":4,"priority":70,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":true,"removeByRestriction":false,"removeByWalking":false,"restriction":1,"stepsToRemove":100,"traits":[]}, 10 | {"id":8,"autoRemovalTiming":1,"chanceByDamage":50,"iconIndex":6,"maxTurns":4,"message1":"陷入了混乱!","message2":"陷入了混乱!","message3":"","message4":"恢复了理智!","minTurns":2,"motion":1,"name":"混乱","note":"","overlay":5,"priority":75,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":true,"removeByRestriction":false,"removeByWalking":false,"restriction":2,"stepsToRemove":100,"traits":[]}, 11 | {"id":9,"autoRemovalTiming":1,"chanceByDamage":50,"iconIndex":7,"maxTurns":4,"message1":"被魅惑了!","message2":"被魅惑了!","message3":"","message4":"恢复了理智!","minTurns":2,"motion":1,"name":"魅惑","note":"","overlay":6,"priority":80,"releaseByDamage":false,"removeAtBattleEnd":true,"removeByDamage":true,"removeByRestriction":false,"removeByWalking":false,"restriction":3,"stepsToRemove":100,"traits":[]}, 12 | {"id":10,"autoRemovalTiming":1,"chanceByDamage":100,"iconIndex":8,"maxTurns":5,"message1":"睡着了!","message2":"睡着了!","message3":"正在沉睡中。","message4":"醒来了!","minTurns":3,"motion":2,"name":"睡眠","note":"","overlay":7,"priority":90,"releaseByDamage":true,"removeAtBattleEnd":true,"removeByDamage":true,"removeByRestriction":false,"removeByWalking":false,"restriction":4,"stepsToRemove":100,"traits":[{"code":22,"dataId":1,"value":-1}]} 13 | ] -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Skills.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"a.atk * 4 - b.def * 2","type":1,"variance":20},"description":"","effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":1,"iconIndex":76,"message1":"的攻击!","message2":"","mpCost":0,"name":"攻击","note":"1 号技能会在选择“攻击”指令时使用。","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":1,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":10}, 4 | {"id":2,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":21,"dataId":2,"value1":1,"value2":0}],"hitType":0,"iconIndex":81,"message1":"正在保护自己。","message2":"","mpCost":0,"name":"防御","note":"1 号技能会在选择“防御”指令时使用。","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":11,"speed":2000,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":10}, 5 | {"id":3,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"a.atk * 4 - b.def * 2","type":1,"variance":20},"description":"","effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":1,"iconIndex":76,"message1":"的攻击!","message2":"","mpCost":0,"name":"连续攻击","note":"","occasion":1,"repeats":2,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":1,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":5}, 6 | {"id":4,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"a.atk * 4 - b.def * 2","type":1,"variance":20},"description":"","effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":1,"iconIndex":76,"message1":"的攻击!","message2":"","mpCost":0,"name":"两次攻击","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":4,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":5}, 7 | {"id":5,"animationId":-1,"damage":{"critical":true,"elementId":-1,"formula":"a.atk * 4 - b.def * 2","type":1,"variance":20},"description":"","effects":[{"code":21,"dataId":0,"value1":1,"value2":0}],"hitType":1,"iconIndex":76,"message1":"的攻击!","message2":"","mpCost":0,"name":"三次攻击","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":5,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":4}, 8 | {"id":6,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[{"code":41,"dataId":0,"value1":0,"value2":0}],"hitType":0,"iconIndex":82,"message1":"逃跑了。","message2":"","mpCost":0,"name":"逃跑","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":11,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":0}, 9 | {"id":7,"animationId":0,"damage":{"critical":false,"elementId":0,"formula":"0","type":0,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":81,"message1":"正在观望。","message2":"","mpCost":0,"name":"观望","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":0,"speed":0,"stypeId":0,"successRate":100,"tpCost":0,"tpGain":10}, 10 | {"id":8,"animationId":41,"damage":{"critical":false,"elementId":0,"formula":"200 + a.mat","type":3,"variance":20},"description":"","effects":[],"hitType":0,"iconIndex":72,"message1":"吟唱了%1!","message2":"","mpCost":5,"name":"治愈","note":"","occasion":0,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":7,"speed":0,"stypeId":1,"successRate":100,"tpCost":0,"tpGain":10}, 11 | {"id":9,"animationId":66,"damage":{"critical":false,"elementId":2,"formula":"100 + a.mat * 2 - b.mdf * 2","type":1,"variance":20},"description":"","effects":[],"hitType":2,"iconIndex":64,"message1":"吟唱了%1!","message2":"","mpCost":5,"name":"火焰","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":1,"speed":0,"stypeId":1,"successRate":100,"tpCost":0,"tpGain":10}, 12 | {"id":10,"animationId":78,"damage":{"critical":false,"elementId":4,"formula":"100 + a.mat * 2 - b.mdf * 2","type":1,"variance":20},"description":"","effects":[],"hitType":2,"iconIndex":66,"message1":"吟唱了%1!","message2":"","mpCost":5,"name":"闪电","note":"","occasion":1,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":2,"speed":0,"stypeId":1,"successRate":100,"tpCost":0,"tpGain":10}, 13 | {"id":11,"animationId":78,"damage":{"critical":false,"elementId":4,"formula":"100 + a.mat * 2 - b.mdf * 2","type":1,"variance":20},"description":"","effects":[],"hitType":2,"iconIndex":66,"message1":"吟唱了%1!","message2":"","mpCost":5,"name":"传送魔法","note":"","occasion":0,"repeats":1,"requiredWtypeId1":0,"requiredWtypeId2":0,"scope":0,"speed":0,"stypeId":1,"successRate":100,"tpCost":0,"tpGain":10} 14 | ] -------------------------------------------------------------------------------- /indie/MND_Rename.js: -------------------------------------------------------------------------------- 1 | //============================================ 2 | // MND_Rename.js 3 | //============================================ 4 | /*: 5 | * @plugindesc Rename actor.(v1.0) 6 | * @author Mandarava 7 | * 8 | * @param Show on menu screen 9 | * @type Number 10 | * @desc Whether to display [Rename] command on the menu screen. 0: false, 1: true. 11 | * Default 1. 12 | * @default 1 13 | * 14 | * @param Name of Rename Command 15 | * @desc The name of the Rename Command. 16 | * Default Rename 17 | * @default Rename 18 | * 19 | * @param Item Id to Bind 20 | * @type Number 21 | * @desc The item id you want to give the renaming ability to. 0 for disable. 22 | * Default 0 23 | * @default 0 24 | * 25 | * @param Max Length of Name 26 | * @type Number 27 | * @desc The max length of the name. 28 | * Default 10 29 | * @default 10 30 | * 31 | * @help 32 | * Features: 33 | * 1. Show a [Rename] command on the menu screen. 34 | * 2. Bind an item, give it the ability to rename actor. 35 | */ 36 | 37 | /*:zh 38 | * @plugindesc 角色改名工具。(v1.0) 39 | * @author Mandarava(鳗驼螺) 40 | * 41 | * @param Show on menu screen 42 | * @type Number 43 | * @desc 是否在菜单界面添加[改名]菜单。0: 不添加, 1: 添加。 44 | * 默认:1. 45 | * @default 1 46 | * 47 | * @param Name of Rename Command 48 | * @desc [改名]菜单的名称。 49 | * 默认:改名 50 | * @default 改名 51 | * 52 | * @param Item Id to Bind 53 | * @type item 54 | * @desc 要成为改名道具的物品Id,0表示不启用该功能。 55 | * 默认:0 56 | * @default 0 57 | * 58 | * @param Max Length of Name 59 | * @type Number 60 | * @desc 名字的长度。 61 | * 默认:10 62 | * @default 10 63 | * 64 | * @help 65 | * 本工具的作用: 66 | * 1. 在菜单界面显示[改名]菜单。 67 | * 2. 绑定一个物品ID,使该物品具有给角色改名的功能。 68 | */ 69 | 70 | (function ($) { 71 | 72 | var params=PluginManager.parameters("MND_Rename"); 73 | var isShowOnMenuScreen=Boolean(params["Show on menu screen"] || 1); 74 | var nameOfRenameCmd=params["Name of Rename Command"] || "Rename"; 75 | var itemIdToBind=Number(params["Item Id to Bind"] || 0); 76 | var maxNameLength=Number(params["Max Length of Name"] || 10); 77 | 78 | //Bind an item, give it the ability to rename actor. 79 | 80 | if(itemIdToBind > 0) { 81 | var _Scene_ItemBase_useItem = Scene_ItemBase.prototype.useItem; 82 | Scene_ItemBase.prototype.useItem = function () { 83 | _Scene_ItemBase_useItem.call(this); 84 | 85 | if (this.item().id == itemIdToBind && !$gameParty.inBattle()) { 86 | var actorId = $gameParty.members()[this._actorWindow._index]._actorId; 87 | SceneManager.push(Scene_Name); 88 | SceneManager.prepareNextScene(actorId, maxNameLength); 89 | } 90 | } 91 | 92 | var _Scene_ItemBase_canUse = Scene_ItemBase.prototype.canUse; 93 | Scene_ItemBase.prototype.canUse = function () { 94 | if (this.item().id == itemIdToBind) return this.user().canUse(this.item()); 95 | else return _Scene_ItemBase_canUse.call(this); 96 | }; 97 | } 98 | 99 | //Show a [Rename] command on the menu screen. 100 | 101 | if(isShowOnMenuScreen) { 102 | Window_MenuCommand.prototype.addOriginalCommands = function () { 103 | this.addCommand(nameOfRenameCmd, "rename", true); 104 | }; 105 | 106 | var _Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow; 107 | Scene_Menu.prototype.createCommandWindow = function () { 108 | _Scene_Menu_createCommandWindow.call(this); 109 | 110 | if (isShowOnMenuScreen) this._commandWindow.setHandler('rename', this.commandRename.bind(this)); 111 | }; 112 | 113 | Scene_Menu.prototype.commandRename = function () { 114 | this._statusWindow.setFormationMode(false); 115 | this._statusWindow.selectLast(); 116 | this._statusWindow.activate(); 117 | this._statusWindow.setHandler('ok', this.rename_ok.bind(this)); 118 | this._statusWindow.setHandler('cancel', this.rename_cancel.bind(this)); 119 | }; 120 | Scene_Menu.prototype.rename_ok = function () { 121 | SceneManager.push(Scene_Name); 122 | SceneManager.prepareNextScene($gameParty.menuActor().actorId(), maxNameLength); 123 | }; 124 | Scene_Menu.prototype.rename_cancel = function () { 125 | this._statusWindow.deselect(); 126 | this._commandWindow.activate(); 127 | }; 128 | 129 | Window_MenuStatus.prototype.processOk = function () { 130 | $gameParty.setMenuActor($gameParty.members()[this.index()]); 131 | Window_Selectable.prototype.processOk.call(this); 132 | }; 133 | }; 134 | 135 | })(); -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/js/plugins/LEARN_TitleMenu.js: -------------------------------------------------------------------------------- 1 | /*: 2 | * @plugindesc 标题画面前景、背景、菜单等美化。 3 | * @author Mandarava(鳗驼螺) 4 | * 5 | * @help 6 | * 7 | */ 8 | 9 | //=================图片菜单================= 10 | 11 | var _Scene_Title_create = Scene_Title.prototype.create; 12 | Scene_Title.prototype.create = function () { 13 | _Scene_Title_create.call(this); 14 | this._commandWindow.visible = false; 15 | this._commandWindow.x=Graphics.width; 16 | var btnimgs=["CmdStartGame", "CmdContinueGame", "CmdOptions", "CmdHomepage"]; 17 | var clicks=[ 18 | function(){this.commandNewGame(); SoundManager.playOk();}, 19 | function(){this.commandContinue(); SoundManager.playOk();}, 20 | function(){this.commandOptions(); SoundManager.playOk();}, 21 | function(){this.commandHomepage(); SoundManager.playOk();} 22 | ]; 23 | this._cmdButtons=[]; 24 | for(var i in btnimgs){ 25 | var sprite=new Sprite_Button(); 26 | sprite.width=184; 27 | sprite.height=53; 28 | sprite.bitmap=ImageManager.loadBitmap("img/mndtitle/", btnimgs[i]); 29 | sprite.x=Graphics.width/2-92; 30 | sprite.y=360+60*i; 31 | sprite.setClickHandler(clicks[i].bind(this)); 32 | this._cmdButtons.push(sprite); 33 | this.addChild(sprite); 34 | } 35 | this._cmdSelect=new Sprite(ImageManager.loadBitmap("img/mndtitle/", "CmdSelect")); 36 | this._cmdSelect.anchor=new Point(1,0); 37 | this.addChild(this._cmdSelect); 38 | }; 39 | 40 | //=================添加自定义菜单:官方网站================= 41 | 42 | var _Window_TitleCommand_makeCommandList = Window_TitleCommand.prototype.makeCommandList; 43 | Window_TitleCommand.prototype.makeCommandList = function () { 44 | _Window_TitleCommand_makeCommandList.call(this); 45 | 46 | this.addCommand("官方网站", 'homepage'); 47 | }; 48 | 49 | var _Scene_Title_createCommandWindow = Scene_Title.prototype.createCommandWindow; 50 | Scene_Title.prototype.createCommandWindow = function() { 51 | _Scene_Title_createCommandWindow.call(this); 52 | 53 | this._commandWindow.setHandler('homepage', this.commandHomepage.bind(this)); 54 | }; 55 | 56 | Scene_Title.prototype.commandHomepage = function() { 57 | this._commandWindow.activate(); 58 | //打开url 59 | var cmd; 60 | if (process.platform === 'darwin') cmd = 'open'; 61 | if (process.platform === 'win32') cmd = 'explorer.exe'; 62 | if (process.platform === 'linux') cmd = 'xdg-open'; 63 | var spawn = require('child_process').spawn; 64 | spawn(cmd, ["http://www.popotu.com/"]); 65 | }; 66 | 67 | //=================标题前景、背景修改================= 68 | 69 | var _Scene_Title_createForeground = Scene_Title.prototype.createForeground; 70 | Scene_Title.prototype.createForeground = function() { 71 | _Scene_Title_createForeground.call(this); 72 | if ($dataSystem.optDrawTitle) { 73 | var gameLogo = ImageManager.loadBitmap("img/mndtitle/", "MandaravaTestLogo"); 74 | this._gameTitleSprite = new Sprite(gameLogo); 75 | this._gameTitleSprite.anchor = new Point(0.5, 0); 76 | this._gameTitleSprite.x = Graphics.width / 2; 77 | this._gameTitleSprite.y = 50; 78 | this.addChild(this._gameTitleSprite); 79 | } 80 | }; 81 | Scene_Title.prototype.drawGameTitle = function() { 82 | var x = 20; 83 | var y = Graphics.height / 3; 84 | var maxWidth = Graphics.width - x * 2; 85 | var text = $dataSystem.gameTitle; 86 | this._gameTitleSprite.bitmap.outlineColor = 'black'; 87 | this._gameTitleSprite.bitmap.outlineWidth = 8; 88 | this._gameTitleSprite.bitmap.fontSize = 72; 89 | this._gameTitleSprite.bitmap.drawText(text, x, y, maxWidth, 48, 'center'); 90 | }; 91 | 92 | Scene_Title.prototype.start = function() { 93 | Scene_Base.prototype.start.call(this); 94 | SceneManager.clearStack(); 95 | this.playTitleMusic(); 96 | this.startFadeIn(this.fadeSpeed(), false); 97 | }; 98 | 99 | var _Scene_Title_update = Scene_Title.prototype.update; 100 | Scene_Title.prototype.update = function() { 101 | _Scene_Title_update.call(this); 102 | 103 | //动态背景:更新动画 104 | this._elapsedSinceLastUpdate = this._elapsedSinceLastUpdate || 0; 105 | if (this._elapsedSinceLastUpdate >= this._animDelay) { 106 | this._currFrame++; 107 | this._currFrame = this._currFrame % this._animFrames.length; 108 | var animFrameIndex = this._animFrames[this._currFrame]; 109 | this._backSprite.bitmap = this._animFrameImgs[animFrameIndex]; 110 | this._elapsedSinceLastUpdate = 0; 111 | } 112 | this._elapsedSinceLastUpdate += 1 / Graphics._fpsMeter.fps; 113 | 114 | //图片菜单相关:在当前选中的图片菜单前面加个指示器 115 | var btnSelect = this._cmdButtons[this._commandWindow.index()]; 116 | this._cmdSelect.x = btnSelect.x; 117 | this._cmdSelect.y = btnSelect.y; 118 | }; -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Map006.json: -------------------------------------------------------------------------------- 1 | { 2 | "autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"","pan":0,"pitch":100,"volume":90},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"东之海","encounterList":[],"encounterStep":30,"height":13,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":2,"width":17, 3 | "data":[2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2052,2076,2076,2076,2076,2076,2076,2076,2076,2056,2048,2048,2048,2048,2048,2048,2052,2086,2898,2884,2884,2884,2884,2884,2884,2900,2088,2056,2048,2048,2048,2076,2076,2086,2898,2865,2864,2864,2864,2864,2864,2864,2866,2900,2064,2048,2048,2048,2897,2897,2897,2873,2864,2864,2864,2868,2892,2892,2872,2864,2888,2064,2048,2048,2048,2068,2068,2084,2880,2864,2864,2864,2888,2859,2861,2880,2864,2888,2064,2048,2048,2048,2048,2048,2072,2880,2864,2864,2864,2866,2884,2884,2865,2864,2888,2064,2048,2048,2048,2048,2048,2072,2904,2892,2872,2864,2864,2864,2864,2868,2892,2902,2064,2048,2048,2048,2048,2048,2050,2068,2084,2904,2892,2892,2892,2892,2902,2082,2068,2049,2048,2048,2048,2048,2048,2048,2048,2050,2068,2068,2068,2068,2068,2068,2049,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2100,2124,2124,2124,2124,2124,2124,2124,2124,2104,2096,2096,2096,2096,2096,2096,2100,2134,0,0,0,0,0,0,0,0,2136,2104,2096,2096,2096,2124,2124,2134,0,0,0,0,0,0,0,0,0,0,2112,2096,2096,2096,0,0,0,0,0,0,0,0,0,0,0,0,0,2112,2096,2096,2096,2116,2116,2132,0,0,0,0,0,0,0,0,0,0,2112,2096,2096,2096,2096,2096,2120,0,0,0,0,0,0,0,0,0,0,2112,2096,2096,2096,2096,2096,2120,0,0,0,0,0,0,0,0,0,0,2112,2096,2096,2096,2096,2096,2098,2116,2132,0,0,0,0,0,0,2130,2116,2097,2096,2096,2096,2096,2096,2096,2096,2098,2116,2116,2116,2116,2116,2116,2097,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,2096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 4 | "events":[ 5 | null, 6 | {"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","pan":0,"pitch":100,"volume":90}]},{"code":201,"indent":0,"parameters":[0,5,15,5,0,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":0,"y":5} 7 | ] 8 | } -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/System.json: -------------------------------------------------------------------------------- 1 | {"airship":{"bgm":{"name":"Ship3","pan":0,"pitch":100,"volume":90},"characterIndex":3,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"armorTypes":["","一般护甲","魔法护甲","轻型护甲","重型护甲","小型盾牌","大型盾牌"],"attackMotions":[{"type":0,"weaponImageId":0},{"type":1,"weaponImageId":1},{"type":1,"weaponImageId":2},{"type":1,"weaponImageId":3},{"type":1,"weaponImageId":4},{"type":1,"weaponImageId":5},{"type":1,"weaponImageId":6},{"type":2,"weaponImageId":7},{"type":2,"weaponImageId":8},{"type":2,"weaponImageId":9},{"type":0,"weaponImageId":10},{"type":0,"weaponImageId":11},{"type":0,"weaponImageId":12}],"battleBgm":{"name":"Battle1","pan":0,"pitch":100,"volume":90},"battleback1Name":"Grassland","battleback2Name":"Grassland","battlerHue":0,"battlerName":"Dragon","boat":{"bgm":{"name":"Ship1","pan":0,"pitch":100,"volume":90},"characterIndex":0,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"currencyUnit":"G","defeatMe":{"name":"Defeat1","pan":0,"pitch":100,"volume":90},"editMapId":5,"elements":["","物理","炎","冰","雷","水","土","风","光","暗"],"equipTypes":["","武器","盾牌","头部","身体","装饰品"],"gameTitle":"Mandarava Test","gameoverMe":{"name":"Gameover1","pan":0,"pitch":100,"volume":90},"locale":"zh_CN","magicSkills":[1],"menuCommands":[true,true,true,true,true,true],"optDisplayTp":true,"optDrawTitle":true,"optExtraExp":false,"optFloorDeath":false,"optFollowers":true,"optSideView":false,"optSlipDeath":false,"optTransparent":false,"partyMembers":[5,6],"ship":{"bgm":{"name":"Ship2","pan":0,"pitch":100,"volume":90},"characterIndex":1,"characterName":"Vehicle","startMapId":0,"startX":0,"startY":0},"skillTypes":["","魔法","必杀技"],"sounds":[{"name":"Cursor2","pan":0,"pitch":100,"volume":90},{"name":"Decision1","pan":0,"pitch":100,"volume":90},{"name":"Cancel2","pan":0,"pitch":100,"volume":90},{"name":"Buzzer1","pan":0,"pitch":100,"volume":90},{"name":"Equip1","pan":0,"pitch":100,"volume":90},{"name":"Save","pan":0,"pitch":100,"volume":90},{"name":"Load","pan":0,"pitch":100,"volume":90},{"name":"Battle1","pan":0,"pitch":100,"volume":90},{"name":"Run","pan":0,"pitch":100,"volume":90},{"name":"Attack3","pan":0,"pitch":100,"volume":90},{"name":"Damage4","pan":0,"pitch":100,"volume":90},{"name":"Collapse1","pan":0,"pitch":100,"volume":90},{"name":"Collapse2","pan":0,"pitch":100,"volume":90},{"name":"Collapse3","pan":0,"pitch":100,"volume":90},{"name":"Damage5","pan":0,"pitch":100,"volume":90},{"name":"Collapse4","pan":0,"pitch":100,"volume":90},{"name":"Recovery","pan":0,"pitch":100,"volume":90},{"name":"Miss","pan":0,"pitch":100,"volume":90},{"name":"Evasion1","pan":0,"pitch":100,"volume":90},{"name":"Evasion2","pan":0,"pitch":100,"volume":90},{"name":"Reflection","pan":0,"pitch":100,"volume":90},{"name":"Shop1","pan":0,"pitch":100,"volume":90},{"name":"Item3","pan":0,"pitch":100,"volume":90},{"name":"Item3","pan":0,"pitch":100,"volume":90}],"startMapId":5,"startX":6,"startY":5,"switches":["","","","","","","","","","","","","","","","","","","","",""],"terms":{"basic":["等级","Lv","HP","HP","MP","MP","TP","TP","经验值","EXP"],"commands":["战斗","逃跑","攻击","防御","物品","技能","装备","状态","整队","保存","游戏结束","设置","武器","护甲","重要物品","装备","最强装备","清空","开始游戏","继续游戏",null,"回到标题","取消",null,"购买","出售"],"params":["最大 HP","最大 MP","攻击力","防御力","魔法攻击","魔法防御","敏捷","幸运","命中率","回避率"],"messages":{"actionFailure":"对%1没有效果!","actorDamage":"%1受到了 %2 点伤害!","actorDrain":"%1被吸收了 %3 点 %2!","actorGain":"%1的 %2 增加了 %3 点!","actorLoss":"%1的 %2 减少了 %3 点!","actorNoDamage":"%1没有受到伤害!","actorNoHit":"Miss! %1没有受到伤害!","actorRecovery":"%1恢复了 %3 点 %2!","alwaysDash":"始终跑步","bgmVolume":"BGM 音量","bgsVolume":"BGS 音量","buffAdd":"%1的%2上升了!","buffRemove":"%1的%2恢复正常了!","commandRemember":"记住指令","counterAttack":"%1的反击!","criticalToActor":"痛恨一击!","criticalToEnemy":"会心一击!","debuffAdd":"%1的%2下降了!","defeat":"%1被击败了。","emerge":"%1出现了!","enemyDamage":"%1受到了 %2 点伤害!","enemyDrain":"%1被吸收了 %3 点 %2!","enemyGain":"%1的 %2 增加了 %3 点!","enemyLoss":"%1的 %2 减少了 %3 点!","enemyNoDamage":"没有对%1造成伤害!","enemyNoHit":"Miss!没有对%1造成伤害!","enemyRecovery":"%1恢复了 %3 点 %2!","escapeFailure":"但是没有逃跑成功!","escapeStart":"%1开始逃跑了!","evasion":"%1躲开了攻击!","expNext":"距离下一%1","expTotal":"现在的%1","file":"文件","levelUp":"%1升到了 %2 %3!","loadMessage":"读取哪个文件?","magicEvasion":"%1抵消了魔法!","magicReflection":"%1反射了魔法!","meVolume":"ME 音量","obtainExp":"获得了 %1 点%2!","obtainGold":"获得了 %1\\G!","obtainItem":"获得了%1!","obtainSkill":"学会了%1!","partyName":"%1的队伍","possession":"持有数","preemptive":"%1先发制人!","saveMessage":"保存到哪个文件?","seVolume":"SE 音量","substitute":"%1保护了%2!","surprise":"%1被偷袭了!","useItem":"%1使用了%2!","victory":"%1胜利了!"}},"testBattlers":[{"actorId":1,"equips":[1,1,2,3,0],"level":1},{"actorId":2,"equips":[2,1,2,3,0],"level":1},{"actorId":3,"equips":[3,0,2,3,4],"level":1},{"actorId":4,"equips":[4,0,2,3,4],"level":1}],"testTroopId":4,"title1Name":"Devil","title2Name":"","titleBgm":{"name":"Theme6","pan":0,"pitch":100,"volume":90},"variables":["","","","","","","","","","","","","","","","","","","","",""],"versionId":277718,"victoryMe":{"name":"Victory1","pan":0,"pitch":100,"volume":90},"weaponTypes":["","匕首","剑","流星锤","斧","鞭","杖","弓箭","弩","枪","爪","手套","矛"],"windowTone":[0,0,0,0]} -------------------------------------------------------------------------------- /indie/MND_ProtectProfile.js: -------------------------------------------------------------------------------- 1 | //============================== 2 | // MND_ProtectProfile.js 3 | // Copyright (c) 2017 Mandarava 4 | // Homepage: www.popotu.com 5 | //============================== 6 | 7 | /*: 8 | * @plugindesc 用于加密存档的插件,可指定加密密码。(v1.1) 9 | * @author Mandarava(鳗驼螺) 10 | * @version 1.1 11 | * 12 | * @param Password 13 | * @text 存档密码 14 | * @default Mandarava 15 | * 16 | * @help 17 | * 使用时请修改存档密码,不要使用默认值,密码尽量长! 18 | * 这个加密工具强度可以,但会增大存档内容。如果需要简单加密可以使用 MND_ProtectProfile2.js 19 | * 20 | * v1.1 修正字符串加解密算法,支持中文内容。 21 | * 说明:第1版中提供的字符串加解密算法不支持中文,造成如果属性或数据有中文内容的会加密成不可逆字符串,造成读档失败。 22 | * v1.0 发布。 23 | * 24 | * by Mandarava(鳗驼螺) 25 | */ 26 | 27 | (function($){ 28 | 29 | var params=PluginManager.parameters("MND_ProtectProfile"); 30 | var password=params["Password"] || "Mandarava"; 31 | 32 | DataManager.saveGameWithoutRescue = function(savefileId) { 33 | var json = JsonEx.stringify(this.makeSaveContents()); 34 | if (json.length >= 200000) { 35 | console.warn('Save data too big!'); 36 | } 37 | json=encrypt(json, password); //对json字符串进行加密 38 | StorageManager.save(savefileId, json); 39 | this._lastAccessedId = savefileId; 40 | var globalInfo = this.loadGlobalInfo() || []; 41 | globalInfo[savefileId] = this.makeSavefileInfo(); 42 | this.saveGlobalInfo(globalInfo); 43 | return true; 44 | }; 45 | 46 | DataManager.loadGameWithoutRescue = function(savefileId) { 47 | var globalInfo = this.loadGlobalInfo(); 48 | if (this.isThisGameFile(savefileId)) { 49 | var json = StorageManager.load(savefileId); 50 | json=decrypt(json, password); //对加密过的json字符串进行解密 51 | this.createGameObjects(); 52 | this.extractSaveContents(JsonEx.parse(json)); 53 | this._lastAccessedId = savefileId; 54 | return true; 55 | } else { 56 | return false; 57 | } 58 | }; 59 | 60 | /** 61 | * 加密字符串 62 | * @param str 要加密的字符串 63 | * @param pwd 加密密码 64 | * @returns {*} 65 | */ 66 | function encrypt(text, pwd) { 67 | var result=LZString.compressToBase64(text); 68 | return encryptEnText(result, pwd);//encryptEnText / decryptEnText不能加解密中文数据,所以先用LZString压缩成英文字符 69 | } 70 | /** 71 | * 解密字符串 72 | * @param str 要解密的字符串 73 | * @param pwd 解密的密码 74 | * @returns {*} 75 | */ 76 | function decrypt(text, pwd) { 77 | var result=decryptEnText(text, pwd); 78 | return LZString.decompressFromBase64(result); 79 | } 80 | 81 | function encryptEnText(str, pwd) { 82 | if(pwd == null || pwd.length <= 0) { 83 | return null; 84 | } 85 | var prand = ""; 86 | for(var i=0; i 10) { 99 | prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString(); 100 | } 101 | prand = (mult * prand + incr) % modu; 102 | var enc_chr = ""; 103 | var enc_str = ""; 104 | for(var i=0; i 10) { 135 | prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString(); 136 | } 137 | prand = (mult * prand + incr) % modu; 138 | var enc_chr = ""; 139 | var enc_str = ""; 140 | for(var i=0; i","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":2,"width":17, 3 | "data":[7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7664,7668,7692,7692,7692,7692,7692,7692,7692,7692,7692,7672,7664,7664,7664,7664,7664,7664,7688,8058,8058,8058,8058,8058,8058,8058,8058,8058,7680,7664,7664,7664,7664,7664,7664,7688,2851,2849,2849,2849,2849,2849,2849,2849,2853,7680,7664,7664,7664,7664,7664,7664,7688,2848,2898,2885,2897,2897,2897,2886,2900,2848,7680,7664,7664,7664,7664,7664,7664,7688,2848,2880,2888,2851,2849,2853,2880,2888,2848,7680,7664,7664,7664,7664,7664,7664,7688,2848,2880,2888,2860,2906,2860,2880,2888,2848,7680,7664,7664,7664,7664,7664,7664,7688,2848,2904,2874,2884,2867,2884,2869,2902,2848,7680,7664,7664,7664,7664,7664,7664,7688,2833,2852,2904,2892,2876,2892,2902,2850,2842,7680,7664,7664,7664,7664,7664,7664,7688,2832,2818,2836,2852,2896,2850,2836,2817,2840,7680,7664,7664,7664,7664,7664,7664,7688,2832,2816,2816,2840,2896,2832,2816,2816,2840,7680,7664,7664,7664,7664,7692,7692,7702,2832,2816,2816,2840,2896,2832,2816,2816,2840,7704,7692,7692,7692,7692,8059,8058,8062,2832,2816,2816,2840,2896,2832,2816,2816,2840,8059,8058,8058,8058,8062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,309,310,311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,317,318,319,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 4 | "events":[ 5 | null, 6 | {"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","pan":0,"pitch":100,"volume":90}]},{"code":201,"indent":0,"parameters":[0,5,6,1,0,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":7,"y":12}, 7 | {"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"Nature","direction":2,"pattern":1,"characterIndex":4},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["你要启用本地图的传送功能吗?开启后可以通过传送器传送到"]},{"code":401,"indent":0,"parameters":["这里,否则禁止传送。"]},{"code":102,"indent":0,"parameters":[["开启","关闭","取消"],2,0,2,0]},{"code":402,"indent":0,"parameters":[0,"开启"]},{"code":356,"indent":1,"parameters":["setTeleportPlaceEnabled 8 7 6 1 1"]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"关闭"]},{"code":356,"indent":1,"parameters":["setTeleportPlaceEnabled 8 7 6 0 1"]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[2,"取消"]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":9,"y":5} 8 | ] 9 | } -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Map007.json: -------------------------------------------------------------------------------- 1 | { 2 | "autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"","pan":0,"pitch":100,"volume":90},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"西之森","encounterList":[],"encounterStep":30,"height":13,"note":"\n","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":2,"width":17, 3 | "data":[2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2820,2844,2844,2844,2844,2844,2844,2844,2824,2816,2816,2816,2816,2816,2816,2816,2816,2840,2898,2884,2884,2884,2884,2884,2900,2832,2816,2816,2816,2816,2816,2816,2816,2816,2840,2880,2868,2892,2892,2872,2864,2888,2856,2844,2844,2844,2844,2816,2816,2816,2816,2840,2880,2888,2859,2861,2880,2864,2870,2897,2897,2897,2897,2897,2816,2816,2816,2816,2840,2880,2866,2884,2884,2865,2864,2888,2850,2836,2836,2836,2836,2816,2816,2816,2816,2840,2904,2892,2892,2892,2892,2892,2902,2832,2816,2816,2816,2816,2816,2816,2816,2816,2818,2836,2836,2836,2836,2836,2836,2836,2817,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,115,114,115,114,115,114,115,114,115,114,115,114,115,114,115,114,122,123,122,123,122,123,122,123,122,123,122,123,122,123,122,123,122,114,115,114,115,113,121,120,121,120,121,120,121,120,115,114,115,114,122,123,122,123,121,0,0,0,0,0,0,0,112,123,122,123,122,114,115,114,115,113,0,0,337,0,0,0,0,120,121,120,121,120,122,123,122,123,121,0,0,361,0,0,0,0,0,0,0,0,0,114,115,114,115,113,0,0,0,0,0,0,0,0,112,113,112,113,122,123,122,123,121,0,0,0,0,0,0,0,112,123,122,123,122,114,115,114,115,113,112,113,112,113,112,113,112,113,115,114,115,114,122,123,122,123,122,123,122,123,122,123,122,123,122,123,122,123,122,114,115,114,115,114,115,114,115,114,115,114,115,114,115,114,115,114,122,123,122,123,122,123,122,123,122,123,122,123,122,123,122,123,122,114,115,114,115,114,115,114,115,114,115,114,115,114,115,114,115,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 4 | "events":[ 5 | null, 6 | {"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","pan":0,"pitch":100,"volume":90}]},{"code":201,"indent":0,"parameters":[0,5,1,5,0,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":16,"y":5}, 7 | {"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"Nature","direction":2,"pattern":1,"characterIndex":7},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["本地图可以允许或禁止传送道具和技能的使用。"]},{"code":401,"indent":0,"parameters":["你要允许还是禁止使用传送道具或技能?"]},{"code":102,"indent":0,"parameters":[["允许","禁止","取消"],2,0,2,0]},{"code":402,"indent":0,"parameters":[0,"允许"]},{"code":356,"indent":1,"parameters":["setMapTeleportEnabled 1"]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"禁止"]},{"code":356,"indent":1,"parameters":["setMapTeleportEnabled 0"]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[2,"取消"]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":10,"y":3} 8 | ] 9 | } -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Map009.json: -------------------------------------------------------------------------------- 1 | { 2 | "autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"","pan":0,"pitch":100,"volume":90},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"南之雪","encounterList":[],"encounterStep":30,"height":13,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":2,"width":17, 3 | "data":[3968,3968,3968,3968,3968,3968,3968,3992,4048,3984,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3992,4048,3984,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3972,3996,3996,3996,4006,4048,4008,3996,3996,3996,3976,3968,3968,3968,3968,3968,3968,3992,4050,4036,4036,4036,4019,4036,4036,4036,4052,3984,3968,3968,3968,3968,3968,3968,3992,4032,4016,4016,4016,4016,4020,4044,4044,4041,3984,3968,3968,3968,3968,3968,3968,3992,4032,4016,4016,4016,4016,4040,4011,4013,4048,3984,3968,3968,3968,3968,3968,3968,3992,4032,4016,4016,4016,4016,4018,4036,4036,4042,3984,3968,3968,3968,3968,3968,3968,3992,4056,4044,4044,4024,4016,4016,4020,4044,4054,3984,3968,3968,3968,3968,3968,3968,3970,3988,3988,4004,4056,4044,4044,4054,4002,3988,3969,3968,3968,3968,3968,3968,3968,3968,3968,3968,3970,3988,3988,3988,3988,3969,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,3968,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131,0,0,0,0,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,138,139,138,139,138,139,137,0,128,139,138,139,138,139,138,139,131,130,131,130,131,130,131,129,0,136,131,130,131,130,131,130,131,139,138,139,137,136,137,136,137,0,0,136,137,136,128,139,138,139,131,130,131,129,0,0,0,0,0,0,0,0,0,136,131,130,131,139,138,139,137,0,0,0,0,0,0,0,338,0,128,139,138,139,131,130,131,129,0,0,0,0,0,0,0,362,0,136,131,130,131,139,138,139,137,0,0,0,0,0,0,0,0,0,128,139,138,139,131,130,131,129,0,0,0,0,0,0,0,0,0,136,131,130,131,139,138,139,128,129,128,129,0,0,0,0,128,129,128,139,138,139,131,130,131,130,131,130,128,129,128,129,128,129,131,130,131,130,131,139,138,139,138,139,138,139,138,139,138,139,138,139,138,139,138,139,131,130,131,130,131,130,131,130,131,130,131,130,131,130,131,130,131,139,138,139,138,139,138,139,138,139,138,139,138,139,138,139,138,139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 4 | "events":[ 5 | null, 6 | {"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","pan":0,"pitch":100,"volume":90}]},{"code":201,"indent":0,"parameters":[0,5,11,11,0,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":8,"y":0}, 7 | {"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"Nature","direction":2,"pattern":1,"characterIndex":5},"list":[{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["你要在传送地列表中显示本地图的传送点吗?显示后可以在传"]},{"code":401,"indent":0,"parameters":["送地列表中找到本地图的传送点,并通过传送器传送到本地图,"]},{"code":401,"indent":0,"parameters":["否则不会显示。"]},{"code":102,"indent":0,"parameters":[["显示","不显示","取消"],2,0,2,0]},{"code":402,"indent":0,"parameters":[0,"显示"]},{"code":356,"indent":1,"parameters":["setTeleportPlaceEnabled 9 10 5 1 1"]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[1,"不显示"]},{"code":356,"indent":1,"parameters":["setTeleportPlaceEnabled 9 10 5 1 0"]},{"code":0,"indent":1,"parameters":[]},{"code":402,"indent":0,"parameters":[2,"取消"]},{"code":0,"indent":1,"parameters":[]},{"code":404,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":true,"through":false,"trigger":0,"walkAnime":true}],"x":5,"y":5} 8 | ] 9 | } -------------------------------------------------------------------------------- /tutorialsrc/LEARN_TitleMenu/LEARN_TitleMenu.js: -------------------------------------------------------------------------------- 1 | /*: 2 | * @plugindesc 标题画面前景、背景、菜单等美化。 3 | * @author Mandarava(鳗驼螺) 4 | * 5 | * @help 6 | * 本插件针对的教程地址:http://www.jianshu.com/p/527a82a2fd6a 7 | * 8 | * version 1.1 (2017/12/19) 优化菜单点选方式 9 | * version 1.0 (2017/06/21) 发布 10 | * 11 | */ 12 | 13 | //=================图片菜单================= 14 | 15 | var _Scene_Title_create = Scene_Title.prototype.create; 16 | Scene_Title.prototype.create = function () { 17 | _Scene_Title_create.call(this); 18 | this._commandWindow.visible = false;//不显示原始的文本菜单 19 | this._commandWindow.x=Graphics.width;//移到画面外去,否则虽然不显示仍能点击 20 | var btnimgs=["CmdStartGame", "CmdContinueGame", "CmdOptions", "CmdHomepage"]; 21 | var clicks=[ 22 | //方案一:单击不更新指示器 23 | //function(){this.commandNewGame(); SoundManager.playOk();}, 24 | //function(){this.commandContinue(); SoundManager.playOk();}, 25 | //function(){this.commandOptions(); SoundManager.playOk();}, 26 | //function(){this.commandHomepage(); SoundManager.playOk();} 27 | //方案二:优化一(双击更新指示器,原始方式) 28 | //function(){if(this._commandWindow.index()!=0){this._commandWindow.select(0);}else{this._commandWindow.processOk();} }, 29 | //function(){if(this._commandWindow.index()!=1){this._commandWindow.select(1);}else{this._commandWindow.processOk();} }, 30 | //function(){if(this._commandWindow.index()!=2){this._commandWindow.select(2);}else{this._commandWindow.processOk();} }, 31 | //function(){if(this._commandWindow.index()!=3){this._commandWindow.select(3);}else{this._commandWindow.processOk();} } 32 | //方案三:优化二(单击更新指示器,个人喜欢和推荐这种形式) 33 | function(){ this._commandWindow.select(0); this._commandWindow.processOk(); }, 34 | function(){ this._commandWindow.select(1); this._commandWindow.processOk(); }, 35 | function(){ this._commandWindow.select(2); this._commandWindow.processOk(); }, 36 | function(){ this._commandWindow.select(3); this._commandWindow.processOk(); } 37 | ]; 38 | this._cmdButtons=[];//所有图片菜单 39 | for(var i in btnimgs){ 40 | var sprite=new Sprite_Button(); 41 | sprite.width=184; 42 | sprite.height=53; 43 | sprite.bitmap=ImageManager.loadBitmap("img/mndtitle/", btnimgs[i]); 44 | //sprite.anchor=new Point(0.5,0.5);//不要设置,设置这个会出现菜单点不中的问题,不清楚原因。 45 | sprite.x=Graphics.width/2-92; 46 | sprite.y=360+60*i; 47 | sprite.setClickHandler(clicks[i].bind(this)); 48 | this._cmdButtons.push(sprite); 49 | this.addChild(sprite); 50 | } 51 | this._cmdSelect=new Sprite(ImageManager.loadBitmap("img/mndtitle/", "CmdSelect"));//选中菜单的指示器 52 | this._cmdSelect.anchor=new Point(1,0);//因为按钮的anchor是默认的(0,0),这个指示器要放在按钮左侧,所以让它的anchor为(1,0)更容易定位 53 | this.addChild(this._cmdSelect); 54 | }; 55 | 56 | //=================添加自定义菜单:官方网站================= 57 | 58 | var _Window_TitleCommand_makeCommandList = Window_TitleCommand.prototype.makeCommandList; 59 | Window_TitleCommand.prototype.makeCommandList = function () { 60 | _Window_TitleCommand_makeCommandList.call(this); 61 | 62 | this.addCommand("官方网站", 'homepage');//增加一个新菜单,标识符为 homepage 63 | }; 64 | 65 | var _Scene_Title_createCommandWindow = Scene_Title.prototype.createCommandWindow; 66 | Scene_Title.prototype.createCommandWindow = function() { 67 | _Scene_Title_createCommandWindow.call(this); 68 | 69 | this._commandWindow.setHandler('homepage', this.commandHomepage.bind(this)); //将标识符为homepage的菜单绑定到commandHomepage方法 70 | }; 71 | 72 | Scene_Title.prototype.commandHomepage = function() { 73 | this._commandWindow.activate(); 74 | //打开url 75 | var cmd; 76 | if (process.platform === 'darwin') cmd = 'open'; 77 | if (process.platform === 'win32') cmd = 'explorer.exe'; 78 | if (process.platform === 'linux') cmd = 'xdg-open'; 79 | var spawn = require('child_process').spawn; 80 | spawn(cmd, ["http://www.jianshu.com/nb/13204998"]); 81 | }; 82 | 83 | //=================标题前景、背景修改================= 84 | 85 | Scene_Title.prototype.createForeground = function() { 86 | if ($dataSystem.optDrawTitle) { 87 | var gameLogo = ImageManager.loadBitmap("img/mndtitle/", "GameLogo"); 88 | this._gameTitleSprite = new Sprite(gameLogo); 89 | this._gameTitleSprite.anchor = new Point(0.5, 0); 90 | this._gameTitleSprite.x = Graphics.width / 2; 91 | this._gameTitleSprite.y = 40; 92 | this.addChild(this._gameTitleSprite); 93 | } 94 | }; 95 | 96 | Scene_Title.prototype.createBackground = function() { 97 | this._animFrameImgs=[ 98 | ImageManager.loadBitmap("img/mndtitle/", "TitleBack1"), 99 | ImageManager.loadBitmap("img/mndtitle/", "TitleBack2"), 100 | ImageManager.loadBitmap("img/mndtitle/", "TitleBack3") 101 | ]; 102 | this._animFrames=[0,1,2,1]; 103 | this._currFrame=0; 104 | this._animDelay=0.2; 105 | this._backSprite = new Sprite(this._animFrameImgs[0]); 106 | this.centerSprite(this._backSprite) 107 | this.addChild(this._backSprite); 108 | }; 109 | 110 | Scene_Title.prototype.start = function() { 111 | Scene_Base.prototype.start.call(this); 112 | SceneManager.clearStack(); 113 | //this.centerSprite(this._backSprite1);//删除 114 | //this.centerSprite(this._backSprite2);//删除 115 | this.playTitleMusic(); 116 | this.startFadeIn(this.fadeSpeed(), false); 117 | }; 118 | 119 | var _Scene_Title_update = Scene_Title.prototype.update; 120 | Scene_Title.prototype.update = function() { 121 | _Scene_Title_update.call(this); 122 | 123 | //动态背景:更新动画 124 | this._elapsedSinceLastUpdate = this._elapsedSinceLastUpdate || 0; 125 | if (this._elapsedSinceLastUpdate >= this._animDelay) { 126 | this._currFrame++; 127 | this._currFrame = this._currFrame % this._animFrames.length; 128 | var animFrameIndex = this._animFrames[this._currFrame]; 129 | this._backSprite.bitmap = this._animFrameImgs[animFrameIndex]; 130 | this._elapsedSinceLastUpdate = 0; 131 | } 132 | this._elapsedSinceLastUpdate += 1 / Graphics._fpsMeter.fps; 133 | 134 | //图片菜单相关:在当前选中的图片菜单前面加个指示器 135 | var btnSelect = this._cmdButtons[this._commandWindow.index()]; 136 | this._cmdSelect.x = btnSelect.x; 137 | this._cmdSelect.y = btnSelect.y; 138 | }; -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/js/libs/lz-string.js: -------------------------------------------------------------------------------- 1 | var LZString={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_f:String.fromCharCode,compressToBase64:function(e){if(e==null)return"";var t="";var n,r,i,s,o,u,a;var f=0;e=LZString.compress(e);while(f>8;r=e.charCodeAt(f/2)&255;if(f/2+1>8;else i=NaN}else{n=e.charCodeAt((f-1)/2)&255;if((f+1)/2>8;i=e.charCodeAt((f+1)/2)&255}else r=i=NaN}f+=3;s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+LZString._keyStr.charAt(s)+LZString._keyStr.charAt(o)+LZString._keyStr.charAt(u)+LZString._keyStr.charAt(a)}return t},decompressFromBase64:function(e){if(e==null)return"";var t="",n=0,r,i,s,o,u,a,f,l,c=0,h=LZString._f;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(c>4;s=(a&15)<<4|f>>2;o=(f&3)<<6|l;if(n%2==0){r=i<<8;if(f!=64){t+=h(r|s)}if(l!=64){r=o<<8}}else{t=t+h(r|i);if(f!=64){r=s<<8}if(l!=64){t+=h(r|o)}}n+=3}return LZString.decompress(t)},compressToUTF16:function(e){if(e==null)return"";var t="",n,r,i,s=0,o=LZString._f;e=LZString.compress(e);for(n=0;n>1)+32);i=(r&1)<<14;break;case 1:t+=o(i+(r>>2)+32);i=(r&3)<<13;break;case 2:t+=o(i+(r>>3)+32);i=(r&7)<<12;break;case 3:t+=o(i+(r>>4)+32);i=(r&15)<<11;break;case 4:t+=o(i+(r>>5)+32);i=(r&31)<<10;break;case 5:t+=o(i+(r>>6)+32);i=(r&63)<<9;break;case 6:t+=o(i+(r>>7)+32);i=(r&127)<<8;break;case 7:t+=o(i+(r>>8)+32);i=(r&255)<<7;break;case 8:t+=o(i+(r>>9)+32);i=(r&511)<<6;break;case 9:t+=o(i+(r>>10)+32);i=(r&1023)<<5;break;case 10:t+=o(i+(r>>11)+32);i=(r&2047)<<4;break;case 11:t+=o(i+(r>>12)+32);i=(r&4095)<<3;break;case 12:t+=o(i+(r>>13)+32);i=(r&8191)<<2;break;case 13:t+=o(i+(r>>14)+32);i=(r&16383)<<1;break;case 14:t+=o(i+(r>>15)+32,(r&32767)+32);s=0;break}}return t+o(i+32)},decompressFromUTF16:function(e){if(e==null)return"";var t="",n,r,i=0,s=0,o=LZString._f;while(s>14);n=(r&16383)<<2;break;case 2:t+=o(n|r>>13);n=(r&8191)<<3;break;case 3:t+=o(n|r>>12);n=(r&4095)<<4;break;case 4:t+=o(n|r>>11);n=(r&2047)<<5;break;case 5:t+=o(n|r>>10);n=(r&1023)<<6;break;case 6:t+=o(n|r>>9);n=(r&511)<<7;break;case 7:t+=o(n|r>>8);n=(r&255)<<8;break;case 8:t+=o(n|r>>7);n=(r&127)<<9;break;case 9:t+=o(n|r>>6);n=(r&63)<<10;break;case 10:t+=o(n|r>>5);n=(r&31)<<11;break;case 11:t+=o(n|r>>4);n=(r&15)<<12;break;case 12:t+=o(n|r>>3);n=(r&7)<<13;break;case 13:t+=o(n|r>>2);n=(r&3)<<14;break;case 14:t+=o(n|r>>1);n=(r&1)<<15;break;case 15:t+=o(n|r);i=0;break}s++}return LZString.decompress(t)},compressToUint8Array:function(e){var t=LZString.compress(e);var n=new Uint8Array(t.length*2);for(var r=0,i=t.length;r>>8;n[r*2+1]=s%256}return n},decompressFromUint8Array:function(e){if(e===null||e===undefined){return LZString.decompress(e)}else{var t=new Array(e.length/2);for(var n=0,r=t.length;n>1}}else{n=1;for(t=0;t>1}}a--;if(a==0){a=Math.pow(2,l);l++}delete i[u]}else{n=r[u];for(t=0;t>1}}a--;if(a==0){a=Math.pow(2,l);l++}r[o]=f++;u=String(s)}}if(u!==""){if(Object.prototype.hasOwnProperty.call(i,u)){if(u.charCodeAt(0)<256){for(t=0;t>1}}else{n=1;for(t=0;t>1}}a--;if(a==0){a=Math.pow(2,l);l++}delete i[u]}else{n=r[u];for(t=0;t>1}}a--;if(a==0){a=Math.pow(2,l);l++}}n=2;for(t=0;t>1}while(true){h=h<<1;if(p==15){c+=v(h);break}else p++}return c},decompress:function(e){if(e==null)return"";if(e=="")return null;var t=[],n,r=4,i=4,s=3,o="",u="",a,f,l,c,h,p,d,v=LZString._f,m={string:e,val:e.charCodeAt(0),position:32768,index:1};for(a=0;a<3;a+=1){t[a]=a}l=0;h=Math.pow(2,2);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}switch(n=l){case 0:l=0;h=Math.pow(2,8);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}d=v(l);break;case 1:l=0;h=Math.pow(2,16);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}d=v(l);break;case 2:return""}t[3]=d;f=u=d;while(true){if(m.index>m.string.length){return""}l=0;h=Math.pow(2,s);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}switch(d=l){case 0:l=0;h=Math.pow(2,8);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}t[i++]=v(l);d=i-1;r--;break;case 1:l=0;h=Math.pow(2,16);p=1;while(p!=h){c=m.val&m.position;m.position>>=1;if(m.position==0){m.position=32768;m.val=m.string.charCodeAt(m.index++)}l|=(c>0?1:0)*p;p<<=1}t[i++]=v(l);d=i-1;r--;break;case 2:return u}if(r==0){r=Math.pow(2,s);s++}if(t[d]){o=t[d]}else{if(d===i){o=f+f.charAt(0)}else{return null}}u+=o;t[i++]=f+o.charAt(0);r--;f=o;if(r==0){r=Math.pow(2,s);s++}}}};if(typeof module!=="undefined"&&module!=null){module.exports=LZString} 2 | -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/js/libs/fpsmeter.js: -------------------------------------------------------------------------------- 1 | /*! FPSMeter 0.3.1 - 9th May 2013 | https://github.com/Darsain/fpsmeter */ 2 | (function(m,j){function s(a,e){for(var g in e)try{a.style[g]=e[g]}catch(j){}return a}function H(a){return null==a?String(a):"object"===typeof a||"function"===typeof a?Object.prototype.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase()||"object":typeof a}function R(a,e){if("array"!==H(e))return-1;if(e.indexOf)return e.indexOf(a);for(var g=0,j=e.length;gd.interval?(x=M(k),m()):(x=setTimeout(k,d.interval),P=M(m))}function G(a){a=a||window.event;a.preventDefault?(a.preventDefault(),a.stopPropagation()):(a.returnValue= 6 | !1,a.cancelBubble=!0);b.toggle()}function U(){d.toggleOn&&S(f.container,d.toggleOn,G,1);a.removeChild(f.container)}function V(){f.container&&U();h=D.theme[d.theme];y=h.compiledHeatmaps||[];if(!y.length&&h.heatmaps.length){for(p=0;p=m?m*(1+j):m+j-m*j;0===l?g="#000":(t=2*m-l,k=(l-t)/l,g*=6,n=Math.floor(g), 7 | v=g-n,v*=l*k,0===n||6===n?(n=l,k=t+v,l=t):1===n?(n=l-v,k=l,l=t):2===n?(n=t,k=l,l=t+v):3===n?(n=t,k=l-v):4===n?(n=t+v,k=t):(n=l,k=t,l-=v),g="#"+N(n)+N(k)+N(l));b[e]=g}}h.compiledHeatmaps=y}f.container=s(document.createElement("div"),h.container);f.count=f.container.appendChild(s(document.createElement("div"),h.count));f.legend=f.container.appendChild(s(document.createElement("div"),h.legend));f.graph=d.graph?f.container.appendChild(s(document.createElement("div"),h.graph)):0;w.length=0;for(var q in f)f[q]&& 8 | h[q].heatOn&&w.push({name:q,el:f[q]});u.length=0;if(f.graph){f.graph.style.width=d.history*h.column.width+(d.history-1)*h.column.spacing+"px";for(c=0;c 2 | 3 | 4 | 5 | RPG Maker MV存档修改器 - by Mandarava(鳗驼螺) 6 | 15 | 16 | 17 | 18 | 21 | 35 |

RPG Maker MV存档修改器 Profile Modifier

36 | 存档密文内容 Profile Ciphertext:
37 | 38 |
39 |           40 |
41 | 存档明文内容 Profile Plaintext:
42 |

43 |
你制作的游戏,存档能被解密吗?如何加密你的游戏存档?查看解决办法!
44 |
by Mandarava(鳗驼螺) 2017.08.15
45 | 46 | 47 | -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Map005.json: -------------------------------------------------------------------------------- 1 | { 2 | "autoplayBgm":false,"autoplayBgs":false,"battleback1Name":"","battleback2Name":"","bgm":{"name":"","pan":0,"pitch":100,"volume":90},"bgs":{"name":"","pan":0,"pitch":100,"volume":90},"disableDashing":false,"displayName":"世界之源","encounterList":[],"encounterStep":30,"height":13,"note":"","parallaxLoopX":false,"parallaxLoopY":false,"parallaxName":"","parallaxShow":true,"parallaxSx":0,"parallaxSy":0,"scrollType":0,"specifyBattleback":false,"tilesetId":2,"width":17, 3 | "data":[6180,6204,6204,6204,6204,6214,2848,6216,6204,6204,6204,6204,6204,6204,6204,6204,6184,6200,6570,6570,6570,6570,6574,2848,6571,6570,6570,6570,6570,6570,6570,6570,6570,6192,6200,2850,2836,2836,2836,2836,2819,2836,2836,2836,2836,2836,2836,2836,2836,2852,6192,6214,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,6216,6575,2832,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2816,2840,6575,2849,2845,2844,2844,2844,2844,2844,2844,2844,2844,2844,2824,2816,2816,2816,2822,2849,6212,2082,2069,2081,2081,2081,2081,2081,2081,2070,2084,2832,2816,2816,2816,2840,6210,6200,2064,2072,2850,2837,2849,2849,2838,2852,2064,2072,2832,2816,2816,2816,2840,6192,6200,2064,2072,2832,2840,2907,2909,2832,2840,2064,2072,2832,2816,2816,2816,2840,6192,6200,2064,2072,2856,2846,2849,2849,2845,2854,2064,2072,2832,2816,2816,2816,2840,6192,6200,2088,2078,2081,2081,2081,2081,2081,2081,2077,2086,2834,2844,2844,2844,2854,6192,6206,6209,6209,6209,6209,6209,6209,6209,6209,6209,6221,2848,6219,6209,6209,6209,6205,6571,6570,6570,6570,6570,6570,6570,6570,6570,6570,6574,2848,6571,6570,6570,6570,6574,0,0,0,0,0,0,2896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2896,0,0,0,2907,2909,0,0,0,0,0,0,0,0,0,0,0,2896,0,0,0,0,0,0,0,0,0,0,2897,2897,2897,2897,2897,2897,2895,2897,2897,2897,2897,2887,2897,2897,2897,2897,2897,0,2130,2117,2129,2129,2129,2129,2129,2129,2118,2132,2896,0,0,0,0,0,0,2112,2120,0,0,0,0,0,0,2112,2120,2896,0,0,0,0,0,0,2112,2120,0,0,0,0,0,0,2112,2120,2896,0,0,0,0,0,0,2112,2120,0,0,0,0,0,0,2112,2120,2896,0,0,0,0,0,0,2136,2126,2129,2129,2129,2129,2129,2129,2125,2134,2896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,337,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 4 | "events":[ 5 | null, 6 | {"id":1,"name":"EV001","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","pan":0,"pitch":100,"volume":90}]},{"code":201,"indent":0,"parameters":[0,8,7,11,0,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":6,"y":0}, 7 | {"id":2,"name":"EV002","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","pan":0,"pitch":100,"volume":90}]},{"code":201,"indent":0,"parameters":[0,7,15,5,0,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":0,"y":5}, 8 | {"id":3,"name":"EV003","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","pan":0,"pitch":100,"volume":90}]},{"code":201,"indent":0,"parameters":[0,6,1,5,0,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":16,"y":5}, 9 | {"id":4,"name":"EV004","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"characterIndex":0,"characterName":"","direction":2,"pattern":0,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Move1","pan":0,"pitch":100,"volume":90}]},{"code":201,"indent":0,"parameters":[0,9,8,1,0,0]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":0,"stepAnime":false,"through":false,"trigger":1,"walkAnime":true}],"x":11,"y":12}, 10 | {"id":5,"name":"EV005","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":false,"image":{"tileId":0,"characterName":"Evil","direction":2,"pattern":1,"characterIndex":2},"list":[{"code":301,"indent":0,"parameters":[0,1,true,true]},{"code":601,"indent":0,"parameters":[]},{"code":0,"indent":1,"parameters":[]},{"code":602,"indent":0,"parameters":[]},{"code":0,"indent":1,"parameters":[]},{"code":603,"indent":0,"parameters":[]},{"code":0,"indent":1,"parameters":[]},{"code":604,"indent":0,"parameters":[]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":7,"y":4}, 11 | {"id":6,"name":"EV006","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"characterIndex":0,"characterName":"!Chest","direction":2,"pattern":1,"tileId":0},"list":[{"code":250,"indent":0,"parameters":[{"name":"Chest1","pan":0,"pitch":100,"volume":90}]},{"code":205,"indent":0,"parameters":[0,{"list":[{"code":36},{"code":17},{"code":15,"parameters":[3]},{"code":18},{"code":15,"parameters":[3]},{"code":0}],"repeat":false,"skippable":false,"wait":true}]},{"code":505,"indent":0,"parameters":[{"code":36}]},{"code":505,"indent":0,"parameters":[{"code":17}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[3]}]},{"code":505,"indent":0,"parameters":[{"code":18}]},{"code":505,"indent":0,"parameters":[{"code":15,"parameters":[3]}]},{"code":123,"indent":0,"parameters":["A",0]},{"code":126,"indent":0,"parameters":[5,0,0,10]},{"code":126,"indent":0,"parameters":[6,0,0,1]},{"code":101,"indent":0,"parameters":["",0,0,2]},{"code":401,"indent":0,"parameters":["找到了 10个回城卷轴 和 1个回城卷轴·永久。"]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":false},{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":true,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"characterIndex":0,"characterName":"!Chest","direction":8,"pattern":1,"tileId":0},"list":[{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":false}],"x":5,"y":4}, 12 | null, 13 | null, 14 | null, 15 | null, 16 | null, 17 | null, 18 | null, 19 | null 20 | ] 21 | } -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/data/Classes.json: -------------------------------------------------------------------------------- 1 | [ 2 | null, 3 | {"id":1,"expParams":[30,20,30,30],"traits":[{"code":23,"dataId":0,"value":1},{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":22,"dataId":2,"value":0.04},{"code":41,"dataId":1,"value":0},{"code":51,"dataId":2,"value":0},{"code":52,"dataId":1,"value":0},{"code":52,"dataId":3,"value":0},{"code":52,"dataId":5,"value":0}],"learnings":[{"level":1,"note":"","skillId":8},{"level":1,"note":"","skillId":10},{"level":1,"note":"","skillId":11}],"name":"勇者","note":"","params":[[1,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200,3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800,3850,3900,3950,4000,4050,4100,4150,4200,4250,4300,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300,5350],[0,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070],[1,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277]]}, 4 | {"id":2,"expParams":[30,20,30,30],"traits":[{"code":23,"dataId":0,"value":1},{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":22,"dataId":2,"value":0.04},{"code":41,"dataId":1,"value":0},{"code":51,"dataId":4,"value":0},{"code":52,"dataId":1,"value":0},{"code":52,"dataId":3,"value":0},{"code":52,"dataId":4,"value":0},{"code":52,"dataId":5,"value":0},{"code":52,"dataId":6,"value":0}],"learnings":[],"name":"战士","note":"","params":[[1,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200,3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800,3850,3900,3950,4000,4050,4100,4150,4200,4250,4300,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300,5350],[0,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070],[1,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277]]}, 5 | {"id":3,"expParams":[30,20,30,30],"traits":[{"code":23,"dataId":0,"value":1},{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":22,"dataId":2,"value":0.04},{"code":41,"dataId":1,"value":0},{"code":51,"dataId":6,"value":0},{"code":52,"dataId":1,"value":0},{"code":52,"dataId":2,"value":0}],"learnings":[{"level":1,"note":"","skillId":9},{"level":1,"note":"","skillId":11}],"name":"魔法师","note":"","params":[[1,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200,3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800,3850,3900,3950,4000,4050,4100,4150,4200,4250,4300,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300,5350],[0,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070],[1,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277]]}, 6 | {"id":4,"expParams":[30,20,30,30],"traits":[{"code":23,"dataId":0,"value":1},{"code":22,"dataId":0,"value":0.95},{"code":22,"dataId":1,"value":0.05},{"code":22,"dataId":2,"value":0.04},{"code":41,"dataId":1,"value":0},{"code":51,"dataId":7,"value":0},{"code":52,"dataId":1,"value":0},{"code":52,"dataId":2,"value":0}],"learnings":[{"level":1,"note":"","skillId":8}],"name":"僧侣","note":"","params":[[1,450,500,550,600,650,700,750,800,850,900,950,1000,1050,1100,1150,1200,1250,1300,1350,1400,1450,1500,1550,1600,1650,1700,1750,1800,1850,1900,1950,2000,2050,2100,2150,2200,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3150,3200,3250,3300,3350,3400,3450,3500,3550,3600,3650,3700,3750,3800,3850,3900,3950,4000,4050,4100,4150,4200,4250,4300,4350,4400,4450,4500,4550,4600,4650,4700,4750,4800,4850,4900,4950,5000,5050,5100,5150,5200,5250,5300,5350],[0,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070],[1,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,77,79,80,81,82,84,85,86,87,89,90,91,92,94,95,96,97,99,100,101,102,104,105,106,107,109,110,111,112,114,115,116,117,119,120,121,122,124,125,126,127,129,130,131,132,134,135,136,137,138],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277],[0,32,35,37,40,42,45,47,50,52,55,57,60,62,65,67,70,72,75,77,80,82,85,87,90,92,95,97,100,102,105,107,110,112,115,117,120,122,125,127,130,132,135,137,140,142,145,147,150,152,155,157,160,162,165,167,170,172,175,177,180,182,185,187,190,192,195,197,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237,240,242,245,247,250,252,255,257,260,262,265,267,270,272,275,277]]} 7 | ] -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport.js: -------------------------------------------------------------------------------- 1 | //============================== 2 | // LEARN_Teleport.js 3 | // Copyright (c) 2017 Mandarava 4 | //============================== 5 | 6 | /*: 7 | * @plugindesc 用于制作传送道具和传送技能。(v1.0) 8 | * @author Mandarava(鳗驼螺) 9 | * @version 1.0.1 修复在物品菜单界面在空白处点击二次时可能会造成自动运行传送功能的问题,原因是传送点选取窗虽然隐藏了但它其实还能被点击到 10 | * 11 | * @param Teleport Start AnimationId 12 | * @text 传送开始动画 13 | * @desc 传送开始时要显示的动画 14 | * @type animation 15 | * @default 117 16 | * 17 | * @param Teleport End AnimationId 18 | * @text 传送完成动画 19 | * @desc 传送完成时要显示的动画 20 | * @type animation 21 | * @default 120 22 | * 23 | * @help 24 | * 本插件用于将物品、技能设置为传送道具或传送技能。物品支持可消耗物品或不可消耗 25 | * 物品,技能使用可消耗魔法。物品或技能添加传送功能后,其其它效果将被忽略,技能 26 | * 本身的动画也会被忽略。 27 | * 28 | * 使用方法: 29 | * 30 | * 一. 将物品、技能设置为传送道具或传送技能 31 | * 在需要添加传送功能的物品或技能备注中添加代码: 32 | * 33 | * 二. 通过地图备注登记传送点(非必要) 34 | * 你可以直接在地图的 地图属性-备注 中添加特定代码来登记该地图中的传送点信息, 35 | * 但是注意,这些登记的传送点只有当主角进入该地图时才会被自动激活,换句话说,如 36 | * 果主角没有进入过该地图,那么这些传送点不会显示在传送点列表中。 37 | * PS:这个操作不是必要的,你也可以使用插件命令来手动登记传送点。 38 | * 39 | * 1. 传送点登记格式: 40 | * x : 传送点在地图中的X坐标 41 | * y : 传送点在地图中的Y坐标 42 | * enabled : 可选,是否启用传送点,默认启用;可选值:1表示启用,0表示不启用。 43 | * visible : 可选,是否在传送点列表中显示该传送点,默认显示;可选值:1表示启用,0表示不启用。 44 | * name : 可选,传送点名称,如果不提供,默认使用地图的显示名称或地图名称。 45 | * [;...] : 可选,表示其它传送点信息。当一个地图有多个传送点时,多个传送点信息之间用;号隔开。 46 | * 47 | * 2. 传送点登记格式示例: 48 | * //传送点坐标为(8,10);启用并显示传送点;传送点名称使用地图名称。 49 | * //传送点坐标为(8,10);禁用但显示传送点;传送点名称使用地图名称。 50 | * //传送点坐标为(8,10);启用并显示传送点;传送点名称为“新起点” 51 | * //二个传送点:一个坐标在(8,10),名称为“新起点”,另一个坐标在(12,13),名称为“垃圾堆”。 52 | * 53 | * 三、通过地图备注禁止当前地图使用传送功能(非必要) 54 | * 如果某些地图不允许使用传送功能(如特定的山洞),你可以在地图的 地图属性-备注 55 | * 中添加特定代码来注明该地图禁止使用传送道具或传送技能。 56 | * PS:这个操作不是必要的,你也可以使用插件命令来手动禁止。 57 | * 58 | * 登记格式: 59 | * 60 | * 四、插件命令 61 | * 62 | * 1. 登记传送点 63 | * 如果已经登记过,则会修改传送点的启用性(enabled)和可见性(visible),所以不论是登记还是修改传送点信息都可以只用该方法来操作。 64 | * 命令格式:registerTeleportPlace mapid x y [enabled] [visible] [name] 65 | * mapid : 地图的ID 66 | * x : 传送点在地图的X坐标 67 | * y : 传送点在地图的Y坐标 68 | * enalbed : 可选,是否启用传送点,默认启用;可选值:1表示启用,0表示不启用。 69 | * visible : 可选,是否在传送点列表中显示该传送点,默认显示;可选值:1表示启用,0表示不启用。 70 | * name : 可选,传送点名称,如果不提供,默认使用地图名称。 71 | * 72 | * 2. 删除传送点 73 | * 命令格式:removeTeleportPlace mapid x y 74 | * mapid : 地图的ID 75 | * x : 传送点在地图的X坐标 76 | * y : 传送点在地图的Y坐标 77 | * 78 | * 3. 设置传送点的启用、显示状态 79 | * 如果传送点未登记,则操作会忽略;建议使用mndAddTeleportPlace命令来修改。 80 | * 命令格式:setTeleportPlaceEnabled mapid x y enabled visible 81 | * mapid : 地图的ID 82 | * x : 传送点在地图的X坐标 83 | * y : 传送点在地图的Y坐标 84 | * enalbed : 是否启用传送点,可选值:1表示启用,0表示不启用。 85 | * visible : 是否在传送点列表中显示该传送点,可选值:1表示启用,0表示不启用。 86 | * 87 | * 4. 设置当前地图允许或禁止使用传送道具或传送技能 88 | * 命令格式:setMapTeleportEnabled enabled 89 | * enabled : 是否启用传送功能 90 | */ 91 | 92 | (function(){ 93 | 94 | //=====Plugin Command===== 95 | 96 | var params = PluginManager.parameters("LEARN_Teleport"); 97 | var startAnimId = Number(params["Teleport Start AnimationId"]) || 117; 98 | var endAnimId = Number(params["Teleport End AnimationId"]) || 120; 99 | 100 | var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; 101 | Game_Interpreter.prototype.pluginCommand = function (command, args) { 102 | _Game_Interpreter_pluginCommand.call(this, command, args); 103 | 104 | switch (command) { 105 | case "registerTeleportPlace"://插件命令格式:registerTeleportPlace mapid x y [enabled] [visible] [name] 106 | var mapid = Number(args[0]); 107 | var enabled = args[3] == undefined ? true : Boolean(Number(args[3])); 108 | var visible = args[4] == undefined ? true : Boolean(Number(args[4])); 109 | var name = args[5] || $dataMapInfos[mapid].name; 110 | $gameMap.mndRegisterTeleportPlace(mapid, Number(args[1]), Number(args[2]), enabled, visible, name); 111 | break; 112 | case "removeTeleportPlace"://插件命令格式:removeTeleportPlace mapid x y 113 | $gameMap.mndRemoveTelleportPlace(Number(args[0]), Number(args[1]), Number(args[2])); 114 | break; 115 | case "setTeleportPlaceEnabled"://插件命令格式:setTeleportPlaceEnabled mapid x y enabled visible 116 | $gameMap.mndSetTeleportPlaceEnabled(Number(args[0]), Number(args[1]), Number(args[2]), Boolean(Number(args[3])), Boolean(Number(args[4]))); 117 | break; 118 | case "setMapTeleportEnabled"://插件命令格式:setMapTeleportEnabled enabled 119 | $gameMap.mndSetMapTeleportEnabled($gameMap.mapId(), Boolean(Number(args[0]))); 120 | default: 121 | break; 122 | } 123 | } 124 | 125 | //=====Game_BattlerBase===== 126 | 127 | //所有备注中含有""的物品、技能在禁止传送的地图或在战斗中都不能使用 128 | var _Game_BattlerBase_meetsUsableItemConditions=Game_BattlerBase.prototype.meetsUsableItemConditions; 129 | Game_BattlerBase.prototype.meetsUsableItemConditions = function(item) { 130 | if((!$gameMap.mndIsMapTeleportEnabled($gameMap.mapId()) || $gameParty.inBattle()) && item.note.contains("")) return false; 131 | else return _Game_BattlerBase_meetsUsableItemConditions.call(this, item); 132 | }; 133 | 134 | //===Game_Player=== 135 | 136 | //在传送到了新地点后,添加一个传送完成的动画,用_isTeleporting来区分是否由传送器造成的传送效果,只有是的情况下才会允许展示该动画 137 | Game_Player.prototype.performTransfer = function () { 138 | if (this.isTransferring()) { 139 | this.setDirection(this._newDirection); 140 | if (this._newMapId !== $gameMap.mapId() || this._needsMapReload) { 141 | $gameMap.setup(this._newMapId); 142 | this._needsMapReload = false; 143 | } 144 | this.locate(this._newX, this._newY); 145 | 146 | if (_isTeleporting) { 147 | $gamePlayer._animationId = endAnimId; 148 | _isTeleporting = false; 149 | } 150 | 151 | this.refresh(); 152 | this.clearTransferInfo(); 153 | } 154 | }; 155 | 156 | //===Scene_ItemBase=== 157 | 158 | var _Scene_ItemBase_start = Scene_ItemBase.prototype.start; 159 | Scene_ItemBase.prototype.start = function () { 160 | _Scene_ItemBase_start.call(this); 161 | //创建传送点选择窗口 162 | this.mnd_winTeleport = new Window_Teleport(); 163 | this.mnd_winTeleport.hide(); 164 | this.mnd_winTeleport.x = Graphics.width; //移动画面外面去,因为即使隐藏,还是可以被点击到(要显示时MV会自动设置它的位置) 165 | this.mnd_winTeleport.setHandler('teleport', this.onTeleport.bind(this));//向传送点选择窗口注册传送点命令点击事件 166 | this.mnd_winTeleport.setHandler('cancel', this.onTeleportCancelled.bind(this));//取消选择传送点时的操作 167 | this.addWindow(this.mnd_winTeleport); 168 | }; 169 | 170 | var _Scene_ItemBase_determineItem = Scene_ItemBase.prototype.determineItem; 171 | //当玩家使用某项物品或技能时,如果它们的备注中含有""表示它是一个传送物品或技能,则显示传送点选择窗口,以供选择传送点,除此之外仍然使用原方法处理 172 | Scene_ItemBase.prototype.determineItem = function () { 173 | var item = this.item(); 174 | if (item.note.contains("")) { 175 | this.showSubWindow(this.mnd_winTeleport); 176 | } else { 177 | _Scene_ItemBase_determineItem.call(this); 178 | } 179 | }; 180 | 181 | /** 182 | * 对玩家队伍进行传送。在传送点列表选择窗口,玩家点击具体的传送点开始传送时的操作 183 | */ 184 | Scene_ItemBase.prototype.onTeleport = function () { 185 | //如果施用传送功能的物品是可消耗的,则进行消耗处理;如果是传送魔法,则消耗MP值 186 | var item=this.item();//玩家选中的物品或技能(也就是被设置成传送道具或传送技能的物品或技能) 187 | if (DataManager.isItem(item) && item.consumable) {//检查是不是使用的可消耗的传送物品 188 | SoundManager.playUseItem(); //播放物品使用音效 189 | $gameParty.loseItem(item, 1); //物品被消耗 190 | }else if(DataManager.isSkill(item)){//检查是不是使用的传送魔法 191 | SoundManager.playUseSkill(); //播放魔法使用音效 192 | this.user().paySkillCost(item); //消耗MP 193 | } 194 | 195 | this.hideSubWindow(this.mnd_winTeleport);//隐藏传送点选择窗口 196 | SceneManager.goto(Scene_Map);//退回到游戏地图场景 197 | var index = this.mnd_winTeleport.currentExt(); //扩展数据中保存的是传送点在$gameMap.mnd_teleportPlaces中的索引 198 | var teleportPlace = $gameMap._mndTeleportPlaces[index];//获取玩家选择的传送点(目的地)信息 199 | $gamePlayer.gatherFollowers(); //集合队伍 200 | $gamePlayer._animationId = startAnimId; //显示传送动画 201 | //在等待1500毫秒后开始传送,这段时间主要用于等待传送动画显示完毕 202 | setTimeout(function (scene) { 203 | _isTeleporting = true; //用于标志本次传送是由我们自定义的传送道具或技能引起的,在传送完毕时,根据该开关可以作其它操作,比如展示传送完毕的动画 204 | $gamePlayer.reserveTransfer(teleportPlace.mapid, teleportPlace.x, teleportPlace.y, 0, 0); //传送队伍到指定地图的指定位置 205 | }, 1500, SceneManager._nextScene); 206 | }; 207 | var _isTeleporting = false; 208 | /** 209 | * 当玩家取消传送时。在传送点列表选择窗口,右键或按ESC取消时的操作 210 | */ 211 | Scene_ItemBase.prototype.onTeleportCancelled = function () { 212 | this.hideSubWindow(this.mnd_winTeleport); 213 | }; 214 | 215 | //=====Scene_Map===== 216 | 217 | // //临时测试Window_Teleport工作是否正常 218 | // var _Scene_Map_create = Scene_Map.prototype.start; 219 | // Scene_Map.prototype.start = function() { 220 | // _Scene_Map_create.call(this); 221 | // var win=new Window_Teleport(); 222 | // this.addWindow(win); 223 | // }; 224 | 225 | //=====Window_Teleport===== 226 | 227 | function Window_Teleport() { 228 | this.initialize.apply(this, arguments); 229 | } 230 | 231 | Window_Teleport.prototype = Object.create(Window_Command.prototype); 232 | Window_Teleport.prototype.constructor = Window_Teleport; 233 | //窗口宽度 234 | Window_Teleport.prototype.windowWidth = function () { 235 | return 300; 236 | }; 237 | //窗口高度 238 | Window_Teleport.prototype.windowHeight = function () { 239 | return Graphics.height; 240 | }; 241 | //传送点排列时显示的列数 242 | Window_Teleport.prototype.maxCols = function () { 243 | return 1; 244 | }; 245 | //制作菜单项并显示在窗口中 246 | Window_Teleport.prototype.makeCommandList = function () { 247 | for (var index in $gameMap._mndTeleportPlaces) {//处理每个传送点 248 | var teleportPlace = $gameMap._mndTeleportPlaces[index];//获取传送点对象 249 | if (teleportPlace.visible) {//如果传送点是可见的 250 | //将一个传送点以菜单命令方式加入窗口中,所有菜单的标识符都设置为`teleport`,即都绑定到同一个事件处理 251 | //这里将index作为ext数据,这索引表示该传送点在在传送点列表_mndTeleportPlaces中的索引 252 | this.addCommand(teleportPlace.name, 'teleport', teleportPlace.enabled, index); 253 | } 254 | } 255 | }; 256 | 257 | //=====Game_Map===== 258 | 259 | var _Game_Map_initialize = Game_Map.prototype.initialize; 260 | Game_Map.prototype.initialize = function() { 261 | _Game_Map_initialize.call(this); 262 | this._mndTeleportPlaces=[]; //用于保存传送点信息 263 | this._mndTeleportUnableMaps={}; //用于保存禁止使用传送功能的地图信息 264 | }; 265 | 266 | var _Game_Map_setup = Game_Map.prototype.setup; 267 | Game_Map.prototype.setup = function(mapId) { 268 | _Game_Map_setup.call(this, mapId); 269 | 270 | if($dataMap.note.contains("")){ //表示该地图不允许使用传送道具或技能 271 | if(this._mndTeleportUnableMaps[this.mapId()]==undefined) 272 | this.mndSetMapTeleportEnabled(this.mapId(), false); 273 | } 274 | if ($dataMap.note.contains("”,包含了多个传送点的数据,它们之间用半角分号空格分隔 278 | //每个传送点信息,如:“11 3 0 1 世界之源:起点”,包含了传送点的多个数据,它们之间用空格分隔,将这些数据分割出来 279 | var sTeleportInfos = sTeleports.split(";").filter(function (t) { return t != "" });//分解出多个传送点;filter用于过滤掉空白字符串 280 | sTeleportInfos.forEach(function (sTeleportInfo) {//处理每个传送点信息 281 | var sProps = sTeleportInfo.split(" ").filter(function (t) { return t != ""; }); 282 | var x = Number(sProps[0]);//传送点x坐标 283 | var y = Number(sProps[1]);//传送点y坐标 284 | var index=this.mndIndexOfTeleportPlace(mapid, x, y);//检查该传送点是否已经存在 285 | if (index < 0) {//如果不存在,就将该传送点保存起来 286 | var enabled = sProps[2] == undefined ? true : Boolean(Number(sProps[2]));//传送点是否启用 287 | var visible = sProps[3] == undefined ? true : Boolean(Number(sProps[3]));//传送点是否可见 288 | var name = sProps[4] || $dataMapInfos[mapid].name;//传送点的名称,如果未定义,则使用地图的名称 289 | this.mndRegisterTeleportPlace(mapid, x, y, enabled, visible, name);//将传送点信息保存下来 290 | } 291 | }, this); 292 | } 293 | }; 294 | Game_Map.prototype.mndIndexOfTeleportPlace=function(mapid, x, y) { 295 | if(this._mndTeleportPlaces==undefined) return -1; 296 | for (var index in this._mndTeleportPlaces) { 297 | var place = this._mndTeleportPlaces[index]; 298 | if (place.mapid == mapid && place.x == x && place.y == y) { 299 | return index; 300 | } 301 | } 302 | return -1; 303 | } 304 | Game_Map.prototype.mndRegisterTeleportPlace=function(mapid, x, y, enabled, visible, name) { 305 | if(this._mndTeleportPlaces==undefined) this._mndTeleportPlaces=[];//如果_mndTeleportPlaces不可用,则重新初始化 306 | if(this.mndIndexOfTeleportPlace(mapid, x, y)<0) {//只当传送点未登记时才保存 307 | this._mndTeleportPlaces.push({ 308 | mapid: mapid, 309 | x: x, 310 | y: y, 311 | name: name, 312 | enabled: enabled, 313 | visible: visible 314 | }); 315 | }else{//已经登记的传送点则修改其可用性和可见性 316 | this.mndSetTeleportPlaceEnabled(mapid, x, y, enabled, visible); 317 | } 318 | } 319 | 320 | /** 321 | * 设置当前游戏地图是否启用传送功能,如果关闭,角色在相应地图中将不能使用传送道具和传送技能 322 | * @param enabled 323 | */ 324 | Game_Map.prototype.mndSetMapTeleportEnabled=function(mapid, enabled){ 325 | if(this._mndTeleportUnableMaps==undefined) this._mndTeleportUnableMaps={}; 326 | if(enabled) { 327 | //没有记录在_mndTeleportUnableMaps中的地图肯定是允许使用传送道具和技能的,但如果一个地图已经记录在 328 | //_mndTeleportUnableMaps中,则不管它现在的状态是允许还是禁止,都不能简单的一删了之,这个状态必须一 329 | //直记录在案,因为如果一个地图,一开始备注中写入了 代码,表示禁止使用传送功能,但通过插件 330 | //命令将它启用了,如果此时直接从禁止列表中删除,在重新进入该地图时又会被读到 标记,从而又 331 | //会被重新设置为禁止传送的状态,为了防止这种情况,所以状态必须保存下来。所以当_mndTeleportUnableMaps 332 | //中已经有地图信息时,只要修改它的值,而不是去删除它 333 | if(this._mndTeleportUnableMaps[mapid]!=undefined) 334 | this._mndTeleportUnableMaps[mapid]=false; 335 | }else{ 336 | //当要禁止地图使用传送功能时,只要将mapid以key方式添加到_mndTeleportUnableMaps中,并将 337 | //其值设置为true表示禁止使用(以后,可以用插件命令将它设置为true或false)。 338 | this._mndTeleportUnableMaps[mapid]=true; 339 | } 340 | } 341 | /** 342 | * 查询指定地图是否允许使用传送道具或技能 343 | * @param mapid 地图ID 344 | * @returns {boolean} 345 | */ 346 | Game_Map.prototype.mndIsMapTeleportEnabled=function (mapid) { 347 | //当地图未在_mndTeleportUnableMaps记录或者记录值为false时表示地图允许使用传送道具和技能 348 | if(this._mndTeleportUnableMaps==undefined) return true; 349 | else return !!!this._mndTeleportUnableMaps[mapid];//相当于:else return this._mndTeleportUnableMaps[mapid]==undefined || this._mndTeleportUnableMaps[mapid]==false; 350 | } 351 | 352 | /** 353 | * 删除记录的传送点 354 | * @param mapid 传送点所在地图id 355 | * @param x 传送点X坐标 356 | * @param y 传送点Y坐标 357 | */ 358 | Game_Map.prototype.mndRemoveTelleportPlace=function(mapid, x, y) { 359 | var index = this.mndIndexOfTeleportPlace(mapid, x, y); 360 | if (index >= 0) { 361 | this._mndTeleportPlaces.splice(index, 1); 362 | } 363 | } 364 | /** 365 | * 设置传送点的显示或隐藏,启用或禁用状态 366 | * @param mapid 传送点所在地图id 367 | * @param x 传送点X坐标 368 | * @param y 传送点Y坐标 369 | * @param enabled 是否允许传送到该传送点 370 | * @param visible 是否显示在传送地选择列表中 371 | */ 372 | Game_Map.prototype.mndSetTeleportPlaceEnabled=function(mapid, x, y, enabled, visible) { 373 | var index = this.mndIndexOfTeleportPlace(mapid, x, y); 374 | if (index >= 0) { 375 | this._mndTeleportPlaces[index].enabled = enabled; 376 | this._mndTeleportPlaces[index].visible = visible; 377 | } 378 | } 379 | 380 | })(); -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/js/plugins/LEARN_Teleport.js: -------------------------------------------------------------------------------- 1 | //============================== 2 | // LEARN_Teleport.js 3 | // Copyright (c) 2017 Mandarava 4 | //============================== 5 | 6 | /*: 7 | * @plugindesc 用于制作传送道具和传送技能。(v1.0) 8 | * @author Mandarava(鳗驼螺) 9 | * @version 1.0.1 修复在物品菜单界面在空白处点击二次时可能会造成自动运行传送功能的问题,原因是传送点选取窗虽然隐藏了但它其实还能被点击到 10 | * 11 | * @param Teleport Start AnimationId 12 | * @text 传送开始动画 13 | * @desc 传送开始时要显示的动画 14 | * @type animation 15 | * @default 117 16 | * 17 | * @param Teleport End AnimationId 18 | * @text 传送完成动画 19 | * @desc 传送完成时要显示的动画 20 | * @type animation 21 | * @default 120 22 | * 23 | * @help 24 | * 本插件用于将物品、技能设置为传送道具或传送技能。物品支持可消耗物品或不可消耗 25 | * 物品,技能使用可消耗魔法。物品或技能添加传送功能后,其其它效果将被忽略,技能 26 | * 本身的动画也会被忽略。 27 | * 28 | * 使用方法: 29 | * 30 | * 一. 将物品、技能设置为传送道具或传送技能 31 | * 在需要添加传送功能的物品或技能备注中添加代码: 32 | * 33 | * 二. 通过地图备注登记传送点(非必要) 34 | * 你可以直接在地图的 地图属性-备注 中添加特定代码来登记该地图中的传送点信息, 35 | * 但是注意,这些登记的传送点只有当主角进入该地图时才会被自动激活,换句话说,如 36 | * 果主角没有进入过该地图,那么这些传送点不会显示在传送点列表中。 37 | * PS:这个操作不是必要的,你也可以使用插件命令来手动登记传送点。 38 | * 39 | * 1. 传送点登记格式: 40 | * x : 传送点在地图中的X坐标 41 | * y : 传送点在地图中的Y坐标 42 | * enabled : 可选,是否启用传送点,默认启用;可选值:1表示启用,0表示不启用。 43 | * visible : 可选,是否在传送点列表中显示该传送点,默认显示;可选值:1表示启用,0表示不启用。 44 | * name : 可选,传送点名称,如果不提供,默认使用地图的显示名称或地图名称。 45 | * [;...] : 可选,表示其它传送点信息。当一个地图有多个传送点时,多个传送点信息之间用;号隔开。 46 | * 47 | * 2. 传送点登记格式示例: 48 | * //传送点坐标为(8,10);启用并显示传送点;传送点名称使用地图名称。 49 | * //传送点坐标为(8,10);禁用但显示传送点;传送点名称使用地图名称。 50 | * //传送点坐标为(8,10);启用并显示传送点;传送点名称为“新起点” 51 | * //二个传送点:一个坐标在(8,10),名称为“新起点”,另一个坐标在(12,13),名称为“垃圾堆”。 52 | * 53 | * 三、通过地图备注禁止当前地图使用传送功能(非必要) 54 | * 如果某些地图不允许使用传送功能(如特定的山洞),你可以在地图的 地图属性-备注 55 | * 中添加特定代码来注明该地图禁止使用传送道具或传送技能。 56 | * PS:这个操作不是必要的,你也可以使用插件命令来手动禁止。 57 | * 58 | * 登记格式: 59 | * 60 | * 四、插件命令 61 | * 62 | * 1. 登记传送点 63 | * 如果已经登记过,则会修改传送点的启用性(enabled)和可见性(visible),所以不论是登记还是修改传送点信息都可以只用该方法来操作。 64 | * 命令格式:registerTeleportPlace mapid x y [enabled] [visible] [name] 65 | * mapid : 地图的ID 66 | * x : 传送点在地图的X坐标 67 | * y : 传送点在地图的Y坐标 68 | * enalbed : 可选,是否启用传送点,默认启用;可选值:1表示启用,0表示不启用。 69 | * visible : 可选,是否在传送点列表中显示该传送点,默认显示;可选值:1表示启用,0表示不启用。 70 | * name : 可选,传送点名称,如果不提供,默认使用地图名称。 71 | * 72 | * 2. 删除传送点 73 | * 命令格式:removeTeleportPlace mapid x y 74 | * mapid : 地图的ID 75 | * x : 传送点在地图的X坐标 76 | * y : 传送点在地图的Y坐标 77 | * 78 | * 3. 设置传送点的启用、显示状态 79 | * 如果传送点未登记,则操作会忽略;建议使用mndAddTeleportPlace命令来修改。 80 | * 命令格式:setTeleportPlaceEnabled mapid x y enabled visible 81 | * mapid : 地图的ID 82 | * x : 传送点在地图的X坐标 83 | * y : 传送点在地图的Y坐标 84 | * enalbed : 是否启用传送点,可选值:1表示启用,0表示不启用。 85 | * visible : 是否在传送点列表中显示该传送点,可选值:1表示启用,0表示不启用。 86 | * 87 | * 4. 设置当前地图允许或禁止使用传送道具或传送技能 88 | * 命令格式:setMapTeleportEnabled enabled 89 | * enabled : 是否启用传送功能 90 | */ 91 | 92 | (function(){ 93 | 94 | //=====Plugin Command===== 95 | 96 | var params = PluginManager.parameters("LEARN_Teleport"); 97 | var startAnimId = Number(params["Teleport Start AnimationId"]) || 117; 98 | var endAnimId = Number(params["Teleport End AnimationId"]) || 120; 99 | 100 | var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; 101 | Game_Interpreter.prototype.pluginCommand = function (command, args) { 102 | _Game_Interpreter_pluginCommand.call(this, command, args); 103 | 104 | switch (command) { 105 | case "registerTeleportPlace"://插件命令格式:registerTeleportPlace mapid x y [enabled] [visible] [name] 106 | var mapid = Number(args[0]); 107 | var enabled = args[3] == undefined ? true : Boolean(Number(args[3])); 108 | var visible = args[4] == undefined ? true : Boolean(Number(args[4])); 109 | var name = args[5] || $dataMapInfos[mapid].name; 110 | $gameMap.mndRegisterTeleportPlace(mapid, Number(args[1]), Number(args[2]), enabled, visible, name); 111 | break; 112 | case "removeTeleportPlace"://插件命令格式:removeTeleportPlace mapid x y 113 | $gameMap.mndRemoveTelleportPlace(Number(args[0]), Number(args[1]), Number(args[2])); 114 | break; 115 | case "setTeleportPlaceEnabled"://插件命令格式:setTeleportPlaceEnabled mapid x y enabled visible 116 | $gameMap.mndSetTeleportPlaceEnabled(Number(args[0]), Number(args[1]), Number(args[2]), Boolean(Number(args[3])), Boolean(Number(args[4]))); 117 | break; 118 | case "setMapTeleportEnabled"://插件命令格式:setMapTeleportEnabled enabled 119 | $gameMap.mndSetMapTeleportEnabled($gameMap.mapId(), Boolean(Number(args[0]))); 120 | default: 121 | break; 122 | } 123 | } 124 | 125 | //=====Game_BattlerBase===== 126 | 127 | //所有备注中含有""的物品、技能在禁止传送的地图或在战斗中都不能使用 128 | var _Game_BattlerBase_meetsUsableItemConditions=Game_BattlerBase.prototype.meetsUsableItemConditions; 129 | Game_BattlerBase.prototype.meetsUsableItemConditions = function(item) { 130 | if((!$gameMap.mndIsMapTeleportEnabled($gameMap.mapId()) || $gameParty.inBattle()) && item.note.contains("")) return false; 131 | else return _Game_BattlerBase_meetsUsableItemConditions.call(this, item); 132 | }; 133 | 134 | //===Game_Player=== 135 | 136 | //在传送到了新地点后,添加一个传送完成的动画,用_isTeleporting来区分是否由传送器造成的传送效果,只有是的情况下才会允许展示该动画 137 | Game_Player.prototype.performTransfer = function () { 138 | if (this.isTransferring()) { 139 | this.setDirection(this._newDirection); 140 | if (this._newMapId !== $gameMap.mapId() || this._needsMapReload) { 141 | $gameMap.setup(this._newMapId); 142 | this._needsMapReload = false; 143 | } 144 | this.locate(this._newX, this._newY); 145 | 146 | if (_isTeleporting) { 147 | $gamePlayer._animationId = endAnimId; 148 | _isTeleporting = false; 149 | } 150 | 151 | this.refresh(); 152 | this.clearTransferInfo(); 153 | } 154 | }; 155 | 156 | //===Scene_ItemBase=== 157 | 158 | var _Scene_ItemBase_start = Scene_ItemBase.prototype.start; 159 | Scene_ItemBase.prototype.start = function () { 160 | _Scene_ItemBase_start.call(this); 161 | //创建传送点选择窗口 162 | this.mnd_winTeleport = new Window_Teleport(); 163 | this.mnd_winTeleport.hide(); 164 | this.mnd_winTeleport.x = Graphics.width; //移动画面外面去,因为即使隐藏,还是可以被点击到(要显示时MV会自动设置它的位置) 165 | this.mnd_winTeleport.setHandler('teleport', this.onTeleport.bind(this));//向传送点选择窗口注册传送点命令点击事件 166 | this.mnd_winTeleport.setHandler('cancel', this.onTeleportCancelled.bind(this));//取消选择传送点时的操作 167 | this.addWindow(this.mnd_winTeleport); 168 | }; 169 | 170 | var _Scene_ItemBase_determineItem = Scene_ItemBase.prototype.determineItem; 171 | //当玩家使用某项物品或技能时,如果它们的备注中含有""表示它是一个传送物品或技能,则显示传送点选择窗口,以供选择传送点,除此之外仍然使用原方法处理 172 | Scene_ItemBase.prototype.determineItem = function () { 173 | var item = this.item(); 174 | if (item.note.contains("")) { 175 | this.showSubWindow(this.mnd_winTeleport); 176 | } else { 177 | _Scene_ItemBase_determineItem.call(this); 178 | } 179 | }; 180 | 181 | /** 182 | * 对玩家队伍进行传送。在传送点列表选择窗口,玩家点击具体的传送点开始传送时的操作 183 | */ 184 | Scene_ItemBase.prototype.onTeleport = function () { 185 | //如果施用传送功能的物品是可消耗的,则进行消耗处理;如果是传送魔法,则消耗MP值 186 | var item=this.item();//玩家选中的物品或技能(也就是被设置成传送道具或传送技能的物品或技能) 187 | if (DataManager.isItem(item) && item.consumable) {//检查是不是使用的可消耗的传送物品 188 | SoundManager.playUseItem(); //播放物品使用音效 189 | $gameParty.loseItem(item, 1); //物品被消耗 190 | }else if(DataManager.isSkill(item)){//检查是不是使用的传送魔法 191 | SoundManager.playUseSkill(); //播放魔法使用音效 192 | this.user().paySkillCost(item); //消耗MP 193 | } 194 | 195 | this.hideSubWindow(this.mnd_winTeleport);//隐藏传送点选择窗口 196 | SceneManager.goto(Scene_Map);//退回到游戏地图场景 197 | var index = this.mnd_winTeleport.currentExt(); //扩展数据中保存的是传送点在$gameMap.mnd_teleportPlaces中的索引 198 | var teleportPlace = $gameMap._mndTeleportPlaces[index];//获取玩家选择的传送点(目的地)信息 199 | $gamePlayer.gatherFollowers(); //集合队伍 200 | $gamePlayer._animationId = startAnimId; //显示传送动画 201 | //在等待1500毫秒后开始传送,这段时间主要用于等待传送动画显示完毕 202 | setTimeout(function (scene) { 203 | _isTeleporting = true; //用于标志本次传送是由我们自定义的传送道具或技能引起的,在传送完毕时,根据该开关可以作其它操作,比如展示传送完毕的动画 204 | $gamePlayer.reserveTransfer(teleportPlace.mapid, teleportPlace.x, teleportPlace.y, 0, 0); //传送队伍到指定地图的指定位置 205 | }, 1500, SceneManager._nextScene); 206 | }; 207 | var _isTeleporting = false; 208 | /** 209 | * 当玩家取消传送时。在传送点列表选择窗口,右键或按ESC取消时的操作 210 | */ 211 | Scene_ItemBase.prototype.onTeleportCancelled = function () { 212 | this.hideSubWindow(this.mnd_winTeleport); 213 | }; 214 | 215 | //=====Scene_Map===== 216 | 217 | // //临时测试Window_Teleport工作是否正常 218 | // var _Scene_Map_create = Scene_Map.prototype.start; 219 | // Scene_Map.prototype.start = function() { 220 | // _Scene_Map_create.call(this); 221 | // var win=new Window_Teleport(); 222 | // this.addWindow(win); 223 | // }; 224 | 225 | //=====Window_Teleport===== 226 | 227 | function Window_Teleport() { 228 | this.initialize.apply(this, arguments); 229 | } 230 | 231 | Window_Teleport.prototype = Object.create(Window_Command.prototype); 232 | Window_Teleport.prototype.constructor = Window_Teleport; 233 | //窗口宽度 234 | Window_Teleport.prototype.windowWidth = function () { 235 | return 300; 236 | }; 237 | //窗口高度 238 | Window_Teleport.prototype.windowHeight = function () { 239 | return Graphics.height; 240 | }; 241 | //传送点排列时显示的列数 242 | Window_Teleport.prototype.maxCols = function () { 243 | return 1; 244 | }; 245 | //制作菜单项并显示在窗口中 246 | Window_Teleport.prototype.makeCommandList = function () { 247 | for (var index in $gameMap._mndTeleportPlaces) {//处理每个传送点 248 | var teleportPlace = $gameMap._mndTeleportPlaces[index];//获取传送点对象 249 | if (teleportPlace.visible) {//如果传送点是可见的 250 | //将一个传送点以菜单命令方式加入窗口中,所有菜单的标识符都设置为`teleport`,即都绑定到同一个事件处理 251 | //这里将index作为ext数据,这索引表示该传送点在在传送点列表_mndTeleportPlaces中的索引 252 | this.addCommand(teleportPlace.name, 'teleport', teleportPlace.enabled, index); 253 | } 254 | } 255 | }; 256 | 257 | //=====Game_Map===== 258 | 259 | var _Game_Map_initialize = Game_Map.prototype.initialize; 260 | Game_Map.prototype.initialize = function() { 261 | _Game_Map_initialize.call(this); 262 | this._mndTeleportPlaces=[]; //用于保存传送点信息 263 | this._mndTeleportUnableMaps={}; //用于保存禁止使用传送功能的地图信息 264 | }; 265 | 266 | var _Game_Map_setup = Game_Map.prototype.setup; 267 | Game_Map.prototype.setup = function(mapId) { 268 | _Game_Map_setup.call(this, mapId); 269 | 270 | if($dataMap.note.contains("")){ //表示该地图不允许使用传送道具或技能 271 | if(this._mndTeleportUnableMaps[this.mapId()]==undefined) 272 | this.mndSetMapTeleportEnabled(this.mapId(), false); 273 | } 274 | if ($dataMap.note.contains("”,包含了多个传送点的数据,它们之间用半角分号空格分隔 278 | //每个传送点信息,如:“11 3 0 1 世界之源:起点”,包含了传送点的多个数据,它们之间用空格分隔,将这些数据分割出来 279 | var sTeleportInfos = sTeleports.split(";").filter(function (t) { return t != "" });//分解出多个传送点;filter用于过滤掉空白字符串 280 | sTeleportInfos.forEach(function (sTeleportInfo) {//处理每个传送点信息 281 | var sProps = sTeleportInfo.split(" ").filter(function (t) { return t != ""; }); 282 | var x = Number(sProps[0]);//传送点x坐标 283 | var y = Number(sProps[1]);//传送点y坐标 284 | var index=this.mndIndexOfTeleportPlace(mapid, x, y);//检查该传送点是否已经存在 285 | if (index < 0) {//如果不存在,就将该传送点保存起来 286 | var enabled = sProps[2] == undefined ? true : Boolean(Number(sProps[2]));//传送点是否启用 287 | var visible = sProps[3] == undefined ? true : Boolean(Number(sProps[3]));//传送点是否可见 288 | var name = sProps[4] || $dataMapInfos[mapid].name;//传送点的名称,如果未定义,则使用地图的名称 289 | this.mndRegisterTeleportPlace(mapid, x, y, enabled, visible, name);//将传送点信息保存下来 290 | } 291 | }, this); 292 | } 293 | }; 294 | Game_Map.prototype.mndIndexOfTeleportPlace=function(mapid, x, y) { 295 | if(this._mndTeleportPlaces==undefined) return -1; 296 | for (var index in this._mndTeleportPlaces) { 297 | var place = this._mndTeleportPlaces[index]; 298 | if (place.mapid == mapid && place.x == x && place.y == y) { 299 | return index; 300 | } 301 | } 302 | return -1; 303 | } 304 | Game_Map.prototype.mndRegisterTeleportPlace=function(mapid, x, y, enabled, visible, name) { 305 | if(this._mndTeleportPlaces==undefined) this._mndTeleportPlaces=[];//如果_mndTeleportPlaces不可用,则重新初始化 306 | if(this.mndIndexOfTeleportPlace(mapid, x, y)<0) {//只当传送点未登记时才保存 307 | this._mndTeleportPlaces.push({ 308 | mapid: mapid, 309 | x: x, 310 | y: y, 311 | name: name, 312 | enabled: enabled, 313 | visible: visible 314 | }); 315 | }else{//已经登记的传送点则修改其可用性和可见性 316 | this.mndSetTeleportPlaceEnabled(mapid, x, y, enabled, visible); 317 | } 318 | } 319 | 320 | /** 321 | * 设置当前游戏地图是否启用传送功能,如果关闭,角色在相应地图中将不能使用传送道具和传送技能 322 | * @param enabled 323 | */ 324 | Game_Map.prototype.mndSetMapTeleportEnabled=function(mapid, enabled){ 325 | if(this._mndTeleportUnableMaps==undefined) this._mndTeleportUnableMaps={}; 326 | if(enabled) { 327 | //没有记录在_mndTeleportUnableMaps中的地图肯定是允许使用传送道具和技能的,但如果一个地图已经记录在 328 | //_mndTeleportUnableMaps中,则不管它现在的状态是允许还是禁止,都不能简单的一删了之,这个状态必须一 329 | //直记录在案,因为如果一个地图,一开始备注中写入了 代码,表示禁止使用传送功能,但通过插件 330 | //命令将它启用了,如果此时直接从禁止列表中删除,在重新进入该地图时又会被读到 标记,从而又 331 | //会被重新设置为禁止传送的状态,为了防止这种情况,所以状态必须保存下来。所以当_mndTeleportUnableMaps 332 | //中已经有地图信息时,只要修改它的值,而不是去删除它 333 | if(this._mndTeleportUnableMaps[mapid]!=undefined) 334 | this._mndTeleportUnableMaps[mapid]=false; 335 | }else{ 336 | //当要禁止地图使用传送功能时,只要将mapid以key方式添加到_mndTeleportUnableMaps中,并将 337 | //其值设置为true表示禁止使用(以后,可以用插件命令将它设置为true或false)。 338 | this._mndTeleportUnableMaps[mapid]=true; 339 | } 340 | } 341 | /** 342 | * 查询指定地图是否允许使用传送道具或技能 343 | * @param mapid 地图ID 344 | * @returns {boolean} 345 | */ 346 | Game_Map.prototype.mndIsMapTeleportEnabled=function (mapid) { 347 | //当地图未在_mndTeleportUnableMaps记录或者记录值为false时表示地图允许使用传送道具和技能 348 | if(this._mndTeleportUnableMaps==undefined) return true; 349 | else return !!!this._mndTeleportUnableMaps[mapid];//相当于:else return this._mndTeleportUnableMaps[mapid]==undefined || this._mndTeleportUnableMaps[mapid]==false; 350 | } 351 | 352 | /** 353 | * 删除记录的传送点 354 | * @param mapid 传送点所在地图id 355 | * @param x 传送点X坐标 356 | * @param y 传送点Y坐标 357 | */ 358 | Game_Map.prototype.mndRemoveTelleportPlace=function(mapid, x, y) { 359 | var index = this.mndIndexOfTeleportPlace(mapid, x, y); 360 | if (index >= 0) { 361 | this._mndTeleportPlaces.splice(index, 1); 362 | } 363 | } 364 | /** 365 | * 设置传送点的显示或隐藏,启用或禁用状态 366 | * @param mapid 传送点所在地图id 367 | * @param x 传送点X坐标 368 | * @param y 传送点Y坐标 369 | * @param enabled 是否允许传送到该传送点 370 | * @param visible 是否显示在传送地选择列表中 371 | */ 372 | Game_Map.prototype.mndSetTeleportPlaceEnabled=function(mapid, x, y, enabled, visible) { 373 | var index = this.mndIndexOfTeleportPlace(mapid, x, y); 374 | if (index >= 0) { 375 | this._mndTeleportPlaces[index].enabled = enabled; 376 | this._mndTeleportPlaces[index].visible = visible; 377 | } 378 | } 379 | 380 | })(); -------------------------------------------------------------------------------- /indie/MND_MenuBackground.js: -------------------------------------------------------------------------------- 1 | //============================================ 2 | // MND_MenuBackground.js 3 | //============================================ 4 | 5 | /*: 6 | * @plugindesc 设置各个菜单界面的背景图片,支持动态滚动。(v1.0) 7 | * @author Mandarava(鳗驼螺) 8 | * 9 | * ===============Menu Background=============== 10 | * @param Menu Background 11 | * @desc 主菜单背景 12 | * @type file 13 | * @dir img/parallaxes 14 | * 15 | * @param Horizontal Scroll Speed of Menu Background 16 | * @parent Menu Background 17 | * @text Horizontal Scroll Speed 18 | * @desc 主菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 19 | * @type number 20 | * @min -20 21 | * @max 20 22 | * @default 0 23 | * 24 | * @param Vertical Scroll Speed of Menu Background 25 | * @parent Menu Background 26 | * @text Vertical Scroll Speed 27 | * @desc 主菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 28 | * @type number 29 | * @min -20 30 | * @max 20 31 | * @default 0 32 | * 33 | * ===============Item Background=============== 34 | * @param Item Background 35 | * @desc 物品菜单背景 36 | * @type file 37 | * @dir img/parallaxes 38 | * 39 | * @param Horizontal Scroll Speed of Item Background 40 | * @parent Item Background 41 | * @text Horizontal Scroll Speed 42 | * @desc 物品菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 43 | * @type number 44 | * @min -20 45 | * @max 20 46 | * @default 0 47 | * 48 | * @param Vertical Scroll Speed of Item Background 49 | * @parent Item Background 50 | * @text Vertical Scroll Speed 51 | * @desc 物品菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 52 | * @type number 53 | * @min -20 54 | * @max 20 55 | * @default 0 56 | * 57 | * ===============Skill Background=============== 58 | * @param Skill Background 59 | * @desc 技能菜单背景 60 | * @type file 61 | * @dir img/parallaxes 62 | * 63 | * @param Horizontal Scroll Speed of Skill Background 64 | * @parent Skill Background 65 | * @text Horizontal Scroll Speed 66 | * @desc 物品菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 67 | * @type number 68 | * @min -20 69 | * @max 20 70 | * @default 0 71 | * 72 | * @param Vertical Scroll Speed of Skill Background 73 | * @parent Skill Background 74 | * @text Vertical Scroll Speed 75 | * @desc 物品菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 76 | * @type number 77 | * @min -20 78 | * @max 20 79 | * @default 0 80 | * 81 | * ===============Equip Background=============== 82 | * @param Equip Background 83 | * @desc 装备菜单背景 84 | * @type file 85 | * @dir img/parallaxes 86 | * 87 | * @param Horizontal Scroll Speed of Equip Background 88 | * @parent Equip Background 89 | * @text Horizontal Scroll Speed 90 | * @desc 装备菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 91 | * @type number 92 | * @min -20 93 | * @max 20 94 | * @default 0 95 | * 96 | * @param Vertical Scroll Speed of Equip Background 97 | * @parent Equip Background 98 | * @text Vertical Scroll Speed 99 | * @desc 装备菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 100 | * @type number 101 | * @min -20 102 | * @max 20 103 | * @default 0 104 | * 105 | * ===============Status Background=============== 106 | * @param Status Background 107 | * @desc 状态菜单背景 108 | * @type file 109 | * @dir img/parallaxes 110 | * 111 | * @param Horizontal Scroll Speed of Status Background 112 | * @parent Status Background 113 | * @text Horizontal Scroll Speed 114 | * @desc 状态菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 115 | * @type number 116 | * @min -20 117 | * @max 20 118 | * @default 0 119 | * 120 | * @param Vertical Scroll Speed of Status Background 121 | * @parent Status Background 122 | * @text Vertical Scroll Speed 123 | * @desc 状态菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 124 | * @type number 125 | * @min -20 126 | * @max 20 127 | * @default 0 128 | * 129 | * ===============Options Background=============== 130 | * @param Options Background 131 | * @desc 选项菜单背景 132 | * @type file 133 | * @dir img/parallaxes 134 | * 135 | * @param Horizontal Scroll Speed of Options Background 136 | * @parent Options Background 137 | * @text Horizontal Scroll Speed 138 | * @desc 选项菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 139 | * @type number 140 | * @min -20 141 | * @max 20 142 | * @default 0 143 | * 144 | * @param Vertical Scroll Speed of Options Background 145 | * @parent Options Background 146 | * @text Vertical Scroll Speed 147 | * @desc 选项菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 148 | * @type number 149 | * @min -20 150 | * @max 20 151 | * @default 0 152 | * 153 | * ===============Save & Load Background=============== 154 | * @param Save & Load Background 155 | * @desc 保存/加载菜单背景 156 | * @type file 157 | * @dir img/parallaxes 158 | * 159 | * @param Horizontal Scroll Speed of Save & Load Background 160 | * @parent Save & Load Background 161 | * @text Horizontal Scroll Speed 162 | * @desc 保存/加载菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 163 | * @type number 164 | * @min -20 165 | * @max 20 166 | * @default 0 167 | * 168 | * @param Vertical Scroll Speed of Save & Load Background 169 | * @parent Save & Load Background 170 | * @text Vertical Scroll Speed 171 | * @desc 保存/加载菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 172 | * @type number 173 | * @min -20 174 | * @max 20 175 | * @default 0 176 | * 177 | * ===============Shop Background=============== 178 | * @param Shop Background 179 | * @desc 商店菜单背景 180 | * @type file 181 | * @dir img/parallaxes 182 | * 183 | * @param Horizontal Scroll Speed of Shop Background 184 | * @parent Shop Background 185 | * @text Horizontal Scroll Speed 186 | * @desc 商店菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 187 | * @type number 188 | * @min -20 189 | * @max 20 190 | * @default 0 191 | * 192 | * @param Vertical Scroll Speed of Shop Background 193 | * @parent Shop Background 194 | * @text Vertical Scroll Speed 195 | * @desc 商店菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 196 | * @type number 197 | * @min -20 198 | * @max 20 199 | * @default 0 200 | * 201 | * ===============GameEnd Background=============== 202 | * @param GameEnd Background 203 | * @desc 结束游戏菜单背景 204 | * @type file 205 | * @dir img/parallaxes 206 | * 207 | * @param Horizontal Scroll Speed of GameEnd Background 208 | * @parent GameEnd Background 209 | * @text Horizontal Scroll Speed 210 | * @desc 结束游戏菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 211 | * @type number 212 | * @min -20 213 | * @max 20 214 | * @default 0 215 | * 216 | * @param Vertical Scroll Speed of GameEnd Background 217 | * @parent GameEnd Background 218 | * @text Vertical Scroll Speed 219 | * @desc 结束游戏菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 220 | * @type number 221 | * @min -20 222 | * @max 20 223 | * @default 0 224 | * 225 | * ===============Name Background=============== 226 | * @param Name Background 227 | * @desc 改名菜单背景 228 | * @type file 229 | * @dir img/parallaxes 230 | * 231 | * @param Horizontal Scroll Speed of Name Background 232 | * @parent Name Background 233 | * @text Horizontal Scroll Speed 234 | * @desc 改名菜单背景水平滚动速度,范围-20~20;负数:向左滚动,正数:向右滚动,0:禁止滚动。 235 | * @type number 236 | * @min -20 237 | * @max 20 238 | * @default 0 239 | * 240 | * @param Vertical Scroll Speed of Name Background 241 | * @parent Name Background 242 | * @text Vertical Scroll Speed 243 | * @desc 改名菜单背景垂直滚动速度,范围-20~20;负数:向上滚动,正数:向下滚动,0:禁止滚动。 244 | * @type number 245 | * @min -20 246 | * @max 20 247 | * @default 0 248 | * 249 | * ===============Debug Background=============== 250 | * 忽略... 251 | */ 252 | 253 | (function ($) { 254 | 255 | var Mandarava = Mandarava || {}; 256 | Mandarava.MenuBackground = Mandarava.MenuBackground || {}; 257 | Mandarava.MenuBackground.Parameters = PluginManager.parameters("MND_MenuBackground"); 258 | 259 | Mandarava.MenuBackground.Menu = Mandarava.MenuBackground.Menu || {}; 260 | Mandarava.MenuBackground.Menu.Image = Mandarava.MenuBackground.Parameters["Menu Background"]; 261 | Mandarava.MenuBackground.Menu.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of Menu Background"]) || 0; 262 | Mandarava.MenuBackground.Menu.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of Menu Background"]) || 0; 263 | 264 | Mandarava.MenuBackground.Item = Mandarava.MenuBackground.Item || {}; 265 | Mandarava.MenuBackground.Item.Image = Mandarava.MenuBackground.Parameters["Item Background"]; 266 | Mandarava.MenuBackground.Item.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of Item Background"]) || 0; 267 | Mandarava.MenuBackground.Item.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of Item Background"]) || 0; 268 | 269 | Mandarava.MenuBackground.Skill = Mandarava.MenuBackground.Skill || {}; 270 | Mandarava.MenuBackground.Skill.Image = Mandarava.MenuBackground.Parameters["Skill Background"]; 271 | Mandarava.MenuBackground.Skill.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of Skill Background"]) || 0; 272 | Mandarava.MenuBackground.Skill.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of Skill Background"]) || 0; 273 | 274 | Mandarava.MenuBackground.Equip = Mandarava.MenuBackground.Equip || {}; 275 | Mandarava.MenuBackground.Equip.Image = Mandarava.MenuBackground.Parameters["Equip Background"]; 276 | Mandarava.MenuBackground.Equip.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of Equip Background"]) || 0; 277 | Mandarava.MenuBackground.Equip.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of Equip Background"]) || 0; 278 | 279 | Mandarava.MenuBackground.Status = Mandarava.MenuBackground.Status || {}; 280 | Mandarava.MenuBackground.Status.Image = Mandarava.MenuBackground.Parameters["Status Background"]; 281 | Mandarava.MenuBackground.Status.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of Status Background"]) || 0; 282 | Mandarava.MenuBackground.Status.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of Status Background"]) || 0; 283 | 284 | Mandarava.MenuBackground.Options = Mandarava.MenuBackground.Options || {}; 285 | Mandarava.MenuBackground.Options.Image = Mandarava.MenuBackground.Parameters["Options Background"]; 286 | Mandarava.MenuBackground.Options.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of Options Background"]) || 0; 287 | Mandarava.MenuBackground.Options.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of Options Background"]) || 0; 288 | 289 | Mandarava.MenuBackground.SaveLoad = Mandarava.MenuBackground.SaveLoad || {}; 290 | Mandarava.MenuBackground.SaveLoad.Image = Mandarava.MenuBackground.Parameters["Save & Load Background"]; 291 | Mandarava.MenuBackground.SaveLoad.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of Save & Load Background"]) || 0; 292 | Mandarava.MenuBackground.SaveLoad.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of Save & Load Background"]) || 0; 293 | 294 | Mandarava.MenuBackground.Shop = Mandarava.MenuBackground.Shop || {}; 295 | Mandarava.MenuBackground.Shop.Image = Mandarava.MenuBackground.Parameters["Shop Background"]; 296 | Mandarava.MenuBackground.Shop.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of Shop Background"]) || 0; 297 | Mandarava.MenuBackground.Shop.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of Shop Background"]) || 0; 298 | 299 | Mandarava.MenuBackground.GameEnd = Mandarava.MenuBackground.GameEnd || {}; 300 | Mandarava.MenuBackground.GameEnd.Image = Mandarava.MenuBackground.Parameters["GameEnd Background"]; 301 | Mandarava.MenuBackground.GameEnd.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of GameEnd Background"]) || 0; 302 | Mandarava.MenuBackground.GameEnd.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of GameEnd Background"]) || 0; 303 | 304 | Mandarava.MenuBackground.Name = Mandarava.MenuBackground.Name || {}; 305 | Mandarava.MenuBackground.Name.Image = Mandarava.MenuBackground.Parameters["Name Background"]; 306 | Mandarava.MenuBackground.Name.HorzSpeed = Number(Mandarava.MenuBackground.Parameters["Horizontal Scroll Speed of Name Background"]) || 0; 307 | Mandarava.MenuBackground.Name.VertSpeed = Number(Mandarava.MenuBackground.Parameters["Vertical Scroll Speed of Name Background"]) || 0; 308 | 309 | var _Scene_MenuBase_createBackground = Scene_MenuBase.prototype.createBackground; 310 | Scene_MenuBase.prototype.createBackground = function() { 311 | var imageName=""; 312 | if(this instanceof Scene_Menu){ 313 | if(Mandarava.MenuBackground.Menu.Image){ 314 | imageName=Mandarava.MenuBackground.Menu.Image; 315 | this._scrollSpeed=new Point( 316 | Mandarava.MenuBackground.Menu.HorzSpeed, 317 | Mandarava.MenuBackground.Menu.VertSpeed 318 | ); 319 | } 320 | }else if(this instanceof Scene_Item){ 321 | if(Mandarava.MenuBackground.Item.Image){ 322 | imageName=Mandarava.MenuBackground.Item.Image; 323 | this._scrollSpeed=new Point( 324 | Mandarava.MenuBackground.Item.HorzSpeed, 325 | Mandarava.MenuBackground.Item.VertSpeed 326 | ); 327 | } 328 | }else if(this instanceof Scene_Skill){ 329 | if(Mandarava.MenuBackground.Skill.Image){ 330 | imageName=Mandarava.MenuBackground.Skill.Image; 331 | this._scrollSpeed=new Point( 332 | Mandarava.MenuBackground.Skill.HorzSpeed, 333 | Mandarava.MenuBackground.Skill.VertSpeed 334 | ); 335 | } 336 | }else if(this instanceof Scene_Equip){ 337 | if(Mandarava.MenuBackground.Equip.Image){ 338 | imageName=Mandarava.MenuBackground.Equip.Image; 339 | this._scrollSpeed=new Point( 340 | Mandarava.MenuBackground.Equip.HorzSpeed, 341 | Mandarava.MenuBackground.Equip.VertSpeed 342 | ); 343 | } 344 | }else if(this instanceof Scene_Status) { 345 | if (Mandarava.MenuBackground.Status.Image) { 346 | imageName = Mandarava.MenuBackground.Status.Image; 347 | this._scrollSpeed = new Point( 348 | Mandarava.MenuBackground.Status.HorzSpeed, 349 | Mandarava.MenuBackground.Status.VertSpeed 350 | ); 351 | } 352 | }else if(this instanceof Scene_Options){ 353 | if(Mandarava.MenuBackground.Options.Image){ 354 | imageName=Mandarava.MenuBackground.Options.Image; 355 | this._scrollSpeed=new Point( 356 | Mandarava.MenuBackground.Options.HorzSpeed, 357 | Mandarava.MenuBackground.Options.VertSpeed 358 | ); 359 | } 360 | }else if(this instanceof Scene_Save || this instanceof Scene_Load){ 361 | if(Mandarava.MenuBackground.SaveLoad.Image){ 362 | imageName=Mandarava.MenuBackground.SaveLoad.Image; 363 | this._scrollSpeed=new Point( 364 | Mandarava.MenuBackground.SaveLoad.HorzSpeed, 365 | Mandarava.MenuBackground.SaveLoad.VertSpeed 366 | ); 367 | } 368 | }else if(this instanceof Scene_Shop){ 369 | if(Mandarava.MenuBackground.Shop.Image){ 370 | imageName=Mandarava.MenuBackground.Shop.Image; 371 | this._scrollSpeed=new Point( 372 | Mandarava.MenuBackground.Shop.HorzSpeed, 373 | Mandarava.MenuBackground.Shop.VertSpeed 374 | ); 375 | } 376 | }else if(this instanceof Scene_GameEnd){ 377 | if(Mandarava.MenuBackground.GameEnd.Image){ 378 | imageName=Mandarava.MenuBackground.GameEnd.Image; 379 | this._scrollSpeed=new Point( 380 | Mandarava.MenuBackground.GameEnd.HorzSpeed, 381 | Mandarava.MenuBackground.GameEnd.VertSpeed 382 | ); 383 | } 384 | }else if(this instanceof Scene_Name){ 385 | if(Mandarava.MenuBackground.Name.Image){ 386 | imageName=Mandarava.MenuBackground.Name.Image; 387 | this._scrollSpeed=new Point( 388 | Mandarava.MenuBackground.Name.HorzSpeed, 389 | Mandarava.MenuBackground.Name.VertSpeed 390 | ); 391 | } 392 | } 393 | 394 | if(imageName){ 395 | this._backgroundSprite=new TilingSprite(); 396 | this._backgroundSprite.bitmap = ImageManager.loadParallax(imageName); 397 | this._backgroundSprite.move(0, 0, Graphics.width, Graphics.height); 398 | this.addChild(this._backgroundSprite); 399 | }else{ 400 | _Scene_MenuBase_createBackground.call(this); 401 | } 402 | }; 403 | 404 | var _Scene_MenuBase_update = Scene_MenuBase.prototype.update; 405 | Scene_MenuBase.prototype.update = function () { 406 | _Scene_MenuBase_update.call(this); 407 | 408 | if(this._scrollSpeed) { 409 | this._backgroundSprite.origin.x -= this._scrollSpeed.x; 410 | this._backgroundSprite.origin.y -= this._scrollSpeed.y; 411 | } 412 | } 413 | 414 | })(); -------------------------------------------------------------------------------- /tutorialsrc/LEARN_Teleport/js/libs/pixi-picture.js: -------------------------------------------------------------------------------- 1 | var __extends = (this && this.__extends) || function (d, b) { 2 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 3 | function __() { this.constructor = d; } 4 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 5 | }; 6 | var PIXI; 7 | (function (PIXI) { 8 | var extras; 9 | (function (extras) { 10 | var shaderLib = [ 11 | { 12 | vertUniforms: "", 13 | vertCode: "vTextureCoord = aTextureCoord;", 14 | fragUniforms: "uniform vec4 uTextureClamp;", 15 | fragCode: "vec2 textureCoord = clamp(vTextureCoord, uTextureClamp.xy, uTextureClamp.zw);" 16 | }, 17 | { 18 | vertUniforms: "uniform mat3 uTransform;", 19 | vertCode: "vTextureCoord = (uTransform * vec3(aTextureCoord, 1.0)).xy;", 20 | fragUniforms: "", 21 | fragCode: "vec2 textureCoord = vTextureCoord;" 22 | }, 23 | { 24 | vertUniforms: "uniform mat3 uTransform;", 25 | vertCode: "vTextureCoord = (uTransform * vec3(aTextureCoord, 1.0)).xy;", 26 | fragUniforms: "uniform mat3 uMapCoord;\nuniform vec4 uClampFrame;\nuniform vec2 uClampOffset;", 27 | fragCode: "vec2 textureCoord = mod(vTextureCoord - uClampOffset, vec2(1.0, 1.0)) + uClampOffset;" + 28 | "\ntextureCoord = (uMapCoord * vec3(textureCoord, 1.0)).xy;" + 29 | "\ntextureCoord = clamp(textureCoord, uClampFrame.xy, uClampFrame.zw);" 30 | } 31 | ]; 32 | var PictureShader = (function (_super) { 33 | __extends(PictureShader, _super); 34 | function PictureShader(gl, vert, frag, tilingMode) { 35 | var lib = shaderLib[tilingMode]; 36 | _super.call(this, gl, vert.replace(/%SPRITE_UNIFORMS%/gi, lib.vertUniforms) 37 | .replace(/%SPRITE_CODE%/gi, lib.vertCode), frag.replace(/%SPRITE_UNIFORMS%/gi, lib.fragUniforms) 38 | .replace(/%SPRITE_CODE%/gi, lib.fragCode)); 39 | this.bind(); 40 | this.tilingMode = tilingMode; 41 | this.tempQuad = new PIXI.Quad(gl); 42 | this.tempQuad.initVao(this); 43 | this.uniforms.uColor = new Float32Array([1, 1, 1, 1]); 44 | this.uniforms.uSampler = [0, 1]; 45 | } 46 | PictureShader.blendVert = "\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 mapMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vMapCoord;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n %SPRITE_CODE%\n vMapCoord = (mapMatrix * vec3(aVertexPosition, 1.0)).xy;\n}\n"; 47 | return PictureShader; 48 | }(PIXI.Shader)); 49 | extras.PictureShader = PictureShader; 50 | })(extras = PIXI.extras || (PIXI.extras = {})); 51 | })(PIXI || (PIXI = {})); 52 | var PIXI; 53 | (function (PIXI) { 54 | var extras; 55 | (function (extras) { 56 | var overlayFrag = "\nvarying vec2 vTextureCoord;\nvarying vec2 vMapCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler[2];\nuniform vec4 uColor;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n %SPRITE_CODE%\n vec4 source = texture2D(uSampler[0], textureCoord) * uColor;\n vec4 target = texture2D(uSampler[1], vMapCoord);\n\n //reverse hardlight\n if (source.a == 0.0) {\n gl_FragColor = vec4(0, 0, 0, 0);\n return;\n }\n //yeah, premultiplied\n vec3 Cb = source.rgb/source.a, Cs;\n if (target.a > 0.0) {\n Cs = target.rgb / target.a;\n }\n vec3 multiply = Cb * Cs * 2.0;\n vec3 Cs2 = Cs * 2.0 - 1.0;\n vec3 screen = Cb + Cs2 - Cb * Cs2;\n vec3 B;\n if (Cb.r <= 0.5) {\n B.r = multiply.r;\n } else {\n B.r = screen.r;\n }\n if (Cb.g <= 0.5) {\n B.g = multiply.g;\n } else {\n B.g = screen.g;\n }\n if (Cb.b <= 0.5) {\n B.b = multiply.b;\n } else {\n B.b = screen.b;\n }\n vec4 res;\n res.xyz = (1.0 - source.a) * Cs + source.a * B;\n res.a = source.a + target.a * (1.0-source.a);\n gl_FragColor = vec4(res.xyz * res.a, res.a);\n}\n"; 57 | var HardLightShader = (function (_super) { 58 | __extends(HardLightShader, _super); 59 | function HardLightShader(gl, tilingMode) { 60 | _super.call(this, gl, extras.PictureShader.blendVert, overlayFrag, tilingMode); 61 | } 62 | return HardLightShader; 63 | }(extras.PictureShader)); 64 | extras.HardLightShader = HardLightShader; 65 | })(extras = PIXI.extras || (PIXI.extras = {})); 66 | })(PIXI || (PIXI = {})); 67 | var PIXI; 68 | (function (PIXI) { 69 | var extras; 70 | (function (extras) { 71 | function mapFilterBlendModesToPixi(gl, array) { 72 | if (array === void 0) { array = []; } 73 | array[PIXI.BLEND_MODES.OVERLAY] = [new extras.OverlayShader(gl, 0), new extras.OverlayShader(gl, 1), new extras.OverlayShader(gl, 2)]; 74 | array[PIXI.BLEND_MODES.HARD_LIGHT] = [new extras.HardLightShader(gl, 0), new extras.HardLightShader(gl, 1), new extras.HardLightShader(gl, 2)]; 75 | return array; 76 | } 77 | extras.mapFilterBlendModesToPixi = mapFilterBlendModesToPixi; 78 | })(extras = PIXI.extras || (PIXI.extras = {})); 79 | })(PIXI || (PIXI = {})); 80 | var PIXI; 81 | (function (PIXI) { 82 | var extras; 83 | (function (extras) { 84 | var normalFrag = "\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler[2];\nuniform vec4 uColor;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n %SPRITE_CODE%\n\n vec4 sample = texture2D(uSampler[0], textureCoord);\n gl_FragColor = sample * uColor;\n}\n"; 85 | var normalVert = "\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n %SPRITE_CODE%\n}\n"; 86 | var NormalShader = (function (_super) { 87 | __extends(NormalShader, _super); 88 | function NormalShader(gl, tilingMode) { 89 | _super.call(this, gl, normalVert, normalFrag, tilingMode); 90 | } 91 | return NormalShader; 92 | }(extras.PictureShader)); 93 | extras.NormalShader = NormalShader; 94 | })(extras = PIXI.extras || (PIXI.extras = {})); 95 | })(PIXI || (PIXI = {})); 96 | var PIXI; 97 | (function (PIXI) { 98 | var extras; 99 | (function (extras) { 100 | var overlayFrag = "\nvarying vec2 vTextureCoord;\nvarying vec2 vMapCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler[2];\nuniform vec4 uColor;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n %SPRITE_CODE%\n vec4 source = texture2D(uSampler[0], textureCoord) * uColor;\n vec4 target = texture2D(uSampler[1], vMapCoord);\n\n //reverse hardlight\n if (source.a == 0.0) {\n gl_FragColor = vec4(0, 0, 0, 0);\n return;\n }\n //yeah, premultiplied\n vec3 Cb = source.rgb/source.a, Cs;\n if (target.a > 0.0) {\n Cs = target.rgb / target.a;\n }\n vec3 multiply = Cb * Cs * 2.0;\n vec3 Cb2 = Cb * 2.0 - 1.0;\n vec3 screen = Cb2 + Cs - Cb2 * Cs;\n vec3 B;\n if (Cs.r <= 0.5) {\n B.r = multiply.r;\n } else {\n B.r = screen.r;\n }\n if (Cs.g <= 0.5) {\n B.g = multiply.g;\n } else {\n B.g = screen.g;\n }\n if (Cs.b <= 0.5) {\n B.b = multiply.b;\n } else {\n B.b = screen.b;\n }\n vec4 res;\n res.xyz = (1.0 - source.a) * Cs + source.a * B;\n res.a = source.a + target.a * (1.0-source.a);\n gl_FragColor = vec4(res.xyz * res.a, res.a);\n}\n"; 101 | var OverlayShader = (function (_super) { 102 | __extends(OverlayShader, _super); 103 | function OverlayShader(gl, tilingMode) { 104 | _super.call(this, gl, extras.PictureShader.blendVert, overlayFrag, tilingMode); 105 | } 106 | return OverlayShader; 107 | }(extras.PictureShader)); 108 | extras.OverlayShader = OverlayShader; 109 | })(extras = PIXI.extras || (PIXI.extras = {})); 110 | })(PIXI || (PIXI = {})); 111 | var PIXI; 112 | (function (PIXI) { 113 | var extras; 114 | (function (extras) { 115 | function nextPow2(v) { 116 | v += (v === 0) ? 1 : 0; 117 | --v; 118 | v |= v >>> 1; 119 | v |= v >>> 2; 120 | v |= v >>> 4; 121 | v |= v >>> 8; 122 | v |= v >>> 16; 123 | return v + 1; 124 | } 125 | var PictureRenderer = (function (_super) { 126 | __extends(PictureRenderer, _super); 127 | function PictureRenderer(renderer) { 128 | _super.call(this, renderer); 129 | } 130 | PictureRenderer.prototype.onContextChange = function () { 131 | var gl = this.renderer.gl; 132 | this.drawModes = extras.mapFilterBlendModesToPixi(gl); 133 | this.normalShader = [new extras.NormalShader(gl, 0), new extras.NormalShader(gl, 1), new extras.NormalShader(gl, 2)]; 134 | this._tempClamp = new Float32Array(4); 135 | this._tempColor = new Float32Array(4); 136 | this._tempRect = new PIXI.Rectangle(); 137 | this._tempRect2 = new PIXI.Rectangle(); 138 | this._tempRect3 = new PIXI.Rectangle(); 139 | this._tempMatrix = new PIXI.Matrix(); 140 | this._tempMatrix2 = new PIXI.Matrix(); 141 | this._bigBuf = new Uint8Array(1 << 20); 142 | this._renderTexture = new PIXI.BaseRenderTexture(1024, 1024); 143 | }; 144 | PictureRenderer.prototype.start = function () { 145 | }; 146 | PictureRenderer.prototype.flush = function () { 147 | }; 148 | PictureRenderer.prototype._getRenderTexture = function (minWidth, minHeight) { 149 | if (this._renderTexture.width < minWidth || 150 | this._renderTexture.height < minHeight) { 151 | minHeight = nextPow2(minWidth); 152 | minHeight = nextPow2(minHeight); 153 | this._renderTexture.resize(minWidth, minHeight); 154 | } 155 | return this._renderTexture; 156 | }; 157 | PictureRenderer.prototype._getBuf = function (size) { 158 | var buf = this._bigBuf; 159 | if (buf.length < size) { 160 | size = nextPow2(size); 161 | buf = new Uint8Array(size); 162 | this._bigBuf = buf; 163 | } 164 | return buf; 165 | }; 166 | PictureRenderer.prototype.render = function (sprite) { 167 | if (!sprite.texture.valid) { 168 | return; 169 | } 170 | var tilingMode = 0; 171 | if (sprite.tileTransform) { 172 | tilingMode = this._isSimpleSprite(sprite) ? 1 : 2; 173 | } 174 | var blendShader = this.drawModes[sprite.blendMode]; 175 | if (blendShader) { 176 | this._renderBlend(sprite, blendShader[tilingMode]); 177 | } 178 | else { 179 | this._renderNormal(sprite, this.normalShader[tilingMode]); 180 | } 181 | }; 182 | PictureRenderer.prototype._renderNormal = function (sprite, shader) { 183 | var renderer = this.renderer; 184 | renderer.bindShader(shader); 185 | renderer.state.setBlendMode(sprite.blendMode); 186 | this._renderInner(sprite, shader); 187 | }; 188 | PictureRenderer.prototype._renderBlend = function (sprite, shader) { 189 | var renderer = this.renderer; 190 | var spriteBounds = sprite.getBounds(); 191 | var renderTarget = renderer._activeRenderTarget; 192 | var matrix = renderTarget.projectionMatrix; 193 | var flipX = matrix.a < 0; 194 | var flipY = matrix.d < 0; 195 | var resolution = renderTarget.resolution; 196 | var screen = this._tempRect; 197 | var fr = renderTarget.sourceFrame || renderTarget.destinationFrame; 198 | screen.x = 0; 199 | screen.y = 0; 200 | screen.width = fr.width; 201 | screen.height = fr.height; 202 | var bounds = this._tempRect2; 203 | var fbw = fr.width * resolution, fbh = fr.height * resolution; 204 | bounds.x = (spriteBounds.x + matrix.tx / matrix.a) * resolution + fbw / 2; 205 | bounds.y = (spriteBounds.y + matrix.ty / matrix.d) * resolution + fbh / 2; 206 | bounds.width = spriteBounds.width * resolution; 207 | bounds.height = spriteBounds.height * resolution; 208 | if (flipX) { 209 | bounds.y = fbw - bounds.width - bounds.x; 210 | } 211 | if (flipY) { 212 | bounds.y = fbh - bounds.height - bounds.y; 213 | } 214 | var screenBounds = this._tempRect3; 215 | var x_1 = Math.floor(Math.max(screen.x, bounds.x)); 216 | var x_2 = Math.ceil(Math.min(screen.x + screen.width, bounds.x + bounds.width)); 217 | var y_1 = Math.floor(Math.max(screen.y, bounds.y)); 218 | var y_2 = Math.ceil(Math.min(screen.y + screen.height, bounds.y + bounds.height)); 219 | var pixelsWidth = x_2 - x_1; 220 | var pixelsHeight = y_2 - y_1; 221 | if (pixelsWidth <= 0 || pixelsHeight <= 0) { 222 | return; 223 | } 224 | var rt = this._getRenderTexture(pixelsWidth, pixelsHeight); 225 | renderer.bindTexture(rt, 1, true); 226 | var gl = renderer.gl; 227 | if (renderer.renderingToScreen && renderTarget.root) { 228 | var buf = this._getBuf(pixelsWidth * pixelsHeight * 4); 229 | gl.readPixels(x_1, y_1, pixelsWidth, pixelsHeight, gl.RGBA, gl.UNSIGNED_BYTE, this._bigBuf); 230 | gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, pixelsWidth, pixelsHeight, gl.RGBA, gl.UNSIGNED_BYTE, this._bigBuf); 231 | } 232 | else { 233 | gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, x_1, y_1, pixelsWidth, pixelsHeight); 234 | } 235 | renderer.bindShader(shader); 236 | renderer.state.setBlendMode(PIXI.BLEND_MODES.NORMAL); 237 | if (shader.uniforms.mapMatrix) { 238 | var mapMatrix = this._tempMatrix; 239 | mapMatrix.a = bounds.width / rt.width / spriteBounds.width; 240 | if (flipX) { 241 | mapMatrix.a = -mapMatrix.a; 242 | mapMatrix.tx = (bounds.x - x_1) / rt.width - (spriteBounds.x + spriteBounds.width) * mapMatrix.a; 243 | } 244 | else { 245 | mapMatrix.tx = (bounds.x - x_1) / rt.width - spriteBounds.x * mapMatrix.a; 246 | } 247 | mapMatrix.d = bounds.height / rt.height / spriteBounds.height; 248 | if (flipY) { 249 | mapMatrix.d = -mapMatrix.d; 250 | mapMatrix.ty = (bounds.y - y_1) / rt.height - (spriteBounds.y + spriteBounds.height) * mapMatrix.d; 251 | } 252 | else { 253 | mapMatrix.ty = (bounds.y - y_1) / rt.height - spriteBounds.y * mapMatrix.d; 254 | } 255 | shader.uniforms.mapMatrix = mapMatrix.toArray(true); 256 | } 257 | this._renderInner(sprite, shader); 258 | }; 259 | PictureRenderer.prototype._renderInner = function (sprite, shader) { 260 | var renderer = this.renderer; 261 | if (shader.tilingMode > 0) { 262 | this._renderWithShader(sprite, shader.tilingMode === 1, shader); 263 | } 264 | else { 265 | this._renderSprite(sprite, shader); 266 | } 267 | }; 268 | PictureRenderer.prototype._renderWithShader = function (ts, isSimple, shader) { 269 | var quad = shader.tempQuad; 270 | var renderer = this.renderer; 271 | renderer.bindVao(quad.vao); 272 | var vertices = quad.vertices; 273 | var _width = ts._width; 274 | var _height = ts._height; 275 | var _anchorX = ts._anchor._x; 276 | var _anchorY = ts._anchor._y; 277 | var w0 = _width * (1 - _anchorX); 278 | var w1 = _width * -_anchorX; 279 | var h0 = _height * (1 - _anchorY); 280 | var h1 = _height * -_anchorY; 281 | var wt = ts.transform.worldTransform; 282 | var a = wt.a; 283 | var b = wt.b; 284 | var c = wt.c; 285 | var d = wt.d; 286 | var tx = wt.tx; 287 | var ty = wt.ty; 288 | vertices[0] = (a * w1) + (c * h1) + tx; 289 | vertices[1] = (d * h1) + (b * w1) + ty; 290 | vertices[2] = (a * w0) + (c * h1) + tx; 291 | vertices[3] = (d * h1) + (b * w0) + ty; 292 | vertices[4] = (a * w0) + (c * h0) + tx; 293 | vertices[5] = (d * h0) + (b * w0) + ty; 294 | vertices[6] = (a * w1) + (c * h0) + tx; 295 | vertices[7] = (d * h0) + (b * w1) + ty; 296 | vertices = quad.uvs; 297 | vertices[0] = vertices[6] = -ts.anchor.x; 298 | vertices[1] = vertices[3] = -ts.anchor.y; 299 | vertices[2] = vertices[4] = 1.0 - ts.anchor.x; 300 | vertices[5] = vertices[7] = 1.0 - ts.anchor.y; 301 | quad.upload(); 302 | var tex = ts._texture; 303 | var lt = ts.tileTransform.localTransform; 304 | var uv = ts.uvTransform; 305 | var mapCoord = uv.mapCoord; 306 | var uClampFrame = uv.uClampFrame; 307 | var uClampOffset = uv.uClampOffset; 308 | var w = tex.width; 309 | var h = tex.height; 310 | var W = _width; 311 | var H = _height; 312 | var tempMat = this._tempMatrix2; 313 | tempMat.set(lt.a * w / W, lt.b * w / H, lt.c * h / W, lt.d * h / H, lt.tx / W, lt.ty / H); 314 | tempMat.invert(); 315 | if (isSimple) { 316 | tempMat.append(mapCoord); 317 | } 318 | else { 319 | shader.uniforms.uMapCoord = mapCoord.toArray(true); 320 | shader.uniforms.uClampFrame = uClampFrame; 321 | shader.uniforms.uClampOffset = uClampOffset; 322 | } 323 | shader.uniforms.uTransform = tempMat.toArray(true); 324 | var color = this._tempColor; 325 | var alpha = ts.worldAlpha; 326 | PIXI.utils.hex2rgb(ts.tint, color); 327 | color[0] *= alpha; 328 | color[1] *= alpha; 329 | color[2] *= alpha; 330 | color[3] = alpha; 331 | shader.uniforms.uColor = color; 332 | renderer.bindTexture(tex, 0, true); 333 | quad.vao.draw(this.renderer.gl.TRIANGLES, 6, 0); 334 | }; 335 | PictureRenderer.prototype._renderSprite = function (sprite, shader) { 336 | var renderer = this.renderer; 337 | var quad = shader.tempQuad; 338 | renderer.bindVao(quad.vao); 339 | var uvs = sprite.texture._uvs; 340 | var vertices = quad.vertices; 341 | var vd = sprite.vertexData; 342 | for (var i = 0; i < 8; i++) { 343 | quad.vertices[i] = vd[i]; 344 | } 345 | quad.uvs[0] = uvs.x0; 346 | quad.uvs[1] = uvs.y0; 347 | quad.uvs[2] = uvs.x1; 348 | quad.uvs[3] = uvs.y1; 349 | quad.uvs[4] = uvs.x2; 350 | quad.uvs[5] = uvs.y2; 351 | quad.uvs[6] = uvs.x3; 352 | quad.uvs[7] = uvs.y3; 353 | quad.upload(); 354 | var frame = sprite.texture.frame; 355 | var base = sprite.texture.baseTexture; 356 | var clamp = this._tempClamp; 357 | var eps = 0.5 / base.resolution; 358 | clamp[0] = (frame.x + eps) / base.width; 359 | clamp[1] = (frame.y + eps) / base.height; 360 | clamp[2] = (frame.x + frame.width - eps) / base.width; 361 | clamp[3] = (frame.y + frame.height - eps) / base.height; 362 | shader.uniforms.uTextureClamp = clamp; 363 | var color = this._tempColor; 364 | PIXI.utils.hex2rgb(sprite.tint, color); 365 | var alpha = sprite.worldAlpha; 366 | color[0] *= alpha; 367 | color[1] *= alpha; 368 | color[2] *= alpha; 369 | color[3] = alpha; 370 | shader.uniforms.uColor = color; 371 | renderer.bindTexture(base, 0, true); 372 | quad.vao.draw(this.renderer.gl.TRIANGLES, 6, 0); 373 | }; 374 | PictureRenderer.prototype._isSimpleSprite = function (ts) { 375 | var renderer = this.renderer; 376 | var tex = ts._texture; 377 | var baseTex = tex.baseTexture; 378 | var isSimple = baseTex.isPowerOfTwo && tex.frame.width === baseTex.width && tex.frame.height === baseTex.height; 379 | if (isSimple) { 380 | if (!baseTex._glTextures[renderer.CONTEXT_UID]) { 381 | if (baseTex.wrapMode === PIXI.WRAP_MODES.CLAMP) { 382 | baseTex.wrapMode = PIXI.WRAP_MODES.REPEAT; 383 | } 384 | } 385 | else { 386 | isSimple = baseTex.wrapMode !== PIXI.WRAP_MODES.CLAMP; 387 | } 388 | } 389 | return isSimple; 390 | }; 391 | return PictureRenderer; 392 | }(PIXI.ObjectRenderer)); 393 | extras.PictureRenderer = PictureRenderer; 394 | PIXI.WebGLRenderer.registerPlugin('picture', PictureRenderer); 395 | PIXI.CanvasRenderer.registerPlugin('picture', PIXI.CanvasSpriteRenderer); 396 | })(extras = PIXI.extras || (PIXI.extras = {})); 397 | })(PIXI || (PIXI = {})); 398 | var PIXI; 399 | (function (PIXI) { 400 | var extras; 401 | (function (extras) { 402 | var PictureSprite = (function (_super) { 403 | __extends(PictureSprite, _super); 404 | function PictureSprite(texture) { 405 | _super.call(this, texture); 406 | this.pluginName = 'picture'; 407 | } 408 | return PictureSprite; 409 | }(PIXI.Sprite)); 410 | extras.PictureSprite = PictureSprite; 411 | })(extras = PIXI.extras || (PIXI.extras = {})); 412 | })(PIXI || (PIXI = {})); 413 | var PIXI; 414 | (function (PIXI) { 415 | var extras; 416 | (function (extras) { 417 | var PictureTilingSprite = (function (_super) { 418 | __extends(PictureTilingSprite, _super); 419 | function PictureTilingSprite(texture) { 420 | _super.call(this, texture); 421 | this.pluginName = 'picture'; 422 | } 423 | return PictureTilingSprite; 424 | }(extras.TilingSprite)); 425 | extras.PictureTilingSprite = PictureTilingSprite; 426 | })(extras = PIXI.extras || (PIXI.extras = {})); 427 | })(PIXI || (PIXI = {})); 428 | //# sourceMappingURL=pixi-picture.js.map --------------------------------------------------------------------------------