Project1

标题: 如何禁用补血道具?【已解决】 [打印本页]

作者: 55808888    时间: 2024-5-5 19:23
标题: 如何禁用补血道具?【已解决】
本帖最后由 55808888 于 2024-5-6 11:05 编辑

一个开关ID99  控制,开关开启使可以使用道具

开关关闭时,道具无法使用。

原本的道具属性里是有使用场合的选择,如果把这个选择和开关结合起来呢?比如说开关99关闭时候,使用场合改为“无法使用”
或者有其他脚本?

45327252f9e9410a7474c1ef8b721cbc.png (138.8 KB, 下载次数: 23)

45327252f9e9410a7474c1ef8b721cbc.png

作者: 小秋橙    时间: 2024-5-5 20:59
rpg_objects.js 第 2774 行:
Game_BattlerBase.prototype.isOccasionOk = function(item) {
    if ($gameParty.inBattle()) {
        return item.occasion === 0 || item.occasion === 1;
    } else {
        return item.occasion === 0 || item.occasion === 2;
    }
};

Game_BattlerBase.prototype.meetsUsableItemConditions = function(item) {
    return this.canMove() && this.isOccasionOk(item);
};

Game_BattlerBase.prototype.meetsSkillConditions = function(skill) {
    return (this.meetsUsableItemConditions(skill) &&
            this.isSkillWtypeOk(skill) && this.canPaySkillCost(skill) &&
            !this.isSkillSealed(skill.id) && !this.isSkillTypeSealed(skill.stypeId));
};

Game_BattlerBase.prototype.meetsItemConditions = function(item) {
    return this.meetsUsableItemConditions(item) && $gameParty.hasItem(item);
};

Game_BattlerBase.prototype.canUse = function(item) {
    if (!item) {
        return false;
    } else if (DataManager.isSkill(item)) {
        return this.meetsSkillConditions(item);
    } else if (DataManager.isItem(item)) {
        return this.meetsItemConditions(item);
    } else {
        return false;
    }
};
你总是可以通过判断 item.id 或 skill.id 的取值范围以及各种条件(变量、开关、地图ID、队员等级、主角坐标……)来改变这个函数的执行结果,occasion为0、1、2默认表示【随时、战斗、战斗外】三种场合可用。
作者: 55808888    时间: 2024-5-6 10:31
小秋橙 发表于 2024-5-5 20:59
rpg_objects.js 第 2774 行:
Game_BattlerBase.prototype.isOccasionOk = function(item) {
    if ($game ...

大佬我是代码小白,我判断开关1355如果关闭,就无法使用道具,应该不是这样瞎写吧

Game_BattlerBase.prototype.canUse = function(item) {
    if (!item) {if ($gameSwitches.value(1355)=false);
        return false;
    } else if (DataManager.isSkill(item)) {
        return this.meetsSkillConditions(item);
    } else if (DataManager.isItem(item)) {
        return this.meetsItemConditions(item);
    } else {
        return false;
    }
};
作者: 55808888    时间: 2024-5-6 10:33
小秋橙 发表于 2024-5-5 20:59
rpg_objects.js 第 2774 行:
Game_BattlerBase.prototype.isOccasionOk = function(item) {
    if ($game ...

本来看了您的代码之前,我打算用蠢办法造一些相同的无法使用的假道具,在无法使用的场合替换成假道具,能够使用的时候再换回来。
现在我打算试试这个正规操作
作者: 小秋橙    时间: 2024-5-6 10:54
Game_BattlerBase.prototype.canUse = function(item) {
    if ($gameSwitches.value(1355) === false) return false; // 本行为新增内容,但是你确定不再判断一下item.id什么的?
    if (!item) {
        return false;
    } else if (DataManager.isSkill(item)) {
        return this.meetsSkillConditions(item);
    } else if (DataManager.isItem(item)) {
        return this.meetsItemConditions(item);
    } else {
        return false;
    }
};
作者: 55808888    时间: 2024-5-6 11:04
小秋橙 发表于 2024-5-6 10:54
Game_BattlerBase.prototype.canUse = function(item) {
    if ($gameSwitches.value(1355) === false) re ...

判断ID什么的我看了上面这个示例应该会写了,到时候我自己尝试下。

开关控制道具使用已经完美运行,感谢大佬!
作者: y967    时间: 2024-5-6 16:26
本来我也想做一个效果,把敌人变猪,或者变成物品,只要设置一个物品敌人战斗图,然后敌人变身就可以,我想它变成物品后不能使用技能加血,这样似乎很好解决,但是换成我方就有点麻烦,敌人也可以把我方变成物品,战斗图又要新做,然后封印技能加血也行,就是不能使用物品加血犯难了,这下似乎有可能了。
作者: 55808888    时间: 2024-5-6 22:32
小秋橙 发表于 2024-5-6 10:54
Game_BattlerBase.prototype.canUse = function(item) {
    if ($gameSwitches.value(1355) === false) re ...

不好了大神,刚发现这么写技能也被这个开关禁用了
作者: 55808888    时间: 2024-5-7 10:10
55808888 发表于 2024-5-6 22:32
不好了大神,刚发现这么写技能也被这个开关禁用了

搞定,谢谢




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