Project1

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

作者: px.凤翔九天    时间: 2010-12-16 22:42
标题: 转:战斗中换人,口袋口袋依旧是口袋 口袋换人系统
以前曾经写了一个,貌似那个贴已经失踪到不懂哪里去了,所以今天重写了一个。而且之前写那个还可以玩围攻,这个是模仿口袋的战斗换人,功能就是那样,没得介绍,插入脚本后即可用。
  1. module LimBattlePlug
    6 E( n6 Z, J# v4 H( o1 l6 C

  2. $ _/ I2 C4 Z1 k% x$ s
  3. # 队伍最大人数3 V/ {2 b! W) r0 Q( k, |
  4. MaxPartySize = 82 `7 j1 H5 ?2 i5 F; L* e& M

  5. : u9 q# N; c. i0 I" ]+ A
  6. # 出战人数
    ( U8 ~$ \: r! [# b' n8 M, a
  7. MaxBattlerSize = 1  D4 I9 M4 y4 b( ^5 p& g
  8.   Z) [8 c2 I! p
  9. # 换人语句
    5 I% z2 y, `: v' ~: s0 U
  10. WordChangeBattler = "换人"
    9 n& j8 Y: \! I# x6 Q- @

  11. 9 t$ w& e7 n. V3 t
  12. # 换人时播放的动画3 Z4 K* u3 K& ]2 b; X
  13. AnimationChangeBattler = 26  H. A1 j! `- ]0 h  ?0 R$ P

  14. - ^7 n5 b. r9 h
  15. end3 l- n; e" `. _8 a6 m

  16. * l2 E* F2 I. E. K* y& Y* M
  17. class Game_BattleAction
    " u. I( Y7 B' J  t3 P: Y, P. ?
  18.   attr_accessor :change_to_battler
    . |/ \+ s- k1 _3 Y+ x4 @4 R
  19.   # 初始化* I2 B, @- L. m' ^3 L% o& [
  20.   alias lbp_initialize initialize
      y* b; N/ T; m$ _
  21.   def initialize
    ) P6 B: x' h1 W- B
  22.     lbp_initialize
    . p/ h  O! x) ~0 ^
  23.     @change_to_battler = 0
    7 ]% ?( G+ @" u: }2 M. h+ d# g  Q
  24.   end0 ]5 Q) V' D, y, Z9 k
  25.   # 欲更换角色编号& j7 I, I; e' y. ]) g& M
  26.   def set_change_battler
    . `; l* d4 A4 e
  27.     @kind = 3% s/ j! ~, |/ s+ b* R9 O4 @" k
  28.   end
    6 B' x) j: q- Y( r( \9 @
  29.   # 判断行动是否为更换角色5 n- P& O& v2 e/ Y" M
  30.   def is_change_battler?
    / x5 t( v0 ]1 Z. M% h6 O: U- B
  31.     return (@kind == 3)& z$ X  q3 r6 B& c6 ]
  32.   end* v7 m* F; P  p" L+ E
  33. end" a$ y8 n$ A. `/ p' A

  34. * I9 Z) R& U8 O! p, y9 @
  35. class Game_Party' o$ o! m6 c: x- I
  36.   include LimBattlePlug" G2 W7 Y' N8 W
  37.   attr_reader :actors24 {! n& q+ d. J/ a
  38.   alias lpb_initialize initialize
    2 s* {. K( H+ k6 \) s0 A
  39.   def initialize$ z' U0 l0 J; \* ]
  40.     lpb_initialize# N+ S- L; q+ }, r. ~# k1 q& V7 u) Z
  41.     @actors2 = []
    ' S/ ~8 ^+ z3 T/ j& A/ {' ~
  42.   end+ J/ i; ~; k, }* r! [/ n
  43.   # 角色加入7 s2 w* N6 |; h* @7 o5 O: g$ U
  44.   def add_actor(actor_id)+ Z5 K( a4 q' t! [
  45.     actor = $game_actors[actor_id]
      `6 x  y7 L' e) r
  46.     if @actors.size < MaxPartySize and not @actors.include?(actor)
    ( ~+ `3 m" g7 V5 X/ C$ J7 o2 @( Q7 e
  47.       @actors.push(actor)1 j$ o5 v& d3 i& x, D$ \
  48.       $game_player.refresh
    8 |( D" Z- G( J& x6 c1 s4 G
  49.     end
    ' K& ?; ~. n7 H2 s% z4 C
  50.   end8 h/ H; {; E# ]* T6 i3 [
  51.   # 设置战斗的角色
    . d/ {; {* N0 f1 D9 o
  52.   def set_actor_to_battle) E( ^# ?' j+ y2 j# v& ?" @+ p  F
  53.     @actors2 = []! H( Q5 m' F6 `. J) a
  54.     @actors.each do |actor|
    + V, r1 I, I4 `& }2 H1 s4 _' e* P
  55.       @actors2.push(actor)
    8 R5 f) ]$ _1 l8 f: i
  56.     end9 o+ b9 r' L- g
  57.     @actors = []
      l) t$ ^( K" }( k
  58.     @actors2.each do |actor|8 d  {( b/ F# Z6 O
  59.       @actors.push(actor)
      {# O9 d' K3 m. d2 r0 k
  60.       break if @actors.size == MaxBattlerSize
    , j0 `* r9 ~4 `8 b) j! y; w
  61.     end
    ; M- \9 h4 i6 u- y# o  j' K+ C
  62.   end
    7 x' Z# r% ^. K: X
  63.   # 还原战斗的角色7 z0 v* Z% A% [, P8 n+ o1 H7 ?% i
  64.   def set_actor_to_normal
    " J. z2 A4 l' J" K
  65.     @actors = []
    6 K: I, W4 k; W' y
  66.     @actors2.each do |actor|
    7 z( L! t6 u' c  [& Q
  67.       @actors.push(actor)5 S/ Q! k& T# a9 Y3 v# c
  68.     end9 F- P7 Z: K! b4 l9 a
  69.   end
    . D8 ~% |. ~  U$ D* _9 I
  70.   # 获取角色id数组
    2 M5 Y' }8 Z+ R: X
  71.   def get_actors_id
    6 W5 K6 p5 n& R' ~" f
  72.     id = []
    ( q7 e/ U+ q( f4 \  a
  73.     @actors.each{|actor|id.push(actor.id)}
    5 P$ a1 m2 y& G- v
  74.     return id
    8 o  m- O1 ?7 o& P
  75.   end' _" T0 T5 }5 I' ~) a, m
  76.   # 获取角色id数组& ?$ L; W1 f( Y9 k: z
  77.   def get_actors2_id
    8 x) t6 l. C& E- @3 o( O; E0 b6 |  `8 L
  78.     id = []
    9 Y( F4 P3 R5 M+ I  t9 N: H/ ^
  79.     @actors2.each{|actor|id.push(actor.id)}: Y& O) G& ?6 q$ m6 r+ ~
  80.     return id
    / u4 K3 q6 V! \2 D7 O- C" E
  81.   end
    3 M7 D$ m. F4 p
  82.   # 兑换角色& Z) d* b) A7 g; C" }+ A
  83.   def change_actor(index,id)
    & n7 V( I3 ]0 R: h9 }
  84.     @actors[index] = $game_actors[id]- A& F8 i0 H  b
  85.   end" F( q0 `6 Q( l, R2 p% B
  86.   # 全灭判定
    % w0 o) a5 @& Q  o
  87.   def all_dead?
    # V! r6 n' v9 P1 \5 e. m1 R
  88.     # 同伴人数为 0 的情况下7 r" N" |. E" t% a: k9 f. [! n- K
  89.     if $game_party.actors.size == 0) L; I( `) Q! h% g( e( y
  90.       return false) _" O+ _$ n& n$ e
  91.     end
    ( T0 O: o; L) I2 }, Q
  92.     # 同伴中无人 HP 在 0 以上
    8 l* e( k" o" c* z
  93.     for actor in @actors2
    5 D; i# f/ M1 Z) j4 m
  94.       if actor.hp > 0+ Z3 A8 m( G$ m0 x, I; v5 x
  95.         return false/ H( ^" Q* H8 B4 V
  96.       end% t' _" D* t1 R8 a
  97.     end
    9 m- ]+ S7 X8 E/ b& z: s
  98.     for actor in @actors" T2 Y. W8 W% @9 Y: k2 W5 A
  99.       if actor.hp > 04 L( Y4 D: {5 [
  100.         return false
    4 K# N: [: R1 _. L0 {9 X
  101.       end
    0 g+ f/ v+ G& w+ K5 b& o& P
  102.     end4 n5 P3 t5 G, I, a; b% _  W
  103.     # 全灭( E0 w3 c: b2 N) ]
  104.     return true: a% j" N, q! e2 Y
  105.   end
    4 A4 r6 K0 K; S$ \
  106.   # 其他角色
    + D' A. C& w7 [! B2 H* l
  107.   def other_actors. l- W& m0 w3 b9 h1 c
  108.     actors = []4 `; ]6 p) u) J' P, y
  109.     @actors2.each{|actor|actors.push(actor) if [email protected]?(actor)}8 _% z: G" L, T0 k: b+ F( C+ @
  110.     return actors
    ! E  m/ C" `  `# w6 |1 z  Z' g8 ~- L
  111.   end
    5 {' v$ @" Y: O
  112.   # 角色位置互换" \" t5 {% O; j6 W7 z$ \
  113.   def change_actor_pos(id1,id2)0 f# v' O2 i: f
  114.     actor_id = []7 N) u" d7 p9 m( Z/ t
  115.     @actors.each do |actor|2 O6 J/ r" I- j6 I# q
  116.       actor_id.push(actor.id)% `! y( |( s% d0 l1 p, T
  117.     end3 V, N% v4 `( {! m
  118.     return if !actor_id.include?(id1) and !actor_id.include?(id2)
    * Q4 V# i' ]5 c7 O* N
  119.     id1_index = id2_index = -1
    0 A- |% w7 B' D' V
  120.     (0...actor_id.size).each do |i|
    & L4 j6 m1 h/ ~5 s# K$ K( u  [
  121.       if actor_id[i] == id1& Y$ L8 m  a. H5 O# c
  122.         id1_index = i( Z3 I6 [8 r7 @. a0 r8 S
  123.       elsif actor_id[i] == id2
    ! I8 \. O$ U) ~/ c9 T. v  [
  124.         id2_index = i8 C4 [, ^* \! ?- X+ Y
  125.       end
    : b; c: A4 a" N7 V3 S: ?. u: \
  126.     end3 q- k- O& d! q; O
  127.     temp_actor = @actors[id1_index]
    - z% O& t) c: q7 V% F6 N9 J  G
  128.     @actors[id1_index] = @actors[id2_index]
    ! z! p" g5 b8 \6 [
  129.     @actors[id2_index] = temp_actor: M" x6 o$ @) I0 E" a% r
  130.   end4 U" ~4 l' l: k' M7 `5 o
  131. end
    5 m) P& t! R) i* s( m

  132. + q; g# D. P0 j# _2 k: ?
  133. class Window_Actor < Window_Selectable
    7 q+ w& f. L3 N" `! ~
  134.   # 初始化" @' ]1 R7 ]/ E
  135.   def initialize
    5 ^  m) C1 O8 H# @
  136.     super(0,64,640,256)
    & Y) |3 |6 l9 C& M  m! T0 r
  137.     self.back_opacity = 1601 x+ l9 d( ]  e! ?
  138.     refresh
    " Z- ?$ V% I, j3 Q1 v4 \
  139.     self.index = -1+ E: `1 Z2 @$ R. U$ N
  140.     self.active = false
    + ]  ?5 K1 \, c3 S, X
  141.   end
    ) w* p' q* r0 T( p8 l
  142.   # 刷新
    - U! g) y6 ]- ~2 r' q7 \
  143.   def refresh
    ( F0 z6 a7 v/ f, P% R$ R
  144.     @item_max = $game_party.actors2.size
    4 D5 C7 A2 B( C( m
  145.     @data = []; |; I% @6 j0 Z- Y6 ?) v2 x
  146.     $game_party.actors.each do |actor|6 N* m( _  M, _3 @
  147.       @data.push(actor)$ R; ?" F& t" G7 K- a
  148.     end
    & h% ?  e2 U1 [
  149.     $game_party.actors2.each do |actor|
    2 N: e$ H# z" ^6 ]. H
  150.       @data.push(actor) if [email protected]?(actor)
      Y2 t. a+ U$ ?  M/ |* Q, b
  151.     end$ c- ~$ ]; K+ V: {
  152.     if self.contents != nil
    - j+ `* [7 l0 {4 O$ w; ~
  153.       self.contents.clear
    - c& m! T9 o9 R" r3 o7 Z1 E
  154.       self.contents = nil; D) E1 w) d6 \6 N
  155.     end4 c7 x  q% V9 l1 ^# J3 R% U6 ?
  156.     self.contents = Bitmap.new(608,@data.size*32)) f) S3 v( l: Q  q2 g6 o
  157.     x = 4
    " [% n8 c/ W/ k
  158.     y = 0) s% c2 s0 P8 C7 m% E' v9 e5 ?
  159.     @data.each do |actor|
    4 A. }# c2 U9 U. ?' @* W7 y+ a, \" [
  160.       bitmap = RPG::Cache.character(actor.character_name,actor.character_hue): E  x; G& `  ^1 Y, F# e+ S
  161.       rect = Rect.new(0,0,bitmap.width/4,31)9 s2 I5 W4 i% u& G* i' G, d0 H; a
  162.       self.contents.blt(x+16-bitmap.width/8,y,bitmap,rect)/ L' R, M! ?( k. }# Z% Z! P1 ^
  163.       draw_actor_name(actor,x+36,y)/ Q; p0 L1 h  v' Y3 k
  164.       draw_actor_state(actor,156,y); V8 ~. g3 W) r/ A( A
  165.       draw_actor_hp(actor,x+256,y,96)& ?* g- C3 g6 \, U
  166.       draw_actor_sp(actor,x+376,y,96)9 D9 s( C9 Y$ e2 D% p2 M$ H# C
  167.       if $game_party.actors.include?(actor)
    ; z, L. e$ X- q. J
  168.         self.contents.font.color = text_color(6)
    4 s" [1 N4 ^7 H2 N: e7 \
  169.         cword = "出战"
    / g- E+ J5 u3 g8 e
  170.       else2 E/ u  w. _% v6 p5 L3 Q* D
  171.         self.contents.font.color = text_color(0)3 ]; [3 _; Q2 [% X" T/ X' E
  172.         cword = "待战"' H% l/ R, z% W( I
  173.       end
    ! k: r* u* |2 P% U
  174.       self.contents.draw_text(x+496,y,60,32,cword)
    % z; ~* S! j( R3 y. Y
  175.       y += 329 V$ l- S& }. a- g% h4 m) ?
  176.     end
    . v& o5 w4 B4 ^
  177.   end
    4 R8 N& [9 R: q: r( Y6 {9 t
  178.   # 获取当前角色编号
    : C! E9 z% {% H2 P8 v; H3 p. P
  179.   def actor_id
    ( G* q9 h1 v. f$ u$ w; c
  180.     return @data[self.index].id6 k- D% @+ G; X9 ^; G+ ^. R  _
  181.   end
    7 h2 a! K" |' o+ J
  182.   # 刷新帮助
    $ N( H! T) V/ A2 W
  183.   def update_help5 L! q; |1 B" J0 B$ M" G# M* H
  184.     @help_window.set_text(@data[self.index] == nil ?\; q* ?& X) k3 }
  185.                           "" : @data[self.index].name)! f' w1 H" P+ O' H* K% x8 ]! U
  186.   end4 l- W" Y  k& q, h4 K9 F
  187. end: i/ ~2 i: t- x/ ]

  188. 3 ]4 k6 r- w& Z4 [' }; i
  189. class Scene_Battle. ]. ^% G1 Y* J; ?- G
  190.   include LimBattlePlug
    , V! ~% P/ {) J# P$ a  t
  191.   # 初始化* ?6 p8 n0 {$ X# u
  192.   def initialize
    " w& R  w# l3 V/ }0 w, R3 m* z
  193.     $game_party.set_actor_to_battle8 D3 {% x4 F, U/ L1 W! w9 r0 X
  194.   end
    0 v$ f/ P& D2 ~9 i0 ^
  195.   # 主处理
    ! d. E3 D. A0 X- [; y0 ?  Z" w0 G4 T
  196.   def main) e6 V5 ~! B3 J% C
  197.     # 初始化战斗用的各种暂时数据. u6 ?$ I& D5 I$ L2 ~
  198.     $game_temp.in_battle = true2 e1 X  _, z/ `0 B8 o2 {1 d- [
  199.     $game_temp.battle_turn = 04 ]* ?1 Q4 b. N
  200.     $game_temp.battle_event_flags.clear4 M: B% `- |& E& g
  201.     $game_temp.battle_abort = false' G4 X: A9 a4 ^2 P. L
  202.     $game_temp.battle_main_phase = false
    ; h8 j: g: Q4 U6 g) b. X
  203.     $game_temp.battleback_name = $game_map.battleback_name1 f/ g, e+ t2 ?# k' R/ o: g: q9 D
  204.     $game_temp.forcing_battler = nil- F+ N: ^8 y( Q5 ?/ U' F
  205.     # 初始化战斗用事件解释器0 J. J3 F- l  V  R
  206.     $game_system.battle_interpreter.setup(nil, 0)$ _6 A) @; m" k0 x+ o/ i
  207.     # 准备队伍& u1 N! A& q$ i7 j4 _1 }4 |: u
  208.     @troop_id = $game_temp.battle_troop_id) q! X4 r& d- t4 `8 I
  209.     $game_troop.setup(@troop_id). f2 X! j3 x* Y1 b" I" E  }% W- a
  210.     # 生成角色命令窗口/ h) O1 C' }- T0 Y
  211.     s1 = $data_system.words.attack" {' o9 t- `* F8 O5 W! _. o
  212.     s2 = $data_system.words.skill
    $ _' v% W9 z- u
  213.     s3 = $data_system.words.guard
    " h/ c, w+ W  |* A
  214.     s4 = $data_system.words.item
    - n0 K, U. k8 v4 k
  215.     s5 = WordChangeBattler' _, G3 Y7 Z! e% x5 p6 J; U
  216.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4,s5])
    7 y; T2 ~$ S" Z
  217.     @actor_command_window.y = 128/ \& U: D/ k2 y' n
  218.     @actor_command_window.back_opacity = 160- i$ M% s8 Z* S& h
  219.     @actor_command_window.active = false
    ; R% }+ N% C; C
  220.     @actor_command_window.visible = false* ?$ D; z4 U5 J3 V$ S" c# [
  221.     # 生成其它窗口$ Q- r/ i7 e( r7 Y  v
  222.     @party_command_window = Window_PartyCommand.new+ S3 b) B" X9 U  r9 Y) k
  223.     @help_window = Window_Help.new
    9 t& M2 ^* N7 L1 p; w: ?
  224.     @help_window.back_opacity = 160
    6 W1 k1 B: H/ ^7 s
  225.     @help_window.visible = false( a  ]+ _& p2 Z* Q% M
  226.     @status_window = Window_BattleStatus.new: z/ ^; m! h5 ]2 P" ~# V$ `
  227.     @message_window = Window_Message.new7 n& v$ O' ^3 x1 x
  228.     # 生成活动块
    6 z  S+ P. h6 i3 z" ^
  229.     @spriteset = Spriteset_Battle.new
    4 \. E, x+ Z( b$ h: T- J1 Z
  230.     # 初始化等待计数
    7 ~2 @) {  i; k4 Z2 P7 r
  231.     @wait_count = 0
    1 Z/ g7 ]0 z; O* i% E) m" G
  232.     # 执行过渡" l  j" f( F9 i0 ^9 W) `% r
  233.     if $data_system.battle_transition == ""
    8 _$ j" l' K' g3 i/ ?; o
  234.       Graphics.transition(20)
    ' b# J" C. \8 V' V
  235.     else
    9 K7 ^  E" t5 C( [) g( J
  236.       Graphics.transition(40, "Graphics/Transitions/" +$ L$ P6 ~7 W' }4 }# |
  237.         $data_system.battle_transition)
    + L& C" R0 N% T: T+ w
  238.     end
    / N2 |- }/ g; C- n
  239.     # 开始自由战斗回合/ `2 ~; G  ^7 X
  240.     start_phase1+ o4 e; z2 B2 B3 O5 Z: Z
  241.     # 主循环
    7 e. X; J3 ~7 ]+ T
  242.     loop do8 B( r9 q; U/ s1 x( Y7 P( [
  243.       # 刷新游戏画面' c! g# H$ |  n6 V
  244.       Graphics.update( o' Y: ^. B- {- M- G) a
  245.       # 刷新输入信息
    ) K3 z) k) J- F7 t3 Q7 v$ p( l) q
  246.       Input.update
    6 O$ A/ c; ?) J" m% @- `3 n1 I; j
  247.       # 刷新画面9 B  k% m; b0 \1 S& ]" `# b$ z
  248.       update4 n; Z9 @' l1 C5 i( f6 w/ `2 \! h
  249.       # 如果画面切换的话就中断循环
    # v3 X; k: h" C; e: |5 z
  250.       if $scene != self, a/ W. ~+ u" i; I( Q
  251.         break( d2 x$ S( V0 c
  252.       end% ]6 A8 V. \: H! \9 _
  253.     end  `0 F) p0 L6 V: w  H: p% w
  254.     # 刷新地图
    1 w" I4 W' R2 i* h8 b: u" Z+ }
  255.     $game_map.refresh8 [, J  W6 a. L3 ?$ A" R
  256.     # 准备过渡
    2 u1 T( L; P+ O/ Y$ }
  257.     Graphics.freeze+ Z  W+ N9 |) ?5 ^: a3 \
  258.     # 释放窗口
    % d8 N! r4 a0 ~+ I) `4 g  ^4 ?
  259.     @actor_command_window.dispose3 {, B* }" V/ o) A3 b+ X
  260.     @party_command_window.dispose
    * Y) @$ o, _# F6 n& E
  261.     @help_window.dispose
    8 W, x9 u- w- t& R
  262.     @status_window.dispose
    / |+ H$ s4 A% ?5 I0 M
  263.     @message_window.dispose
    5 J2 ^. q! i9 q, _2 L  X+ L8 a
  264.     if @skill_window != nil
    3 q) ^  E' T" u& t
  265.       @skill_window.dispose" f. @4 g7 ?9 e( c- H
  266.     end/ c& C  u  z7 {2 ?
  267.     if @item_window != nil! s4 X/ y7 O) ?+ Z
  268.       @item_window.dispose
    6 Y$ }* f& s2 b7 k' u( n+ o$ l" O
  269.     end
    + g8 M$ h- r; ]. F+ ?6 k+ N; ^
  270.     if @actor_window != nil
    9 C& a) i, J6 E4 |$ U. g0 P; W
  271.       @actor_window.dispose
    1 q! ?- R/ a# ~" {4 H! f0 T
  272.     end& p3 e. [4 x. m) D2 b7 f
  273.     if @result_window != nil( f. H0 E$ I; U0 `$ W$ Q% Q
  274.       @result_window.dispose% J3 J* ^/ o) \9 ]
  275.     end- l/ X; F5 i& c" \* @8 {$ i; s
  276.     # 释放活动块
    , [4 r( M8 N) }9 N# Q
  277.     @spriteset.dispose$ f' T2 L! v! b, U6 s. h1 @6 S8 T/ v! b
  278.     # 标题画面切换中的情况2 c4 O" D! V, A+ G7 H
  279.     if $scene.is_a?(Scene_Title)4 O! Z- u8 J: i7 k" ?+ s
  280.       # 淡入淡出画面
    ' W% H6 E) m, ~# I& J+ e; {: [
  281.       Graphics.transition! S$ {3 L" s& E& z
  282.       Graphics.freeze7 K, r, U9 N" x4 Q
  283.     end
    # |% c$ n/ O& q3 e+ Q
  284.     # 战斗测试或者游戏结束以外的画面切换中的情况) p+ r" }( ?$ b: w, K% }' L
  285.     if $BTEST and not $scene.is_a?(Scene_Gameover)" ]4 t/ Z% y2 R
  286.       $scene = nil
    : {7 V$ o, M9 O& j- [: L
  287.     end
    # m6 J7 i: F; J9 ^
  288.   end' h8 U  u' d* {" x" X3 w0 Y
  289.   # 战斗结束
    - }2 M! R5 i/ j7 q2 _, Q3 o
  290.   alias lpb_battle_end battle_end. l& T1 M4 Z2 D# H: y1 [
  291.   def battle_end(n)+ L( j# ]5 Q. C# H& ?) l% b
  292.     lpb_battle_end(n)
    ! e' T! h: m( G' [5 p" C/ z& y
  293.     $game_party.set_actor_to_normal% Q3 f/ t4 _9 [1 U, Q; h
  294.   end9 b/ P# J) ^: E: e! u
  295.   # 开始回合3
    " b$ S' }6 d8 Y/ Z, ]3 K2 u
  296.   alias lbp_start_phase3 start_phase3* @7 f' P; {. ]( i4 {9 Q+ w  ^2 Y
  297.   def start_phase3
    8 @9 c( T- I+ R$ J
  298.     @changed_battler_id = []: n# G  d- \" u/ n1 j" F8 p" G# M
  299.     lbp_start_phase3
    : v% g5 P+ L2 X* u
  300.   end
    $ {  `4 R$ c7 j9 {$ s. q
  301.   # 刷新角色命令回合画面
    + `3 _! g6 p( m: G
  302.   def update_phase37 W& L! ]1 H8 B: q  n3 ^1 {
  303.     # 敌人光标有效的情况下
    # P( i1 G9 @2 a- j) w, a2 b7 R# Y
  304.     if @enemy_arrow != nil0 q. Z7 I1 Q: e0 C
  305.       update_phase3_enemy_select! k9 L; [$ t' h5 F. E) g) R
  306.     # 角色光标有效的情况下# z' G; b: ]* m( v0 R2 A/ v) j1 s# s
  307.     elsif @actor_arrow != nil
    4 z& G0 X! _* s. {4 F5 D
  308.       update_phase3_actor_select( B' @% z4 m; j& u/ w+ f9 H! A3 j
  309.     # 特技窗口有效的情况下
    : k+ F/ ~& `; m% f# g* ~
  310.     elsif @skill_window != nil) ]3 `2 H* R1 G; |# O, a; R$ ]
  311.       update_phase3_skill_select
    5 F% o: i: C+ Q  C5 X+ ~, t
  312.     # 物品窗口有效的情况下
    & o9 o8 {& l, q5 u9 @5 L
  313.     elsif @item_window != nil
    ( D' v  Q; n3 N" j7 S: a- u. ~
  314.       update_phase3_item_select! n' h5 o) l1 O7 z9 Z4 g
  315.     elsif @actor_window != nil$ F. @% D$ `% t$ ?2 L$ ]
  316.       update_phase3_battler_select
    * C: u6 V" Y, _5 n. w7 J
  317.     # 角色指令窗口有效的情况下. v$ b0 J" u0 z
  318.     elsif @actor_command_window.active
    3 ]- A* p5 G- @# ~0 f
  319.       update_phase3_basic_command
    " A5 _6 C3 c" c8 g: S4 ]8 h) ?4 X9 O5 O
  320.     end
    1 y" f. L1 p" N) D5 p
  321.   end# @3 [( ^3 Q: a: V& J2 z
  322.   # 角色基本命令
    $ s; [. B3 Q% v7 G
  323.   def update_phase3_basic_command9 e  ?# y3 B7 F1 L7 R  [1 N+ R
  324.     # 按下 B 键的情况下* h; ?+ ^) s3 ?& J
  325.     if Input.trigger?(Input::B)+ Z) @' y: m$ L  I- _2 k
  326.       # 演奏取消 SE4 D' _" k3 ?8 l7 H; Z6 K6 b
  327.       $game_system.se_play($data_system.cancel_se)
    : |* d$ Z8 b# ?
  328.       # 转向前一个角色的指令输入9 v: _9 u" K- m$ X, ]  C
  329.       phase3_prior_actor
    ( o3 q( j9 G4 e( u2 y: s
  330.       return$ m$ s- O- S  F8 B9 i$ j; D
  331.     end
    $ o4 m# Z0 U; m$ {2 C. ?
  332.     # 按下 C 键的情况下
      C, O9 L8 r7 w- M% F6 f7 O: T
  333.     if Input.trigger?(Input::C)
    + |0 k/ ?/ Q8 Z7 Z# @, \7 U* s
  334.       # 角色指令窗口光标位置分之
      D# L% \  f! d1 d! Y
  335.       case @actor_command_window.index- {# o* S' U, y1 Y7 L$ E
  336.       when 0  # 攻击
    5 [6 Q3 m: n( {3 n; F/ E4 a
  337.         # 演奏确定 SE
    ( M+ [7 B6 N8 ]/ R$ l
  338.         $game_system.se_play($data_system.decision_se)
    1 F: N/ z' [% l, T
  339.         # 设置行动% O% z- J5 d- y- j" q9 a
  340.         @active_battler.current_action.kind = 0
    9 M: v) K- ^$ e0 O- j
  341.         @active_battler.current_action.basic = 0
    , @3 S9 Q0 ~, C& e/ |) e  s
  342.         # 开始选择敌人. _) ]+ W- i! Z! ?3 O2 ?( b0 D
  343.         start_enemy_select% M+ V3 e3 o) t1 @7 i
  344.       when 1  # 特技9 ?5 V' F, H* }2 y7 o
  345.         # 演奏确定 SE
    6 [+ `( s- Q1 `' ?- O9 ]6 S+ b
  346.         $game_system.se_play($data_system.decision_se)7 ?& y1 A+ V, O% X0 s
  347.         # 设置行动  u% H/ K$ U4 h
  348.         @active_battler.current_action.kind = 1
    ' p& b6 o% C. K
  349.         # 开始选择特技, W5 Y+ y! t8 J# t" N
  350.         start_skill_select! P6 e# K- `8 X% h8 H1 b9 V% D' t( H
  351.       when 2  # 防御" T# p/ E7 P5 K" T3 t+ e9 C5 ]
  352.         # 演奏确定 SE- D% _5 e4 r; Q: y( M* M2 U
  353.         $game_system.se_play($data_system.decision_se): z3 [2 g0 x- ~2 P( E
  354.         # 设置行动
    - M: l& [6 \+ g9 }
  355.         @active_battler.current_action.kind = 0" r. Z! i$ }4 k  _
  356.         @active_battler.current_action.basic = 1
    : ~. [4 B0 w5 x5 R" t
  357.         # 转向下一位角色的指令输入
    + m/ ?" F2 `! h9 s( ]
  358.         phase3_next_actor
    ( {) D8 p7 n4 q. U8 {' \' q* S8 z
  359.       when 3  # 物品
    ( h+ o+ F8 a* M! S) e: _6 H5 C
  360.         # 演奏确定 SE
    ' {/ d" u* h; Q" E! H
  361.         $game_system.se_play($data_system.decision_se)
    % s& `- t; T5 _
  362.         # 设置行动! E/ ?2 u! Y4 x! J1 O6 n+ M* ?
  363.         @active_battler.current_action.kind = 2( K8 t- S+ ?! v' y3 s) O" @
  364.         # 开始选择物品( X+ L! q. j6 C
  365.         start_item_select1 c" B, t7 M% y
  366.       when 4 # 换人3 Y3 C8 p1 ?! K: `. d
  367.         $game_system.se_play($data_system.decision_se)" I8 J" m( ?$ ?" x% t7 H6 u# }
  368.         @active_battler.current_action.set_change_battler/ Y/ t; v) F( i. a+ v
  369.         start_battler_select- e; b/ f5 b3 I8 ^
  370.       end
    7 |9 P" E/ n6 r/ m
  371.       return+ o3 g+ m' K* `8 t- `
  372.     end
    " |8 n  |/ w9 V- Y* c4 |
  373.   end
    / t; D" @0 f- j) a+ z' U
  374.   # 开始角色选择
    * Z- l8 Q( ]$ t- x
  375.   def start_battler_select
    0 ?8 K- |; J1 _2 N( X. u
  376.     @actor_window = Window_Actor.new
    : w' ]: O$ _# U' I
  377.     @actor_window.active = true: p3 u; [8 s  `, k' C. W' w, d5 d8 s
  378.     @actor_window.index = 0
    0 I# k, V' J1 i2 h8 _8 n
  379.     @actor_window.help_window = @help_window) V/ E. }, |; V& D! d
  380.     @actor_command_window.active = false
    / H0 P8 F2 F  S/ s8 M5 n# l
  381.     @actor_command_window.visible = false/ ]$ q2 k/ C* c4 D" B3 F
  382.   end/ ~9 o4 R! Y* E! ]8 @$ S/ X
  383.   # 结束角色选择( A7 h7 b  k0 _: S
  384.   def end_battler_select- G- n# t/ f' A  u' r$ p$ @2 W& G2 Y
  385.     @actor_window.dispose7 i. p# X. E( U/ N
  386.     @actor_window = nil: C5 d- U# F) O0 T# c
  387.     @help_window.visible = false
    * f3 R; t" ?- Y# a& o
  388.     @actor_command_window.active = true
    2 @) C/ _  z; P9 j" g9 u
  389.     @actor_command_window.visible = true: h4 q- k" H) [
  390.   end* W  O- ]# o6 t& L  z
  391.   # 刷新角色选择& C8 Y0 Y/ t( y8 o
  392.   def update_phase3_battler_select- D6 C+ E& R5 G  T% }) }
  393.     @actor_window.visible = true
    , G- [0 V8 `% q  h' X' N" e
  394.     @actor_window.update: i0 @8 o& `9 y" A! M- r0 t
  395.     if Input.trigger?(Input::B)
    9 Z+ p4 m9 n& {+ z
  396.       $game_system.se_play($data_system.cancel_se)
    % C( w1 V) Q( S" W- Z3 {: n
  397.       end_battler_select
    ' H0 H; X4 X, U: B; Y
  398.       return
    2 O! `2 W+ b" O; r: z
  399.     end
    ' w; H2 \! _8 r# e% y8 Y
  400.     if Input.trigger?(Input::C)% y, H- B2 f& s- H! K- A5 \
  401.       actor_id = @actor_window.actor_id' m, E/ m. e6 B8 G  v* \% P
  402.       if $game_party.get_actors_id.include?(actor_id) or( R. p' `1 `7 u( D: Y/ x4 d
  403.          $game_actors[actor_id].dead? or 1 x4 d/ p1 s2 D9 S& d
  404.          @changed_battler_id.include?(actor_id)
    ! l# j. |8 F7 G3 Q
  405.         $game_system.se_play($data_system.buzzer_se)* b7 K# d' h, @0 G; {
  406.         return; C6 m1 m/ t, F4 s) C* k
  407.       end
    6 o% I! C' x3 o$ I" Q
  408.       $game_system.se_play($data_system.decision_se)
    8 n; W/ A& u/ Y( {5 M
  409.       @active_battler.current_action.change_to_battler = actor_id
    8 b9 S: D; I" N
  410.       @changed_battler_id.push(actor_id)
    - \6 ^# ~; Y' b: A, W
  411.       end_battler_select$ T3 [) h# Z* J, e" L6 Q' H# ~
  412.       phase3_next_actor* r  {) W) r  ^5 y+ ~
  413.       return; t+ `( x# B: s- p
  414.     end: M  A) X$ R+ I4 B+ n
  415.   end) n' r1 i# \1 p4 H! |" U3 D
  416.   # 行动方动画
    & W$ i5 n& J+ {. q- e. b
  417.   def update_phase4_step3
    4 u" z1 C" Y2 o+ u2 m
  418.     if @active_battler.current_action.is_change_battler?% w. q' Z' A5 X& O3 [7 ~$ U$ a
  419.       @animation1_id = AnimationChangeBattler& F& A! }% K9 R
  420.       @target_battlers = []/ ~1 M) R: N2 r9 m- X
  421.     end
    + o  l2 M( b6 H0 t8 @/ l
  422.     # 行动方动画 (ID 为 0 的情况下是白色闪烁)# G! _- w# D2 z8 q6 A. U
  423.     if @animation1_id == 0  y3 A4 P( |( a7 M7 m
  424.       @active_battler.white_flash = true
    , c/ ]1 ^" B* U: U
  425.     else* M* h' ~4 u- a# n: h
  426.       @active_battler.animation_id = @animation1_id
    ) U! p+ W! e6 N- @+ w
  427.       @active_battler.animation_hit = true! [# b& f6 o9 R. n; ]: x0 O2 d0 U
  428.     end+ L+ d$ j6 r! p, s+ n- i
  429.     # 移至步骤 40 X" O1 G5 Z# R% `
  430.     @phase4_step = 4" v: o: u, P0 @* @. t4 m7 e+ U
  431.   end; p$ Y( M) h4 ?) o6 d
  432.   # 对象方动画1 I4 X- E7 t; a
  433.   def update_phase4_step47 K# x- K! R) Q6 v* t% R! ~
  434.     if @active_battler.current_action.is_change_battler?# F- j4 h7 I3 U
  435.       actor1_id = @active_battler.current_action.change_to_battler
    9 e8 M* O  E, k: E# q3 K
  436.       actor2_id = @active_battler.id. n/ ~& K. R, b2 K; X  Y9 V9 P
  437.       (0...$game_party.actors.size).each do |i|5 f$ J, [/ o' }2 f! u6 E, W( P0 U
  438.         if $game_party.actors[i].id == actor2_id2 u% D" E1 H( F, X
  439.           $game_party.change_actor(i,actor1_id)
      [5 G- C7 u. n3 |. N
  440.           @active_battler = $game_actors[actor1_id]" Q$ o- l6 K- I$ E- r7 i) K
  441.           @status_window.refresh" L) ]# I4 H1 B( f
  442.         end% s3 W3 I' {  o* a; {4 Z" r
  443.       end; ?8 C$ ~; ^  i( {, f* N  U* u
  444.     end" t9 |$ j1 ~  {$ f1 g
  445.     # 对像方动画
    5 _6 n- F2 W1 d1 Y; B9 w
  446.     for target in @target_battlers1 V0 R/ _! w* X( l! k
  447.       target.animation_id = @animation2_id# K# E  w* O( `3 o
  448.       target.animation_hit = (target.damage != "Miss")" @1 I/ q, A* O1 ?
  449.     end& [% y# Q* Z& U3 B. n) c" C& K
  450.     # 限制动画长度、最低 8 帧- E' x9 y5 e; q& a& y+ h7 [# T0 t
  451.     @wait_count = 8
    + }2 \! }; ~1 D" [
  452.     # 移至步骤 5
    . T: E) J& \5 T: N, e6 r
  453.     @phase4_step = 5) \$ k- V2 c; L! Y
  454.   end  h& n* ]" O) ~! I( Z' y
  455.   # 公共事件4 W1 w" G2 r' M, a( u
  456.   def update_phase4_step6
    ) U. c" k$ P: V: f! \" M
  457.     @target_battlers.each do |target|
    . a- o  `2 A7 l# d/ [; h" @# b
  458.       if target.is_a?(Game_Actor) and target.dead? and
    6 [! u$ X2 Z! v: N8 b. h
  459.          !$game_party.other_actors.all?{|actor|actor.dead?}$ D, Y- h8 H' V7 {3 x0 g$ c' ?
  460.         @actor_window = Window_Actor.new9 `" S  h2 |( g% N; n3 d( A
  461.         @actor_window.index = 02 I! P4 l# g0 v0 ?5 Z) [- V
  462.         @actor_window.active = true: b( C2 G" }  }
  463.         @actor_window.help_window = @help_window6 \' ]# D1 V8 q5 a. t6 l
  464.         actor_id = -1
    ; ?- q) Y; h( T* I+ C
  465.         loop do( U, Q& `1 O( d
  466.           Graphics.update
    2 [% b3 b" R( e9 K0 _$ Q
  467.           Input.update
    - p. A  ^) Z0 O, ^# D% {* d
  468.           @actor_window.update
    " ?" m$ A2 t4 {. M
  469.           if Input.trigger?(Input::C)
    1 U4 o$ p. f( H
  470.             actor = $game_actors[@actor_window.actor_id]
    ) z0 u! x- \6 }4 {5 y5 a
  471.             if actor.dead? or& m! K2 B) V3 a! W/ W! f) d2 G
  472.                (@changed_battler_id.include?(actor.id) and
    * B  P# `5 S" Y8 b
  473.                 target.current_action.change_to_battler != actor.id) or
    ! b  Y$ q- ^  v6 s  T
  474.                $game_party.actors.include?(actor)& B! A5 D: [; n# S" f  Y2 r
  475.               $game_system.se_play($data_system.buzzer_se)* X5 X, I: a/ `3 R2 F
  476.             else2 U9 o$ r# ^3 @: A( K
  477.               actor_id = actor.id
    + b& _0 w) t0 q9 J) W
  478.             end
    / R8 F' E7 \% r* y! F/ e0 L
  479.           end4 D/ a5 V: k' Y3 G
  480.           break if actor_id >= 0
    6 C% J6 L% L' L& x3 H! d
  481.         end
    # v" m; ?7 _. V# x# v0 \8 y
  482.         @actor_window.visible = false. g6 L/ o9 l) S$ _; s
  483.         @actor_window.dispose
      V( c+ C( w; q/ n
  484.         @actor_window = nil- m7 @$ o* Y/ j" C7 T% K7 u
  485.         @help_window.visible = false- t0 ^2 u) b0 a8 j
  486.         (0...$game_party.actors.size).each do |i|% j# p) _( W0 `* O5 Q' k: p2 V) U% U
  487.           if $game_party.actors[i].id == target.id
      f$ R2 y, _; q0 p: A3 G4 }; w
  488.             $game_party.change_actor(i,actor_id)
    ) H, W$ K, ?, T9 X1 ^% K; w; r
  489.             @status_window.refresh  _1 U# t) b# I& P0 a7 o
  490.           end
    ! C! V6 x! a! D3 K8 {
  491.         end
    * X* E  y( j# J# Q
  492.       end9 t! `8 P2 _( G$ {$ |; _
  493.     end9 m' P$ f* B$ y3 G
  494.     # 清除强制行动对像的战斗者
    ' _, g# o1 d% q
  495.     $game_temp.forcing_battler = nil
    , ]- {$ r/ E% E) C8 M" c! u/ N
  496.     # 公共事件 ID 有效的情况下
    7 _! g+ z: V# ]0 P; ^+ Z0 Z1 w- B
  497.     if @common_event_id > 0. i0 W( K0 m- m5 B( t  i8 M# K
  498.       # 设置事件
    - J- g0 @( {" p& |% X" j
  499.       common_event = $data_common_events[@common_event_id], M! @. ]: k* B& ~4 _3 z4 N0 H
  500.       $game_system.battle_interpreter.setup(common_event.list, 0)+ F  P  J* t: S
  501.     end
    4 r' ^& T& F  Z# ?1 V" @
  502.     # 移至步骤 12 x" Y0 n) a5 P- C: }
  503.     @phase4_step = 1$ v6 M, c1 x& l# n& `+ W4 m
  504.   end
    ! I, Z& u/ a4 t! ^7 L9 K+ `
  505. end
    . a6 S' @; k/ J2 M

  506. 0 ]4 \! [4 u' l
  507. class Window_MenuStatus
    $ @5 q! t4 @2 ^$ m
  508.   def refresh$ N% J4 ^5 F0 Q' F
  509.     self.contents.clear
    - J$ J, ^7 P8 t3 C* O
  510.     @item_max = $game_party.actors.size
    2 i8 t" [4 P- P* _1 N3 C
  511.     for i in 0...$game_party.actors.size
    & n2 [% y1 T, \( G
  512.       x = 4; p  h7 `, ?) N3 M+ T
  513.       y = i * 32/ I0 l% P# B/ `: E0 G
  514.       actor = $game_party.actors[i]$ b, ^; D/ z( Q
  515.       bitmap = RPG::Cache.character(actor.character_name,actor.character_hue)
    * s% v! s( v  y
  516.       rect = Rect.new(0,0,bitmap.width/4,31)/ {! w2 W% P% E  T; y4 p8 G
  517.       self.contents.blt(x+16-bitmap.width/8,y,bitmap,rect)7 }1 n/ V3 \4 }9 D6 A" {/ e+ W
  518.       draw_actor_name(actor, x+36, y)% i4 C' y& J6 j& I
  519.       draw_actor_state(actor, x + 136,y)2 d" m/ Q" C, U5 K$ c
  520.       draw_actor_hp(actor, x + 236, y,96)7 Y3 a; {& s  ~2 Z% q2 {; u
  521.       draw_actor_sp(actor, x + 336, y,96)
    8 j5 D& E) {) \$ Q8 B5 P
  522.     end6 {# {+ \1 {" p6 j: Z7 p
  523.   end
    * D5 L8 ~' S2 t# o
  524.   def update_cursor_rect
      g6 i9 P( @* _. l5 j5 @
  525.     super; N7 D& [% \" b' p0 ?
  526.   end
    2 z( e* t% s8 D' L; K. A
  527. end
复制代码
说明:这个东西是转自enghao_lim的一篇帖子,版权归原作者所有。
作者: 姬文翔    时间: 2011-3-25 03:32
我现在就在用这个做一个类似的游戏。但用了这个脚本后发现有个大问题
7 C2 a' ^1 a. z2 {, g只有最后解决掉敌人的那个人才能得到经验……怎样改成只要是在该场战斗中出过场的都可以得到一些经验呢?
作者: 1584927450    时间: 2012-6-30 15:17
LZ能否帮我写个XP的口袋脚本,和你此帖的脚本功能一样,但是是四个队员出战,剩下的待命,可换人那种,求求你了,这是我梦寐以求的口袋脚本!!!!!!!!!!!!!!!!!




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