Project1

标题: 萌新求教贴 包含简单教程 [打印本页]

作者: apple5740    时间: 2022-3-22 18:37
标题: 萌新求教贴 包含简单教程
本帖最后由 apple5740 于 2022-7-19 18:01 编辑

本贴是记录萌新(自己)学mz脚本过程中遇到的问题

以下是我学习的一个方向,不能作为参考,如果有大佬解决我们共同的问题,表示有赚到
1.刷B站视频。
2.js语法参考 https://www.runoob.com/js/js-tutorial.html noob网站教程
3.按照神仙狼大大B站教程制作第一个插件
4.https://rpg.blue/thread-484440-1-1.html 重要的脚本学习资料。
5.下面就是我遇到的一些问题,还请大佬们多多帮忙,非常感谢!

为了方便大佬,xdm查阅问题,我会把当前问题置顶到首页。

未解决的问题我会用//寻求帮助中//进行标注。
已经解决的问题我会用//已解决//进行标注。

暂未有新问题,感谢各位大佬!



已经解决问题整合:
1.用脚本修改一个敌人的最大血量
2.脚本获取事件名称。
3.控制台F12,全屏F4,游戏重启F5
4.敌人出现的使用
5.随机遇敌
6.获取敌人当前血量
7.写战斗脚本的位置
8.插件分享:点击即触发事件
9.如何在角色全部死亡后不触发gameover(偶然发现mz疑似自带,气晕)
10. 关于 meta
11. 关于游戏数据,变量多存档间共用。

作者: apple5740    时间: 2022-3-22 18:45
本帖最后由 apple5740 于 2022-7-19 18:07 编辑

//////////////////////////////////////////已解决////////////////////////////////////////
我:怎么用脚本获取事件名称啊。
我写的$gameMessage.add($gameMap.event(this._eventId).name); 怎么获取不了。

群里大佬:$gameMap._events[id].event().name.

问题:$gameMap._events 从哪里可以查到它的用法?
//////////////////////////////////////////已解决////////////////////////////////////////
在RPGMAKER自带脚本 rmmz_objects.js 中可以查询到

感谢 新耀012478 大佬提供的帮助 !
作者: apple5740    时间: 2022-3-22 18:58
本帖最后由 apple5740 于 2022-4-3 05:11 编辑

//////////////////////////////////////////已解决////////////////////////////////////////
我: 大佬控制台怎么调出来呀 我想看看自己的。

大佬: F12。

补充:游戏运行的时候按 F12 。

我现在还不知道可以用来做什么。不过我发现,在测试一些脚本的时候,可以在控制台输入脚本来测试。
虽然可右键脚本来测试,但是涉及到从其他地方获取数据,就没办法了。
我之前是先在事件编辑器里写好脚本,然后让角色去接触这个事件,来测试脚本。
//////////////////////////////////////////已解决////////////////////////////////////////
作者: apple5740    时间: 2022-3-22 23:32
本帖最后由 apple5740 于 2022-4-9 20:30 编辑

我: 敌人出现是什么,怎么使用。

我的理解就是隐身怪现身了。

需要在敌群中右键一个敌人设定为中途出现,然后配合这个敌人出现,然后就出现了。。。

好可爱的想法,我喜欢。

//补充一下敌人隐藏,出现。脚本的写法

//让第一位敌人出现
$gameTroop.members()[0].appear();
//让第一位敌人隐藏
$gameTroop.members()[0].hide();
//第一位敌人是否隐藏
$gameTroop.members()[0].isHidden();
//第一位敌人是否出现
$gameTroop.members()[0].isAppeared();
作者: apple5740    时间: 2022-3-22 23:50
本帖最后由 apple5740 于 2022-4-3 05:13 编辑

//////////////////////////////////////////已解决////////////////////////////////////////
我:MZ怎么实现随机敌群,比如我要实现本次战斗随机遇敌 1-8只哥布林。

思路1:分别制作1-8只哥布林敌群,然后从这8种哥布林群中抽取一个。
思路2: 制作一个8只哥布林群,其他7只设置中途出现,然后根据需要进行出现1-8只。

问题:如果不用事件翻译器,只用脚本怎么添加敌人?
//////////////////////////////////////////已解决////////////////////////////////////////
参考楼下大佬的思路
作者: 新耀012478    时间: 2022-3-23 16:16
apple5740 发表于 2022-3-22 23:50
我:MZ怎么实现随机敌群,比如我要实现本次战斗随机遇敌 1-8只哥布林。

思路1:分别制作1-8只哥布林敌群,然 ...

思路2比较好吧,用脚本可麻烦多了。
这不是像事件一样单纯设置一个参数就可以了,
你要设置基础数据,同时还要写把它画出来的东西。
你一分钟都不用就可以弄完的东西,干嘛要花几个小时去写个插件?
作者: 1027913421    时间: 2022-3-26 20:22
大佬  我想加你qq和你一起交流讨论学习
作者: apple5740    时间: 2022-3-26 20:47
新耀012478 发表于 2022-3-23 16:16
思路2比较好吧,用脚本可麻烦多了。
这不是像事件一样单纯设置一个参数就可以了,
你要设置基础数据,同 ...

感谢大佬回复!!!
用脚本的原因是想多学一些脚本的内容。。。
目前还没有合适的学习办法。。
所以就想按照一个功能一个脚本来学了。。

作者: apple5740    时间: 2022-3-26 20:49
1027913421 发表于 2022-3-26 20:22
大佬  我想加你qq和你一起交流讨论学习

我也是萌新呀。欢迎一起学习,我的Q是1127808900
作者: HM495    时间: 2022-3-27 12:21
楼主的头像是什么插件的效果吗
这地图透视效果不错呀
作者: apple5740    时间: 2022-3-27 18:12
HM495 发表于 2022-3-27 12:21
楼主的头像是什么插件的效果吗
这地图透视效果不错呀

在狼大的群看到的 加尔蓝传说的图。。很喜欢,我也想知道是什么插件。。
作者: apple5740    时间: 2022-3-27 18:15
本帖最后由 apple5740 于 2022-4-3 04:50 编辑

昨晚翻到的资料。。
又一位良师益友
给我们萌新详细地讲解了脚本学习过程
千万不要错过,以下是链接。
https://blog.csdn.net/xmoss/article/details/89577365
作者: apple5740    时间: 2022-3-28 02:47
本帖最后由 apple5740 于 2022-4-3 05:42 编辑

//////////////////////////////////////////已解决////////////////////////////////////////
问题:在默认战斗中无限遇怪。
思路1:将死亡的怪物,恢复其生命值。
这其中遇到了困难,如果场上只有一只怪物,
(或者AOE伤害导致全部怪物同时死亡)当怪物被击败的时候,并不会执行战斗事件页上的脚本,直接进行了战后结算。
有办法,在战后结算前执行事件页上的脚本吗? 或者是有其他的思路?
//////////////////////////////////////////解决办法////////////////////////////////////
解决办法由 新耀012478 提供
为怪物增加死亡免疫状态。在每回合结束时候进行判定,满足条件解除死亡免疫状态。


作者: 新耀012478    时间: 2022-3-28 16:06
本帖最后由 新耀012478 于 2022-3-28 16:11 编辑
apple5740 发表于 2022-3-28 02:47
问题:在默认战斗中无限遇怪。
思路1:将死亡的怪物,恢复其生命值。
这其中遇到了困难,如果场上只有一只怪物 ...


我的思路:这个问题的核心在于死亡这个状态。亲测,哪怕它HP归零了,只要没被加上死亡状态战斗继续就会继续。
所以可以利用这个。在回合开始的时候给所有敌人加上不死状态(免疫死亡)。
然后在回合结束的时候进行判定,这样就好了。
满足判定条件就解除免疫死亡的状态,然后全体添加死亡。这样战斗就会正常结束。
需要解决的新问题:这样唯一的问题就是当它HP归零的时候,它的形象不会像平时挂掉了那样慢慢消失。
而是会留在那里,等到死了的时候一起没掉。
当然这个问题可以用别的方法去解决
作者: apple5740    时间: 2022-4-3 04:50
新耀012478 发表于 2022-3-28 16:06
我的思路:这个问题的核心在于死亡这个状态。亲测,哪怕它HP归零了,只要没被加上死亡状态战斗继续就会继 ...

泪目!感谢大佬的回复!这下有了方向。
我现在在想办法获取怪物的当前HP。
还在一个一个属性测试中。(效率有点低)

作者: apple5740    时间: 2022-4-3 05:42
本帖最后由 apple5740 于 2022-4-9 14:25 编辑

//////////////////////////////////////////已解决////////////////////////////////////////
问题:获取当前怪物的HP
在 https://miaowm5.github.io/RMMV-F1/ 官网的js库,跟MZ脚本调用方法文档中我没办法找到获取方法。
通过上次查询 $gameMap._events 时发现自带的js文件中有许多可以利用的方法。
通过检索 hp 我发现了这个方法。
Object.defineProperties(Game_BattlerBase.prototype, {
    // Hit Points
    hp: {
然后就各种测试。。
$gameTroop.members()[0].enemy()._hp;
$gameTroop.members()[0].enemy().hp;
$gameTroop.members()[0].enemy().Game_BattlerBase.prototype.hp  之类的。。  
下载了同功能的插件..表示也看不懂。
插件中直接
var EYHP = Math.ceil(this._enemy.hp / this._enemy.mhp * 100) ;  
我拿来
this._enemy.hp。。。 。
接着在 rmmz_objects.js 中搜hp我发现了这个方法。
Game_Interpreter.prototype.gameDataOperand(type, param1, param2);
可以获取了!它还能获取很多数据。
大概有物品,武器,装备,主角,敌人等类型的数据。比如我这里需要获取第一位敌人的当前hp
Game_Interpreter.prototype.gameDataOperand(4, 0, 0);
param1 代表队伍中敌人的位置。如果场面有8只怪物,对应有 0-7的数值.
param2 代表获取的数据类型。0 是HP ,1是mp, 10是TP。其他的我不清楚了。。

遇到坑了。。。

$gameTroop.members()[0]._hp;
$gameTroop.members()[0].hp;
能直接获取战斗中位置为1的怪物的当前血量。手贱加了.enemy()。


//////////////////////////////////////////已解决////////////////////////////////////////




作者: apple5740    时间: 2022-4-3 05:46
//////////////////////////////////////////已解决////////////////////////////////////////
问题:怎么写战斗时的脚本?
写到这里我说一个我之前遇到的问题。。
第一次接触地图事件的时候,我就在思考怎么写战斗的脚本啊。。
那些脚本只能运行在地图事件中,难道我要写在公共事件里吗。。
后来用到敌群的时候才发现有事件脚本。。
原来战斗的脚本是写在敌群战斗事件里
//////////////////////////////////////////已解决////////////////////////////////////////
作者: apple5740    时间: 2022-4-9 20:24
本帖最后由 apple5740 于 2022-7-17 15:43 编辑

//////////////////////////////////////////已解决////////////////////////////////////////
问题:怎么用脚本修改一个敌人的最大血量?(不修改数据库中该敌人的最大血量)

我测试
$gameTroop.members()[0].mhp = 500;
没有效果。。


修改最大HP确实难以实现。
通过大佬的指点,发现在道具中有增加最大HP的方式。
查看地图文件,可以看到该道具的效果id。

使用
Game_Action.prototype.itemEffectGrow(目标, {"code":42,"dataId":0,"value1":要增加的数值,"value2":0});
可增加最大生命值

为 $gameActors.actor(2) 这个目标 增加 233 最大生命值
Game_Action.prototype.itemEffectGrow($gameActors.actor(2), {"code":42,"dataId":0,"value1":233,"value2":0});


//今天又发现一个方法,更简单了。。
目标.addParam(属性ID,数值)
//为$gameActors.actor(2) 增加最大生命值20.
$gameActors.actor(2).addParam(0,20);

//属性ID
0:最大生命值
1:最大魔法值
2:攻击力
3:防御力
4:魔法攻击力
5:魔法防御力
6:敏捷
7:运气


疑问:
Game_Action.itemEffectGrow($gameActors.actor(2), {"code":42,"dataId":0,"value1":233,"value2":0});
为啥这样不加prototype写会报错。。。
解答:
Game_Action 跟 Game_Action.prototype 是不同的对象,它们是继承关系.对象都不同了,所以调用该方法就报错了。





//////////////////////////////////////////已解决////////////////////////////////////////
作者: apple5740    时间: 2022-4-11 18:02
本帖最后由 apple5740 于 2022-4-12 14:22 编辑
新耀012478 发表于 2022-3-28 16:06
我的思路:这个问题的核心在于死亡这个状态。亲测,哪怕它HP归零了,只要没被加上死亡状态战斗继续就会继 ...



//显示死亡动画参数0-2
$gameTroop.members()[0].performCollapse(0);
//敌人隐藏
$gameTroop.members()[0].hide();

这样看起来流畅了。。再次感谢!
作者: apple5740    时间: 2022-6-19 11:19
我的第一个插件
原创是过分了点。。
因为测试过程中需要点击事件,测试地图中根本没有做地形,或者没有主角,每次就会把主角放在一个位置,然后周围放4个测试事件。。有点麻烦
所以写了这个插件,也算是解决了我的问题
点击触发事件
作者: l734273398    时间: 2022-6-19 13:52
apple5740 发表于 2022-4-9 20:24
//////////////////////////////////////////已解决////////////////////////////////////////
问题:怎么 ...

$dataEnemies[1].params[0] = 1000000
$dataEnemies[1].params[1] = 1000
$dataEnemies[1].params[2] = 1000
$dataEnemies[1].params[3] = 1000
$dataEnemies[1].params[4] = 1000
$dataEnemies[1].params[5] = 1000
$dataEnemies[1].params[6] = 1000
$dataEnemies[1].params[7] = 1000
作者: apple5740    时间: 2022-6-19 20:46
本帖最后由 apple5740 于 2022-6-19 20:48 编辑

//////////////////////////////////////////已解决////////////////////////////////////////
问题:如何实现在角色全部死亡之后,不触发gameover场景
这个问题找了一下午。。。

1.在 rmmz_scenes.js 这个脚本中的Scene_Base.prototype.checkGameover
把{}里面的内容删除或者注释掉就可以了

2.如果要实现,角色全灭之后,进入其他地图,就可以用我的代码,随便放到一个js文件中就行

————————————————————————————————————————————
var apple_Scene_Base_checkGameover = Scene_Base.prototype.checkGameover;
Scene_Base.prototype.checkGameover = function(){
        if ($gameParty.isAllDead()) {
                $gameParty.members()[0].revive();
                $gameParty.members()[0].clearStates();
                Game_Interpreter.prototype.command201([0,6,0,0,0,0]);
        }
}
————————————————————————————————————————————
//移动场所
Game_Interpreter.prototype.command201(参数1,参数2,参数3,参数4,参数5,参数6);
参数1:指定方式(0:直接指定,1:变量指定),建议使用0,1我也没试过
参数2:地图ID
参数3:x坐标
参数4:  y坐标
参数5:方向(0:不变,2:下,4:左,6:右,8:上)
参数6:淡入淡出(0:黑,1:白,无:2)
//////////////////////////////////////////已解决////////////////////////////////////////
作者: apple5740    时间: 2022-6-19 20:48
l734273398 发表于 2022-6-19 13:52
$dataEnemies[1].params[0] = 1000000
$dataEnemies[1].params[1] = 1000
$dataEnemies[1].params[2] = 1 ...

感谢!感谢!
作者: apple5740    时间: 2022-7-17 15:31
本帖最后由 apple5740 于 2022-7-18 07:49 编辑

//////////////////////////////////////////已解决////////////////////////////////////////
问题:备注的格式是什么? 怎么写,才能通过 meta 获取。
该问题由群大佬们荣誉赞助,群主yyds.
群传送门:
https://jq.qq.com/?_wv=1027&k=0eZFK10A]

添加对象就在备注中按照<x:1><y:3>
这样的格式添加。
用的话就直接xx.meta.x ,xx.meta.y
其他格式,通过meta 可能获取不到,似乎可以理解成一个键值对。

另外附图,关于meta


//////////////////////////////////////////已解决////////////////////////////////////////
作者: apple5740    时间: 2022-7-19 18:00
//////////////////////////////////////////已解决////////////////////////////////////////
关于游戏数据。
比如我用脚本的方式自己申明了一个全局变量

$actor_human = [1];

这时保存游戏,加载存档。
输出$actor_human 会发现是 [1].
这时我会有自定义的全局变量还可以随时被保存的幻觉。
然而如果退出游戏,加载存档,输出 $actor_human  就会报错了;
幻觉破灭了。。

其实原因可能是,这个全局变量并没有被储存。

总结:
1.如果在单个存档简单的储存自己的数据,用rm中自带的变量就可以了。
2.如果想要实现多个存档数据共通,则需要把数据写入到本地文件中。

另外一个大佬实现了变量在多存档间共通的插件。
https://rpg.blue/thread-486316-1-1.html
希望对遇到该困扰的朋友会有帮助。
如有不足欢迎补充


//////////////////////////////////////////已解决////////////////////////////////////////
作者: zzwzxzs    时间: 2022-7-31 13:54
谢谢大大谢谢大大谢谢大大谢谢大大谢谢大大




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1