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

Project1

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

重开,关于地图明雷遇敌系统脚本,请教3535亲

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-5-14
帖子
17
跳转到指定楼层
1
发表于 2008-6-1 20:49:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv3.寻梦者

孤独守望

梦石
0
星屑
3133
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

2
发表于 2008-6-1 21:01:13 | 只看该作者
逃跑的场合“独立开关A=ON”可以吗
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
142
在线时间
264 小时
注册时间
2006-11-22
帖子
1057
3
发表于 2008-6-1 21:14:36 | 只看该作者
  1. #-------------------------------------------------------------------------------------
  2. #超!遇敌系统
  3. #coding by Kevin Chang
  4. #==============================================================================
  5. # ■ Game_Event
  6. #------------------------------------------------------------------------------
  7. #  处理事件的程序。条件判断、事件页的切换、并行处理、执行事件功能
  8. # 在 Game_Map 的内部使用。
  9. #==============================================================================
  10. module RPG #新增name定义,作用于抓取事件名称字段值
  11. class Event
  12. def initialize(x, y)
  13. @id = 0
  14. @name = ""
  15. @x = x
  16. @y = y
  17. @pages = [RPG::Event::Page.new]
  18. end
  19. attr_accessor :id
  20. attr_accessor :name
  21. attr_accessor :x
  22. attr_accessor :y
  23. attr_accessor :pages
  24. end
  25. end
  26. class Game_Event < Game_Character

  27. #--------------------------------------------------------------------------
  28. # ● 定义实例变量

  29. #--------------------------------------------------------------------------
  30. attr_accessor :trigger # 目标(改为可擦写)
  31. attr_reader :list # 执行内容
  32. attr_reader :starting # 启动中标志
  33. attr_accessor :name #取得事件名称
  34. attr_accessor :character_name #改变事件图形为可擦写
  35. attr_accessor :auto_fight #敌人事件处碰启动战斗设定
  36. attr_accessor :move_type #移动方式让 $game_map.events[event_id].move_type = ? 来设定

  37. #--------------------------------------------------------------------------
  38. # ● 初始化对像
  39. # map_id : 地图 ID
  40. # event : 事件 (RPG::Event)

  41. #--------------------------------------------------------------------------
  42. def initialize(map_id, event)
  43. super()
  44. @map_id = map_id
  45. @event = event
  46. @id = @event.id
  47. @erased = false
  48. @starting = false
  49. @through = true
  50. @name = @event.name #取得事件名称
  51. @character_name =""#改变事件图形为可擦写
  52. @auto_fight = false #敌人事件接触自动战斗
  53. @move_type = 0 #移动方式 让 $game_map.events[event_id].move_type = ? 来设定
  54. #改变敌人事件的移动方法 0.不动 1.随机 2.接近 4.自订AI
  55. # 初期位置的移动
  56. moveto(@event.x, @event.y)
  57. refresh
  58. end

  59. #--------------------------------------------------------------------------
  60. # ● 接触事件启动判定

  61. #--------------------------------------------------------------------------
  62. def check_event_trigger_touch(x, y)
  63. # 事件执行中的情况下
  64. if $game_system.map_interpreter.running?
  65. return
  66. end
  67. # 目标为 [与事件接触] 以及和主角坐标一致的情况下
  68. if @trigger == 2 and x == $game_player.x and y ==
  69. $game_player.y
  70. # 除跳跃中以外的情况、启动判定就是正面的事件
  71. if not jumping? and not over_trigger?
  72. @auto_fight = true
  73. start
  74. else
  75. @auto_fight = false
  76. end
  77. end
  78. end

  79. #--------------------------------------------------------------------------
  80. # ● 自动事件启动判定

  81. #--------------------------------------------------------------------------
  82. def check_event_trigger_auto
  83. # 目标为 [与事件接触] 以及和主角坐标一致的情况下
  84. if @trigger == 2 and @x == $game_player.x and @y ==
  85. $game_player.y
  86. # 除跳跃中以外的情况、启动判定就是同位置的事件
  87. if not jumping? and over_trigger?
  88. @auto_fight = true
  89. start
  90. else
  91. @auto_fight = false
  92. end
  93. end
  94. # 目标是 [自动执行] 的情况下
  95. if @trigger == 3
  96. start
  97. end
  98. end
  99. end

  100. #==============================================================================
  101. # ■ Game_Character (分割定义 2)
  102. #------------------------------------------------------------------------------
  103. #  处理角色的程序。本程序作为 Game_Player 与 Game_Event
  104. # 的超级程序使用。
  105. #==============================================================================

  106. class Game_Character

  107. #--------------------------------------------------------------------------
  108. # ● 移动类型 : 接近

  109. #--------------------------------------------------------------------------
  110. def move_type_toward_player
  111. # 求得与主角坐标的差
  112. sx = @x - $game_player.x
  113. sy = @y - $game_player.y
  114. # 求得差的绝对值
  115. abs_sx = sx > 0 ? sx : -sx
  116. abs_sy = sy > 0 ? sy : -sy
  117. # 如果纵横共计离开 20 个组件
  118. if sx + sy >= 5#修正敌人警戒距离
  119. # 随机
  120. move_random
  121. return
  122. end
  123. # 随机 0~5 的分支
  124. case rand(6)
  125. when 0..3 # 接近主角
  126. move_toward_player
  127. when 4 # 随机
  128. move_random
  129. when 5 # 前进一步
  130. move_forward
  131. end
  132. end
  133. end

  134. #===========================================================
  135. #==============================================================================
  136. # ■ Scene_Map
  137. #------------------------------------------------------------------------------
  138. #  处理地图画面的程序。
  139. #==============================================================================

  140. class Scene_Map

  141. #--------------------------------------------------------------------------
  142. # ● 主处理

  143. #--------------------------------------------------------------------------
  144. $enemy_event_arry = []
  145. #存放敌人事件的事件编号对应的敌人队伍id(troop_id)
  146. $e_event_id = []#存放属于敌人事件的事件id
  147. def main
  148. @a = 0
  149. # 生成活动块
  150. @spriteset = Spriteset_Map.new
  151. # 生成讯息窗口
  152. @message_window = Window_Message.new
  153. # 执行过渡
  154. Graphics.transition
  155. # 主循环
  156. loop do
  157. new_battle_module #呼叫新版遇敌系统
  158. # 刷新游戏画面
  159. Graphics.update
  160. # 刷新输入讯息
  161. Input.update
  162. # 刷新画面
  163. update
  164. # 如果画面切换的话就中断循环
  165. if $scene != self
  166. break
  167. end
  168. end
  169. # 准备过渡
  170. Graphics.freeze
  171. # 释放活动块
  172. @spriteset.dispose
  173. # 释放讯息窗口
  174. @message_window.dispose
  175. # 标题画面切换中的情况下
  176. if $scene.is_a?(Scene_Title)
  177. # 淡入淡出画面
  178. Graphics.transition
  179. Graphics.freeze
  180. end
  181. end

  182. #------------------------------------------------------------------
  183. #●怪物事件随机图标变化设计模块-主要控制

  184. #--------------------------------------------------------------------
  185. def new_battle_module
  186. # 遇敌列表不为空的情况下
  187. if $game_map.encounter_list != []
  188. # 不是在事件执行中或者禁止遇敌中
  189. unless $game_system.map_interpreter.running? or
  190. $game_system.encounter_disabled
  191. # 确定队伍
  192. for i in 1 .. $game_map.events.size
  193. if $game_map.events[i].name == "敌人"
  194. if $game_map.events[i].character_name ==
  195. ""#避免怪物持续刷新,设置一个break的条件
  196. $game_map.events[i].character_name =
  197. rand_enemies_character_name#改变敌人事件的图片
  198. $enemy_event_arry[i] =
  199. $enemy_event_id#将获取的troop_id 存放到敌人事件数组内
  200. $e_event_id[@a] = i
  201. @a += 1
  202. $game_map.events[i].trigger = 2
  203. #自动改为接触启动事件
  204. $game_map.events[i].move_type = 2
  205. #改变敌人事件的移动方法 0.不动 1.随机 2.接近
  206. # 队伍有效的话
  207. else
  208. break
  209. end#if 避免怪物持续刷新,设置一个break的条件
  210. end
  211. end#end for
  212. end #unless
  213. end#if 遇敌列表不为空的情况下
  214. end#module

  215. #--------------------------------------------------------------------
  216. #●怪物事件随机图标变化设计模块-战斗图获取

  217. #--------------------------------------------------------------------
  218. def rand_enemies_character_name
  219. n =
  220. rand($game_map.encounter_list.size)#随机数取得地图敌人列表数量
  221. troop_id =
  222. $game_map.encounter_list[n]#随机数带入敌人队伍ID内,由敌人列表随机取出一队伍
  223. troop = $data_troops[troop_id]#将随机敌人队伍数据存放到 troop 变数内
  224. $enemy_event_id = troop_id
  225. i = rand(troop.members.size) #由troop队伍资料内随机抽出一个敌人队员
  226. enemy_character_name =
  227. $data_enemies[troop.members[i].enemy_id].battler_name
  228. #抽出的随机敌人队员,与data_enemies去比对出对应的怪物战斗图,把战斗图名称取出
  229. return enemy_character_name #回传战斗图名称
  230. end

  231. #--------------------------------------------------------------------------
  232. # ● 刷新画面

  233. #--------------------------------------------------------------------------
  234. def update
  235. # 循环
  236. loop do
  237. # 按照地图、实例、主角的顺序刷新
  238. # (本更新顺序不会在的满足事件的执行条件下成为给予角色瞬间移动
  239. # 的机会的重要原素)
  240. $game_map.update
  241. $game_system.map_interpreter.update
  242. $game_player.update
  243. # 系统 (定时器)、画面刷新
  244. $game_system.update
  245. $game_screen.update
  246. # 如果主角在场所移动中就中断循环
  247. unless $game_temp.player_transferring
  248. break
  249. end
  250. # 执行场所移动
  251. transfer_player
  252. # 处理过渡中的情况下、中断循环
  253. if $game_temp.transition_processing
  254. break
  255. end
  256. end
  257. # 刷新活动块
  258. @spriteset.update
  259. # 刷新讯息窗口
  260. @message_window.update
  261. # 游戏结束的情况下
  262. if $game_temp.gameover
  263. # 切换的游戏结束画面
  264. $scene = Scene_Gameover.new
  265. return
  266. end
  267. # 返回标题画面的情况下
  268. if $game_temp.to_title
  269. # 切换到标题画面
  270. $scene = Scene_Title.new
  271. return
  272. end
  273. # 处理过渡中的情况下
  274. if $game_temp.transition_processing
  275. # 清除过渡处理中标志
  276. $game_temp.transition_processing = false
  277. # 执行过渡
  278. if $game_temp.transition_name == ""
  279. Graphics.transition(20)
  280. else
  281. Graphics.transition(40, "Graphics/Transitions/" +$game_temp.transition_name)
  282. end
  283. end
  284. # 显示讯息窗口中的情况下
  285. if $game_temp.message_window_showing
  286. return
  287. end
  288. # 遇敌列表不为空的情况下且敌人事件 auto_fight 为true
  289. for i in $e_event_id
  290. if $game_map.encounter_list != [] and
  291. $game_map.events[i].auto_fight == true
  292. $event_id_on_time = i #把正在进行战斗的 event_id 取出,以便后面呼叫使用
  293. # 不是在事件执行中或者禁止遇敌中
  294. unless $game_system.map_interpreter.running? or
  295. $game_system.encounter_disabled
  296. # 确定队伍
  297. troop_id = $enemy_event_arry[i]
  298. # 队伍有效的话
  299. if $data_troops[troop_id] != nil
  300. # 设置调用战斗标志
  301. $game_temp.battle_calling = true
  302. $game_temp.battle_troop_id = troop_id
  303. $game_temp.battle_can_escape = true
  304. $game_temp.battle_can_lose = false
  305. $game_temp.battle_proc = nil
  306. end
  307. end
  308. end
  309. end #for
  310. # 按下 B 键的情况下
  311. if Input.trigger?(Input::B)
  312. # 不是在事件执行中或菜单禁止中
  313. unless $game_system.map_interpreter.running? or
  314. $game_system.menu_disabled
  315. # 设置菜单调用标志以及 SE 演奏
  316. $game_temp.menu_calling = true
  317. $game_temp.menu_beep = true
  318. end
  319. end
  320. # 调试模式为 ON 并且按下 F9 键的情况下
  321. if $DEBUG and Input.press?(Input::F9)
  322. # 设置调用调试标志
  323. $game_temp.debug_calling = true
  324. end
  325. # 不在主角移动中的情况下
  326. unless $game_player.moving?
  327. # 执行各种画面的调用
  328. if $game_temp.battle_calling
  329. call_battle
  330. elsif $game_temp.shop_calling
  331. call_shop
  332. elsif $game_temp.name_calling
  333. call_name
  334. elsif $game_temp.menu_calling
  335. call_menu
  336. elsif $game_temp.save_calling
  337. call_save
  338. elsif $game_temp.debug_calling
  339. call_debug
  340. end
  341. end
  342. end
  343. end
  344. #==============================================================================
  345. # ■ Scene_Battle (分割定义 2)
  346. #------------------------------------------------------------------------------
  347. #  处理战斗画面的程序。
  348. #==============================================================================

  349. class Scene_Battle
  350. #--------------------------------------------------------------------------
  351.   # ● 胜负判定
  352.   #--------------------------------------------------------------------------
  353.   def judge
  354.     # 全灭判定是真、并且同伴人数为 0 的情况下
  355.     if $game_party.all_dead? or $game_party.actors.size == 0
  356.       # 允许失败的情况下
  357.       if $game_temp.battle_can_lose
  358.         # 还原为战斗开始前的 BGM
  359.         $game_system.bgm_play($game_temp.map_bgm)
  360.         $game_map.events[$event_id_on_time].name = "死亡"
  361.         $game_map.events[$event_id_on_time].auto_fight = false
  362.         $game_map.events[$event_id_on_time].trigger = 0
  363.         $game_map.events[$event_id_on_time].erase
  364.         # 战斗结束
  365.         battle_end(2)
  366.         # 返回 true
  367.         return true
  368.       end
  369.       # 设定游戏结束标志
  370.       $game_temp.gameover = true
  371.       # 返回 true
  372.       return true
  373.     end
  374.     # 如果存在任意 1 个敌人就返回 false
  375.     for enemy in $game_troop.enemies
  376.       if enemy.exist?
  377.         return false
  378.       end
  379.     end
  380.     # 开始结束战斗回合 (胜利)
  381.     start_phase5
  382.     # 返回 true
  383.     return true
  384.   end
  385. #--------------------------------------------------------------------------
  386. # ● 画面更新 (结束战斗回合)

  387. #--------------------------------------------------------------------------
  388. def update_phase5
  389. # 等待计数大于 0 的情况下
  390. if @phase5_wait_count > 0
  391. # 减少等待计数
  392. @phase5_wait_count -= 1
  393. # 等待计数为 0 的情况下
  394. if @phase5_wait_count == 0
  395. # 显示结果窗口
  396. @result_window.visible = true
  397. # 清除主回合标志
  398. $game_temp.battle_main_phase = false
  399. # 刷新状态窗口
  400. @status_window.refresh
  401. end
  402. return
  403. end
  404. # 按下 C 键的情况下
  405. if Input.trigger?(Input::C)
  406. # 战斗结束
  407. $game_map.events[$event_id_on_time].name = "死亡"
  408. $game_map.events[$event_id_on_time].auto_fight =
  409. false
  410. $game_map.events[$event_id_on_time].trigger = 0
  411. $game_map.events[$event_id_on_time].erase
  412. battle_end(0)
  413. end
  414. end
  415. end
复制代码

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-5-14
帖子
17
4
 楼主| 发表于 2008-6-1 21:42:24 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-5-1
帖子
364
5
发表于 2008-6-1 22:06:51 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-5-14
帖子
17
6
 楼主| 发表于 2008-6-1 22:14:10 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
27 小时
注册时间
2008-2-13
帖子
1740
7
发表于 2008-6-1 22:41:48 | 只看该作者
我只是来提醒3535马甲超标了{/gg}
每人最多只能有2个马甲{/gg}
好吧,果然换个签名就没人认识我了。我承认我被时间埋没了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-8-3 01:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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