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

Project1

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

[原创发布] 无用之物

[复制链接]

Lv4.逐梦者

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

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

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

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

什么也没有发生,AI只是附庸,可有可无,无用之物

1,保命符

RUBY 代码复制
  1. #==============================================================================
  2. # 状态 19:保命符
  3. # 效果:拥有该状态的角色/敌人在 HP 变为 0 时:
  4. #       · 播放动画 25
  5. #       · HP 恢复至最大 HP 的一半
  6. #       · 状态 19 消耗后消失(可自定义是否移除)
  7. # 插入位置:Main 之前任意处。
  8. # 注意:未使用 alias,直接覆盖原有 hp= 方法。
  9. #==============================================================================
  10.  
  11. # 角色处理
  12. class Game_Actor
  13.   def hp=(hp)
  14.     # 限制 HP 范围
  15.     hp = [[hp, maxhp].min, 0].max
  16.     # 触发保命符条件
  17.     if hp == 0 && state?(19)
  18.       self.animation_id = 25              # 播放动画 25
  19.       @hp = maxhp / 2                     # 恢复一半 HP
  20.       remove_state(1) if state?(1)        # 移除可能被附加的死亡状态
  21.       remove_state(19)                    # 消耗状态(如需保留则注释本行)
  22.       return
  23.     end
  24.     # 以下为默认的死亡状态控制
  25.     if hp == 0
  26.       add_state(1) unless state?(1)
  27.     else
  28.       remove_state(1) if state?(1)
  29.     end
  30.     @hp = hp
  31.   end
  32. end
  33.  
  34. # 敌人处理(若敌人也可能拥有此状态)
  35. class Game_Enemy < Game_Battler
  36.   def hp=(hp)
  37.     hp = [[hp, maxhp].min, 0].max
  38.     if hp == 0 && state?(19)
  39.       self.animation_id = 25
  40.       @hp = maxhp / 2
  41.       remove_state(1) if state?(1)
  42.       remove_state(19)        # 同上,可按需注释
  43.       return
  44.     end
  45.     if hp == 0
  46.       add_state(1) unless state?(1)
  47.     else
  48.       remove_state(1) if state?(1)
  49.     end
  50.     @hp = hp
  51.   end
  52. end


可播放一个复活动画

2,残血赌命

RUBY 代码复制
  1. #==============================================================================
  2. # 技能 83:残血赌命
  3. # 当自身血量低于最大血量的 SKILL_83_HP_THRESHOLD% 时,
  4. # 有 SKILL_83_CHANCE% 的几率对目标造成 当前血量 * SKILL_83_DAMAGE_HP_PERCENT% 的伤害。
  5. # 条件不满足或几率未触发时,显示 Miss 且不造成伤害。
  6. #==============================================================================
  7.  
  8. SKILL_83_HP_THRESHOLD      = 10   # 血量阈值百分比(例如 10 表示 10%)
  9. SKILL_83_CHANCE            = 40   # 触发概率百分比
  10. SKILL_83_DAMAGE_HP_PERCENT = 80  # 伤害为最大血量的百分比(100 表示 100%)
  11.  
  12. class Game_Battler
  13.   # 保留原版技能效果方法
  14.   alias custom_skill_effect_83 skill_effect unless $@
  15.  
  16.   def skill_effect(user, skill)
  17.     # 只对技能 83 做特殊处理
  18.     if skill.id == 83
  19.       # 判断血量是否低于阈值
  20.       if user.hp < user.maxhp * SKILL_83_HP_THRESHOLD / 100.0
  21.         # 概率判定
  22.         if rand(100) < SKILL_83_CHANCE
  23.           # 成功:伤害 = 使用者当前血量 × 百分比
  24.           self.damage = (user.maxhp * SKILL_83_DAMAGE_HP_PERCENT / 100.0).to_i
  25.         else
  26.           # 概率失败
  27.           self.damage = "Miss"
  28.         end
  29.       else
  30.         # 血量不满足
  31.         self.damage = self.damage#"Miss"
  32.       end
  33.       self.critical = false
  34.       return true
  35.     else
  36.       # 其他技能正常处理
  37.       return custom_skill_effect_83(user, skill)
  38.     end
  39.   end
  40. end


血量不满足时,没有伤害,血量低于10%,几率造成最大血量的百分比

3,自爆体

RUBY 代码复制
  1. #==============================================================================
  2. # 自定义技能84 · 自爆
  3. #==============================================================================
  4. SKILL84_ID = 84               # 技能编号
  5. SKILL84_HP_THRESHOLD = 80     # 当前血量低于最大HP的百分之几时满足触发条件
  6. SKILL84_SUCCESS_RATE = 90     # 触发成功率(百分比)
  7. SKILL84_DAMAGE_HP_PERCENT = 100  # 造成的伤害为当前HP的百分之几
  8.  
  9. #==============================================================================
  10. # Game_Battler 技能效果重写
  11. #==============================================================================
  12. class Game_Battler
  13.   alias custom_skill_effect_skill84 skill_effect
  14.   def skill_effect(user, skill)
  15.     if skill.id == SKILL84_ID
  16.       # 血量满足条件且几率判定成功
  17.       if user.hp < user.maxhp * SKILL84_HP_THRESHOLD / 100.0 &&
  18.          rand(100) < SKILL84_SUCCESS_RATE
  19.         # 以第一次对目标造成的伤害为准,并让使用者死亡
  20.         if user.instance_variable_get(:@skill84_damage).nil?
  21.           dmg = (user.hp * SKILL84_DAMAGE_HP_PERCENT / 100.0).to_i
  22.           user.instance_variable_set(:@skill84_damage, dmg)
  23.           user.hp = 0
  24.           user.instance_variable_set(:@skill84_dead, true)
  25.         else
  26.           dmg = user.instance_variable_get(:@skill84_damage)
  27.         end
  28.         self.damage = dmg
  29.         self.hp -= self.damage
  30.         return true
  31.       else
  32.         # 不满足条件或几率失败 → 正常伤害
  33.         return custom_skill_effect_skill84(user, skill)
  34.       end
  35.     else
  36.       return custom_skill_effect_skill84(user, skill)
  37.     end
  38.   end
  39. end
  40.  
  41. #==============================================================================
  42. # Scene_Battle 每次使用技能前清除标记
  43. #==============================================================================
  44. class Scene_Battle
  45.   alias custom_make_skill_action_result_84 make_skill_action_result
  46.   def make_skill_action_result
  47.     @active_battler.instance_variable_set(:@skill84_damage, nil)
  48.     @active_battler.instance_variable_set(:@skill84_dead, nil)
  49.     custom_make_skill_action_result_84
  50.   end
  51. end


低于80%血量时候,自爆造成自身当前血量的伤害,自己死亡,单体全体都有用,和上面不一样的是,上面可以一直触发,这个会死
退隐....

Lv5.捕梦者

梦石
0
星屑
41773
在线时间
5970 小时
注册时间
2006-11-10
帖子
6962
2
发表于 2026-5-27 17:56:07 | 只看该作者
你这个自爆脚本可不能用

做主动技能的自爆, 直接用公共事件处理伤害和动画效果就行了, 和那个技能后播放动画连击一样即可, 技能设置, 挨打方动画放空, 技能攻击和威力都为0,不造成伤害, 然后附加一个没卵用的状态(避免因为技能无效果而显示MISS), 然后去用公共事件表演即可


给你个省事脚本

class Interpreter
  def 攻方 ;$scene.instance_variable_get(:@active_battler) ;end
  def 受方 ;$scene.instance_variable_get(:@target_battlers[0]) ;end
  def 概率(val) ;return rand(100) < val ;end
end

这样, 在战斗用的事件脚本里,   写 攻方 就是行动方, 受方 就是挨打方,  直接  攻方.hp -= 9999  就可以扣血  受方.damage = 10086 ;受方.damage_pop = true 就可以显示伤害,  受方.animation_id = 10086 就可以显示动画

条件分歧:  攻方.hp < 攻方.maxhp / 10  and 概率(50)   这样写就是当 攻方的血剩10%以下时, 有50%概率满足条件, 满足条件不满足条件怎么表演用事件处理你就可以自由发挥了

注意, "攻方,受方"这两个函数只限战斗中使用, 因为平时并没有行动方和挨打方

点评

我的那个伤害显示脚本就是全局伤害, 你按规则来写就可以改  发表于 7 天前
为啥你的颜色变色就可以呢,我为啥添加不了呢,让AI做全局伤害颜色都不行呢,是不是所有重定义的alias都不能用全局伤害颜色呢,白板工程也用不了  发表于 7 天前
这样啊,懂了,那我有一次让AI不要用alias,直接改原脚本,并且兼容脚本也没用,比如在绝地反击那个脚本添加自定义伤害颜色和字体,不成功  发表于 7 天前
例如,伤害减免这类的,必须在原方法改, 否则就会搞出你金钟罩脚本的bug,毕竟AI可不会为你考虑其他脚本的影响  发表于 7 天前
而且, 有些改动必须从原方法入手, 如果插入这种脚本,那就可能造成其他插件的混乱了, 这就是大部分脚本冲突的原因, 尤其是热门修改点  发表于 7 天前
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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