楼主: y967

[原创发布] 无用之物

[复制链接]
梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 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
回复

使用道具 举报

梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 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
回复

使用道具 举报

梦石
0
星屑
17561
在线时间
4249 小时
注册时间
2013-7-18
回帖
2491
 楼主| 发表于 2026-5-25 07:09:19 | 显示全部楼层
1,给敌人附加一个状态,增加敌人受伤害30%,AI不好使


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

[pre lang="ruby"]
#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
#  添加技能反噬效果
#  配置区域:REBOUND_SKILL_IDS 填入需要具有反噬效果的技能ID
#==============================================================================

class Game_Battler
  
  # [配置] 在这里填入需要拥有“50%几率反噬0.8倍伤害”效果的技能ID
  # 例如: [15, 23, 40] 表示 ID 为 15, 23, 40 的技能会触发此效果
  REBOUND_SKILL_IDS = [57,58] # 默认设为1,请根据实际情况修改
  
  # 别名化原有的技能效果方法,以便插入额外逻辑
  alias_method :rebound_skill_effect_original, :skill_effect
  
  def skill_effect(user, skill)
    # 先执行原有的技能效果计算(包括伤害计算、状态添加等)
    result = rebound_skill_effect_original(user, skill)
   
    # 只有当技能是攻击性技能(造成HP伤害)且命中时才触发反噬
    # self.damage > 0 表示造成了正向伤害(HP减少)
    if self.damage.is_a?(Integer) && self.damage > 0
      if REBOUND_SKILL_IDS.include?(skill.id)
        # 50% 几率触发
        if rand(100) < 50
          # 计算反噬伤害:当前造成伤害的 0.8 倍
          rebound_damage = (self.damage * 0.8).to_i
         
          # 确保反噬伤害至少为 1,避免显示 0
          if rebound_damage < 1
            rebound_damage = 1
          end
         
          # 对使用者(user)造成伤害
          # 注意:user 可能是敌人也可能是演员,Game_Battler 通用
          user.hp -= rebound_damage
         
         rebound_damage = "[199021133]自伤#{rebound_damage}"
         
          # 可选:在用户头上显示反噬伤害数字(需要场景支持,通常自动处理)
          # 如果希望显示伤害数字,可能需要更复杂的 Scene_Battle 修改
          # 这里仅做数值扣除,保证逻辑正确。
         
          # 记录日志或提示(可选,取决于是否开启战斗日志)
           #$game_temp.battle_messages.push("#{user.name} 受到了反噬!")
        end
      end
    end
   
    return result
  end

end
[/pre]


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

3,变猪

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

[pre lang="ruby"]#==============================================================================
# ▼ 变形技能(变猪/青蛙) + 属性减半 + 战斗图替换
#==============================================================================
module Polymorph
  # 技能ID
  SKILL_ID = 57
  # 变形状态ID
  PIG_STATE_ID   = 21
  FROG_STATE_ID  = 22
  # 战斗图文件名(位于 Graphics/Battlers/ 目录,不含后缀)
  PIG_BATTLER    = "pig"
  FROG_BATTLER   = "frog"
end

#--------------------------------------------------------------------------
# ● 技能使用效果:命中时随机附加变猪或变青蛙状态
#--------------------------------------------------------------------------
class Game_Battler
  alias poly_skill_effect skill_effect
  def skill_effect(user, skill)
    effective = poly_skill_effect(user, skill)
    return effective unless effective
    return effective unless skill.id == Polymorph::SKILL_ID

    # 随机选择变形状态
    state_id = rand(2) == 0 ? Polymorph::PIG_STATE_ID : Polymorph::FROG_STATE_ID
    self.add_state(state_id) unless self.state_full?(state_id)
    effective
  end
end

#--------------------------------------------------------------------------
# ● 基本属性减半(若处于变形状态)
#--------------------------------------------------------------------------
class Game_Battler
  [:str, :dex, :agi, :int, :atk, :pdef, :mdef, :eva].each do |stat|
    alias_method("poly_base_#{stat}", stat)
    define_method(stat) do
      val = send("poly_base_#{stat}")
      if [Polymorph::PIG_STATE_ID, Polymorph::FROG_STATE_ID].any? { |id| self.state?(id) }
        val / 2
      else
        val
      end
    end
  end
end

#--------------------------------------------------------------------------
# ● 敌方战斗图替换(处于变形状态时显示猪/蛙图)
#--------------------------------------------------------------------------
class Game_Enemy < Game_Battler
  alias poly_battler_name battler_name
  def battler_name
    if state?(Polymorph::PIG_STATE_ID)
      Polymorph::PIG_BATTLER
    elsif state?(Polymorph::FROG_STATE_ID)
      Polymorph::FROG_BATTLER
    else
      poly_battler_name
    end
  end
end
[/pre]

点评

说的好,我也这样认为,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
退隐....
回复

使用道具 举报

梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 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倍伤害

[pre lang="ruby"]module RPG
  class Skill
    def description
      description = @description.split(/#/)[0]
      return description != nil ? description : ''
    end
    def 吸血 ;@description[/XHP\=(\d+)\%(\d*)/] ;return $1 ? [$1,$2] : nil ;end
    def 吸蓝 ;@description[/XSP\=(\d+)\%(\d*)/] ;return $1 ? [$1,$2] : nil ;end
    def 反噬 ;@description[/FS\=(\d+)\%([.0-9]+)/] ;return $1 ? [$1,$2] : nil ;end
  end
end

class Game_Battler
  attr_accessor :pending_rebound_damage
  alias caidao_skill_effect skill_effect
  def skill_effect(user, skill)
    old_hp = self.hp
    eff = caidao_skill_effect(user, skill)
    $game_variables[1] = self.damage.is_a?(Numeric) ? self.damage : 0
    if eff and (a=self.damage).is_a?(Numeric) and a > 0
      (a=self.damage / 2 ;self.hp -= a ;self.damage += a ;
      self.pending_rebound_damage = "#{self.damage}增伤#{a}") if user.state?(10086) and rand(100) < 50
      if (r=skill.反噬) ; m,n = r[0].to_i,r[1].to_f
        (a=(self.damage * n).round ;user.hp -= a ;
         user.pending_rebound_damage = "反噬#{a}") if rand(100) < m
      end
      if (r=skill.吸血)
        m,n = r[0].to_i,r[1].to_i ;f = [self.damage * m / 100,old_hp]
        f.push(n) if n > 0 ;a = f.min
        user.hp += a ;#user.pending_rebound_damage = "吸血#{a}"
      end
      if (r=skill.吸蓝)
        m,n = r[0].to_i,r[1].to_i ;f = [self.damage * m / 100,old_hp]
        f.push(n) if n > 0 ; a = f.min
        user.sp += a ;#user.pending_rebound_damage = "吸蓝#{a}"
      end
    end ;return eff
  end
end[/pre]

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

点评

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

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部