查看: 1846|回复: 3

[有事请教] 如何让精灵显示剩余战斗力脚本

[复制链接]
梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
发表于 2024-1-18 22:23:18 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 金芒芒 于 2024-1-18 22:53 编辑

  p  @attacker.get_battle_effective.to_s   #p我方战斗力
  p  @defender.get_battle_effective.to_s  #p敌方战斗力
就会显示战斗力(如图490 300 )

-----------不断循环就会让战斗力下降-------------------
    #主循环Main loop for efs
    loop do  #===============================↑战斗前
    # p  @attacker.get_battle_effective.to_s
      #提示消息更新
      Notification.update
      #画面与输入的更新
      Graphics.update                        
      Input.update
      #更新EFS系统
      _update_efs                           #←战斗中
      #如果不在EFS就中断循环
      break if ! $game_temp.inefs or $scene != self  
    end



如何将血条精灵脚本改成剩余战斗力脚本
33行和35行的语句这么修改

[pre lang="ruby"]class Sprite_Character < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● 参数设置 正太君改
  #--------------------------------------------------------------------------
  # 设置图片文件名.不想要底图就让底图完全透明或设置为 ""
  # 图片放在 Graphics/Pictures/ 文件夹下
  WFZDL = "蓝条战斗力"
  WFZDLBack = "战斗背景图"
  DFZDL = "红条战斗力"
  DFZDLBack = "战斗背景图"
  # 设置显示友军血条的开关号
  #TeamHPBarSwitchID = 5
  # 设置显示敌军血条的开关号
  #EnemyHPBarSwitchID = 6
  
  # 设置显示血条的开关号
  HPBarSwitchID = 10
  
  #禁止显示血条 开关
  HPBarDOESNOTSwitchID = 6
  
  
  # 被攻击后血条显示多久
  HPbarTimeDisplay = 60
  
  
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
#别名hzhj旧初始化使事件参数栏初始化
  alias hzhj_old_init_make_event_param_bar initialize
  def initialize(*args)#定义初始化(*参数)
    @hp_sprite = Sprite.new(args[0])#@hp精灵=精灵.新(参数[0])
    @hp_back_sprite = Sprite.new(args[0])#@hp后台精灵 = 精灵.新(参数[0])
    @mp_sprite = Sprite.new(args[0])
    @mp_back_sprite = Sprite.new(args[0])
    @param_sprites = []#@参数精灵=[]
    @param_sprites << @hp_sprite# @参数精灵 << @hp精灵
    @param_sprites << @hp_back_sprite# @参数精灵=@hp后台精灵
    @param_sprites << @mp_sprite
    @param_sprites << @mp_back_sprite
    #@hp精灵。位图 = RPG::Cache.picture(HPBarFileName)绿色
    @hp_sprite.bitmap = RPG::Cache.picture(HPBarFileName)
    #@hp后台精灵.位图= RPG::Cache.picture(HPBarBackFileName)#黑色
    @hp_back_sprite.bitmap = RPG::Cache.picture(HPBarBackFileName)#黑色
    @mp_sprite.bitmap = RPG::Cache.picture(MPBarFileName)
    @mp_back_sprite.bitmap = RPG::Cache.picture(MPBarBackFileName)
    #别名hzhj旧初始化使事件参数栏(*参数)
    hzhj_old_init_make_event_param_bar(*args)
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  #别名hzhj旧的布置使事件参数栏布置除非$@
  alias hzhj_old_dispose_make_event_param_bar dispose unless $@
  def dispose#定义可用
    #@参数精灵。每个{|精灵|精灵.释放}
    @param_sprites.each{|sprite|sprite.dispose}
    #hzhj旧的布置生成事件参数栏
    hzhj_old_dispose_make_event_param_bar
  end
  #--------------------------------------------------------------------------
  # ● 获取事件 HP # 正太君改
  #--------------------------------------------------------------------------
  def event_hp#定义事件hp
     return 0 if @character.nil?#如果@角色,则返回0。无
     return @character.hp#返回角色HP
  end
  #--------------------------------------------------------------------------
  # ● 获取事件 MHP # 正太君改
  #--------------------------------------------------------------------------
  def event_mhp#定义事件MHP
    return 0 if @character.nil?#如果@角色,则返回0。无
    return @character.hp_max#返回角色HP最大值
  end
  #--------------------------------------------------------------------------
  # ● 获取事件 MP # 正太君改
  #--------------------------------------------------------------------------
  def event_mp
    return 0 if @character.nil?
    return @character.sp if @character.is_a?(EFS_Hero)
    return @character.ammo
    #return @character.get_group.morale
  end
  #--------------------------------------------------------------------------
  # ● 获取事件 MMP # 正太君改
  #--------------------------------------------------------------------------
  def event_mmp
    return 0 if @character.nil?
    return @character.sp_max if @character.is_a?(EFS_Hero)
    return @character.ammo_max
    #return 100
  end
  #--------------------------------------------------------------------------
  # ● 判断是否显示 HP 条
  #--------------------------------------------------------------------------
  def show_hp_bar?#是否显示hp栏?
    #return false if @character.is_a?(EFS_Hero)
   # 如果$场景,则返回假的。efs故事模式
    return false if $scene.efs_story_mode
    #如果事件hp>0&&@角色已删除  &&表示与,意为同时都要满足。&&逻辑运算符,并且是双目运算符
    if event_hp > 0 && !@character.removed
      #返回$游戏开关[HPBarSwitchID]||@角色.hp计数器>0
      return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
    else #否则
      return false#返回假的
    end  
  end
  #--------------------------------------------------------------------------
  # ● 判断是否显示 MP 条
  #--------------------------------------------------------------------------
  def show_mp_bar?
    #return false if @character.is_a?(EFS_Hero)
     return false if $scene.efs_story_mode
    if event_mmp > 0 && !@character.removed
      return $game_switches[HPBarSwitchID] || @character.hp_counter > 0 #) && ! $game_switches[HPBarDOESNOTSwitchID]
    else
      return false
    end  
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  #别名hzhj旧更新使事件参数栏更新
  alias hzhj_old_update_make_event_param_bar update
  def update #定义更新
    #hzhj旧更新生成事件参数栏
    hzhj_old_update_make_event_param_bar
    #如果@角色.是_a?(EFS_战斗者)
    if !@character.is_a?(EFS_Battler)
     # @参数精灵。每个{|精灵|精灵.可见=假的}
      @param_sprites.each{|sprite|sprite.visible = false}
    else
      
      # 刷新 HP 可见状态
      if show_hp_bar? #如果显示hp栏?
        #@hp精灵。可见=@hp后台精灵可见=真
        @hp_sprite.visible = @hp_back_sprite.visible = true
       # @hp精灵。bitmap=角色扮演::缓存图片(“HPBar-E”)如果@角色。团队!=1.
        @hp_sprite.bitmap = RPG::Cache.picture("HPBar-E") if @character.team != 1 #wtf you doing
        
        
        #减少计数
       # 除非$游戏切换[HPBarSwitchID]
        unless $game_switches[HPBarSwitchID]
          #如果@角色。hp计数器==hp条形时间显示
          if @character.hp_counter == HPbarTimeDisplay
            @param_sprites.each do |sprite| #@参数精灵。每个做|精灵|
              sprite.opacity = 255 #精灵不透明度=255
            end
            #els if@字符。hp计数器< HPbarTimeDisplay /3
          elsif  @character.hp_counter < HPbarTimeDisplay/3
            @param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
              ##精灵不透明度-=255/(HPbarTimeDisplay/3)
              sprite.opacity -= 255/(HPbarTimeDisplay/3)
            end
          end
          #@性格。hp计数器-=1
          @character.hp_counter -= 1
        else#否则
            @param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
              sprite.opacity = 255#精灵不透明度=255
            end
         
        end
        
        # 刷新坐标
        @param_sprites.each do |sprite|#@参数精灵。每个做|精灵|
          sprite.ox = sprite.bitmap.width / 2#精灵ox=精灵位图宽度/2
          sprite.oy = sprite.bitmap.height#精灵.oy=精灵。位图高度
          sprite.x = x
          #sprite.y = y - 52
         
          #sprite.opacity = 255
          shif = @character.is_cal#盖印图层=@角色。是计算函数
          sprite.y = y - (shif ? 82 : 52)#精灵.y=y-(盖印图层?82:52)
          sprite.z = z#精灵.z = z
        end
        @hp_sprite.z += 1#hp_精灵.z = z
        @mp_sprite.z += 1
        # 计算 HP 显示区域
        #hp宽=(@hp 精灵.位图.宽*1.0*事件hp/事件mhp)。圆形的
        hpw = (@hp_sprite.bitmap.width * 1.0 * event_hp / event_mhp).round
       # hp宽=[hp宽,@hp精灵位图宽度].最小值,0].最大值
        hpw = [[hpw, @hp_sprite.bitmap.width].min, 0].max
        hph = @hp_sprite.bitmap.height#hp高=@hp精灵位图高度
        #@hp精灵。src矩形。集合(0,0,hp宽,hp高)
        @hp_sprite.src_rect.set(0, 0, hpw, hph)
        
        

        
        
        
        
        
        
        # 刷新 MP 可见状态
      
        @mp_sprite.visible = @mp_back_sprite.visible = (show_mp_bar? and event_mmp > 0) # 正太君改
        if show_mp_bar?
          # 修正 HP 坐标
          @hp_sprite.y -= (@mp_sprite.oy + 1)
          @hp_back_sprite.y = @hp_sprite.y
          # 计算 MP 显示区域
          if event_mmp > 0 # 正太君改
            mpw = (@mp_sprite.bitmap.width * 1.0 * event_mp / event_mmp).round
            mpw = [[mpw, @mp_sprite.bitmap.width].min, 0].max
            mph = @mp_sprite.bitmap.height
            @mp_sprite.src_rect.set(0, 0, mpw, mph)
          end
        end
      else
        @param_sprites.each{|sprite|sprite.visible = false}
      end
    end
  end
end[/pre]
我方战斗力.png
敌方战斗力.png
梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2024-1-18 23:51:16 | 显示全部楼层
74行~~~~~~~~~~~~~~
回复

使用道具 举报

梦石
0
星屑
7296
在线时间
1244 小时
注册时间
2015-8-15
回帖
473
 楼主| 发表于 2024-1-19 04:49:48 | 显示全部楼层
本帖最后由 金芒芒 于 2024-1-19 12:15 编辑


74行这么改返回@character.get-batte-effective吗?
[pre lang="ruby"]  def get_battle_effective#定义获得实际战斗力
    sum = 0#数字=0
    @member.each do|group|#@每个do|组的成员|
      next if group.get_all_dead#如果下一个组。全部阵亡
      num = group.calculate_effective#数字=组。计算有效
      sum+= num #总和+=数字
      
    end  
    return sum.round*10
  end[/pre]
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部