Project1

标题: 来,我也问个问题:如何直接指定特征里的那些东西 [打印本页]

作者: 玄天    时间: 2016-8-27 23:16
标题: 来,我也问个问题:如何直接指定特征里的那些东西
本帖最后由 玄天 于 2016-8-27 23:18 编辑



就是『二刀流』啊『属性有效度』啊这些只能在角色、职业等『特征』里设置的东西,我想直接在事件里赋予。因为想做类似『主角通过XX事件,学会了二刀流!』之类的效果,但是默认的事件指令是没有的(最多只能增减攻击力那些)。

找了一轮日美网站,都没发现类似的脚本。有些可能间接办到,但是会因为不是主打所以还有一堆有的没的,我想要单独这个效果。理论上直接调用内置的脚本应该可以?这方面我不懂,只能求了。

————————————

啊,顺便追加一个:职业限制等级上限。这个应该有插件的吧?
最好不要是yanfly的脚本,他的东西会附带一堆有的没的,很多我都用不到,不想为了其中一个效果还要挂他的核心插件(其实最主要是因为他的LAYOUT都很丑……)
作者: 喵呜喵5    时间: 2016-8-28 11:29
不动脚本的话一般这么做:主角通过XX事件转职为可以使用二刀流的职业
动脚本的话我觉得可以换个思路,弄一个强制的永久保留的无法主动去掉的隐藏状态,剩下的效果全在这个状态里面搞
作者: 玄天    时间: 2016-8-28 17:02
喵呜喵5 发表于 2016-8-28 11:29
不动脚本的话一般这么做:主角通过XX事件转职为可以使用二刀流的职业
动脚本的话我觉得可以换个思路,弄一 ...

我就是不想用转职。
用状态来搞这个我也想过,主要怕会不会因为某些原因会不小心去掉,所以就问问有没一劳永逸的办法。
作者: raketenfaust02    时间: 2016-8-28 21:00
做个公共事件,满足条件时给指定角色附加state呗
作者: 玄天    时间: 2016-8-28 21:13
本帖最后由 玄天 于 2016-8-28 21:48 编辑
raketenfaust02 发表于 2016-8-28 21:00
做个公共事件,满足条件时给指定角色附加state呗


这是个办法,就是麻烦
作者: sutao80216    时间: 2016-8-28 21:57
你这个要求不就是被动技能的效果吗?
作者: sutao80216    时间: 2016-8-28 21:59
顺便再问一下,楼主觉得谁的插件更养眼一些?
作者: raketenfaust02    时间: 2016-8-28 22:10
玄天 发表于 2016-8-28 21:13
这是个办法,就是麻烦

那就没办法了,没有十全十美的方案

我解决这个问题的做法是用YEP的Auto Passive States
作者: 玄天    时间: 2016-8-28 22:15
sutao80216 发表于 2016-8-28 21:59
顺便再问一下,楼主觉得谁的插件更养眼一些?

kamesoft的,可能因为我审美偏日系,那个作者是日本人。
作者: 玄天    时间: 2016-8-28 22:16
raketenfaust02 发表于 2016-8-28 22:10
那就没办法了,没有十全十美的方案

我解决这个问题的做法是用YEP的Auto Passive States ...

如果没更好的办法那也只能这样
作者: 在野月光    时间: 2016-8-28 22:45
脚本rpg_objects.js :


MV数据库角色栏的特征:


事件编辑器。
以下为当前玩家添加法术特征,并学会用火球术。
假设数据库中【火球术】的 dataId = 9:





详情请参考 data\Actors.json - "traits" 以及
Game_Interpreter.prototype.command321 。

作者: 玄天    时间: 2016-8-29 01:17
本帖最后由 玄天 于 2016-8-29 01:19 编辑
在野月光 发表于 2016-8-28 22:45
脚本rpg_objects.js :


哦,原来脚本是写成这样,懂了

另外根据职业来限定等级上限这个要怎么做呢?
作者: 在野月光    时间: 2016-8-29 11:20

打开游戏时按 F8,输入 $dataClasses :



不难看见,MV默认的数据库中,
并没有职业限制等级这一项,
在职业中关于等级方面的描述是空白的,
所以楼主爱怎么写就怎么写好了。
可以在备注中写入预设的最高等级,后期用正则提取 note;
也可以在goto(Scene_Map)之前,
(比如在 Scene_Boot.prototype.start 里面),
直接往 $dataClasses 中循环压入新的参数,
例如压入一个“职业限级”(下述以第一个职业为例):



由于实际响应等级限制的数据在角色(Actor)这个范畴中,
所以最后最好还是关联到 Game_Actor 里面设分支吧,
重写 Game_Actor.prototype.maxLevel 。

由于不清楚楼主最终要实现怎样的效果,
比如说限级后是否要清理超越的等级,经验值的处理等等等等。
如果要一个一个去写备注的话,还是会蹦出想死的心情...
那时候,还得预定义数组或哈希表什么的以备后期校验,越写会越多。
所以这里就不参与调试了;
毕竟预设职业如果是很多很多的话...
别人的现成插件或许会更适合。




作者: 玄天    时间: 2016-8-29 13:04
本帖最后由 玄天 于 2016-8-29 13:58 编辑
在野月光 发表于 2016-8-29 11:20
打开游戏时按 F8,输入 $dataClasses :


1)就是跟角色设定里的那样,比如说这个职业上限是50,那么升到50级就封顶,经验值那里变成『-----』那样。至于如果转职业之前等级高于限定怎么办这个可以在流程中控制,比如说前期游戏你能转的职业都是上限30的,到了中期开放升到50的,这样就能避免。所以不考虑现有职业大于上限时的情况

2)也算比较多的,预测大概得有十几二十个职业

3)我就是没找到这方面的插件脚本才要来问……
作者: 在野月光    时间: 2016-8-29 19:02

可以试试如下:
JAVASCRIPT 代码复制
  1. var sbc = Scene_Boot.prototype.start;
  2. Scene_Boot.prototype.start = function() {
  3. /*自定义参数*/
  4. var n, i = 1;
  5.  
  6. /*取职业上限*/
  7. n = $dataClasses.length;
  8.  
  9. if(n){
  10.         /*遍历职业*/
  11.         for(;i < n; i++){
  12.                 /*给每个职业(创建)初始化等级限制*/
  13.                 $dataClasses[i].maxLevel = 99;
  14.         };
  15. };
  16.  
  17. /*调入原函数*/       
  18. sbc.call(this);
  19. };
  20.  
  21. /*---------------------------------------------------*/
  22.  
  23. Game_Actor.prototype.maxLevel = function() {
  24. /*取职业id*/
  25. var id = this.actor().classId;
  26.  
  27. /*(参照职业)重置当前角色的最大等级*/
  28. this.actor().maxLevel = $dataClasses[id].maxLevel;
  29.  
  30. /*返回当前角色的最大等级值*/
  31. return this.actor().maxLevel;
  32. };


可以预定义等级的数组,替换了那些 99;
也可以不管它,到事件编辑器时再临场修改这些 99,
即 $dataClasses[职业id].maxLevel 的值;
只是一旦职业很多的话,会容易忘了修改。
游戏中,可以F8后输入
$gameActors.actor(数据库中的角色id).maxLevel();
查看最大等级的值。

以上仅供参考。
作者: 玄天    时间: 2016-8-29 22:52
在野月光 发表于 2016-8-29 19:02
可以试试如下:


看上去略麻烦……我还是决定用流程控制的方式来限制角色等级上限好了……虽然不是直接动职业,但是从玩家视角看也没差了




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