Project1

标题: 几个脑洞 [打印本页]

作者: y967    时间: 2026-4-29 12:18
标题: 几个脑洞
本帖最后由 y967 于 2026-4-29 18:24 编辑

我有很多脑洞由于脚本废物,从而搁置了,技术大牛总是令人神往

1,状态或装备无视防御
需要一个装备,然后无视魔防50%,想做一个神通天赋,可以装备,或者带状态也行,物防就不用了。

2,败者组荣耀
就来个败者组荣耀好了,比如不破防就加攻击,或者打不够10%就加攻击,这种弱者神通天赋保命技能,当然不能无限加,上限加到100攻击力

3,封印和解除封印
BOSS被封印技能后如何自救,被硬控只能小怪救,封印技能后自救,即给自己一个标记,当被封印技能后有一次50%机会突破封印,完成自救
主角同理,当然这里就不用了,因为有队友,队友死了怎么办,那就团灭。

4,回合数满就暴走
这个简单,10回合打不掉半血就加50%攻击,败者食尘,败者翻身,难为了。新手期不好过,为免弃坑。

5,回合加攻击/防御
降低难度的方法当然也很多,每5个回合就加一点攻击或防御,不破防的日子很难过的,破防就几下解决了,平衡不容易做的

6,抽蓝
也可以是抽蓝或BOSS防御一次就减攻击,减防御,反正在队伍里都可以设置,可以用脚本,调戏BOSS

7,隐身
替身有了,隐身呢,隐身可以攻击,敌人几回合不能攻击我,如聋如哑

8,舍身精灵
替身娃娃,代替自己死一次,也可以是背包物品

9,守护精灵
死之前一击恢复满血,单次战斗只能触发一次,也可以和上面合并

作者: 无忧谷主幻    时间: 2026-4-29 20:04
本帖最后由 无忧谷主幻 于 2026-4-29 20:19 编辑

问的有些多了,我先从好回答的开始回答吧
3,纯事件就能做

4,依旧算纯事件吧
在条件分歧中输入
RUBY 代码复制
  1. $game_troop.enemies[0] && $game_troop.enemies[0].hp > $game_troop.enemies[0].maxhp * 0.5

敌人数组从 0 开始计数的
​1号敌人 →  enemies[0] 
​2号敌人 →  enemies[1]
(注意区分战斗和回合,战斗是满足条件也只执行一次,回合是满足挑战每回合执行一次)

5,我们依旧用变量来解决

之前需要带有固定状态才生效,现在取消掉
RUBY 代码复制
  1. # ● 获取力量
  2. def str
  3.   n = [[base_str + @str_plus, 1].max, 999].min
  4.   for i in @states
  5.     n *= $data_states[i].str_rate / 100.0
  6.   end
  7.   # 力量固定增加变量1的数值
  8.   n += $game_variables[1]
  9.   n = [[Integer(n), 1].max, 999].min
  10.   return n
  11. end

6,抽蓝直接在公共事件中选择增减敌人SP就好
7,这个应该有人做过了吧,请善用搜索
我把自用的给你吧,不知道你能不能用
嘲讽加盲点整合

8&9
这个也是我之前做过的,第一个就是
https://rpg.blue/thread-498382-1-1.html
把 @hp+=1改成 @hp+=9999就好了

作者: 无忧谷主幻    时间: 2026-4-29 21:44
本帖最后由 无忧谷主幻 于 2026-4-29 21:46 编辑

无敌脚本,经过soulsaga修改,已经加上可以被状态变化解除来解除无敌
无敌



2我也帮你弄好了
RUBY 代码复制
  1. if self.damage == 0 && $game_variables[1] < 100
  2.   $game_variables[1] += 1
  3. end

只有伤害等于0(不破防)变量才会增加,且增加的数值不会超过100
之后代入即可
作者: 灯笼菜刀王    时间: 2026-4-30 11:12
本帖最后由 灯笼菜刀王 于 2026-4-30 11:27 编辑

1, 直接在公式里判断攻方持有对应的状态, 然后让防御减半就行了

找到 power -= self.mdef * skill.mdef_f / 200  这句
改成 power -= (user.state?(10086) ? self.mdef / 2 : self.mdef) * skill.mdef_f / 200

涉及战斗公式方面全可以这样改, 你这些脑洞大部分都是在公式里增加判断, 然后改变某个参数值就可以实现了


--------想实现脑洞, 对脚本小幅度修改是必备的技能---

更高级的做法, 开放式的设置方式


这样就可以持有多种比例的词条/被动了, 笑




作者: 灯笼菜刀王    时间: 2026-4-30 11:49
3,  状态可以增加一个"自解除概率"的设置,  也就是在状态持续期间, 有一定概率自动解除, 这样就可以避免无限控的情况, 当然可以给boss特权, 自解除概率翻倍之类的

不过, XP的数据库没有备注栏, 所以要增加新的参数比较麻烦, 最终还是要抛弃数据库才能解除你的洪荒之力, 笑
目前, 就在状态名称后面备注吧,  毒<A10> 这样写, 表示 中毒后每回合有10%的概率会自行解除

  1. module RPG
  2.   class State
  3.     def name ;return @name.sub(/\<A(\d+)\>/,"") ;end
  4.     def 自解率 ;@name[/\<A(\d+)\>/] ;return $1.to_i ;end
  5.   end
  6. end
  7. class Game_Battler
  8.   def remove_states_auto
  9.     for i in @states_turn.keys.clone
  10.       if @states_turn[i] > 0
  11.         @states_turn[i] -= 1
  12.         remove_state(i) if rand(100) < $data_states[i].自解率
  13.       elsif rand(100) < $data_states[i].auto_release_prob
  14.         remove_state(i)
  15.       end
  16.     end
  17.   end
  18. end
复制代码

脚本, 把它塞到main前


-----------------
我的做法, 状态除了有自动解除概率, 还有最大持续回合, 超过这个回合就算解除概率不是100%也必定解除, 这样做那种 持续时间结束后不是100%解除的状态就有个保底了, 笑

当然, 像增加解除概率, 缩短持续回合之类的 词条/被动 也是有的, 笑
作者: 灯笼菜刀王    时间: 2026-4-30 12:14
7, 隐身, 隐身的做法不难, 判断有该状态的时候, 不把单位放入 @target_battlers 就行了

找到 if (not hp0 and actor.exist?) or (hp0 and actor.hp0?) 这句, 下面加一句 next if actor.state?(10086)  #10086为隐身状态id

这样就可以实现单体攻击的时候都不会打隐身的人(群体攻击可以)

但是, 有个表演上的问题,  就是如果我方只有一个隐身人, 那敌方除非使用群体攻击, 否则就直接结束本回合, 观感上会莫名其妙的, 笑

所以重点上是要怎么表演

我的做法~


当然, 这就不是简单的修改就可以实现的了, 笑
作者: 灯笼菜刀王    时间: 2026-4-30 16:24
本帖最后由 灯笼菜刀王 于 2026-4-30 16:27 编辑

要隐身能不被群攻攻击也不难, 找到

   when 2  # 敌全体
        for actor in $game_party.actors
          if actor.exist? and !actor.state?(10086)

加上红色部分就行了

我设计的隐身能被群攻攻击到是避免隐身变成无敌, 笑,  而且我的隐身也是可以让敌人用的, 群攻则可以作为对付隐身的敌人的反制手段


单体攻击无法选择隐身的敌人

当然想让隐身也能被敌人使用, 就要改操作逻辑了,这部分就要对脚本有些理解喽


作者: 灯笼菜刀王    时间: 2026-4-30 17:19
8, 救命符, 这个实现方法不难, 按无忧谷的做法来就行了 , 但是直接在脚本里处理其实并不理想, 因为这样做, 显示的是, UI显示还剩1血, 然后敌人一刀砍过来, 变成满血

尤其是给敌人使用, 玩家根本感觉不到这个效果, 毕竟默认是看不到敌人剩多少血的, 笑

所以这种触发型特效, 主要还是要考虑如何表演, 尤其是强力效果,更是要用表演来体现牛X



作者: 灯笼菜刀王    时间: 2026-4-30 17:58
本帖最后由 灯笼菜刀王 于 2026-4-30 20:02 编辑

如果不需要表现"死而复活", 那可以直接播放个动画, 如果需要先躺下去,然后再站起来, 那就比较麻烦喽, 笑

RPG最好用状态, 毕竟如果用道具的话, 那塞99个, boss要砍多久, 笑



不过直接播放动画也需要处理"公式结算在动画表演之前"的问题

我使用的方法是, 用公共事件来复活, 在hp判断为0时, 在公共事件里添加动画和加血复活, 当然, 这个添加事件我是用脚本写的, 笑

你可以用状态法, 在需要播放动画的地方先附加一个没卵用的状态(定量设置为0就不会显示了), 然后找个"行动后执行指定公共事件"的脚本,  在这个公共事件里, 每个单位都判断一次是否有对应状态, 有的话就播放动画, 然后解除状态, 这样就可以实现"行动后再播放动画了"(需要在行动后表演的都可以用这个方法)
作者: y967    时间: 2026-5-2 10:05
本帖最后由 y967 于 2026-5-3 07:16 编辑

10,攻击平衡球
如果我方8回合内杀不掉敌人,那么就增加攻击力,每回合增加20,这个攻击力不用抹掉了,可以带到下一场,如果四回合就干掉了,那么开始减攻击力,每次减10。

11,防御平衡球
如果不破防,已经做过了,如果敌人频繁防御,打出伤害不足200,那么开始增加我方攻击力每回合20,或者减去敌人防御力每次减掉10.

12,啃咬者幻想
敌人单次伤害超过本方1/4血的时候,造成啃咬对方20%血效果,此招对付BOSS。


13,最终杀
敌人大招杀死我方前,我方爆起怒杀对方50-70%血,然后我方死去,不留血。


14,领头羊荣耀
如果6回合我方解决不掉敌人,则搜索敌方攻击力最高的那个,减去攻击最高的敌方攻击力20,腐蚀他。还可以控制他两个回合,不管减速还是定住,还是封印技能都行。一般游戏都有这种削弱机制。

15,软猬甲/反射镜像
伤我100,自扣50,自穿软猬甲,敌人也穿,镜像无限反射

16,抗性叠叠乐
抗性数字化,火抗5,可以叠,叠一次5,叠到50,火伤害就减50。百分比也可以。




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