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

Project1

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

[已经解决] RPG::Weapon和$data_weapons的关系

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
50 小时
注册时间
2020-2-16
帖子
103
跳转到指定楼层
1
发表于 2020-2-28 18:20:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
请教一下RPG::Weapon和$data_weapons的关系
流飘零半生,未逢明主。公若是不弃,流愿拜为义父

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
2
发表于 2020-2-28 23:18:25 | 只看该作者
p 一下 $data_weapons.class  和  $data_weapons[1].class 就知道啦
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
635
在线时间
244 小时
注册时间
2010-9-9
帖子
472
3
发表于 2020-2-29 00:04:15 | 只看该作者
$data_weapons是数组,RPG::Weapon是类,而$data_weapons[1]是对象 _(:з」∠)_

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
50 小时
注册时间
2020-2-16
帖子
103
4
 楼主| 发表于 2020-2-29 09:36:10 | 只看该作者
灯笼菜刀王 发表于 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获取到增加多少属性值的
流飘零半生,未逢明主。公若是不弃,流愿拜为义父
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
50 小时
注册时间
2020-2-16
帖子
103
5
 楼主| 发表于 2020-2-29 09:43:29 | 只看该作者
EngShun 发表于 2020-2-29 00:04
$data_weapons是数组,RPG::Weapon是类,而$data_weapons[1]是对象 _(:з」∠)_

RPG::Weapon 是怎么从 $data_weapons获取到增加多少属性值的

点评

RPG::Weapon 并不会从 $data_weapons 获取到增加多少属性值哦 _(:з」∠)_  发表于 2020-2-29 16:47
流飘零半生,未逢明主。公若是不弃,流愿拜为义父
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
6
发表于 2020-2-29 10:06:11 | 只看该作者
轩辕合流 发表于 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 = "菜刀",  然后再去看看你的道具栏和装备栏
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
50 小时
注册时间
2020-2-16
帖子
103
7
 楼主| 发表于 2020-2-29 14:35:45 | 只看该作者
灯笼菜刀王 发表于 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的镶嵌宝石,结果完全看不懂。无奈按照自己抠脚的语法来写了
流飘零半生,未逢明主。公若是不弃,流愿拜为义父
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
8
发表于 2020-2-29 15:24:21 | 只看该作者
本帖最后由 灯笼菜刀王 于 2020-2-29 15:28 编辑
轩辕合流 发表于 2020-2-29 14:35
我是想做一个镶嵌宝石的功能,在装备上。然后模仿默认系统中装备是如何放在角色身上的。就是用的attr_rea ...


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

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

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

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

PS: 猫姐的脚本非常个性化XD, 我可是不敢动她的脚本的说
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
50 小时
注册时间
2020-2-16
帖子
103
9
 楼主| 发表于 2020-3-1 14:06:13 | 只看该作者
灯笼菜刀王 发表于 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>

点评

<code>是html,要用[code]才对  发表于 2020-3-2 14:10
流飘零半生,未逢明主。公若是不弃,流愿拜为义父
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 04:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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