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

Project1

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

[已经过期] 求一个能够将基础属性与综合属性分开的状态界面的方法...

[复制链接]

Lv2.观梦者

梦石
0
星屑
347
在线时间
48 小时
注册时间
2017-11-18
帖子
8
跳转到指定楼层
1
发表于 2022-4-3 12:10:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 周君休佚 于 2022-4-3 12:17 编辑


如截图中的,默认物攻是(基础力量+武器攻击力),需要一个能够单独显示基础力量的脚本来识别各职业或角色当前的强度,来决定使用哪位角色。每次对比都要脱下装备,在重新装备适合的装备。非常不便。希望各位帮助一下~~~万分感谢。
这是我现在用的状态页脚本,部分项目的坐标位置还没调整好。


#==============================================================================
# RGSS3 - Fábrica: 新式状态场景
#------------------------------------------------------------------------------
# por Masked
#
# agradecimentos ao Shiroyasha, pelo método de desenhar um círculo
#==============================================================================
module RGSS3_SWH_Status

# Texto que aparece na janela superior
Help_Text = "状态"

# Lista dos atributos, eles ser?o escritos na ordem em que estiverem
# configurados aqui, com os nomes configurados
# :atk = Ataque
# :def = Defesa
# :mat = Ataque Mágico
# :mdf = Defesa Mágica
# :adi = Agilidade
# :luk = Sorte
# :cri = Critical hit
# :eva = Evade
Attributes = {
  :atk => "物攻",
  :def => "物防",
  :mat => "魔攻",
  :mdf => "魔防",
  :agi => "敏捷",
  :luk => "幸运",
  :cri => "暴击",
  :eva => "闪躲"
  }

# 分隔线高度【单位:像素】
Separator_Height = 1

# 分隔线颜色
Separator_Color = Color.new(255,255,255)

# 特殊文本颜色,例如属性名称和装备类型
Special_Color = Color.new(255,255,255)

end
#==============================================================================
# ** Scene_Status
#==============================================================================
class Scene_Status < Scene_MenuBase
  include RGSS3_SWH_Status

  #============================================================================
  # Métodos principais
  #----------------------------------------------------------------------------
  #----------------------------------------------------------------------------
  # * Inicializa??o do Processo
  #----------------------------------------------------------------------------
  def start
    super
   
    #==========================================================================
    # Cria??o das Janelas
    #--------------------------------------------------------------------------
   
    # Janela de Ajuda
    @help_window = Window_Help.new(1)
   
    # Defini??o dos valores padr?o de largura e altura das janelas
    @window_width = Graphics.width/3
    @window_height = Graphics.height-@help_window.height-72
   
    # Janela de Atributos
    @attribute_window = Window_Base.new(0,@help_window.height,@window_width,@window_height)
   
    # Janela de Informa??es
    @information_window = Window_Base.new(@window_width,@help_window.height,@window_width,@window_height)
   
    # Janela de Equipamentos
    @equipment_window = Window_Base.new(@window_width*2,@help_window.height,@window_width,@window_height)
   
    # Janela de Descri??o
    @description_window = Window_Base.new(0,@help_window.height+@window_height,Graphics.width,72)
   
    #--------------------------------------------------------------------------
    # Fim
    #==========================================================================
   
    # Defini??o do membro inicial do grupo
    @actor = $game_party.menu_actor
   
    #==========================================================================
    # Cria??o do conteúdo das janelas
    #--------------------------------------------------------------------------
   
    # Método auxiliar
    create_windows_contents
   
    #--------------------------------------------------------------------------
    # Fim
    #==========================================================================

  end

  #----------------------------------------------------------------------------
  # * Atualiza??o do Processo
  #----------------------------------------------------------------------------
  def update
    super
     SceneManager.return if Input.trigger?(:B)
     if Input.trigger?(:R) || Input.trigger?(:RIGHT)
      @actor = $game_party.menu_actor_next
      instance_variables.each {|ivar|
      instance_variable_get(ivar).contents.clear if instance_variable_get(ivar).is_a?(Window)
      }
      create_windows_contents
     end
     if Input.trigger?(:L) || Input.trigger?(:LEFT)
      @actor = $game_party.menu_actor_prev
      instance_variables.each {|ivar|
      instance_variable_get(ivar).contents.clear if instance_variable_get(ivar).is_a?(Window)
      }
      create_windows_contents
     end
  end
  #----------------------------------------------------------------------------
  # * Finaliza??o do Processo
  #----------------------------------------------------------------------------
  def terminate
    super
    instance_variables.each {|ivar|
    instance_variable_get(ivar).dispose if instance_variable_get(ivar).is_a?(Window) || instance_variable_get(ivar).is_a?(Bitmap)}
  end

  #----------------------------------------------------------------------------
  # Fim
  #============================================================================

  #============================================================================
  # Métodos auxiliares
  #----------------------------------------------------------------------------
    #--------------------------------------------------------------------------
    # * Cria??o do conteúdo das janelas
    #--------------------------------------------------------------------------
    def create_windows_contents
      
    # Defini??o do tamanho do conteúdo das janelas
    contents_width = @attribute_window.contents_width
     
    # Janela de Ajuda
    @help_window.clear
    @help_window.set_text(Help_Text)
   
    # Janela de Atributos
    @attribute_window.contents.draw_text(0,0,contents_width,32,"强度",1)
    @attribute_window.contents.fill_rect(0,32,contents_width,Separator_Height,Separator_Color)
   
    @attribute_window.contents.font.color = Special_Color
    i = 0
    Attributes.each {|attr|
    @attribute_window.contents.draw_text(0,32+24*i,96,32,attr[1])
    @attribute_window.contents.font.color = Color.new(255,255,255)
    case attr[0]
    when :atk
      @attribute_window.contents.draw_text(30+attr[1].size*[email protected]/(contents_width-(54+attr[1].size*8)),35+24*i,32,24,@actor.atk)   
    when :def
      @attribute_window.contents.draw_text(30+attr[1].size*[email protected]/(contents_width-(54+attr[1].size*8)),35+24*i,32,24,@actor.def)   
    when :mat
      @attribute_window.contents.draw_text(30+attr[1].size*[email protected]/(contents_width-(54+attr[1].size*8)),35+24*i,32,24,@actor.mat)   
    when :mdf
      @attribute_window.contents.draw_text(30+attr[1].size*[email protected]/(contents_width-(54+attr[1].size*8)),35+24*i,32,24,@actor.mdf)   
    when :agi
      @attribute_window.contents.draw_text(30+attr[1].size*[email protected]/(contents_width-(54+attr[1].size*8)),35+24*i,32,24,@actor.agi)   
    when :luk
      @attribute_window.contents.draw_text(30+attr[1].size*[email protected]/(contents_width-(54+attr[1].size*8)),35+24*i,32,24,@actor.luk)   
    when :cri
      @attribute_window.contents.draw_text(30+attr[1].size*[email protected]/(contents_width-(54+attr[1].size*8)),35+24*i,32,24,@actor.cri)   
    when :eva
      @attribute_window.contents.draw_text(30+attr[1].size*[email protected]/(contents_width-(54+attr[1].size*8)),35+24*i,32,24,@actor.eva)   
    end
    @attribute_window.contents.font.color = Special_Color
    i += 1
    }
    @attribute_window.contents.font.color = Special_Color
    @attribute_window.contents.fill_rect(0,180,contents_width,Separator_Height,Separator_Color)
    @attribute_window.contents.draw_text(32,186,48,24,"HP")
    @attribute_window.contents.draw_text(contents_width-52,186,48,24,"MP")
    @attribute_window.contents.font.color = Color.new(255,255,255)
    @attribute_window.contents.draw_circle(42,242,28,Color.new(0,190,100))
    @attribute_window.contents.draw_text(15,242-24,56,24,@actor.hp,1)
    @attribute_window.contents.fill_rect(25,242,34,1,Color.new(255,255,255))
    @attribute_window.contents.draw_text(15,242+1,56,24,@actor.mhp,1)
    @attribute_window.contents.draw_circle(contents_width-42,242,28,Color.new(15,90,240))
    @attribute_window.contents.draw_text(contents_width-68,242-24,56,24,@actor.mp,1)
    @attribute_window.contents.fill_rect(contents_width-58,242,34,1,Color.new(255,255,255))
    @attribute_window.contents.draw_text(contents_width-68,242+1,56,24,@actor.mmp,1)
   
    # Janela de Informa??es
    @information_window.draw_text(0,0,contents_width,24,"#{@actor.name} #{@actor.nickname}",1)
    @information_window.draw_face(@actor.face_name, @actor.face_index, contents_width/2-47, 32)
    actor_class = $data_classes[@actor.class_id]
    @information_window.draw_text(0,132,contents_width,24,actor_class.name,1)
    @information_window.draw_text(0,156,contents_width,24,"LV")
    @information_window.draw_text([email protected]_s.size*12,156,@actor.level.to_s.size*12,24,@actor.level)
    @information_window.contents.fill_rect(0,180,contents_width,Separator_Height,Separator_Color)
    @information_window.draw_text(0,180,64,24,"EXP")
    @information_window.draw_text([email protected]_level_exp.to_s.size*12,180,(@[email protected]_level_exp).to_s.size*12,24,@[email protected]_level_exp)
    @information_window.draw_text(0,204,108,24,"所需EXP")
    @information_window.draw_text([email protected]_level_exp.to_s.size*12,204,@actor.next_level_exp.to_s.size*12,24,@actor.next_level_exp)
    i = 0
    @actor.states.each {|state|
    @information_window.draw_icon(state.icon_index,25*i,242) unless 25*i+24 > contents_width
    i += 1
    }
   
    # Janela de Equipamentos
    i = 0
    @equipment_window.draw_text(0,0,contents_width,24,"装备",1)
    @equipment_window.contents.fill_rect(0,32,contents_width,Separator_Height,Separator_Color)
    @actor.equips.each {|item|
    unless item.nil?
    @equipment_window.draw_icon(item.icon_index,0,48+32*i)
    @equipment_window.draw_text(32,48+32*i,contents_width-32,24,item.name)
    i += 1
    end
    }
   
    # Janela de Descri??o
    @description_window.draw_text_ex(0,0,@actor.description)
   
  end
  #----------------------------------------------------------------------------
  # Fim
  #============================================================================
end

#==============================================================================
# ** Bitmap
#==============================================================================
class Bitmap
  #----------------------------------------------------------------------------
  # * Desenho de um círculo
  #----------------------------------------------------------------------------
def draw_circle(y,x,r,color)

  for i in (y - r).. (y + r)
    j1 = Math.sqrt((r**2) - ((i - y)*(i - y))) + x
    j2 = - Math.sqrt((r**2) - ((i - y)*(i - y))) + x
    j1 = j1.to_i
    j2 = j2.to_i

    for k in j2..j1
      self.set_pixel(i,k,color)
    end
   
  end

  for j in (x - r).. (x + r)
    i1 = Math.sqrt((r**2) - ((j - x)*(j - x))) + y
    i2 = - Math.sqrt((r**2) - ((j - x)*(j - x))) + y
    self.set_pixel(i1,j,color)
    self.set_pixel(i2,j,color)
  end
end
end

截图.png (204.82 KB, 下载次数: 15)

截图.png

截图.png (204.82 KB, 下载次数: 15)

截图.png

Lv2.观梦者

梦石
0
星屑
347
在线时间
48 小时
注册时间
2017-11-18
帖子
8
2
 楼主| 发表于 2022-4-3 12:16:47 | 只看该作者
……………………呃呃呃呃呃呃,无法上传图片……一上传就提示非法字符,离谱。。。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
347
在线时间
48 小时
注册时间
2017-11-18
帖子
8
3
 楼主| 发表于 2022-4-3 13:16:17 | 只看该作者
#encoding:utf-8
#==============================================================================
# ■ Window_EquipStatus
#------------------------------------------------------------------------------
#  装备画面中,显示角色能力值变化的窗口。
#==============================================================================

class Window_EquipStatus < Window_Base
  #  0 最大HP          Maximum Hit Point
  #  1 最大MP          Maximum Magic Point
  #  2 物理攻击        ATtacK power
  #  3 物理防御        DEFense power
  #  4 魔法攻击        Magic ATtack power
  #  5 魔法防御        Magic DeFense power
  #  6 敏 捷 值        AGIlity
  #  7 幸 运 值        LUcK
  # x0 成功几率        HIT rate
  # x1 闪避几率        EVAsion rate
  # x2 必杀几率        CRItical rate
  # x3 闪避必杀几率    Critical EVasion rate
  # x4 闪避魔法几率    Magic EVasion rate
  # x5 反射魔法几率    Magic ReFlection rate
  # x6 反击几率        CouNTer attack rate
  # x7 HP再生速度      Hp ReGeneration rate
  # x8 MP再生速度      Mp ReGeneration rate
  # x9 TP再生速度      Tp ReGeneration rate
  # s0 受到攻击的几率  TarGet Rate
  # s1 防御效果比率    GuaRD effect rate
  # s2 恢复效果比率    RECovery effect rate
  # s3 药理知识        PHArmacology
  # s4 MP消费率        Mp Cost Rate
  # s5 TP消耗率        Tp Charge Rate
  # s6 物理伤害加成    Physical Damage Rate
  # s7 魔法伤害加成    Magical Damage Rate
  # s8 地形伤害加成    Floor Damage Rate
  # s9 经验获得加成    EXperience Rate

  Params = [
            ["攻击力", "actor.param(2)"],
            ["防御力", "actor.param(3)"],
            ["力量", "actor.param(2) - $game_actors[actor.id].weapons[0].params[2]"],
            ["智慧", "actor.param(4)"],
            ["精神", "actor.param(5)"],
            ["速度", "actor.param(6)"],
            ["幸运", "actor.param(7)"],
            ["命中率", "actor.xparam(0) * 100"],
            ["暴击率", "actor.xparam(2) * 100"],
            ["回避率", "actor.xparam(1) * 100"],

            ["反击率", "actor.xparam(6) * 100"],
            ["反射", "actor.xparam(5) * 100"],
            ["恢复", "actor.sparam(3) * 100"],
            ["威胁", "actor.sparam(0) * 100"],
           ]
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(x, y, height)
    super(x, y, window_width, height)
    @actor = nil
    @temp_actor = nil
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 获取显示行数
  #--------------------------------------------------------------------------
  def visible_line_number
    return Params.size
  end

  #--------------------------------------------------------------------------
  # ● 获取行高
  #--------------------------------------------------------------------------
  def line_height
    return contents.font.size
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    y = 0
    contents.clear
    contents.font.size = 20
    if @actor
      draw_actor_name(@actor, 4, 0)
      y += line_height
    end
    contents.font.size = 20 #字体大小
    Params.each {|i| draw_item(0, y, i); y += line_height }
  end
  #--------------------------------------------------------------------------
  # ● 绘制能力值的名字
  #--------------------------------------------------------------------------
  def draw_param_name(x, y, param_name)
    change_color(system_color)
    draw_text(x, y, 80, line_height, param_name)
  end
  #---------------------------------------------------------------------
  # ● 计算能力值 by orzFly
  #--------------------------------------------------------------------------
  def calc_param(actor, param_formal)
   
    Kernel.eval(param_formal).to_i rescue actor.param(2)
  end

  #--------------------------------------------------------------------------
  # ● 绘制当前能力值
  #--------------------------------------------------------------------------
  def draw_current_param(x, y, param_id)
    change_color(normal_color)
    draw_text(x, y, 42, line_height, calc_param(@actor, param_id), 2)
  end

  #--------------------------------------------------------------------------
  # ● 绘制更换装备后的能力值
  #--------------------------------------------------------------------------
  def draw_new_param(x, y, param_id)
    new_value = calc_param(@temp_actor, param_id)
    change_color(param_change_color(new_value - calc_param(@actor, param_id)))
    draw_text(x, y, 42, line_height, new_value, 2)
  end
  #--------------------------------------------------------------------------
  # ● 绘制项目
  #--------------------------------------------------------------------------
  def draw_item(x, y, param)
    draw_param_name(x , y, param[0])
    draw_current_param(x + 55, y, param[1]) if @actor
    draw_right_arrow(x + 100, y)
    draw_new_param(x + 120, y, param[1]) if @temp_actor
  end
end

#==============================================================================

# ■ Window_EquipItem
#------------------------------------------------------------------------------
#  装备画面中,显示可替换装备的窗口。(下部选择框中的列数)
#==============================================================================

class Window_EquipItem < Window_ItemList
  def col_max
    return 2
  end
end

#==============================================================================
# ■ Scene_Equip
#------------------------------------------------------------------------------
#  装备画面
#==============================================================================

class Scene_Equip < Scene_MenuBase

  #--------------------------------------------------------------------------
  # ● 生成状态窗口(可调整字体)
  #--------------------------------------------------------------------------
  def create_status_window
        Font.default_size = 20
    @status_window = Window_EquipStatus.new(0, @help_window.height,
                                       Graphics.height - @help_window.height)
    @status_window.viewport = @viewport
    @status_window.actor = @actor
  end
  #--------------------------------------------------------------------------
  # ● 生成物品窗口(可调整字体)
  #--------------------------------------------------------------------------
  def create_item_window
    Font.default_size = 20
    wx = @status_window.width
    wy = @slot_window.y + @slot_window.height
    ww = Graphics.width - @status_window.width
    wh = Graphics.height - wy
    @item_window = Window_EquipItem.new(wx, wy, ww, wh)
    @item_window.viewport = @viewport
    @item_window.help_window = @help_window
    @item_window.status_window = @status_window
    @item_window.actor = @actor
    @item_window.set_handler(:ok,     method(:on_item_ok))
    @item_window.set_handler(:cancel, method(:on_item_cancel))
    @slot_window.item_window = @item_window
  end
end





依葫芦画瓢“力量”那的公式,
改成下面的:
["力量", "actor.param(2) - $game_actors[actor.id].equips[0].params[2]"],
["体力", "actor.param(3) - $game_actors[actor.id].equips[0].params[3]"],
没成功,请问应该是什么公式?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-17 08:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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