Project1

标题: 請問能讓事件自動接觸另一個事件來引發新劇情嗎 [打印本页]

作者: sai90306    时间: 2012-4-9 23:30
标题: 請問能讓事件自動接觸另一個事件來引發新劇情嗎
本帖最后由 sai90306 于 2012-4-9 23:45 编辑

請問麼樣才能設定一個事件自動移動到另一個事件然後觸發劇情?
例如作ARPG的同伴,讓同伴自動接近敵人並且進行攻擊這樣的
dsu_plus_rewardpost_czw
作者: Wind2010    时间: 2012-4-13 12:04
写一个事件向事件移动的方法,然后条件分歧判断两事件的直线距离来触发事件
另外如果是做ARPG的话这些功能在ARPG系统里应该已经有设置了的
作者: hys111111    时间: 2012-4-13 14:02
本帖最后由 hys111111 于 2012-4-13 14:02 编辑

用接触事件判断……
  1. $game_map.event[@event_id]
复制代码

作者: hk0768    时间: 2012-4-13 14:27
像这样的?
工程.rar (852.49 KB, 下载次数: 348)


作者: Wind2010    时间: 2012-4-13 16:47
本帖最后由 Wind2010 于 2012-4-13 17:11 编辑
  1. class Game_Character
  2.   def move_toward_event(event_id)
  3.     sx = @x - $game_map.events[event_id].x
  4.     sy = @y - $game_map.events[event_id].y
  5.     if sx == 0 and sy == 0
  6.       return
  7.     end
  8.     abs_sx = sx.abs
  9.     abs_sy = sy.abs
  10.     if abs_sx == abs_sy
  11.       rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
  12.     end
  13.     if abs_sx > abs_sy
  14.       sx > 0 ? move_left : move_right
  15.       if not moving? and sy != 0
  16.         sy > 0 ? move_up : move_down
  17.       end
  18.     else
  19.       sy > 0 ? move_up : move_down
  20.       if not moving? and sx != 0
  21.         sx > 0 ? move_left : move_right
  22.       end
  23.     end
  24.   end
  25. end
复制代码
事件-移动规则-自定义-脚本:「move_toward_event(需要移动向的事件的ID)」,并勾上“忽略不能移动的场合”
作者: hys111111    时间: 2012-4-13 18:07
本帖最后由 hys111111 于 2012-4-13 18:10 编辑
  1. class Scene_Map
  2.   alias HYS_updata update
  3.   def update
  4.     HYS_updata
  5.     for f in $game_map.events.values
  6.       if $game_map.events[f.id].moving?
  7.         unless $game_player.passable?(f.x,f.y,f.direction) #未实验,如判断失效,请在本行前面和下面其中一个end加“#”号
  8.           case f.direction
  9.           when 2
  10.             f.y+=1
  11.           when 4
  12.             f.x-=1
  13.           when 6
  14.             f.x+=1
  15.           when 8
  16.             f.y-=1
  17.           end
  18.           for i in $game_map.events.values
  19.             if f.x == i.x and f.y == i.y
  20.               $game_map.events[i.id].start
  21.             end
  22.           end
  23.         end
  24.       end
  25.     end
  26.   end
  27. end
复制代码
整体脚本就是这样了。
如果前方无法通过,并且正在移动中,就会执行事件前方的事件(就像角色接触事件那样子)
加入脚本,立刻生效
作者: end55rpg    时间: 2012-4-13 18:21
小狗狗,用XAS吧,不用自己研究了,很头痛的做ARPG
作者: hys111111    时间: 2012-4-14 09:42
本帖最后由 hys111111 于 2012-4-14 12:34 编辑
  1. class Scene_Map
  2.   alias xy_HYS_main main
  3.   def main
  4.     xy_HYS_main
  5.     updata
  6.   end
  7.   alias xy_HYS_updata update
  8.   def update
  9.     xy_HYS_updata
  10.     xy_event = {}

  11.     #格式:xy_event = [[A,B],[A,B]]
  12.     #A为事件所在地图,B为事件编号
  13.     xy_event = [[1,3]]#设置部分
  14.    
  15.     for a in 0...xy_event.size
  16.       if xy_event[a][0] == $game_map.map_id
  17.         for f in $game_map.events.values
  18.           if xy_event[a][1] == f.id
  19.             #if f.moving?
  20.              # unless $game_map.passable?(f.x,f.y,f.direction) #未实验,如判断失效,请在本行前面加“#”号
  21.                 case f.direction
  22.                 when 2
  23.                   xx=f.x
  24.                   yy=f.y+1
  25.                 when 4
  26.                   xx=f.x-1
  27.                   yy=f.y
  28.                 when 6
  29.                   xx=f.x+1
  30.                   yy=f.y
  31.                 when 8
  32.                   xx=f.x
  33.                   yy=f.y-1
  34.                 end
  35.                 for i in $game_map.events.values
  36.                   p "test"
  37.                   if xx == i.x and yy == i.y
  38.                     i.start
  39.                   end
  40.                 end
  41.               end
  42.             end
  43.           end
  44.         end
  45.       end
  46.     end
  47.   #end
  48. #end
复制代码
从新修正一下,就在12行那里设置

补充说明:设置的那个事件相当于角色,如果接触别的事件就会触发
作者: sai90306    时间: 2012-4-14 12:54
這是我目前設置的樣子
  1.     class Scene_Map
  2.       alias xy_HYS_main main
  3.       def main
  4.         xy_HYS_main
  5.         updata
  6.       end
  7.       alias xy_HYS_updata update
  8.       def update
  9.         xy_HYS_updata
  10.         xy_event = {}

  11.         #格式:xy_event = [[A,B],[A,B]]
  12.         #A为事件所在地图,B为事件编号
  13.         xy_event = [[1,3],[1,4]]#地圖1上有事件3和4 都沒有設定移動路線
  14.       
  15.         for a in 0...xy_event.size
  16.           if xy_event[a][0] == $game_map.map_id
  17.             for f in $game_map.events.values
  18.               if xy_event[a][1] == f.id
  19.                 #if f.moving?
  20.                  # unless $game_map.passable?(f.x,f.y,f.direction) #未实验,如判断失效,请在本行前面加“#”号
  21.                     case f.direction
  22.                     when 2
  23.                       xx=f.x
  24.                       yy=f.y+1
  25.                     when 4
  26.                       xx=f.x-1
  27.                       yy=f.y
  28.                     when 6
  29.                       xx=f.x+1
  30.                       yy=f.y
  31.                     when 8
  32.                       xx=f.x
  33.                       yy=f.y-1
  34.                     end
  35.                     for i in $game_map.events.values
  36.                       # p "test"
  37.                       if xx == i.x and yy == i.y
  38.                         i.start
  39.                       end
  40.                     end
  41.                   end
  42.                 end
  43.               end
  44.             end
  45.           end
  46.         end
  47.       #end
  48.     #end
复制代码

作者: hys111111    时间: 2012-4-14 14:04
本帖最后由 hys111111 于 2012-4-17 12:35 编辑
  1. class Game_Character
  2.   
  3.   alias xy_up move_up
  4.   def move_up(turn_enabled = true)
  5.     if self.is_a?(Game_Player)
  6.       xy_up
  7.     end
  8.     if $game_player.passable?(@x,@y,8)  and self.is_a?(Game_Event)
  9.       xy_up
  10.     else
  11.       turn_up
  12.       pd
  13.     end
  14.   end
  15.   
  16.   alias xy_down move_down
  17.   def move_down(turn_enabled = true)
  18.     if self.is_a?(Game_Player)
  19.       xy_down
  20.     end
  21.     if $game_player.passable?(@x,@y,2) and self.is_a?(Game_Event)
  22.       xy_down
  23.     else
  24.       turn_down
  25.       pd
  26.     end
  27.   end
  28.   
  29.   alias xy_left move_left
  30.   def move_left(turn_enabled = true)
  31.     if self.is_a?(Game_Player)
  32.       xy_left
  33.     end
  34.     if $game_player.passable?(@x,@y,4) and self.is_a?(Game_Event)
  35.       xy_left
  36.     else
  37.       turn_left
  38.       pd
  39.     end
  40.   end
  41.   
  42.   alias xy_right move_right
  43.   def move_right(turn_enabled = true)
  44.     if self.is_a?(Game_Player)
  45.       xy_right
  46.     end
  47.     if $game_player.passable?(@x,@y,6) and self.is_a?(Game_Event)
  48.       xy_right
  49.     else
  50.       turn_right
  51.       pd
  52.     end
  53.   end
  54.   
  55.   def pd
  56.     @move_route_waiting = true
  57.     xy_event = {}

  58.     #格式:xy_event = [[A,B],[A,B]]
  59.     #A为事件所在地图,B为事件编号
  60.     xy_event = [[1,3]]#设置部分
  61.    
  62.     for a in 0...xy_event.size
  63.       if xy_event[a][0] == $game_map.map_id and self.is_a?(Game_Event)
  64.         if xy_event[a][1] == @id
  65.           case @direction
  66.           when 2
  67.             xx=@x
  68.             yy=@y+1
  69.           when 4
  70.             xx=@x-1
  71.             yy=@y
  72.           when 6
  73.             xx=@x+1
  74.             yy=@y
  75.           when 8
  76.             xx=@x
  77.             yy=@y-1
  78.           end
  79.           for i in $game_map.events.values
  80.             if xx == i.x and yy == i.y
  81.               case @direction
  82.               when 2
  83.                 i.turn_up
  84.               when 4
  85.                 i.turn_right
  86.               when 6
  87.                 i.turn_left
  88.               when 8
  89.                 i.turn_down
  90.               end
  91.               i.start
  92.             end
  93.           end
  94.         end
  95.       end
  96.     end
  97.   end
  98. end
复制代码
我现在会用alias了,测试无误,可以拿去用了(另外,执行事件的过程事件可以移动哦)
真的就像角色接触事件那样子了。自己再使用试试……已经修复……
作者: sai90306    时间: 2012-4-14 15:25
本帖最后由 sai90306 于 2012-4-14 15:25 编辑

兩位大大太感謝你們了!
兩位的腳本都很好 功能不太一樣 都能完美運行
其實我最初想要的是Wind2010大的那種腳本
不過看到hys111111大的腳本後讓我也很感興趣...所以就一直追問了@@
所以最後選答案的時候好掙扎...原因就像我上面說的 抱歉了Wind2010大

作者: hys111111    时间: 2012-4-17 12:31
本帖最后由 hys111111 于 2012-4-17 12:31 编辑
sai90306 发表于 2012-4-14 15:25
兩位大大太感謝你們了!
兩位的腳本都很好 功能不太一樣 都能完美運行
其實我最初想要的是Wind2010大的那種 ...


脚本已修正,见10楼
(我忘了考虑到角色了)




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