Project1

标题: 事件出现条件有没有变量=而不是≥ [打印本页]

作者: qq15774    时间: 2026-5-15 22:09
标题: 事件出现条件有没有变量=而不是≥
目前我解决的办法是这个变量达到随机1-10变化条件的时候关闭10个开关,然后增加条件,随机数值变成多少,就打开第几个开关,然后事件出现用开关显示,如果能出现条件可以选择=,我就没必要设置那么多东西了,直接变量=多少示就好了。

作者: 岩泽麻美    时间: 2026-5-15 22:17
本帖最后由 岩泽麻美 于 2026-5-15 22:19 编辑

如果十个事件不在同一个格子的话,就每个格子设置两个事件页,比如第二个事件就把第一页条件设置为大于等于2,第二页设置为大于等于3的空白页,这样大概能做到只有在变量等于2时才显示这个事件;如果十个都在一个格子上,就设置十个事件页,第一个大于等于1放第一个事件,第二页大于等于2放第二个事件,以此类推大概就行
我也是新手,如果有讲错的或者理解错了多多见谅
作者: qq15774    时间: 2026-5-15 22:24
岩泽麻美 发表于 2026-5-15 22:17
如果十个事件不在同一个格子的话,就每个格子设置两个事件页,比如第二个事件就把第一页条件设置为大于等于 ...

不在同一个格子,在同一个格子就简单了,至于你说的第二种办法,空白是空白了,但NPC出现了,我的意思是让NPC不在特定条件直接不显示在地图上,可能是我太贪心了,不想做太大地图,就想把事件全压缩到少量地图里,NPC要是全显示就连路都要堵上了。
作者: 岩泽麻美    时间: 2026-5-15 22:37
大概这样?

屏幕截图 2026-05-15 223448.png (102.22 KB, 下载次数: 3)

屏幕截图 2026-05-15 223448.png

屏幕截图 2026-05-15 223453.png (93.03 KB, 下载次数: 3)

屏幕截图 2026-05-15 223453.png

作者: qq15774    时间: 2026-5-15 22:40
岩泽麻美 发表于 2026-5-15 22:37
大概这样?

一直都是复制,忘了图像还能空白。感谢感谢
作者: dhkkhd    时间: 2026-5-16 15:22
我会用脚本来处理
// 设置地图ID为当前地图、事件ID为3、独立开关A为true/false
$gameSelfSwitches.setValue([$gameMap.mapId(), 17, 'A'], true);
// 要操作的事件 ID 数组true=开启, false=关闭
[8, 9, 10, 12, 13, 16].forEach(id => {
    $gameSelfSwitches.setValue([$gameMap.mapId(), id, 'A'], true);
});

作者: 星间漫游起重机    时间: 2026-5-16 17:23
我也觉得RM这个只能大于等于的设计太反人类了
话说回来开关和变量都有批量操作,不用像镇楼那样排十个执行命令的应该就在开关/变量操作同一页
作者: qq15774    时间: 2026-5-17 07:32
星间漫游起重机 发表于 2026-5-16 17:23
我也觉得RM这个只能大于等于的设计太反人类了
话说回来开关和变量都有批量操作,不用像镇楼那样排十个执行 ...

确实,特别是道具不能修改变量或者开关。也不能用脚本,只能触发公共事件,不使用插件的同时公共事件又不能读取道具ID,只能一个道具一个公共事件ID,本来可以通过变量让所有道具只触发一个公共事件。真的很头疼,现在虽然增加一个事件页,但本身一个事件里包含了几十个事件页,每个后面都得添加一个空白的。不然一旦条件改变,又突然冒出来了。如果有=就完全没有这种烦恼了
作者: zzx2000    时间: 2026-5-20 10:37
我有个想法不知道能不能行
公共事件里面做变量开关,如果x=1,则开关1打开,x=2则开关2打开,x=3则开关3打开。
这样可以在事件页定义开关来决定x=几就把开关几设定条件。
x=1时,比如出现条件开关1=开,那么这页启动了,如果一次性事件可以按照独立开关的逻辑给开开。
只不过需要经常刷新,这个公共事件才能开启新的变量开关。事件里也可以变量x=x+1,然后调用这个公共事件,比如当x=1时,x+1后等于2,再调用这个公共事件开关2就打开了。
我是新手不知道行不行给你思考一下
作者: 灯笼菜刀王    时间: 2026-5-20 11:33
本帖最后由 灯笼菜刀王 于 2026-5-20 11:35 编辑

编辑器改不了,那就自己改一下规则嘛,  比如, 把单数ID的变量保持原样, 双数ID的改成 ==

用DS写一下插件

  1. /*:
  2. * @target MZ
  3. * @plugindesc 根据变量ID的奇偶性改变条件判断方式:单数ID用≥,双数ID用==
  4. * @author YourName
  5. * @help ============================================================================
  6. * 使用说明:
  7. * 1. 将此插件保存为 .js 文件并放入项目的 js/plugins 文件夹。
  8. * 2. 在插件管理器中添加并启用此插件。
  9. * 3. 事件页的变量条件设置照常填写变量ID和比较值。
  10. * 4. 插件会自动判断:
  11. *      - 若变量ID为奇数 → 采用 ≥(原版逻辑)
  12. *      - 若变量ID为偶数 → 采用 ==(严格相等)
  13. * ============================================================================
  14. */

  15. // 备份原始方法
  16. var _Game_Event_meetsCondition = Game_Event.prototype.meetsCondition;

  17. // 覆写条件判断方法
  18. Game_Event.prototype.meetsCondition = function(page) {
  19.     // 检查是否存在变量条件
  20.     if (page.conditions.variableValid) {
  21.         const varId = page.conditions.variableId;          // 变量ID
  22.         const currentVal = $gameVariables.value(varId);    // 当前变量值
  23.         const targetVal = page.conditions.variableValue;   // 编辑器中设置的目标值

  24.         // 根据变量ID的奇偶性决定判断逻辑
  25.         if (varId % 2 === 0) {
  26.             // 偶数ID:使用严格相等(==)判断
  27.             if (currentVal !== targetVal) {
  28.                 return false;   // 不满足条件,直接失败
  29.             }
  30.         } else {
  31.             // 奇数ID:保持原版逻辑(≥),这里不做额外处理,让原始方法去判断
  32.             // 注意:原始方法中针对变量条件使用的是 >= 比较
  33.         }
  34.     }

  35.     // 继续执行其他条件(开关、物品、角色等)以及奇数ID变量的原始判断
  36.     return _Game_Event_meetsCondition.call(this, page);
  37. };
复制代码


试试能不能用吧
作者: dhkkhd    时间: 2026-5-20 17:34
为什么会变成这样子呢,还要用插件吗
事件本身的独立开关的状态就可以用来控制显隐了

按照你的条件判断 如果时段=5,重置你的事件状态
        变量操作 #0005 随机1-10
        // 要操作的事件 ID 数组true=开启, false=关闭
        [8, 9, 10, 12, 13, 16].forEach(id => {
            $gameSelfSwitches.setValue([$gameMap.mapId(), id, 'A'], false);
        });

如果变量=1
        // 设置地图ID为当前地图、事件ID为3、独立开关A为true/false
        $gameSelfSwitches.setValue([$gameMap.mapId(), 8, 'A'], true);

如果变量=2
        // 设置地图ID为当前地图、事件ID为3、独立开关A为true/false
        $gameSelfSwitches.setValue([$gameMap.mapId(), 9, 'A'], true);


这不是就可以完成事件的显示了么

你对应的事件本身设置完成逻辑,完成了就关掉,把一些对立的逻辑再清理干净,以便重复触发
        // 设置地图ID为当前地图、事件ID为3、独立开关A为true/false
        $gameSelfSwitches.setValue([$gameMap.mapId(), 8, 'A'], false);


至于你说的道具控制的问题, 我倒是没有看明白,为什么要一个道具一个公共事件,但是这个方式,1个事件就没有必要添加几十个事件页了
作者: 写给妖精的情诗    时间: 2026-5-21 02:08
//把1号开关设置成开启$gameSwitches.setValue(1,true)
//获得1号开关的状态$gameSwitches.value(1)
//设置1号变量的值为10$gameVariables.setValue(1,10)
//获得1号变量的值$gameVariables.value(1)
for(i = 1;i <= 10;i++){
$gameSwitches.setValue(i,false)
};

for(j = 1;j <= $gameVariables.value(1);j++){
$gameSwitches.setValue(j,true)
};

其实要循环点什么东西,可以建立几个模板放在共通事件,需要的时候调用一下就好了。。在事件页那里操作的话,还是独立开关和变量的灵活性比较好,开关只有两个状态还是留着给共通事件吧。

◆如果:独立开关 A 为 关闭
  ◆注释:执行点什么
  ◆独立开关操作:A = 开启
  ◆
:结束分支
◆如果:独立开关 B 为 关闭
  ◆注释:执行点什么
  ◆独立开关操作:B = 开启
  ◆
:结束分支
◆如果:独立开关 C 为 关闭
  ◆注释:执行点什么
  ◆独立开关操作:C = 开启
  ◆
:结束分支
◆如果:独立开关 D 为 关闭
  ◆注释:执行点什么
  ◆独立开关操作:D = 关闭
  ◆
:结束分支
◆如果:普丽西拉 在队伍中
  ◆注释:执行点什么或者是纯粹作为判断要不要循环的设置
  ◆独立开关操作:A = 开启
  ◆独立开关操作:B = 开启
  ◆独立开关操作:C = 开启
  ◆独立开关操作:D = 开启
  ◆
:结束分支




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