Project1

标题: 赌命轮盘 [打印本页]

作者: y967    时间: 5 天前
标题: 赌命轮盘
1,赌命轮盘

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

RUBY 代码复制
  1. #==============================================================================
  2. # ** Game_Battler
  3. #------------------------------------------------------------------------------
  4. #  本类处理战斗者。此类作为 Game_Actor 类和 Game_Enemy 类的超类使用。
  5. #==============================================================================
  6.  
  7. class Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # * 判定即死状态 (覆盖原方法以添加自定义逻辑)
  10.   #--------------------------------------------------------------------------
  11.   alias original_slip_damage? slip_damage?
  12.  
  13.   def slip_damage?
  14.     # 首先执行原有的即死/持续伤害判定
  15.     if original_slip_damage?
  16.       return true
  17.     end
  18.  
  19.     # 自定义逻辑:检查状态 18
  20.     # 条件:
  21.     # 1. 当前战斗者拥有状态 18
  22.     # 2. 对手(如果存在)也拥有状态 18
  23.     # 3. 当前 HP < 最大 HP 的 50%
  24.     # 4. 随机数 < 30% (即 0, 1, 2 在 0-9 之间)
  25.  
  26.     if @states.include?(18)
  27.       # 获取对手引用
  28.       opponent = nil
  29.       if self.is_a?(Game_Actor)
  30.         # 如果是演员,对手通常是当前的敌人目标,这里简化为检查是否存在任意敌人也有状态18
  31.         # 在 RMXP 默认战斗中,通常是一对多或多对一,这里假设“双方”指战场上的对立阵营
  32.         $game_troop.enemies.each do |enemy|
  33.           if enemy.exist? && enemy.states.include?(18)
  34.             opponent = enemy
  35.             break
  36.           end
  37.         end
  38.       elsif self.is_a?(Game_Enemy)
  39.         # 如果是敌人,检查演员队伍中是否有状态18
  40.         $game_party.actors.each do |actor|
  41.           if actor.exist? && actor.states.include?(18)
  42.             opponent = actor
  43.             break
  44.           end
  45.         end
  46.       end
  47.  
  48.       # 如果找到了对立阵营也有状态18的单位
  49.       if opponent != nil
  50.         # 检查血量是否低于 50%
  51.         if self.hp > 0 && self.hp < (self.maxhp / 2.0)
  52.           # 30% 几率即死
  53.           if rand(10) < 3
  54.             # 设置为即死状态 (状态 ID 通常为 1,具体取决于数据库设置,这里直接扣血至0或添加即死状态)
  55.             # 更稳妥的方式是添加即死状态,让系统处理死亡
  56.             self.add_state(1) # 假设状态1是即死/战斗不能
  57.             return true
  58.           end
  59.         end
  60.       end
  61.     end
  62.  
  63.     return false
  64.   end
  65. end


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

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

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

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


作者: 无忧谷主幻    时间: 4 天前
本帖最后由 无忧谷主幻 于 2026-5-31 08:57 编辑

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


作者: 无忧谷主幻    时间: 4 天前
本帖最后由 无忧谷主幻 于 2026-5-31 11:31 编辑

4,我记得柳柳的黑暗圣剑传说有一个共产主义石,就是分担伤害
第一个,根据队伍人数减伤
RUBY 代码复制
  1. if self.armor2_id==150 or self.armor3_id==150 or self.armor4_id==150
  2.               if $message_string != "涉死"
  3.                 case $game_variables[550]
  4.                 when 0
  5.                   self.damage /= [[$game_party.actors.size,4].min-rand(2),1.3].max
  6.                   self.damage = self.damage.to_i
  7.                 when 1
  8.                   self.damage /= [[$game_party.actors.size,4].min,1.3].max
  9.                   self.damage = self.damage.to_i
  10.                 when 2
  11.                   self.damage /= [[$game_party.actors.size,4].min+rand(4),1.3].max
  12.                   self.damage = self.damage.to_i
  13.                 when 3
  14.                   num = 0
  15.                   for enemy in $game_troop.enemies
  16.                     if enemy.exist?
  17.                       num+=1
  18.                     end
  19.                   end
  20.                   self.damage /= [[$game_party.actors.size,4].min+num,1.3].max
  21.                   self.damage = self.damage.to_i
  22.                 $message_string = "共产主义"
  23.                 when 4
  24.                   num = 0
  25.                   for enemy in $game_troop.enemies
  26.                     if enemy.exist?
  27.                       num+=1
  28.                     end
  29.                   end
  30.                   self.damage /= [[$game_party.actors.size,4].min+num+rand(5),1.3].max
  31.                   self.damage = self.damage.to_i
  32.                 end               
  33.               else
  34.                 self.damage /= 10
  35.                 $message_string = "共产主义涉死"
  36.               end
  37.             end

第2步
给全体其他队员同样的伤害
RUBY 代码复制
  1. if target.armor2_id==150 or target.armor3_id==150 or target.armor4_id==150
  2.           if $message_string == "共产主义"
  3.             target.animation_id  = 37
  4.             target.animation_hit = true
  5.             case $game_variables[550]
  6.             when 0
  7.               for j in 0...[$game_party.actors.size,4].min
  8.                 if $game_party.actors[j] != target
  9.                   $game_party.actors[j].animation_id = 155
  10.                   $game_party.actors[j].animation_hit = true
  11.                   $game_party.actors[j].hp -= target.damage
  12.                   $game_party.actors[j].damage = target.damage
  13.                   $game_party.actors[j].damage_pop = true
  14.                 end
  15.               end
  16.             when 1
  17.               for j in 0...[$game_party.actors.size,4].min
  18.                 if $game_party.actors[j] != target
  19.                   $game_party.actors[j].animation_id = 155
  20.                   $game_party.actors[j].animation_hit = true
  21.                   $game_party.actors[j].hp -= target.damage
  22.                   $game_party.actors[j].damage = target.damage
  23.                   $game_party.actors[j].damage_pop = true
  24.                 end
  25.               end
  26.             when 2
  27.               for j in 0...[$game_party.actors.size,4].min
  28.                 if $game_party.actors[j] != target
  29.                   $game_party.actors[j].animation_id = 155
  30.                   $game_party.actors[j].animation_hit = true
  31.                   $game_party.actors[j].hp -= target.damage
  32.                   $game_party.actors[j].damage = target.damage
  33.                   $game_party.actors[j].damage_pop = true
  34.                 end
  35.               end
  36.             when 3
  37.               for j in 0...[$game_party.actors.size,4].min
  38.                 if $game_party.actors[j] != target
  39.                   $game_party.actors[j].animation_id = 155
  40.                   $game_party.actors[j].animation_hit = true
  41.                   $game_party.actors[j].hp -= target.damage
  42.                   $game_party.actors[j].damage = target.damage
  43.                   $game_party.actors[j].damage_pop = true
  44.                 end
  45.               end
  46.               for enemy in $game_troop.enemies
  47.                 if enemy.exist?
  48.                   enemy.animation_id = 155
  49.                   enemy.animation_hit = true
  50.                   enemy.hp -= target.damage
  51.                   enemy.damage = target.damage
  52.                   enemy.damage_pop = true
  53.                 end
  54.               end
  55.             when 4
  56.               for j in 0...[$game_party.actors.size,4].min
  57.                 if $game_party.actors[j] != target
  58.                   $game_party.actors[j].animation_id = 155
  59.                   $game_party.actors[j].animation_hit = true
  60.                   $game_party.actors[j].hp -= target.damage
  61.                   $game_party.actors[j].damage = target.damage
  62.                   $game_party.actors[j].damage_pop = true
  63.                 end
  64.               end
  65.               for enemy in $game_troop.enemies
  66.                 if enemy.exist?
  67.                   enemy.animation_id = 155
  68.                   enemy.animation_hit = true
  69.                   enemy.hp -= target.damage
  70.                   enemy.damage = target.damage
  71.                   enemy.damage_pop = true
  72.                 end
  73.               end
  74.             end
  75.             target.damage_pop = true
  76.             @status_window.refresh
  77.             @status_window.update
  78.             @phase4_step = 6
  79.           end
  80.         end



作者: y967    时间: 4 天前
本帖最后由 y967 于 2026-5-31 10:53 编辑

1,共情者/高阶共情者

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

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

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

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


作者: 无忧谷主幻    时间: 4 天前
本帖最后由 无忧谷主幻 于 2026-5-31 11:31 编辑
y967 发表于 2026-5-31 10:34
1,共情者/高阶共情者

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


1,扣除1号角色现有hp的50%,并给其他角色增加扣除的hp量
RUBY 代码复制
  1. actor_main = $game_party.actors[0]
  2. return if actor_main.nil? || actor_main.dead?
  3. # 计算转移HP量:1号角色当前HP的50%,保底1点
  4. transfer_hp = (actor_main.hp * 0.5).to_i
  5. transfer_hp = [transfer_hp, 1].max
  6. # 1号角色扣血
  7. actor_main.hp -= transfer_hp
  8. # 其他存活队员加等量HP
  9. for actor in $game_party.actors
  10.   next if actor == actor_main || actor.nil? || actor.dead?
  11.   actor.hp = [actor.hp + transfer_hp, actor.maxhp].min
  12. end

2,加上给敌方也恢复hp的判断即可
RUBY 代码复制
  1. # 敌方全体存活敌人,加等量HP
  2. for enemy in $game_troop.enemies
  3.   next unless enemy.exist? # 仅给存活的敌人生效,跳过已死亡/不存在的
  4.   enemy.hp = [enemy.hp + transfer_hp, enemy.maxhp].min
  5. end

4,这不是纯事件就能做吗,其实之前2个也是纯事件就可以做

作者: 灯笼菜刀王    时间: 3 天前
本帖最后由 灯笼菜刀王 于 2026-6-1 10:38 编辑

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





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

技能目标为无, 动画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号状态是系统默认死亡状态, 如果免疫它, 那就永远死不掉了, 笑

作者: 灯笼菜刀王    时间: 3 天前
偷技能, 偷技能本身很容易做, 主要是设计问题,  如果你的技能绑定了角色动作表演, 那当然不能给别人用, 这种技能就偷不了

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

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

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

作者: 灯笼菜刀王    时间: 3 天前


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

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


作者: y967    时间: 3 天前
1,大姐姐的爱

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

2,真心话大冒险

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

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

3,天工开物

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

4,公平决斗

战斗时,强制攻防双方的速度差距不超过10,其他就不动了,毕竟CP制很吃速度的,先手一方优势很大,经常打不到人几个回合下来就失去平衡了
作者: 灯笼菜刀王    时间: 3 天前
本帖最后由 灯笼菜刀王 于 2026-6-1 16:29 编辑

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



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

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

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

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

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

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

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









作者: 灯笼菜刀王    时间: 3 天前
本帖最后由 灯笼菜刀王 于 2026-6-1 16:52 编辑

3, 类似这招吧



元素之灵是该角色的特色能力, 技能组是围绕它来设计的


使用属性魔法后, 就会在UI上保留"元素之灵"


然后, 根据元素之灵的组合, 使用"元素聚变"这招时, 就会变成另外技能, 因为一般要3回合才能使用(2回合凑牌, 笑), 所以技能效果很强力 , 7种属性互相组合出的技能如下



作者: y967    时间: 前天 10:09
灭世轮回

RUBY 代码复制
  1. # ------------------------------------------------------------------
  2. # 脚本名称: CheckLevelAndReset.rb
  3. # 功能: 检查队伍等级,若有人大于10级,则记录TXT,删档,退出
  4. # 使用方法: 在事件中使用 "脚本" 命令,输入: check_level_and_reset
  5. # ------------------------------------------------------------------
  6.  
  7. def check_level_and_reset
  8.   # 1. 遍历角色,检查等级
  9.   level_check_passed = false
  10.   for actor in $game_party.actors
  11.     if actor.level > 10
  12.       level_check_passed = true
  13.       break
  14.     end
  15.   end
  16.  
  17.   # 2. 如果条件满足
  18.   if level_check_passed
  19.     # 设置全局变量1为10 (虽然马上要退出,但为了保险起见先设置,尽管存档会被删)
  20.     $game_variables = 10
  21.  
  22.     # 3. 记录到 TXT 文件 (使用 Game 目录下的 data 文件夹,或者根目录)
  23.     # 注意:RMXP 默认工作目录是游戏根目录
  24.     file_path = "./persistent_var1.txt"
  25.     File.open(file_path, "w") do |f|
  26.       f.write("10")
  27.     end
  28.  
  29.     # 4. 销毁所有存档
  30.     for i in 1..4 # RMXP 通常有4个存档位 Save1.rxdata 到 Save4.rxdata
  31.       save_file = "Save#{i}.rxdata"
  32.       if FileTest.exist?(save_file)
  33.         File.delete(save_file)
  34.       end
  35.     end
  36.  
  37.     # 5. 提示用户 (可选,因为马上退出)
  38.     # $game_message.add("检测到高等级角色,正在重置游戏...")
  39.  
  40.     # 6. 退出游戏
  41.     # 使用 exit 会直接关闭进程,是最彻底的退出方式
  42.     exit
  43.   else
  44.     # 如果没满足条件,可以做其他处理,这里留空
  45.   end
  46. end


脚本2,添加全局变量存储文本
RUBY 代码复制
  1. # ------------------------------------------------------------------
  2. # 脚本名称: AutoLoadVarFromTxt.rb
  3. # 功能: 在新游戏开始时,检查是否存在 persistent_var1.txt,如有则读取并赋值给变量1
  4. # 安装: 放在主脚本列表的底部,确保在 Scene_Title 之后
  5. # ------------------------------------------------------------------
  6.  
  7. class Scene_Title
  8.   # 别名原有的 new_game 命令,以便插入我们的逻辑
  9.   alias :original_command_new_game :command_new_game
  10.  
  11.   def command_new_game
  12.     # 执行原有的新游戏初始化逻辑
  13.     original_command_new_game
  14.  
  15.     # --- 自定义逻辑开始 ---
  16.     # 尝试读取持久化变量文件
  17.     file_path = "./persistent_var1.txt"
  18.     if FileTest.exist?(file_path)
  19.       begin
  20.         content = File.read(file_path).strip
  21.         if content != ""
  22.           # 将读取到的字符串转换为整数并赋值给全局变量1
  23.           $game_variables = Integer(content)
  24.  
  25.           # 可选:读取后删除文件,防止下次新游戏再次覆盖(根据需求决定)
  26.           # 如果希望每次新游戏都重置,则保留删除;如果希望永久保留直到再次被脚本覆盖,则注释掉下一行
  27.           File.delete(file_path)
  28.         end
  29.       rescue => e
  30.         # 如果读取失败(如格式错误),忽略错误,避免游戏崩溃
  31.         print("读取持久化变量失败: #{e.message}")
  32.       end
  33.     end
  34.     # --- 自定义逻辑结束 ---
  35.   end
  36. end


如果通关等级高于10级,则删除存档,重新开始,记录全局变量为10,当全局变量为10,则出生给一个提示道具,
这个道具可以降低等级一级,然后通关时再次进入地狱轮回场景,接受审判,直到等级不高于10,则进入下一场游戏正常场景,
还不知道怎么使用这个全局变量
作者: 无忧谷主幻    时间: 昨天 09:11
y967 发表于 2026-6-2 10:09
灭世轮回

# ------------------------------------------------------------------

这不就是2周目吗,我记得给你的工程中也有





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