Project1

标题: 为武器增加一个“体力”属性,需要在哪些地方修改? [打印本页]

作者: def123    时间: 2009-6-1 05:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-6-1 08:09

公共事件并行处理,
当角色武器为XX时,角色HP加X,开关A打开
if 角色武器不为XX并且开关A打开时
角色HP减X

加if条件分歧是为了防止脱下再穿上HP又涨

以下引用def123于2009-5-31 21:06:15的发言:


本贴悬赏额度如下:VIP:0   积分:100   
为武器增加一个“体力”属性,不是角色属性,而是纯脆的为武器增加,然后装备上后,HP得到相应的上升。
如,武器的体力属性为1时,增加5HP,依次类推。
需要在哪些地方修改?


作者: alilast    时间: 2009-6-1 19:45
不会。楼上理解错了。
这不是装备武器加属性的问题,而是给武器加属性的问题。
系统默认的武器可以增加的属性有力量灵巧速度魔力攻击力防御力,楼主的意思八成是想在数据库中加上个选项,可以选择HP上限加多少等等。
传说脚本可以解决一切问题…………
作者: def123    时间: 2009-6-1 19:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: TLF    时间: 2009-6-1 20:36
如果想直接加在RM的编辑菜单恐怕很难……
作者: def123    时间: 2009-6-1 21:28
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tabris_Air    时间: 2009-6-1 21:36
if attacker.huixin>rand(100

attacker是指攻击方,既然你是为武器添加属性,就应该是

attacker的武器.huixin > rand(100)
至于“attacker的武器”怎么表示……忘了= =b现在这台电脑没RM……
不过LZ既然要学脚本就慢慢摸索把
作者: def123    时间: 2009-6-1 21:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: def123    时间: 2009-6-1 21:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: alilast    时间: 2009-6-1 22:07
http://rpg.blue/web/htm/news856.htm
说实话这玩意我是没看懂
作者: 紫苏    时间: 2009-6-1 22:10
在 RPG::Weapon 中添加属性是正确的,不过上面那样你写 @huixin = 0 那一行没有作用,因为 RM 中的武器对象都是从文件(weapons.rxdata)反序列化后得到的对象,initialize 在被你动态修改之前(没有 @huixin = 0 这一行的时候)就被调用并保存到文件了~
所以除非你直接用 RPG::Weapon.new,否则你修改后的 initialize 没有任何意义。应该在 Scene_Title 中,$data_weapons 初始化之后按照数据库编号去初始化数组中每个元素的属性

一个简单的例子,给武器加一个体力属性,红色部分是修改了的地方:
module RPG
  class Weapon
    attr_accessor :power
  end
end

class Scene_Title
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 战斗测试的情况下
    if $BTEST
      battle_test
      return
    end
    # 载入数据库
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    $data_weapons[1].power = 2
    #.........
    # 中间的省略
    #.........
    $data_weapons[32].power = 5

    # 生成系统对像
    $game_system = Game_System.new
    # 生成标题图形
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # 生成命令窗口
    s1 = "新游戏"
    s2 = "继续"
    s3 = "退出"
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
    # 判定继续的有效性
    # 存档文件一个也不存在的时候也调查
    # 有効为 @continue_enabled 为 true、无效为 false
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Save#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    # 继续为有效的情况下、光标停止在继续上
    # 无效的情况下、继续的文字显示为灰色
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    # 演奏标题 BGM
    $game_system.bgm_play($data_system.title_bgm)
    # 停止演奏 ME、BGS
    Audio.me_stop
    Audio.bgs_stop
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面被切换就中断循环
      if $scene != self
        break
      end
    end
    # 装备过渡
    Graphics.freeze
    # 释放命令窗口
    @command_window.dispose
    # 释放标题图形
    @sprite.bitmap.dispose
    @sprite.dispose
  end
end
这样就成功给武器添加了新的属性~
之后就是实际把属性应用到角色身上了。原来的武器附加属性是在 Game_Actor 中的 base_XXX 等方法中附加的,所以增加 maxhp 的话也可以去修改 base_maxhp:
  #--------------------------------------------------------------------------
  # ● 获取基本 MaxHP
  #--------------------------------------------------------------------------
  def base_maxhp
    weapon = $data_weapons[@weapon_id]
    maxhp =
$data_actors[@actor_id].parameters[0, @level]
    if weapon
      return weapon.power * 5 + maxhp
    end
    @hp = [@hp, maxhp].min
    return maxhp

  end
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: def123    时间: 2009-6-1 22:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: 紫苏    时间: 2009-6-1 22:29
这就是因为某些武器的 power 属性没有被初始化,所以他们是 nil,而 nil 是不可比较的类型,所以有这个错误~我上面 Scene_Title 那个部分只初始化了数据库中第一个和最后一个武器的 power 属性,其实也可以用一个循环把所有武器的体力都初始化为 0:
for i in 1...$data_weapons.size
   $data_weapons.power = 0
end

作者: def123    时间: 2009-6-1 22:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: def123    时间: 2009-6-1 22:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: sizz123    时间: 2009-6-2 00:05
  如果能直接反映到编辑器上就好了.
  幸好只是hp,要是攻击力就不好计算了
作者: Tabris_Air    时间: 2009-6-12 08:00

加一项属性很简单,问题是LZ加属性作何用?
如果只是实现装备后人物对应能力增加,那么完全可以用公共事件和状态,因为从一个游戏玩家的角度看来这两者是没有任何区别的。
如果要实现其他功能比如武器属性升级,不管用脚本还是事件都是不太好实现的

以下引用def123于2009-6-1 11:47:37的发言:

公共事件和状态都能实现,但是这不是我需要的。
我是要在武器里增加一项属性,跟力量,灵巧一样的属性,并且属性是在武器的模板里面定义。
然后在其它地方调用。
希望知道的能说一下。






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