| 
 
| 赞 | 0 |  
| VIP | 19 |  
| 好人卡 | 4 |  
| 积分 | 1 |  
| 经验 | 13972 |  
| 最后登录 | 2017-7-16 |  
| 在线时间 | 192 小时 |  
 Lv1.梦旅人 
	梦石0 星屑50 在线时间192 小时注册时间2010-8-23帖子161 | 
| 陌鸢 发表于 2013-6-14 11:35 ![]() 哭……还是没搞懂……我试过结果每次在事件中插入指令都是冲突……这下更是脚本冲突了……只能先禁用更 ...
你试试这个,怀疑你那个缺少东西,我这边测试很正常……复制代码#party转换
#这是简易的party转换的脚本。
#召唤界面:$scene = Scene_Party_in.new
#可以用开关的on off来决定转换的操作可能与否。
#此外,也可以设定不想要离开的角色。
#不过由于毕竟只有角色的加入和退出的功能,使用起来可能不是很方便。
#可以适应简单的身份表示。
#用键盘a来做身份表示与否的变更。
#设定方法
#可加入party的最高人数
#变更下面的@party_max = 4部分,通常用4。
#可参加party的最少人数(必须选择的最低人数)
#变更下面的@party_min = 1部分,初期姑且设定为1。
#强制加入的角色(必须要加入到party中的角色)
#变更下面的@must_actors = [$game_actors[1]]部分
#在初级阶段,姑且将其设定为ID1号的角色(アルシェス)
#设定的例子
#@must_actors = [1, 2]
#这样,1号和2号ID的角色就被设定为强制加入的角色了。
#顺便一提,用事件指示的剧本,也就是
#$game_party.must_actors = [1]
#等,可以在游戏进行中设定。(最高最低人数等也同样是可能的。)
#判断可否加入party
#用 class Window_Party_Select 的 party_in_menber 来设定。
#设定例子
# menber.push($game_actors[1])  
# menber.push($game_actors[2])  if $game_switches[1]
#这样,就使1号ID的角色(アルシェス)的经常加入变为可能。
#2号ID的角色(是谁来着?)在游戏开关的1号是on状态下将可能加入。
#在初期设定阶段,1号ID是经常加入可能状态、
#2-8号ID则被设定为各自在游戏开关的1-7号是on状态下方可加入。
#
#  2005.9.24 バグ修正
#  強制加入アクターがセーブに反映されないバグを修正。
#  強制加入アクターの指定方法が変更されたので注意。
#
# 2006.2.5 柳柳修正
#  直接放入了add_actor
#  如果需要把战斗图改为行走图,本脚本找到draw_actor_battler(actor,x,y)替换为:draw_actor_graphic(actor, x+40, y + 80)
#  增加exp描绘
class Game_Party
 attr_accessor :party_max
 attr_accessor :party_min
 attr_accessor :must_actors
 alias party_select_initialize initialize
 def initialize
   party_select_initialize
   @party_max = 4
   @party_min = 1
   @must_actors = [2]
 end
 def must_actor_include?(actor)
   return @must_actors.include?(actor.id)
 end
 def add_actor(actor_id)
   # 获取角色
   actor = $game_actors[actor_id]
   # 同伴人数未满 4 人、本角色不在队伍中的情况下
   if @actors.size < @party_max and not @actors.include?(actor)
     # 添加角色
     @actors.push(actor)
     # 还原主角
     $game_player.refresh
   end
 end
end
class Window_Party_Select < Window_Selectable
 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #--------------------------------------------------------------------------
 def initialize
   super(0, 96, 640, 384)
   @party_in_ok_menber = party_in_menber
   @item_max = party_in_menber.size
   @column_max = 4
   self.contents = Bitmap.new(width - 32, row_max * 176)
   self.index = 0
   refresh
 end
 #--------------------------------------------------------------------------
 # ● アクターの取得
 #--------------------------------------------------------------------------
 def menber
   return @party_in_ok_menber[self.index]
 end
 #--------------------------------------------------------------------------
 # ● パーティーin可能なメンバー取得
 #--------------------------------------------------------------------------
 def party_in_menber
   menber = []
   menber.push($game_actors[1])  if $game_switches[2]
   menber.push($game_actors[2])
   menber.push($game_actors[3])
   menber.push($game_actors[4])
   menber.push($game_actors[5])
   menber.push($game_actors[6])  
   menber.push($game_actors[9])  
   menber.push($game_actors[10])  
   menber.push($game_actors[11])  
   menber.push($game_actors[12])  
   return menber
 end
 #--------------------------------------------------------------------------
 # ● リフレッシュ
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   for i in 0...@party_in_ok_menber.size
     draw_menber(i)
   end
 end
 #--------------------------------------------------------------------------
 # ● アクター描画
 #--------------------------------------------------------------------------
 def draw_menber(index)
   actor = @party_in_ok_menber[index]
   x = 4 + index % @column_max * (640 / @column_max)
   y = index / @column_max * 88
   if $game_party.must_actor_include?(actor)
     color = text_color(3)
     opacity = 255
   elsif $game_party.actors.include?(actor)
     color = normal_color
     opacity = 255
   else
     color = disabled_color
     opacity = 128
   end
   self.contents.font.color = color
   draw_actor_graphic(actor, x+40, y + 80)
   #draw_actor_graphic(actor, x+40, y + 80)
   self.contents.draw_text(x, y, 120, 32, actor.name)
 end
 def draw_actor_battler(act,x,y)
   bitmap = RPG::Cache.battler(act.battler_name, act.battler_hue)
   cw = bitmap.width
   ch = bitmap.height
   src_rect = Rect.new(0, 0, cw, ch)
   self.contents.blt(x, y, bitmap, src_rect, opacity)
 end
 #--------------------------------------------------------------------------
 # ● 行数の取得
 #--------------------------------------------------------------------------
 def row_max
   # 項目数と列数から行数を算出
   return (@item_max + @column_max - 1) / @column_max
 end
 #--------------------------------------------------------------------------
 # ● 先頭の行の取得
 #--------------------------------------------------------------------------
 def top_row
   # ウィンドウ内容の転送元 Y 座標を、1 行の高さ 32 で割る
   return self.oy / 88
 end
 #--------------------------------------------------------------------------
 # ● 先頭の行の設定
 #     row : 先頭に表示する行
 #--------------------------------------------------------------------------
 def top_row=(row)
   # row が 0 未満の場合は 0 に修正
   if row < 0
     row = 0
   end
   # row が row_max - 1 超の場合は row_max - 1 に修正
   if row > row_max - 1
     row = row_max - 1
     if row < 0
       row = 0
     end
   end
   # row に 1 行の高さ 32 を掛け、ウィンドウ内容の転送元 Y 座標とする
   self.oy = row * 88
 end
 #--------------------------------------------------------------------------
 # ● 1 ページに表示できる行数の取得
 #--------------------------------------------------------------------------
 def page_row_max
   # ウィンドウの高さから、フレームの高さ 32 を引き、1 行の高さ 32 で割る
   return (self.height - 32) / 88
 end
 #--------------------------------------------------------------------------
 # ● カーソルの矩形更新
 #--------------------------------------------------------------------------
 def update_cursor_rect
   if @index < 0
     self.cursor_rect.empty
     return
   end
   # 現在の行を取得
   row = @index / @column_max
   # 現在の行が、表示されている先頭の行より前の場合
   if row < self.top_row
     # 現在の行が先頭になるようにスクロール
     self.top_row = row
   end
   # 現在の行が、表示されている最後尾の行より後ろの場合
   if row > self.top_row + (self.page_row_max - 1)
     # 現在の行が最後尾になるようにスクロール
     self.top_row = row - (self.page_row_max - 1)
   end
   # カーソルの幅を計算
   cursor_width = 512 / @column_max
   # カーソルの座標を計算
   x = @index % @column_max * (cursor_width + 32)#(640 / @column_max)
   y = @index / @column_max * 88 - self.oy
   # カーソルの矩形を更新
   self.cursor_rect.set(x, y, cursor_width, 32)
 end
end
class Window_Party_Select_Menber < Window_Base
 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0, 640, 96)
   self.contents = Bitmap.new(width - 32, height - 32)
   refresh
 end
 #--------------------------------------------------------------------------
 # ● リフレッシュ
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   for i in 0...$game_party.actors.size
     draw_menber(i)
   end
 end
 #--------------------------------------------------------------------------
 # ● アクター描画
 #--------------------------------------------------------------------------
 def draw_menber(index)
   actor = $game_party.actors[index]
   x = 4 + index * (640 / $game_party.party_max)
   y = 0
   draw_actor_graphic(actor, x+32, y+48+8)
 end
end
class Window_Party_Select_Menber_Status < Window_Base
 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #--------------------------------------------------------------------------
 def initialize
   super(0, 288, 640, 192)
   self.contents = Bitmap.new(width - 32, height - 32)
 end
 #--------------------------------------------------------------------------
 # ● リフレッシュ
 #--------------------------------------------------------------------------
 def refresh(actor)
   self.contents.clear
   draw_actor_name(actor, 4, 0)
   draw_actor_class(actor, 4 + 144, 0)
   draw_actor_level(actor, 4, 32)
   draw_actor_state(actor, 4 + 72, 32)
   draw_actor_hp(actor, 4, 64, 172)
   draw_actor_sp(actor, 4, 96, 172)
   draw_actor_exp(actor, 4, 128)
   draw_actor_parameter(actor, 218, 32, 0)
   draw_actor_parameter(actor, 218, 64, 1)
   draw_actor_parameter(actor, 218, 96, 2)
   draw_actor_parameter(actor, 430, 32, 3)
   draw_actor_parameter(actor, 430, 64, 4)
   draw_actor_parameter(actor, 430, 96, 5)
   draw_actor_parameter(actor, 430, 128, 6)
   
 end
end
class Scene_Party_in
 #--------------------------------------------------------------------------
 # ● メイン処理
 #--------------------------------------------------------------------------
 def main
   @main_window = Window_Party_Select.new
   @menber_window = Window_Party_Select_Menber.new
   @status_window = Window_Party_Select_Menber_Status.new
   @status_window.opacity = 192
   @status_window.z += 10
   @show_index = 0
   status_window_position
   @status_window.refresh(@main_window.menber)
   @status_window.visible = true
   @show_index = @main_window.index
   # トランジション実行
   Graphics.transition
   # メインループ
   loop do
     # ゲーム画面を更新
     Graphics.update
     # 入力情報を更新
     Input.update
     # フレーム更新
     update
     # 画面が切り替わったらループを中断
     if $scene != self
       break
     end
   end
   # トランジション準備
   Graphics.freeze
   # ウィンドウを解放
   @main_window.dispose
   @menber_window.dispose
   @status_window.dispose
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新
 #--------------------------------------------------------------------------
 def update
   # コマンドウィンドウを更新
   @main_window.update
   if @status_window.visible and @show_index != @main_window.index
     status_window_position
     @status_window.refresh(@main_window.menber)
     @show_index = @main_window.index
   end
   # B ボタンが押された場合
   if Input.trigger?(Input::B)
     if $game_party.actors.size < $game_party.party_min
       # ブザー SE を演奏
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # キャンセル SE を演奏
     $game_system.se_play($data_system.cancel_se)
     # メニュー画面に切り替え
     $scene = Scene_Menu.new(7)
     return
   end
   # C ボタンが押された場合
   if Input.trigger?(Input::C)
     # 選択したアクターが強制加入アクターの場合入れ替え不可
     if $game_party.must_actor_include?(@main_window.menber)
       # ブザー SE を演奏
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     if $game_party.actors.include?(@main_window.menber)
       $game_party.remove_actor(@main_window.menber.id)
     else
       if $game_party.actors.size == $game_party.party_max
         # ブザー SE を演奏
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       $game_party.add_actor(@main_window.menber.id)
     end
     # 決定 SE を演奏
     $game_system.se_play($data_system.decision_se)
     @main_window.refresh
     @menber_window.refresh
     return
   end
   # A ボタンが押された場合
   #if Input.trigger?(Input::A)
     # 決定 SE を演奏
     #$game_system.se_play($data_system.decision_se)
     #if @status_window.visible
        #@status_window.visible = false
     #else
        #status_window_position
        #@status_window.refresh(@main_window.menber)
        #@status_window.visible = true
        #@show_index = @main_window.index
     #end
     #return
   #end
 end
 def status_window_position
   if @main_window.cursor_rect.y < 176
     @status_window.y = 288
   else
     @status_window.y = 96
   end
 end
end
 | 
 |