Project1

标题: 即时遇敌无法使用? [打印本页]

作者: 纲·炎    时间: 2013-1-12 13:15
标题: 即时遇敌无法使用?
本帖最后由 纲·炎 于 2013-1-12 13:18 编辑

我做了事件标题,然后运行游戏时会有
不过我记得以前不会这样。
脚本如下:
RUBY 代码复制
  1. #===============================================================
  2. # ■ 即时遇敌,
  3. #---------------------------------------------------------------
  4. #    碰到什么怪物,周围是什么怪物战斗中就是什么怪物
  5. #===============================================================
  6. =begin
  7. 使用说明
  8.  
  9. 在地图上放置事件,事件的第一个指令用注释
  10. 在里面填写 敌人: ID (注意是半角冒号),决定触碰到此事件时所战斗的敌人
  11. 第二行可以填写 视野: 数字 ,决定本事件追逐主角的视野范围(默认为8)
  12. 触碰后就会触发战斗,敌人队伍依照主角身边的敌人事件设定生成
  13. 如果主角身边有5个敌人事件,则敌人队伍有五个
  14.  
  15. 战斗胜利、失败、逃跑后的公共事件,先设定好,把ID填写在脚本当中
  16. ($win_common_event_id 这几行)
  17.  
  18. 数据库里面的敌人队伍可以照常使用,没有影响。
  19. 作为敌人的事件也可以照常放置其他的指令,执行完后才会执行战斗
  20.  
  21. =end
  22.  
  23.  
  24. $win_common_event_id = 1    # 战胜时的公共事件
  25. $lose_common_event_id = 2   # 战败时的公共事件
  26. $escape_common_event_id = 3 # 逃跑时的公共事件
  27.  
  28. class Game_Character < Game_CharacterBase
  29.   def move_type_toward_player
  30.     # 计算与主角的距离
  31.     sx = (@x - $game_player.x).abs
  32.     sy = (@y - $game_player.y).abs
  33.     # 如果纵横共计离开 20 个元件
  34.     if sx + sy >= approach_range
  35.       # 随机
  36.       move_random
  37.       return
  38.     end
  39.     # 随机 0~5 的分支
  40.     case rand(6)
  41.     when 0..3  # 接近主角
  42.       move_toward_player
  43.     when 4  # 随机
  44.       move_random
  45.     when 5  # 前进一步
  46.       move_forward
  47.     end
  48.   end
  49.   def approach_range
  50.     return 8
  51.   end
  52. end
  53. class Game_Event < Game_Character
  54.   #--------------------------------------------------------------------------
  55.   # ● 初始化对像
  56.   #     map_id : 地图 ID
  57.   #     event  : 事件 (RPG::Event)
  58.   #--------------------------------------------------------------------------
  59.   alias old_initialize initialize
  60.   def initialize(map_id, event)
  61.     old_initialize(map_id, event)
  62.     name = event.name
  63.     @enemy_id = 0
  64.     @approach_range = 8
  65.     setup_as_enemy
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 返回视野距离
  69.   #--------------------------------------------------------------------------
  70.   def approach_range
  71.     return @approach_range
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 判断事件是否存在
  75.   #--------------------------------------------------------------------------
  76.   def exist?
  77.     return !@erased
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # ● 将事件设为敌人
  81.   #--------------------------------------------------------------------------
  82.   def setup_as_enemy
  83.     enemy_comment = @list[0]
  84.     scope_comment = @list[1] if @list[1] && @list[1].code == 408
  85.     return if enemy_comment.code != 108
  86.     # 读取敌人 ID
  87.     if enemy_comment.parameters[0] =~ /(?:敌人):(?:\s|)(\d+)/
  88.       @enemy_id = $1.to_i
  89.     else
  90.       return
  91.     end
  92.     # 读取敌人视野距离
  93.     if scope_comment.parameters[0] =~ /(?:视野):(?:\s|)(\d+)/
  94.       @approach_range = $1.to_i
  95.     end
  96.     command = RPG::EventCommand.new(355, 0, ["$instant_encounter_battle=true"])
  97.     @list.push(command) # 执行脚本
  98.     command = RPG::EventCommand.new(301, 0, [0, 1, true, true])
  99.     @list.push(command) # 战斗处理
  100.     command = RPG::EventCommand.new(601, 0)
  101.     @list.push(command) # 战胜时的场合
  102.     command = RPG::EventCommand.new(117, 1, [$win_common_event_id])
  103.     @list.push(command) # 呼叫公共事件
  104.     command = RPG::EventCommand.new(602, 0)
  105.     @list.push(command) # 逃跑时的场合
  106.     command = RPG::EventCommand.new(117, 1, [$escape_common_event_id])
  107.     @list.push(command) # 呼叫公共事件
  108.     command = RPG::EventCommand.new(603, 0)
  109.     @list.push(command) # 战败时的场合
  110.     command = RPG::EventCommand.new(117, 1, [$lose_common_event_id])
  111.     @list.push(command) # 呼叫公共事件
  112.     command = RPG::EventCommand.new(604, 0)
  113.     @list.push(command) # 战斗处理结束
  114.     command = RPG::EventCommand.new
  115.     @list.push(command)
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 判断事件是否为敌人
  119.   #--------------------------------------------------------------------------
  120.   def isEnemy?
  121.     return @enemy_id > 0
  122.   end
  123.   attr_reader :enemy_id # 指定的敌人ID
  124. end
  125. class Game_Map
  126.   ENCOUNTER_RANGE = 3 #这个代表遇到敌人的范围大小
  127.   #--------------------------------------------------------------------------
  128.   # ●获取指定范围内的事件
  129.   #     x : X 坐标
  130.   #     y : Y 坐标
  131.   #     l : 范围
  132.   #--------------------------------------------------------------------------
  133.   def scope_event
  134.     scope_event = []
  135.     x = $game_player.x
  136.     y = $game_player.y
  137.     for event in $game_map.events.values
  138.       next unless event.isEnemy?
  139.       if (event.x - x).abs + (event.y - y).abs <=ENCOUNTER_RANGE and event.exist?
  140.         scope_event.push(event.id)
  141.         break if scope_event.size >= 8
  142.       end
  143.     end
  144.     return scope_event
  145.   end
  146. end
  147. module BattleManager
  148.   #--------------------------------------------------------------------------
  149.   # ● 处理战斗结束
  150.   #--------------------------------------------------------------------------
  151.   class << self
  152.     alias instant_encounter_setup setup
  153.     def setup(troop_id, can_escape = true, can_lose = false)
  154.       if $instant_encounter_battle
  155.         $data_troops[1].members = []
  156.         scope_event = $game_map.scope_event
  157.         size = scope_event.size
  158.         for i in 1..size
  159.           temp = RPG::Troop::Member.new
  160.           temp.enemy_id = $game_map.events[scope_event[i-1]].enemy_id
  161.           if size > 4
  162.             temp.x = Graphics.width * (i - 0.5) / size
  163.             temp.y = 288 / 2*(i%2+1)
  164.             temp.y += 100*((i+1)%2)
  165.           else
  166.             temp.x = Graphics.width * (i - 0.5) / size
  167.             temp.y = 288
  168.           end
  169.           $data_troops[1].members.push(temp)
  170.           $instant_encounter_battle = false
  171.         end
  172.       end
  173.       instant_encounter_setup(troop_id, can_escape, can_lose)
  174.     end
  175.     alias instant_encounter_battle_end battle_end
  176.     def battle_end(result)
  177.       if result == 0
  178.         # 战斗结束后清除事件(未完成)
  179.         scope_event = $game_map.scope_event
  180.         $game_troop.members.size.times{ |i|
  181.           $game_map.events[scope_event[i]].erase
  182.         }
  183.       end
  184.       instant_encounter_battle_end(result)
  185.     end
  186.   end
  187. end

如果玩家初始位置不是在事件标题地图上就可以用
作者: 亿万星辰    时间: 2013-1-12 13:57
事件一开始做好注释了么?
作者: 纲·炎    时间: 2013-1-12 15:13
亿万星辰 发表于 2013-1-12 13:57
事件一开始做好注释了么?

什么注释?
作者: 纲·炎    时间: 2013-1-12 15:49
有木有人啊
作者: j433463    时间: 2013-1-12 18:53
您都没有看脚本中的说明吗?一开始要先在事件中第一个指令用注释方式填写敌人ID,这个您究竟有没有做?
作者: 纲·炎    时间: 2013-1-12 19:16
j433463 发表于 2013-1-12 18:53
您都没有看脚本中的说明吗?一开始要先在事件中第一个指令用注释方式填写敌人ID,这个您究竟有没有做? ...

我还没设置敌人纳........难道要在事件标题上做?
作者: 亿万星辰    时间: 2013-1-12 19:44
纲·炎 发表于 2013-1-12 19:16
我还没设置敌人纳........难道要在事件标题上做?

显然你没有仔细的阅读脚本开头的说明,然后就来问问题了……归结于脚本无法使用,殊不知是你自己根本就没有正确的用……你说我该说什么好呀……哎。。。。。
作者: 纲·炎    时间: 2013-1-12 19:49
亿万星辰 发表于 2013-1-12 19:44
显然你没有仔细的阅读脚本开头的说明,然后就来问问题了……归结于脚本无法使用,殊不知是你自己根本就没 ...

..................
我很认真的看了
........
但是看不懂啊
{:2_271:}
作者: 纲·炎    时间: 2013-1-12 19:58
本帖最后由 纲·炎 于 2013-1-12 20:00 编辑
亿万星辰 发表于 2013-1-12 19:44
显然你没有仔细的阅读脚本开头的说明,然后就来问问题了……归结于脚本无法使用,殊不知是你自己根本就没 ...


{:2_264:} 到底怎么弄,请详细说一下啊{:2_271:}
我在一个没注释的地图上可以不会那样啊
作者: j433463    时间: 2013-1-12 20:02
开启事件后,在事件的执行内容上点两下,开启事件指令页,第一页最下面有个加入注解,点它会有一个输入框,输入敌人的ID,看程式码的正则式,应该是

敌人: 3

这样的写法,注解的颜色是绿色,然后第二行应该再加一个注解,填的是视野范围,应该是

视野: 10

这样的写法,如果没有第二行注解,预设视野范围是 8,也就是八格范围内的有几个敌人事件,战斗时就出现有几个敌人在战斗画面中。

至少这个应该看得懂吧?您对脚本似乎一点都不明白,那设公共事件后添加的语法您恐怕也不知道怎么做...
作者: 纲·炎    时间: 2013-1-12 20:06
j433463 发表于 2013-1-12 20:02
开启事件后,在事件的执行内容上点两下,开启事件指令页,第一页最下面有个加入注解,点它会有一个输入框, ...


这我知道啊,问题是我的初始位置是事件标题地图上啊,不需要敌人啊?{:2_250:}
作者: j433463    时间: 2013-1-12 20:22
既然知道,那您怎么说看不懂说明呢?让我还以为您看不懂脚本。

而且您这脚本似乎不完整,有些方法和变量没有定义,怎么回事?
作者: 纲·炎    时间: 2013-1-12 20:40
j433463 发表于 2013-1-12 20:22
既然知道,那您怎么说看不懂说明呢?让我还以为您看不懂脚本。

而且您这脚本似乎不完整,有些方法和变量没 ...

我也不知道,我把我的事件标题放在范例里面一样用不了,是不是会冲突的啊,哎
作者: j433463    时间: 2013-1-12 20:55
我自制事件标题页,有加上这明雷脚本,测试没有遇到您说的问题,不知您事件标题弄了啥?
倒是有战斗后的错误讯息,就跟那个即时遇敌脚本发布帖一样,都是 181 行的问题,
或者,看看亿万版主有没有什么发现?
作者: 纲·炎    时间: 2013-1-12 21:01
j433463 发表于 2013-1-12 20:55
我自制事件标题页,有加上这明雷脚本,测试没有遇到您说的问题,不知您事件标题弄了啥?
倒是有战斗后的错 ...

{:2_271:} 你QQ多少,我加你
作者: 纲·炎    时间: 2013-1-12 21:17
j433463 发表于 2013-1-12 20:55
我自制事件标题页,有加上这明雷脚本,测试没有遇到您说的问题,不知您事件标题弄了啥?
倒是有战斗后的错 ...

你用的脚本是什么?
作者: j433463    时间: 2013-1-12 21:26
跳过标题页脚本是光的圆周率写的那个,事件标题则是我自己做的,只用一个变量记录编号,一个事件独立开关和六张选项图,档案下载在这帖子底下:

http://rpg.blue/forum.php?mod=vi ... p;page=1#pid2083873

我用这个加上即时遇敌脚本,进入事件标题没有发生您说的情况。
作者: 纲·炎    时间: 2013-1-12 21:54
Scripts.rar (153.77 KB, 下载次数: 25)
@Sion  
作者: 纲·炎    时间: 2013-1-12 22:00
Q多少,我加你呗@Sion
作者: viva0072008    时间: 2013-1-12 22:41
这个原帖有个范例,但老实说这脚本本身问题比较多,不建议使用,游戏的正常战斗结束的时候会发生181行错误,再者有个比较奇葩的BUG,那就是你即时遇敌的战斗,如果你逃走了,在触发正常战斗的话,敌人永远是你上次逃走的那些……而且这个即时遇敌的战斗没法很好调用敌群中的事件设置,感觉弊大于利。
作者: 纲·炎    时间: 2013-1-13 11:14
viva0072008 发表于 2013-1-12 22:41
这个原帖有个范例,但老实说这脚本本身问题比较多,不建议使用,游戏的正常战斗结束的时候会发生181行错误 ...

那请问有没有较好的明雷?难道要用事件?




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