Project1

标题: 【解谜游戏必备】简易使用物品事件。 [打印本页]

作者: fux2    时间: 2011-7-4 09:06
标题: 【解谜游戏必备】简易使用物品事件。
本帖最后由 fux2 于 2012-4-6 12:13 编辑

以往我们制作特定物品在特定地点使用的时候,都会很麻烦,一般都是靠公共事件判断坐标或者在目标附近进行开关操作
例如使用物品“钥匙”,打开面前的门,如何设置最方便?
如果下面的图看不懂请翻到下面下载范例.



设置如图
使用详细
当任何一件道具命中率为0的时候,该道具就会被归为任务类道具.
事件设置方法,任何一个事件页行走图为空并且勾选了允许穿透选项,该事件页则
无论如何都不会被执行,被归类为任务事件.
使用方法,在任务事件页第一行必须是条件分歧,物品持有时(需要使用的道具物品)
详细见本范例.
当物品不满足使用条件,并且公共事件不为空的时候,执行公共事件.
使用道具时需要面对或者站在事件上.

以下范例
使用物品.rar (189.38 KB, 下载次数: 838)

以下代码
  1. =begin
  2. 脚本来自rpg.blue
  3. 当任何一件道具命中率为0的时候,该道具就会被归为任务类道具.
  4. 事件设置方法,任何一个事件页行走图为空并且勾选了允许穿透选项,该事件页则
  5. 无论如何都不会被执行,被归类为任务事件.
  6. 使用方法,在任务事件页第一行必须是条件分歧,物品持有时(需要使用的道具物品)
  7. 详细见本范例.
  8. 当物品不满足使用条件,并且公共事件不为空的时候,执行公共事件.
  9. 使用道具时需要面对或者站在事件上.
  10. =end

  11. module Fux2
  12.   D = {2=>[0,1],4=>[-1,0],6=>[1,0],8=>[0,-1]}
  13. end

  14. class Scene_Item
  15.   
  16.   include Fux2
  17.   alias uu update_item
  18.   def update_item
  19.     if Input.trigger?(Input::C)
  20.       xa = Fux2::D[$game_player.direction][0]
  21.       ya = Fux2::D[$game_player.direction][1]
  22.       @item = @item_window.item
  23.       if @item && @item.hit == 0
  24.         $game_map.events.values.each do |event|
  25.           if $game_player.x == event.x && $game_player.y == event.y
  26.             event.event.pages.each do |page|
  27.               if page.graphic.character_name == "" && page.through == true && page.list[0].code == 111 && page.list[0].parameters[1] == @item.id
  28.                 $game_system.map_interpreter.setup(page.list,event.id)
  29.                 $scene = Scene_Map.new
  30.                 return
  31.               end
  32.             end
  33.           elsif $game_player.x+xa == event.x && $game_player.y+ya == event.y
  34.             event.event.pages.each do |page|
  35.               if page.graphic.character_name == "" && page.through == true && page.list[0].code == 111 && page.list[0].parameters[1] == @item.id
  36.                 $game_system.map_interpreter.setup(page.list,event.id)
  37.                 $scene = Scene_Map.new
  38.                 return
  39.               end
  40.             end
  41.           end
  42.         end
  43.         if @item.common_event_id > 0
  44.           $game_temp.common_event_id = @item.common_event_id
  45.           $scene = Scene_Map.new
  46.           return
  47.         end
  48.         return
  49.       end
  50.     end
  51.     uu
  52.   end
  53.   
  54. end

  55. class Game_System

  56.   attr_accessor:map_interpreter
  57.   
  58. end

  59. class Game_Event < Game_Character
  60.   
  61.   def parameters
  62.     return @parameters
  63.   end
  64.   def event
  65.     return @event
  66.   end
  67.   def code
  68.     return @code
  69.   end
  70.   def trigger
  71.     return @trigger
  72.   end
  73.   
  74. end

  75. class Game_Event < Game_Character
  76.   
  77.   def refresh
  78.     new_page = nil
  79.     unless @erased
  80.       for page in @event.pages.reverse
  81.         c = page.condition
  82.         if page.graphic.character_name == "" && page.through == true
  83.           next
  84.         end
  85.         if c.switch1_valid
  86.           if $game_switches[c.switch1_id] == false
  87.             next
  88.           end
  89.         end
  90.         if c.switch2_valid
  91.           if $game_switches[c.switch2_id] == false
  92.             next
  93.           end
  94.         end
  95.         if c.variable_valid
  96.           if $game_variables[c.variable_id] < c.variable_value
  97.             next
  98.           end
  99.         end
  100.         if c.self_switch_valid
  101.           key = [@map_id, @event.id, c.self_switch_ch]
  102.           if $game_self_switches[key] != true
  103.             next
  104.           end
  105.         end
  106.         new_page = page
  107.         break
  108.       end
  109.     end
  110.     if new_page == @page
  111.       return
  112.     end
  113.     @page = new_page
  114.     clear_starting
  115.     if @page == nil
  116.       @tile_id = 0
  117.       @character_name = ""
  118.       @character_hue = 0
  119.       @move_type = 0
  120.       @through = true
  121.       @trigger = nil
  122.       @list = nil
  123.       @interpreter = nil
  124.       return
  125.     end
  126.     @tile_id = @page.graphic.tile_id
  127.     @character_name = @page.graphic.character_name
  128.     @character_hue = @page.graphic.character_hue
  129.     if @original_direction != @page.graphic.direction
  130.       @direction = @page.graphic.direction
  131.       @original_direction = @direction
  132.       @prelock_direction = 0
  133.     end
  134.     if @original_pattern != @page.graphic.pattern
  135.       @pattern = @page.graphic.pattern
  136.       @original_pattern = @pattern
  137.     end
  138.     @opacity = @page.graphic.opacity
  139.     @blend_type = @page.graphic.blend_type
  140.     @move_type = @page.move_type
  141.     @move_speed = @page.move_speed
  142.     @move_frequency = @page.move_frequency
  143.     @move_route = @page.move_route
  144.     @move_route_index = 0
  145.     @move_route_forcing = false
  146.     @walk_anime = @page.walk_anime
  147.     @step_anime = @page.step_anime
  148.     @direction_fix = @page.direction_fix
  149.     @through = @page.through
  150.     @always_on_top = @page.always_on_top
  151.     @trigger = @page.trigger
  152.     @list = @page.list
  153.     @interpreter = nil
  154.     if @trigger == 4
  155.       @interpreter = Interpreter.new
  156.     end
  157.     check_event_trigger_auto
  158.   end
  159.   
  160. end
  161. #rpg.blue
复制代码

作者: 烁灵    时间: 2011-7-4 09:46
沙发~
解密设置方便多了呢~
任务事件的能换成用 首行注释 来设置么,万一需要穿透什么的呢(PIA...)
作者: 后知后觉    时间: 2011-7-4 09:58
烁灵 发表于 2011-7-4 09:46
沙发~
解密设置方便多了呢~
任务事件的能换成用 首行注释 来设置么,万一需要穿透什么的呢(PIA...) ...

我就在想 某道具在某地方使用后干某事 和 解密游戏必备 有什么关系.= =
原来是这样= =.
作者: 絀神入化    时间: 2011-7-4 10:45
一开始以为是标题党,斑竹怎么会过这个= =后来才发现不是解密工程,而是解密游戏= =
作者: 夕阳武士    时间: 2011-7-4 12:29
一开始截图愣没明白0.0不过看范例这个想法很不错
作者: 青品黄黑    时间: 2012-11-19 21:03
喵...表示代码复制进去结果无效呢OUQ
作者: yingyu25    时间: 2013-7-3 15:18
为什么设置了可以得到物品,等去用条件分歧之后,设置的可以增加的物品,为什么没有得到呢?
作者: fux2‎‎‎‎    时间: 2013-7-3 15:23
yingyu25 发表于 2013-7-3 15:18
为什么设置了可以得到物品,等去用条件分歧之后,设置的可以增加的物品,为什么没有得到呢? ...

能详细说一下事件如何设置的吗?最好仔细看看范例里面的示范哦。
作者: yingyu25    时间: 2013-7-3 15:53
柜子:移动时动画,决定建,增加蓝色的书,打开独立开关A.
书架:移动时动画,允许穿透,决定建,条件分歧为持有蓝色的书时,减去蓝色的书,增加回复剂.独立开关A打开.
公共事件,特定条件下使用,(下面什么也没有写).
然后设置,物品,蓝色的书为使用:平时,公共事件为:特定条件下使用.需要得到的回复剂也是这样设置.
但是得到书之后,再去书架拿回复剂时,书没了,也没有得到回复剂.
作者: yingyu25    时间: 2013-7-3 15:53
注释一下:
那些柜子,和书架,都是场景内家用家具,从一开始就没有图片的.
作者: 新奥尔良烤炽    时间: 2013-7-15 22:44
求教……我设置的是使用钥匙就能开门,但是设置好后点物品钥匙也没反应,而且只要带着钥匙对门按下空格就能开门,这样的情况该怎么办?
作者: 新奥尔良烤炽    时间: 2013-7-16 14:55
新奥尔良烤炽 发表于 2013-7-15 22:44
求教……我设置的是使用钥匙就能开门,但是设置好后点物品钥匙也没反应,而且只要带着钥匙对门按下空格就能 ...

原来如此,多谢!
作者: gqhondafit    时间: 2013-7-22 00:27
很方便啊,顺便问一句,事件一定要跟脚本一起用吗?
作者: 1243852    时间: 2015-5-28 17:02
不知道作者还在不,这脚本非常好用,我想用你的这个脚本实现  农田种地功能(选择苹果种子就判定苹果种地,选择草莓种子就判定草莓种地。) 但现在的关键是,如何避免玩家重复使用??我看就连你的范例上都可以被重复使用的。比如,玩家有三个苹果种子,然后种下一个,还剩两个,苹果本来在长了,结果他又在同一个地方种下一个,,,,就又判定一次苹果重新生长。。这不是就成了游戏BUG了吗?
作者: fux2    时间: 2015-6-25 21:21
1243852 发表于 2015-5-28 17:02
不知道作者还在不,这脚本非常好用,我想用你的这个脚本实现  农田种地功能(选择苹果种子就判定苹果种地, ...

范例里有通过开关来区别不同情况,铁门就是吧





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