Project1

标题: 插件在物品里加标签 怎么检测 [打印本页]

作者: 风之竹    时间: 2018-5-4 16:34
标题: 插件在物品里加标签 怎么检测
怎么在使用物品的时候  检测 物品备注里有标签<>  
作者: 梦想家大魔王    时间: 2018-5-4 16:59
备注里的内容默认是在读取游戏时一次性解析处理的,虽然也有办法用脚本代码在运行时实时访问、修改,但在运行时修改游戏底层数据库不见得是一个好主意。
最基础的设置,如果需要改来改去的话,不如多做几个副本按需调用了。
作者: 风之竹    时间: 2018-5-4 17:13
梦想家大魔王 发表于 2018-5-4 16:59
备注里的内容默认是在读取游戏时一次性解析处理的,虽然也有办法用脚本代码在运行时实时访问、修改,但在运 ...

我是要做一个插件  在物品里添加一个标签   然后使用物品会调用函数
作者: 芯☆淡茹水    时间: 2018-5-4 18:08
要想能比较熟练使用备注,最起码要大致了解 正则表达式 。
这不是说怎么用就能怎么用的。
作者: ekmomo    时间: 2018-5-5 11:28
$dataItems[n].note 是备注
$dataItems[n].meta 是备注生成的对象 ,note写法如<key:value>。

例:
备注里写<cat:miaomiao>
$dataItems[n].meta.cat 返回miaomiao
作者: 风之竹    时间: 2018-5-5 17:23
本帖最后由 风之竹 于 2018-5-5 17:42 编辑
ekmomo 发表于 2018-5-5 11:28
$dataItems[n].note 是备注
$dataItems[n].meta 是备注生成的对象 ,note写法如。


这个写法我知道  $dataItems[n]数组 需要知道是物品ID的。
我现在看了一些教程 通过重写 Scene_ItemBase.prototype.determineItem的方法
代码如下

Scene_ItemBase.prototype.determineItem = function () {

        var item = this.item();

        if (item.meta.jyd) {

            _Scene_ItemBase_determineItem.call(this);
           $gameActors.actor(2).gainExp(1000);
                       
        } else {

            _Scene_ItemBase_determineItem.call(this);

        }

    };
这段代码就用 角色使用一个物品的时候 如果标签里有<jyd>那么就给角色2增加经验

否者就用原始Scene_ItemBase.prototype.determineItem

这段代码用是可以用 但是有bug  玩家用完以后 物品窗口不会消失  接着再用 加经验效果就没有了


作者: yang1zhi    时间: 2018-5-5 17:45
风之竹 发表于 2018-5-5 17:23
这个写法我知道  $dataItems[n]数组 需要知道是物品ID的。
我现在看了一些教程 通过重写 Scene_ItemBase ...

加经验值,你直接在Game_Action.prototype.apply里面添加就好了啊。
有必要重写什么什么吗。
作者: 风之竹    时间: 2018-5-5 17:53
yang1zhi 发表于 2018-5-5 17:45
加经验值,你直接在Game_Action.prototype.apply里面添加就好了啊。
有必要重写什么什么吗。 ...

JAVASCRIPT 代码复制
  1. function (target) {
  2.     var result = target.result();
  3.     this.subject().clearResult();
  4.     result.clear();
  5.     result.used = this.testApply(target);
  6.     result.missed = (result.used && Math.random() >= this.itemHit(target));
  7.     result.evaded = (!result.missed && Math.random() < this.itemEva(target));
  8.     result.physical = this.isPhysical();
  9.     result.drain = this.isDrain();
  10.     if (result.idear()) {
  11.         if (this.item().damage.type > 0) {
  12.             result.critical = (Math.random() < this.itemCri(target));
  13.             var value = this.makeDamageValue(target, result.critical);
  14.             this.executeDamage(target, value);
  15.         }
  16.         this.item().effects.forEach(function(effect) {
  17.             this.applyItemEffect(target, effect);
  18.         }, this);
  19.         this.applyItemUserEffect(target);
  20.     }
  21. }


看不懂哇  这个函数撒用的?

作者: 芯☆淡茹水    时间: 2018-5-5 18:12
本帖最后由 芯☆淡茹水 于 2018-5-5 18:16 编辑

这样?

  1. var _Scene_ItemBase_determineItem = Scene_ItemBase.prototype.determineItem;
  2. Scene_ItemBase.prototype.determineItem = function () {
  3.     var item = this.item();
  4.     if (item && /<jyd>/.test(item.note)) {
  5.         this.useItem();
  6.         $gameActors.actor(2).gainExp(1000);
  7.         this.activateItemWindow();
  8.     }else _Scene_ItemBase_determineItem.call(this);
  9. };
复制代码

作者: ekmomo    时间: 2018-5-5 18:43
大哥……你另一个帖子不是给解决方案了么……
作者: 风之竹    时间: 2018-5-5 21:24
yang1zhi 发表于 2018-5-5 17:45
加经验值,你直接在Game_Action.prototype.apply里面添加就好了啊。
有必要重写什么什么吗。 ...

大佬Game_Action.prototype.apply里哪部分是 使用物品后的计算
作者: 风之竹    时间: 2018-5-5 21:26
芯☆淡茹水 发表于 2018-5-5 18:12
这样?

Scene_ItemBase.prototype.determineItem 应该只是创建物品使用窗口的 不是使用物品后计算




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