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

Project1

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

让横版战斗系统的 战斗/逃跑 的视窗出现(不是原创)

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-5-31
帖子
89
跳转到指定楼层
1
发表于 2007-6-10 22:01:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
  1. #==============================================================================
  2. # ++ 纵リスト型バトルステータス ver. 1.10 ++
  3. #  Script by パラ犬
  4. #  http://2d6.parasite.jp/
  5. #------------------------------------------------------------------------------
  6. # バトルステータス画面をサイドビューらしい纵型表示にします。
  7. #==============================================================================

  8. module PARA_CTB
  9.   
  10.   # HP槽左边的颜色
  11.   HP_COLOR_LEFT = Color.new(128、0、0、255)
  12.   # HP槽右边的颜色
  13.   HP_COLOR_RIGHT= Color.new(255、0、0、255)
  14.   # SP槽左边的颜色
  15.   SP_COLOR_LEFT = Color.new(0、0、128、255)
  16.   # SP槽右边的颜色
  17.   SP_COLOR_RIGHT= Color.new(0、0、255、255)
  18.   
  19.   # 各种条边框的颜色
  20.   FRAME_COLOR = Color.new(192、192、192、255)
  21.   # 表范围的粗
  22.   FRAME_BORDER = 1
  23.   # 各种条边框的底色
  24.   BACK_COLOR = Color.new(128、128、128、128)

  25.   # 角色名称的字号(数字越大字越大)
  26.   NAME_FONT_SIZE =16
  27.   # HP/SP的字号
  28.   HPSP_FONT_SIZE =18
  29.   # 敌人名称的字号
  30.   ENEMY_FONT_SIZE =16
  31.   # 是否显示对大HP/MP( 显示true / 不显示false )
  32.   MAX_DRAW = false
  33.   
  34.   # バトルメンバーの最大数(多人数PTスクリプトを导入している时に设定)
  35.   PARTY_SIZE = 4
  36.   
  37.   # エネミー名をグループ化( true / false )
  38.   # (trueにすると“ゴースト 2”のようにまとめて表示します)
  39.   ENEMY_GROUPING = false

  40.   # 在敌人窗口中显示的东西( 0:只显示名字 / 1:显示HP)
  41.   # (エネミー名をグループ化している场合は无效)
  42.   ENEMY_DRAWING_MATER = 0
  43.   
  44.   # actor的帮助窗口表示HP/SP量规( true / false )
  45.   HELP_DRAWING_MATER_ACTOR = false
  46.   # 是否在选择攻击对象的时候显示敌人的HP/MP和状态(预设为显示(true))
  47.   HELP_DRAWING_MATER_ENEMY = false
  48.   
  49.   # 是否在一个地方强制显示攻击对话框(攻击框就显示在一个地方,预设为true(是))
  50.   #(他の方のサイドビュースクリプトを并用していて
  51.   # コマンドウインドウの位置がどうしても不自然になるならtrueに)
  52.   # ※trueにしても适用されない场合、このスクリプトを
  53.   #  サイドビューよりも下に置いてみてください
  54.   WINDOWPOS_CHANGE = false
  55.   WINDOWPOS_X = 100   # X座标
  56.   WINDOWPOS_Y = 320   # Y座标

  57.   # 战斗窗口的不透明度,数字越高透明度越差
  58.   WINDOW_OPACITY = 160
  59.   
  60. end

  61. # ↑ 设定项目ここまで
  62. #------------------------------------------------------------------------------

  63. #==============================================================================
  64. # ■ Scene_Battle
  65. #==============================================================================

  66. class Scene_Battle

  67.   #--------------------------------------------------------------------------
  68.   # ● メイン处理
  69.   #--------------------------------------------------------------------------
  70.   alias main_ctb main
  71.   def main
  72.     # エネミー名ウインドウを作成
  73.     @status_window2 = Window_BattleStatus_enemy.new
  74.     main_ctb
  75.     # エネミー名ウインドウを破弃
  76.     @status_window2.dispose
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● フレーム更新
  80.   #--------------------------------------------------------------------------
  81.   alias ctb_update update
  82.   def update
  83.     # バトルイベント实行中の场合
  84.     if $game_system.battle_interpreter.running?
  85.       # インタプリタを更新
  86.       $game_system.battle_interpreter.update
  87.       # アクションを强制されているバトラーが存在しない场合
  88.       if $game_temp.forcing_battler == nil
  89.         # バトルイベントの实行が终わった场合
  90.         unless $game_system.battle_interpreter.running?
  91.           # 战斗继续の场合、バトルイベントのセットアップを再实行
  92.           unless judge
  93.             setup_battle_event
  94.           end
  95.         end
  96.         # アフターバトルフェーズでなければ
  97.         if @phase != 5
  98.           # エネミー名リストを更新
  99.           @status_window2.refresh
  100.         end
  101.       end
  102.     end
  103.     ctb_update
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● アクターコマンドウィンドウのセットアップ
  107.   #--------------------------------------------------------------------------
  108.   alias phase3_setup_command_window_ctb phase3_setup_command_window
  109.   def phase3_setup_command_window
  110.     @actor_command_window.back_opacity = PARA_CTB::WINDOW_OPACITY
  111.     phase3_setup_command_window_ctb
  112.     if PARA_CTB::WINDOWPOS_CHANGE
  113.       # アクターコマンドウィンドウの位置を设定
  114.       @actor_command_window.x = PARA_CTB::WINDOWPOS_X
  115.       @actor_command_window.y = PARA_CTB::WINDOWPOS_Y
  116.       # ステータスウインドウに隐れないように
  117.       @actor_command_window.z = 9999
  118.     end
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● フレーム更新 (プレバトルフェーズ)
  122.   #--------------------------------------------------------------------------
  123.   alias update_phase1_ctb update_phase1
  124.   def update_phase1
  125.     # エネミー名リストを更新
  126.     @status_window2.refresh
  127.     update_phase1_ctb
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  131.   #--------------------------------------------------------------------------
  132.   alias update_phase4_step6_ctb update_phase4_step6
  133.   def update_phase4_step6
  134.     # エネミー名リストを更新
  135.     @status_window2.refresh
  136.     update_phase4_step6_ctb
  137.   end
  138. end

  139. #==============================================================================
  140. # ■ Window_BattleStatus
  141. #==============================================================================

  142. class Window_BattleStatus < Window_Base
  143.   #--------------------------------------------------------------------------
  144.   # ● オブジェクト初期化
  145.   #--------------------------------------------------------------------------
  146.   def initialize
  147.     super(160、320、480、160)
  148.     self.contents = Bitmap.new(width - 32、height - 32)
  149.     @level_up_flags = []
  150.     for i in 0..$game_party.actors.size
  151.       @level_up_flags.push(false)
  152.     end
  153.     @before_hp = []
  154.     @before_sp = []
  155.     @before_states = []
  156.     @now_hp = []
  157.     @now_sp = []
  158.     @now_states = []
  159.     refresh
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ● リフレッシュ
  163.   #--------------------------------------------------------------------------
  164.   def refresh
  165.     @item_max = $game_party.actors.size
  166.     for i in 0...$game_party.actors.size
  167.       actor = $game_party.actors[i]
  168.       line_height = 120 / PARA_CTB::PARTY_SIZE
  169.       actor_y = i * line_height + 4
  170.       # 现在のステータスを配列に
  171.       @now_hp[i] = actor.hp
  172.       @now_sp[i] = actor.sp
  173.       @now_states[i] = actor.states
  174.       # レベルアップ
  175.       if @level_up_flags[i]
  176.         self.contents.fill_rect(344、actor_y、100、32、Color.new(0、0、0、0))
  177.         self.contents.font.color = normal_color
  178.         self.contents.draw_text(344、actor_y、120、32、"LEVEL UP!")
  179.       end
  180.     end
  181.     # バトルステータスの轻量化处理
  182.     # ステータスの配列が变化したときのみ描画处理
  183.     if @before_hp == nil or @before_sp == nil or @before_states == nil or @before_hp != @now_hp or @before_sp != @now_sp or @before_states != @now_states
  184.       self.contents.clear
  185.       for i2 in 0...$game_party.actors.size
  186.         actor = $game_party.actors[i2]
  187.         line_height = 120 / PARA_CTB::PARTY_SIZE
  188.         actor_y = i2 * line_height + 4
  189.         self.contents.font.size = PARA_CTB::NAME_FONT_SIZE
  190.         # 名前を描画
  191.         draw_actor_name(actor、4、actor_y+16-PARA_CTB::NAME_FONT_SIZE)
  192.         # HPを描画
  193.         hp_color1 = PARA_CTB::HP_COLOR_LEFT
  194.         hp_color2 = PARA_CTB::HP_COLOR_RIGHT
  195.         draw_meter(actor.hp、actor.maxhp、125、actor_y+14、80、8、hp_color1、hp_color2)
  196.         draw_actor_hp(actor、102、actor_y+16-PARA_CTB::HPSP_FONT_SIZE、100)
  197.         # SPを描画
  198.         sp_color1 = PARA_CTB::SP_COLOR_LEFT
  199.         sp_color2 = PARA_CTB::SP_COLOR_RIGHT
  200.         draw_meter(actor.sp、actor.maxsp、245、actor_y+14、80、8、sp_color1、sp_color2)
  201.         draw_actor_sp(actor、222、actor_y+16-PARA_CTB::HPSP_FONT_SIZE、100)
  202.         # 变化后のステータスを配列に
  203.         @before_hp[i2] = actor.hp
  204.         @before_sp[i2] = actor.sp
  205.         @before_states[i2] = actor.states
  206.         # レベルアップ
  207.         if @level_up_flags[i2] == false
  208.           draw_actor_state(actor、344、actor_y)
  209.         end
  210.       end
  211.     end
  212.    
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   # ● フレーム更新
  216.   #--------------------------------------------------------------------------
  217.   def update
  218.     super
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● HP の描画
  222.   #     actor : アクター
  223.   #     x     : 描画先 X 座标
  224.   #     y     : 描画先 Y 座标
  225.   #     width : 描画先の幅
  226.   #--------------------------------------------------------------------------
  227.   def draw_actor_hp(actor、x、y、width = 144)
  228.     # 文字列 "HP" を描画
  229.     self.contents.font.color = system_color
  230.     self.contents.font.size = 16
  231.     self.contents.draw_text(x、y+2、32、32、$data_system.words.hp)
  232.     self.contents.font.color = normal_color
  233.     self.contents.font.size = PARA_CTB::HPSP_FONT_SIZE
  234.     if PARA_CTB::MAX_DRAW
  235.       # MaxHP を描画
  236.       self.contents.draw_text(x、y、width、32、actor.maxhp.to_s、2)
  237.       text_size = self.contents.text_size(actor.maxhp.to_s)
  238.       text_x = x + width - text_size.width - 12
  239.       self.contents.draw_text(text_x、y、12、32、"/"、1)
  240.       # HP を描画
  241.       self.contents.font.color = actor.hp == 0 ? knockout_color :
  242.         actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  243.       text_x = text_x - text_size.width
  244.       self.contents.draw_text(text_x、y、text_size.width、32、actor.hp.to_s、2)
  245.     else
  246.       self.contents.font.color = actor.hp == 0 ? knockout_color :
  247.         actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  248.       self.contents.draw_text(x、y、width、32、actor.hp.to_s、2)
  249.     end
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● SP の描画
  253.   #     actor : アクター
  254.   #     x     : 描画先 X 座标
  255.   #     y     : 描画先 Y 座标
  256.   #     width : 描画先の幅
  257.   #--------------------------------------------------------------------------
  258.   def draw_actor_sp(actor、x、y、width = 144)
  259.     # 文字列 "SP" を描画
  260.     self.contents.font.color = system_color
  261.     self.contents.font.size = 16
  262.     self.contents.draw_text(x、y+2、32、32、$data_system.words.sp)
  263.     self.contents.font.color = normal_color
  264.     self.contents.font.size = PARA_CTB::HPSP_FONT_SIZE
  265.     if PARA_CTB::MAX_DRAW
  266.     # MaxSP を描画
  267.       self.contents.draw_text(x、y、width、32、actor.maxsp.to_s、2)
  268.       text_size = self.contents.text_size(actor.maxsp.to_s)
  269.       text_x = x + width - text_size.width - 12
  270.       self.contents.draw_text(text_x、y、12、32、"/"、1)
  271.       # SP を描画
  272.       self.contents.font.color = actor.sp == 0 ? knockout_color :
  273.         actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  274.       text_x = text_x - text_size.width
  275.       self.contents.draw_text(text_x、y、text_size.width、32、actor.sp.to_s、2)
  276.     else
  277.       self.contents.font.color = actor.sp == 0 ? knockout_color :
  278.         actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  279.       self.contents.draw_text(x、y、width、32、actor.sp.to_s、2)
  280.     end
  281.   end
  282. end

  283. #==============================================================================
  284. # □ 敌の名前を表示するウインドウ
  285. #==============================================================================

  286. class Window_BattleStatus_enemy < Window_Base
  287.   #--------------------------------------------------------------------------
  288.   # ○ オブジェクト初期化
  289.   #--------------------------------------------------------------------------
  290.   def initialize
  291.     super(0、320、160、160)
  292.     self.contents = Bitmap.new(width - 32、height - 32)
  293.     refresh
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ○ リフレッシュ
  297.   #--------------------------------------------------------------------------
  298.   def refresh
  299.     self.contents.clear
  300.     self.contents.font.color = normal_color
  301.     self.contents.font.size = PARA_CTB::ENEMY_FONT_SIZE
  302.     @exist_enemies = []
  303.     if $game_troop.enemies != nil
  304.       if PARA_CTB::ENEMY_GROUPING
  305.         ememy_list = []
  306.         ememy_list_index = []
  307.         # エネミーをグループ化
  308.         for i in 0...$game_troop.enemies.size
  309.           enemy = $game_troop.enemies[i]
  310.           if enemy.exist?
  311.             if ememy_list.include?(enemy.name)
  312.               ememy_list_index[ememy_list.index(enemy.name)] += 1
  313.             else
  314.               # エネミー名を记录
  315.               ememy_list.push(enemy.name)
  316.               ememy_list_index[ememy_list.index(enemy.name)] = 1
  317.             end
  318.           end
  319.         end
  320.         # エネミーの名前と数を描画
  321.         enemy_index = 0
  322.         for enemy_name in ememy_list
  323.           enemy_y = enemy_index * (PARA_CTB::ENEMY_FONT_SIZE+6) + 4
  324.           if ememy_list_index[enemy_index] > 1
  325.             enemy_name = enemy_name + " " + ememy_list_index[enemy_index].to_s
  326.           end
  327.           self.contents.draw_text(4、enemy_y、160、20、enemy_name)
  328.           enemy_index += 1
  329.         end
  330.       else
  331.         # エネミーの名前を描画
  332.         enemy_index = 0
  333.         for i in 0...$game_troop.enemies.size
  334.           enemy = $game_troop.enemies[i]
  335.           if enemy.exist?
  336.             @exist_enemies.push(enemy)
  337.             line_height = PARA_CTB::ENEMY_FONT_SIZE + 6
  338.             if PARA_CTB::ENEMY_DRAWING_MATER != 0
  339.               line_height += 10
  340.             end
  341.             enemy_y = enemy_index * line_height + 4
  342.             self.contents.draw_text(4、enemy_y、160、20、enemy.name)
  343.             enemy_index += 1
  344.             # HPゲージを描画
  345.             if PARA_CTB::ENEMY_DRAWING_MATER == 1
  346.               hp_color1 = PARA_CTB::HP_COLOR_LEFT
  347.               hp_color2 = PARA_CTB::HP_COLOR_RIGHT
  348.               y = enemy_y + PARA_CTB::ENEMY_FONT_SIZE + 3
  349.               draw_meter(enemy.hp、enemy.maxhp、4、y、80、8、hp_color1、hp_color2)
  350.             end
  351.           end
  352.         end
  353.       end
  354.     end
  355.   end
  356. end

  357. #==============================================================================
  358. # ■ Window_Base
  359. #==============================================================================

  360. class Window_Base < Window
  361.   
  362.   #--------------------------------------------------------------------------
  363.   # ○ ゲージを描画
  364.   #--------------------------------------------------------------------------
  365.   def draw_meter(now、max、x、y、width、height、start_color、end_color=start_color )
  366.     self.contents.fill_rect(x、y、width、height、PARA_CTB::FRAME_COLOR)
  367.     self.contents.fill_rect(x+PARA_CTB::FRAME_BORDER、y+PARA_CTB::FRAME_BORDER、width-PARA_CTB::FRAME_BORDER*2、height-PARA_CTB::FRAME_BORDER*2、PARA_CTB::BACK_COLOR)
  368.     now = now > max ? max : now
  369.     percentage = max != 0 ? (width-2) * now / max.to_f : 0
  370.     if start_color == end_color
  371.       self.contents.fill_rect(x+1、y+1、percentage、height-2、start_color)
  372.     else
  373.       for i in 1..percentage
  374.         r = start_color.red + (end_color.red - start_color.red) / percentage * i
  375.         g = start_color.green + (end_color.green - start_color.green) / percentage * i
  376.         b = start_color.blue + (end_color.blue - start_color.blue) / percentage * i
  377.         a = start_color.alpha + (end_color.alpha - start_color.alpha) / percentage * i
  378.         self.contents.fill_rect(x+i、y+1、1、height-2、Color.new(r、g、b、a))
  379.       end
  380.     end
  381.   end
  382. end

  383. #==============================================================================
  384. # ■ Window_Help
  385. #==============================================================================

  386. class Window_Help < Window_Base
  387.   #--------------------------------------------------------------------------
  388.   # ● アクター设定
  389.   #     actor : ステータスを表示するアクター
  390.   #--------------------------------------------------------------------------
  391.   alias set_actor_ctb set_actor
  392.   def set_actor(actor)
  393.     if PARA_CTB::HELP_DRAWING_MATER_ACTOR
  394.       self.contents.clear
  395.       draw_actor_name(actor、4、0)
  396.       draw_actor_state(actor、140、0)
  397.       hp_color1 = PARA_CTB::HP_COLOR_LEFT
  398.       hp_color2 = PARA_CTB::HP_COLOR_RIGHT
  399.       draw_meter(actor.hp、actor.maxhp、316、18、112、8、hp_color1、hp_color2)
  400.       draw_actor_hp(actor、284、0)
  401.       sp_color1 = PARA_CTB::SP_COLOR_LEFT
  402.       sp_color2 = PARA_CTB::SP_COLOR_RIGHT
  403.       draw_meter(actor.sp、actor.maxsp、492、18、112、8、sp_color1、sp_color2)
  404.       draw_actor_sp(actor、460、0)
  405.       @actor = actor
  406.       @text = nil
  407.       self.visible = true
  408.     else
  409.       set_actor_ctb(actor)
  410.     end
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # ● エネミー设定
  414.   #     enemy : 名前とステートを表示するエネミー
  415.   #--------------------------------------------------------------------------
  416.   alias set_enemy_ctb set_enemy
  417.   def set_enemy(enemy)
  418.     if PARA_CTB::HELP_DRAWING_MATER_ENEMY
  419.       self.contents.clear
  420.       draw_actor_name(enemy、4、0)
  421.       draw_actor_state(enemy、140、0)
  422.       hp_color1 = PARA_CTB::HP_COLOR_LEFT
  423.       hp_color2 = PARA_CTB::HP_COLOR_RIGHT
  424.       draw_meter(enemy.hp、enemy.maxhp、316、18、112、8、hp_color1、hp_color2)
  425.       draw_actor_hp(enemy、284、0)
  426.       sp_color1 = PARA_CTB::SP_COLOR_LEFT
  427.       sp_color2 = PARA_CTB::SP_COLOR_RIGHT
  428.       draw_meter(enemy.sp、enemy.maxsp、492、18、112、8、sp_color1、sp_color2)
  429.       draw_actor_sp(enemy、460、0)
  430.       self.visible = true
  431.     else
  432.       set_enemy_ctb(enemy)
  433.     end
  434.   end
  435. end
复制代码

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-5-31
帖子
89
2
 楼主| 发表于 2007-6-10 22:01:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
  1. #==============================================================================
  2. # ++ 纵リスト型バトルステータス ver. 1.10 ++
  3. #  Script by パラ犬
  4. #  http://2d6.parasite.jp/
  5. #------------------------------------------------------------------------------
  6. # バトルステータス画面をサイドビューらしい纵型表示にします。
  7. #==============================================================================

  8. module PARA_CTB
  9.   
  10.   # HP槽左边的颜色
  11.   HP_COLOR_LEFT = Color.new(128、0、0、255)
  12.   # HP槽右边的颜色
  13.   HP_COLOR_RIGHT= Color.new(255、0、0、255)
  14.   # SP槽左边的颜色
  15.   SP_COLOR_LEFT = Color.new(0、0、128、255)
  16.   # SP槽右边的颜色
  17.   SP_COLOR_RIGHT= Color.new(0、0、255、255)
  18.   
  19.   # 各种条边框的颜色
  20.   FRAME_COLOR = Color.new(192、192、192、255)
  21.   # 表范围的粗
  22.   FRAME_BORDER = 1
  23.   # 各种条边框的底色
  24.   BACK_COLOR = Color.new(128、128、128、128)

  25.   # 角色名称的字号(数字越大字越大)
  26.   NAME_FONT_SIZE =16
  27.   # HP/SP的字号
  28.   HPSP_FONT_SIZE =18
  29.   # 敌人名称的字号
  30.   ENEMY_FONT_SIZE =16
  31.   # 是否显示对大HP/MP( 显示true / 不显示false )
  32.   MAX_DRAW = false
  33.   
  34.   # バトルメンバーの最大数(多人数PTスクリプトを导入している时に设定)
  35.   PARTY_SIZE = 4
  36.   
  37.   # エネミー名をグループ化( true / false )
  38.   # (trueにすると“ゴースト 2”のようにまとめて表示します)
  39.   ENEMY_GROUPING = false

  40.   # 在敌人窗口中显示的东西( 0:只显示名字 / 1:显示HP)
  41.   # (エネミー名をグループ化している场合は无效)
  42.   ENEMY_DRAWING_MATER = 0
  43.   
  44.   # actor的帮助窗口表示HP/SP量规( true / false )
  45.   HELP_DRAWING_MATER_ACTOR = false
  46.   # 是否在选择攻击对象的时候显示敌人的HP/MP和状态(预设为显示(true))
  47.   HELP_DRAWING_MATER_ENEMY = false
  48.   
  49.   # 是否在一个地方强制显示攻击对话框(攻击框就显示在一个地方,预设为true(是))
  50.   #(他の方のサイドビュースクリプトを并用していて
  51.   # コマンドウインドウの位置がどうしても不自然になるならtrueに)
  52.   # ※trueにしても适用されない场合、このスクリプトを
  53.   #  サイドビューよりも下に置いてみてください
  54.   WINDOWPOS_CHANGE = false
  55.   WINDOWPOS_X = 100   # X座标
  56.   WINDOWPOS_Y = 320   # Y座标

  57.   # 战斗窗口的不透明度,数字越高透明度越差
  58.   WINDOW_OPACITY = 160
  59.   
  60. end

  61. # ↑ 设定项目ここまで
  62. #------------------------------------------------------------------------------

  63. #==============================================================================
  64. # ■ Scene_Battle
  65. #==============================================================================

  66. class Scene_Battle

  67.   #--------------------------------------------------------------------------
  68.   # ● メイン处理
  69.   #--------------------------------------------------------------------------
  70.   alias main_ctb main
  71.   def main
  72.     # エネミー名ウインドウを作成
  73.     @status_window2 = Window_BattleStatus_enemy.new
  74.     main_ctb
  75.     # エネミー名ウインドウを破弃
  76.     @status_window2.dispose
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● フレーム更新
  80.   #--------------------------------------------------------------------------
  81.   alias ctb_update update
  82.   def update
  83.     # バトルイベント实行中の场合
  84.     if $game_system.battle_interpreter.running?
  85.       # インタプリタを更新
  86.       $game_system.battle_interpreter.update
  87.       # アクションを强制されているバトラーが存在しない场合
  88.       if $game_temp.forcing_battler == nil
  89.         # バトルイベントの实行が终わった场合
  90.         unless $game_system.battle_interpreter.running?
  91.           # 战斗继续の场合、バトルイベントのセットアップを再实行
  92.           unless judge
  93.             setup_battle_event
  94.           end
  95.         end
  96.         # アフターバトルフェーズでなければ
  97.         if @phase != 5
  98.           # エネミー名リストを更新
  99.           @status_window2.refresh
  100.         end
  101.       end
  102.     end
  103.     ctb_update
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● アクターコマンドウィンドウのセットアップ
  107.   #--------------------------------------------------------------------------
  108.   alias phase3_setup_command_window_ctb phase3_setup_command_window
  109.   def phase3_setup_command_window
  110.     @actor_command_window.back_opacity = PARA_CTB::WINDOW_OPACITY
  111.     phase3_setup_command_window_ctb
  112.     if PARA_CTB::WINDOWPOS_CHANGE
  113.       # アクターコマンドウィンドウの位置を设定
  114.       @actor_command_window.x = PARA_CTB::WINDOWPOS_X
  115.       @actor_command_window.y = PARA_CTB::WINDOWPOS_Y
  116.       # ステータスウインドウに隐れないように
  117.       @actor_command_window.z = 9999
  118.     end
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● フレーム更新 (プレバトルフェーズ)
  122.   #--------------------------------------------------------------------------
  123.   alias update_phase1_ctb update_phase1
  124.   def update_phase1
  125.     # エネミー名リストを更新
  126.     @status_window2.refresh
  127.     update_phase1_ctb
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  131.   #--------------------------------------------------------------------------
  132.   alias update_phase4_step6_ctb update_phase4_step6
  133.   def update_phase4_step6
  134.     # エネミー名リストを更新
  135.     @status_window2.refresh
  136.     update_phase4_step6_ctb
  137.   end
  138. end

  139. #==============================================================================
  140. # ■ Window_BattleStatus
  141. #==============================================================================

  142. class Window_BattleStatus < Window_Base
  143.   #--------------------------------------------------------------------------
  144.   # ● オブジェクト初期化
  145.   #--------------------------------------------------------------------------
  146.   def initialize
  147.     super(160、320、480、160)
  148.     self.contents = Bitmap.new(width - 32、height - 32)
  149.     @level_up_flags = []
  150.     for i in 0..$game_party.actors.size
  151.       @level_up_flags.push(false)
  152.     end
  153.     @before_hp = []
  154.     @before_sp = []
  155.     @before_states = []
  156.     @now_hp = []
  157.     @now_sp = []
  158.     @now_states = []
  159.     refresh
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ● リフレッシュ
  163.   #--------------------------------------------------------------------------
  164.   def refresh
  165.     @item_max = $game_party.actors.size
  166.     for i in 0...$game_party.actors.size
  167.       actor = $game_party.actors[i]
  168.       line_height = 120 / PARA_CTB::PARTY_SIZE
  169.       actor_y = i * line_height + 4
  170.       # 现在のステータスを配列に
  171.       @now_hp[i] = actor.hp
  172.       @now_sp[i] = actor.sp
  173.       @now_states[i] = actor.states
  174.       # レベルアップ
  175.       if @level_up_flags[i]
  176.         self.contents.fill_rect(344、actor_y、100、32、Color.new(0、0、0、0))
  177.         self.contents.font.color = normal_color
  178.         self.contents.draw_text(344、actor_y、120、32、"LEVEL UP!")
  179.       end
  180.     end
  181.     # バトルステータスの轻量化处理
  182.     # ステータスの配列が变化したときのみ描画处理
  183.     if @before_hp == nil or @before_sp == nil or @before_states == nil or @before_hp != @now_hp or @before_sp != @now_sp or @before_states != @now_states
  184.       self.contents.clear
  185.       for i2 in 0...$game_party.actors.size
  186.         actor = $game_party.actors[i2]
  187.         line_height = 120 / PARA_CTB::PARTY_SIZE
  188.         actor_y = i2 * line_height + 4
  189.         self.contents.font.size = PARA_CTB::NAME_FONT_SIZE
  190.         # 名前を描画
  191.         draw_actor_name(actor、4、actor_y+16-PARA_CTB::NAME_FONT_SIZE)
  192.         # HPを描画
  193.         hp_color1 = PARA_CTB::HP_COLOR_LEFT
  194.         hp_color2 = PARA_CTB::HP_COLOR_RIGHT
  195.         draw_meter(actor.hp、actor.maxhp、125、actor_y+14、80、8、hp_color1、hp_color2)
  196.         draw_actor_hp(actor、102、actor_y+16-PARA_CTB::HPSP_FONT_SIZE、100)
  197.         # SPを描画
  198.         sp_color1 = PARA_CTB::SP_COLOR_LEFT
  199.         sp_color2 = PARA_CTB::SP_COLOR_RIGHT
  200.         draw_meter(actor.sp、actor.maxsp、245、actor_y+14、80、8、sp_color1、sp_color2)
  201.         draw_actor_sp(actor、222、actor_y+16-PARA_CTB::HPSP_FONT_SIZE、100)
  202.         # 变化后のステータスを配列に
  203.         @before_hp[i2] = actor.hp
  204.         @before_sp[i2] = actor.sp
  205.         @before_states[i2] = actor.states
  206.         # レベルアップ
  207.         if @level_up_flags[i2] == false
  208.           draw_actor_state(actor、344、actor_y)
  209.         end
  210.       end
  211.     end
  212.    
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   # ● フレーム更新
  216.   #--------------------------------------------------------------------------
  217.   def update
  218.     super
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● HP の描画
  222.   #     actor : アクター
  223.   #     x     : 描画先 X 座标
  224.   #     y     : 描画先 Y 座标
  225.   #     width : 描画先の幅
  226.   #--------------------------------------------------------------------------
  227.   def draw_actor_hp(actor、x、y、width = 144)
  228.     # 文字列 "HP" を描画
  229.     self.contents.font.color = system_color
  230.     self.contents.font.size = 16
  231.     self.contents.draw_text(x、y+2、32、32、$data_system.words.hp)
  232.     self.contents.font.color = normal_color
  233.     self.contents.font.size = PARA_CTB::HPSP_FONT_SIZE
  234.     if PARA_CTB::MAX_DRAW
  235.       # MaxHP を描画
  236.       self.contents.draw_text(x、y、width、32、actor.maxhp.to_s、2)
  237.       text_size = self.contents.text_size(actor.maxhp.to_s)
  238.       text_x = x + width - text_size.width - 12
  239.       self.contents.draw_text(text_x、y、12、32、"/"、1)
  240.       # HP を描画
  241.       self.contents.font.color = actor.hp == 0 ? knockout_color :
  242.         actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  243.       text_x = text_x - text_size.width
  244.       self.contents.draw_text(text_x、y、text_size.width、32、actor.hp.to_s、2)
  245.     else
  246.       self.contents.font.color = actor.hp == 0 ? knockout_color :
  247.         actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  248.       self.contents.draw_text(x、y、width、32、actor.hp.to_s、2)
  249.     end
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● SP の描画
  253.   #     actor : アクター
  254.   #     x     : 描画先 X 座标
  255.   #     y     : 描画先 Y 座标
  256.   #     width : 描画先の幅
  257.   #--------------------------------------------------------------------------
  258.   def draw_actor_sp(actor、x、y、width = 144)
  259.     # 文字列 "SP" を描画
  260.     self.contents.font.color = system_color
  261.     self.contents.font.size = 16
  262.     self.contents.draw_text(x、y+2、32、32、$data_system.words.sp)
  263.     self.contents.font.color = normal_color
  264.     self.contents.font.size = PARA_CTB::HPSP_FONT_SIZE
  265.     if PARA_CTB::MAX_DRAW
  266.     # MaxSP を描画
  267.       self.contents.draw_text(x、y、width、32、actor.maxsp.to_s、2)
  268.       text_size = self.contents.text_size(actor.maxsp.to_s)
  269.       text_x = x + width - text_size.width - 12
  270.       self.contents.draw_text(text_x、y、12、32、"/"、1)
  271.       # SP を描画
  272.       self.contents.font.color = actor.sp == 0 ? knockout_color :
  273.         actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  274.       text_x = text_x - text_size.width
  275.       self.contents.draw_text(text_x、y、text_size.width、32、actor.sp.to_s、2)
  276.     else
  277.       self.contents.font.color = actor.sp == 0 ? knockout_color :
  278.         actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  279.       self.contents.draw_text(x、y、width、32、actor.sp.to_s、2)
  280.     end
  281.   end
  282. end

  283. #==============================================================================
  284. # □ 敌の名前を表示するウインドウ
  285. #==============================================================================

  286. class Window_BattleStatus_enemy < Window_Base
  287.   #--------------------------------------------------------------------------
  288.   # ○ オブジェクト初期化
  289.   #--------------------------------------------------------------------------
  290.   def initialize
  291.     super(0、320、160、160)
  292.     self.contents = Bitmap.new(width - 32、height - 32)
  293.     refresh
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ○ リフレッシュ
  297.   #--------------------------------------------------------------------------
  298.   def refresh
  299.     self.contents.clear
  300.     self.contents.font.color = normal_color
  301.     self.contents.font.size = PARA_CTB::ENEMY_FONT_SIZE
  302.     @exist_enemies = []
  303.     if $game_troop.enemies != nil
  304.       if PARA_CTB::ENEMY_GROUPING
  305.         ememy_list = []
  306.         ememy_list_index = []
  307.         # エネミーをグループ化
  308.         for i in 0...$game_troop.enemies.size
  309.           enemy = $game_troop.enemies[i]
  310.           if enemy.exist?
  311.             if ememy_list.include?(enemy.name)
  312.               ememy_list_index[ememy_list.index(enemy.name)] += 1
  313.             else
  314.               # エネミー名を记录
  315.               ememy_list.push(enemy.name)
  316.               ememy_list_index[ememy_list.index(enemy.name)] = 1
  317.             end
  318.           end
  319.         end
  320.         # エネミーの名前と数を描画
  321.         enemy_index = 0
  322.         for enemy_name in ememy_list
  323.           enemy_y = enemy_index * (PARA_CTB::ENEMY_FONT_SIZE+6) + 4
  324.           if ememy_list_index[enemy_index] > 1
  325.             enemy_name = enemy_name + " " + ememy_list_index[enemy_index].to_s
  326.           end
  327.           self.contents.draw_text(4、enemy_y、160、20、enemy_name)
  328.           enemy_index += 1
  329.         end
  330.       else
  331.         # エネミーの名前を描画
  332.         enemy_index = 0
  333.         for i in 0...$game_troop.enemies.size
  334.           enemy = $game_troop.enemies[i]
  335.           if enemy.exist?
  336.             @exist_enemies.push(enemy)
  337.             line_height = PARA_CTB::ENEMY_FONT_SIZE + 6
  338.             if PARA_CTB::ENEMY_DRAWING_MATER != 0
  339.               line_height += 10
  340.             end
  341.             enemy_y = enemy_index * line_height + 4
  342.             self.contents.draw_text(4、enemy_y、160、20、enemy.name)
  343.             enemy_index += 1
  344.             # HPゲージを描画
  345.             if PARA_CTB::ENEMY_DRAWING_MATER == 1
  346.               hp_color1 = PARA_CTB::HP_COLOR_LEFT
  347.               hp_color2 = PARA_CTB::HP_COLOR_RIGHT
  348.               y = enemy_y + PARA_CTB::ENEMY_FONT_SIZE + 3
  349.               draw_meter(enemy.hp、enemy.maxhp、4、y、80、8、hp_color1、hp_color2)
  350.             end
  351.           end
  352.         end
  353.       end
  354.     end
  355.   end
  356. end

  357. #==============================================================================
  358. # ■ Window_Base
  359. #==============================================================================

  360. class Window_Base < Window
  361.   
  362.   #--------------------------------------------------------------------------
  363.   # ○ ゲージを描画
  364.   #--------------------------------------------------------------------------
  365.   def draw_meter(now、max、x、y、width、height、start_color、end_color=start_color )
  366.     self.contents.fill_rect(x、y、width、height、PARA_CTB::FRAME_COLOR)
  367.     self.contents.fill_rect(x+PARA_CTB::FRAME_BORDER、y+PARA_CTB::FRAME_BORDER、width-PARA_CTB::FRAME_BORDER*2、height-PARA_CTB::FRAME_BORDER*2、PARA_CTB::BACK_COLOR)
  368.     now = now > max ? max : now
  369.     percentage = max != 0 ? (width-2) * now / max.to_f : 0
  370.     if start_color == end_color
  371.       self.contents.fill_rect(x+1、y+1、percentage、height-2、start_color)
  372.     else
  373.       for i in 1..percentage
  374.         r = start_color.red + (end_color.red - start_color.red) / percentage * i
  375.         g = start_color.green + (end_color.green - start_color.green) / percentage * i
  376.         b = start_color.blue + (end_color.blue - start_color.blue) / percentage * i
  377.         a = start_color.alpha + (end_color.alpha - start_color.alpha) / percentage * i
  378.         self.contents.fill_rect(x+i、y+1、1、height-2、Color.new(r、g、b、a))
  379.       end
  380.     end
  381.   end
  382. end

  383. #==============================================================================
  384. # ■ Window_Help
  385. #==============================================================================

  386. class Window_Help < Window_Base
  387.   #--------------------------------------------------------------------------
  388.   # ● アクター设定
  389.   #     actor : ステータスを表示するアクター
  390.   #--------------------------------------------------------------------------
  391.   alias set_actor_ctb set_actor
  392.   def set_actor(actor)
  393.     if PARA_CTB::HELP_DRAWING_MATER_ACTOR
  394.       self.contents.clear
  395.       draw_actor_name(actor、4、0)
  396.       draw_actor_state(actor、140、0)
  397.       hp_color1 = PARA_CTB::HP_COLOR_LEFT
  398.       hp_color2 = PARA_CTB::HP_COLOR_RIGHT
  399.       draw_meter(actor.hp、actor.maxhp、316、18、112、8、hp_color1、hp_color2)
  400.       draw_actor_hp(actor、284、0)
  401.       sp_color1 = PARA_CTB::SP_COLOR_LEFT
  402.       sp_color2 = PARA_CTB::SP_COLOR_RIGHT
  403.       draw_meter(actor.sp、actor.maxsp、492、18、112、8、sp_color1、sp_color2)
  404.       draw_actor_sp(actor、460、0)
  405.       @actor = actor
  406.       @text = nil
  407.       self.visible = true
  408.     else
  409.       set_actor_ctb(actor)
  410.     end
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # ● エネミー设定
  414.   #     enemy : 名前とステートを表示するエネミー
  415.   #--------------------------------------------------------------------------
  416.   alias set_enemy_ctb set_enemy
  417.   def set_enemy(enemy)
  418.     if PARA_CTB::HELP_DRAWING_MATER_ENEMY
  419.       self.contents.clear
  420.       draw_actor_name(enemy、4、0)
  421.       draw_actor_state(enemy、140、0)
  422.       hp_color1 = PARA_CTB::HP_COLOR_LEFT
  423.       hp_color2 = PARA_CTB::HP_COLOR_RIGHT
  424.       draw_meter(enemy.hp、enemy.maxhp、316、18、112、8、hp_color1、hp_color2)
  425.       draw_actor_hp(enemy、284、0)
  426.       sp_color1 = PARA_CTB::SP_COLOR_LEFT
  427.       sp_color2 = PARA_CTB::SP_COLOR_RIGHT
  428.       draw_meter(enemy.sp、enemy.maxsp、492、18、112、8、sp_color1、sp_color2)
  429.       draw_actor_sp(enemy、460、0)
  430.       self.visible = true
  431.     else
  432.       set_enemy_ctb(enemy)
  433.     end
  434.   end
  435. end
复制代码
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-1-24
帖子
23
3
发表于 2007-6-11 01:14:16 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
15
在线时间
1 小时
注册时间
2007-6-16
帖子
1
4
发表于 2007-6-16 08:20:47 | 只看该作者
我不知道呵呵!!!!!{/cy}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 06:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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