Project1

标题: 如何定义每个事件都有的新变量 [打印本页]

作者: 多漏A梦    时间: 2013-8-13 12:19
标题: 如何定义每个事件都有的新变量
最近非常忙啊,每天解决ARPG脚本的问题,我只是个脚本新手而已~~~
好在用尽全力后我终于弄好了敌人攻击角色的脚本方案,已经不需要变量了……(我没像XAS那样用脚本来定义敌人啥的)
但是我想做独立的敌人HP,看样子很难……所以想定义一个全局变量,,不管怎样需要每个地图的每个事件都有,像独立开关那样的变量,而且能在任何地方调用和加减……
话说我为了能使做好后的敌人hp能成为敌人死亡事件页的条件设了这样:
        # 确认变量条件
        if c.variable_valid
          if c.variable_id == 4
            if $hp(总之就是敌人的HP变量现在还没设好) < c.variable_value
              next
            end
          else
            if $game_variables[c.variable_id] < c.variable_value
              next
            end
          end
        end
也就是说如果事件页的变量条件是4号变量,则把4号变量换成$hp这个变量。
但总是出现:

这样的错误……不知是为何。

求大神帮我解决啊!
作者: wwwcctvty    时间: 2013-8-13 13:29
话说100行是哪行?{:2_263:},从错误上和你发出的一段脚本来看,应该是c.variable_value为nil    如果楼主想得到解决,个人建议还是要放上工程或脚本
作者: 多漏A梦    时间: 2013-8-13 13:33
wwwcctvty 发表于 2013-8-13 13:29
话说100行是哪行?,从错误上和你发出的一段脚本来看,应该是c.variable_value为nil    如果楼主 ...

脚本:
  1. #==============================================================================
  2. # ■ Game_Event
  3. #------------------------------------------------------------------------------
  4. #  处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能
  5. # 在 Game_Map 类的内部使用。
  6. #==============================================================================

  7. class Game_Event < Game_Character
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :trigger                  # 目标
  12.   attr_reader   :list                     # 执行内容
  13.   attr_accessor :hp                       # 创建敌人HP
  14.   attr_reader   :starting                 # 启动中标志
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对像
  17.   #     map_id : 地图 ID
  18.   #     event  : 事件 (RPG::Event)
  19.   #--------------------------------------------------------------------------
  20.   def initialize(map_id, event)
  21.     super()
  22.     @map_id = map_id
  23.     @event = event
  24.     @id = @event.id
  25.     @erased = false
  26.     @starting = false
  27.     @through = true
  28.     @hp = hp
  29.     # 初期位置的移动
  30.     moveto(@event.x, @event.y)
  31.     refresh
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 清除移动中标志
  35.   #--------------------------------------------------------------------------
  36.   def clear_starting
  37.     @starting = false
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 越过目标判定 (不能将相同位置作为启动条件)
  41.   #--------------------------------------------------------------------------
  42.   def over_trigger?
  43.     # 图形是角色、没有开启穿透的情况下
  44.     if @character_name != "" and not @through
  45.       # 启动判定是正面
  46.       return false
  47.     end
  48.     # 地图上的这个位置不能通行的情况下
  49.     unless $game_map.passable?(@x, @y, 0)
  50.       # 启动判定是正面
  51.       return false
  52.     end
  53.     # 启动判定在同位置
  54.     return true
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 启动事件
  58.   #--------------------------------------------------------------------------
  59.   def start
  60.     # 执行内容不为空的情况下
  61.     if @list.size > 1
  62.       @starting = true
  63.     end
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 暂时消失
  67.   #--------------------------------------------------------------------------
  68.   def erase
  69.     @erased = true
  70.     refresh
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 刷新
  74.   #--------------------------------------------------------------------------
  75.   def refresh
  76.     # 初始化本地变量 new_page
  77.     new_page = nil
  78.     # 无法暂时消失的情况下
  79.     unless @erased
  80.       # 从编号大的事件页按顺序调查
  81.       for page in @event.pages.reverse
  82.         # 可以参考事件条件 c
  83.         c = page.condition
  84.         # 确认开关条件 1
  85.         if c.switch1_valid
  86.           if $game_switches[c.switch1_id] == false
  87.             next
  88.           end
  89.         end
  90.         # 确认开关条件 2
  91.         if c.switch2_valid
  92.           if $game_switches[c.switch2_id] == false
  93.             next
  94.           end
  95.         end
  96.         # 确认变量条件
  97.         if c.variable_valid
  98.           if c.variable_id == 4
  99.             if @hp < c.variable_value
  100.               next
  101.             end
  102.           else
  103.             if $game_variables[c.variable_id] < c.variable_value
  104.               next
  105.             end
  106.           end
  107.         end
  108.         # 确认独立开关条件
  109.         if c.self_switch_valid
  110.           key = [@map_id, @event.id, c.self_switch_ch]
  111.           if $game_self_switches[key] != true
  112.             next
  113.           end
  114.         end
  115.         # 设置本地变量 new_page
  116.         new_page = page
  117.         # 跳出循环
  118.         break
  119.       end
  120.     end
  121.     # 与上次同一事件页的情况下
  122.     if new_page == @page
  123.       # 过程结束
  124.       return
  125.     end
  126.     # @page 设置为现在的事件页
  127.     @page = new_page
  128.     # 清除启动中标志
  129.     clear_starting
  130.     # 没有满足条件的页面的时候
  131.     if @page == nil
  132.       # 设置各实例变量
  133.       @tile_id = 0
  134.       @character_name = ""
  135.       @character_hue = 0
  136.       @move_type = 0
  137.       @through = true
  138.       @trigger = nil
  139.       @list = nil
  140.       @interpreter = nil
  141.       # 过程结束
  142.       return
  143.     end
  144.     # 设置各实例变量
  145.     @tile_id = @page.graphic.tile_id
  146.     @character_name = @page.graphic.character_name
  147.     @character_hue = @page.graphic.character_hue
  148.     if @original_direction != @page.graphic.direction
  149.       @direction = @page.graphic.direction
  150.       @original_direction = @direction
  151.       @prelock_direction = 0
  152.     end
  153.     if @original_pattern != @page.graphic.pattern
  154.       @pattern = @page.graphic.pattern
  155.       @original_pattern = @pattern
  156.     end
  157.     [url=home.php?mod=space&uid=316553]@opacity[/url] = @page.graphic.opacity
  158.     @blend_type = @page.graphic.blend_type
  159.     @move_type = @page.move_type
  160.     @move_speed = @page.move_speed
  161.     @move_frequency = @page.move_frequency
  162.     @move_route = @page.move_route
  163.     @move_route_index = 0
  164.     @move_route_forcing = false
  165.     @walk_anime = @page.walk_anime
  166.     @step_anime = @page.step_anime
  167.     @direction_fix = @page.direction_fix
  168.     @through = @page.through
  169.     @always_on_top = @page.always_on_top
  170.     @trigger = @page.trigger
  171.     @list = @page.list
  172.     @interpreter = nil
  173.     # 目标是 [并行处理] 的情况下
  174.     if @trigger == 4
  175.       # 生成并行处理用解释器
  176.       @interpreter = Interpreter.new
  177.     end
  178.     # 自动事件启动判定
  179.     check_event_trigger_auto
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 接触事件启动判定
  183.   #--------------------------------------------------------------------------
  184.   def check_event_trigger_touch(x, y)
  185.     # 事件执行中的情况下
  186.     if $game_system.map_interpreter.running?
  187.       return
  188.     end
  189.     # 目标为 [与事件接触] 以及和主角坐标一致的情况下
  190.     if @trigger == 2 and x == $game_player.x and y == $game_player.y
  191.       # 除跳跃中以外的情况、启动判定就是正面的事件
  192.       if not jumping? and not over_trigger?
  193.         start
  194.       end
  195.     end
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● 自动事件启动判定
  199.   #--------------------------------------------------------------------------
  200.   def check_event_trigger_auto
  201.     # 目标为 [与事件接触] 以及和主角坐标一致的情况下
  202.     if @trigger == 2 and @x == $game_player.x and @y == $game_player.y
  203.       # 除跳跃中以外的情况、启动判定就是同位置的事件
  204.       if not jumping? and over_trigger?
  205.         start
  206.       end
  207.     end
  208.     # 目标是 [自动执行] 的情况下
  209.     if @trigger == 3
  210.       start
  211.     end
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 更新画面
  215.   #--------------------------------------------------------------------------
  216.   def update
  217.     super
  218.     # 自动启动事件判定
  219.     check_event_trigger_auto
  220.     # 并行处理有效的情况下
  221.     if @interpreter != nil
  222.       # 不在执行中的场合的情况下
  223.       unless @interpreter.running?
  224.         # 设置事件
  225.         @interpreter.setup(@list, @event.id)
  226.       end
  227.       # 更新解释器
  228.       @interpreter.update
  229.     end
  230.   end
  231. end
复制代码

作者: end55rpg    时间: 2013-8-13 19:48
弄个变量没这么麻烦吧
@aa = 兰州烧饼
@sb = 29128762716782
就好了
如果是运算就变量|| 或&&这样就排除的非true了




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