Project1
标题:
vx中 有没有在战斗中变更武器的脚本啊??
[打印本页]
作者:
quanhome
时间:
2011-2-12 01:01
标题:
vx中 有没有在战斗中变更武器的脚本啊??
本帖最后由 DeathKing 于 2011-3-2 23:13 编辑
只看到有xp的,,,vx中 能不能简单的实现这个啊。。主要就是要实现不同的属性的武器来针对克制不同的怪用的。。。。。求助。。。
作者:
l65591397
时间:
2011-2-12 02:49
提示:
作者被禁止或删除 内容自动屏蔽
作者:
Rion幻音
时间:
2011-2-12 02:51
战斗中按Q或者W再按确定键就行了~
#==============================================================================
# ☆Scene_Battle_Window_ActorCommand_Equip Ver. 1.02
#------------------------------------------------------------------------------
# バトル画面で、アクター行動中にL,Rを押すと装備変更画面が出る。
#
# Ver.1.02~:装備変更でターン消費&装備変更可能部位設定
#==============================================================================
#//////////////////////////////////////
#「装備変更」の名称変更
#//////////////////////////////////////
module Vocab
SobiCange ="Equip"
end
#//////////////////////////////////////
#「装備変更」のウィンドウ位置
#初期:x=480,y=0
#//////////////////////////////////////
SOBI_CHANGE_WINDOW_X=480
SOBI_CHANGE_WINDOW_Y=0
#//////////////////////////////////////
#戦闘中で「装備変更」可能部位設定
# false:不可,true:可能
#//////////////////////////////////////
SOBI_CHANGE_BUI={
0=>true, #武器 & 盾 (両手武器,二刀流の関係で武器と盾は同時設定とします)
1=>false, #頭
2=>false, #体
3=>true, #装飾品
}
#//////////////////////////////////////
#「装備変更」で1ターン消費しますか?
#0:しない.1:する(装備1つに対し1ターン)
#//////////////////////////////////////
SOBI_CHANGE_TURN =0
#///////////////////////////////////////////////////////
#「装備変更」で1ターン消費する時の言葉集
#///////////////////////////////////////////////////////
module Vocab
SobiCange_TurnWord0 ="%sの装備変更!" #1行目に表示される文
SobiCange_TurnWord1 ="%sは%sを装備した。" #無事装備変更が行えた場合
SobiCange_TurnWord2 ="%sは%sを装備し直した。" #装備変更のアイテムが同じだった場合
SobiCange_TurnWord3 ="%sは%sを外した。" #何も装備しなかった場合
SobiCange_TurnWord4 ="%sは何もしなかった。" #装備なし→装備なし
end
#//////////////////////////////////////
#↓以下は本スクリプト
#//////////////////////////////////////
class Window_ActorCommand2 < Window_Command
#--------------------------------------------------------------------------
# ☆ オブジェクト初期化 <新規追加>
#--------------------------------------------------------------------------
def initialize
super(128, [], 1,1)
self.active = false
end
#--------------------------------------------------------------------------
# ☆ セットアップ <新規追加>
# actor : アクター
#--------------------------------------------------------------------------
def setup(actor)
s1 = Vocab::SobiCange
@commands = [s1]
@item_max = 1
refresh
self.index = 0
end
end
class Window_Equip < Window_Selectable
#--------------------------------------------------------------------------
# ☆ バトル時のみのリフレッシュ <新規追加>
#--------------------------------------------------------------------------
def battle_refresh
self.contents.clear
@data = []
for item in @actor.equips do @data.push(item) end
@item_max = @data.size
self.contents.font.color = system_color
if @actor.two_swords_style
self.contents.draw_text(4, WLH * 0, 92, WLH, Vocab::weapon1)
self.contents.draw_text(4, WLH * 1, 92, WLH, Vocab::weapon2)
else
self.contents.draw_text(4, WLH * 0, 92, WLH, Vocab::weapon)
self.contents.draw_text(4, WLH * 1, 92, WLH, Vocab::armor1)
end
self.contents.draw_text(4, WLH * 2, 92, WLH, Vocab::armor2)
self.contents.draw_text(4, WLH * 3, 92, WLH, Vocab::armor3)
self.contents.draw_text(4, WLH * 4, 92, WLH, Vocab::armor4)
draw_item_name(@data[0], 92, WLH * 0, SOBI_CHANGE_BUI[0])
draw_item_name(@data[1], 92, WLH * 1, SOBI_CHANGE_BUI[0])
draw_item_name(@data[2], 92, WLH * 2, SOBI_CHANGE_BUI[1])
draw_item_name(@data[3], 92, WLH * 3, SOBI_CHANGE_BUI[2])
draw_item_name(@data[4], 92, WLH * 4, SOBI_CHANGE_BUI[3])
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ☆ 開始処理 <追加変更>
#--------------------------------------------------------------------------
def start
super
$game_temp.in_battle = true
@spriteset = Spriteset_Battle.new
@message_window = Window_BattleMessage.new
@action_battlers = []
create_info_viewport
@lose_equip_item =[] #追加
@gain_equip_item =[] #追加
end
#--------------------------------------------------------------------------
# ☆ フレーム更新 <追加変更>
#--------------------------------------------------------------------------
def update
super
update_basic(true)
update_info_viewport # 情報表示ビューポートを更新
if $game_message.visible
@info_viewport.visible = false
@message_window.visible = true
end
unless $game_message.visible # メッセージ表示中以外
return if judge_win_loss # 勝敗判定
update_scene_change
if @target_enemy_window != nil
update_target_enemy_selection # 対象敵キャラ選択
elsif @target_actor_window != nil
update_target_actor_selection # 対象アクター選択
elsif @skill_window != nil
update_skill_selection # スキル選択
elsif @item_window != nil
update_item_selection # アイテム選択
elsif @party_command_window.active
update_party_command_selection # パーティコマンド選択
elsif @actor_command_window.active
update_actor_command_selection # アクターコマンド選択
elsif @actor_command_window2.active
update_actor_command2_selection # アクターコマンド選択 #追加
elsif @equip_window != nil
equip_update # 装備選択 #追加
else
process_battle_event # バトルイベントの処理
process_action # 戦闘行動
process_battle_event # バトルイベントの処理
end
end
end
#--------------------------------------------------------------------------
# ☆ 情報表示ビューポートの作成 <追加変更>
#--------------------------------------------------------------------------
def create_info_viewport
@info_viewport = Viewport.new(0, 288, 544, 128)
@info_viewport.z = 100
@status_window = Window_BattleStatus.new
@party_command_window = Window_PartyCommand.new
@actor_command_window = Window_ActorCommand.new
@actor_command_window2 = Window_ActorCommand2.new #追加
@status_window.viewport = @info_viewport
@party_command_window.viewport = @info_viewport
@actor_command_window.viewport = @info_viewport
@actor_command_window2.viewport = @info_viewport #追加
@status_window.x = 128
@actor_command_window.x = 544
@actor_command_window2.x = SOBI_CHANGE_WINDOW_X #
@actor_command_window2.y = SOBI_CHANGE_WINDOW_Y #
@info_viewport.visible = false
@actor_command_window2.visible = false #追加
@actor_command_window2.active = false #追加
@actor_command_window2.back_opacity=245# 追加
end
#--------------------------------------------------------------------------
# ☆ 情報表示ビューポートの解放 <追加変更>
#--------------------------------------------------------------------------
def dispose_info_viewport
@status_window.dispose
@party_command_window.dispose
@actor_command_window.dispose
@actor_command_window2.dispose #追加
@info_viewport.dispose
end
#--------------------------------------------------------------------------
# ☆ 情報表示ビューポートの更新 <追加変更>
#--------------------------------------------------------------------------
def update_info_viewport
@party_command_window.update
@actor_command_window.update
@actor_command_window2.update #追加
@status_window.update
if @party_command_window.active and @info_viewport.ox > 0
@info_viewport.ox -= 16
elsif @actor_command_window.active and @info_viewport.ox < 128
@info_viewport.ox += 16
elsif @actor_command_window2.active and @info_viewport.ox < 128 #追加
@info_viewport.ox += 16
end
end
#--------------------------------------------------------------------------
# ☆ アクターコマンド選択の開始 <追加変更>
#--------------------------------------------------------------------------
def start_actor_command_selection
@party_command_window.active = false
@actor_command_window2.active = false #追加
@actor_command_window2.visible = false #追加
@actor_command_window.setup(@active_battler)
@actor_command_window.active = true
if @command_temp!=nil
@actor_command_window.index = @command_temp #追加
@command_temp = nil #追加
else
@actor_command_window.index = 0
end
end
#--------------------------------------------------------------------------
# ☆ アクターコマンド2選択の開始 <新規追加>
#--------------------------------------------------------------------------
def start_actor_command2_selection
@party_command_window.active = false
@actor_command_window.active = false
@actor_command_window2.setup(@active_battler)
@actor_command_window2.active = true
@actor_command_window2.visible = true #
@actor_command_window2.index = 0
end
#--------------------------------------------------------------------------
# ☆ アクターコマンド選択の更新 <追加変更>
#--------------------------------------------------------------------------
def update_actor_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
prior_actor
elsif Input.trigger?(Input::C)
case @actor_command_window.index
when 0 # 攻撃
Sound.play_decision
@active_battler.action.set_attack
start_target_enemy_selection
when 1 # スキル
Sound.play_decision
start_skill_selection
when 2 # 防御
Sound.play_decision
@active_battler.action.set_guard
next_actor
when 3 # アイテム
Sound.play_decision
start_item_selection
end
elsif Input.press?(Input::L) or Input.press?(Input::R) #追加
@command_temp = @actor_command_window.index #追加
start_actor_command2_selection #追加
end
end
#--------------------------------------------------------------------------
# ☆ アクターコマンド選択の更新 <新規追加>
#--------------------------------------------------------------------------
def update_actor_command2_selection
unless Input.press?(Input::L) or Input.press?(Input::R) #追加
start_actor_command_selection #追加
end
if Input.trigger?(Input::B)
Sound.play_cancel
@actor_command_window2.active = false #追加
@actor_command_window2.visible = false #追加
@command_temp=0 #追加
prior_actor
elsif Input.trigger?(Input::C)
case @actor_command_window2.index
when 0 # 装備変更
Sound.play_decision
start_equip_selection #追加
end
end
end
#--------------------------------------------------------------------------
# ☆ 定数 <新規追加>
#---------------------------------------------------------------------------
EQUIP_TYPE_MAX = 5 # 装備部位の数
#--------------------------------------------------------------------------
# ☆ 装備選択の開始 <新規追加>
#--------------------------------------------------------------------------
def start_equip_selection
@help_window = Window_Help.new
create_equip_item_windows
@equip_window = Window_Equip.new(208, 56, @active_battler)
@equip_window.help_window = @help_window
@equip_index=0 #if @equip_index==nil
@equip_window.index = @equip_index
@equip_status_window =Window_EquipStatus.new(0, 56, @active_battler)
@equip_status_window.active = false
@equip_window.battle_refresh
@equip_window.active = true
@actor_command_window.active = false
@actor_command_window2.active = false
end
#--------------------------------------------------------------------------
# ☆ アイテムウィンドウの作成 <新規追加>
#--------------------------------------------------------------------------
def create_equip_item_windows
@item_windows = []
for i in 0...EQUIP_TYPE_MAX
@item_windows[i] = Window_EquipItem.new(0, 208, 544, 80, @active_battler, i)
@item_windows[i].help_window = @help_window
@item_windows[i].visible = (@equip_index == i)
@item_windows[i].y = 208
@item_windows[i].height = 80
@item_windows[i].active = false
@item_windows[i].index = -1
end
end
#--------------------------------------------------------------------------
# ☆ アイテムウィンドウの更新 <新規追加>
#--------------------------------------------------------------------------
def update_equip_item_windows
for i in 0...EQUIP_TYPE_MAX
@item_windows[i].visible = (@equip_window.index == i)
@item_windows[i].update
end
@equip_item_window = @item_windows[@equip_window.index]
end
#--------------------------------------------------------------------------
# ☆ 装備ウィンドウの更新 <新規追加>
#--------------------------------------------------------------------------
def update_equip_window
@equip_window.update
end
#--------------------------------------------------------------------------
# ☆ ステータスウィンドウの更新 <新規追加>
#--------------------------------------------------------------------------
def update_equip_status_window
if @equip_window.active
@equip_status_window.set_new_parameters(nil, nil, nil, nil)
elsif @equip_item_window.active
temp_actor = @active_battler.clone
temp_actor.change_equip(@equip_window.index, @equip_item_window.item, true)
new_atk = temp_actor.atk
new_def = temp_actor.def
new_spi = temp_actor.spi
new_agi = temp_actor.agi
@equip_status_window.set_new_parameters(new_atk, new_def, new_spi, new_agi)
end
@equip_status_window.update
end
#--------------------------------------------------------------------------
# ☆ フレーム更新 <新規追加>
#--------------------------------------------------------------------------
def equip_update
@help_window.update
update_equip_window
update_equip_status_window
update_equip_item_windows
if @equip_window.active
update_equip_selection
elsif @equip_item_window.active
update_equip_item_selection
end
end
#--------------------------------------------------------------------------
# ☆ 装備選択の終了 <新規追加>
#--------------------------------------------------------------------------
def end_equip_selection
if @equip_window != nil
@equip_window.dispose
@equip_window = nil
@equip_status_window.dispose
@equip_status_window = nil
dispose_equip_item_windows
@help_window.dispose
@help_window = nil
end
if SOBI_CHANGE_TURN ==0
@actor_command_window2.active = true
else
@actor_command_window2.active = false #追加
@actor_command_window2.visible = false #追加
@actor_command_window.active = true
end
end
#--------------------------------------------------------------------------
# ☆ アイテムウィンドウの解放 <新規追加>
#--------------------------------------------------------------------------
def dispose_equip_item_windows
for window in @item_windows
window.dispose
end
end
#--------------------------------------------------------------------------
# ☆ 装備部位選択の更新 <新規追加>
#--------------------------------------------------------------------------
def update_equip_selection
if Input.trigger?(Input::B)
Sound.play_cancel
end_equip_selection
elsif Input.trigger?(Input::C)
if @equip_window.index == 0 and SOBI_CHANGE_BUI[0] != true
Sound.play_buzzer
elsif @equip_window.index == 1 and SOBI_CHANGE_BUI[0] != true
Sound.play_buzzer
elsif @equip_window.index == 2 and SOBI_CHANGE_BUI[1] != true
Sound.play_buzzer
elsif @equip_window.index == 3 and SOBI_CHANGE_BUI[2] != true
Sound.play_buzzer
elsif @equip_window.index == 4 and SOBI_CHANGE_BUI[3] != true
Sound.play_buzzer
else
if @active_battler.fix_equipment
Sound.play_buzzer
else
Sound.play_decision
@equip_window.active = false
@equip_item_window.active = true
@equip_item_window.index = 0
end
end
end
end
#--------------------------------------------------------------------------
# ☆ 装備アイテム選択の更新 <新規追加>
#--------------------------------------------------------------------------
def update_equip_item_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@equip_window.active = true
@equip_item_window.active = false
@equip_item_window.index = -1
elsif Input.trigger?(Input::C)
Sound.play_equip
if SOBI_CHANGE_TURN ==1
equip_item = @equip_item_window.item
index = @equip_window.index
last_equip_item =@active_battler.equips[index]
@active_battler.action.set_sobi_change(index, equip_item,last_equip_item)
@active_battler.battle_change_equip_item_lose(equip_item,last_equip_item)
@lose_equip_item[@actor_index]=equip_item
@gain_equip_item[@actor_index]=last_equip_item
@equip_window.active = true
@equip_item_window.active = false
@equip_item_window.index = -1
end_equip_selection
next_actor
else
@active_battler.change_equip(@equip_window.index, @equip_item_window.item)
@equip_window.active = true
@equip_item_window.active = false
@equip_item_window.index = -1
@equip_window.battle_refresh
for equip_item_window in @item_windows
equip_item_window.refresh
end
end
end
end
#--------------------------------------------------------------------------
# ☆ 前のアクターのコマンド入力へ <追加変更>
#--------------------------------------------------------------------------
def prior_actor
loop do
if @actor_index == 0
start_party_command_selection
return
end
@status_window.index = @actor_index -= 1
@active_battler = $game_party.members[@actor_index]
next if @active_battler.auto_battle
break if @active_battler.inputable?
end
if SOBI_CHANGE_TURN ==1 #追加
lose = @gain_equip_item[@actor_index] #追加
gain = @lose_equip_item[@actor_index] #追加
@active_battler.battle_change_equip_item_gain(lose,gain) #追加
@gain_equip_item[@actor_index] = nil #追加
@lose_equip_item[@actor_index] = nil #追加
end #追加
start_actor_command_selection
end
#--------------------------------------------------------------------------
# ☆ 戦闘行動の実行 <追加変更>
#--------------------------------------------------------------------------
def execute_action
case @active_battler.action.kind
when 0 # 基本
case @active_battler.action.basic
when 0 # 攻撃
execute_action_attack
when 1 # 防御
execute_action_guard
when 2 # 逃走
execute_action_escape
when 3 # 待機
execute_action_wait
when 4 # 装備変更 #追加
execute_action_sobi_change #追加
end
when 1 # スキル
execute_action_skill
when 2 # アイテム
execute_action_item
end
end
#--------------------------------------------------------------------------
# ☆ 戦闘行動の実行 :装備変更 <新規追加>
#--------------------------------------------------------------------------
def execute_action_sobi_change
item = @active_battler.action.sobi_item
index= @active_battler.action.sobi_index
last_item = @active_battler.action.last_sobi_item
text = sprintf(Vocab::SobiCange_TurnWord0,@active_battler.name)
@message_window.add_instant_text(text)
wait(45)
Sound.play_equip
if item != nil
if item != last_item
text = sprintf(Vocab::SobiCange_TurnWord1, @active_battler.name,item.name)
else
text = sprintf(Vocab::SobiCange_TurnWord2, @active_battler.name,item.name)
end
else
if last_item != nil
text = sprintf(Vocab::SobiCange_TurnWord3, @active_battler.name,last_item.name)
else
text = sprintf(Vocab::SobiCange_TurnWord4, @active_battler.name)
end
end
@active_battler.battle_change_equip(index, item)
@message_window.add_instant_text(text)
wait(60)
end
end
class Game_BattleAction
attr_accessor :sobi_item # 装備アイテム
attr_accessor :last_sobi_item # 最後に装備してたアイテム
attr_accessor :sobi_index # 装備部位
#--------------------------------------------------------------------------
# ☆ 装備変更を設定 <新規追加>
#--------------------------------------------------------------------------
def set_sobi_change(sobi_index, sobi_item,last_sobi_item)
@kind = 0
@basic = 4
@sobi_item = sobi_item
@sobi_index = sobi_index
@last_sobi_item = last_sobi_item
end
#--------------------------------------------------------------------------
# ☆ 装備変更判定 <新規追加>
#--------------------------------------------------------------------------
def sobi_change?
return (@kind == 0 and @basic == 4)
end
#--------------------------------------------------------------------------
# ☆ 装備アイテムオブジェクト取得 <新規追加>
#--------------------------------------------------------------------------
def sobi_item
return @sobi_item
end
#--------------------------------------------------------------------------
# ☆ 装備部位オブジェクト取得 <新規追加>
#--------------------------------------------------------------------------
def sobi_index
return @sobi_index
end
#--------------------------------------------------------------------------
# ☆ 最後に装備していたアイテムオブジェクト取得 <新規追加>
#--------------------------------------------------------------------------
def last_sobi_item
return @last_sobi_item
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ☆ バトル時装備の変更 (オブジェクトで指定) <新規追加>
# equip_type : 装備部位 (0..4)
# item : 武器 or 防具 (nil なら装備解除)
# test : テストフラグ (戦闘テスト、または装備画面での一時装備)
#--------------------------------------------------------------------------
def battle_change_equip(equip_type, item, test = false)
last_item = equips[equip_type]
$game_party.gain_item(item, 1) #減ってますから,もとに戻す
return if $game_party.item_number(item) == 0 if item != nil
$game_party.gain_item(last_item, 1)
$game_party.lose_item(item, 1)
item_id = item == nil ? 0 : item.id
case equip_type
when 0 # 武器
@weapon_id = item_id
unless two_hands_legal? # 両手持ち違反の場合
change_equip(1, nil, test) # 逆の手の装備を外す
end
when 1 # 盾
@armor1_id = item_id
unless two_hands_legal? # 両手持ち違反の場合
change_equip(0, nil, test) # 逆の手の装備を外す
end
when 2 # 頭
@armor2_id = item_id
when 3 # 身体
@armor3_id = item_id
when 4 # 装飾品
@armor4_id = item_id
end
end
#--------------------------------------------------------------------------
# ☆ バトル時装備の変更のアイテムの減 (オブジェクトで指定) <新規追加>
# equip_type : 装備部位 (0..4)
# item : 武器 or 防具 (nil なら装備解除)
# test : テストフラグ (戦闘テスト、または装備画面での一時装備)
#--------------------------------------------------------------------------
def battle_change_equip_item_lose(item,last_item, test = false)
return if $game_party.item_number(item) == 0 if item != nil
$game_party.lose_item(item, 1)
end
#--------------------------------------------------------------------------
# ☆ バトル時装備の変更のアイテムの増 (オブジェクトで指定) <新規追加>
# equip_type : 装備部位 (0..4)
# item : 武器 or 防具 (nil なら装備解除)
# test : テストフラグ (戦闘テスト、または装備画面での一時装備)
#--------------------------------------------------------------------------
def battle_change_equip_item_gain(item,last_item, test = false)
$game_party.gain_item(last_item, 1)
end
end
#////////////////////////////////////////////////////////////////
#作成者:ehime
#http://www.abcoroti.com/~nekoneko/index.html
#readmeやスタッフロールの明記,使用報告は任意.
#////////////////////////////////////////////////////////////////
复制代码
作者:
quanhome
时间:
2011-2-12 15:23
感谢 ls 两位,,脚 本 我试了下,很好。 可是我的系统已经被我改过了。所以不兼容了。不过还是很感谢。我又想到用公共事件做 用 $scene = Scene_Equip.new( $game_party.last_actor_index) 来直接调出 装备菜单,,可是返回时却直接到了地图画面,没有返回战斗中,,,这个返回原来的战斗画面 大概要怎么写啊,,,先感谢了。。要是用公共事件做 具体怎么做好啊。。。。。
作者:
Rion幻音
时间:
2011-2-12 22:55
回复
quanhome
的帖子
如果使用公共事件调用装备窗口的话会使战斗强制退出,所以不能~稍微整合我发的脚本就能了~
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1