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

Project1

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

[已经过期] 请问这样的报错如何解决

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2331
在线时间
654 小时
注册时间
2017-10-13
帖子
53
跳转到指定楼层
1
发表于 2018-1-29 17:53:35 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x



RUBY 代码复制
  1. #==============================================================================
  2. # ■ Game_Party
  3. #------------------------------------------------------------------------------
  4. #  处理同伴的类。包含金钱以及物品的信息。本类的实例
  5. # 请参考 $game_party。
  6. #==============================================================================
  7.  
  8. class Game_Party
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_reader   :actors                   # 角色
  13.   attr_reader   :gold                     # 金钱
  14.   attr_reader   :steps                    # 步数
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对像
  17.   #--------------------------------------------------------------------------
  18.   def initialize
  19.     # 建立角色序列
  20.     @actors = []
  21.     # 初始化金钱与步数
  22.     @gold = 0
  23.     @steps = 0
  24.     # 生成物品、武器、防具的所持数 hash
  25.     @items = {}
  26.     @weapons = {}
  27.     @armors = {}
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 设置初期同伴
  31.   #--------------------------------------------------------------------------
  32.   def setup_starting_members
  33.     @actors = []
  34.     for i in $data_system.party_members
  35.       @actors.push($game_actors[i])
  36.     end
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 设置战斗测试用同伴
  40.   #--------------------------------------------------------------------------
  41.   def setup_battle_test_members
  42.     @actors = []
  43.     for battler in $data_system.test_battlers
  44.       actor = $game_actors[battler.actor_id]
  45.       actor.level = battler.level
  46.       gain_weapon(battler.weapon_id, 1)
  47.       gain_armor(battler.armor1_id, 1)
  48.       gain_armor(battler.armor2_id, 1)
  49.       gain_armor(battler.armor3_id, 1)
  50.       gain_armor(battler.armor4_id, 1)
  51.       actor.equip(0, battler.weapon_id)
  52.       actor.equip(1, battler.armor1_id)
  53.       actor.equip(2, battler.armor2_id)
  54.       actor.equip(3, battler.armor3_id)
  55.       actor.equip(4, battler.armor4_id)
  56.       actor.recover_all
  57.       @actors.push(actor)
  58.     end
  59.     @items = {}
  60.     for i in 1...$data_items.size
  61.       if $data_items[i].name != ""
  62.         occasion = $data_items[i].occasion
  63.         if occasion == 0 or occasion == 1
  64.           @items[i] = 99
  65.         end
  66.       end
  67.     end
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 同伴成员的还原
  71.   #--------------------------------------------------------------------------
  72.   def refresh
  73.     # 游戏数据载入后角色对像直接从 $game_actors
  74.     # 分离。
  75.     # 回避由于载入造成的角色再设置的问题。
  76.     new_actors = []
  77.     for i in 0...@actors.size
  78.       if $data_actors[@actors[i].id] != nil
  79.         new_actors.push($game_actors[@actors[i].id])
  80.       end
  81.     end
  82.     @actors = new_actors
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 获取最大等级
  86.   #--------------------------------------------------------------------------
  87.   def max_level
  88.     # 同伴人数为 0 的情况下
  89.     if @actors.size == 0
  90.       return 0
  91.     end
  92.     # 初始化本地变量 level
  93.     level = 0
  94.     # 求得同伴的最大等级
  95.     for actor in @actors
  96.       if level < actor.level
  97.         level = actor.level
  98.       end
  99.     end
  100.     return level
  101.   end
  102. #--------------------------------------------------------------------------
  103. # ● 加入同伴
  104. #     actor_id : 角色 ID
  105. #--------------------------------------------------------------------------
  106. def add_actor(actor_id)
  107.    # 获取角色
  108.    actor = $game_actors[actor_id]
  109.    # 同伴人数未满 5 人、本角色不在队伍中的情况下
  110.    if @actors.size < 5 and not @actors.include?(actor)
  111.      # 添加角色
  112.      @actors.push(actor)
  113.      # 还原主角
  114.      $game_player.refresh
  115.    end
  116. end
  117.   #--------------------------------------------------------------------------
  118.   # ● 角色离开
  119.   #     actor_id : 角色 ID
  120.   #--------------------------------------------------------------------------
  121.   def remove_actor(actor_id)
  122.     # 删除觉得
  123.     @actors.delete($game_actors[actor_id])
  124.     # 还原主角
  125.     $game_player.refresh
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 增加金钱 (减少)
  129.   #     n : 金额
  130.   #--------------------------------------------------------------------------
  131.   def gain_gold(n)
  132.     @gold = [[@gold + n, 0].max, 9999999].min
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 减少金钱
  136.   #     n : 金额
  137.   #--------------------------------------------------------------------------
  138.   def lose_gold(n)
  139.     # 调用数值逆转 gain_gold
  140.     gain_gold(-n)
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 增加步数
  144.   #--------------------------------------------------------------------------
  145.   def increase_steps
  146.     @steps = [@steps + 1, 9999999].min
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 获取物品的所持数
  150.   #     item_id : 物品 ID
  151.   #--------------------------------------------------------------------------
  152.   def item_number(item_id)
  153.     # 如果 hash 个数数值不存在就返回 0
  154.     return @items.include?(item_id) ? @items[item_id] : 0
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 获取武器所持数
  158.   #     weapon_id : 武器 ID
  159.   #--------------------------------------------------------------------------
  160.   def weapon_number(weapon_id)
  161.     # 如果 hash 个数数值不存在就返回 0
  162.     return @weapons.include?(weapon_id) ? @weapons[weapon_id] : 0
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● 获取防具所持数
  166.   #     armor_id : 防具 ID
  167.   #--------------------------------------------------------------------------
  168.   def armor_number(armor_id)
  169.     # 如果 hash 个数数值不存在就返回 0
  170.     return @armors.include?(armor_id) ? @armors[armor_id] : 0
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 增加物品 (减少)
  174.   #     item_id : 物品 ID
  175.   #     n       : 个数
  176.   #--------------------------------------------------------------------------
  177.   def gain_item(item_id, n)
  178.     # 更新 hash 的个数数据
  179.     if item_id > 0
  180.       @items[item_id] = [[item_number(item_id) + n, 0].max, 99].min
  181.     end
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 增加武器 (减少)
  185.   #     weapon_id : 武器 ID
  186.   #     n         : 个数
  187.   #--------------------------------------------------------------------------
  188.   def gain_weapon(weapon_id, n)
  189.     # 更新 hash 的个数数据
  190.     if weapon_id > 0
  191.       @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 99].min
  192.     end
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ● 增加防具 (减少)
  196.   #     armor_id : 防具 ID
  197.   #     n        : 个数
  198.   #--------------------------------------------------------------------------
  199.   def gain_armor(armor_id, n)
  200.     # 更新 hash 的个数数据
  201.     if armor_id > 0
  202.       @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, 99].min
  203.     end
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 减少物品
  207.   #     item_id : 物品 ID
  208.   #     n       : 个数
  209.   #--------------------------------------------------------------------------
  210.   def lose_item(item_id, n)
  211.     # 调用 gain_item 的数值逆转
  212.     gain_item(item_id, -n)
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   # ● 减少武器
  216.   #     weapon_id : 武器 ID
  217.   #     n         : 个数
  218.   #--------------------------------------------------------------------------
  219.   def lose_weapon(weapon_id, n)
  220.     # 调用 gain_weapon 的数值逆转
  221.     gain_weapon(weapon_id, -n)
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● 减少防具
  225.   #     armor_id : 防具 ID
  226.   #     n        : 个数
  227.   #--------------------------------------------------------------------------
  228.   def lose_armor(armor_id, n)
  229.     # 调用 gain_armor 的数值逆转
  230.     gain_armor(armor_id, -n)
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 判断物品可以使用
  234.   #     item_id : 物品 ID
  235.   #--------------------------------------------------------------------------
  236.   def item_can_use?(item_id)
  237.     # 物品个数为 0 的情况
  238.     if item_number(item_id) == 0
  239.       # 不能使用
  240.       return false
  241.     end
  242.     # 获取可以使用的时候
  243.     occasion = $data_items[item_id].occasion
  244.     # 战斗的情况
  245.     if $game_temp.in_battle
  246.       # 可以使用时为 0 (平时) 或者是 1 (战斗时) 可以使用
  247.       return (occasion == 0 or occasion == 1)
  248.     end
  249.     # 可以使用时为 0 (平时) 或者是 2 (菜单时) 可以使用
  250.     return (occasion == 0 or occasion == 2)
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● 清除全体的行动
  254.   #--------------------------------------------------------------------------
  255.   def clear_actions
  256.     # 清除全体同伴的行为
  257.     for actor in @actors
  258.       actor.current_action.clear
  259.     end
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 可以输入命令的判定
  263.   #--------------------------------------------------------------------------
  264.   def inputable?
  265.     # 如果一可以输入命令就返回 true
  266.     for actor in @actors
  267.       if actor.inputable?
  268.         return true
  269.       end
  270.     end
  271.     return false
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● 全灭判定
  275.   #--------------------------------------------------------------------------
  276.   def all_dead?
  277.     # 同伴人数为 0 的情况下
  278.     if $game_party.actors.size == 0
  279.       return false
  280.     end
  281.     # 同伴中无人 HP 在 0 以上
  282.     for actor in @actors
  283.       if actor.hp > 0
  284.         return false
  285.       end
  286.     end
  287.     # 全灭
  288.     return true
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 检查连续伤害 (地图用)
  292.   #--------------------------------------------------------------------------
  293.   def check_map_slip_damage
  294.     for actor in @actors
  295.       if actor.hp > 0 and actor.slip_damage? and actor.state?(62)
  296.         actor.hp -= [actor.maxhp / 100, 1].max
  297.         if actor.hp == 0
  298.           $game_system.se_play($data_system.actor_collapse_se)
  299.         end
  300.         $game_screen.start_flash(Color.new(255,0,0,128), 4)
  301.         $game_temp.gameover = $game_party.all_dead?
  302.       end
  303.     end
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● 对像角色的随机确定
  307.   #     hp0 : 限制为 HP 0 的角色
  308.   #--------------------------------------------------------------------------
  309.   def random_target_actor(hp0 = false)
  310.     # 初始化轮流
  311.     roulette = []
  312.     # 循环
  313.     for actor in @actors
  314.       # 符合条件的场合
  315.       if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
  316.         # 获取角色职业的位置 [位置]
  317.         #position = $data_classes[actor.class_id].position
  318.         #$data_classes[$game_actors[角色编号].class_id].position
  319.         #position = $game_party.actors[actor.id].id     
  320.         position = actor.index  
  321.         # 前卫的话 n = 4、中卫的话 n = 3、后卫的话 n = 2
  322.         case position
  323.         when 0
  324.           n = 10
  325.         when 1
  326.           n = 8
  327.         when 2
  328.           n = 6
  329.         when 3
  330.           n = 4
  331.         when 4
  332.           n = 2
  333.         end  
  334.         if actor.state?(38)
  335.           n += 70
  336.         end  
  337.         if actor.element_rate(7) == 50
  338.           n += 30
  339.         end
  340.         #n = 40 - position
  341.         # 添加角色的轮流 n 回
  342.         n.times do
  343.           roulette.push(actor)
  344.         end
  345.       end
  346.     end
  347.     # 轮流大小为 0 的情况
  348.     if roulette.size == 0
  349.       return nil
  350.     end
  351.     # 转轮盘赌,决定角色
  352.     return roulette[rand(roulette.size)]
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 对像角色的随机确定 (HP 0)
  356.   #--------------------------------------------------------------------------
  357.   def random_target_actor_hp0
  358.     return random_target_actor(true)
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● 对像角色的顺序确定
  362.   #     actor_index : 角色索引
  363.   #--------------------------------------------------------------------------
  364.   def smooth_target_actor(actor_index)
  365.     # 取得对像
  366.     actor = @actors[actor_index]
  367.     # 对像存在的情况下
  368.     if actor != nil and actor.exist?
  369.       return actor
  370.     end
  371.     # 循环
  372.     for actor in @actors
  373.       # 对像存在的情况下
  374.       if actor.exist?
  375.         return actor
  376.       end
  377.     end
  378.   end
  379. end


还会出现其他BUG。总的来说就是挂掉后会出现bug    Data.rar (1.68 MB, 下载次数: 89)



Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

10
发表于 2018-1-31 19:00:25 | 只看该作者
你在334行附近添加一个else呗:
  1. when 4
  2.   n = 2
  3. else
  4.   n = 0
  5. end
复制代码
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2331
在线时间
654 小时
注册时间
2017-10-13
帖子
53
9
 楼主| 发表于 2018-1-31 17:52:17 | 只看该作者
芯☆淡茹水 发表于 2018-1-30 13:06
或者把那个函数改成这样,无论多少人,这里都没问题。

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2331
在线时间
654 小时
注册时间
2017-10-13
帖子
53
8
 楼主| 发表于 2018-1-31 15:08:38 | 只看该作者
芯☆淡茹水 发表于 2018-1-30 13:06
或者把那个函数改成这样,无论多少人,这里都没问题。

这样的话还是有问题。。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33414
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

7
发表于 2018-1-30 13:06:43 | 只看该作者
huangke 发表于 2018-1-30 12:38
上次用大神给的脚本7人在队伍。5人上阵的。。现在我修改了下282行
    for actor in @actors[0..4]
偶尔 ...

或者把那个函数改成这样,无论多少人,这里都没问题。

  1.   #--------------------------------------------------------------------------
  2.   def random_target_actor(hp0 = false)
  3.     # 初始化轮流
  4.     roulette = []
  5.     @actors.each do |actor|
  6.       if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
  7.         n = [10 - actor.index * 2, 2].max
  8.         n += actor.state?(38) ? 70 : 0;
  9.         n += actor.element_rate(7) == 50 ? 30 : 0
  10.         n.times{roulette.push(actor)}
  11.       end
  12.     end
  13.     return roulette[rand(roulette.size)]
  14.   end
复制代码
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2331
在线时间
654 小时
注册时间
2017-10-13
帖子
53
6
 楼主| 发表于 2018-1-30 12:38:57 | 只看该作者
芯☆淡茹水 发表于 2018-1-29 20:37
那就很可能说明你的队伍角色 大于5个 了

上次用大神给的脚本7人在队伍。5人上阵的。。现在我修改了下282行
    for actor in @actors[0..4]
偶尔战斗结束报错。。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2709
在线时间
166 小时
注册时间
2018-1-19
帖子
89
5
发表于 2018-1-29 20:51:00 | 只看该作者
  1. # 前卫的话 n = 4、中卫的话 n = 3、后卫的话 n = 2
  2.         case position
  3.         when 0
  4.           n = 10
  5.         when 1
  6.           n = 8
  7.         when 2
  8.           n = 6
  9.         when 3
  10.           n = 4
  11.         when 4
  12.           n = 2
  13.         end  
复制代码

这一段可能需要修改下, position可能不止这几个值,导致n没有获得值才出现乃这种错误
求勾搭QwQ(bu)会使用脚本和事件QwQ虽然脚本还只是初级程度,还在学习ingQwQ
平常很闲,特别想回答问题和解决问题。再求勾搭呜呜呜QWQ
QQ:841155947
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33414
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

4
发表于 2018-1-29 20:37:35 | 只看该作者
那就很可能说明你的队伍角色 大于5个 了
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2331
在线时间
654 小时
注册时间
2017-10-13
帖子
53
3
 楼主| 发表于 2018-1-29 19:15:35 | 只看该作者
梦幻想 发表于 2018-1-29 18:37
n为nil的时候不能调用times方法,试试加个条件

if (n != nil)

这样会造成一直轮回 结束不了战斗吧
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1387
在线时间
184 小时
注册时间
2007-2-28
帖子
145
2
发表于 2018-1-29 18:37:29 | 只看该作者
本帖最后由 梦幻想 于 2018-1-29 18:40 编辑

n为nil的时候不能调用times方法,试试加个条件
RUBY 代码复制
  1. if (n != nil)
  2.         n.times do
  3.         roulette.push(actor)
  4.         end
  5. end
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-11 09:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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