Project1

标题: [VX移植] 即时遇敌系统 v1.0 [打印本页]

作者: 雪流星    时间: 2012-3-8 12:57
标题: [VX移植] 即时遇敌系统 v1.0
本帖最后由 雪流星 于 2012-3-8 19:55 编辑

没搜索到原VX版脚本的帖子,脚本工程是从此帖下载的
谁知道的话帮我贴一下连结,谢谢

说明写在脚本里面了
范例工程:
http://hop.tl/QMyGHP7J96dT168yTv
http://115.com/file/e733ay1n

更新日志:
2012-03-08
* 更新功能:不需占用数据库中敌人队伍的位置
* 新增功能:增加敌人视野效果
* 功能修改:敌人设置改在事件指令中,名称空出来可以照常随便使用

  1. #===============================================================
  2. # ■ 即时遇敌,
  3. #---------------------------------------------------------------
  4. #    碰到什么怪物,周围是什么怪物战斗中就是什么怪物
  5. #===============================================================
  6. =begin
  7. 使用说明

  8. 在地图上放置事件,事件的第一个指令用注释
  9. 在里面填写 敌人: ID (注意是半角冒号),决定触碰到此事件时所战斗的敌人
  10. 第二行可以填写 视野: 数字 ,决定本事件追逐主角的视野范围(默认为8)
  11. 触碰后就会触发战斗,敌人队伍依照主角身边的敌人事件设定生成
  12. 如果主角身边有5个敌人事件,则敌人队伍有五个

  13. 战斗胜利、失败、逃跑后的公共事件,先设定好,把ID填写在脚本当中
  14. ($win_common_event_id 这几行)

  15. 数据库里面的敌人队伍可以照常使用,没有影响。
  16. 作为敌人的事件也可以照常放置其他的指令,执行完后才会执行战斗

  17. =end


  18. $win_common_event_id = 1    # 战胜时的公共事件
  19. $lose_common_event_id = 2   # 战败时的公共事件
  20. $escape_common_event_id = 3 # 逃跑时的公共事件

  21. class Game_Character < Game_CharacterBase
  22.   def move_type_toward_player
  23.     # 计算与主角的距离
  24.     sx = (@x - $game_player.x).abs
  25.     sy = (@y - $game_player.y).abs
  26.     # 如果纵横共计离开 20 个元件
  27.     if sx + sy >= approach_range
  28.       # 随机
  29.       move_random
  30.       return
  31.     end
  32.     # 随机 0~5 的分支
  33.     case rand(6)
  34.     when 0..3  # 接近主角
  35.       move_toward_player
  36.     when 4  # 随机
  37.       move_random
  38.     when 5  # 前进一步
  39.       move_forward
  40.     end
  41.   end
  42.   def approach_range
  43.     return 8
  44.   end
  45. end
  46. class Game_Event < Game_Character
  47.   #--------------------------------------------------------------------------
  48.   # ● 初始化对像
  49.   #     map_id : 地图 ID
  50.   #     event  : 事件 (RPG::Event)
  51.   #--------------------------------------------------------------------------
  52.   alias old_initialize initialize
  53.   def initialize(map_id, event)
  54.     old_initialize(map_id, event)
  55.     name = event.name
  56.     @enemy_id = 0
  57.     @approach_range = 8
  58.     setup_as_enemy
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 返回视野距离
  62.   #--------------------------------------------------------------------------
  63.   def approach_range
  64.     return @approach_range
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 判断事件是否存在
  68.   #--------------------------------------------------------------------------
  69.   def exist?
  70.     return !@erased
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 将事件设为敌人
  74.   #--------------------------------------------------------------------------
  75.   def setup_as_enemy
  76.     enemy_comment = @list[0]
  77.     scope_comment = @list[1] if @list[1] && @list[1].code == 408
  78.     return if enemy_comment.code != 108
  79.     # 读取敌人 ID
  80.     if enemy_comment.parameters[0] =~ /(?:敌人):(?:\s|)(\d+)/
  81.       @enemy_id = $1.to_i
  82.     else
  83.       return
  84.     end
  85.     # 读取敌人视野距离
  86.     if scope_comment.parameters[0] =~ /(?:视野):(?:\s|)(\d+)/
  87.       @approach_range = $1.to_i
  88.     end
  89.     command = RPG::EventCommand.new(355, 0, ["$instant_encounter_battle=true"])
  90.     @list.push(command) # 执行脚本
  91.     command = RPG::EventCommand.new(301, 0, [0, 1, true, true])
  92.     @list.push(command) # 战斗处理
  93.     command = RPG::EventCommand.new(601, 0)
  94.     @list.push(command) # 战胜时的场合
  95.     command = RPG::EventCommand.new(117, 1, [$win_common_event_id])
  96.     @list.push(command) # 呼叫公共事件
  97.     command = RPG::EventCommand.new(602, 0)
  98.     @list.push(command) # 逃跑时的场合
  99.     command = RPG::EventCommand.new(117, 1, [$escape_common_event_id])
  100.     @list.push(command) # 呼叫公共事件
  101.     command = RPG::EventCommand.new(603, 0)
  102.     @list.push(command) # 战败时的场合
  103.     command = RPG::EventCommand.new(117, 1, [$lose_common_event_id])
  104.     @list.push(command) # 呼叫公共事件
  105.     command = RPG::EventCommand.new(604, 0)
  106.     @list.push(command) # 战斗处理结束
  107.     command = RPG::EventCommand.new
  108.     @list.push(command)
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 判断事件是否为敌人
  112.   #--------------------------------------------------------------------------
  113.   def isEnemy?
  114.     return @enemy_id > 0
  115.   end
  116.   attr_reader :enemy_id # 指定的敌人ID
  117. end
  118. class Game_Map
  119.   ENCOUNTER_RANGE = 3 #这个代表遇到敌人的范围大小
  120.   #--------------------------------------------------------------------------
  121.   # ●获取指定范围内的事件
  122.   #     x : X 坐标
  123.   #     y : Y 坐标
  124.   #     l : 范围
  125.   #--------------------------------------------------------------------------
  126.   def scope_event
  127.     scope_event = []
  128.     x = $game_player.x
  129.     y = $game_player.y
  130.     for event in $game_map.events.values
  131.       next unless event.isEnemy?
  132.       if (event.x - x).abs + (event.y - y).abs <=ENCOUNTER_RANGE and event.exist?
  133.         scope_event.push(event.id)
  134.         break if scope_event.size >= 8
  135.       end
  136.     end
  137.     return scope_event
  138.   end
  139. end
  140. module BattleManager
  141.   #--------------------------------------------------------------------------
  142.   # ● 处理战斗结束
  143.   #--------------------------------------------------------------------------
  144.   class << self
  145.     alias instant_encounter_setup setup
  146.     def setup(troop_id, can_escape = true, can_lose = false)
  147.       if $instant_encounter_battle
  148.         $data_troops[1].members = []
  149.         scope_event = $game_map.scope_event
  150.         size = scope_event.size
  151.         for i in 1..size
  152.           temp = RPG::Troop::Member.new
  153.           temp.enemy_id = $game_map.events[scope_event[i-1]].enemy_id
  154.           if size > 4
  155.             temp.x = Graphics.width * (i - 0.5) / size
  156.             temp.y = 288 / 2*(i%2+1)
  157.             temp.y += 100*((i+1)%2)
  158.           else
  159.             temp.x = Graphics.width * (i - 0.5) / size
  160.             temp.y = 288
  161.           end
  162.           $data_troops[1].members.push(temp)
  163.           $instant_encounter_battle = false
  164.         end
  165.       end
  166.       instant_encounter_setup(troop_id, can_escape, can_lose)
  167.     end
  168.     alias instant_encounter_battle_end battle_end
  169.     def battle_end(result)
  170.       if result == 0
  171.         # 战斗结束后清除事件(未完成)
  172.         scope_event = $game_map.scope_event
  173.         $game_troop.members.size.times{ |i|
  174.           $game_map.events[scope_event[i]].erase
  175.         }
  176.       end
  177.       instant_encounter_battle_end(result)
  178.     end
  179.   end
  180. end
复制代码

作者: 杂兵天下    时间: 2012-3-8 13:30
流星出品,总是精品。
作者: 雪流星    时间: 2012-3-9 09:55
2012-03-08
* 更新功能:不需占用数据库中敌人队伍的位置
* 新增功能:增加敌人视野效果
* 功能修改:敌人设置改在事件指令中,名称空出来可以照常随便使用
作者: [email protected]    时间: 2012-3-10 22:02
示范下载不了!
作者: 雪流星    时间: 2012-3-11 00:59
[email protected] 发表于 2012-3-10 08:02
示范下载不了!

两个连接都下载不了??
作者: mdjzk    时间: 2012-4-13 10:21
马克一下
作者: 不会脚本    时间: 2012-4-13 10:36
本帖最后由 不会脚本 于 2012-4-13 10:40 编辑

不明白真正含义,貌似是升级出错……
(图挂的好厉害)即使遇敌的181行发生NoMethodError……之类的

作者: wo62950    时间: 2012-6-3 02:27
我是新手..不过能学习的我都不会放过的...
作者: 九夜神尊    时间: 2012-6-4 13:00
哈哈,我的脚本竟然被移植,很荣幸的说。
作者: 358429534    时间: 2012-8-9 16:27
范例失效
作者: knowlivegive    时间: 2012-12-12 18:53
谢谢了~
作者: 纲·炎    时间: 2013-1-12 16:05
开始用上事件标题的话就不能用了




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