Project1

标题: 区域遇敌改版 [打印本页]

作者: 司马睿风    时间: 2008-7-1 19:36
标题: 区域遇敌改版
这个遇敌版本主要是用于我和yangff的游戏Pokemon For Xp里的草丛的设定。之前的类似脚本感觉没我们的好,,,,,,,,(pia飞自己)
并且这是我上任版主的第一个脚本,汗个~~~~~~
以下覆盖同名脚本的同名部分
Game_Map
  1. #--------------------------------------------------------------------------
  2.   # ● 刷新画面
  3.   #--------------------------------------------------------------------------
  4.   def update
  5.     # 循环
  6.     loop do
  7.       # 按照地图、实例、主角的顺序刷新
  8.       # (本更新顺序不会在满足事件的执行条件下成为给予角色瞬间移动
  9.       #  的机会的重要因素)
  10.       $game_map.update
  11.       $game_system.map_interpreter.update
  12.       $game_player.update
  13.       # 系统 (计时器)、画面刷新
  14.       $game_system.update
  15.       $game_screen.update
  16.       # 如果主角在场所移动中就中断循环
  17.       unless $game_temp.player_transferring
  18.         break
  19.       end
  20.       # 执行场所移动
  21.       transfer_player
  22.       # 处理过渡中的情况下、中断循环
  23.       if $game_temp.transition_processing
  24.         break
  25.       end
  26.     end
  27.     # 刷新活动块
  28.     @spriteset.update
  29.     # 刷新信息窗口
  30.     @message_window.update
  31.     # 游戏结束的情况下
  32.     if $game_temp.gameover
  33.       # 切换的游戏结束画面
  34.       $scene = Scene_Gameover.new
  35.       return
  36.     end
  37.     # 返回标题画面的情况下
  38.     if $game_temp.to_title
  39.       # 切换到标题画面
  40.       $scene = Scene_Title.new
  41.       return
  42.     end
  43.     # 处理过渡中的情况下
  44.     if $game_temp.transition_processing
  45.       # 清除过渡处理中标志
  46.       $game_temp.transition_processing = false
  47.       # 执行过渡
  48.       if $game_temp.transition_name == ""
  49.         Graphics.transition(20)
  50.       else
  51.         Graphics.transition(40, "Graphics/Transitions/" +
  52.           $game_temp.transition_name)
  53.       end
  54.     end
  55.     # 显示信息窗口中的情况下
  56.     if $game_temp.message_window_showing
  57.       return
  58.     end
  59.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  60.     if ($game_player.encounter_count == 0 and ($game_player.terrain_tag == 1 or in_array($game_map.map_id,[2,3,4]))) and $game_map.encounter_list != []
  61.       # 不是在事件执行中或者禁止遇敌中
  62.       unless $game_system.map_interpreter.running? or
  63.              $game_system.encounter_disabled
  64.         # 确定队伍
  65.         n = rand($game_map.encounter_list.size)
  66.         troop_id = $game_map.encounter_list[n]
  67.         
  68.         # 队伍有效的话
  69.         if $data_troops[troop_id] != nil
  70.           # 设置调用战斗标志
  71.           $game_temp.battle_calling = true
  72.           $game_temp.battle_troop_id = troop_id
  73.           $game_temp.battle_can_escape = true
  74.           $game_temp.battle_can_lose = false
  75.           $game_temp.battle_proc = nil
  76.         end
  77.       end
  78.     end
  79.     # 按下 B 键的情况下
  80.     if Input.trigger?(Input::B)
  81.       # 不是在事件执行中或菜单禁止中
  82.       unless $game_system.map_interpreter.running? or
  83.              $game_system.menu_disabled
  84.         # 设置菜单调用标志以及 SE 演奏
  85.         $game_temp.menu_calling = true
  86.         $game_temp.menu_beep = true
  87.       end
  88.     end
  89.     # 调试模式为 ON 并且按下 F9 键的情况下
  90.     if $DEBUG and Input.press?(Input::F9)
  91.       # 设置调用调试标志
  92.       $game_temp.debug_calling = true
  93.     end
  94.     # 不在主角移动中的情况下
  95.     unless $game_player.moving?
  96.       # 执行各种画面的调用
  97.       if $game_temp.battle_calling
  98.         call_battle
  99.       elsif $game_temp.shop_calling
  100.         call_shop
  101.       elsif $game_temp.name_calling
  102.         call_name
  103.       elsif $game_temp.menu_calling
  104.         call_menu
  105.       elsif $game_temp.save_calling
  106.         call_save
  107.       elsif $game_temp.debug_calling
  108.         call_debug
  109.       end
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 调用战斗
  114.   #--------------------------------------------------------------------------
  115.   def call_battle
  116.     # 清除战斗调用标志
  117.     $game_temp.battle_calling = false
  118.     # 清除菜单调用标志
  119.     $game_temp.menu_calling = false
  120.     $game_temp.menu_beep = false
  121.     # 生成遇敌计数
  122.     $game_player.make_encounter_count
  123.     # 记忆地图 BGM 、停止 BGM
  124.     $game_temp.map_bgm = $game_system.playing_bgm
  125.     $game_system.bgm_stop
  126.     # 演奏战斗开始 SE
  127.     $game_system.se_play($data_system.battle_start_se)
  128.     # 演奏战斗 BGM
  129.     $game_system.bgm_play($game_system.battle_bgm)
  130.     # 矫正主角姿势
  131.     $game_player.straighten
  132.     # 切换到战斗画面
  133.     $scene = Scene_Battle.new
  134.   end
  135.   #--------------------------------------------------------------------------
复制代码
  1. #--------------------------------------------------------------------------
  2.   # ● 获取遇敌列表
  3.   #--------------------------------------------------------------------------
  4.   def encounter_list
  5.     return @map.encounter_list
  6.   end
  7.   #6666666666666666666666666666666
  8.   def encounter_list=(array)
  9.     @map.encounter_list = array
  10.   end
  11.   #6666666666666666666666666666666
复制代码

以下脚本可以增加到Scene_Map中或者在main之前插入
  1. def in_array(a,array)
  2.   for i in array
  3.     if array == i
  4.       return true
  5.     end
  6.   end
  7.   return false
  8. end
复制代码



好了,以下是脚本的应用。这里大家可以自己具体参考下我这的图,用法具体大家自己决定

用事件围成一个区域,这里面才可以遇敌,外面不能遇敌。事件里的脚本照下面这张图去写

在$game_map.encounter_list=[1,2,3]中,数组中的1,2,3代表你遇到的敌人的队伍ID。可以根据大家的实际需要去更改,即使你在一个地方可以遇见100种敌人都可以(除非你想)
感觉我们的脚本还是不错的,之前我测试了好一下~希望能对大家有用吧
作者: 越前リョーマ    时间: 2008-7-1 20:08
用这种方法大家一定要使用防卡脚本……
免的事件放的太多掉FPS—……
作者: 司马睿风    时间: 2008-7-1 20:19
恩,这个就是我弄的时候决定缩减地图大小增加地图张数的原因
作者: yangff    时间: 2008-7-1 20:21
请修改
    if ($game_player.encounter_count == 0 and ($game_player.terrain_tag == 1 or in_array($game_map.map_id,[2,3,4]))) and $game_map.encounter_list != []
中的
2,3,4为任何区域遇敌的地图id
其他地图的遇敌区域的地形id设置成1
作者: 越前リョーマ    时间: 2008-7-1 20:22
话说VX的话就自带这个系统了……(而且不掉FPS)
作者: 司马睿风    时间: 2008-7-1 20:24
以下引用yangff于2008-7-1 12:21:46的发言:

请修改
   if ($game_player.encounter_count == 0 and ($game_player.terrain_tag == 1 or in_array($game_map.map_id,[2,3,4]))) and $game_map.encounter_list != []
中的
2,3,4为任何区域遇敌的地图id
其他地图的遇敌区域的地形id设置成1

我忘记了,对了,加上
以下引用越前リョーマ于2008-7-1 12:22:45的发言:

话说VX的话就自带这个系统了……(而且不掉FPS)

5555,这些都是我喜欢的功能,还有自动生成门啊什么的都是我喜欢的55555555555
作者: yangff    时间: 2008-7-1 20:26
可素vx的大部分功能我bs

vx的功能我也有办法模仿
绝对不掉fps

拿起vb
作者: 灯笼菜刀王    时间: 2008-7-2 23:08
话说...用地形标志判断范围不好吗?非要铺事件?
作者: 司马睿风    时间: 2008-7-2 23:35
这个有写过,方法不是很好
作者: yangff    时间: 2008-7-5 05:11
以下引用灯笼菜刀王于2008-7-2 15:08:13的发言:

话说...用地形标志判断范围不好吗?非要铺事件?

每個區域的遇敵列表不同,如果用地形導致遇敵列表的單一,明顯不適合口袋妖怪這種大地圖 {/wx}
作者: 灯笼菜刀王    时间: 2008-7-6 01:40
但是,像一些范围非常广的地区“比如,海”那事件铺得可就那啥了....

还有,感觉口袋妖怪也不是全部地图拼在一张,有些地方有走廊通道什么的,这个明显就是切换地图用。
作者: 司马睿风    时间: 2008-7-6 01:42
围成圈是为了进行打开遇敌的判断用的,如果海之类的我们直接就在入口和出口放事件就行了
作者: 391395435    时间: 2008-7-6 01:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: yangff    时间: 2008-7-6 02:57
以下引用391395435于2008-7-5 17:49:25的发言:


以下引用yangff于2008-7-4 21:11:19的发言:

每個區域的遇敵列表不同,如果用地形導致遇敵列表的單一,明顯不適合口袋妖怪這種大地圖  


地形标志有8个……

那就只有8种遇敌方案?
作者: 391395435    时间: 2008-7-6 05:00
提示: 作者被禁止或删除 内容自动屏蔽




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