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

Project1

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

[已经解决] 请问如何制作两个背包?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2014-8-7
帖子
67
跳转到指定楼层
1
发表于 2014-12-31 15:13:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
请请教一下各位大大,有两个主角,想制作2个背包 数据不通用,请问应该怎么做呀?

就是主角A的时候 用A的 背包,,B的背包不显示,,B的时候B的背包, (⊙o⊙)…  口水文请见谅额,,

评分

参与人数 1星屑 +35 收起 理由
︶ㄣ牛排ぶ + 35 手动认可奖励

查看全部评分

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

2
发表于 2014-12-31 20:07:24 | 只看该作者
没用过XP,目测可以这么做。在Game_Party类里设置2组物品列表。

https://rpg.blue/thread-371929-1-1.html 这是VA的。或许可以参考
好吧,看不懂就算了,不会自己改脚本的话,可以无视我的回帖。

点评

P叔不是做过这种东西吗···  发表于 2014-12-31 20:47
回复 支持 反对

使用道具 举报

Lv1.梦旅人

幻想天神

梦石
0
星屑
55
在线时间
166 小时
注册时间
2012-3-24
帖子
404
3
发表于 2014-12-31 20:50:06 | 只看该作者
理论上每个道具增加一个变量,到时候再判断角色显示就OK了。。但细节很多……
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2014-12-31 23:39:04 | 只看该作者
本帖最后由 RyanBern 于 2015-1-18 11:38 编辑

一种比较简单的方法,直接生成多个Game_Party对象,暂时不用的先存着,$game_party指示的是当前的队伍(包括背包,队员,步数等信息)
注:以下脚本未测试
RUBY 代码复制
  1. class Game_System
  2.   def swap_party(party_id)
  3.     @reserved_parties ||= {}
  4.     party = @reserved_parties[party_id]
  5.     return if party == nil
  6.     @reserved_parties[party_id] = nil
  7.     @reserved_parties[$game_party.id] = $game_party
  8.     $game_party = party
  9.     $game_player.refresh
  10.     $game_party.refresh
  11.     $game_map.need_refresh = true
  12.   end
  13.   def add_party(party_id)
  14.     @reserved_parties ||= {}
  15.     party = Game_Party.new
  16.     party.id = party_id
  17.     @reserved_parties[party_id] = party
  18.   end
  19.   def remove_party(party_id)
  20.     @reserved_parties ||= {}
  21.     @reserved_parties[party_id] = nil
  22.   end
  23.   def merge_party(party_id)
  24.     @reserved_parties ||= {}
  25.     party = @reserved_parties[party_id]
  26.     return if party == nil
  27.     $game_party.gain_gold(party.gold)
  28.     $game_party.actors |= party.actors
  29.     (1...$data_items.size).each{|i| $game_party.gain_item(i, party.item_number(i))}
  30.     (1...$data_weapon.size).each{|i| $game_party.gain_weapon(i, party.weapon_number(i))}
  31.     (1...$data_armors.size).each{|i| $game_party.gain_armor(i, party.armor_number(i))}
  32.     @reserved_parties[party_id] = nil
  33.     $game_party.refresh
  34.   end
  35. end
  36.  
  37. class Game_Party
  38.   attr_accessor :actors
  39.   attr_writer    :id
  40.   def id
  41.     @id = 0 if @id.nil?
  42.     return @id
  43.   end
  44. end

使用方法:
RUBY 代码复制
  1. $game_system.add_party(队伍ID) # 新建一个队伍,队伍ID需要自己指定,不要与已有的重复
  2. $game_system.swap_party(队伍ID) # 将当前队伍设置为指定ID的队伍
  3. $game_system.remove_party(队伍ID) # 删除指定ID的队伍
  4. $game_system.merge_party(队伍ID) # 将指定ID的队伍合并到当前队伍中

注意,所有的队伍ID都要自己指定,一定要牢记。游戏一开始的初始队伍的ID为0。进行队伍合并后,不可再次分开,被合并的队伍将消失。
在主角2上场前,要先建立一个新的队伍,这时候使用
$game_system.add_party(1)
此时新建的主角2的队伍的ID为1
然后调用
$game_system.swap_party(1)
会将当前队伍换成建立的新队伍
这之后,对于队伍的所有操作,包括增加人,增加物品,道具等,都是对主角2的队伍而言的。
如果主角2的路线暂停,要换回主角1,则使用
$game_system.swap_party(0)
这样队伍又变回主角1的队伍了。
如果主角2遇到了主角1,并且想要加入主角1的队伍(当前队伍为主角2),那么要使用两句话
$game_system.swap_party(0)
$game_system.merge_party(1)
第一句话是换成主角1的队伍,第二句话是将主角2的队伍合并到主角1的队伍里面,执行之后,当前队伍为主角1的队伍,主角2的队伍永远消失。

点评

刚才发现脚本有个地方有点问题,读档之后再切换队伍会显示不正确。已改。  发表于 2015-1-18 11:39
gold是attr_reader暂不用改,使用Game_Party#gain_gold即可  发表于 2015-1-2 08:49
还有gold呢?  发表于 2015-1-1 22:46
已经修改  发表于 2015-1-1 22:23
啊啊,背包没问题了呢,谢谢大。可是两个角色合并的时候还是会报错呢。 提示的(eval):31:in merge_party'undefined method gold=' for +<Geme_party:Oxb5574e0>  发表于 2015-1-1 22:09

评分

参与人数 1星屑 +200 收起 理由
︶ㄣ牛排ぶ + 200 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
5
发表于 2015-1-1 01:06:05 | 只看该作者
本帖最后由 英顺的马甲 于 2015-1-1 14:31 编辑

这样就每个人都有一个背包了,
效果是背包根据队伍的第一个成员而定

脚本未经测试效果未知
RUBY 代码复制
  1. class Game_Party
  2.   def item_number(id)
  3.     @items[@actors[0].id] ? (@items[@actors[0].id].include?(id) ? @items[@actors[0].id][id] : 0) : 0
  4.   end
  5.   def weapon_number(id)
  6.     @weapons[@actors[0].id] ? (@weapons[@actors[0].id].include?(id) ? @weapons[@actors[0].id][id] : 0) : 0
  7.   end
  8.   def armor_number(id)
  9.     @armors[@actors[0].id] ? (@armors[@actors[0].id].include?(id) ? @armors[@actors[0].id][id] : 0) : 0
  10.   end
  11.   def gain_item(id, n)
  12.     @items[@actors[0].id] = {} unless @items[@actors[0].id]
  13.     if item_id > 0
  14.       @items[@actors[0].id][id] = [[item_number(id) + n, 0].max, 99].min
  15.     end
  16.   end
  17.   def gain_weapon(id, n)
  18.     @weapons[@actors[0].id] = {} unless @weapons[@actors[0].id]
  19.     if id > 0
  20.       @weapons[@actors[0].id][id] = [[weapon_number(id) + n, 0].max, 99].min
  21.     end
  22.   end
  23.   def gain_armor(id, n)
  24.     @armors[@actors[0].id] = {} unless @armors[@actors[0].id]
  25.     if id > 0
  26.       @armors[@actors[0].id][id] = [[armor_number(id) + n, 0].max, 99].min
  27.     end
  28.   end
  29. end

以下是第二种实现方法(同样未经测试):
RUBY 代码复制
  1. class Bag
  2.   def initialize
  3.     @data = {}
  4.   end
  5.   def [](id)
  6.     return nil unless @data[$game_party.actors[0].id]
  7.     return @data[$game_party.actors[0].id][id]
  8.   end
  9.   def []=(id, n)
  10.     @data = {} unless @data[$game_party.actors[0].id]
  11.     @data[$game_party.actors[0].id][id] = n
  12.   end
  13. end
  14. class Game_Party
  15.   alias multi_bag_init initialize unless defined?(multi_bag_init)
  16.   def initialize
  17.     multi_bag_init
  18.     @items = Bag.new
  19.     @weapons = Bag.new
  20.     @armor = Bag.new
  21.   end
  22. end

从第二种方法可以简单实现更多种多背包,比如说让背包根据一号变量而定,(其实第一种方法也能做到)
RUBY 代码复制
  1. class Bag
  2.   def initialize
  3.     @data = {}
  4.   end
  5.   def [](id)
  6.     return nil unless @data[$game_variables[1]]
  7.     return @data[$game_variables[1]][id]
  8.   end
  9.   def []=(id, n)
  10.     @data = {} unless @data[$game_variables[1]]
  11.     @data[$game_variables[1]][id] = n
  12.   end
  13. end
  14. class Game_Party
  15.   alias multi_bag_init initialize unless defined?(multi_bag_init)
  16.   def initialize
  17.     multi_bag_init
  18.     @items = Bag.new
  19.     @weapons = Bag.new
  20.     @armor = Bag.new
  21.   end
  22. end

理论上只要你会一些脚本你就能从第二种方法中延伸出各种各样的多重背包。

点评

多谢提醒  发表于 2015-1-1 14:25
方法同样比较不错,不过重新定义的方法有些多,容易发生冲突。另外Game_Party的initialize方法定义是不是少了些什么东西?  发表于 2015-1-1 09:00
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2014-8-7
帖子
67
6
 楼主| 发表于 2015-1-1 14:10:31 | 只看该作者
本帖最后由 无敌啊鸡 于 2015-1-1 17:13 编辑
RyanBern 发表于 2014-12-31 23:39
一种比较简单的方法,直接生成多个Game_Party对象,暂时不用的先存着,$game_party指示的是当前的队伍(包 ...


那个,谢谢大。。虽然实现了背包额,,
可是好像有点问题额。

您的意思是,在主角2加入队伍前先调用脚本$game_system.add_party(1)
然后2号角色加入队伍 在调用$game_system.swap_party(1) 是么

这么做了之后 角色就不在了 (⊙o⊙)…  虽然背包清空了。。。

(⊙o⊙)… 额,然后想要合并2个队伍的时候 似乎报错了额。。。

点评

正确的顺序为:$game_system.add_party(1);$game_system.swap_party(1);主角2加入队伍  发表于 2015-1-1 19:30
额。大 脚本是1231额,是我打这段的时候少打了个1,呜  发表于 2015-1-1 15:08
第四十五行应该是rb_initialize_20141231,他少打了一个1  发表于 2015-1-1 14:29
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2014-8-7
帖子
67
7
 楼主| 发表于 2015-1-1 15:06:01 | 只看该作者
本帖最后由 无敌啊鸡 于 2015-1-1 15:08 编辑
无敌啊鸡 发表于 2015-1-1 14:10
又见大神,谢谢您,每次都麻烦您呀。。
(⊙o⊙)… 那个,这个脚本是插入MAIN前么 试了一下,好像报错了额 ...


额 大大,是我不小心输的时候少打了一个1, 脚本里是1231(⊙o⊙)… 。


呜,不小心连帖了, 不知道怎么编辑删除。。我错了。。。

点评

没找到呢,呜呜~  发表于 2015-1-1 17:13
编辑帖子时旁边有个“删?”  发表于 2015-1-1 15:25
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
380
在线时间
602 小时
注册时间
2014-5-8
帖子
699
8
发表于 2015-1-1 18:11:37 | 只看该作者
本帖最后由 布罗利 于 2015-1-1 18:12 编辑

单人负重系统V1.16.7z (2.58 MB, 下载次数: 90)
使用方法:1、单人负重的那个脚本复制到你工程
                  2、然后菜单里的-刷新画面 (命令窗口被激活的情况下)进入物品的地方改一下
                       大概是这样改,不过得根据你的工程
                     
RUBY 代码复制
  1. when 3  # 物品
  2.        # 演奏确定 SE
  3.         $game_system.se_play($data_system.decision_se)
  4.         # 切换到物品画面
  5.         @command_window.active = false
  6.         @status_window.active = true
  7.         @status_window.index = 0

               
   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
9
发表于 2015-1-1 22:15:03 | 只看该作者
无敌啊鸡 发表于 2015-1-1 15:06
额 大大,是我不小心输的时候少打了一个1, 脚本里是1231(⊙o⊙)… 。

补上这段
  1. class Game_Party
  2.   attr_accessor :gold, :actors
  3. end
复制代码

点评

谢谢您呀,嘿嘿  发表于 2015-1-4 23:16
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 10:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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