查看: 1340|回复: 66

[原创发布] 赌命轮盘

[复制链接]
梦石
0
星屑
17561
在线时间
4249 小时
注册时间
2013-7-18
回帖
2491
发表于 2026-5-30 19:13:28 | 显示全部楼层 |阅读模式

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

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

×
1,赌命轮盘

敌我双方同时有状态18,则血量低于50%时,有30%几率即死

[pre lang="ruby"]
#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
#  本类处理战斗者。此类作为 Game_Actor 类和 Game_Enemy 类的超类使用。
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # * 判定即死状态 (覆盖原方法以添加自定义逻辑)
  #--------------------------------------------------------------------------
  alias original_slip_damage? slip_damage?
  
  def slip_damage?
    # 首先执行原有的即死/持续伤害判定
    if original_slip_damage?
      return true
    end

    # 自定义逻辑:检查状态 18
    # 条件:
    # 1. 当前战斗者拥有状态 18
    # 2. 对手(如果存在)也拥有状态 18
    # 3. 当前 HP < 最大 HP 的 50%
    # 4. 随机数 < 30% (即 0, 1, 2 在 0-9 之间)
   
    if @states.include?(18)
      # 获取对手引用
      opponent = nil
      if self.is_a?(Game_Actor)
        # 如果是演员,对手通常是当前的敌人目标,这里简化为检查是否存在任意敌人也有状态18
        # 在 RMXP 默认战斗中,通常是一对多或多对一,这里假设“双方”指战场上的对立阵营
        $game_troop.enemies.each do |enemy|
          if enemy.exist? && enemy.states.include?(18)
            opponent = enemy
            break
          end
        end
      elsif self.is_a?(Game_Enemy)
        # 如果是敌人,检查演员队伍中是否有状态18
        $game_party.actors.each do |actor|
          if actor.exist? && actor.states.include?(18)
            opponent = actor
            break
          end
        end
      end

      # 如果找到了对立阵营也有状态18的单位
      if opponent != nil
        # 检查血量是否低于 50%
        if self.hp > 0 && self.hp < (self.maxhp / 2.0)
          # 30% 几率即死
          if rand(10) < 3
            # 设置为即死状态 (状态 ID 通常为 1,具体取决于数据库设置,这里直接扣血至0或添加即死状态)
            # 更稳妥的方式是添加即死状态,让系统处理死亡
            self.add_state(1) # 假设状态1是即死/战斗不能
            return true
          end
        end
      end
    end

    return false
  end
end
[/pre]

2,一次性装备战斗一次就销毁

3,无法装备的装备,纪念品武器

4,偷取敌人技能为我所用

5,李代桃僵,被攻击的人不受伤,有李代桃僵状态的人受伤,或者一人分摊一半

评分

参与人数 1赞 +1 收起 理由
azazaaz13142121 + 1 认可答案

查看全部评分

退隐....

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

发表于 2026-5-31 08:50:26 | 显示全部楼层
本帖最后由 无忧谷主幻 于 2026-5-31 08:57 编辑

2,我以前教过你,战斗结束后(无论胜利失败还是逃跑)时执行公共事件
3,所有人可装备的装备中,皆不对这件装备打勾

点评

触发型效果没提示的话,玩家的反应大概率是"菜刀, 又出BUG啦" , 笑  发表于 2026-6-1 17:16
见仁见智,要是不让玩家知道,他还会纳闷武器呢?好不容易得到的武器没了,不是很搞笑么,调戏玩家也是一种乐趣  发表于 2026-6-1 11:29
直接让对应的weapon_id 或者 armor*_id = 0 就让装备中的武器防具消失了,也不会有得失物品提示, 不过,要我说, 有提示才更好  发表于 2026-6-1 09:37
明雷暗雷都一样,我不是叫你在每个战斗事件结束插入公共事件,那样每个战斗都需要放,是很累的 而是在脚本中插入,战斗结束后,不需要1个1个设  发表于 2026-5-31 09:42
有可能,但只适合明雷,暗雷怎么办  发表于 2026-5-31 09:29
回复

使用道具 举报

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

发表于 2026-5-31 09:59:08 | 显示全部楼层
本帖最后由 无忧谷主幻 于 2026-5-31 11:31 编辑

4,我记得柳柳的黑暗圣剑传说有一个共产主义石,就是分担伤害
第一个,根据队伍人数减伤
[pre lang="ruby"]     if self.armor2_id==150 or self.armor3_id==150 or self.armor4_id==150
              if $message_string != "涉死"
                case $game_variables[550]
                when 0
                  self.damage /= [[$game_party.actors.size,4].min-rand(2),1.3].max
                  self.damage = self.damage.to_i
                when 1
                  self.damage /= [[$game_party.actors.size,4].min,1.3].max
                  self.damage = self.damage.to_i
                when 2
                  self.damage /= [[$game_party.actors.size,4].min+rand(4),1.3].max
                  self.damage = self.damage.to_i
                when 3
                  num = 0
                  for enemy in $game_troop.enemies
                    if enemy.exist?
                      num+=1
                    end
                  end
                  self.damage /= [[$game_party.actors.size,4].min+num,1.3].max
                  self.damage = self.damage.to_i
                $message_string = "共产主义"
                when 4
                  num = 0
                  for enemy in $game_troop.enemies
                    if enemy.exist?
                      num+=1
                    end
                  end
                  self.damage /= [[$game_party.actors.size,4].min+num+rand(5),1.3].max
                  self.damage = self.damage.to_i
                end               
              else
                self.damage /= 10
                $message_string = "共产主义涉死"
              end
            end[/pre]
第2步
给全体其他队员同样的伤害
[pre lang="ruby"] if target.armor2_id==150 or target.armor3_id==150 or target.armor4_id==150
          if $message_string == "共产主义"
            target.animation_id  = 37
            target.animation_hit = true
            case $game_variables[550]
            when 0
              for j in 0...[$game_party.actors.size,4].min
                if $game_party.actors[j] != target
                  $game_party.actors[j].animation_id = 155
                  $game_party.actors[j].animation_hit = true
                  $game_party.actors[j].hp -= target.damage
                  $game_party.actors[j].damage = target.damage
                  $game_party.actors[j].damage_pop = true
                end
              end
            when 1
              for j in 0...[$game_party.actors.size,4].min
                if $game_party.actors[j] != target
                  $game_party.actors[j].animation_id = 155
                  $game_party.actors[j].animation_hit = true
                  $game_party.actors[j].hp -= target.damage
                  $game_party.actors[j].damage = target.damage
                  $game_party.actors[j].damage_pop = true
                end
              end
            when 2
              for j in 0...[$game_party.actors.size,4].min
                if $game_party.actors[j] != target
                  $game_party.actors[j].animation_id = 155
                  $game_party.actors[j].animation_hit = true
                  $game_party.actors[j].hp -= target.damage
                  $game_party.actors[j].damage = target.damage
                  $game_party.actors[j].damage_pop = true
                end
              end
            when 3
              for j in 0...[$game_party.actors.size,4].min
                if $game_party.actors[j] != target
                  $game_party.actors[j].animation_id = 155
                  $game_party.actors[j].animation_hit = true
                  $game_party.actors[j].hp -= target.damage
                  $game_party.actors[j].damage = target.damage
                  $game_party.actors[j].damage_pop = true
                end
              end
              for enemy in $game_troop.enemies
                if enemy.exist?
                  enemy.animation_id = 155
                  enemy.animation_hit = true
                  enemy.hp -= target.damage
                  enemy.damage = target.damage
                  enemy.damage_pop = true
                end
              end
            when 4
              for j in 0...[$game_party.actors.size,4].min
                if $game_party.actors[j] != target
                  $game_party.actors[j].animation_id = 155
                  $game_party.actors[j].animation_hit = true
                  $game_party.actors[j].hp -= target.damage
                  $game_party.actors[j].damage = target.damage
                  $game_party.actors[j].damage_pop = true
                end
              end
              for enemy in $game_troop.enemies
                if enemy.exist?
                  enemy.animation_id = 155
                  enemy.animation_hit = true
                  enemy.hp -= target.damage
                  enemy.damage = target.damage
                  enemy.damage_pop = true
                end
              end
            end
            target.damage_pop = true
            @status_window.refresh
            @status_window.update
            @phase4_step = 6
          end
        end[/pre]

点评

然后第二段脚本也一样if target.armor2_id==150 or target.armor3_id==150 or target.armor4_id==150改成if target.state?(150)  发表于 2026-5-31 11:14
修改成状态不是基础吗,直接把if self.armor2_id==150 or self.armor3_id==150 or self.armor4_id==150改成if self.state?(150)  发表于 2026-5-31 11:12
这个共产主义石头是装备吧,要是状态呢,当然装备也行,状态的话更灵活一点,可以被消除  发表于 2026-5-31 10:17
回复

使用道具 举报

梦石
0
星屑
17561
在线时间
4249 小时
注册时间
2013-7-18
回帖
2491
 楼主| 发表于 2026-5-31 10:34:47 | 显示全部楼层
本帖最后由 y967 于 2026-5-31 10:53 编辑

1,共情者/高阶共情者

会给与别人同情的角色,类似于奶妈又不是,圣骑,对,圣骑,牺牲自我50%血量,给同伴加血,加血量就是这个数值
,也可以是牺牲自己的四维,给同伴加防御等,高阶的会反噬,同情过头有时候会造成吸血,同伴会不断的吸血,直到死亡
神圣的音乐出来了,牺牲自我给队友双倍四维持续2回合,神性光辉振奋军心最后的挽歌。

2,共爱者
更离谱的角色,敌我双方都加血,钢锯岭?高阶的会牺牲自我,到底给谁加呢,谁是谁的最后的挽歌,会不会被揍呢

3,叛徒
高阶共爱者等同叛徒,拥有18号状态就会有30%叛变,攻击我方,可以是技能,不是混乱状态,是叛变了,必须做掉,可以用毒
寄掉,因为不能干队友,只能毒杀。

4,股子抛抛乐
显示一个随机四位数,伤害就是这个数字,数字可以跳动,轩辕剑三那种

退隐....
回复

使用道具 举报

素材区好人

梦石
5
星屑
12559
在线时间
4345 小时
注册时间
2011-7-21
回帖
2264

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

发表于 2026-5-31 11:25:00 | 显示全部楼层
本帖最后由 无忧谷主幻 于 2026-5-31 11:31 编辑
y967 发表于 2026-5-31 10:34
1,共情者/高阶共情者

会给与别人同情的角色,类似于奶妈又不是,圣骑,对,圣骑,牺牲自我50%血量,给同 ...


1,扣除1号角色现有hp的50%,并给其他角色增加扣除的hp量
[pre lang="ruby"]actor_main = $game_party.actors[0]
return if actor_main.nil? || actor_main.dead?
# 计算转移HP量:1号角色当前HP的50%,保底1点
transfer_hp = (actor_main.hp * 0.5).to_i
transfer_hp = [transfer_hp, 1].max
# 1号角色扣血
actor_main.hp -= transfer_hp
# 其他存活队员加等量HP
for actor in $game_party.actors
  next if actor == actor_main || actor.nil? || actor.dead?
  actor.hp = [actor.hp + transfer_hp, actor.maxhp].min
end[/pre]
2,加上给敌方也恢复hp的判断即可
[pre lang="ruby"]# 敌方全体存活敌人,加等量HP
for enemy in $game_troop.enemies
  next unless enemy.exist? # 仅给存活的敌人生效,跳过已死亡/不存在的
  enemy.hp = [enemy.hp + transfer_hp, enemy.maxhp].min
end[/pre]
4,这不是纯事件就能做吗,其实之前2个也是纯事件就可以做
11.png

点评

因为伤害公式会在动画表演之前,所以想让伤害在动画之后,就要给它个开关, damage_pop就是这个开关,动画表演之后打开才会显示伤害  发表于 2026-6-1 10:20
damage_pop就是让伤害显示出来的意思是吗,感觉了有存储伤害,对象方,使用方,然后显示伤害,就可以做很多套路出来,加上一点条件判断  发表于 2026-6-1 10:07
除了分担伤害外, 其他技能效果全部可用事件做  发表于 2026-6-1 09:54
对象.damage = XXXX ; 对象.damage_pop = true 就是显示伤害, 默认事件里的伤害处理也会显示伤害  发表于 2026-6-1 09:40
应该有弹出伤害数字的方法,彩虹神剑都有  发表于 2026-5-31 13:18
回复

使用道具 举报

梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2026-6-1 10:18:46 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2026-6-1 10:38 编辑

赌命轮盘的效果不应该是这样的么

未标题-1.jpg

62_compress.gif

纯事件就可以做, 不需要状态,而且还能加上转盘表演等

技能目标为无, 动画A摆个pose, 然后公共事件

先随机一个变量A, 它就是轮盘指针,  然后, 拿另一个变量B获取场上的人员

脚本: $game_variables[10086]=($game_party.actors +
$game_troop.enemies).find_all{|i| i.exist?}

这样变量B就是场上所有存活的人的数组

想直接得到结果, 那直接用脚本

a = $game_variables[10085]
b = $game_variables[10086]
c = b[c % b.size]
c.add_state(1)
c.animation_id = 10086

想表演一下轮盘转动, 那就要用到循环和等待了, 然后在准备个变量C, 让C = A, 然后每一次循环都让变量C-1, 然后

c = $game_variables[10087]
b = $game_variables[10086]
d = b[a % b.size]
d.animation_id = 10087

d 就是当前指针所指向的目标, 给它播放一个没中的动画, 直到变量C <= 0 ,退出循环, 然后调用之前的命中脚本, 这就是我上面的GIF表演效果

※ 不建议直接用1号状态作为即死状态, 去新建个其他的状态, 把当做HP为0勾起来, 用它作为即死状态比较好, 因为1号状态是系统默认死亡状态, 如果免疫它, 那就永远死不掉了, 笑

点评

就是个彩蛋嘛,轮盘就是彩蛋,你怎么可能成为主攻技能呢,增加点元素而已  发表于 2026-6-1 12:27
那一样没考虑平衡,打小怪直接普通技能秒不就行了, 赌脸图啥呢,发动条件苛刻命中率不高,效果又要看脸的技能, 和辣鸡又有啥区别, 笑  发表于 2026-6-1 12:00
BOSS都是几万血,考虑几千零头,不太有必要,基本出这个数字伤害就是中期了,BOSS都是大几万血,主要是对付小怪的一点奖励  发表于 2026-6-1 11:58
当然BOSS要区别对待啦,主要是对小怪的,一个彩蛋效果,不作为主要攻击方式,不然就会无限SL不用玩了,而且这种技能发动条件苛刻,命中率也不高  发表于 2026-6-1 11:52
而你那个随机伤害的,如果用固定伤害,那一样也是打BOSS开场来一发,没随到高伤害就SL重来, 这方面的平衡你可没考虑呦, 笑  发表于 2026-6-1 11:50
回复

使用道具 举报

梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2026-6-1 10:52:33 | 显示全部楼层
偷技能, 偷技能本身很容易做, 主要是设计问题,  如果你的技能绑定了角色动作表演, 那当然不能给别人用, 这种技能就偷不了

还有一些特殊效果的技能没有针对双方处理(比如你之前搞的一堆只限定角色使用的技能, 笑),这类的当然也不能给敌人或者我方偷

所以, 想玩偷技能, 要么限定只有某些技能能偷(青魔法), 要么所有技能都做好考虑敌我双方都能用的情况(百变怪), 要么,去做AB技能,相同名字的技能区分敌我双方

而选择做青魔法, 而且还是"用主动技能来偷', 那只要用技能的公共事件去用 受方.id == XXX 去搞一堆分歧就行了, 如果要像FF那样挨到特定技能才能学会, 那就做AB技能, 给每个可以学的敌人技能里附带公共事件, 里面判断 受方.id == 指定角色 时,给他学会技能

点评

目前我做的技能是AB技能,敌人掉落的秘籍是敌人本来就有的,笑,就是伤害还比敌人强一些,这样就不算偷了,算高仿,笑,因为要8回合击败才掉的  发表于 2026-6-1 17:48
AB技能嘛, 黑化强十倍, 洗白弱八分 是ACE界规则, 笑  发表于 2026-6-1 15:49
这个还是弃坑了吧,一般BOSS技能都强大,我方属于被压制方,平衡不好做。  发表于 2026-6-1 12:45
回复

使用道具 举报

梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2026-6-1 12:10:59 | 显示全部楼层
未标题-1.jpg

技能伤害固定数值随机, 不如倍率随机, 这样一样"赌脸" ,但是又有成长性, 不至于前期SL高数值秒天秒地, 后期就算给你高数字也是抓痒成为鸡肋

我这招加了个暗门, 每场战斗第一次用只会在50-120%之间随机, 免得给人的感觉太超模或者太废

点评

这些是我给89的角色设计的,这个角色职业是类似外交官一样的商人,所以技能组是以美国的国际形象来设计的, 笑  发表于 2026-6-1 15:47
当然不是临时做的, 实际上你的那些脑洞大部分我都有类似效果,笑,这种效果默认XP就可以实现,把分散度写100就差不多是这种了  发表于 2026-6-1 15:44
战力投资和战力梭哈又是什么鬼,你脑洞也不少啊,难道是每次存储变量,到几千就一次性释放  发表于 2026-6-1 12:30
逢五逢三又是什么幺蛾子,莫不是我新脑洞的随机数效果,不过我加了复杂机制变成组合放大招了 hiahiahia....  发表于 2026-6-1 12:28
草,你是临时做的,牛啊,这样确实解决了一个平衡的问题,暗门怎么做呢  发表于 2026-6-1 12:25
回复

使用道具 举报

梦石
0
星屑
17561
在线时间
4249 小时
注册时间
2013-7-18
回帖
2491
 楼主| 发表于 2026-6-1 12:24:04 | 显示全部楼层
1,大姐姐的爱

奶你等于毒死你,毒奶,不不,是奶你,还要让你中毒,只对18号叛变者有效,其他人就是正常的奶,配合叛变者使用

2,真心话大冒险

技能弹出真心话,如果敌人答错了,就会造成伤害,随机数好了,反正敌人没有智力,没那么简单,一旦答对了呢,你偷看过寡妇洗澡吗,

那你怎么知道河里不深的,答对两次就得放大招了,诡计而已,答题是一个噱头,组合法才是精髓

3,天工开物

好吧,祭出一点好玩的,12个符/咒/图腾,组合法,打出三个一组,组成一个阵法,效果是攻击阵或防御阵,自定,敌人也有效,比如敌人也打出猛攻阵的时候,我方才打出两个符,可以临时组成防御阵,前两个符定属性,威力,比如火,2,第三个定是攻击/防御/速度,就灵活机动。如果简单点,直接打出攻击或防御也可以。也可以是一个机关图,可以做动画,每个做一个,三个做一个组合动画显示机关/图腾巧妙,出现组合图。

4,公平决斗

战斗时,强制攻防双方的速度差距不超过10,其他就不动了,毕竟CP制很吃速度的,先手一方优势很大,经常打不到人几个回合下来就失去平衡了
退隐....
回复

使用道具 举报

梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2026-6-1 16:26:02 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2026-6-1 16:29 编辑

2.类似这些"契约系"技能吧

未标题-1.jpg

继承合约: 给自己以外的友方一个状态, 当一方挂掉的时候, 剩余的TP和MP都会加给对方

互不攻击协议: 给目标一个状态, 持有这个状态的敌人如果攻击自己, 就会"违约",然后受到2倍伤害的反伤,同时附带 [丢脸]debuff(四维降低5%) ,当然, 如果自己攻击该敌人也一样"违约" 笑

不耗蓝协议: 给全场一个状态, 如果有出现消耗MP的行为, 那就"违约", 终止行动且当前MP减半

死斗宣言: 2回合内,全场任何恢复技能和药品都禁止使用

不设防宣章: 2回合内, 全场防御和魔防为0

这类的技能特点是: 效果不是立即出现, 而是通过特定行为触发的.效果也比较强力, 自己不留心也会中招, 当然, 因为参考的是"美国", 所以当然己方会有各种手段"双标", 也不算自爆技, 笑

而且, 像互不攻击协议,不耗蓝协议这种, 敌人是有概率会"异议"的(逆转裁判梗), 所以也不是能随心所欲的用, 笑








点评

协议解除当然敌人也一起解除, 我可不会把强力效果的技能这么容易使用, 笑  发表于 2026-6-1 17:46
腻换人了,敌人还生效,腻够可以的  发表于 2026-6-1 17:42
而且我可以战斗换人,换下场协议就作废了,等于想什么时候取消是玩家自己决定, 所以才说,不至于变"自爆技", 笑  发表于 2026-6-1 17:37
重点是"双标", 禁止恢复,但是我有众多被动系能力回血,也有"调合"这种来绕过技能检测,笑  发表于 2026-6-1 17:36
不耗蓝做法和保命符差不多, 互不攻击和反伤的做法差不多, 禁止恢复需要改技能使用判断, 不设防状态做就行了  发表于 2026-6-1 17:34
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部