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

Project1

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

[已经解决] 纯事件明雷,求脚本优化

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
25 小时
注册时间
2013-3-20
帖子
8
跳转到指定楼层
发表于 2013-3-28 16:22:55 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x


纯事件的明雷系统,根据敌人与主角的坐标判断移动方式

缺点是一个敌人就会要动用到六个变量,如果敌人增多会大大增加工作量

求脚本达人指导一下如何用脚本实现这种判定

另外有什么其他方面的缺点也欢迎指出

ht去掉tp://pan.baidu.com/share/link?shareid=369263&uk=2804685025
(为啥我发不了链接啊)

Lv1.梦旅人

梦石
0
星屑
50
在线时间
120 小时
注册时间
2011-5-30
帖子
44
7
发表于 2013-6-15 12:37:27 | 只看该作者
沙漠点灰 发表于 2013-3-28 19:18
好⑨没来了....前来帮助将以上脚本插到Main前,或者替换掉原来的同名(Game_Event)脚本.
...

请问为啥米我用了以后打完怪了出了战斗画面又立刻遇怪--同一个怪。于是就一直战斗中....  

点评

请通过短消息联系对方,或者重新开贴提问,不要挖坟。  发表于 2013-6-15 15:06
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
25 小时
注册时间
2013-3-20
帖子
8
6
 楼主| 发表于 2013-4-17 01:09:36 | 只看该作者
沙漠点灰 发表于 2013-4-15 23:28
事件名例子

敌人[距离:5,速度:5,频率:6,尸体:A]

测试可用,多谢啦~~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
5
发表于 2013-4-15 23:28:30 | 只看该作者
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_Event
  4. #------------------------------------------------------------------------------
  5. #  处理事件的类。拥有条件判断、事件页的切换、并行处理、执行事件等功能。
  6. #   在 Game_Map 类的内部使用。
  7. #==============================================================================

  8. class Game_Event < Game_Character
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_reader   :trigger                  # 启动方式
  13.   attr_reader   :list                     # 执行内容
  14.   attr_reader   :starting                 # 启动中的标志
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对象
  17.   #     event : RPG::Event
  18.   #--------------------------------------------------------------------------
  19.   def initialize(map_id, event)
  20.     super()
  21.     @map_id = map_id
  22.     @event = event
  23.     @id = @event.id
  24.     moveto(@event.x, @event.y)
  25.     refresh
  26.     @manster = false
  27.     if self.name[/.*\[距离:(\d),速度:(\d+),频率:(\d+),尸体:(.+)\].*/]
  28.       @manster = true
  29.       @body = $4
  30.       @manster_distance = $1.to_i
  31.       @manster_speed = $2.to_i
  32.       @manster_frequency = $3.to_i
  33.       @manster_old_frequency = @move_frequency
  34.       @manster_old_speed = self.move_speed
  35.       @manster_old_type = @move_type
  36.     end
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 事件名称
  40.   #--------------------------------------------------------------------------
  41.   def name
  42.     @event.name
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 初始化公有成员变量
  46.   #--------------------------------------------------------------------------
  47.   def init_public_members
  48.     super
  49.     @trigger = 0
  50.     @list = nil
  51.     @starting = false
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 初始化私有成员变量
  55.   #--------------------------------------------------------------------------
  56.   def init_private_members
  57.     super
  58.     @move_type = 0                        # 移动类型
  59.     @erased = false                       # 暂时消除的标志
  60.     @page = nil                           # 事件页
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 判定是否与人物碰撞
  64.   #--------------------------------------------------------------------------
  65.   def collide_with_characters?(x, y)
  66.     super || collide_with_player_characters?(x, y)
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 判定是否与玩家碰撞(包括跟随角色)
  70.   #--------------------------------------------------------------------------
  71.   def collide_with_player_characters?(x, y)
  72.     normal_priority? && $game_player.collide?(x, y)
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 锁定(立即停止执行中的事件)
  76.   #--------------------------------------------------------------------------
  77.   def lock
  78.     unless @locked
  79.       @prelock_direction = @direction
  80.       turn_toward_player
  81.       @locked = true
  82.     end
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 解锁
  86.   #--------------------------------------------------------------------------
  87.   def unlock
  88.     if @locked
  89.       @locked = false
  90.       set_direction(@prelock_direction)
  91.     end
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 停止时的更新
  95.   #--------------------------------------------------------------------------
  96.   def update_stop
  97.     super
  98.     update_self_movement unless @move_route_forcing
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 自动移动的更新
  102.   #--------------------------------------------------------------------------
  103.   def update_self_movement
  104.     if near_the_screen? && @stop_count > stop_count_threshold
  105.       case @move_type
  106.       when 1;  move_type_random
  107.       when 2;  move_type_toward_player
  108.       when 3;  move_type_custom
  109.       end
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 判定是否在画面的可视区域內
  114.   #     dx : 从画面中央开始计算,左右有多少个图块。
  115.   #     dy : 从画面中央开始计算,上下有多少个图块。
  116.   #--------------------------------------------------------------------------
  117.   def near_the_screen?(dx = 12, dy = 8)
  118.     ax = $game_map.adjust_x(@real_x) - Graphics.width / 2 / 32
  119.     ay = $game_map.adjust_y(@real_y) - Graphics.height / 2 / 32
  120.     ax >= -dx && ax <= dx && ay >= -dy && ay <= dy
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 计算自动移动时停止计数最低值
  124.   #--------------------------------------------------------------------------
  125.   def stop_count_threshold
  126.     30 * (5 - @move_frequency)
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 移动类型 : 随机
  130.   #--------------------------------------------------------------------------
  131.   def move_type_random
  132.     case rand(6)
  133.     when 0..1;  move_random
  134.     when 2..4;  move_forward
  135.     when 5;     @stop_count = 0
  136.     end
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 移动类型 : 接近
  140.   #--------------------------------------------------------------------------
  141.   def move_type_toward_player
  142.     if near_the_player?
  143.       case rand(6)
  144.       when 0..3;  move_toward_player
  145.       when 4;     move_random
  146.       when 5;     move_forward
  147.       end
  148.     else
  149.       move_random
  150.     end
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 判定事件是否临近玩家
  154.   #--------------------------------------------------------------------------
  155.   def near_the_player?
  156.     sx = distance_x_from($game_player.x).abs
  157.     sy = distance_y_from($game_player.y).abs
  158.     sx + sy < 20
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 移动类型 : 自定义
  162.   #--------------------------------------------------------------------------
  163.   def move_type_custom
  164.     update_routine_move
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 清除启动中的标志
  168.   #--------------------------------------------------------------------------
  169.   def clear_starting_flag
  170.     @starting = false
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 判定执行内容是否为空
  174.   #--------------------------------------------------------------------------
  175.   def empty?
  176.     !@list || @list.size <= 1
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 判定指定的启动方式是否能启动事件
  180.   #     triggers : 启动方式的数组
  181.   #--------------------------------------------------------------------------
  182.   def trigger_in?(triggers)
  183.     triggers.include?(@trigger)
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 事件启动
  187.   #--------------------------------------------------------------------------
  188.   def start
  189.     return if empty?
  190.     @starting = true
  191.     lock if trigger_in?([0,1,2])
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 暂时消除
  195.   #--------------------------------------------------------------------------
  196.   def erase
  197.     @erased = true
  198.     refresh
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 刷新
  202.   #--------------------------------------------------------------------------
  203.   def refresh
  204.     new_page = @erased ? nil : find_proper_page
  205.     setup_page(new_page) if !new_page || new_page != @page
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 寻找条件符合的事件页
  209.   #--------------------------------------------------------------------------
  210.   def find_proper_page
  211.     @event.pages.reverse.find {|page| conditions_met?(page) }
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 判定事件页的条件是否符合
  215.   #--------------------------------------------------------------------------
  216.   def conditions_met?(page)
  217.     c = page.condition
  218.     if c.switch1_valid
  219.       return false unless $game_switches[c.switch1_id]
  220.     end
  221.     if c.switch2_valid
  222.       return false unless $game_switches[c.switch2_id]
  223.     end
  224.     if c.variable_valid
  225.       return false if $game_variables[c.variable_id] < c.variable_value
  226.     end
  227.     if c.self_switch_valid
  228.       key = [@map_id, @event.id, c.self_switch_ch]
  229.       return false if $game_self_switches[key] != true
  230.     end
  231.     if c.item_valid
  232.       item = $data_items[c.item_id]
  233.       return false unless $game_party.has_item?(item)
  234.     end
  235.     if c.actor_valid
  236.       actor = $game_actors[c.actor_id]
  237.       return false unless $game_party.members.include?(actor)
  238.     end
  239.     return true
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 设置事件页
  243.   #--------------------------------------------------------------------------
  244.   def setup_page(new_page)
  245.     @page = new_page
  246.     if @page
  247.       setup_page_settings
  248.     else
  249.       clear_page_settings
  250.     end
  251.     update_bush_depth
  252.     clear_starting_flag
  253.     check_event_trigger_auto
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ● 清除事件页的设置
  257.   #--------------------------------------------------------------------------
  258.   def check_moster
  259.     return unless @manster
  260.     return if $game_self_switches[[$game_map.map_id,@id, @body]]
  261.     if ($game_player.x-self.x).abs <= @manster_distance &&
  262.       ($game_player.y-self.y).abs <= @manster_distance
  263.       @move_speed = @manster_speed
  264.       @move_type = 2
  265.       @move_frequency = @manster_frequency
  266.     else
  267.       @move_speed = @manster_old_speed
  268.       @move_type = @manster_old_type
  269.       @move_frequency = @manster_old_frequency
  270.     end
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● 清除事件页的设置
  274.   #--------------------------------------------------------------------------
  275.   def clear_page_settings
  276.     @tile_id          = 0
  277.     @character_name   = ""
  278.     @character_index  = 0
  279.     @move_type        = 0
  280.     @through          = true
  281.     @trigger          = nil
  282.     @list             = nil
  283.     @interpreter      = nil
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● 设置事件页的设置
  287.   #--------------------------------------------------------------------------
  288.   def setup_page_settings
  289.     @tile_id          = @page.graphic.tile_id
  290.     @character_name   = @page.graphic.character_name
  291.     @character_index  = @page.graphic.character_index
  292.     if @original_direction != @page.graphic.direction
  293.       @direction          = @page.graphic.direction
  294.       @original_direction = @direction
  295.       @prelock_direction  = 0
  296.     end
  297.     if @original_pattern != @page.graphic.pattern
  298.       @pattern            = @page.graphic.pattern
  299.       @original_pattern   = @pattern
  300.     end
  301.     @move_type          = @page.move_type
  302.     @move_speed         = @page.move_speed
  303.     @move_frequency     = @page.move_frequency
  304.     @move_route         = @page.move_route
  305.     @move_route_index   = 0
  306.     @move_route_forcing = false
  307.     @walk_anime         = @page.walk_anime
  308.     @step_anime         = @page.step_anime
  309.     @direction_fix      = @page.direction_fix
  310.     @through            = @page.through
  311.     @priority_type      = @page.priority_type
  312.     @trigger            = @page.trigger
  313.     @list               = @page.list
  314.     @interpreter = @trigger == 4 ? Game_Interpreter.new : nil
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● 接触事件的启动判定
  318.   #--------------------------------------------------------------------------
  319.   def check_event_trigger_touch(x, y)
  320.     return if $game_map.interpreter.running?
  321.     if @trigger == 2 && $game_player.pos?(x, y)
  322.       start if !jumping? && normal_priority?
  323.     end
  324.   end
  325.   #--------------------------------------------------------------------------
  326.   # ● 自动事件的启动判定
  327.   #--------------------------------------------------------------------------
  328.   def check_event_trigger_auto
  329.     start if @trigger == 3
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● 更新画面
  333.   #--------------------------------------------------------------------------
  334.   def update
  335.     super
  336.     check_moster
  337.     check_event_trigger_auto
  338.     return unless @interpreter
  339.     @interpreter.setup(@list, @event.id) unless @interpreter.running?
  340.     @interpreter.update
  341.   end
  342. end
复制代码
事件名例子

敌人[距离:5,速度:5,频率:6,尸体:A]

前面没什么好说的
多了个半角逗号和尸体
A代表事件独立开关A打开时,脚本不起作用了

Project1.7z (290.12 KB, 下载次数: 73)
范例:
为节约,范例没有dll文件,请自行添加
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
25 小时
注册时间
2013-3-20
帖子
8
4
 楼主| 发表于 2013-4-15 23:04:30 | 只看该作者
貌似没人呢... 我重复一下问题吧...

这个明雷脚本设置确实很方便,但是如果我想让明雷死后不是暂时消除事件而是变成尸体躺地上,就不给力了...
尸体会跑啊跑的...... 脚本看不太懂,有解决方法么?

点评

哦,要变尸体啊,忘了,抱歉  发表于 2013-4-15 23:16
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
25 小时
注册时间
2013-3-20
帖子
8
3
 楼主| 发表于 2013-4-10 21:47:21 | 只看该作者
UnderUse 发表于 2013-4-10 15:28
附件的东西下不下来啊...

这个脚本明雷的意思是自动判定距离和接近那些的么?(脚本盲见谅...)

发现了一个问题:
我的明雷也需要设置尸体,所以当战斗处理后明雷事件的独立开关A将会开启,然后就是条件A开关的事件页显示尸体.... 结果.... 尸体开始动了...

看来需要加入几句独立开关A是否开启的判定啊... 脚本盲表示压力大了...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
25 小时
注册时间
2013-3-20
帖子
8
2
 楼主| 发表于 2013-4-10 15:28:19 | 只看该作者
沙漠点灰 发表于 2013-3-28 19:18
好⑨没来了....前来帮助将以上脚本插到Main前,或者替换掉原来的同名(Game_Event)脚本.
...

附件的东西下不下来啊...

这个脚本明雷的意思是自动判定距离和接近那些的么?(脚本盲见谅...)
测试了一下发现还是挺多东西需要手动弄的,比如说战斗后明雷消失...

点评

附件仅仅是地图,看来是6r抽了  发表于 2013-4-10 19:14
是啊,只是修改了判定之类的。把事件触发条件调为“事件接触”战斗,战斗后明雷消失。(如果设定死了就缺乏灵活性了)  发表于 2013-4-10 19:13
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
1
发表于 2013-3-28 19:18:00 | 只看该作者
好⑨没来了{:2_271:}....前来帮助{:2_275:}
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Game_Event
  4. #------------------------------------------------------------------------------
  5. #  处理事件的类。拥有条件判断、事件页的切换、并行处理、执行事件等功能。
  6. #   在 Game_Map 类的内部使用。
  7. #==============================================================================

  8. class Game_Event < Game_Character
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_reader   :trigger                  # 启动方式
  13.   attr_reader   :list                     # 执行内容
  14.   attr_reader   :starting                 # 启动中的标志
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对象
  17.   #     event : RPG::Event
  18.   #--------------------------------------------------------------------------
  19.   def initialize(map_id, event)
  20.     super()
  21.     @map_id = map_id
  22.     @event = event
  23.     @id = @event.id
  24.     moveto(@event.x, @event.y)
  25.     refresh
  26.     @manster = false
  27.     if self.name[/.*\[距离:(\d),速度:(\d+),频率:(\d+)\].*/]
  28.       @manster = true
  29.       @manster_distance = $1.to_i
  30.       @manster_speed = $2.to_i
  31.       @manster_frequency = $3.to_i
  32.       @manster_old_frequency = @move_frequency
  33.       @manster_old_speed = self.move_speed
  34.       @manster_old_type = @move_type
  35.     end
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 事件名称
  39.   #--------------------------------------------------------------------------
  40.   def name
  41.     @event.name
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 初始化公有成员变量
  45.   #--------------------------------------------------------------------------
  46.   def init_public_members
  47.     super
  48.     @trigger = 0
  49.     @list = nil
  50.     @starting = false
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 初始化私有成员变量
  54.   #--------------------------------------------------------------------------
  55.   def init_private_members
  56.     super
  57.     @move_type = 0                        # 移动类型
  58.     @erased = false                       # 暂时消除的标志
  59.     @page = nil                           # 事件页
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 判定是否与人物碰撞
  63.   #--------------------------------------------------------------------------
  64.   def collide_with_characters?(x, y)
  65.     super || collide_with_player_characters?(x, y)
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 判定是否与玩家碰撞(包括跟随角色)
  69.   #--------------------------------------------------------------------------
  70.   def collide_with_player_characters?(x, y)
  71.     normal_priority? && $game_player.collide?(x, y)
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 锁定(立即停止执行中的事件)
  75.   #--------------------------------------------------------------------------
  76.   def lock
  77.     unless @locked
  78.       @prelock_direction = @direction
  79.       turn_toward_player
  80.       @locked = true
  81.     end
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 解锁
  85.   #--------------------------------------------------------------------------
  86.   def unlock
  87.     if @locked
  88.       @locked = false
  89.       set_direction(@prelock_direction)
  90.     end
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 停止时的更新
  94.   #--------------------------------------------------------------------------
  95.   def update_stop
  96.     super
  97.     update_self_movement unless @move_route_forcing
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 自动移动的更新
  101.   #--------------------------------------------------------------------------
  102.   def update_self_movement
  103.     if near_the_screen? && @stop_count > stop_count_threshold
  104.       case @move_type
  105.       when 1;  move_type_random
  106.       when 2;  move_type_toward_player
  107.       when 3;  move_type_custom
  108.       end
  109.     end
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 判定是否在画面的可视区域內
  113.   #     dx : 从画面中央开始计算,左右有多少个图块。
  114.   #     dy : 从画面中央开始计算,上下有多少个图块。
  115.   #--------------------------------------------------------------------------
  116.   def near_the_screen?(dx = 12, dy = 8)
  117.     ax = $game_map.adjust_x(@real_x) - Graphics.width / 2 / 32
  118.     ay = $game_map.adjust_y(@real_y) - Graphics.height / 2 / 32
  119.     ax >= -dx && ax <= dx && ay >= -dy && ay <= dy
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 计算自动移动时停止计数最低值
  123.   #--------------------------------------------------------------------------
  124.   def stop_count_threshold
  125.     30 * (5 - @move_frequency)
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 移动类型 : 随机
  129.   #--------------------------------------------------------------------------
  130.   def move_type_random
  131.     case rand(6)
  132.     when 0..1;  move_random
  133.     when 2..4;  move_forward
  134.     when 5;     @stop_count = 0
  135.     end
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ● 移动类型 : 接近
  139.   #--------------------------------------------------------------------------
  140.   def move_type_toward_player
  141.     if near_the_player?
  142.       case rand(6)
  143.       when 0..3;  move_toward_player
  144.       when 4;     move_random
  145.       when 5;     move_forward
  146.       end
  147.     else
  148.       move_random
  149.     end
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 判定事件是否临近玩家
  153.   #--------------------------------------------------------------------------
  154.   def near_the_player?
  155.     sx = distance_x_from($game_player.x).abs
  156.     sy = distance_y_from($game_player.y).abs
  157.     sx + sy < 20
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 移动类型 : 自定义
  161.   #--------------------------------------------------------------------------
  162.   def move_type_custom
  163.     update_routine_move
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 清除启动中的标志
  167.   #--------------------------------------------------------------------------
  168.   def clear_starting_flag
  169.     @starting = false
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 判定执行内容是否为空
  173.   #--------------------------------------------------------------------------
  174.   def empty?
  175.     !@list || @list.size <= 1
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 判定指定的启动方式是否能启动事件
  179.   #     triggers : 启动方式的数组
  180.   #--------------------------------------------------------------------------
  181.   def trigger_in?(triggers)
  182.     triggers.include?(@trigger)
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 事件启动
  186.   #--------------------------------------------------------------------------
  187.   def start
  188.     return if empty?
  189.     @starting = true
  190.     lock if trigger_in?([0,1,2])
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 暂时消除
  194.   #--------------------------------------------------------------------------
  195.   def erase
  196.     @erased = true
  197.     refresh
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 刷新
  201.   #--------------------------------------------------------------------------
  202.   def refresh
  203.     new_page = @erased ? nil : find_proper_page
  204.     setup_page(new_page) if !new_page || new_page != @page
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● 寻找条件符合的事件页
  208.   #--------------------------------------------------------------------------
  209.   def find_proper_page
  210.     @event.pages.reverse.find {|page| conditions_met?(page) }
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 判定事件页的条件是否符合
  214.   #--------------------------------------------------------------------------
  215.   def conditions_met?(page)
  216.     c = page.condition
  217.     if c.switch1_valid
  218.       return false unless $game_switches[c.switch1_id]
  219.     end
  220.     if c.switch2_valid
  221.       return false unless $game_switches[c.switch2_id]
  222.     end
  223.     if c.variable_valid
  224.       return false if $game_variables[c.variable_id] < c.variable_value
  225.     end
  226.     if c.self_switch_valid
  227.       key = [@map_id, @event.id, c.self_switch_ch]
  228.       return false if $game_self_switches[key] != true
  229.     end
  230.     if c.item_valid
  231.       item = $data_items[c.item_id]
  232.       return false unless $game_party.has_item?(item)
  233.     end
  234.     if c.actor_valid
  235.       actor = $game_actors[c.actor_id]
  236.       return false unless $game_party.members.include?(actor)
  237.     end
  238.     return true
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 设置事件页
  242.   #--------------------------------------------------------------------------
  243.   def setup_page(new_page)
  244.     @page = new_page
  245.     if @page
  246.       setup_page_settings
  247.     else
  248.       clear_page_settings
  249.     end
  250.     update_bush_depth
  251.     clear_starting_flag
  252.     check_event_trigger_auto
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 清除事件页的设置
  256.   #--------------------------------------------------------------------------
  257.   def check_moster
  258.     return unless @manster
  259.     if ($game_player.x-self.x).abs <= @manster_distance &&
  260.       ($game_player.y-self.y).abs <= @manster_distance
  261.       @move_speed = @manster_speed
  262.       @move_type = 2
  263.       @move_frequency = @manster_frequency
  264.     else
  265.       @move_speed = @manster_old_speed
  266.       @move_type = @manster_old_type
  267.       @move_frequency = @manster_old_frequency
  268.     end
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● 清除事件页的设置
  272.   #--------------------------------------------------------------------------
  273.   def clear_page_settings
  274.     @tile_id          = 0
  275.     @character_name   = ""
  276.     @character_index  = 0
  277.     @move_type        = 0
  278.     @through          = true
  279.     @trigger          = nil
  280.     @list             = nil
  281.     @interpreter      = nil
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 设置事件页的设置
  285.   #--------------------------------------------------------------------------
  286.   def setup_page_settings
  287.     @tile_id          = @page.graphic.tile_id
  288.     @character_name   = @page.graphic.character_name
  289.     @character_index  = @page.graphic.character_index
  290.     if @original_direction != @page.graphic.direction
  291.       @direction          = @page.graphic.direction
  292.       @original_direction = @direction
  293.       @prelock_direction  = 0
  294.     end
  295.     if @original_pattern != @page.graphic.pattern
  296.       @pattern            = @page.graphic.pattern
  297.       @original_pattern   = @pattern
  298.     end
  299.     @move_type          = @page.move_type
  300.     @move_speed         = @page.move_speed
  301.     @move_frequency     = @page.move_frequency
  302.     @move_route         = @page.move_route
  303.     @move_route_index   = 0
  304.     @move_route_forcing = false
  305.     @walk_anime         = @page.walk_anime
  306.     @step_anime         = @page.step_anime
  307.     @direction_fix      = @page.direction_fix
  308.     @through            = @page.through
  309.     @priority_type      = @page.priority_type
  310.     @trigger            = @page.trigger
  311.     @list               = @page.list
  312.     @interpreter = @trigger == 4 ? Game_Interpreter.new : nil
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● 接触事件的启动判定
  316.   #--------------------------------------------------------------------------
  317.   def check_event_trigger_touch(x, y)
  318.     return if $game_map.interpreter.running?
  319.     if @trigger == 2 && $game_player.pos?(x, y)
  320.       start if !jumping? && normal_priority?
  321.     end
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 自动事件的启动判定
  325.   #--------------------------------------------------------------------------
  326.   def check_event_trigger_auto
  327.     start if @trigger == 3
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ● 更新画面
  331.   #--------------------------------------------------------------------------
  332.   def update
  333.     super
  334.     check_moster
  335.     check_event_trigger_auto
  336.     return unless @interpreter
  337.     @interpreter.setup(@list, @event.id) unless @interpreter.running?
  338.     @interpreter.update
  339.   end
  340. end
复制代码
将以上脚本插到Main前,或者替换掉原来的同名(Game_Event)脚本.
附件是地图文件,为减少容量的,解压到\Data替换同名文件.
这仅仅是是范例
本脚本可能会与事件名称有关的脚本相冲突。

使用方法:
事件名称填上
xxxxx[距离:a,速度:b,频率:c]
xxx随便填什么
a填距离
b填速度
c填频率
显而易见,注意格式。

在范围内,速度,频率会自动更换为b,c,移动方式改为接近,范围外会自动改为默认的(速度,频率,方式)

触发条件设为“事件接触”即可。
Data.7z (2.33 KB, 下载次数: 68)

点评

请问为啥米我用了以后打完怪了出了战斗画面又立刻遇怪--同一个怪。于是就一直战斗中....  发表于 2013-6-14 21:45
在过几天就能看懂这些了 吧(看教程) 脚本写上几千行正是唔的梦想啊(??)  发表于 2013-4-10 16:18

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 感谢帮忙

查看全部评分

>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-18 14:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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