查看: 6778|回复: 15

[有事请教] 插件在物品里加标签 怎么检测

[复制链接]
梦石
0
星屑
1410
在线时间
183 小时
注册时间
2017-1-29
回帖
70
发表于 2018-5-4 16:34:35 | 显示全部楼层 |阅读模式

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

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

×
怎么在使用物品的时候  检测 物品备注里有标签<>  
梦石
0
星屑
7427
在线时间
948 小时
注册时间
2017-9-27
回帖
566
发表于 2018-5-4 16:59:40 | 显示全部楼层
备注里的内容默认是在读取游戏时一次性解析处理的,虽然也有办法用脚本代码在运行时实时访问、修改,但在运行时修改游戏底层数据库不见得是一个好主意。
最基础的设置,如果需要改来改去的话,不如多做几个副本按需调用了。
回复

使用道具 举报

梦石
0
星屑
1410
在线时间
183 小时
注册时间
2017-1-29
回帖
70
 楼主| 发表于 2018-5-4 17:13:09 | 显示全部楼层
梦想家大魔王 发表于 2018-5-4 16:59
备注里的内容默认是在读取游戏时一次性解析处理的,虽然也有办法用脚本代码在运行时实时访问、修改,但在运 ...

我是要做一个插件  在物品里添加一个标签   然后使用物品会调用函数

点评

难道系统自带的公共事件已经满足不了你了?  发表于 2018-5-4 17:31
回复

使用道具 举报

梦石
0
星屑
34462
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2018-5-4 18:08:04 | 显示全部楼层
要想能比较熟练使用备注,最起码要大致了解 正则表达式 。
这不是说怎么用就能怎么用的。
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
4716
在线时间
501 小时
注册时间
2013-12-7
回帖
333

极短28参与极短27参与

发表于 2018-5-5 11:28:35 | 显示全部楼层
$dataItems[n].note 是备注
$dataItems[n].meta 是备注生成的对象 ,note写法如<key:value>。

例:
备注里写<cat:miaomiao>
$dataItems[n].meta.cat 返回miaomiao
回复

使用道具 举报

梦石
0
星屑
1410
在线时间
183 小时
注册时间
2017-1-29
回帖
70
 楼主| 发表于 2018-5-5 17:23:07 | 显示全部楼层
本帖最后由 风之竹 于 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  玩家用完以后 物品窗口不会消失  接着再用 加经验效果就没有了

回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2018-5-5 17:45:15 | 显示全部楼层
风之竹 发表于 2018-5-5 17:23
这个写法我知道  $dataItems[n]数组 需要知道是物品ID的。
我现在看了一些教程 通过重写 Scene_ItemBase ...

加经验值,你直接在Game_Action.prototype.apply里面添加就好了啊。
有必要重写什么什么吗。
回复

使用道具 举报

梦石
0
星屑
1410
在线时间
183 小时
注册时间
2017-1-29
回帖
70
 楼主| 发表于 2018-5-5 17:53:18 | 显示全部楼层
yang1zhi 发表于 2018-5-5 17:45
加经验值,你直接在Game_Action.prototype.apply里面添加就好了啊。
有必要重写什么什么吗。 ...

[pre lang="javascript"]function (target) {
    var result = target.result();
    this.subject().clearResult();
    result.clear();
    result.used = this.testApply(target);
    result.missed = (result.used && Math.random() >= this.itemHit(target));
    result.evaded = (!result.missed && Math.random() < this.itemEva(target));
    result.physical = this.isPhysical();
    result.drain = this.isDrain();
    if (result.idear()) {
        if (this.item().damage.type > 0) {
            result.critical = (Math.random() < this.itemCri(target));
            var value = this.makeDamageValue(target, result.critical);
            this.executeDamage(target, value);
        }
        this.item().effects.forEach(function(effect) {
            this.applyItemEffect(target, effect);
        }, this);
        this.applyItemUserEffect(target);
    }
}[/pre]

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

点评

不是要你用他。这是在你攻击啊,使用技能啊,使用物品啊,之后进行计算应用。包括非战斗时。  发表于 2018-5-5 17:55
回复

使用道具 举报

梦石
0
星屑
34462
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2018-5-5 18:12:27 | 显示全部楼层
本帖最后由 芯☆淡茹水 于 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. };
复制代码
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
4716
在线时间
501 小时
注册时间
2013-12-7
回帖
333

极短28参与极短27参与

发表于 2018-5-5 18:43:16 | 显示全部楼层
大哥……你另一个帖子不是给解决方案了么……
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部