Project1

标题: RPG::Weapon和$data_weapons的关系 [打印本页]

作者: 轩辕合流    时间: 2020-2-28 18:20
标题: RPG::Weapon和$data_weapons的关系
请教一下RPG::Weapon和$data_weapons的关系
作者: 灯笼菜刀王    时间: 2020-2-28 23:18
p 一下 $data_weapons.class  和  $data_weapons[1].class 就知道啦
作者: EngShun    时间: 2020-2-29 00:04
$data_weapons是数组,RPG::Weapon是类,而$data_weapons[1]是对象 _(:з」∠)_
作者: 轩辕合流    时间: 2020-2-29 09:36
灯笼菜刀王 发表于 2020-2-28 23:18
p 一下 $data_weapons.class  和  $data_weapons[1].class 就知道啦

角色从哪里加的攻击力(等等其他属性)。比如$game_actor   的 base_str。等等大概了解了!$data_weapons储存的是一个一个的RPG::Weapon。那么RPG::Weapon 是怎么从 $data_weapons获取到增加多少属性值的
作者: 轩辕合流    时间: 2020-2-29 09:43
EngShun 发表于 2020-2-29 00:04
$data_weapons是数组,RPG::Weapon是类,而$data_weapons[1]是对象 _(:з」∠)_

RPG::Weapon 是怎么从 $data_weapons获取到增加多少属性值的
作者: 灯笼菜刀王    时间: 2020-2-29 10:06
轩辕合流 发表于 2020-2-29 09:36
角色从哪里加的攻击力(等等其他属性)。比如$game_actor   的 base_str。等等大概了解了!$data_weapons储 ...


  scene title 一开始的那一串赋值就是啦

RPG::Weapon.new是 $data_weapon数组保存的每一个实例, 和 $game_actors 类似,  而且也可以直接进行数值操作, 因为RPG::Weapon.new 的实变量都开放写入的(看F1)

你可以试试,  在游戏里执行一次 $data_weapon[1].name = "菜刀",  然后再去看看你的道具栏和装备栏
作者: 轩辕合流    时间: 2020-2-29 14:35
灯笼菜刀王 发表于 2020-2-29 10:06
scene title 一开始的那一串赋值就是啦

RPG::Weapon.new是 $data_weapon数组保存的每一个实 ...

我是想做一个镶嵌宝石的功能,在装备上。然后模仿默认系统中装备是如何放在角色身上的。就是用的attr_reader而我用的attr_accessor 不知道为什么attr_reader这个定义改写会会报错。
odule RPG
  class Weapon
    attr_accessor :mosaic    # 开槽数量
    attr_accessor :gemstone1 # 宝石
    attr_accessor :gemstone2 # 宝石
    attr_accessor :gemstone3 # 宝石
    attr_accessor :gemstone4 # 宝石
    attr_accessor :gemstone5 # 宝石
    attr_accessor :gemstone6 # 宝石
    attr_accessor :gemstone7 # 宝石
    attr_accessor :gemstone8 # 宝石
    attr_accessor :gemstone9 # 宝石
    attr_accessor :gemstone10 # 宝石
    alias :new_initialize :initialize
    def initialize
      new_initialize
      @mosaic = 0
      @gemstone1 = nil
      @gemstone2 = nil
      @gemstone3 = nil
      @gemstone4 = nil
      @gemstone5 = nil
      @gemstone6 = nil
      @gemstone7 = nil
      @gemstone8 = nil
      @gemstone9 = nil
      @gemstone10 = nil
    end
  end
end
module RPG
  class Armor
    attr_accessor :mosaic   # 开槽数量
    attr_accessor :mosaic    # 开槽数量
    attr_accessor :gemstone1 # 宝石
    attr_accessor :gemstone2 # 宝石
    attr_accessor :gemstone3 # 宝石
    attr_accessor :gemstone4 # 宝石
    attr_accessor :gemstone5 # 宝石
    attr_accessor :gemstone6 # 宝石
    attr_accessor :gemstone7 # 宝石
    attr_accessor :gemstone8 # 宝石
    attr_accessor :gemstone9 # 宝石
    attr_accessor :gemstone10 # 宝石
    alias :new_initialize :initialize
    def initialize
      new_initialize
      @mosaic = 0
      @gemstone1 = nil
      @gemstone2 = nil
      @gemstone3 = nil
      @gemstone4 = nil
      @gemstone5 = nil
      @gemstone6 = nil
      @gemstone7 = nil
      @gemstone8 = nil
      @gemstone9 = nil
      @gemstone10 = nil
    end
  end
end


然后想怎么写宝石,结果还是赖在物品上面了。成了这样
module RPG
  class Item
    attr_accessor :atk
    attr_accessor :pdef
    attr_accessor :mdef
    attr_accessor :str
    attr_accessor :dex
    attr_accessor :agi
    attr_accessor :int
    alias :new_initialize :initialize
    def initialize
      new_initialize
      @atk = 0
      @pdef = 0
      @mdef = 0
      @str = 0
      @dex = 0
      @agi = 0
      @int = 0
    end
end
在物品也定义了那么增加属性的实变量(是叫实变量吧)。然后在标题设置了那么宝石(物品)的实变量的具体数值
for i in 20..25
      $data_items.atk = i * 10
      $data_items.pdef = i * 10
      $data_items.mdef = i * 10
      $data_items.str = i * 10
      $data_items.dex = i * 10
      $data_items.agi = i * 10
      $data_items.int = i * 10
    end
   宝石在数据库中的设置是 20-25
然后想怎么增加,把物品附带的那些属性增加到对应的武器。看了一下默认的脚本,也不是说game_actor是拥有这把武器的。直接调用数据库中的武器属性增加到角色的属性。然后我模仿了一下
  #--------------------------------------------------------------------------
  # ● 获取基本力量
  #--------------------------------------------------------------------------
  def base_str
    n = $data_actors[@actor_id].parameters[2, @level]
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    n += weapon != nil ? weapon.str_plus : 0
    n += armor1 != nil ? armor1.str_plus : 0
    n += armor2 != nil ? armor2.str_plus : 0
    n += armor3 != nil ? armor3.str_plus : 0
    n += armor4 != nil ? armor4.str_plus : 0
   
    parameter = []
    armor_list = [$data_weapons[@weapon_id], $data_armors[@armor1_id], $data_armors[@armor2_id],
    $data_armors[@armor3_id], $data_armors[@armor4_id]]
    for i in 0...armor_list.size
      armor = armor_list
      if armor
        parameter.push(armor.gemstone1)
        parameter.push(armor.gemstone2)
        parameter.push(armor.gemstone3)
        parameter.push(armor.gemstone4)
        parameter.push(armor.gemstone5)
        parameter.push(armor.gemstone6)
        parameter.push(armor.gemstone7)
        parameter.push(armor.gemstone8)
        parameter.push(armor.gemstone9)
        parameter.push(armor.gemstone10)
      end
    end
    for i in 0...parameter.size
      n += parameter != nil ? parameter.str : 0
    end
    return [[n, 1].max, 99999].min
  end
因为有点懒,所以利用了数组和循环
最后便是处理与显示的问题
  首先呢!上面的实变量有个mosaic,这个是开槽的数量。简单的来说就是一件装备可以镶嵌多少块宝石。所
   以提前做了一个装备开槽的界面。
  然后便是处理
  在窗口那里设置好,首先选择装备进行镶嵌。如果装备的槽(mosaic)==0,就不进行下一步操作了,返回
  然后便是操作处理
  槽的窗口的 item_max = 装备.mosaic
  最后便是操作,首先判断。装备上的选中的槽是否有宝石
    有 : 就将宝石卸载到背包   $game_party.gain_item  (因为宝石是物品)
   没有 : 不进行任何操作
   将选中的宝石移除背包 $game_party.gain_item(@stone.id, -1)
   @item.gemstone11 = @stone
  各方面的刷新

@item : 选中的装备
@stone : 选中的宝石



最后算是做成功了,本来想来piao一下SailCat的镶嵌宝石,结果完全看不懂。无奈按照自己抠脚的语法来写了
作者: 灯笼菜刀王    时间: 2020-2-29 15:24
本帖最后由 灯笼菜刀王 于 2020-2-29 15:28 编辑
轩辕合流 发表于 2020-2-29 14:35
我是想做一个镶嵌宝石的功能,在装备上。然后模仿默认系统中装备是如何放在角色身上的。就是用的attr_rea ...


镶嵌系统, 需要注意的有两个

1, 独立ID化,  即把每件装备都作为单独个体

2, 保存方式,  即改动后SAVE和LOAD能保存变化, 顺便说下, 我上面说的那个直接对$data_weapons的操作是不能保存的

做法其实很容易, 参考 Game_SelfSwitches 这个处理就行了, 不过如何存取和调用和整理就要好好策划一番咯

PS: 猫姐的脚本非常个性化XD, 我可是不敢动她的脚本的说
作者: 轩辕合流    时间: 2020-3-1 14:06
灯笼菜刀王 发表于 2020-2-29 15:24
镶嵌系统, 需要注意的有两个

1, 独立ID化,  即把每件装备都作为单独个体

我还是做出来了。按照我的,
<code>
for i in 1...$data_weapons.size
if $game_party.weapon_number > 0
$game_variables[1000 + i] = $data_weapons.宝石属性
$game_variables[2000+ i] = $data_weapons.开槽数量
end
end

</code>




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