Project1

标题: 请问脚本错误system stack error stacklevel too deep怎么修改正常? [打印本页]

作者: URUUR    时间: 2018-7-9 21:54
标题: 请问脚本错误system stack error stacklevel too deep怎么修改正常?
这是根据距离自动打开相应独立开关的脚本,应该是和其他脚本冲突了,这种情况要改成怎样才能运行?

  1. =begin
  2.       RGSS3
  3.       
  4.       ★ 距離によるセルフスイッチ自動切り替え ★
  5.       
  6.       イベントのセルフスイッチをプレイヤーとの距離によって
  7.       自動的に切り替えます。
  8.       
  9.       ● 使い方 ●========================================================
  10.       イベントの名前に以下の記述を行ってください。
  11.          SDS:<A,B,C,D>
  12.       A,B,C,Dにはそれぞれのセルフスイッチが切り替わるプレイヤーとの距離を
  13.       数値で設定します。
  14.       距離によるセルフスイッチ切り替えを行わないスイッチには
  15.       0 を設定してください。
  16.       --------------------------------------------------------------------
  17.       各セルフスイッチの距離設定に2種類のオプションを付加することが可能です。
  18.       必要な場合は距離を示す数値の直後に以下のキーワードを付加してください。
  19.       -r => スイッチの切り替わり判定が逆になります。
  20.             設定距離より離れたらON, 近づいたらOFF。
  21.       -o => プレイヤーとの距離によりONには自動で切り替わりますが、
  22.          OFFには自動で切り替わらなくなります。
  23.       --------------------------------------------------------------------
  24.       例) SDS:<0,3-o,6,8-o-r>
  25.       セルフスイッチAに対しては何も行わない。
  26.       
  27.       プレイヤーとの距離が3マス以内の場合、セルフスイッチBをON。
  28.       プレイヤーとの距離が3マスより大きい場合は何もしない。
  29.       
  30.       プレイヤーとの距離が6マス以内の場合、セルフスイッチCをON。
  31.       プレイヤーとの距離が6マスより大きい場合、セルフスイッチCをOFF。
  32.       
  33.       プレイヤーとの距離が8マス以内の場合は何もしない。
  34.       プレイヤーとの距離が8マスより大きい場合、セルフスイッチDをON。
  35.       ====================================================================
  36.       
  37.       ver1.00
  38.       
  39.       Last Update : 2012/06/16
  40.       06/16 : 新規
  41.       
  42.       ろかん   http://kaisou-ryouiki.sakura.ne.jp/
  43. =end

  44. $rsi ||= {}
  45. $rsi["距離によるセルフスイッチ自動切り替え"] = true

  46. class RPG::Event
  47.   def get_distance_switches_conf
  48.     match = @name.scan(/SDS:<(.*)>/)
  49.     result = []
  50.     if match.first
  51.       match.first.first.split(",").each{|split_data|
  52.         result << get_distance_switch_data(split_data)
  53.       }
  54.     end
  55.     result
  56.   end
  57.   def get_distance_switch_data(split_data)
  58.     option = 0
  59.     if split_data.include?('-r')
  60.       option += 1
  61.       split_data.delete!('-r')
  62.     end
  63.     if split_data.include?('-o')
  64.       option += 2
  65.       split_data.delete!('-o')
  66.     end
  67.     [split_data.to_i, option]
  68.   end
  69. end
  70.   
  71. class Game_Event < Game_Character
  72.   SELF_KEY = ['A','B','C','D']
  73.   #--------------------------------------------------------------------------
  74.   # ● リフレッシュ
  75.   #--------------------------------------------------------------------------
  76.   alias _refresh_distance_switch refresh
  77.   def refresh
  78.     set_distance_switch unless @switch_distances
  79.     _refresh_distance_switch
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 距離によるスイッチ切り替え情報の初期化
  83.   #--------------------------------------------------------------------------
  84.   def set_distance_switch
  85.     @switch_distances = @event.get_distance_switches_conf
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● プレイヤーからの距離を取得
  89.   #--------------------------------------------------------------------------
  90.   def distance_from_player
  91.     distance_x_from($game_player.x).abs + distance_y_from($game_player.y).abs
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● フレーム更新
  95.   #--------------------------------------------------------------------------
  96.   alias _update_distance_switch update
  97.   def update
  98.     update_switch unless @switch_distances.empty?
  99.     _update_distance_switch
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 距離によるスイッチ切り替え更新
  103.   #--------------------------------------------------------------------------
  104.   def update_switch
  105.     distance = distance_from_player
  106.     @switch_distances.each_with_index{|conf_data, index|
  107.       unless conf_data[0].zero?
  108.         case conf_data[1]
  109.         when 0
  110.           result = distance <= conf_data[0]
  111.         when 1
  112.           result = distance > conf_data[0]
  113.         when 2
  114.           result = distance <= conf_data[0]
  115.           next unless result
  116.         when 3
  117.           result = distance > conf_data[0]
  118.           next unless result
  119.         end
  120.         $game_self_switches[[@map_id, @event.id, SELF_KEY[index]]] = result
  121.       end
  122.     }
  123.   end
  124. end


复制代码

作者: URUUR    时间: 2018-7-9 21:56
或者有没有类似功能的不用前置的脚本
作者: fux2    时间: 2018-7-10 18:58
具体是第几行没有提示吗
作者: URUUR    时间: 2018-7-10 21:44
fux2 发表于 2018-7-10 18:58
具体是第几行没有提示吗

没有,载入游戏或者新游戏就弹框,只有 stack level too deep
作者: URUUR    时间: 2018-7-15 15:08
本帖最后由 URUUR 于 2018-7-15 15:14 编辑

确实是重复了,没仔细查找的结果




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