Project1

标题: 转:战斗中换人,口袋口袋依旧是口袋 口袋换人系统 [打印本页]

作者: px.凤翔九天    时间: 2010-12-16 22:42
标题: 转:战斗中换人,口袋口袋依旧是口袋 口袋换人系统
以前曾经写了一个,貌似那个贴已经失踪到不懂哪里去了,所以今天重写了一个。而且之前写那个还可以玩围攻,这个是模仿口袋的战斗换人,功能就是那样,没得介绍,插入脚本后即可用。
  1. module LimBattlePlug1 m# ~. h" g0 s' j& X3 I9 S

  2. 7 T9 r& N6 d8 P8 \  X
  3. # 队伍最大人数
    " L  @) F6 k2 O( @5 e7 @  g
  4. MaxPartySize = 8* R( {. F$ C2 g+ l

  5. / M( E* w0 l( V$ @" t* m
  6. # 出战人数
    2 R1 H0 |: f( P+ ~& `5 h; D- [
  7. MaxBattlerSize = 1% X0 ^  X" G4 J4 O

  8. 1 Y8 t9 d7 F+ r6 b6 o5 W
  9. # 换人语句
    . w* j0 @/ u$ Y) q- L  ]( t
  10. WordChangeBattler = "换人"
    3 Z$ n9 P" E# [) B+ K- p. u

  11. , g) y& b" z+ E# q5 z+ ~  E
  12. # 换人时播放的动画
    " s. Y' Y, e6 G# _9 x. N0 T4 a
  13. AnimationChangeBattler = 268 g  `. ]+ l# O4 C6 ^! p

  14. - h2 d2 C! i' M8 u$ Z" ]3 n+ g4 ^
  15. end1 D, i; Z( M- }* j3 L  O2 ]; K/ O
  16. 9 H% G. P! n  i: P; u+ y) V, H* E: M
  17. class Game_BattleAction$ l$ M4 L7 y( n% o! a% o: X2 n
  18.   attr_accessor :change_to_battler
    1 q0 s# N6 M& X% b; @
  19.   # 初始化
    9 u5 g" P) s8 X6 t/ _3 `2 X
  20.   alias lbp_initialize initialize: m7 m6 A) s9 ?$ s& f
  21.   def initialize: S& u* B$ Q8 I1 b1 _8 P( \  ?
  22.     lbp_initialize5 U. Y5 E* q8 p
  23.     @change_to_battler = 07 |# S/ m4 y( T
  24.   end
    0 P' ^, x1 Y/ L" `+ P9 l9 j
  25.   # 欲更换角色编号
    5 T0 Y* [* k% q, N
  26.   def set_change_battler# Y2 h" Z1 Z) U3 i& N) I  c5 H
  27.     @kind = 3- ^- k) q- t% ?
  28.   end# L- R: d, e3 J
  29.   # 判断行动是否为更换角色7 |6 ~. q4 w4 L" e- S. C  `9 g" h# W
  30.   def is_change_battler?$ ]6 F1 t/ i$ x
  31.     return (@kind == 3)
    $ |- U+ w: ^9 @: h
  32.   end
    : D1 N- k, u" c& S8 c& W6 y
  33. end6 Q- t& W! |4 n% j$ U! m; U7 _1 K. S* i7 Q

  34. 5 q9 u) V5 \8 ~; k) O: m( n! g
  35. class Game_Party; J$ M$ o$ ~, [, P; A
  36.   include LimBattlePlug
    4 X# \+ {: ]1 Z$ h3 q* P
  37.   attr_reader :actors2& [* j! E" i: V& v6 s
  38.   alias lpb_initialize initialize  b0 z' \/ Q; {' n* M) ~, i, H
  39.   def initialize
    9 |! |0 h# o; _6 N1 }. F! ~/ M
  40.     lpb_initialize/ ?4 e$ Q: R- s1 q
  41.     @actors2 = []
    ' A% {: h6 J! k- S
  42.   end- N, k! |) M& T% B$ p
  43.   # 角色加入0 f/ {; p$ ^3 N  M7 i, z% B
  44.   def add_actor(actor_id)
    4 D, G  Q6 U3 y
  45.     actor = $game_actors[actor_id]& s2 S; S8 S( U+ c7 v: [- S3 i2 m* g
  46.     if @actors.size < MaxPartySize and not @actors.include?(actor)
      }2 H( b1 f+ {. W( ?
  47.       @actors.push(actor)
    ) a3 m$ b- C. m4 ~8 v& S
  48.       $game_player.refresh4 o3 p' V( i- a" S7 q# x
  49.     end
    3 d; i9 L# W/ q- L% Q  x
  50.   end7 P2 T+ _! K/ i7 K9 P
  51.   # 设置战斗的角色. ?) T% u0 a* ~: F0 \3 S! U
  52.   def set_actor_to_battle
    8 p* V. _9 u6 p3 W
  53.     @actors2 = []
    / ^: {) N4 P  s3 U3 R
  54.     @actors.each do |actor|) g, T" n! H. g3 z) ^
  55.       @actors2.push(actor)
    9 c, V9 Y( v8 ]+ j' Q$ l
  56.     end
    / d0 i% X8 ~: U5 ?1 M7 G/ `
  57.     @actors = []; s; c% y1 y$ [, p4 K
  58.     @actors2.each do |actor|
    6 c$ Q0 E- ]$ j- e
  59.       @actors.push(actor): D2 @$ z' A( v. ?; V
  60.       break if @actors.size == MaxBattlerSize
    9 R$ ^  I. Q, U
  61.     end) G9 K) R! S9 M( h0 m
  62.   end
      r& u( z* K3 y4 ?
  63.   # 还原战斗的角色' H. Y+ D/ |. P0 t; h. S: G" z
  64.   def set_actor_to_normal9 X/ V( o0 o1 U  y/ Y6 v" q
  65.     @actors = []2 l1 X4 p! p& H
  66.     @actors2.each do |actor|
    6 }5 g5 `( M1 W9 Q
  67.       @actors.push(actor)' c( @# s8 X3 N% s2 F3 m1 V. R
  68.     end; p1 ~) Y: p9 w
  69.   end
    ) d$ M9 L! r1 ^6 a9 p- @
  70.   # 获取角色id数组
    * E9 F3 k+ Y7 j( c" V7 J- u# F
  71.   def get_actors_id2 w) G  d5 W/ S( b  O" r3 I. x+ ?
  72.     id = []6 X/ p. O( P" A: ^8 P
  73.     @actors.each{|actor|id.push(actor.id)}$ k2 c% a- O$ K
  74.     return id
    ' D4 }5 N9 K/ \9 \
  75.   end
    # {3 ?# M- Y! Z; i+ z9 c6 p
  76.   # 获取角色id数组
    $ S4 O3 V6 g1 A1 Q) n( G
  77.   def get_actors2_id% Z! i5 Z' |# O% D
  78.     id = []3 r! K: V" m& b/ b, N6 W: q" Z: L
  79.     @actors2.each{|actor|id.push(actor.id)}1 g- w8 C! K" Q# l: O- F4 h
  80.     return id
    % }& x+ r8 M; z, ]) u3 ]: O% M5 O
  81.   end
    8 G* ]# v8 c8 L2 n
  82.   # 兑换角色
    & A+ d, _# W- K& B" w
  83.   def change_actor(index,id)) b* z9 |, A* R' x) f5 M) e
  84.     @actors[index] = $game_actors[id]
    7 X' h  T7 p. H) N6 R' y1 d
  85.   end
    $ Q' v! P& P/ e. e
  86.   # 全灭判定
    ! ]" `0 p* Z9 u4 c
  87.   def all_dead?9 T9 O; V- A2 y2 y
  88.     # 同伴人数为 0 的情况下
    0 G+ I; M: `1 q4 h2 X5 w6 A
  89.     if $game_party.actors.size == 0
    % T+ e& Z$ O; h0 L- u+ G
  90.       return false1 [+ A9 Y7 q' }9 C- Y
  91.     end
    $ d2 I7 {! i% X- |$ c3 O
  92.     # 同伴中无人 HP 在 0 以上( \" W2 D7 r4 X2 x/ ?' f
  93.     for actor in @actors2
    6 y; s; e, H6 n; ]
  94.       if actor.hp > 0; m4 h) N! z: q" E& L
  95.         return false
    & l5 y7 p- _% X( [
  96.       end! ]$ N. w% w/ J. m' B5 m
  97.     end* _! F  C. Q8 S8 ]9 d2 ~
  98.     for actor in @actors- Y+ ^# {# U# M3 R: Z& b- f; ^
  99.       if actor.hp > 0: x3 Y* j/ D2 D* n& A, f, b: I' t
  100.         return false, ^% K9 Y- T2 J5 ]; N
  101.       end, D+ i6 C+ Y5 ~( ?6 \
  102.     end7 d' O, Y1 F2 H, N5 a1 c# ~
  103.     # 全灭
    2 D' S& Z* G3 k3 @& K6 h
  104.     return true
      S& s$ f; }* s/ K  ?' C4 c" G2 M& B6 S
  105.   end
      z7 i8 H* x( K7 ?
  106.   # 其他角色
    ' V, ]6 s$ q* r: |
  107.   def other_actors' G; J+ o) \+ V2 f$ @
  108.     actors = []" Y) f0 W0 ]% d. u! ?  F
  109.     @actors2.each{|actor|actors.push(actor) if [email protected]?(actor)}
    ' @2 R2 }( h- v3 n! j2 Q/ X+ J
  110.     return actors
    - q7 l0 _2 R" }: S
  111.   end
    9 s: j# D& s) t5 a2 ~) l/ s' I
  112.   # 角色位置互换
    & c4 ]. C4 k# t! x
  113.   def change_actor_pos(id1,id2)
    / P2 b* p3 q8 `& ?
  114.     actor_id = []
    0 Z3 H: l! [$ D) I3 N9 A0 \
  115.     @actors.each do |actor|8 j2 w7 w( T+ {( o% Q5 l7 z
  116.       actor_id.push(actor.id)
    / U# Y( ~# r* n0 J  L5 C+ L
  117.     end
    ) `: w. }6 I0 B: \9 K  y
  118.     return if !actor_id.include?(id1) and !actor_id.include?(id2)
    6 U6 J7 R) F$ O* `- j
  119.     id1_index = id2_index = -1
    + V$ F. W, a# J& P: `
  120.     (0...actor_id.size).each do |i|0 V8 }/ {! I- T: b* E% u7 Z
  121.       if actor_id[i] == id1" s5 T% g8 ]* U5 M8 x
  122.         id1_index = i
    / }1 z6 d" U( X3 g0 e. `
  123.       elsif actor_id[i] == id2
    + V$ N- m, P7 w- q! X
  124.         id2_index = i$ M, H; a3 K, x7 q  v
  125.       end
    " K2 F' U* d/ V9 Z1 l- S- h& h
  126.     end, w. i, B) E$ T9 c& e- D+ ?  t
  127.     temp_actor = @actors[id1_index]
    / w' C: ^6 d7 |7 R. |' T
  128.     @actors[id1_index] = @actors[id2_index]
    % s6 l- M. B  E
  129.     @actors[id2_index] = temp_actor
    - @: ?1 X7 K) f! k2 R# n$ @3 u
  130.   end" r5 C9 E5 Z  [$ g. w7 c( K, D& w
  131. end
    # a: ~, w& K. [! f5 a
  132. 6 p4 h9 W# h* \0 M! X
  133. class Window_Actor < Window_Selectable
    # C  Y# \  [; ?0 k. x$ x/ S
  134.   # 初始化
    " A3 F; p( f, P! m' U1 S& n
  135.   def initialize5 m8 \5 z/ G& m3 T# l9 Q
  136.     super(0,64,640,256)& {( i& j- l! _3 `* W( L6 M& @
  137.     self.back_opacity = 1602 |3 Q, J* v' k0 S; D) X' X
  138.     refresh; ]8 f+ N" j* S# g7 ]* p1 P) a
  139.     self.index = -15 T# Z1 Z5 ]2 P* @) F8 x
  140.     self.active = false
    + ]3 `% o% {+ j- i; ]; `
  141.   end
    ! v# L- F9 K. I: U  h7 t
  142.   # 刷新9 E* G. x1 R1 ]* c! I' q- d
  143.   def refresh$ t5 m& ^, w+ v! i  h, S: x
  144.     @item_max = $game_party.actors2.size
    3 F6 x' o2 }# l% G: T
  145.     @data = []7 [3 n/ {% Z# T& R) m; W0 p
  146.     $game_party.actors.each do |actor|1 h( M5 g! q# I  G# e* I; o& i
  147.       @data.push(actor)
    ( W. F/ d) w" W; \+ n% H8 j
  148.     end7 a, ~9 t0 c3 O' H5 S7 b. h: v
  149.     $game_party.actors2.each do |actor|
    $ K1 j  G' U) x; J0 n
  150.       @data.push(actor) if [email protected]?(actor)3 t  k/ c) n' S- m# Y
  151.     end
    ! R/ |+ S* K9 F& `) r0 B3 c$ l* T
  152.     if self.contents != nil
    ! f8 \5 Y% M7 B( ~! M. Q
  153.       self.contents.clear. ^% q9 ]1 e9 v* @4 X) e
  154.       self.contents = nil
      B+ A& B1 o: B1 Y3 y# \
  155.     end
    : {) j0 W7 T/ y' T1 |: F6 ?/ L
  156.     self.contents = Bitmap.new(608,@data.size*32)& h' l# M" ^& V% O
  157.     x = 4
    4 u" P% T9 h9 Y, j( j) ?
  158.     y = 09 ~( _# i6 u- E
  159.     @data.each do |actor|
    3 a* |( c' x* ~7 R: A) U
  160.       bitmap = RPG::Cache.character(actor.character_name,actor.character_hue)
    , Z0 P. y2 |0 w+ l7 @/ f
  161.       rect = Rect.new(0,0,bitmap.width/4,31)
    7 B" b, w- y/ r( [& m" r. \
  162.       self.contents.blt(x+16-bitmap.width/8,y,bitmap,rect)
    ' W, G  y) K- l5 U: A$ Z$ n0 K" j
  163.       draw_actor_name(actor,x+36,y)8 n# V" Y) s: _: l
  164.       draw_actor_state(actor,156,y)
    , v( z7 f: H3 r6 b# N' F7 |) b$ G
  165.       draw_actor_hp(actor,x+256,y,96)/ A0 H4 ?1 c9 Z1 {) H# m, [
  166.       draw_actor_sp(actor,x+376,y,96)$ N/ P$ S/ H+ c$ G, X& a2 h
  167.       if $game_party.actors.include?(actor)0 ^+ J$ F/ P+ b$ R8 v. \
  168.         self.contents.font.color = text_color(6)# n3 p2 f2 b  A! r* X
  169.         cword = "出战"
    . h0 ]5 w! ^( F( ?
  170.       else) [- ^4 {0 y  G; }+ o, _  j
  171.         self.contents.font.color = text_color(0)
    # w! f# q* G. p; ?$ B' H
  172.         cword = "待战"
    5 |1 y3 K4 l' R5 J7 _+ i
  173.       end8 P2 M/ i. a, }& ?! @3 A! |
  174.       self.contents.draw_text(x+496,y,60,32,cword)# y* `" J5 b5 g# h
  175.       y += 32
    7 d+ X6 h9 p. |" m; C
  176.     end3 {, J, m) Y( \# z# D
  177.   end
    3 a; @2 ?+ |' o+ B4 d" y" i  Y: J- y" ]
  178.   # 获取当前角色编号
    / r  B% D$ v8 v9 f3 O
  179.   def actor_id
    ! |$ M5 p0 D7 A; G  A
  180.     return @data[self.index].id- _( k& z" ~" c# o) e3 I( \
  181.   end
    ' x- |& E: d' L2 [- t  G: U
  182.   # 刷新帮助
    7 v& w: @4 W( w/ A
  183.   def update_help
    - h5 l7 C" ^4 l# P+ J
  184.     @help_window.set_text(@data[self.index] == nil ?\  E# |- J- c$ J% V8 q
  185.                           "" : @data[self.index].name)
    7 P& V, V' R' q9 o" R
  186.   end% f) g+ Q& \( f4 L; V& y
  187. end
      }0 V) b  i0 o  ^( h- z

  188. 9 E/ _( I, A+ I- E9 E. W( L
  189. class Scene_Battle: T& R6 N: U; m9 Z5 h
  190.   include LimBattlePlug- E6 a) {; K; z7 m- f1 t+ D! v/ p" M; A
  191.   # 初始化/ K3 n, N; V8 |& }
  192.   def initialize8 Y. r! I# R# Z' e, D: A5 V
  193.     $game_party.set_actor_to_battle- m1 N) q- S# x1 X* }
  194.   end
    " i* h$ Z+ }" w- E/ O! G" c
  195.   # 主处理4 }8 l: g1 j' X8 D3 H% `
  196.   def main/ k) o+ \$ q8 J  j- E
  197.     # 初始化战斗用的各种暂时数据
    7 U5 B2 K2 P$ u" J2 X
  198.     $game_temp.in_battle = true
    : G; O7 }1 Q- ]$ H! U) W0 I
  199.     $game_temp.battle_turn = 0/ k& S3 s* z7 b, }7 f( a
  200.     $game_temp.battle_event_flags.clear* }9 j! W- m1 o5 |# O7 {
  201.     $game_temp.battle_abort = false6 f  h; J$ }, ]- ~) V3 R
  202.     $game_temp.battle_main_phase = false
    $ N3 A$ r1 A* I% V/ K0 m( d3 v
  203.     $game_temp.battleback_name = $game_map.battleback_name: P! z0 x5 D0 S  |
  204.     $game_temp.forcing_battler = nil+ l; K# s) J* T- t# E
  205.     # 初始化战斗用事件解释器4 B4 N7 i' E1 H$ ^! m
  206.     $game_system.battle_interpreter.setup(nil, 0)! g/ G9 v7 [4 U9 `, j
  207.     # 准备队伍
    1 ]7 K" l: s( S% U
  208.     @troop_id = $game_temp.battle_troop_id
    . E, u2 x' r0 s* s% ~! u
  209.     $game_troop.setup(@troop_id)
    2 Z) U: K) b) M+ ~
  210.     # 生成角色命令窗口
    3 ?$ @9 y3 Y1 e; ]7 i+ s' n
  211.     s1 = $data_system.words.attack) w: J1 n" A! e: E- v3 F: k3 w# g
  212.     s2 = $data_system.words.skill
    9 h. r5 L7 j' y5 k
  213.     s3 = $data_system.words.guard
    - h0 X% R1 _" d* O- E, E
  214.     s4 = $data_system.words.item
    0 q  R) C2 v; E  s( M* `
  215.     s5 = WordChangeBattler
    : s3 T# J. X9 \- d' j8 V
  216.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4,s5])* u, A: ~4 h& r# t. O" p3 O
  217.     @actor_command_window.y = 128& [/ P, t+ m% |% d4 G) n
  218.     @actor_command_window.back_opacity = 160  \$ L! u: c& V
  219.     @actor_command_window.active = false& C  ^) X: K) o% `
  220.     @actor_command_window.visible = false
    # ~0 |8 I; O8 s, S0 P: G
  221.     # 生成其它窗口5 R& B7 O0 D+ {, `
  222.     @party_command_window = Window_PartyCommand.new/ D3 O0 W* G, F
  223.     @help_window = Window_Help.new
    7 x& |3 _, d: W. Z5 T
  224.     @help_window.back_opacity = 160! Y5 u/ J# Y8 ^* p
  225.     @help_window.visible = false: `  |- j( D1 Q7 h( j
  226.     @status_window = Window_BattleStatus.new
    5 y2 M! f- }6 b, y* l* E0 S$ o
  227.     @message_window = Window_Message.new: R) X# o* V1 Y8 [3 T# Z7 e7 P6 s
  228.     # 生成活动块' B- j% f) q" K! a
  229.     @spriteset = Spriteset_Battle.new% h/ R: S4 P( J
  230.     # 初始化等待计数+ o( q. v; Y1 J  a! k
  231.     @wait_count = 09 f( d% n+ [( d* i! c7 ]
  232.     # 执行过渡0 B; h* X! Q$ H4 }" {1 l+ X
  233.     if $data_system.battle_transition == ""* U. n0 ?6 a4 `) ^; t  E% y
  234.       Graphics.transition(20)
    ! L7 K& B% k! p* G6 W3 X% p9 b
  235.     else* w# ]5 l  ~9 ?$ }* R
  236.       Graphics.transition(40, "Graphics/Transitions/" +) {2 P* q9 _) F  W; w
  237.         $data_system.battle_transition)" H$ O3 _' Q; X+ I7 D9 G% h
  238.     end( M: A  F8 u; ^
  239.     # 开始自由战斗回合
    7 [$ @% }9 i; a: g: ~. [
  240.     start_phase1! a! n  a$ A; L; k7 }' s
  241.     # 主循环
    $ F$ ]. A8 r# B) U
  242.     loop do! d; o3 K2 ~3 m5 P
  243.       # 刷新游戏画面
    6 D3 K! k; H% l. a' G0 \2 f
  244.       Graphics.update
    , u, X$ u& N# V# ^+ [( D: B0 o4 B5 `* X
  245.       # 刷新输入信息- w# |3 r4 f4 `; k) k
  246.       Input.update
      D9 `; N! X4 R$ B
  247.       # 刷新画面
    * q; r1 D, }- J& R% _& J# e8 @: t- b$ x
  248.       update. V6 Q( P' M! q! Q- o* L( E
  249.       # 如果画面切换的话就中断循环
      i5 f( x3 d" P: W' s
  250.       if $scene != self
    + Y( w% s; H, L2 D2 d, F
  251.         break1 }8 U$ i+ q( s( v# I, \
  252.       end- I& O( B! C7 J0 K6 {0 b& R
  253.     end
    & G  W) Q. n: ?, M
  254.     # 刷新地图0 `) X8 ^, J3 z# R  b
  255.     $game_map.refresh9 R/ `) i: n; c
  256.     # 准备过渡
    - C6 w4 O+ |. k; E6 S! [7 a
  257.     Graphics.freeze0 P" S: ?0 Z1 Y/ p8 v9 j+ J  |5 c
  258.     # 释放窗口! ~- a* }5 q- g) g. M
  259.     @actor_command_window.dispose
    $ T; X: s7 }+ R
  260.     @party_command_window.dispose$ S: F( L8 T) J/ j
  261.     @help_window.dispose
    7 p( T) n, ~' N( k% s. E
  262.     @status_window.dispose: c* D5 T* M+ H) J
  263.     @message_window.dispose
    * @' f8 I0 I' X4 r! i8 l
  264.     if @skill_window != nil  J! S) y/ ]- L9 i- k
  265.       @skill_window.dispose
    6 S! o* K4 B. I! [6 F0 E# s9 j
  266.     end8 L) d$ c6 B% ]* E0 c
  267.     if @item_window != nil5 c5 E0 ?7 S( v
  268.       @item_window.dispose
    7 o  o5 q4 s5 C& K( m
  269.     end
    : d! u/ z3 L& }  j. t0 B
  270.     if @actor_window != nil! ?$ t; g5 A+ G2 T  v- m0 K
  271.       @actor_window.dispose
    0 L  |7 }  o3 `! F$ `
  272.     end8 a" N" ?3 ]5 a5 v! K5 o7 L$ x1 a
  273.     if @result_window != nil0 m2 A1 Z7 }, ^- ?& s
  274.       @result_window.dispose
    ' F; ~+ {% G2 ]( e2 x
  275.     end
    ( M4 u) u; k3 M; C4 R, m* A( k
  276.     # 释放活动块; F+ S( P) j, k# E1 g# G+ q% N# E
  277.     @spriteset.dispose
    . X8 t( r! H) P, T0 g
  278.     # 标题画面切换中的情况8 E" u( }# j/ ~! n0 t
  279.     if $scene.is_a?(Scene_Title)" R) `7 S7 E% i2 w. h! D: P
  280.       # 淡入淡出画面
    6 I/ G6 x. L5 U2 \
  281.       Graphics.transition
    * G. v" E& x. a: w  d+ y/ D
  282.       Graphics.freeze- G# W- p9 |! e2 n7 S
  283.     end
    , @% g( v, J! b6 ?. e* b- g) [
  284.     # 战斗测试或者游戏结束以外的画面切换中的情况; f$ F' m9 b) a3 A  \
  285.     if $BTEST and not $scene.is_a?(Scene_Gameover)8 ?) B7 J4 @* M7 D' Z
  286.       $scene = nil3 g9 J! W. l: c# q# I$ t' }
  287.     end
    * v7 w+ c( I8 ]" e7 X) G7 `
  288.   end7 j# w! h. b# w0 L
  289.   # 战斗结束( w3 y8 `( p4 f& s$ f
  290.   alias lpb_battle_end battle_end
    ! Q; [/ \, ~) D% b1 v, Z/ X3 {9 p
  291.   def battle_end(n)
    * N6 Q5 `) J* e9 p" _
  292.     lpb_battle_end(n). V, N) s0 g+ t4 i' }$ K
  293.     $game_party.set_actor_to_normal
    ) v- V5 c- A6 D; z3 A  `
  294.   end3 L9 _: ~9 S0 P, D* C
  295.   # 开始回合3
    * ~. x7 f3 [. B3 i$ t& E& L! S+ m
  296.   alias lbp_start_phase3 start_phase3: |$ e* |: b4 n5 G) {$ V' ]# [
  297.   def start_phase3
    4 F$ _% T/ i9 ^! W
  298.     @changed_battler_id = []0 V8 b' V7 t% W* e9 Q$ _1 a
  299.     lbp_start_phase3
    ( t3 C8 t+ k- _  H% ]7 a
  300.   end
    . q! K. @, |: \+ t
  301.   # 刷新角色命令回合画面
    3 S( E7 m! k) r0 U" k7 ]* h
  302.   def update_phase3
    2 X' C0 p2 t4 E; t3 D$ x
  303.     # 敌人光标有效的情况下; |: l; T) e9 J+ o) W
  304.     if @enemy_arrow != nil
    7 X, h2 {" T4 q( B; z+ B
  305.       update_phase3_enemy_select
    4 Q2 J" f, k3 @2 j( v
  306.     # 角色光标有效的情况下! w6 p# t4 k( o  ]$ a( x
  307.     elsif @actor_arrow != nil
    : y* ], F* [" F6 J
  308.       update_phase3_actor_select" O' n8 J, E! X; N0 {, b9 n) {3 V
  309.     # 特技窗口有效的情况下
    1 n2 M4 q8 i/ W% P7 s& p5 Z% _
  310.     elsif @skill_window != nil
    6 x1 Q3 g4 g+ Z1 ~* V7 S/ S
  311.       update_phase3_skill_select
    + s( ^' }% v# a. B! D; U
  312.     # 物品窗口有效的情况下' ^( ^9 E+ C: I: B( J4 D
  313.     elsif @item_window != nil
    3 A1 S0 `! G( h" J
  314.       update_phase3_item_select
    * ?# K$ w. p( v) }
  315.     elsif @actor_window != nil! Q) Q* y0 v1 {- e( D. U- }
  316.       update_phase3_battler_select" a5 U- L; J4 G; m: o
  317.     # 角色指令窗口有效的情况下1 j, i% m- e- j( g1 N7 g) ^
  318.     elsif @actor_command_window.active
    / b7 K% |0 F) f" @
  319.       update_phase3_basic_command5 k- f7 P+ d0 O5 x* \2 p, k
  320.     end5 P/ o1 z4 i/ c" u
  321.   end
    8 k1 y* {% n( p+ [) d6 ?
  322.   # 角色基本命令6 {9 q5 w' i8 Z5 r' D2 x9 k
  323.   def update_phase3_basic_command
    2 x3 n1 M' v1 o) @/ ^
  324.     # 按下 B 键的情况下/ I$ Y3 L7 F6 H4 v
  325.     if Input.trigger?(Input::B)4 x% ]7 j9 o* ^3 f. ^
  326.       # 演奏取消 SE
    - \$ [# i& [1 z6 D
  327.       $game_system.se_play($data_system.cancel_se)
    + Y7 J: v3 g  u4 {
  328.       # 转向前一个角色的指令输入/ _- i0 k; P9 `! T5 {
  329.       phase3_prior_actor6 T# L1 w1 b1 W7 K1 n
  330.       return
    + B4 Q  M' P! o6 t: a2 p" l4 C
  331.     end
      ~( g! R* M$ P. G4 y) a( S4 i2 U+ \
  332.     # 按下 C 键的情况下5 v& k5 L8 W$ E# Q6 `; [3 a0 e% l
  333.     if Input.trigger?(Input::C)
    - z" _( z6 |3 Z* b
  334.       # 角色指令窗口光标位置分之* e$ ~2 O8 Z$ o9 U) S
  335.       case @actor_command_window.index; I4 z- @& N3 {/ Q1 I
  336.       when 0  # 攻击" J7 ^. R  S: b4 m+ N* g1 }7 |' }! m
  337.         # 演奏确定 SE
    $ r9 ^% k, m6 c  B& b- Z
  338.         $game_system.se_play($data_system.decision_se)0 p8 l( t4 S% A7 ~
  339.         # 设置行动/ h/ v0 w. X' r1 i$ J
  340.         @active_battler.current_action.kind = 06 a( F7 r. _3 k; B: S6 m) V
  341.         @active_battler.current_action.basic = 0
    ) e( H! z) c9 E# M+ U
  342.         # 开始选择敌人: M* ~" S9 r6 [
  343.         start_enemy_select# H7 A. M5 ~( _" B" r% ^, Y; a
  344.       when 1  # 特技- q( X% e& h1 |
  345.         # 演奏确定 SE9 b; i5 }+ Q$ S7 `# r
  346.         $game_system.se_play($data_system.decision_se). ]+ q" y# ]+ j$ @1 U+ W; v
  347.         # 设置行动
    . J, o0 M$ N/ O4 @
  348.         @active_battler.current_action.kind = 1) M# p% q" G. U4 [0 o% G
  349.         # 开始选择特技
      W; o: J0 n+ h2 A' z( z$ x
  350.         start_skill_select  I: y0 K& B3 Q3 p
  351.       when 2  # 防御" m9 m7 h: |+ v# X5 u0 o- Y
  352.         # 演奏确定 SE
    4 m$ F# D* Y0 J4 @- l) F
  353.         $game_system.se_play($data_system.decision_se)
    ( |5 y0 }8 T3 Q' m
  354.         # 设置行动
    # M9 u8 P6 J4 W! {3 ?
  355.         @active_battler.current_action.kind = 01 j4 _- o, e  P. r; Q$ N
  356.         @active_battler.current_action.basic = 1
    6 u- g* p' O: L" r  j
  357.         # 转向下一位角色的指令输入
    & x% E5 {" x5 h2 Z, t' j
  358.         phase3_next_actor( [8 v  r/ l3 N7 X& V2 N
  359.       when 3  # 物品
    3 h! u/ D: Z: G, ?
  360.         # 演奏确定 SE
    & A; S' _' K' ^. v+ p
  361.         $game_system.se_play($data_system.decision_se). J. H( X/ a1 Q0 j8 Q( f  L5 J4 }% _
  362.         # 设置行动* E, @- Y9 G7 Y5 [) @) w( ~
  363.         @active_battler.current_action.kind = 2
    - |* |& l# ~! A% [, L' |+ B, C/ |1 {
  364.         # 开始选择物品2 g+ k8 ]$ f& E" A$ D  y
  365.         start_item_select8 H6 P6 G0 D! a- t
  366.       when 4 # 换人: b" b* U- ?7 Z9 U$ |! r  D! t
  367.         $game_system.se_play($data_system.decision_se)2 D. F! b  |% U, C' B' _
  368.         @active_battler.current_action.set_change_battler
    $ v# |! z6 R" R8 S; y  u4 m
  369.         start_battler_select
    . W$ d" U; a2 S
  370.       end% Y- L0 _6 z- t- a- s2 G
  371.       return* c. x% G7 B4 E( t2 U
  372.     end
    9 Z0 S) b" G0 s3 _
  373.   end5 k2 p% ^. g7 F3 W# @! |
  374.   # 开始角色选择
    + c. \0 w  ?& c+ ~; x1 `( [7 b# p
  375.   def start_battler_select/ N3 @6 M" g2 O: M8 b
  376.     @actor_window = Window_Actor.new
      s- E( U: c: r3 ~, {$ R3 y' y' `1 ?
  377.     @actor_window.active = true9 ]$ I; m$ z# F
  378.     @actor_window.index = 0
    - ~7 B) x* s6 p# _: ]# E/ V
  379.     @actor_window.help_window = @help_window1 _6 e, x  N) i% L  H: |
  380.     @actor_command_window.active = false
    ( F) N" C. D) G1 N+ X
  381.     @actor_command_window.visible = false+ g6 }% e$ E2 l( e0 _" p
  382.   end
    % U8 U8 h- c6 N0 U4 |9 S" F  Z9 w
  383.   # 结束角色选择
    ! V& \% [7 v1 {: ~# C7 X
  384.   def end_battler_select
    / l: z; [  J( }! u8 ]
  385.     @actor_window.dispose/ q. V: ]) I$ h5 y# f
  386.     @actor_window = nil
    ( ~& ~6 h" f+ D! K; l! k1 }% a) T
  387.     @help_window.visible = false& f4 A6 O+ r) x8 G5 b( t% W& n
  388.     @actor_command_window.active = true/ H- Q1 T( U1 N6 ]! \6 ^
  389.     @actor_command_window.visible = true
    % R: e1 T' S4 P4 N1 G4 s
  390.   end
    ( _% p! Z! \% Z& O$ x
  391.   # 刷新角色选择
    7 b/ {' K- T) Z: K' T2 r6 ^
  392.   def update_phase3_battler_select
    ) `- m. u1 V% \; ]3 `
  393.     @actor_window.visible = true8 G: g: i- w9 q( y2 A
  394.     @actor_window.update
    ; w; J8 K+ w. z$ W
  395.     if Input.trigger?(Input::B)
    ! B0 J1 q/ r3 X" K4 Q$ L* X
  396.       $game_system.se_play($data_system.cancel_se): N: d, O, ^( ~. M- ?
  397.       end_battler_select3 `; d( g5 R" r. f) ]: o- P
  398.       return
    3 t' P4 V1 z( j& c9 I2 E
  399.     end
    % c0 h+ U( A7 y; I& Y
  400.     if Input.trigger?(Input::C)
    / A. Y; E: t9 K. M  M
  401.       actor_id = @actor_window.actor_id) |4 d" y; Y* ?; Y9 U8 i1 Q* e( {% r
  402.       if $game_party.get_actors_id.include?(actor_id) or& r  U; i: N% X1 u4 u
  403.          $game_actors[actor_id].dead? or $ ?* d! j' Y7 T# Z
  404.          @changed_battler_id.include?(actor_id)6 e" l' [6 E: G- ~& {$ ^
  405.         $game_system.se_play($data_system.buzzer_se)
    9 E4 W1 I& d+ E0 {1 K; N
  406.         return
    # Q# q+ H* N; _8 o  u- ^, g8 `
  407.       end. z0 ?- @, W* q7 z: C0 A( a2 ?: \
  408.       $game_system.se_play($data_system.decision_se)
    ; ^" P5 v3 q; ^: }9 f( [' {/ {
  409.       @active_battler.current_action.change_to_battler = actor_id
    ( a6 x; A' J! X
  410.       @changed_battler_id.push(actor_id)6 O' e& ^* a3 P. E) c/ B
  411.       end_battler_select
    1 n- Y' G& p; z9 n6 l2 q
  412.       phase3_next_actor
    2 r+ N9 s  R# e8 t: {$ `5 A
  413.       return" k1 F7 U$ q! O& E& F0 E' f
  414.     end' b: [- M& f, s
  415.   end6 O6 z: l: u& d& M% f+ t$ |0 a" n
  416.   # 行动方动画  ^+ H& X1 T2 t3 V
  417.   def update_phase4_step30 L' W. w" s" B6 E
  418.     if @active_battler.current_action.is_change_battler?
    ' T% W! B  i$ S+ Q
  419.       @animation1_id = AnimationChangeBattler! |( v2 D+ n$ u6 P
  420.       @target_battlers = []& q6 }1 T" S5 [; |$ E
  421.     end
    2 f4 {% \$ N7 Z" |, H, b1 B9 F- K
  422.     # 行动方动画 (ID 为 0 的情况下是白色闪烁)
    : c& I! l1 |% [* V. Z( y
  423.     if @animation1_id == 0
    4 A# y# x3 z, _! G: q
  424.       @active_battler.white_flash = true
    * _/ u, K! M6 F
  425.     else
    / X4 \( W* g7 `3 E" n
  426.       @active_battler.animation_id = @animation1_id: J6 a9 q- M) H# k: P4 P
  427.       @active_battler.animation_hit = true
    ' j1 _" G' @' \* H/ Z
  428.     end% M$ A3 g: Z9 T1 Z9 w
  429.     # 移至步骤 4" @, K0 `0 r: i& L$ q
  430.     @phase4_step = 4
    ! n$ u# r- j% h/ y) @
  431.   end
    9 a+ ~5 f9 L6 z  t
  432.   # 对象方动画
    . T2 M9 A, d1 c: ]; K( h) I4 m
  433.   def update_phase4_step4+ |0 a9 \* B2 x- j& i) {
  434.     if @active_battler.current_action.is_change_battler?3 r- b- Y8 W- B) P" R& }0 h. W
  435.       actor1_id = @active_battler.current_action.change_to_battler  b4 p, w+ e- H0 P" _; ?5 |
  436.       actor2_id = @active_battler.id5 A, ?5 I& h* G& [, f
  437.       (0...$game_party.actors.size).each do |i|2 {. q1 `  d% g8 T2 V, g
  438.         if $game_party.actors[i].id == actor2_id* f% e5 L( p. s4 e
  439.           $game_party.change_actor(i,actor1_id)
    5 E1 c9 n3 [+ L8 Z( B* N! d
  440.           @active_battler = $game_actors[actor1_id]
    * w/ o7 P& T# O
  441.           @status_window.refresh
    % B  H' S3 w4 z5 ~5 z& x' R
  442.         end6 X6 t7 E$ H- d$ |9 i
  443.       end/ B5 m' J- q& k& A; H
  444.     end
    . r: e$ V2 A- j0 D- ?3 g1 @$ g4 q
  445.     # 对像方动画: l2 ]4 L/ y1 T* u9 K0 v
  446.     for target in @target_battlers% z8 c7 ?$ n% b: ?% _
  447.       target.animation_id = @animation2_id
    2 _+ ^* Z- M8 q2 {, R
  448.       target.animation_hit = (target.damage != "Miss")# P. X! m, u% i* l  J" M
  449.     end9 k; g1 ]9 J) v1 G9 Q) {8 i5 s
  450.     # 限制动画长度、最低 8 帧
    $ O5 m5 K; h$ x- {6 A0 I* J% W
  451.     @wait_count = 8; d. v) w  Q7 X( G" Q. u2 O& u6 g
  452.     # 移至步骤 5
    # X0 t3 ~( v/ H) @
  453.     @phase4_step = 5
    : R7 G4 t' `/ C- u4 S8 \0 X
  454.   end( ]; G/ r% t7 q) i1 j, c3 q! o
  455.   # 公共事件! W- {8 E) e8 h& z
  456.   def update_phase4_step66 E2 m$ W7 T1 S6 _$ H4 H
  457.     @target_battlers.each do |target|
    8 u1 A- {, b7 W9 H+ b& W  g3 C8 }
  458.       if target.is_a?(Game_Actor) and target.dead? and% D: H% H- g  q. U
  459.          !$game_party.other_actors.all?{|actor|actor.dead?}  Q! ]; a% z: M/ e) K9 m
  460.         @actor_window = Window_Actor.new
    - |" i: y, Z( W4 M
  461.         @actor_window.index = 03 f( n* a  O8 W) ^5 E* ?- l2 z  o
  462.         @actor_window.active = true
    / @, {2 v3 d7 J' E5 h7 \; g/ Q
  463.         @actor_window.help_window = @help_window
    ( x+ P, J6 X# Z. C# C5 f' S
  464.         actor_id = -1
    , a$ S, x. y, h7 L6 F
  465.         loop do
    ! J/ K1 x. O! }7 O) q0 H
  466.           Graphics.update
      x* w8 Q# d5 Q# R! R" }# p
  467.           Input.update
    - k& }6 D' s3 I2 }( z$ H
  468.           @actor_window.update% \: Q# n0 y# {9 ]0 k- k
  469.           if Input.trigger?(Input::C)% J, S4 j+ L+ q4 ]. @; ~+ E0 \
  470.             actor = $game_actors[@actor_window.actor_id]5 e3 x( T7 I( M- ?( O% Q- i
  471.             if actor.dead? or
    # N+ ^  g1 k& C% H: P
  472.                (@changed_battler_id.include?(actor.id) and
    , G. I" ]' T; i5 j% k6 \: [& [
  473.                 target.current_action.change_to_battler != actor.id) or" {% u: b  I) D+ \1 q& \1 x
  474.                $game_party.actors.include?(actor)+ Z8 u" P/ P; j6 Z4 Y: g1 Q& {* d
  475.               $game_system.se_play($data_system.buzzer_se)% f0 m/ A' o; P* R5 s0 J
  476.             else
    2 V3 [- R: w& I) U  L  ?
  477.               actor_id = actor.id
    ) J  V. S7 q; i% D3 I$ W* Y$ D
  478.             end
    5 x. ?( S( K* a7 P: ~1 n
  479.           end
    4 D/ F' a/ ^9 V4 U. ^1 d- Z
  480.           break if actor_id >= 0
    7 d9 n+ h# j0 J+ `1 N& |0 p
  481.         end2 [4 j2 {( }( @: A6 s2 H
  482.         @actor_window.visible = false; `9 M2 B0 w% I" S0 v
  483.         @actor_window.dispose
    ! [: F. m9 c$ s, _1 G
  484.         @actor_window = nil
    3 \/ ]# q2 i/ K: P2 r
  485.         @help_window.visible = false# w9 D. e( |3 h
  486.         (0...$game_party.actors.size).each do |i|7 y6 v8 c% o; [- Q# e
  487.           if $game_party.actors[i].id == target.id5 x, H4 p& l* C) _6 b$ E' q
  488.             $game_party.change_actor(i,actor_id)7 Y5 y, |6 V9 y$ S, p
  489.             @status_window.refresh
    4 i0 S$ X  i6 [& `( F% p  x
  490.           end
    # R# t! K, [& t0 n# G0 K1 _
  491.         end
    + u$ I8 K5 [) }; W) X9 [: b
  492.       end9 d+ N( t) W$ W: R% E( c6 {
  493.     end0 T$ D+ E- d2 X) R5 [- i2 M
  494.     # 清除强制行动对像的战斗者
    4 K* [0 y$ d: K! i
  495.     $game_temp.forcing_battler = nil
    9 i- k2 B3 w7 S# f. D+ R
  496.     # 公共事件 ID 有效的情况下" W: W. z& P1 G% M3 ?6 N* z
  497.     if @common_event_id > 0
    ) N9 t- F! `7 f2 G: d
  498.       # 设置事件
    ) F4 |3 z+ F. W2 C& M' {
  499.       common_event = $data_common_events[@common_event_id]
    . l  M8 q7 U8 E2 g' K5 o6 g
  500.       $game_system.battle_interpreter.setup(common_event.list, 0)
    1 I! O* \& y# ?
  501.     end
    7 g% F$ ~$ O7 N6 O3 n. v" v" f6 i
  502.     # 移至步骤 1
      c+ @8 B( M& [2 M
  503.     @phase4_step = 1
    1 w$ A, J( J2 L1 Y3 W& J! a
  504.   end# h/ k& M8 v8 D  `
  505. end
    : d( F% }; |7 a; |

  506. 7 o9 |# E# g2 z) n
  507. class Window_MenuStatus
    2 a7 G6 k4 w8 x" m1 c
  508.   def refresh9 i7 c3 w: h. O: p( v2 n
  509.     self.contents.clear
    * Y9 V* v; Q3 Y8 f1 w* E. m& ^
  510.     @item_max = $game_party.actors.size
    : _" }% ?7 B# U5 z
  511.     for i in 0...$game_party.actors.size
      t: Q: E0 @$ f9 `* n* R$ W) r
  512.       x = 4
    ) b- X2 [2 S5 J" I
  513.       y = i * 32
    ( ?! v6 s4 u1 a; V0 P7 p
  514.       actor = $game_party.actors[i]
    $ B' M1 f7 C5 N. b: d
  515.       bitmap = RPG::Cache.character(actor.character_name,actor.character_hue)' `) }, R2 ~3 D1 y
  516.       rect = Rect.new(0,0,bitmap.width/4,31)
    1 n1 `& w0 i# a* Z* i+ ^/ c
  517.       self.contents.blt(x+16-bitmap.width/8,y,bitmap,rect)
    " T3 I1 ]  m0 r' _0 ^" v2 _; b
  518.       draw_actor_name(actor, x+36, y)
    - G7 S/ R" h! C! s6 Z8 h
  519.       draw_actor_state(actor, x + 136,y)8 z* N- |$ M# y. x; ^+ I
  520.       draw_actor_hp(actor, x + 236, y,96)9 U. d& A' ~* Z$ E0 h" r2 t
  521.       draw_actor_sp(actor, x + 336, y,96)! g! _& x' c) C3 D: |* o
  522.     end9 s3 i& }( g3 x: J6 e& K
  523.   end" ~9 ^, [! G# e
  524.   def update_cursor_rect' J2 b/ U' E& k& d
  525.     super1 y/ q/ ?- R9 a2 J: Y& T
  526.   end
    3 G! D& I3 \1 X% o* t/ Q
  527. end
复制代码
说明:这个东西是转自enghao_lim的一篇帖子,版权归原作者所有。
作者: 姬文翔    时间: 2011-3-25 03:32
我现在就在用这个做一个类似的游戏。但用了这个脚本后发现有个大问题
# m) {# Q. t) D* P只有最后解决掉敌人的那个人才能得到经验……怎样改成只要是在该场战斗中出过场的都可以得到一些经验呢?
作者: 1584927450    时间: 2012-6-30 15:17
LZ能否帮我写个XP的口袋脚本,和你此帖的脚本功能一样,但是是四个队员出战,剩下的待命,可换人那种,求求你了,这是我梦寐以求的口袋脚本!!!!!!!!!!!!!!!!!




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