设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1920|回复: 13
打印 上一主题 下一主题

[有事请教] [RMMV]技能复制/青魔法

[复制链接]

Lv1.梦旅人

梦石
0
星屑
156
在线时间
14 小时
注册时间
2022-12-1
帖子
8
跳转到指定楼层
1
发表于 2022-12-20 23:09:13 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
各位大佬好,我是位RM新人。我现在在做一个RPG游戏,里面有类似ff系列的青魔职业,暂定叫“小丑”。他有一个技能暂定叫“模仿”,效果是复制指定怪物使用过的上一个技能。
我现在已经实现的功能是复制指定怪物的全部技能,具体实现方式如下:
首先在技能公式里赋值某一敌人的id给50号变量,然后调用公共事件。
在公共事件里调出数据库里怪物的id并学会它的全部技能。
现在遇到的问题是:我想在这基础上优化,需要将“全部技能”改成“上一个使用过的技能”,我的猜想是需要调出log战斗记录来查看,但是不知道怎么实现。注意是怪物的,不是上一角色的(Game.lastActor)。
有大佬能帮忙解答一下吗?感谢~

Lv1.梦旅人

梦石
0
星屑
156
在线时间
14 小时
注册时间
2022-12-1
帖子
8
8
 楼主| 发表于 2023-1-1 19:51:26 | 只看该作者
alexncf125 发表于 2022-12-22 16:41
//=============================================================================
// SkillMimic.js
//= ...

感谢大佬回复,最近三次元的事有点忙,等过段时间闲下来试试,有什么问题再向您请教。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3336
在线时间
468 小时
注册时间
2014-2-6
帖子
258
7
发表于 2022-12-23 20:45:58 | 只看该作者
有个比较笨的办法是,在怪物技能的公共事件里面设置一个变量,每次使用技能时设置那个变量的值为怪物上次使用的技能的ID,然后你这个技能的模仿就多增加一个获得一个新行动效果和读取怪物上次使用的技能的变量值后获得对应ID的技能这两个功能。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
26269
在线时间
5355 小时
注册时间
2016-3-8
帖子
1655
6
发表于 2022-12-22 16:41:33 | 只看该作者
本帖最后由 alexncf125 于 2022-12-22 18:00 编辑

JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // SkillMimic.js
  3. //=============================================================================
  4.  
  5. var Imported = Imported || {};
  6. Imported.Kanna_SkillMimic = true;
  7.  
  8. var Kanna = Kanna || {};
  9. Kanna.SM = Kanna.SM || {};
  10.  
  11. /*:
  12.  * @plugindesc 复制目标怪物使用过的上一个技能。
  13.  * @author alexncf125
  14.  *
  15.  * @help 在技能的备注栏写上:
  16.  * <SKILL MIMIC>
  17.  *
  18.  * 对目标怪物使用该技能后,
  19.  * 会习得该怪物使用过的上一个技能。
  20.  *
  21.  * 注:习得的技能不会在战斗结束后消失。
  22.  */
  23.  
  24. (function() {
  25.  
  26.     Kanna.SM.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
  27.     DataManager.isDatabaseLoaded = function() {
  28.         if (!Kanna.SM.DataManager_isDatabaseLoaded.call(this)) return false;
  29.         if (!Kanna._loaded_SkillMimic) {
  30.             this.processSkillMimicNotetags($dataSkills);
  31.             Kanna._loaded_SkillMimic = true;
  32.         };
  33.         return true;
  34.     };
  35.  
  36.     DataManager.processSkillMimicNotetags = function(group) {
  37.         for (var n = 1; n < group.length; n++) {
  38.             var obj = group[n];
  39.             var notedata = obj.note.split(/[\r\n]+/);
  40.             obj._isSkillMimic = false;
  41.             for (var i = 0; i < notedata.length; i++) {
  42.                 var line = notedata[i];
  43.                 if (line.match(/<(?:SKILL MIMIC)>/i)) {
  44.                     obj._isSkillMimic = true;
  45.                 };
  46.             };
  47.         };
  48.     };
  49.  
  50.     Kanna.SM.BattleManager_invokeAction = BattleManager.invokeAction;
  51.     BattleManager.invokeAction = function(subject, target) {
  52.         Kanna.SM.BattleManager_invokeAction.call(this, subject, target);
  53.         subject.setSkillMimicId(this._action);
  54.     };
  55.  
  56.     var _Game_Action_applyItemUserEffect = Game_Action.prototype.applyItemUserEffect;
  57.     Game_Action.prototype.applyItemUserEffect = function(target) {
  58.         _Game_Action_applyItemUserEffect.call(this, target);
  59.         if (this.item()._isSkillMimic && target._idSkillMimic > 0) {
  60.             if (this.subject().isActor() && !this.subject().isLearnedSkill(target._idSkillMimic)) {
  61.                 this.subject().learnSkill(target._idSkillMimic);
  62.                 this.makeSuccess(this.subject());
  63.             };
  64.         };
  65.     };
  66.  
  67.     var _Game_Battler_initMembers = Game_Battler.prototype.initMembers;
  68.     Game_Battler.prototype.initMembers = function() {
  69.         _Game_Battler_initMembers.call(this);
  70.         this._idSkillMimic = 0;
  71.     };
  72.  
  73.     Game_Battler.prototype.setSkillMimicId = function(action) {
  74.         if (action.isSkill()) {
  75.             this._idSkillMimic = action.item().id;
  76.         };
  77.     };
  78.  
  79. })();

点评

^______^  发表于 2022-12-24 17:33
这插件没有这个功能...  发表于 2022-12-24 00:18
如果用这插件.想要被怪物的技能打中之后.学到该技能...应该如何使用呢?  发表于 2022-12-23 23:33

评分

参与人数 1+1 收起 理由
xiamumomo + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
156
在线时间
14 小时
注册时间
2022-12-1
帖子
8
5
 楼主| 发表于 2022-12-22 12:58:20 | 只看该作者
本帖最后由 悟行 于 2022-12-22 13:01 编辑
xiamumomo 发表于 2022-12-21 10:17
http://www.yanfly.moe/wiki/Blue_Magic_(MV_Plugin_Tips_%26_Tricks)   参考一下  这是Yep的 角色一旦被敌 ...


感谢。不过这可能涉及到一个时点问题?Yep那个是受攻击就能学会,有点类似于触发技,触发时点是青魔角色收到青魔技能的攻击。我想的这个是主动技,主动选择对象(暂定怪兽,未来可能还可以拓展到同伴?)后检索它使用的上一个技能并学习(有可能是上一回合或者是本回合)。所以可能会更复杂一些。

还有关于play337的那个提问(抱歉,我不知道怎么回复在后面就放这一起说了),Yep那个战斗结束后学会的技能依然是存在的,因为它用的指令是".learnSkill()"。

点评

太感谢了.... 我搞半天都还没有测出来....因为我这笨蛋一个工程265+的插件.一旦冲突.我光是解决插件冲突就忙半天...还好有你...^_^  发表于 2022-12-23 23:28
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
156
在线时间
14 小时
注册时间
2022-12-1
帖子
8
4
 楼主| 发表于 2022-12-22 12:41:32 | 只看该作者
soulsaga 发表于 2022-12-21 08:37
https://katai5plate.github.io/RPGMV-CoreScript-Reference/jsdoc/BattleManager.html

可以在这里查找一 ...

感谢,不过找了一圈还是没思路。主要不确定的点是关于战斗流程的。据我所知,战斗流程大体上是先排列然后更新。我估计得在战斗记录里先检索选择的怪兽,然后再检索它所使用的最后一个技能。这样应该就可以实现“复制”了。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9852
在线时间
1884 小时
注册时间
2020-1-2
帖子
1089
3
发表于 2022-12-21 10:17:36 | 只看该作者
http://www.yanfly.moe/wiki/Blue_Magic_(MV_Plugin_Tips_%26_Tricks)   参考一下  这是Yep的 角色一旦被敌人击中就可以学习敌人技能的系统

点评

你试一下就知道了反正这些都是参考实际根据自己需求去更改  发表于 2022-12-21 12:19
我看了一下.YEP这技能看起来很象是战斗中可以使用敌人的技能.但是下一场战斗也可以继续用吗?  发表于 2022-12-21 11:08
B站没人气的夏目漠漠,直播间:5378938实用插件教程点击红字传送
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36402
在线时间
10791 小时
注册时间
2009-3-15
帖子
4813
2
发表于 2022-12-21 08:37:39 | 只看该作者
https://katai5plate.github.io/RP ... /BattleManager.html

可以在这里查找一下..不过我不保证能找到
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 19:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表