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

Project1

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

[已经过期] 求助,关于这个无限生成脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
40
在线时间
80 小时
注册时间
2014-11-3
帖子
71
跳转到指定楼层
1
发表于 2016-1-3 14:44:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这个无限生成脚本还好,只不过当我关闭游戏再次打开游戏存档的时候,就变成了这个样子:
到底哪里出问题里?
脚本源代码:
  1. =begin
  2. # 宠物系统-无限生成宠物
  3. # 作者:66RPG的tan12345
  4. # 使用方法:
  5. # 1.正常入队(指定ID:actor_id):
  6. #   $game_party.tan_add_actor(actor_id)
  7. # 2.正常入队(初始化人物,建议少用)(指定ID:actor_id):
  8. #   $game_party.tan_add_actor(actor_id,false,true)
  9. # 3.副本入队(将ID为actor_id的人物以副本的形式加入队伍,强制初始化):
  10. #   $game_party.tan_add_actor(actor_id,true)
  11. # 4.正常离队(指定ID:actor_id):
  12. #   $game_party.tan_remove_actor(actor_id)
  13. # 5.离队后删除副本(指定ID:actor_id,
  14. #   该方法会将指定ID的人物清除掉,如果不能确定宠物是否副本生成的,请慎用):
  15. #   $game_party.tan_remove_actor(actor_id,true)
  16. =end
  17. class Game_Party < Game_Unit
  18.   #--------------------------------------------------------------------------
  19.   # ● 寻找空位
  20.   #--------------------------------------------------------------------------
  21.   def get_nil_actorid
  22.     for i in 1..$data_actors.size
  23.       return i if $data_actors[i] == nil
  24.     end
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 无限生成专用的队员管理-入队
  28.   # a参数代表加入队伍的是否模版
  29.   # b参数代表是否需要初始化
  30.   # a为true时(加入的是模版)b也必须为true(初始化)
  31.   #--------------------------------------------------------------------------
  32.   def tan_add_actor(actor_id,a = false,b = false)
  33.     if a#加入的是模板
  34.       new_actor_id = get_nil_actorid
  35.       $data_actors[new_actor_id] = $data_actors[actor_id]
  36.       $game_actors[new_actor_id].setup(new_actor_id)
  37.       add_actor(new_actor_id)
  38.     else#正常加入
  39.       $game_actors[actor_id].setup(actor_id) if b
  40.       add_actor(actor_id)
  41.     end
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 无限生成专用的队员管理-离队
  45.   # a参数代表是否需要清空离队人物(宠物)的数据
  46.   #--------------------------------------------------------------------------
  47.   def tan_remove_actor(actor_id,a = false)
  48.     if a#清除数据
  49.       remove_actor(actor_id)
  50.       $data_actors[actor_id] = nil
  51.     else#普通离队
  52.       remove_actor(actor_id)
  53.     end
  54.   end
  55. end

  56.   #--------------------------------------------------------------------------
  57.   # ● 重写存档读档,保证新生成的数据存在。
  58.   #--------------------------------------------------------------------------
  59. module DataManager
  60.   #--------------------------------------------------------------------------
  61.   # ● 生成存档内容
  62.   #--------------------------------------------------------------------------
  63.   def self.make_save_contents
  64.     contents = {}
  65.     contents[:system]        = $game_system
  66.     contents[:timer]         = $game_timer
  67.     contents[:message]       = $game_message
  68.     contents[:switches]      = $game_switches
  69.     contents[:variables]     = $game_variables
  70.     contents[:self_switches] = $game_self_switches
  71.     contents[:actors]        = $game_actors
  72.     contents[:party]         = $game_party
  73.     contents[:troop]         = $game_troop
  74.     contents[:map]           = $game_map
  75.     contents[:player]        = $game_player
  76.     contents[:weapons]       = $data_weapons
  77.     contents[:armors]        = $data_armors
  78.     ###########################################
  79.     contents[:pactors]        = $data_actors
  80.     ###########################################
  81.     contents
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 展开存档内容
  85.   #--------------------------------------------------------------------------
  86.   def self.extract_save_contents(contents)
  87.     $game_system        = contents[:system]
  88.     $game_timer         = contents[:timer]
  89.     $game_message       = contents[:message]
  90.     $game_switches      = contents[:switches]
  91.     $game_variables     = contents[:variables]
  92.     $game_self_switches = contents[:self_switches]
  93.     $game_actors        = contents[:actors]
  94.     $game_party         = contents[:party]
  95.     $game_troop         = contents[:troop]
  96.     $game_map           = contents[:map]
  97.     $game_player        = contents[:player]
  98.     $data_weapons       = contents[:weapons]
  99.     $data_armors        = contents[:armors]
  100.     ###########################################
  101.     $data_actors        = contents[:pactors]
  102.     ###########################################
  103.   end
  104. end
复制代码

图像 008.png (6.84 KB, 下载次数: 34)

图像 008.png

Lv2.观梦者

梦石
0
星屑
521
在线时间
350 小时
注册时间
2015-10-19
帖子
87
2
发表于 2016-1-3 16:40:06 | 只看该作者
再存档再打开试试看看还有没有问题
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
40
在线时间
80 小时
注册时间
2014-11-3
帖子
71
3
 楼主| 发表于 2016-1-3 16:44:01 | 只看该作者
约约v看看 发表于 2016-1-3 16:40
再存档再打开试试看看还有没有问题

还是那个样子!

点评

在楼下  发表于 2016-1-3 17:32
都用了什么脚本呢?  发表于 2016-1-3 17:09
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
40
在线时间
80 小时
注册时间
2014-11-3
帖子
71
4
 楼主| 发表于 2016-1-3 17:32:19 | 只看该作者
脚本在这里 @约约v看看

图像 009.png (75.81 KB, 下载次数: 33)

图像 009.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
40
在线时间
80 小时
注册时间
2014-11-3
帖子
71
5
 楼主| 发表于 2016-1-3 17:51:50 | 只看该作者
约约v看看 发表于 2016-1-3 16:40
再存档再打开试试看看还有没有问题

在楼上,你看一下
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
10
星屑
5758
在线时间
1851 小时
注册时间
2013-2-14
帖子
395

开拓者

6
发表于 2016-1-3 19:01:51 | 只看该作者
人家是一套脚本的,你只搬一个不出错才怪。。

点评

然而并不是脚本数量的问题  发表于 2016-1-3 19:36
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
21 小时
注册时间
2015-12-31
帖子
9
7
发表于 2016-1-4 16:40:15 | 只看该作者
本帖最后由 wyy272176594 于 2016-1-4 16:48 编辑

可以这么分析:
根据报错的提示,转到Game_Party的67行(未增减过):
all_members[0, max_battle_members].select {|actor| actor.exist? }
错误是这一句某次遍历all_members时actor为空,然而select方法不可能越界,而且max_battle_members为4(73行)。
那么就看all_members这个数组是哪里来的,就在上面61行:
@actors.collect {|id| $game_actors[id] }
就是根据成员变量@actors中的ID,去取$game_actors里面对应的角色。
问题也很可能出现在这里,如果@actors中的ID在$game_actors中没有对应的值,就会加入空值。
那么@actors中的ID是哪里添加的?通过查找是在add_actor方法中。
然后查看脚本中使用add_actor方法的地方,发现添加的ID是调用时候传入参数。

所以请楼主确保调用tan_add_actor方法时传入的actor_id的角色是调用之前已经存在的。
如果是用其他脚本生成的角色,请在读取后调用tan_add_actor之前确保actor_id的角色是存在的。

点评

太深奥了,实在不懂,直接告诉我怎么办吧  发表于 2016-1-4 18:48
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
21 小时
注册时间
2015-12-31
帖子
9
8
发表于 2016-1-4 20:52:39 | 只看该作者
wyy272176594 发表于 2016-1-4 16:40
可以这么分析:
根据报错的提示,转到Game_Party的67行(未增减过):
all_members[0, max_battle_members].s ...

可能是你调用tan_add_actor(actor_id,...)方法时,但没有人物编号为actor_id的角色引起的。
比方:tan_add_actor(100,...),但没有编号为100的角色,会产生这个错误。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
40
在线时间
80 小时
注册时间
2014-11-3
帖子
71
9
 楼主| 发表于 2016-1-5 18:07:46 | 只看该作者
wyy272176594 发表于 2016-1-4 20:52
可能是你调用tan_add_actor(actor_id,...)方法时,但没有人物编号为actor_id的角色引起的。
比方:tan_ad ...

可并不是这样的啊……
你说的是游戏中没有这个角色还是数据库没有这个角色?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
21 小时
注册时间
2015-12-31
帖子
9
10
发表于 2016-1-5 20:25:02 | 只看该作者
小究就是我 发表于 2016-1-5 18:07
可并不是这样的啊……
你说的是游戏中没有这个角色还是数据库没有这个角色? ...

在脚本中,所有的角色都在$game_actors这个里面。我是指$game_actors里(即$data_actors)没这个角色。
$game_actors他可以看作是数据库的角色($data_actors),但其他脚本也可以对$data_actors进行改变。
这么说吧,如果没有其他影响角色的脚本,那么就是数据库没有这个编号的角色。
如果不是这个问题引起的,那我就分析不出来了。

点评

谢谢你,不过非常抱歉,我没有影响角色的脚本……不过非常感谢  发表于 2016-1-7 18:55
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 06:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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