设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 418|回复: 177
打印 上一主题 下一主题

[原创发布] 无用之物

[复制链接]

Lv4.逐梦者

梦石
0
星屑
16860
在线时间
4199 小时
注册时间
2013-7-18
帖子
2679
跳转到指定楼层
1
发表于 2026-5-23 07:33:40 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 y967 于 2026-5-27 08:09 编辑



1,金钟罩,任何伤害为0,包括一切无视效果都为0
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 金钟罩状态:拥有此状态时,受到的伤害恒为0
  3. #==============================================================================
  4. module GoldenBell
  5.   # ★ 金钟罩对应的状态ID(根据你在数据库里设置的状态编号修改)
  6.   STATE_ID = 52
  7. end
  8.  
  9. class Game_Battler
  10.   #--------------------------------------------------------------------------
  11.   # ● 拦截攻击造成的伤害
  12.   #--------------------------------------------------------------------------
  13.   alias goldenbell_attack_effect attack_effect unless method_defined?(:goldenbell_attack_effect)
  14.   def attack_effect(attacker)
  15.     result = goldenbell_attack_effect(attacker)
  16.     # 如果伤害数值大于0,并且自身拥有金钟罩状态
  17.     if @damage.is_a?(Numeric) && @damage > 0 && state?(GoldenBell::STATE_ID)
  18.       @hp += @damage   # 撤销已经扣减的HP
  19.       @damage = 1      # 显示伤害改为0
  20.     end
  21.     return result
  22.   end
  23.  
  24.   #--------------------------------------------------------------------------
  25.   # ● 拦截技能造成的伤害
  26.   #--------------------------------------------------------------------------
  27.   alias goldenbell_skill_effect skill_effect unless method_defined?(:goldenbell_skill_effect)
  28.   def skill_effect(user, skill)
  29.     result = goldenbell_skill_effect(user, skill)
  30.     if @damage.is_a?(Numeric) && @damage > 0 && state?(GoldenBell::STATE_ID)
  31.       @hp += @damage
  32.       @damage = 0
  33.     end
  34.     return result
  35.   end
  36. end


2,绝对反击,我方血量 < 50% 时造成敌人当前血量一半伤害

RUBY 代码复制
  1. # ============================================================
  2. # 自定义技能:我方血量 < 50% 时造成敌人当前血量一半伤害
  3. # 技能ID、动画ID 请根据你的数据库修改
  4. # ============================================================
  5. class Game_Battler
  6.   CUSTOM_SKILL_ID = 57    # 你的技能编号
  7.   CUSTOM_ANIM_ID  = 34    # 动画编号
  8.  
  9.   alias custom_skill_effect skill_effect unless method_defined?(:custom_skill_effect)
  10.   def skill_effect(user, skill)
  11.     # 如果是目标技能,并且使用者为我方角色且血量低于一半
  12.     if skill.id == CUSTOM_SKILL_ID &&
  13.        user.is_a?(Game_Actor) &&
  14.        user.hp < user.maxhp / 2
  15.  
  16.       # 伤害 = 目标当前生命值的一半
  17.       self.damage = self.hp / 2
  18.       self.hp -= self.damage
  19.       # 播放指定动画
  20.       self.animation_id = CUSTOM_ANIM_ID
  21.  
  22.       # 如果你还需要技能原本的状态附加、公共事件等,
  23.       # 可以在这里自行添加,例如:
  24.       #   skill.plus_state_set.each { |id| self.add_state(id) }
  25.       #   $game_temp.common_event_id = skill.common_event_id if skill.common_event_id > 0
  26.  
  27.       return true   # 技能成功
  28.     else
  29.       # 非指定技能或其他情况,执行原方法
  30.       return custom_skill_effect(user, skill)
  31.     end
  32.   end
  33. end


----优点,在反击时还可以播放一个动画,比如一个镜头大吼一声,而且血量大于50%时,伤害按原公式计算,不影响,该脚本短小精悍,冲突小。

3,法术反弹
RUBY 代码复制
  1. #==============================================================================
  2. # ★ 反弹伤害技能 (RMXP)
  3. # 功能:拥有指定状态的角色/敌人在受到技能伤害时,将伤害的 50% 反弹给攻击方。
  4. #       反弹伤害的数字会在原伤害显示结束后独立弹出。
  5. #==============================================================================
  6.  
  7. module ReboundConfig
  8.   # 拥有此状态的 battler 将获得伤害反弹效果
  9.   REBOUND_STATE_ID = 21   # <<<< 请改成你游戏中实际的状态 ID
  10.  
  11.   # 反弹伤害的比例(0.5 表示 50%,可修改为 0.3、0.7 等)
  12.   REBOUND_RATE = 0.5
  13. end
  14.  
  15. #==============================================================================
  16. # ■ Game_Battler (修改技能效果方法,添加反弹逻辑)
  17. #==============================================================================
  18. class Game_Battler
  19.   # 用于临时存放待显示的反弹伤害
  20.   attr_accessor :pending_rebound_damage
  21.  
  22.   alias rebound_skill_effect skill_effect
  23.   def skill_effect(user, skill)
  24.     # 先调用原始效果,确保伤害计算正常进行
  25.     effective = rebound_skill_effect(user, skill)
  26.  
  27.     # 仅在技能有效、目标存活、且自身拥有反弹状态时触发
  28.     if effective and self.hp > 0 and user.hp > 0 and self.state?(ReboundConfig::REBOUND_STATE_ID)
  29.       # 仅当最终伤害大于 0 时才反弹
  30.       if self.damage.is_a?(Numeric) && self.damage > 0
  31.         rebound = (self.damage * ReboundConfig::REBOUND_RATE).to_i
  32.         rebound = 1 if rebound < 1   # 至少有 1 点伤害
  33.         # 将反弹伤害直接扣除攻击者的 HP
  34.         user.hp -= rebound
  35.         # 把反弹伤害存入攻击者的临时变量,等待延迟显示
  36.         user.pending_rebound_damage = rebound
  37.       end
  38.     end
  39.  
  40.     effective
  41.   end
  42. end
  43.  
  44. #==============================================================================
  45. # ■ Scene_Battle (在伤害显示步骤中追加反弹伤害的弹出)
  46. #==============================================================================
  47. class Scene_Battle
  48.   # 保存原有的 update_phase4_step5 方法
  49.   alias rebound_update_phase4_step5 update_phase4_step5
  50.   def update_phase4_step5
  51.     # 1. 先执行原版的伤害显示逻辑(目标受到的伤害会先弹出)
  52.     rebound_update_phase4_step5
  53.  
  54.     # 2. 在所有正常伤害显示完毕后,处理反弹伤害
  55.     # 遍历所有队伍成员和敌人
  56.     all_battlers = $game_party.actors + $game_troop.enemies
  57.     all_battlers.each do |battler|
  58.       if battler.pending_rebound_damage != nil && battler.pending_rebound_damage > 0
  59.         # 设置伤害显示用的变量
  60.         battler.damage = battler.pending_rebound_damage
  61.         battler.damage_pop = true
  62.         # 临时保存反弹伤害值,通过覆写伤害显示颜色可以区分(此处用普通伤害颜色)
  63.         battler.critical = false  # 非暴击,保持普通颜色
  64.         # 立即强制该 battler 进入伤害动画显示流程
  65.         battler.damage_pop = true
  66.         # 清除临时变量,确保只显示一次
  67.         battler.pending_rebound_damage = nil
  68.  
  69.         # 因为原版 refresh 后可能不会立即绘制伤害,这里手动触发一次伤害动画
  70.         if battler.is_a?(Game_Actor)
  71.           @status_window.refresh
  72.           @active_battler = battler  # 暂时设为活动战斗者,确保 sprite 刷新
  73.           # 重置 phase4 步骤以重新进入显示流程(简单有效)
  74.           @phase4_step = 5
  75.         end
  76.       end
  77.     end
  78.   end
  79. end


----该脚本优点在于反弹的法术会略晚于技能伤害,但不能变色,搓不出来变色,略有遗憾,还可以加入延时计时器,没做,可以自定义反弹伤害弹出延时时间,总之三个脚本呢都短小精悍,白板工程都可以用,也可以一起用无冲突,目前为止。
退隐....

Lv5.捕梦者

梦石
0
星屑
41773
在线时间
5970 小时
注册时间
2006-11-10
帖子
6962
14
发表于 2026-5-25 10:04:12 | 只看该作者
本帖最后由 灯笼菜刀王 于 2026-5-25 11:33 编辑

1. self.hp -= self.damage 之前加上 self.damage = (self.damage * 1.3).round if self.state?(10086)   # 对伤害进行增减变化的做法我已经教过很多次了, 不会举一反三, 下次再问我就无视了

2, 和反弹的做法一样, 判断对象不同
给你成品脚本, 吸血脚本更新  

设置方法 FS=50%0.8   50%表示50%概率,0.8表示反噬0.8倍伤害

RUBY 代码复制
  1. module RPG
  2.   class Skill
  3.     def description
  4.       description = @description.split(/#/)[0]
  5.       return description != nil ? description : ''
  6.     end
  7.     def 吸血 ;@description[/XHP\=(\d+)\%(\d*)/] ;return $1 ? [$1,$2] : nil ;end
  8.     def 吸蓝 ;@description[/XSP\=(\d+)\%(\d*)/] ;return $1 ? [$1,$2] : nil ;end
  9.     def 反噬 ;@description[/FS\=(\d+)\%([.0-9]+)/] ;return $1 ? [$1,$2] : nil ;end
  10.   end
  11. end
  12.  
  13. class Game_Battler
  14.   attr_accessor :pending_rebound_damage
  15.   alias caidao_skill_effect skill_effect
  16.   def skill_effect(user, skill)
  17.     old_hp = self.hp
  18.     eff = caidao_skill_effect(user, skill)
  19.     $game_variables[1] = self.damage.is_a?(Numeric) ? self.damage : 0
  20.     if eff and (a=self.damage).is_a?(Numeric) and a > 0
  21.       (a=self.damage / 2 ;self.hp -= a ;self.damage += a ;
  22.       self.pending_rebound_damage = "#{self.damage}增伤#{a}") if user.state?(10086) and rand(100) < 50
  23.       if (r=skill.反噬) ; m,n = r[0].to_i,r[1].to_f
  24.         (a=(self.damage * n).round ;user.hp -= a ;
  25.          user.pending_rebound_damage = "反噬#{a}") if rand(100) < m
  26.       end
  27.       if (r=skill.吸血)
  28.         m,n = r[0].to_i,r[1].to_i ;f = [self.damage * m / 100,old_hp]
  29.         f.push(n) if n > 0 ;a = f.min
  30.         user.hp += a ;#user.pending_rebound_damage = "吸血#{a}"
  31.       end
  32.       if (r=skill.吸蓝)
  33.         m,n = r[0].to_i,r[1].to_i ;f = [self.damage * m / 100,old_hp]
  34.         f.push(n) if n > 0 ; a = f.min
  35.         user.sp += a ;#user.pending_rebound_damage = "吸蓝#{a}"
  36.       end
  37.     end ;return eff
  38.   end
  39. end


3, 数据库,状态设置,  定量10, 其他50%  动画: 对象方隐藏, 贴个猪 , 解决

点评

当然了技术牛脾气就大,一点也不稀奇,没有本事就没有脾气,对了,忽然想到一个防御和加血就减攻击的脑洞,弱者恒弱,这个你可以不用做,笑  发表于 2026-5-25 10:52
我只想和"愿意自己探索"的交流, 愿意自己学的我不介意帮一把给思路, 如果你一直不想自己思考, 那我就不回答了  发表于 2026-5-25 10:22
你好凶啊,大家讲道理,生气会犯了嗔戒的,你可以回答,也可以不回答,回答就感谢你  发表于 2026-5-25 10:17

评分

参与人数 1+1 收起 理由
y967 + 1 凶萌

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
16860
在线时间
4199 小时
注册时间
2013-7-18
帖子
2679
13
 楼主| 发表于 2026-5-25 07:09:19 | 只看该作者
1,给敌人附加一个状态,增加敌人受伤害30%,AI不好使


2,七伤拳
伤敌1000,自损800,AI搓出来了,只扣血没有显示数字效果

RUBY 代码复制
  1. #==============================================================================
  2. # ** Game_Battler
  3. #------------------------------------------------------------------------------
  4. #  添加技能反噬效果
  5. #  配置区域:REBOUND_SKILL_IDS 填入需要具有反噬效果的技能ID
  6. #==============================================================================
  7.  
  8. class Game_Battler
  9.  
  10.   # [配置] 在这里填入需要拥有“50%几率反噬0.8倍伤害”效果的技能ID
  11.   # 例如: [15, 23, 40] 表示 ID 为 15, 23, 40 的技能会触发此效果
  12.   REBOUND_SKILL_IDS = [57,58] # 默认设为1,请根据实际情况修改
  13.  
  14.   # 别名化原有的技能效果方法,以便插入额外逻辑
  15.   alias_method :rebound_skill_effect_original, :skill_effect
  16.  
  17.   def skill_effect(user, skill)
  18.     # 先执行原有的技能效果计算(包括伤害计算、状态添加等)
  19.     result = rebound_skill_effect_original(user, skill)
  20.  
  21.     # 只有当技能是攻击性技能(造成HP伤害)且命中时才触发反噬
  22.     # self.damage > 0 表示造成了正向伤害(HP减少)
  23.     if self.damage.is_a?(Integer) && self.damage > 0
  24.       if REBOUND_SKILL_IDS.include?(skill.id)
  25.         # 50% 几率触发
  26.         if rand(100) < 50
  27.           # 计算反噬伤害:当前造成伤害的 0.8 倍
  28.           rebound_damage = (self.damage * 0.8).to_i
  29.  
  30.           # 确保反噬伤害至少为 1,避免显示 0
  31.           if rebound_damage < 1
  32.             rebound_damage = 1
  33.           end
  34.  
  35.           # 对使用者(user)造成伤害
  36.           # 注意:user 可能是敌人也可能是演员,Game_Battler 通用
  37.           user.hp -= rebound_damage
  38.  
  39.          rebound_damage = "[199021133]自伤#{rebound_damage}"
  40.  
  41.           # 可选:在用户头上显示反噬伤害数字(需要场景支持,通常自动处理)
  42.           # 如果希望显示伤害数字,可能需要更复杂的 Scene_Battle 修改
  43.           # 这里仅做数值扣除,保证逻辑正确。
  44.  
  45.           # 记录日志或提示(可选,取决于是否开启战斗日志)
  46.            #$game_temp.battle_messages.push("#{user.name} 受到了反噬!")
  47.         end
  48.       end
  49.     end
  50.  
  51.     return result
  52.   end
  53.  
  54. end



在40行自行添加rebound_damage = "[199021133]自伤#{rebound_damage}",未能显示数字,也未显示文字。打开47行,出错,不打开就可以。

3,变猪

让敌人变成一只猪,属性减半,目前有时候会出错, battle 2,偶尔会,不会经常出现

RUBY 代码复制
  1. #==============================================================================
  2. # ▼ 变形技能(变猪/青蛙) + 属性减半 + 战斗图替换
  3. #==============================================================================
  4. module Polymorph
  5.   # 技能ID
  6.   SKILL_ID = 57
  7.   # 变形状态ID
  8.   PIG_STATE_ID   = 21
  9.   FROG_STATE_ID  = 22
  10.   # 战斗图文件名(位于 Graphics/Battlers/ 目录,不含后缀)
  11.   PIG_BATTLER    = "pig"
  12.   FROG_BATTLER   = "frog"
  13. end
  14.  
  15. #--------------------------------------------------------------------------
  16. # ● 技能使用效果:命中时随机附加变猪或变青蛙状态
  17. #--------------------------------------------------------------------------
  18. class Game_Battler
  19.   alias poly_skill_effect skill_effect
  20.   def skill_effect(user, skill)
  21.     effective = poly_skill_effect(user, skill)
  22.     return effective unless effective
  23.     return effective unless skill.id == Polymorph::SKILL_ID
  24.  
  25.     # 随机选择变形状态
  26.     state_id = rand(2) == 0 ? Polymorph::PIG_STATE_ID : Polymorph::FROG_STATE_ID
  27.     self.add_state(state_id) unless self.state_full?(state_id)
  28.     effective
  29.   end
  30. end
  31.  
  32. #--------------------------------------------------------------------------
  33. # ● 基本属性减半(若处于变形状态)
  34. #--------------------------------------------------------------------------
  35. class Game_Battler
  36.   [:str, :dex, :agi, :int, :atk, :pdef, :mdef, :eva].each do |stat|
  37.     alias_method("poly_base_#{stat}", stat)
  38.     define_method(stat) do
  39.       val = send("poly_base_#{stat}")
  40.       if [Polymorph::PIG_STATE_ID, Polymorph::FROG_STATE_ID].any? { |id| self.state?(id) }
  41.         val / 2
  42.       else
  43.         val
  44.       end
  45.     end
  46.   end
  47. end
  48.  
  49. #--------------------------------------------------------------------------
  50. # ● 敌方战斗图替换(处于变形状态时显示猪/蛙图)
  51. #--------------------------------------------------------------------------
  52. class Game_Enemy < Game_Battler
  53.   alias poly_battler_name battler_name
  54.   def battler_name
  55.     if state?(Polymorph::PIG_STATE_ID)
  56.       Polymorph::PIG_BATTLER
  57.     elsif state?(Polymorph::FROG_STATE_ID)
  58.       Polymorph::FROG_BATTLER
  59.     else
  60.       poly_battler_name
  61.     end
  62.   end
  63. end

点评

说的好,我也这样认为,AI害超不过人类,在这之前,区别于伸手党,我会用一下AI,思考一下,即使伸手党,你的脚本令我的游戏蓬荜生辉,亦是美事  发表于 2026-5-25 11:30
现在有AI, 你把你写的脚本发给它它会帮你找出错误, 这才是AI的用法,它当辅助工具的时候最好用,并不是脚本生成器  发表于 2026-5-25 10:32
只想XP用, F1就行, 脚本入门视频什么的也有不少, 我没看任何正规课程书, 就只F1和自己动手试学会的RGSS1  发表于 2026-5-25 10:29
哦,推荐看什么书呢,或者什么视频学习ruby语言呢,一般的语法就可以了,毕竟不会研究太深  发表于 2026-5-25 10:19
不是,是47行前面这个#去掉才会出错,脚本是可以运行的,就是不显示文字而已,不要小看AI,伟大的AI  发表于 2026-5-25 10:06
退隐....
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
41773
在线时间
5970 小时
注册时间
2006-11-10
帖子
6962
12
发表于 2026-5-24 14:15:32 | 只看该作者
本帖最后由 灯笼菜刀王 于 2026-5-24 14:46 编辑

其实, 不需要纠结"显示抵消多少伤害",  你要的是"让玩家知道效果触发"的表演而已,  那可以直接播放一个动画就行了


▲像这样,不用显示什么抵消XX伤害, 你也知道伤害被抵消了吧, 笑


甚至, 可以这样, 战斗前就表演, 这样玩家也知道触发效果了



而且因为公式结算是在动画之前, 所以在攻击动画之前的表演更容易做, 只要直接播放动画即可, 不需要考虑滞后显示

把 1的句子改成   (a=(self.damage * 0.3).round ;self.damage = (self.damage * 0.7).round ;
self.animation_id = 10086) if self.state?(10086) and self.hp < self.maxhp / 2

这样触发效果的时候, 就会先播放10086号动画,然后再播放攻击动画了

点评

只是多重状态显示在血量下面,文字而已,没有动画,那不是我的所在,没有那个能力,笑  发表于 2026-5-25 10:21
动画也一样是"'一个对象只能同时播放一个动画", 你有用多重状态动画脚本,那状态动画可以无限  发表于 2026-5-25 09:42
吓坏了,以为整个脚本冲突了,感觉一下崩溃了,根本不会查冲突啊,这字符是一点都不能错的,容错率太低了,都不知道哪里少了什么字符,冷汗  发表于 2026-5-25 07:23
删掉这句也出错,把整个B 3删掉重新复制过来,再复制进去就好了,可以显示动画了,原来是在self.hp -= self.damage 的上面加,一般都是在下面加  发表于 2026-5-25 07:21
1复制进去下一行出错  发表于 2026-5-24 16:59
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
41773
在线时间
5970 小时
注册时间
2006-11-10
帖子
6962
11
发表于 2026-5-24 11:33:06 | 只看该作者
本帖最后由 灯笼菜刀王 于 2026-5-24 11:42 编辑

有新问题就去开新贴

1,在 attack_effect ,skill_effect ,item_effect 三个地方, 找到 self.hp -= self.damage  在上面加一句

((a=(self.damage * 0.3).round ;self.damage = (self.damage * 0.7).round ;
self.pending_rebound_damage = "抵消#{a}") if self.state?(10086) and self.hp < self.maxhp / 2

不能用ailas, 要你确实的去找到位置改, 否则会影响基于hp的操作(例如之前的无忧谷的保命符) , 实际上你1号脚本就会有这个问题, 因为它的ailas是把血逆向加回伤害值,从而实现"免伤", 先不说它并没有考虑到伤害值是可以超过剩余血量的, 就说在默认扣血的时候, 保命符的判定就已经启动了, 之后把血加回去并不算"免伤" , 笑

2, 在 skill_effect, 找到 self.hp -= self.damage  在上面加一句

(a=self.damage / 2 ;self.damage += a ;self.pending_rebound_damage = "增伤#{a}") if user.state?(10086) and rand(100) < 50

这个可以ailas 但是用ailas的话, 它和其他ailas的上下顺序会导致效果的不同, 比如它在吸血下面, 那吸血就只会吸正常伤害, 增伤的部分无效

想ailas, 就在我的吸血吸蓝脚本里,第18行下面加上

(a=self.damage / 2 ;self.hp -= a ;self.damage += a ;self.pending_rebound_damage = "增伤#{a}") if user.state?(10086) and rand(100) < 50

3, 去用公共事件做, 在我的吸血吸蓝脚本里,第17行下面加上一句 $game_variables[1] = self.damage.is_a?(Numeric) ? self.damage : 0  这样1号变量就保存了当前伤害值(负数为加血, 0为MISS) 以后需要公共事件调用伤害值的都找这个变量即可

然后, 行动方播放动画写法  
a = $scene.instance_variable_get(
:@active_battler)
a.animation_id = 10086

对象方播放动画的写法
a = $scene.instance_variable_get(
:@target_battlers)
a[0].animation_id = 10086

对象方弹伤害和扣血的写法
a = $scene.instance_variable_get(
:@target_battlers)
b = $game_variables[1] / 2
a[0].hp -= b
a[0].damage= b
a[0].damage_pop = true

自己去用条件分歧, 等待 等方式做效果吧 ,别告诉我用事件都搞不定你的脑洞, 笑




点评

hp只剩1的时候出现  发表于 2026-5-25 10:14
1金钟罩这个伤害问题目前还没有发现问题,任何伤害都是0,大概什么情况会出现  发表于 2026-5-24 16:33
但问题也出来了,自己身上也只能显示一个效果,所以,还是只能在数字前表演一个动画来的靠谱点,目前为止  发表于 2026-5-24 16:28
我想了,攻击方动画是作用在对方身上的,效果显示在自己身上,所以没有叠加烦恼,所以脑洞应该向这个方向倾斜,七伤拳?伤害1000自损800,之类的  发表于 2026-5-24 16:27
勿cue,我上学物理英语最好,数学化学最差经常垫底,对空间方位感知类有感觉,对数字逻辑内在分析没啥细胞,经常不知道兜里有多少钱,所以勿cue  发表于 2026-5-24 16:25
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
16860
在线时间
4199 小时
注册时间
2013-7-18
帖子
2679
10
 楼主| 发表于 2026-5-24 10:11:46 | 只看该作者
本帖最后由 y967 于 2026-5-27 08:09 编辑

AI无用

1,魔法盾代替品

状态,自身血量大于50%时,抵消伤害30%,血量低于50%无效,显示“抵消:XX”字样

AI搓不出来

2,伪连击

状态,做一个状态,技能有50%几率额外造成50%伤害,额外伤害另外显示

3,真连击   笑

血量低于50%,技能结束后有50%几率立即播放一个动画造成额外50%伤害,


退隐....
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
41773
在线时间
5970 小时
注册时间
2006-11-10
帖子
6962
9
发表于 2026-5-23 23:01:42 | 只看该作者
本帖最后由 灯笼菜刀王 于 2026-5-23 23:06 编辑

要增加你的"回头"时间, 需要改动战斗流程

找到下面这段脚本, 强行插入一个 步骤1.5
#--------------------------------------------------------------------------
  # ● 刷新画面 (主回合)
  #--------------------------------------------------------------------------
  def update_phase4
    case @phase4_step
    when 1
      update_phase4_step1
    when 1.5
      update_phase4_step1_5

    when 2
      update_phase4_step2
    when 3
      update_phase4_step3
    when 4
      update_phase4_step4
    when 5
      update_phase4_step5
    when 6
      update_phase4_step6
    end
  end

然后, 找到步骤1, 在新回合之前截断 强行把步骤1分成 1 和 1.5

  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 1 : 准备行动)
  #--------------------------------------------------------------------------
  def update_phase4_step1
    # 隐藏帮助窗口
    @help_window.visible = false
    # 判定胜败
    if judge
      # 胜利或者失败的情况下 : 过程结束
      return
    end
    # 强制行动的战斗者不存在的情况下
    if $game_temp.forcing_battler == nil
      # 设置战斗事件
      setup_battle_event
      # 执行战斗事件中的情况下
      if $game_system.battle_interpreter.running?
        return
      end
    end
    # 强制行动的战斗者存在的情况下
    if $game_temp.forcing_battler != nil
      # 在头部添加后移动
      @action_battlers.delete($game_temp.forcing_battler)
      @action_battlers.unshift($game_temp.forcing_battler)
    end
    # 未行动的战斗者不存在的情况下 (全员已经行动)
    if @action_battlers.size == 0
      # 开始同伴命令回合
      start_phase2
      return
    end
    @phase4_step = 1.5
  end
  def update_phase4_step1_5

    # 初始化动画 ID 和公共事件 ID
    @animation1_id = 0
    @animation2_id = 0
    @common_event_id = 0
    # 未行动的战斗者移动到序列的头部
    @active_battler = @action_battlers.shift
    # 如果已经在战斗之外的情况下
    if @active_battler.index == nil
      return
    end
    # 连续伤害
    if @active_battler.hp > 0 and @active_battler.slip_damage?
      @active_battler.slip_damage_effect
      @active_battler.damage_pop = true
    end
    # 自然解除状态
    @active_battler.remove_states_auto
    # 刷新状态窗口
    @status_window.refresh
    # 移至步骤 2
    @phase4_step = 2
  end

这样, 毒就会等吸血的工作结束才会上工了

当然, 以上是默认的脚本, 因为这部分也是热门修改地(比如CP制等就完全不适用), 所以能不能有效, 你自己试吧. 笑

点评

你的脚本在我的白板工程里也是毒先出现的,应该是我的CP制搞的鬼,没办法了  发表于 2026-5-24 10:13
如果你问的是前面的GIF,为什么中毒和吸血同时跳出来, 那不是毒伤, 是"中了毒状态", 敌人有个词条"毒刺: 让近身攻击自己的人中毒"  发表于 2026-5-24 09:12
所以, 你会出现毒覆盖吸血, 就是因为 行动后-吸血-新回合-毒 这些流程是连在一起的, 不是默认的情况, 所以问题在你这里呗  发表于 2026-5-24 09:08
我的脚本确实是同时,因为我是个体回合制不是总体回合制, 轮到自己行动才会弹指令出来, 所以会出现 上回合行动结束-显示吸血-新回合开始-显示毒  发表于 2026-5-24 09:06
我看白板工程是毒先显示,再放技能,也就是吸血,然后显示吸血,不会同时的啊,回合开始前先显示毒,然后再开始放技能,为什么你的脚本是同时  发表于 2026-5-24 06:54
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
41773
在线时间
5970 小时
注册时间
2006-11-10
帖子
6962
8
发表于 2026-5-23 20:53:17 | 只看该作者
本帖最后由 灯笼菜刀王 于 2026-5-23 21:17 编辑



这就是我把 伤害判定, 技能动画, 伤害显示, 技能名称显示 塞在一起的产物

5个技能的连续攻击, MISS或者没触发或者目标挂了的时候就会终止, 可以从任意一个技能开始使用(最后一招必须由第四招触发), 条件满足就会自动连下一招,  这个动画一共有5次伤害判定, 所以后面吸血就会有5次  






这就是我动画的设置方法, 不备注, 搁段时间我自己看都要懵一会.. 要拿出来做成通用脚本, 那工作量可不一般

点评

这个是真连击,我的连击是一个技能播放三次,笑  发表于 2026-5-23 21:32
工作量是89的, 这个脚本是要杀美工,笑, 他还把动画分大型中型小型呢, 没有一个整天作死的美工玩不来, 笑  发表于 2026-5-23 21:31
500多行的动画脚本,还没到底,应该是600行,这么长的动画脚本,数字哥有了你这个军师,是要逆天了  发表于 2026-5-23 21:28
这也太夸张了,这种工作量,看来不是一般人能玩的,这么复杂的写法,不按大众写法,莫不是猫腻,防修改,技术大佬防偷窃的幺蛾子。  发表于 2026-5-23 21:23
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
41773
在线时间
5970 小时
注册时间
2006-11-10
帖子
6962
7
发表于 2026-5-23 18:56:17 | 只看该作者


想要同时显示一串伤害, 默认是做不到的, 需要改造伤害显示的逻辑, 把它做成数组, 而且也要另外设计移动方式, 避免它们叠在一起

另外赋值伤害显示的时候也不能用正常方式, 所以说, 脚本熟练度不足的话,你就先别想了

点评

像你说我伤害显示有点短, 那是因为要考虑配合动画的表演, 整体流畅性最终调至的坐标和频率, 所以"你没有参考性",笑  发表于 2026-5-24 09:43
所以我才说,改伤害显示就要重新设计移动方式, 笑, 而且伤害显示还事关"流程切换的间隙"等, 所以说,脚本熟练度不足就别碰它, 笑  发表于 2026-5-24 09:40
duration = 40,这个改为60后,伤害显示卡顿一样,就是显示延后的时间长了就感觉没那么流畅了,这个感觉是技能完后延时多少显示伤害,反而40是最流畅  发表于 2026-5-24 06:20
懂了,原来是这样,那没有可操作性了,有点瑕疵,算了,慢慢来吧  发表于 2026-5-24 06:04
所以,不管你再怎么延长他的工作时间也没用, 因为决定吸血的显示时间的,是你回头的速度, 笑  发表于 2026-5-23 22:48
回复 支持 反对

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
11154
在线时间
4172 小时
注册时间
2011-7-21
帖子
2528

极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

6
发表于 2026-5-23 18:43:01 | 只看该作者
本帖最后由 无忧谷主幻 于 2026-5-23 18:44 编辑

使用状态法学习技能,其实没必要一个一个做条件分歧
这样就可以了
RUBY 代码复制
  1. # 遍历当前队伍中的所有角色
  2. $game_party.actors.each do |actor|
  3.   # 检查角色是否处于状态 17
  4.   if actor.state?(17)
  5.     # 让角色习得技能 1
  6.     actor.learn_skill(1) unless actor.skill_learn?(1)
  7.   end
  8. end

最后记得让全体角色解除状态17
可以多翻翻我的战斗技能以及关联的公共事件,里面有很多有趣的设定

点评

很好用,能不能加个提示文章,XX学会了该技能  发表于 2026-5-24 17:46
好,我试试,很好的思路,解决了工作量的问题  发表于 2026-5-23 19:01
要用脚本就不需要状态法了, 直接在Scene_Item里赋值一个全局变量保存目标就行了, 笑  发表于 2026-5-23 18:50
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2026-6-4 08:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表