Project1

标题: VX如何增加人物的能力种类(顶楼已经整理好解决方案) [打印本页]

作者: drgdrg    时间: 2008-8-6 23:34
标题: VX如何增加人物的能力种类(顶楼已经整理好解决方案)
-------我原来的提问:

VX默认的能力只有HP、MP、攻击力、防御力、精神力、敏捷度

我想多加一些能力比如  魔法防御力、暴击率  之类的,要怎么做?

目前我只会把计算公式改成不管物理攻击还是魔法攻击都是用防御力来抵抗的




-------感谢各位的帮助,新增能力和能力在状态栏显示的问题已基本解决,方法如下-----


例如,要加入声望值,

1.在Game_Actor中  《定义实例变量》 部分加入声望变量prestige :

  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :name                     # 姓名
  attr_reader   :character_name           # 步行图象文件名
  attr_reader   :character_index          # 步行图象索引
  attr_reader   :face_name                # 脸谱图象名
  attr_reader   :face_index               # 脸谱索引
  attr_reader   :class_id                 # 职业 ID
  attr_reader   :weapon_id                # 武器 ID
  attr_reader   :armor1_id                # 盾 ID
  attr_reader   :armor2_id                # 头防具 ID
  attr_reader   :armor3_id                # 身体防具 ID
  attr_reader   :armor4_id                # 装饰品 ID
  attr_reader   :level                    # 等级
  attr_reader   :exp                      # 经验值
  attr_accessor :last_skill_id            # 记忆光标用 : 特技
  attr_accessor :prestige                 # 声望





2.Game_Actors     (注意有s)   全部改成:
#==============================================================================
# ■ Game_Actors
#------------------------------------------------------------------------------
#  处理角色排列的类。本类的实例请参考
#  $game_actors。
#==============================================================================

class Game_Actors
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize
    @data = []
  end
  #--------------------------------------------------------------------------
  # ● 获取角色
  #     actor_id : 角色 ID
  #--------------------------------------------------------------------------
  def [](actor_id)
    if @data[actor_id] == nil and $data_actors[actor_id] != nil
      @data[actor_id] = Game_Actor.new(actor_id)
      #下面是增加的
          case actor_id                             #根据角色编号不同
          when 1                                    #1号角色
              @data[actor_id].prestige = 300        #设置声望初始值为300
          when 2                                    #2号角色
              @data[actor_id].prestige = 0          #其他角色类推
          end
      #上面是增加的
    end
    return @data[actor_id]
  end
end




3.Window_Status中  《刷新》 部分改成:

  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, 0)
    draw_actor_class(@actor, 128, 0)
    draw_actor_face(@actor, 8, 32)
    draw_basic_info(128, 32)
    draw_parameters(32, 160)
   
    draw_extra(140, 160)    #附加值
   
    draw_exp_info(288, 32)
    draw_equipments(288, 160)
  end




4.也是Window_Status中,在  最后  加入附加值描绘部分:

  #--------------------------------------------------------------------------
  # ● 描绘附加值
  #     x : 描绘目标 X 坐标
  #     y : 描绘目标 Y 坐标
  #--------------------------------------------------------------------------
  def draw_extra(x, y)
    draw_actor_extra(@actor, x, y + WLH * 0, 0)       #描绘声望
#下面是扩展空间,可以再描绘3个附加值而不超出边框
#    draw_actor_extra(@actor, x, y + WLH * 1, 1)
#    draw_actor_extra(@actor, x, y + WLH * 2, 2)
#    draw_actor_extra(@actor, x, y + WLH * 3, 3)
  end







5.Window_Base中 《 描绘能力值》 部分改成:
  #--------------------------------------------------------------------------
  # ● 描绘能力值
  #     actor : 角色
  #     x     : 描绘目标 X 坐标
  #     y     : 描绘目标 Y 坐标
  #     type  : 能力值种类 (0~3)
  #--------------------------------------------------------------------------
  def draw_actor_parameter(actor, x, y, type)
    case type
    when 0
      parameter_name = Vocab::atk
      parameter_value = actor.atk
    when 1
      parameter_name = Vocab::def
      parameter_value = actor.def
    when 2
      parameter_name = Vocab::spi
      parameter_value = actor.spi
    when 3
      parameter_name = Vocab::agi
      parameter_value = actor.agi
    end
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 120, WLH, parameter_name)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 50, y, 36, WLH, parameter_value, 2)
  end

6.也是Window_Base中, 结尾  加上

#--------------------------------------------------------------------------
  # ● 描绘附加值
  #     actor : 角色
  #     x     : 描绘目标 X 坐标
  #     y     : 描绘目标 Y 坐标
  #     type  : 附加值种类 (0~3)
  #--------------------------------------------------------------------------
  def draw_actor_extra(actor, x, y, type)
    case type
    when 0
      parameter_name = "声望"
      parameter_value = actor.prestige
#扩展空间    when 1

#扩展空间    when 2

#扩展空间    when 3

    end
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 120, WLH, parameter_name)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 60, y, 36, WLH, parameter_value, 2)
  end



完毕



余留问题:
添加的能力值要在游戏中改变可以借助事件,要想随着升级等上升还要该其他脚本,我暂时不会= =



有不对的地方请指正,谢谢!

作者: 約束    时间: 2008-8-7 00:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: kissye    时间: 2008-8-7 00:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: 越前リョーマ    时间: 2008-8-7 01:01
以下引用約束于2008-8-6 16:00:06的发言:

我目前内个状态的地方不可视,但是装备时可以看到,是这样的



如果可以的话我给你这个的脚本-=

这些数据按道理游戏本身本来就是有的…… - -
作者: drgdrg    时间: 2008-8-7 02:02
以下引用kissye于2008-8-6 16:14:09的发言:

Game_Actor类下增加能力种类,举例
attr_accessor :charm   #魅力
然后修改Game_Actors
#--------------------------------------------------------------------------
# ● 获取角色
#     actor_id : 角色ID
#--------------------------------------------------------------------------
def [](actor_id)
   if @data[actor_id] == nil and $data_actors[actor_id] != nil
     @data[actor_id] = Game_Actor.new(actor_id)
#下面是增加的
case actor_id#根据角色编号不同
when 1#1号角色
@data[actor_id].charm = 70#设置魅力初始值
when 2#2号角色
@data[actor_id].charm = 70#其他角色类推
end
#上面是增加的
   end
   return @data[actor_id]
end
不过修改这些值必须用脚本,因为数据库里没有这些值,不能直接编辑





那要如何让这些能力显示在状态栏里呢??
作者: 享天风    时间: 2008-8-7 02:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 約束    时间: 2008-8-7 03:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: ONEWateR    时间: 2008-8-7 04:05

Window_Base

Window_Status [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 越前リョーマ    时间: 2008-8-7 04:19
以下引用約束于2008-8-6 19:54:51的发言:

不是的。。内是装了扩张装备画面才有的。。。

然后效果是可以选择自动装备最强装备,装备全卸,和变更装备

在裝某个装备时显示出他对各个属性值的影响,其中添加了回避 。命中 。会心 这三个数值影响。

回避、命中、会心是系统本身就有的,只不过是需要战斗时零时计算的,这个就是把这些属性先计算出来显示在菜单上而已。不是新增属性。
作者: drgdrg    时间: 2008-8-7 06:18
谢谢大家的回答!

问题已经基本解决,我会把解决方案整理一下写在顶楼
作者: 小空弟    时间: 2008-12-23 03:19
我是用全局变量写的,比lz的方法要简单。而且战斗获得声望也不用脚本。
目前还没看出bug,不知道会不会出事。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1