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