Project1

标题: (已解决)能力成长果实,怎么做上限? [打印本页]

作者: 55808888    时间: 2023-4-11 16:40
标题: (已解决)能力成长果实,怎么做上限?
本帖最后由 55808888 于 2023-5-7 02:08 编辑

MV里道具有自带的可以永久增加属性功能。
根据这个我希望设计成:
所有角色最多只能食用20颗果子,无论何种类型。

请教该怎么设置?

1111.png (157.23 KB, 下载次数: 36)

1111.png

作者: bleen    时间: 2023-4-11 16:52
用插件的方法:YEP有一个YEP_X_ItemRequirements的插件,可以根据变量或开关来决定物品是否可用。物品里关联一个公共事件,使用一次变量+1,再配合这个插件就可以限制了。

不用插件的方法等其他大佬来说。
作者: 余杭    时间: 2023-4-11 19:22
本帖最后由 余杭 于 2023-4-11 19:24 编辑

简单也很麻烦的方法就是每个角色设置一个变量来代表使用次数,当变量超过20使用无效,不过需要调用公共事件去增减能力值,而不是在这个物品界面;
这个办法只适用于人物较少或者人物多但是不怕麻烦;


人物多而且怕麻烦就要写脚本了,给每个角色重新定一个属性表示使用次数,不过你都这么问了,估计是不会写了(我也不会)
作者: 小怪兽奇奇侠    时间: 2023-4-11 21:50
所有角色最多只能食用20颗果子

我觉得这句话有两个意思,一个意思是,所有角色都加起来一共只能食用20个果子。这种情况下或许可以试试看限制物品数量,只要所有果子加起来不超过20个就行了。
还有一种意思是,每个角色最多吃20个果子,这种情况就比较麻烦。我看楼上两位大神办法都不错,你可以根据情况试试看。
作者: y967    时间: 2023-4-12 18:03
如果角色不超过四个,吃的时候四个选项选择角色,每个角色一个变量,判断就可以了。超过4个就用选项增加脚本,或者用脚本,这个就不会了。
作者: 55808888    时间: 2023-4-16 00:24
余杭 发表于 2023-4-11 19:22
简单也很麻烦的方法就是每个角色设置一个变量来代表使用次数,当变量超过20使用无效,不过需要调用公共事件 ...

请问“每个角色设置一个变量代表使用次数”怎么设置?

例如:A吃了一个智力果实,公共事件里怎么只让A的已经食用的果实总数+1;而不影响到B的变量20
作者: 余杭    时间: 2023-4-16 01:23
本帖最后由 余杭 于 2023-4-16 01:42 编辑
55808888 发表于 2023-4-16 00:24
请问“每个角色设置一个变量代表使用次数”怎么设置?

例如:A吃了一个智力果实,公共事件里怎么只让A的 ...


使用公共事件界面的    脚本  ,里面输入下面的代码,就可以把变量 1 设置为当前选择人物的果实使用次数,
                                                                                         变量 2 设置为当前选择人物,

这个使用次数是每个人的私有变量,传递给变量 1 (变量 1 和 2 可以自己设置,最后那两行的()里面的 1 或者 2 换成其他变量 ID 就可以)

所以你可以去判断变量 1 的值,如果小于 20 ,就通过变量 2 去 增加能力值,
                                             如果大于 20 ,就提示使用次数已满,(果实仍会消耗,你可以再获得一个)



JAVASCRIPT 代码复制
  1. if($gameActors.actor($gameParty._targetActorId).usednumber === undefined) $gameActors.actor($gameParty._targetActorId).usednumber = 0;
  2. $gameActors.actor($gameParty._targetActorId).usednumber += 1;
  3. $gameVariables.setValue(1,$gameActors.actor($gameParty._targetActorId).usednumber );
  4. $gameVariables.setValue(2,$gameParty._targetActorId);

作者: 55808888    时间: 2023-4-16 18:30
余杭 发表于 2023-4-16 01:23
使用公共事件界面的    脚本  ,里面输入下面的代码,就可以把变量 1 设置为当前选择人物的果实使用次数 ...

感谢!按照您的方法已经成功实现了!
作者: 55808888    时间: 2023-4-16 18:32
bleen 发表于 2023-4-11 16:52
用插件的方法:YEP有一个YEP_X_ItemRequirements的插件,可以根据变量或开关来决定物品是否可用。物品里关 ...

感谢支招,由于我用MOG的插件用不了YEP的ITEM插件,冲突
作者: 55808888    时间: 2023-4-17 19:43
本帖最后由 55808888 于 2023-4-17 19:45 编辑
余杭 发表于 2023-4-16 01:23
使用公共事件界面的    脚本  ,里面输入下面的代码,就可以把变量 1 设置为当前选择人物的果实使用次数 ...


大神,在这个基础上我扩展了下设计,攻击、法攻、幸运归为一类攻击类果实,生命、防御,法防归为防御类种子

攻击、法攻、幸运吃了10个后,会影响到 生命、防御、法防的上限,人物已经使用数量的变量已经设置了两个:
攻击、法攻、幸运:变量141
生命、防御,法防:变量142
但是为什么我攻击吃了20个之后,防御果实就提示吃满到上限了

QQ图片20230417194413.png (371.25 KB, 下载次数: 36)

QQ图片20230417194413.png

111.png (384.75 KB, 下载次数: 34)

111.png

作者: 余杭    时间: 2023-4-17 20:13
本帖最后由 余杭 于 2023-4-17 20:37 编辑
55808888 发表于 2023-4-17 19:43
大神,在这个基础上我扩展了下设计,攻击、法攻、幸运归为一类攻击类果实,生命、防御,法防归为防御类种 ...


你需要把   .usednumber   换掉,可以把攻击类改成     .攻击果实     ,
                                                     把防御类改成     .防御果实     。
.     后面可以用中文,而且随便设定,不和其他角色函数冲突就行。
这个    角色变量     和后两行设置了什么   变量ID  没关系,你那一行    变量操作+=1    可以删掉,
一共两个   变量ID   就够用了
作者: 55808888    时间: 2023-4-17 22:15
余杭 发表于 2023-4-17 20:13
你需要把   .usednumber   换掉,可以把攻击类改成     .攻击果实     ,
                              ...

搞定了! 多谢!
作者: 是阿浪啊    时间: 2023-4-18 09:14
厉害厉害????。。
作者: cenhangkai    时间: 2023-4-18 18:36
JAVASCRIPT 代码复制
  1. //【使用说明】
  2. //满足下列条件的道具,在使用时受限制次数影响:
  3. //1.道具备注栏备注<角色使用限制:x>
  4. //2.道具范围是[我方单体];
  5. //3.使用场合是城镇地图(战斗时会自动禁用,不用担心)。
  6. //4.成员入队初始化时,重置该角色所有道具的使用次数。
  7. //【举例子】
  8. //1号道具备注:<角色使用限制:10>
  9. //该道具对任何角色的次数限制均为10,所有角色单独计算。
  10. //可以随时在数据库修改备注栏的限制次数,会自动同步。
  11.  
  12.  
  13.  
  14. var _XZScene_ItemBase_canUse = Scene_ItemBase.prototype.canUse;
  15. Scene_ItemBase.prototype.canUse = function() {
  16.         if (this._actorWindow && this._actorWindow.active) {
  17.                 var actor = $gameParty.members()[this._actorWindow.index()];
  18.                 var TJ = !actor.isItemXZ(this.item());
  19.                 return _XZScene_ItemBase_canUse && TJ;
  20.         } else {
  21.                 return _XZScene_ItemBase_canUse;
  22.         }
  23. };
  24.  
  25. var _XZScene_Item_onItemOk = Scene_Item.prototype.onItemOk;
  26. Scene_Item.prototype.onItemOk = function() {
  27.         _XZScene_Item_onItemOk.call(this);
  28.         if (this._actorWindow && this._actorWindow.active) this._actorWindow.refresh();
  29. };
  30.  
  31. var _XZScene_Item_useItem = Scene_Item.prototype.useItem;
  32. Scene_Item.prototype.useItem = function() {
  33.         _XZScene_Item_useItem.call(this);
  34.         if (this._actorWindow && this._actorWindow.active) {
  35.                 var actor = $gameParty.members()[this._actorWindow.index()];
  36.                 actor.BgItemXZ(this.item());
  37.                 this._actorWindow.refresh();
  38.         }
  39. };
  40.  
  41. var _XZWindow_Base_drawActorSimpleStatus = Window_Base.prototype.drawActorSimpleStatus;
  42. Window_Base.prototype.drawActorSimpleStatus = function(actor, x, y, width) {
  43.         _XZWindow_Base_drawActorSimpleStatus.call(this, actor, x, y, width);
  44.         if (SceneManager._scene.constructor.name == "Scene_Item") {
  45.                 var item = SceneManager._scene.item();
  46.                 if (item && item.meta.角色使用限制) {
  47.                         var se = actor.isItemXZ(item)?'\\c[18]':'\\c[24]';
  48.                         var text = '\\c[16]限制使用次数:'+se+actor.ItemXZs(item)+'/'+item.meta.角色使用限制;
  49.                         var yy = y+this.itemHeight()-this.standardFontSize()-this.spacing()*2;
  50.                         this.drawTextEx(text, this.textPadding(), yy);
  51.                 }
  52.         }
  53. };
  54.  
  55. var _XZWindow_ItemList_isCurrentItemEnabled = Window_ItemList.prototype.isCurrentItemEnabled;
  56. Window_ItemList.prototype.isCurrentItemEnabled = function() {
  57.         if ($gameParty.inBattle() && this.item() && this.item().meta.角色使用限制) return false;
  58.     return _XZWindow_ItemList_isCurrentItemEnabled.call(this);
  59. };
  60.  
  61. //成员入队初始化时,重置该角色所有道具的使用次数
  62. //不想要这个功能就删除这段代码
  63. var _XZGame_Actor_setup = Game_Actor.prototype.setup;
  64. Game_Actor.prototype.setup = function(actorId) {
  65.         _XZGame_Actor_setup.call(this,actorId);
  66.         if (this._ItemXZ) this._ItemXZ = null;
  67. };//
  68.  
  69. Game_Actor.prototype.isItemXZ = function(item) {
  70.         var kg = false;
  71.         if (!item) return kg;
  72.         if (!item.meta.角色使用限制) return kg;
  73.         if (!this._ItemXZ) this._ItemXZ = [];
  74.         var s = Number(item.meta.角色使用限制);
  75.         for (var i=0;i<this._ItemXZ.length;i++) {
  76.                 var sz = this._ItemXZ[i];
  77.                 if (sz[0]==item.id && sz[1]>=s) kg = true;
  78.         }
  79.         return kg;
  80. };
  81.  
  82. Game_Actor.prototype.ItemXZs = function(item) {
  83.         if (item && item.meta.角色使用限制 && this._ItemXZ) {
  84.                 var bh = -1;
  85.                 for (var i=0;i<this._ItemXZ.length;i++) {
  86.                         var sz = this._ItemXZ[i];
  87.                         if (sz[0]==item.id) bh = i;
  88.                 }
  89.                 if (bh!=-1) return this._ItemXZ[bh][1];
  90.         }
  91.         return 0;
  92. };
  93.  
  94. Game_Actor.prototype.BgItemXZ = function(item) {
  95.         if (item && item.meta.角色使用限制 && !this.isItemXZ(item)) {
  96.                 var bh = -1;
  97.                 for (var i=0;i<this._ItemXZ.length;i++) {
  98.                         var sz = this._ItemXZ[i];
  99.                         if (sz[0]==item.id) bh = i;
  100.                 }
  101.                 if (bh!=-1) {
  102.                         this._ItemXZ[bh][1]++;
  103.                 } else {
  104.                         this._ItemXZ.push([item.id,1]);
  105.                 }
  106.         }
  107. };


【使用说明】
将上述代码复制粘贴到任意插件最下面。

【效果速览】


随手写的,希望对楼主有所帮助。




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