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

Project1

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

[已经过期] 求改脚本

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
82 小时
注册时间
2010-6-22
帖子
37
跳转到指定楼层
1
发表于 2011-5-4 18:20:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

有人帮忙改下这个脚本吗 ?攻击时双方所有人的状态动画都消失

  1. #==============================================================================
  2. #RTAB观光游第六站,连击效果+连击数显示 (计算部分)
  3. #==============================================================================
  4. # 連撃 Ver 1.02
  5. # 配布元・サポートURL
  6. # http://members.jcom.home.ne.jp/cogwheel/

  7. #==============================================================================
  8. # ■ Scene_Battle (分割定義 4)
  9. #------------------------------------------------------------------------------
  10. #  バトル画面の処理を行うクラスです。
  11. #==============================================================================
  12. # アニメに強さ0のフラッシュが存在した場合、
  13. # 赤:倍率 緑:+スキル・アイテムID でダメージ計算を行う。


  14. class Scene_Battle
  15. attr_accessor :active_battler
  16. attr_reader :skill
  17. attr_reader :battler_name # ステータスウィンドウ
  18. attr_reader :spriteset
  19. #--------------------------------------------------------------------------
  20. # ● ATB基礎セットアップ
  21. #--------------------------------------------------------------------------
  22. alias :atb_setup_straight :atb_setup
  23. def atb_setup
  24. atb_setup_straight
  25. for battler in $game_party.actors + $game_troop.enemies
  26. battler.total_damage = {}
  27. end
  28. end
  29. #--------------------------------------------------------------------------
  30. # ● アクション更新 (メインフェーズ)
  31. #--------------------------------------------------------------------------
  32. def action_phase(battler)
  33. while true
  34. # action が 1 の場合、バトラーが行動中かどうか確認
  35. if @action == 1 and battler.phase < 3
  36. for target in battler.target
  37. speller = synthe?(target)
  38. if speller == nil
  39. # ターゲットが通常行動中の場合
  40. if @action_battlers.include?(target)
  41. if target.phase > 2
  42. return
  43. end
  44. end
  45. else
  46. # ターゲットが連携スキル発動中の場合
  47. for spell in speller
  48. if @action_battlers.include?(spell)
  49. if spell.phase > 2
  50. return
  51. end
  52. end
  53. end
  54. end
  55. end
  56. end
  57. case battler.phase
  58. when 1
  59. update_phase4_step1(battler)
  60. when 2

  61. update_phase4_step2(battler)
  62. when 3
  63. update_phase4_step3(battler)
  64. update_phase4_step4(battler)
  65. when 4
  66. when 5
  67. update_phase4_step5(battler)
  68. when 6
  69. update_phase4_step6(battler)
  70. end
  71. # ウェイトが入った場合
  72. if battler.wait > 0
  73. # ウェイトカウントを減らして終了
  74. battler.wait -= 1
  75. break
  76. end
  77. # 行動終了した場合ループを抜ける
  78. unless @action_battlers.include?(battler)
  79. break
  80. end
  81. end
  82. end
  83. #--------------------------------------------------------------------------
  84. # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  85. #--------------------------------------------------------------------------
  86. def update_phase4_step1(battler)
  87. # すでに戦闘から外されている場合
  88. if battler.index == nil
  89. @action_battlers.delete(battler)
  90. anime_wait_return
  91. battler.wait = 1
  92. return
  93. end
  94. speller = synthe?(battler)
  95. if speller == nil
  96. # ダメージ食らい中の場合
  97. unless battler.damage.empty? or @action > 2
  98. battler.wait = 1
  99. return
  100. end
  101. # 行動可能かどうか判定
  102. unless battler.movable?
  103. battler.phase = 6
  104. return
  105. end
  106. else
  107. # ダメージ食らい中の場合
  108. for spell in speller
  109. unless spell.damage.empty? or @action > 2
  110. battler.wait = 1
  111. return
  112. end
  113. # 行動可能かどうか判定
  114. unless spell.movable?
  115. battler.phase = 6
  116. return
  117. end
  118. end
  119. end
  120. # スキル使用時、詠唱時間設定
  121. # 強制アクションかつ @force が 2 の時はスキルを即時発動
  122. if battler.current_action.kind == 1 and
  123. (not battler.current_action.forcing or @force != 2)
  124. if battler.rtp == 0
  125. # スキル詠唱中ならば、解除
  126. skill_reset(battler)
  127. # スキル詠唱時間設定
  128. recite_time(battler)
  129. # 連携技設定
  130. synthe_spell(battler)
  131. # スキルを詠唱する場合
  132. if battler.rtp > 0
  133. # 強制アクションかつ @force が 1 の時は連携スキルのみ即時発動
  134. speller = synthe?(battler)
  135. if battler.current_action.forcing and @force > 0 and speller != nil
  136. for spell in speller
  137. spell.rt = spell.rtp
  138. end
  139. else
  140. battler.blink = true
  141. if battler.current_action.forcing
  142. $game_temp.forcing_battler = nil
  143. battler.current_action.forcing = false
  144. end
  145. @action_battlers.delete(battler)
  146. return
  147. end
  148. end
  149. end
  150. end
  151. # アクターの明滅エフェクト OFF
  152. if battler != nil
  153. battler.blink = false
  154. end
  155. speller = synthe?(battler)
  156. if speller == nil
  157. @spell_p.delete(battler)
  158. @spell_e.delete(battler)
  159. else
  160. for spell in speller
  161. spell.blink = false
  162. @spell_p.delete(spell)
  163. @spell_e.delete(spell)
  164. end
  165. end
  166. # ステップ 2 に移行
  167. battler.phase = 2
  168. end
  169. #--------------------------------------------------------------------------
  170. # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  171. #--------------------------------------------------------------------------
  172. def update_phase4_step2(battler)
  173. # 強制アクションでなければ
  174. unless battler.current_action.forcing
  175. # 制約が [敵を通常攻撃する] か [味方を通常攻撃する] の場合
  176. if battler.restriction == 2 or battler.restriction == 3
  177. # アクションに攻撃を設定
  178. battler.current_action.kind = 0
  179. battler.current_action.basic = 0
  180. end
  181. end
  182. # アクションの種別より攻撃アニメーションを取得する
  183. case battler.current_action.kind
  184. when 0 # 基本
  185. if battler.is_a?(Game_Actor)
  186. base_id = battler.weapon_id
  187. end
  188. anime_id = battler.animation2_id
  189. # 防御など特殊行動の場合は次のステップへ
  190. unless make_basic_action_preparation(battler)
  191. return
  192. end
  193. # 戦闘が終了した場合は行動をキャンセル
  194. if fin?
  195. battler.phase = 6
  196. return
  197. end
  198. when 1 # スキル
  199. base_id = battler.current_action.skill_id
  200. anime_id = $data_skills[battler.current_action.skill_id].animation2_id
  201. # スキルが使用できない場合は行動をキャンセル
  202. unless make_skill_action_preparation(battler)
  203. return
  204. end
  205. # 戦闘が終了した場合は行動をキャンセル
  206. if fin? and $data_skills[anime_id].scope == 1..2
  207. battler.phase = 6
  208. return
  209. end
  210. when 2 # アイテム
  211. base_id = battler.current_action.item_id
  212. anime_id = $data_items[battler.current_action.item_id].animation2_id
  213. # アイテムが使用できない場合は行動をキャンセル
  214. unless make_item_action_preparation(battler)
  215. return
  216. end
  217. # 戦闘が終了した場合は行動をキャンセル
  218. if fin? and $data_items[anime_id].scope == 1..2
  219. battler.phase = 6
  220. return
  221. end
  222. end
  223. # アニメーションを検索し、連撃性を変数serialに代入する
  224. serial = []
  225. frame = 0
  226. if $data_animations[anime_id] != nil
  227. for animation in $data_animations[anime_id].timings
  228. color = animation.flash_color
  229. # アニメーション・フラッシュの強さが0の場合
  230. if color.alpha == 0
  231. serial.push([color.red.to_i, color.green, animation.frame - frame])
  232. frame = animation.frame
  233. end
  234. end
  235. # 連撃性がない場合単発攻撃
  236. if serial.empty?
  237. serial = [[20, 100, $data_animations[anime_id].frame_max - 5]]
  238. end
  239. else
  240. # アニメーションが存在しない場合
  241. serial = [[20, 100, 0]]
  242. end
  243. # ハッシュ total_damage の作成
  244. total_damage = {}
  245. for target in battler.target
  246. total_damage[target] = []
  247. end
  248. # 連撃回数分ダメージ計算を行う
  249. for attack in serial
  250. # アクションの種別で分岐
  251. case battler.current_action.kind
  252. when 0 # 基本
  253. if battler.is_a?(Game_Actor)
  254. # バトラーがアクターの場合、攻撃時に武器を変更する
  255. battler.change_weapon(base_id + attack[1] - 100)
  256. end
  257. make_basic_action_result(battler)
  258. when 1 # スキル
  259. # 連携スキルのことを考え、スキルIDの変更は内部処理で行う
  260. make_skill_action_result(battler, attack[1] - 100)
  261. when 2 # アイテム
  262. # アイテムIDを設定分変化させる
  263. battler.current_action.item_id = base_id + attack[1] - 100
  264. make_item_action_result(battler)
  265. end
  266. # total_damage へダメージを代入
  267. for target in battler.target
  268. # ダメージがある場合、ダメージをX/20倍する。
  269. if target.damage[battler].is_a?(Numeric)
  270. damage = target.damage[battler] * attack[0] / 20
  271. else
  272. damage = target.damage[battler]
  273. end
  274. # 回復HP量がある場合、回復HP量をX/20倍する。
  275. if target.recover_hp[battler].is_a?(Numeric)
  276. recover_hp = target.recover_hp[battler] * attack[0] / 20
  277. end
  278. # 回復SP量がある場合、回復SP量をX/20倍する。
  279. if target.recover_sp[battler].is_a?(Numeric)
  280. recover_sp = target.recover_sp[battler] * attack[0] / 20
  281. end
  282. critical = target.critical[battler]
  283. # total_damage = [ダメージ, クリティカルフラグ, 回復HP量, 回復SP量,
  284. # ステート変化, ステート回復, 待ちフレーム時間]
  285. total_damage[target].push([damage, critical, recover_hp, recover_sp,
  286. target.state_p[battler], target.state_m[battler], attack[2]])
  287. end
  288. end
  289. # トータルダメージを、バトラーのインスタンスに代入
  290. for target in battler.target
  291. target.total_damage[battler] = total_damage[target]
  292. end
  293. # 武器・スキル・アイテムIDを通常に戻す
  294. case battler.current_action.kind
  295. when 0 # 基本
  296. if battler.is_a?(Game_Actor)
  297. battler.change_weapon(base_id)
  298. end
  299. when 1 # スキル
  300. battler.current_action.skill_id = base_id
  301. when 2 # アイテム
  302. battler.current_action.item_id = base_id
  303. end
  304. if battler.phase == 2
  305. # ステップ 3 に移行
  306. battler.phase = 3
  307. end
  308. end
  309. #--------------------------------------------------------------------------
  310. # ● 基本アクション 準備#到此一游(武器范围定义必须)
  311. #--------------------------------------------------------------------------
  312. def make_basic_action_preparation(battler)
  313. # 攻撃の場合
  314. if battler.current_action.basic == 0
  315. # アニメーション ID を設定
  316. battler.anime1 = battler.animation1_id
  317. battler.anime2 = battler.animation2_id
  318. # 行動側バトラーがエネミーの場合
  319. if battler.is_a?(Game_Enemy)
  320. if battler.restriction == 3
  321. target = $game_troop.random_target_enemy
  322. elsif battler.restriction == 2
  323. target = $game_party.random_target_actor
  324. else
  325. index = battler.current_action.target_index
  326. target = $game_party.smooth_target_actor(index)
  327. end
  328. end
  329. # 行動側バトラーがアクターの場合
  330. #到此一游(武器范围定义必须)
  331. battler.set_xrxs19_special_scope(battler.equip_element_set)
  332. if battler.is_a?(Game_Actor)
  333. if battler.restriction == 3
  334. target = $game_party.random_target_actor
  335. elsif battler.restriction == 2
  336. target = $game_troop.random_target_enemy
  337. elsif battler.current_action.scope_force == 3 # 己方单体
  338. index = battler.current_action.target_index
  339. target = $game_party.smooth_target_actor(index)
  340. else
  341. index = battler.current_action.target_index
  342. target = $game_troop.smooth_target_enemy(index)
  343. end
  344. end
  345. # 対象側バトラーの配列を設定
  346. case battler.current_action.scope_force
  347. when 2 # 敌方全体
  348. for enemy in $game_troop.enemies
  349. if enemy.exist?
  350. battler.target.push(enemy)
  351. end
  352. end
  353. battler.target.push(battler) if battler.current_action.self_inclusion
  354. when 4 # 己方全体
  355. for actor in $game_party.actors
  356. if actor.exist?
  357. battler.target.push(actor)
  358. end
  359. end
  360. battler.target -=[battler] if battler.current_action.self_exclusion
  361. when 7 # 使用者
  362. battler.target.push(battler)
  363. when 8 # 全域化
  364. for enemy in $game_troop.enemies
  365. if enemy.exist?
  366. battler.target.push(enemy)
  367. end
  368. end
  369. for actor in $game_party.actors
  370. if actor.exist?
  371. battler.target.push(actor)
  372. end
  373. end
  374. battler.target -=[battler] if battler.current_action.self_exclusion
  375. when 9 # 敌方随机
  376. for enemy in $game_troop.enemies
  377. if enemy.exist?
  378. battler.target = [$game_troop.random_target_enemy]
  379. end
  380. end
  381. battler.target.push(battler) if battler.current_action.self_inclusion
  382. when 10 # 己方随机
  383. for actor in $game_party.actors
  384. if actor.exist?
  385. battler.target.push(actor)
  386. end
  387. end
  388. battler.target -=[battler] if battler.current_action.self_exclusion
  389. battler.target = [battler.target[rand(battler.target.size)]]
  390. when 11 #对象随机
  391. battler.target = []
  392. for enemy in $game_troop.enemies
  393. if enemy.exist?
  394. battler.target.push(enemy)
  395. end
  396. end
  397. for actor in $game_party.actors
  398. if actor.exist?
  399. battler.target.push(actor)
  400. end
  401. end
  402. battler.target -=[battler] if battler.current_action.self_exclusion
  403. battler.target = [battler.target[rand(battler.target.size)]]
  404. else
  405. battler.target = [target]
  406. battler.target.push(battler) if battler.current_action.self_inclusion and
  407. battler.current_action.scope_force != 3 and
  408. battler.restriction != 2 and
  409. battler.restriction != 3
  410. end
  411. return true
  412. end
  413. # 防御の場合
  414. if battler.current_action.basic == 1
  415. # ステップ 3 に移行
  416. battler.phase = 3
  417. return false
  418. end
  419. # 逃げるの場合
  420. if battler.is_a?(Game_Enemy) and battler.current_action.basic == 2
  421. # 逃げる
  422. @help_window.set_text("逃げる", 1)
  423. @help_wait = @help_time
  424. battler.escape
  425. return

  426. # 逃げる
  427. # battler.escape
  428. # # ステップ 3 に移行
  429. # battler.phase = 3
  430. # return false
  431. end
  432. # 何もしないの場合
  433. if battler.current_action.basic == 3
  434. # ステップ 6 に移行
  435. battler.phase = 6
  436. return false
  437. end
  438. end
  439. #--------------------------------------------------------------------------
  440. # ● スキルアクション 準備
  441. #--------------------------------------------------------------------------
  442. def make_skill_action_preparation(battler)
  443. # スキルを取得
  444. @skill = $data_skills[battler.current_action.skill_id]
  445. # 連携スキルであるかどうか確認
  446. speller = synthe?(battler)
  447. # 強制アクションでなければ
  448. unless battler.current_action.forcing
  449. # SP 切れなどで使用できなくなった場合
  450. if speller == nil
  451. unless battler.skill_can_use?(@skill.id)
  452. # ステップ 6 に移行
  453. battler.phase = 6
  454. return false
  455. end
  456. end
  457. end
  458. # SP 消費
  459. temp = false
  460. if speller != nil
  461. for spell in speller
  462. if spell.current_action.spell_id == 0
  463. spell.sp -= @skill.sp_cost
  464. else
  465. spell.sp -= $data_skills[spell.current_action.spell_id].sp_cost
  466. end
  467. # ステータスウィンドウをリフレッシュ
  468. status_refresh(spell)
  469. end
  470. else
  471. #所谓HP消费看这里
  472. if((@skill.element_set).include?(($data_system.elements).index("HP消费")))
  473. battler.hp -= @skill.sp_cost
  474. else
  475. battler.sp -= @skill.sp_cost
  476. end
  477. # ステータスウィンドウをリフレッシュ
  478. status_refresh(battler)
  479. end

  480. # アニメーション ID を設定
  481. battler.anime1 = @skill.animation1_id
  482. battler.anime2 = @skill.animation2_id
  483. # コモンイベント ID を設定
  484. battler.event = @skill.common_event_id
  485. # 対象側バトラーを設定
  486. set_target_battlers(@skill.scope, battler)
  487. return true
  488. end
  489. #--------------------------------------------------------------------------
  490. # ● アイテムアクション 準備
  491. #--------------------------------------------------------------------------
  492. def make_item_action_preparation(battler)
  493. # アイテムを取得
  494. @item = $data_items[battler.current_action.item_id]
  495. # アイテム切れなどで使用できなくなった場合
  496. unless $game_party.item_can_use?(@item.id)
  497. # ステップ 6 に移行
  498. battler.phase = 6
  499. return false
  500. end
  501. # 消耗品の場合
  502. if @item.consumable
  503. # 使用したアイテムを 1 減らす
  504. $game_party.lose_item(@item.id, 1)
  505. end
  506. # アニメーション ID を設定
  507. battler.anime1 = @item.animation1_id
  508. battler.anime2 = @item.animation2_id
  509. # コモンイベント ID を設定
  510. battler.event = @item.common_event_id
  511. # 対象を決定
  512. index = battler.current_action.target_index
  513. target = $game_party.smooth_target_actor(index)
  514. # 対象側バトラーを設定
  515. set_target_battlers(@item.scope, battler)
  516. return true
  517. end
  518. #--------------------------------------------------------------------------
  519. # ● 基本アクション 結果作成
  520. #--------------------------------------------------------------------------
  521. def make_basic_action_result(battler)
  522. # 通常攻撃の効果を適用
  523. for target in battler.target
  524. target.attack_effect(battler)
  525. end
  526. end
  527. #--------------------------------------------------------------------------
  528. # ● スキルアクション 結果作成
  529. #--------------------------------------------------------------------------
  530. def make_skill_action_result(battler, plus_id)
  531. # スキルを取得
  532. @skill = $data_skills[battler.current_action.skill_id + plus_id]
  533. # 連携スキルであるかどうか確認
  534. speller = synthe?(battler)
  535. # スキルの効果を適用
  536. for target in battler.target
  537. if speller != nil
  538. damage = 0
  539. effective = false
  540. state_p = []
  541. state_m = []
  542. d_result = false
  543. for spell in speller
  544. if spell.current_action.spell_id != 0
  545. @skill = $data_skills[spell.current_action.spell_id + plus_id]
  546. end
  547. effective |= target.skill_effect(spell, @skill)
  548. if target.damage[spell].class != String
  549. d_result = true
  550. damage += target.damage[spell]
  551. elsif effective
  552. effect = target.damage[spell]
  553. end
  554. state_p += target.state_p[spell]
  555. state_m += target.state_m[spell]
  556. target.damage.delete(spell)
  557. target.state_p.delete(spell)
  558. target.state_m.delete(spell)
  559. end
  560. if d_result
  561. target.damage[battler] = damage
  562. elsif effective
  563. target.damage[battler] = effect
  564. end
  565. target.state_p[battler] = state_p
  566. target.state_m[battler] = state_m
  567. else
  568. target.skill_effect(battler, @skill)
  569. end
  570. end
  571. end
  572. #--------------------------------------------------------------------------
  573. # ● アイテムアクション 結果作成
  574. #--------------------------------------------------------------------------
  575. def make_item_action_result(battler)
  576. # アイテムを取得
  577. @item = $data_items[battler.current_action.item_id]
  578. # アイテムの効果を適用
  579. for target in battler.target
  580. target.item_effect(@item, battler)
  581. end
  582. end
  583. #--------------------------------------------------------------------------
  584. # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  585. #--------------------------------------------------------------------------
  586. def update_phase4_step4(battler)

  587. # カメラ設定
  588. if battler.target[0].is_a?(Game_Enemy) and battler.anime1 != 0
  589. camera_set(battler)
  590. end
  591. # 対象側アニメーション
  592. for target in battler.target
  593. target.animation.push([battler.anime2,
  594. (target.damage[battler] != "Miss")])
  595. unless battler.anime2 == 0
  596. battler.wait = 2 * target.total_damage[battler][0][6] - 1 +
  597. Graphics.frame_count % 2
  598. end
  599. end

  600. # ステップ 5 に移行
  601. battler.phase = 5
  602. end
  603. #--------------------------------------------------------------------------
  604. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  605. #--------------------------------------------------------------------------
  606. def update_phase4_step5(battler)


  607. next_step = true
  608. # ダメージ表示



  609. for target in battler.target
  610. # total_damage より全ダメージを算出
  611. total_damage = target.total_damage[battler].shift
  612. target.damage[battler] = total_damage[0]
  613. target.critical[battler] = total_damage[1]
  614. target.recover_hp[battler] = total_damage[2]
  615. target.recover_sp[battler] = total_damage[3]
  616. target.state_p[battler] = total_damage[4]
  617. target.state_m[battler] = total_damage[5]

  618. # ダメージ表示フラグをON
  619. target.damage_pop[battler] = true
  620. target.combohit_count if target.damage[battler].to_i > 0 and target.damage[battler] != "Miss"
  621. # 実際にダメージを与える
  622. target.damage_effect(battler, battler.current_action.kind,skill)
  623. # 余計なハッシュを削除
  624. target.recover_hp.delete(battler)
  625. target.recover_sp.delete(battler)
  626. target.state_p.delete(battler)
  627. target.state_m.delete(battler)
  628. # ダメージを全て与えきった場合
  629. if target.total_damage[battler].empty?
  630. # ターゲットへの全ダメージを削除
  631. target.total_damage.delete(battler)
  632. # 指定時間ウェイトする
  633. battler.wait = @damage_wait
  634. else
  635. # 指定時間ウェイトする
  636. next_step = false
  637. battler.wait = 2 * target.total_damage[battler][0][6]
  638. end
  639. # ステータスウィンドウをリフレッシュ
  640. status_refresh(target)
  641. end
  642. if next_step
  643. # ステップ 6 に移行
  644. battler.phase = 6
  645. end




  646. end
  647. #--------------------------------------------------------------------------
  648. # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  649. #--------------------------------------------------------------------------
  650. def update_phase4_step6(battler)
  651. # カメラを戻す
  652. # SkillLearning
  653. if battler.target[0].is_a?(Game_Actor) and battler.current_action.kind == 1
  654. for target in battler.target
  655. skill_learning(target, target.class_id,
  656. battler.current_action.skill_id)
  657. end
  658. end
  659. # アクション強制対象のバトラーをクリア
  660. if battler.current_action.forcing == true and
  661. battler.current_action.force_kind == 0 and
  662. battler.current_action.force_basic == 0 and
  663. battler.current_action.force_skill_id == 0
  664. $game_temp.forcing_battler = nil
  665. battler.current_action.forcing = false
  666. end
  667. refresh_phase(battler)
  668. speller = synthe?(battler)
  669. if speller != nil
  670. for spell in speller
  671. if spell != battler
  672. refresh_phase(spell)
  673. end
  674. end
  675. synthe_delete(speller)
  676. end
  677. # コモンイベント ID が有効の場合
  678. if battler.event > 0
  679. # イベントをセットアップ
  680. common_event = $data_common_events[battler.event]
  681. $game_system.battle_interpreter.setup(common_event.list, 0)
  682. end
  683. act = 0
  684. for actor in $game_party.actors + $game_troop.enemies

  685. if actor.movable?
  686. act += 1
  687. end
  688. end
  689. if @turn_cnt >= act and act > 0
  690. @turn_cnt %= act
  691. $game_temp.battle_turn += 1
  692. # バトルイベントの全ページを検索
  693. for index in 0...$data_troops[@troop_id].pages.size
  694. # イベントページを取得
  695. page = $data_troops[@troop_id].pages[index]
  696. # このページのスパンが [ターン] の場合
  697. if page.span == 1
  698. # 実行済みフラグをクリア
  699. $game_temp.battle_event_flags[index] = false
  700. end
  701. end


  702. end
  703. battler.phase = 1
  704. @action_battlers.delete(battler)
  705. end
  706. #--------------------------------------------------------------------------
  707. # ● メイン処理
  708. #--------------------------------------------------------------------------
  709. alias xrxs_bp19_main main
  710. def main
  711. # コンボヒットウィンドウを作成
  712. @combohit_window = Window_ComboHit.new
  713. # 呼び戻す
  714. xrxs_bp19_main
  715. # ウィンドウを解放
  716. @combohit_window.dispose
  717. # コンボクリア
  718. $game_party.actors.each {|actor| actor.combohit_clear}
  719. end
  720. #--------------------------------------------------------------------------
  721. # ● フレーム更新
  722. #--------------------------------------------------------------------------
  723. alias xrxs_bp19_update update
  724. def update
  725. # フレーム更新
  726. @combohit_window.update
  727. $game_party.actors.each {|actor| actor.combohit_update}
  728. $game_troop.enemies.each{|enemy| enemy.combohit_update}
  729. # 呼び戻す
  730. xrxs_bp19_update
  731. end
  732. #--------------------------------------------------------------------------
  733. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  734. #--------------------------------------------------------------------------
  735. alias xrxs_bp19_update_phase4_step5 update_phase4_step5
  736. def update_phase4_step5(battler)
  737. # 呼び戻す
  738. xrxs_bp19_update_phase4_step5(battler)
  739. # コンボ数の最も高いターゲットを探す
  740. max = 0
  741. hit_target = nil
  742. for target in battler.target
  743. if target.combohit > max
  744. max = target.combohit
  745. hit_target = target
  746. end
  747. end
  748. if max >= 2 and !hit_target.nil?
  749. @combohit_window.x = hit_target.is_a?(Game_Enemy) ? 512 : 512
  750. @combohit_window.refresh(max, hit_target.combohit_duration)
  751. end

  752. end
  753. end

  754. #==============================================================================
  755. # ■ Game_Battler (分割定義 1)
  756. #------------------------------------------------------------------------------
  757. #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
  758. # スのスーパークラスとして使用されます。
  759. #==============================================================================

  760. class Game_Battler
  761. #--------------------------------------------------------------------------
  762. # ● 公開インスタンス変数追加
  763. #--------------------------------------------------------------------------
  764. attr_accessor :total_damage # 総ダメージ
  765. #--------------------------------------------------------------------------
  766. # ● オブジェクト初期化
  767. #--------------------------------------------------------------------------
  768. alias :initialize_straight :initialize
  769. def initialize
  770. initialize_straight
  771. @total_damage = {}
  772. end
  773. #--------------------------------------------------------------------------
  774. # ● 存在判定
  775. #--------------------------------------------------------------------------
  776. def exist?
  777. return (not @hidden and (@hp > 0 or @immortal or not @total_damage.empty?))
  778. end
  779. #--------------------------------------------------------------------------
  780. # ● 残HP予測
  781. #--------------------------------------------------------------------------
  782. def rest_hp
  783. # rest_hp に現HPを代入
  784. rest_hp = @hp
  785. # バトラーが受ける全ダメージをrest_hpに反映させる
  786. for total in @total_damage
  787. for pre_damage in total[1]
  788. if pre_damage[0].is_a?(Numeric)
  789. rest_hp -= pre_damage[0]
  790. end
  791. if pre_damage[2].is_a?(Numeric)
  792. rest_hp += pre_damage[2]
  793. end
  794. end
  795. end
  796. return rest_hp
  797. end
  798. end
  799. #--------------------------------------------------------------------------
  800. # ● 公開インスタンス変数
  801. #--------------------------------------------------------------------------
  802. def combohit
  803. @combohit = 0 if @combohit.nil?
  804. return @combohit
  805. end
  806. def combohit_duration
  807. @combohit_duration = 0 if @combohit_duration.nil?
  808. return @combohit_duration
  809. end
  810. #--------------------------------------------------------------------------
  811. # ○ コンボヒットを更新
  812. #--------------------------------------------------------------------------
  813. def combohit_update
  814. # 例外補正
  815. @combohit_duration = 0 if @combohit_duration.nil?
  816. # カウント
  817. if @combohit_duration > 0
  818. @combohit_duration -= 1
  819. # のけぞり時間終了時、コンボ数をリセット
  820. @combohit = 0 if @combohit_duration == 0
  821. end
  822. end
  823. #--------------------------------------------------------------------------
  824. # ○ コンボヒットをカウント
  825. #--------------------------------------------------------------------------
  826. def combohit_count
  827. # 例外補正
  828. @combohit = 0 if @combohit.nil?
  829. # カウント
  830. @combohit += 1
  831. @combohit_duration = XRXS_BP19::COMBOHIT_DURATION
  832. end
  833. #--------------------------------------------------------------------------
  834. # ○ コンボヒットをクリア
  835. #--------------------------------------------------------------------------
  836. def combohit_clear
  837. @combohit = nil
  838. @combohit_duration = nil
  839. end
  840. #==============================================================================
  841. # ■ Game_Actor
  842. #------------------------------------------------------------------------------
  843. #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
  844. # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
  845. #==============================================================================

  846. class Game_Actor < Game_Battler
  847. #--------------------------------------------------------------------------
  848. # ● 公開インスタンス変数
  849. #--------------------------------------------------------------------------
  850. def change_weapon(id)
  851. @weapon_id = id
  852. end
  853. end

  854. #==============================================================================
  855. # ■ Sprite_Battler
  856. #------------------------------------------------------------------------------
  857. #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
  858. # スプライトの状態を自動的に変化させます。
  859. #==============================================================================

  860. class Sprite_Battler < RPG::Sprite
  861. #--------------------------------------------------------------------------
  862. # ● フレーム更新
  863. #--------------------------------------------------------------------------
  864. def update
  865. super
  866. # バトラーが nil の場合
  867. if @battler == nil
  868. self.bitmap = nil
  869. loop_animation(nil)
  870. return
  871. end
  872. # ファイル名か色相が現在のものと異なる場合
  873. if @battler.battler_name != @battler_name or
  874. @battler.battler_hue != @battler_hue
  875. # ビットマップを取得、設定
  876. @battler_name = @battler.battler_name
  877. @battler_hue = @battler.battler_hue
  878. self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  879. @width = bitmap.width
  880. @height = bitmap.height
  881. self.ox = @width / 2
  882. self.oy = @height
  883. if @battler.is_a?(Game_Enemy)
  884. @battler.height = @height
  885. end
  886. # 戦闘不能または隠れ状態なら不透明度を 0 にする
  887. if @battler.dead? or @battler.hidden
  888. self.opacity = 0
  889. end
  890. end
  891. # アニメーション ID が現在のものと異なる場合
  892. if @battler.state_animation_id != @state_animation_id
  893. @state_animation_id = @battler.state_animation_id
  894. # if synthe?(battler)
  895. loop_animation($data_animations[@state_animation_id])
  896. # end
  897. end
  898. # 表示されるべきアクターの場合
  899. # if @battler.is_a?(Game_Actor) and @battler_visible
  900. # メインフェーズでないときは不透明度をやや下げる
  901. # if $game_temp.battle_main_phase
  902. # self.opacity += 3 if self.opacity < 255
  903. # else
  904. # self.opacity -= 3 if self.opacity > 207
  905. # end
  906. # end
  907. # 明滅
  908. if @battler.blink
  909. blink_on
  910. else
  911. blink_off
  912. end
  913. # 不可視の場合
  914. unless @battler_visible
  915. # 出現
  916. if not @battler.hidden and not @battler.dead? and
  917. (@battler.damage.size < 2 or @battler.damage_pop.size < 2)
  918. appear
  919. @battler_visible = true
  920. end
  921. end
  922. # ダメージ
  923. for battler in @battler.damage_pop
  924. if battler[0].class == Array
  925. if battler[0][1] >= 0
  926. $scene.skill_se
  927. else
  928. $scene.levelup_se
  929. end
  930. damage(@battler.damage[battler[0]], false, 2)
  931. else
  932. damage(@battler.damage[battler[0]], @battler.critical[battler[0]])
  933. end
  934. if @battler.damage_sp.include?(battler[0])
  935. damage(@battler.damage_sp[battler[0]],
  936. @battler.critical[battler[0]], 1)
  937. @battler.damage_sp.delete(battler[0])
  938. end
  939. @battler.damage_pop.delete(battler[0])
  940. @battler.damage.delete(battler[0])
  941. @battler.critical.delete(battler[0])
  942. end
  943. # 可視の場合
  944. if @battler_visible
  945. # 逃走
  946. if @battler.hidden
  947. $game_system.se_play($data_system.escape_se)
  948. escape
  949. @battler_visible = false
  950. end
  951. # 白フラッシュ
  952. if @battler.white_flash
  953. whiten
  954. @battler.white_flash = false
  955. end
  956. # アニメーション
  957. unless @battler.animation.empty?
  958. for animation in @battler.animation.reverse
  959. animation($data_animations[animation[0]], animation[1])
  960. @battler.animation.delete(animation)
  961. end
  962. end
  963. # コラプス
  964. if @battler.total_damage.empty? and @battler.dead?
  965. if $scene.dead_ok?(@battler)
  966. if @battler.is_a?(Game_Enemy)
  967. $game_system.se_play($data_system.enemy_collapse_se)
  968. else
  969. $game_system.se_play($data_system.actor_collapse_se)
  970. end
  971. collapse
  972. @battler_visible = false
  973. end
  974. end
  975. end
  976. # スプライトの座標を設定
  977. self.x = @battler.screen_x
  978. self.y = @battler.screen_y
  979. self.z = @battler.screen_z
  980. if @battler.is_a?(Game_Enemy)
  981. self.zoom_x = @battler.real_zoom * @battler.zoom
  982. self.zoom_y = @battler.real_zoom * @battler.zoom
  983. end
  984. end
  985. end
复制代码

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

本版积分规则

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

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

GMT+8, 2024-11-25 21:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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