Project1
标题:
转:战斗中换人,口袋口袋依旧是口袋 口袋换人系统
[打印本页]
作者:
px.凤翔九天
时间:
2010-12-16 22:42
标题:
转:战斗中换人,口袋口袋依旧是口袋 口袋换人系统
以前曾经写了一个,貌似那个贴已经失踪到不懂哪里去了,所以今天重写了一个。而且之前写那个还可以玩围攻,这个是模仿口袋的战斗换人,功能就是那样,没得介绍,插入脚本后即可用。
module LimBattlePlug
6 E( n6 Z, J# v4 H( o1 l6 C
$ _/ I2 C4 Z1 k% x$ s
# 队伍最大人数
3 V/ {2 b! W) r0 Q( k, |
MaxPartySize = 8
2 `7 j1 H5 ?2 i5 F; L* e& M
: u9 q# N; c. i0 I" ]+ A
# 出战人数
( U8 ~$ \: r! [# b' n8 M, a
MaxBattlerSize = 1
D4 I9 M4 y4 b( ^5 p& g
Z) [8 c2 I! p
# 换人语句
5 I% z2 y, `: v' ~: s0 U
WordChangeBattler = "换人"
9 n& j8 Y: \! I# x6 Q- @
9 t$ w& e7 n. V3 t
# 换人时播放的动画
3 Z4 K* u3 K& ]2 b; X
AnimationChangeBattler = 26
H. A1 j! `- ]0 h ?0 R$ P
- ^7 n5 b. r9 h
end
3 l- n; e" `. _8 a6 m
* l2 E* F2 I. E. K* y& Y* M
class Game_BattleAction
" u. I( Y7 B' J t3 P: Y, P. ?
attr_accessor :change_to_battler
. |/ \+ s- k1 _3 Y+ x4 @4 R
# 初始化
* I2 B, @- L. m' ^3 L% o& [
alias lbp_initialize initialize
y* b; N/ T; m$ _
def initialize
) P6 B: x' h1 W- B
lbp_initialize
. p/ h O! x) ~0 ^
@change_to_battler = 0
7 ]% ?( G+ @" u: }2 M. h+ d# g Q
end
0 ]5 Q) V' D, y, Z9 k
# 欲更换角色编号
& j7 I, I; e' y. ]) g& M
def set_change_battler
. `; l* d4 A4 e
@kind = 3
% s/ j! ~, |/ s+ b* R9 O4 @" k
end
6 B' x) j: q- Y( r( \9 @
# 判断行动是否为更换角色
5 n- P& O& v2 e/ Y" M
def is_change_battler?
/ x5 t( v0 ]1 Z. M% h6 O: U- B
return (@kind == 3)
& z$ X q3 r6 B& c6 ]
end
* v7 m* F; P p" L+ E
end
" a$ y8 n$ A. `/ p' A
* I9 Z) R& U8 O! p, y9 @
class Game_Party
' o$ o! m6 c: x- I
include LimBattlePlug
" G2 W7 Y' N8 W
attr_reader :actors2
4 {! n& q+ d. J/ a
alias lpb_initialize initialize
2 s* {. K( H+ k6 \) s0 A
def initialize
$ z' U0 l0 J; \* ]
lpb_initialize
# N+ S- L; q+ }, r. ~# k1 q& V7 u) Z
@actors2 = []
' S/ ~8 ^+ z3 T/ j& A/ {' ~
end
+ J/ i; ~; k, }* r! [/ n
# 角色加入
7 s2 w* N6 |; h* @7 o5 O: g$ U
def add_actor(actor_id)
+ Z5 K( a4 q' t! [
actor = $game_actors[actor_id]
`6 x y7 L' e) r
if @actors.size < MaxPartySize and not @actors.include?(actor)
( ~+ `3 m" g7 V5 X/ C$ J7 o2 @( Q7 e
@actors.push(actor)
1 j$ o5 v& d3 i& x, D$ \
$game_player.refresh
8 |( D" Z- G( J& x6 c1 s4 G
end
' K& ?; ~. n7 H2 s% z4 C
end
8 h/ H; {; E# ]* T6 i3 [
# 设置战斗的角色
. d/ {; {* N0 f1 D9 o
def set_actor_to_battle
) E( ^# ?' j+ y2 j# v& ?" @+ p F
@actors2 = []
! H( Q5 m' F6 `. J) a
@actors.each do |actor|
+ V, r1 I, I4 `& }2 H1 s4 _' e* P
@actors2.push(actor)
8 R5 f) ]$ _1 l8 f: i
end
9 o+ b9 r' L- g
@actors = []
l) t$ ^( K" }( k
@actors2.each do |actor|
8 d {( b/ F# Z6 O
@actors.push(actor)
{# O9 d' K3 m. d2 r0 k
break if @actors.size == MaxBattlerSize
, j0 `* r9 ~4 `8 b) j! y; w
end
; M- \9 h4 i6 u- y# o j' K+ C
end
7 x' Z# r% ^. K: X
# 还原战斗的角色
7 z0 v* Z% A% [, P8 n+ o1 H7 ?% i
def set_actor_to_normal
" J. z2 A4 l' J" K
@actors = []
6 K: I, W4 k; W' y
@actors2.each do |actor|
7 z( L! t6 u' c [& Q
@actors.push(actor)
5 S/ Q! k& T# a9 Y3 v# c
end
9 F- P7 Z: K! b4 l9 a
end
. D8 ~% |. ~ U$ D* _9 I
# 获取角色id数组
2 M5 Y' }8 Z+ R: X
def get_actors_id
6 W5 K6 p5 n& R' ~" f
id = []
( q7 e/ U+ q( f4 \ a
@actors.each{|actor|id.push(actor.id)}
5 P$ a1 m2 y& G- v
return id
8 o m- O1 ?7 o& P
end
' _" T0 T5 }5 I' ~) a, m
# 获取角色id数组
& ?$ L; W1 f( Y9 k: z
def get_actors2_id
8 x) t6 l. C& E- @3 o( O; E0 b6 | `8 L
id = []
9 Y( F4 P3 R5 M+ I t9 N: H/ ^
@actors2.each{|actor|id.push(actor.id)}
: Y& O) G& ?6 q$ m6 r+ ~
return id
/ u4 K3 q6 V! \2 D7 O- C" E
end
3 M7 D$ m. F4 p
# 兑换角色
& Z) d* b) A7 g; C" }+ A
def change_actor(index,id)
& n7 V( I3 ]0 R: h9 }
@actors[index] = $game_actors[id]
- A& F8 i0 H b
end
" F( q0 `6 Q( l, R2 p% B
# 全灭判定
% w0 o) a5 @& Q o
def all_dead?
# V! r6 n' v9 P1 \5 e. m1 R
# 同伴人数为 0 的情况下
7 r" N" |. E" t% a: k9 f. [! n- K
if $game_party.actors.size == 0
) L; I( `) Q! h% g( e( y
return false
) _" O+ _$ n& n$ e
end
( T0 O: o; L) I2 }, Q
# 同伴中无人 HP 在 0 以上
8 l* e( k" o" c* z
for actor in @actors2
5 D; i# f/ M1 Z) j4 m
if actor.hp > 0
+ Z3 A8 m( G$ m0 x, I; v5 x
return false
/ H( ^" Q* H8 B4 V
end
% t' _" D* t1 R8 a
end
9 m- ]+ S7 X8 E/ b& z: s
for actor in @actors
" T2 Y. W8 W% @9 Y: k2 W5 A
if actor.hp > 0
4 L( Y4 D: {5 [
return false
4 K# N: [: R1 _. L0 {9 X
end
0 g+ f/ v+ G& w+ K5 b& o& P
end
4 n5 P3 t5 G, I, a; b% _ W
# 全灭
( E0 w3 c: b2 N) ]
return true
: a% j" N, q! e2 Y
end
4 A4 r6 K0 K; S$ \
# 其他角色
+ D' A. C& w7 [! B2 H* l
def other_actors
. l- W& m0 w3 b9 h1 c
actors = []
4 `; ]6 p) u) J' P, y
@actors2.each{|actor|actors.push(actor) if
[email protected]
?(actor)}
8 _% z: G" L, T0 k: b+ F( C+ @
return actors
! E m/ C" ` `# w6 |1 z Z' g8 ~- L
end
5 {' v$ @" Y: O
# 角色位置互换
" \" t5 {% O; j6 W7 z$ \
def change_actor_pos(id1,id2)
0 f# v' O2 i: f
actor_id = []
7 N) u" d7 p9 m( Z/ t
@actors.each do |actor|
2 O6 J/ r" I- j6 I# q
actor_id.push(actor.id)
% `! y( |( s% d0 l1 p, T
end
3 V, N% v4 `( {! m
return if !actor_id.include?(id1) and !actor_id.include?(id2)
* Q4 V# i' ]5 c7 O* N
id1_index = id2_index = -1
0 A- |% w7 B' D' V
(0...actor_id.size).each do |i|
& L4 j6 m1 h/ ~5 s# K$ K( u [
if actor_id[i] == id1
& Y$ L8 m a. H5 O# c
id1_index = i
( Z3 I6 [8 r7 @. a0 r8 S
elsif actor_id[i] == id2
! I8 \. O$ U) ~/ c9 T. v [
id2_index = i
8 C4 [, ^* \! ?- X+ Y
end
: b; c: A4 a" N7 V3 S: ?. u: \
end
3 q- k- O& d! q; O
temp_actor = @actors[id1_index]
- z% O& t) c: q7 V% F6 N9 J G
@actors[id1_index] = @actors[id2_index]
! z! p" g5 b8 \6 [
@actors[id2_index] = temp_actor
: M" x6 o$ @) I0 E" a% r
end
4 U" ~4 l' l: k' M7 `5 o
end
5 m) P& t! R) i* s( m
+ q; g# D. P0 j# _2 k: ?
class Window_Actor < Window_Selectable
7 q+ w& f. L3 N" `! ~
# 初始化
" @' ]1 R7 ]/ E
def initialize
5 ^ m) C1 O8 H# @
super(0,64,640,256)
& Y) |3 |6 l9 C& M m! T0 r
self.back_opacity = 160
1 x+ l9 d( ] e! ?
refresh
" Z- ?$ V% I, j3 Q1 v4 \
self.index = -1
+ E: `1 Z2 @$ R. U$ N
self.active = false
+ ] ?5 K1 \, c3 S, X
end
) w* p' q* r0 T( p8 l
# 刷新
- U! g) y6 ]- ~2 r' q7 \
def refresh
( F0 z6 a7 v/ f, P% R$ R
@item_max = $game_party.actors2.size
4 D5 C7 A2 B( C( m
@data = []
; |; I% @6 j0 Z- Y6 ?) v2 x
$game_party.actors.each do |actor|
6 N* m( _ M, _3 @
@data.push(actor)
$ R; ?" F& t" G7 K- a
end
& h% ? e2 U1 [
$game_party.actors2.each do |actor|
2 N: e$ H# z" ^6 ]. H
@data.push(actor) if
[email protected]
?(actor)
Y2 t. a+ U$ ? M/ |* Q, b
end
$ c- ~$ ]; K+ V: {
if self.contents != nil
- j+ `* [7 l0 {4 O$ w; ~
self.contents.clear
- c& m! T9 o9 R" r3 o7 Z1 E
self.contents = nil
; D) E1 w) d6 \6 N
end
4 c7 x q% V9 l1 ^# J3 R% U6 ?
self.contents = Bitmap.new(608,@data.size*32)
) f) S3 v( l: Q q2 g6 o
x = 4
" [% n8 c/ W/ k
y = 0
) s% c2 s0 P8 C7 m% E' v9 e5 ?
@data.each do |actor|
4 A. }# c2 U9 U. ?' @* W7 y+ a, \" [
bitmap = RPG::Cache.character(actor.character_name,actor.character_hue)
: E x; G& ` ^1 Y, F# e+ S
rect = Rect.new(0,0,bitmap.width/4,31)
9 s2 I5 W4 i% u& G* i' G, d0 H; a
self.contents.blt(x+16-bitmap.width/8,y,bitmap,rect)
/ L' R, M! ?( k. }# Z% Z! P1 ^
draw_actor_name(actor,x+36,y)
/ Q; p0 L1 h v' Y3 k
draw_actor_state(actor,156,y)
; V8 ~. g3 W) r/ A( A
draw_actor_hp(actor,x+256,y,96)
& ?* g- C3 g6 \, U
draw_actor_sp(actor,x+376,y,96)
9 D9 s( C9 Y$ e2 D% p2 M$ H# C
if $game_party.actors.include?(actor)
; z, L. e$ X- q. J
self.contents.font.color = text_color(6)
4 s" [1 N4 ^7 H2 N: e7 \
cword = "出战"
/ g- E+ J5 u3 g8 e
else
2 E/ u w. _% v6 p5 L3 Q* D
self.contents.font.color = text_color(0)
3 ]; [3 _; Q2 [% X" T/ X' E
cword = "待战"
' H% l/ R, z% W( I
end
! k: r* u* |2 P% U
self.contents.draw_text(x+496,y,60,32,cword)
% z; ~* S! j( R3 y. Y
y += 32
9 V$ l- S& }. a- g% h4 m) ?
end
. v& o5 w4 B4 ^
end
4 R8 N& [9 R: q: r( Y6 {9 t
# 获取当前角色编号
: C! E9 z% {% H2 P8 v; H3 p. P
def actor_id
( G* q9 h1 v. f$ u$ w; c
return @data[self.index].id
6 k- D% @+ G; X9 ^; G+ ^. R _
end
7 h2 a! K" |' o+ J
# 刷新帮助
$ N( H! T) V/ A2 W
def update_help
5 L! q; |1 B" J0 B$ M" G# M* H
@help_window.set_text(@data[self.index] == nil ?\
; q* ?& X) k3 }
"" : @data[self.index].name)
! f' w1 H" P+ O' H* K% x8 ]! U
end
4 l- W" Y k& q, h4 K9 F
end
: i/ ~2 i: t- x/ ]
3 ]4 k6 r- w& Z4 [' }; i
class Scene_Battle
. ]. ^% G1 Y* J; ?- G
include LimBattlePlug
, V! ~% P/ {) J# P$ a t
# 初始化
* ?6 p8 n0 {$ X# u
def initialize
" w& R w# l3 V/ }0 w, R3 m* z
$game_party.set_actor_to_battle
8 D3 {% x4 F, U/ L1 W! w9 r0 X
end
0 v$ f/ P& D2 ~9 i0 ^
# 主处理
! d. E3 D. A0 X- [; y0 ? Z" w0 G4 T
def main
) e6 V5 ~! B3 J% C
# 初始化战斗用的各种暂时数据
. u6 ?$ I& D5 I$ L2 ~
$game_temp.in_battle = true
2 e1 X _, z/ `0 B8 o2 {1 d- [
$game_temp.battle_turn = 0
4 ]* ?1 Q4 b. N
$game_temp.battle_event_flags.clear
4 M: B% `- |& E& g
$game_temp.battle_abort = false
' G4 X: A9 a4 ^2 P. L
$game_temp.battle_main_phase = false
; h8 j: g: Q4 U6 g) b. X
$game_temp.battleback_name = $game_map.battleback_name
1 f/ g, e+ t2 ?# k' R/ o: g: q9 D
$game_temp.forcing_battler = nil
- F+ N: ^8 y( Q5 ?/ U' F
# 初始化战斗用事件解释器
0 J. J3 F- l V R
$game_system.battle_interpreter.setup(nil, 0)
$ _6 A) @; m" k0 x+ o/ i
# 准备队伍
& u1 N! A& q$ i7 j4 _1 }4 |: u
@troop_id = $game_temp.battle_troop_id
) q! X4 r& d- t4 `8 I
$game_troop.setup(@troop_id)
. f2 X! j3 x* Y1 b" I" E }% W- a
# 生成角色命令窗口
/ h) O1 C' }- T0 Y
s1 = $data_system.words.attack
" {' o9 t- `* F8 O5 W! _. o
s2 = $data_system.words.skill
$ _' v% W9 z- u
s3 = $data_system.words.guard
" h/ c, w+ W |* A
s4 = $data_system.words.item
- n0 K, U. k8 v4 k
s5 = WordChangeBattler
' _, G3 Y7 Z! e% x5 p6 J; U
@actor_command_window = Window_Command.new(160, [s1, s2, s3, s4,s5])
7 y; T2 ~$ S" Z
@actor_command_window.y = 128
/ \& U: D/ k2 y' n
@actor_command_window.back_opacity = 160
- i$ M% s8 Z* S& h
@actor_command_window.active = false
; R% }+ N% C; C
@actor_command_window.visible = false
* ?$ D; z4 U5 J3 V$ S" c# [
# 生成其它窗口
$ Q- r/ i7 e( r7 Y v
@party_command_window = Window_PartyCommand.new
+ S3 b) B" X9 U r9 Y) k
@help_window = Window_Help.new
9 t& M2 ^* N7 L1 p; w: ?
@help_window.back_opacity = 160
6 W1 k1 B: H/ ^7 s
@help_window.visible = false
( a ]+ _& p2 Z* Q% M
@status_window = Window_BattleStatus.new
: z/ ^; m! h5 ]2 P" ~# V$ `
@message_window = Window_Message.new
7 n& v$ O' ^3 x1 x
# 生成活动块
6 z S+ P. h6 i3 z" ^
@spriteset = Spriteset_Battle.new
4 \. E, x+ Z( b$ h: T- J1 Z
# 初始化等待计数
7 ~2 @) { i; k4 Z2 P7 r
@wait_count = 0
1 Z/ g7 ]0 z; O* i% E) m" G
# 执行过渡
" l j" f( F9 i0 ^9 W) `% r
if $data_system.battle_transition == ""
8 _$ j" l' K' g3 i/ ?; o
Graphics.transition(20)
' b# J" C. \8 V' V
else
9 K7 ^ E" t5 C( [) g( J
Graphics.transition(40, "Graphics/Transitions/" +
$ L$ P6 ~7 W' }4 }# |
$data_system.battle_transition)
+ L& C" R0 N% T: T+ w
end
/ N2 |- }/ g; C- n
# 开始自由战斗回合
/ `2 ~; G ^7 X
start_phase1
+ o4 e; z2 B2 B3 O5 Z: Z
# 主循环
7 e. X; J3 ~7 ]+ T
loop do
8 B( r9 q; U/ s1 x( Y7 P( [
# 刷新游戏画面
' c! g# H$ | n6 V
Graphics.update
( o' Y: ^. B- {- M- G) a
# 刷新输入信息
) K3 z) k) J- F7 t3 Q7 v$ p( l) q
Input.update
6 O$ A/ c; ?) J" m% @- `3 n1 I; j
# 刷新画面
9 B k% m; b0 \1 S& ]" `# b$ z
update
4 n; Z9 @' l1 C5 i( f6 w/ `2 \! h
# 如果画面切换的话就中断循环
# v3 X; k: h" C; e: |5 z
if $scene != self
, a/ W. ~+ u" i; I( Q
break
( d2 x$ S( V0 c
end
% ]6 A8 V. \: H! \9 _
end
`0 F) p0 L6 V: w H: p% w
# 刷新地图
1 w" I4 W' R2 i* h8 b: u" Z+ }
$game_map.refresh
8 [, J W6 a. L3 ?$ A" R
# 准备过渡
2 u1 T( L; P+ O/ Y$ }
Graphics.freeze
+ Z W+ N9 |) ?5 ^: a3 \
# 释放窗口
% d8 N! r4 a0 ~+ I) `4 g ^4 ?
@actor_command_window.dispose
3 {, B* }" V/ o) A3 b+ X
@party_command_window.dispose
* Y) @$ o, _# F6 n& E
@help_window.dispose
8 W, x9 u- w- t& R
@status_window.dispose
/ |+ H$ s4 A% ?5 I0 M
@message_window.dispose
5 J2 ^. q! i9 q, _2 L X+ L8 a
if @skill_window != nil
3 q) ^ E' T" u& t
@skill_window.dispose
" f. @4 g7 ?9 e( c- H
end
/ c& C u z7 {2 ?
if @item_window != nil
! s4 X/ y7 O) ?+ Z
@item_window.dispose
6 Y$ }* f& s2 b7 k' u( n+ o$ l" O
end
+ g8 M$ h- r; ]. F+ ?6 k+ N; ^
if @actor_window != nil
9 C& a) i, J6 E4 |$ U. g0 P; W
@actor_window.dispose
1 q! ?- R/ a# ~" {4 H! f0 T
end
& p3 e. [4 x. m) D2 b7 f
if @result_window != nil
( f. H0 E$ I; U0 `$ W$ Q% Q
@result_window.dispose
% J3 J* ^/ o) \9 ]
end
- l/ X; F5 i& c" \* @8 {$ i; s
# 释放活动块
, [4 r( M8 N) }9 N# Q
@spriteset.dispose
$ f' T2 L! v! b, U6 s. h1 @6 S8 T/ v! b
# 标题画面切换中的情况
2 c4 O" D! V, A+ G7 H
if $scene.is_a?(Scene_Title)
4 O! Z- u8 J: i7 k" ?+ s
# 淡入淡出画面
' W% H6 E) m, ~# I& J+ e; {: [
Graphics.transition
! S$ {3 L" s& E& z
Graphics.freeze
7 K, r, U9 N" x4 Q
end
# |% c$ n/ O& q3 e+ Q
# 战斗测试或者游戏结束以外的画面切换中的情况
) p+ r" }( ?$ b: w, K% }' L
if $BTEST and not $scene.is_a?(Scene_Gameover)
" ]4 t/ Z% y2 R
$scene = nil
: {7 V$ o, M9 O& j- [: L
end
# m6 J7 i: F; J9 ^
end
' h8 U u' d* {" x" X3 w0 Y
# 战斗结束
- }2 M! R5 i/ j7 q2 _, Q3 o
alias lpb_battle_end battle_end
. l& T1 M4 Z2 D# H: y1 [
def battle_end(n)
+ L( j# ]5 Q. C# H& ?) l% b
lpb_battle_end(n)
! e' T! h: m( G' [5 p" C/ z& y
$game_party.set_actor_to_normal
% Q3 f/ t4 _9 [1 U, Q; h
end
9 b/ P# J) ^: E: e! u
# 开始回合3
" b$ S' }6 d8 Y/ Z, ]3 K2 u
alias lbp_start_phase3 start_phase3
* @7 f' P; {. ]( i4 {9 Q+ w ^2 Y
def start_phase3
8 @9 c( T- I+ R$ J
@changed_battler_id = []
: n# G d- \" u/ n1 j" F8 p" G# M
lbp_start_phase3
: v% g5 P+ L2 X* u
end
$ { `4 R$ c7 j9 {$ s. q
# 刷新角色命令回合画面
+ `3 _! g6 p( m: G
def update_phase3
7 W& L! ]1 H8 B: q n3 ^1 {
# 敌人光标有效的情况下
# P( i1 G9 @2 a- j) w, a2 b7 R# Y
if @enemy_arrow != nil
0 q. Z7 I1 Q: e0 C
update_phase3_enemy_select
! k9 L; [$ t' h5 F. E) g) R
# 角色光标有效的情况下
# z' G; b: ]* m( v0 R2 A/ v) j1 s# s
elsif @actor_arrow != nil
4 z& G0 X! _* s. {4 F5 D
update_phase3_actor_select
( B' @% z4 m; j& u/ w+ f9 H! A3 j
# 特技窗口有效的情况下
: k+ F/ ~& `; m% f# g* ~
elsif @skill_window != nil
) ]3 `2 H* R1 G; |# O, a; R$ ]
update_phase3_skill_select
5 F% o: i: C+ Q C5 X+ ~, t
# 物品窗口有效的情况下
& o9 o8 {& l, q5 u9 @5 L
elsif @item_window != nil
( D' v Q; n3 N" j7 S: a- u. ~
update_phase3_item_select
! n' h5 o) l1 O7 z9 Z4 g
elsif @actor_window != nil
$ F. @% D$ `% t$ ?2 L$ ]
update_phase3_battler_select
* C: u6 V" Y, _5 n. w7 J
# 角色指令窗口有效的情况下
. v$ b0 J" u0 z
elsif @actor_command_window.active
3 ]- A* p5 G- @# ~0 f
update_phase3_basic_command
" A5 _6 C3 c" c8 g: S4 ]8 h) ?4 X9 O5 O
end
1 y" f. L1 p" N) D5 p
end
# @3 [( ^3 Q: a: V& J2 z
# 角色基本命令
$ s; [. B3 Q% v7 G
def update_phase3_basic_command
9 e ?# y3 B7 F1 L7 R [1 N+ R
# 按下 B 键的情况下
* h; ?+ ^) s3 ?& J
if Input.trigger?(Input::B)
+ Z) @' y: m$ L I- _2 k
# 演奏取消 SE
4 D' _" k3 ?8 l7 H; Z6 K6 b
$game_system.se_play($data_system.cancel_se)
: |* d$ Z8 b# ?
# 转向前一个角色的指令输入
9 v: _9 u" K- m$ X, ] C
phase3_prior_actor
( o3 q( j9 G4 e( u2 y: s
return
$ m$ s- O- S F8 B9 i$ j; D
end
$ o4 m# Z0 U; m$ {2 C. ?
# 按下 C 键的情况下
C, O9 L8 r7 w- M% F6 f7 O: T
if Input.trigger?(Input::C)
+ |0 k/ ?/ Q8 Z7 Z# @, \7 U* s
# 角色指令窗口光标位置分之
D# L% \ f! d1 d! Y
case @actor_command_window.index
- {# o* S' U, y1 Y7 L$ E
when 0 # 攻击
5 [6 Q3 m: n( {3 n; F/ E4 a
# 演奏确定 SE
( M+ [7 B6 N8 ]/ R$ l
$game_system.se_play($data_system.decision_se)
1 F: N/ z' [% l, T
# 设置行动
% O% z- J5 d- y- j" q9 a
@active_battler.current_action.kind = 0
9 M: v) K- ^$ e0 O- j
@active_battler.current_action.basic = 0
, @3 S9 Q0 ~, C& e/ |) e s
# 开始选择敌人
. _) ]+ W- i! Z! ?3 O2 ?( b0 D
start_enemy_select
% M+ V3 e3 o) t1 @7 i
when 1 # 特技
9 ?5 V' F, H* }2 y7 o
# 演奏确定 SE
6 [+ `( s- Q1 `' ?- O9 ]6 S+ b
$game_system.se_play($data_system.decision_se)
7 ?& y1 A+ V, O% X0 s
# 设置行动
u% H/ K$ U4 h
@active_battler.current_action.kind = 1
' p& b6 o% C. K
# 开始选择特技
, W5 Y+ y! t8 J# t" N
start_skill_select
! P6 e# K- `8 X% h8 H1 b9 V% D' t( H
when 2 # 防御
" T# p/ E7 P5 K" T3 t+ e9 C5 ]
# 演奏确定 SE
- D% _5 e4 r; Q: y( M* M2 U
$game_system.se_play($data_system.decision_se)
: z3 [2 g0 x- ~2 P( E
# 设置行动
- M: l& [6 \+ g9 }
@active_battler.current_action.kind = 0
" r. Z! i$ }4 k _
@active_battler.current_action.basic = 1
: ~. [4 B0 w5 x5 R" t
# 转向下一位角色的指令输入
+ m/ ?" F2 `! h9 s( ]
phase3_next_actor
( {) D8 p7 n4 q. U8 {' \' q* S8 z
when 3 # 物品
( h+ o+ F8 a* M! S) e: _6 H5 C
# 演奏确定 SE
' {/ d" u* h; Q" E! H
$game_system.se_play($data_system.decision_se)
% s& `- t; T5 _
# 设置行动
! E/ ?2 u! Y4 x! J1 O6 n+ M* ?
@active_battler.current_action.kind = 2
( K8 t- S+ ?! v' y3 s) O" @
# 开始选择物品
( X+ L! q. j6 C
start_item_select
1 c" B, t7 M% y
when 4 # 换人
3 Y3 C8 p1 ?! K: `. d
$game_system.se_play($data_system.decision_se)
" I8 J" m( ?$ ?" x% t7 H6 u# }
@active_battler.current_action.set_change_battler
/ Y/ t; v) F( i. a+ v
start_battler_select
- e; b/ f5 b3 I8 ^
end
7 |9 P" E/ n6 r/ m
return
+ o3 g+ m' K* `8 t- `
end
" |8 n |/ w9 V- Y* c4 |
end
/ t; D" @0 f- j) a+ z' U
# 开始角色选择
* Z- l8 Q( ]$ t- x
def start_battler_select
0 ?8 K- |; J1 _2 N( X. u
@actor_window = Window_Actor.new
: w' ]: O$ _# U' I
@actor_window.active = true
: p3 u; [8 s `, k' C. W' w, d5 d8 s
@actor_window.index = 0
0 I# k, V' J1 i2 h8 _8 n
@actor_window.help_window = @help_window
) V/ E. }, |; V& D! d
@actor_command_window.active = false
/ H0 P8 F2 F S/ s8 M5 n# l
@actor_command_window.visible = false
/ ]$ q2 k/ C* c4 D" B3 F
end
/ ~9 o4 R! Y* E! ]8 @$ S/ X
# 结束角色选择
( A7 h7 b k0 _: S
def end_battler_select
- G- n# t/ f' A u' r$ p$ @2 W& G2 Y
@actor_window.dispose
7 i. p# X. E( U/ N
@actor_window = nil
: C5 d- U# F) O0 T# c
@help_window.visible = false
* f3 R; t" ?- Y# a& o
@actor_command_window.active = true
2 @) C/ _ z; P9 j" g9 u
@actor_command_window.visible = true
: h4 q- k" H) [
end
* W O- ]# o6 t& L z
# 刷新角色选择
& C8 Y0 Y/ t( y8 o
def update_phase3_battler_select
- D6 C+ E& R5 G T% }) }
@actor_window.visible = true
, G- [0 V8 `% q h' X' N" e
@actor_window.update
: i0 @8 o& `9 y" A! M- r0 t
if Input.trigger?(Input::B)
9 Z+ p4 m9 n& {+ z
$game_system.se_play($data_system.cancel_se)
% C( w1 V) Q( S" W- Z3 {: n
end_battler_select
' H0 H; X4 X, U: B; Y
return
2 O! `2 W+ b" O; r: z
end
' w; H2 \! _8 r# e% y8 Y
if Input.trigger?(Input::C)
% y, H- B2 f& s- H! K- A5 \
actor_id = @actor_window.actor_id
' m, E/ m. e6 B8 G v* \% P
if $game_party.get_actors_id.include?(actor_id) or
( R. p' `1 `7 u( D: Y/ x4 d
$game_actors[actor_id].dead? or
1 x4 d/ p1 s2 D9 S& d
@changed_battler_id.include?(actor_id)
! l# j. |8 F7 G3 Q
$game_system.se_play($data_system.buzzer_se)
* b7 K# d' h, @0 G; {
return
; C6 m1 m/ t, F4 s) C* k
end
6 o% I! C' x3 o$ I" Q
$game_system.se_play($data_system.decision_se)
8 n; W/ A& u/ Y( {5 M
@active_battler.current_action.change_to_battler = actor_id
8 b9 S: D; I" N
@changed_battler_id.push(actor_id)
- \6 ^# ~; Y' b: A, W
end_battler_select
$ T3 [) h# Z* J, e" L6 Q' H# ~
phase3_next_actor
* r {) W) r ^5 y+ ~
return
; t+ `( x# B: s- p
end
: M A) X$ R+ I4 B+ n
end
) n' r1 i# \1 p4 H! |" U3 D
# 行动方动画
& W$ i5 n& J+ {. q- e. b
def update_phase4_step3
4 u" z1 C" Y2 o+ u2 m
if @active_battler.current_action.is_change_battler?
% w. q' Z' A5 X& O3 [7 ~$ U$ a
@animation1_id = AnimationChangeBattler
& F& A! }% K9 R
@target_battlers = []
/ ~1 M) R: N2 r9 m- X
end
+ o l2 M( b6 H0 t8 @/ l
# 行动方动画 (ID 为 0 的情况下是白色闪烁)
# G! _- w# D2 z8 q6 A. U
if @animation1_id == 0
y3 A4 P( |( a7 M7 m
@active_battler.white_flash = true
, c/ ]1 ^" B* U: U
else
* M* h' ~4 u- a# n: h
@active_battler.animation_id = @animation1_id
) U! p+ W! e6 N- @+ w
@active_battler.animation_hit = true
! [# b& f6 o9 R. n; ]: x0 O2 d0 U
end
+ L+ d$ j6 r! p, s+ n- i
# 移至步骤 4
0 X" O1 G5 Z# R% `
@phase4_step = 4
" v: o: u, P0 @* @. t4 m7 e+ U
end
; p$ Y( M) h4 ?) o6 d
# 对象方动画
1 I4 X- E7 t; a
def update_phase4_step4
7 K# x- K! R) Q6 v* t% R! ~
if @active_battler.current_action.is_change_battler?
# F- j4 h7 I3 U
actor1_id = @active_battler.current_action.change_to_battler
9 e8 M* O E, k: E# q3 K
actor2_id = @active_battler.id
. n/ ~& K. R, b2 K; X Y9 V9 P
(0...$game_party.actors.size).each do |i|
5 f$ J, [/ o' }2 f! u6 E, W( P0 U
if $game_party.actors[i].id == actor2_id
2 u% D" E1 H( F, X
$game_party.change_actor(i,actor1_id)
[5 G- C7 u. n3 |. N
@active_battler = $game_actors[actor1_id]
" Q$ o- l6 K- I$ E- r7 i) K
@status_window.refresh
" L) ]# I4 H1 B( f
end
% s3 W3 I' { o* a; {4 Z" r
end
; ?8 C$ ~; ^ i( {, f* N U* u
end
" t9 |$ j1 ~ {$ f1 g
# 对像方动画
5 _6 n- F2 W1 d1 Y; B9 w
for target in @target_battlers
1 V0 R/ _! w* X( l! k
target.animation_id = @animation2_id
# K# E w* O( `3 o
target.animation_hit = (target.damage != "Miss")
" @1 I/ q, A* O1 ?
end
& [% y# Q* Z& U3 B. n) c" C& K
# 限制动画长度、最低 8 帧
- E' x9 y5 e; q& a& y+ h7 [# T0 t
@wait_count = 8
+ }2 \! }; ~1 D" [
# 移至步骤 5
. T: E) J& \5 T: N, e6 r
@phase4_step = 5
) \$ k- V2 c; L! Y
end
h& n* ]" O) ~! I( Z' y
# 公共事件
4 W1 w" G2 r' M, a( u
def update_phase4_step6
) U. c" k$ P: V: f! \" M
@target_battlers.each do |target|
. a- o `2 A7 l# d/ [; h" @# b
if target.is_a?(Game_Actor) and target.dead? and
6 [! u$ X2 Z! v: N8 b. h
!$game_party.other_actors.all?{|actor|actor.dead?}
$ D, Y- h8 H' V7 {3 x0 g$ c' ?
@actor_window = Window_Actor.new
9 `" S h2 |( g% N; n3 d( A
@actor_window.index = 0
2 I! P4 l# g0 v0 ?5 Z) [- V
@actor_window.active = true
: b( C2 G" } }
@actor_window.help_window = @help_window
6 \' ]# D1 V8 q5 a. t6 l
actor_id = -1
; ?- q) Y; h( T* I+ C
loop do
( U, Q& `1 O( d
Graphics.update
2 [% b3 b" R( e9 K0 _$ Q
Input.update
- p. A ^) Z0 O, ^# D% {* d
@actor_window.update
" ?" m$ A2 t4 {. M
if Input.trigger?(Input::C)
1 U4 o$ p. f( H
actor = $game_actors[@actor_window.actor_id]
) z0 u! x- \6 }4 {5 y5 a
if actor.dead? or
& m! K2 B) V3 a! W/ W! f) d2 G
(@changed_battler_id.include?(actor.id) and
* B P# `5 S" Y8 b
target.current_action.change_to_battler != actor.id) or
! b Y$ q- ^ v6 s T
$game_party.actors.include?(actor)
& B! A5 D: [; n# S" f Y2 r
$game_system.se_play($data_system.buzzer_se)
* X5 X, I: a/ `3 R2 F
else
2 U9 o$ r# ^3 @: A( K
actor_id = actor.id
+ b& _0 w) t0 q9 J) W
end
/ R8 F' E7 \% r* y! F/ e0 L
end
4 D/ a5 V: k' Y3 G
break if actor_id >= 0
6 C% J6 L% L' L& x3 H! d
end
# v" m; ?7 _. V# x# v0 \8 y
@actor_window.visible = false
. g6 L/ o9 l) S$ _; s
@actor_window.dispose
V( c+ C( w; q/ n
@actor_window = nil
- m7 @$ o* Y/ j" C7 T% K7 u
@help_window.visible = false
- t0 ^2 u) b0 a8 j
(0...$game_party.actors.size).each do |i|
% j# p) _( W0 `* O5 Q' k: p2 V) U% U
if $game_party.actors[i].id == target.id
f$ R2 y, _; q0 p: A3 G4 }; w
$game_party.change_actor(i,actor_id)
) H, W$ K, ?, T9 X1 ^% K; w; r
@status_window.refresh
_1 U# t) b# I& P0 a7 o
end
! C! V6 x! a! D3 K8 {
end
* X* E y( j# J# Q
end
9 t! `8 P2 _( G$ {$ |; _
end
9 m' P$ f* B$ y3 G
# 清除强制行动对像的战斗者
' _, g# o1 d% q
$game_temp.forcing_battler = nil
, ]- {$ r/ E% E) C8 M" c! u/ N
# 公共事件 ID 有效的情况下
7 _! g+ z: V# ]0 P; ^+ Z0 Z1 w- B
if @common_event_id > 0
. i0 W( K0 m- m5 B( t i8 M# K
# 设置事件
- J- g0 @( {" p& |% X" j
common_event = $data_common_events[@common_event_id]
, M! @. ]: k* B& ~4 _3 z4 N0 H
$game_system.battle_interpreter.setup(common_event.list, 0)
+ F P J* t: S
end
4 r' ^& T& F Z# ?1 V" @
# 移至步骤 1
2 x" Y0 n) a5 P- C: }
@phase4_step = 1
$ v6 M, c1 x& l# n& `+ W4 m
end
! I, Z& u/ a4 t! ^7 L9 K+ `
end
. a6 S' @; k/ J2 M
0 ]4 \! [4 u' l
class Window_MenuStatus
$ @5 q! t4 @2 ^$ m
def refresh
$ N% J4 ^5 F0 Q' F
self.contents.clear
- J$ J, ^7 P8 t3 C* O
@item_max = $game_party.actors.size
2 i8 t" [4 P- P* _1 N3 C
for i in 0...$game_party.actors.size
& n2 [% y1 T, \( G
x = 4
; p h7 `, ?) N3 M+ T
y = i * 32
/ I0 l% P# B/ `: E0 G
actor = $game_party.actors[i]
$ b, ^; D/ z( Q
bitmap = RPG::Cache.character(actor.character_name,actor.character_hue)
* s% v! s( v y
rect = Rect.new(0,0,bitmap.width/4,31)
/ {! w2 W% P% E T; y4 p8 G
self.contents.blt(x+16-bitmap.width/8,y,bitmap,rect)
7 }1 n/ V3 \4 }9 D6 A" {/ e+ W
draw_actor_name(actor, x+36, y)
% i4 C' y& J6 j& I
draw_actor_state(actor, x + 136,y)
2 d" m/ Q" C, U5 K$ c
draw_actor_hp(actor, x + 236, y,96)
7 Y3 a; {& s ~2 Z% q2 {; u
draw_actor_sp(actor, x + 336, y,96)
8 j5 D& E) {) \$ Q8 B5 P
end
6 {# {+ \1 {" p6 j: Z7 p
end
* D5 L8 ~' S2 t# o
def update_cursor_rect
g6 i9 P( @* _. l5 j5 @
super
; N7 D& [% \" b' p0 ?
end
2 z( e* t% s8 D' L; K. A
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