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