赞 3
VIP 0
好人卡 0
积分 13
经验 630
最后登录 2021-8-12
在线时间 118 小时
Lv3.寻梦者
梦石 0
星屑 1293
在线时间 118 小时
注册时间 2017-7-14
帖子 148
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
在商店中以属性定义的方式将物品分为了金币和银币通货...然而在打开商店时...因为防具的属性描述与武器和物品的属性描述名字不一样...所以必须要分开写(不然直接报错..)...这样就必须判断当前取得的物品的类型...然而我试了很久都不知道应该处理...所以想来请教一下QWQ脚本附下:
(因为关于判定属性的脚本我改了三个..所以就全发上来了.)
#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
# 商店画面、浏览显示可以购买的商品的窗口。
#==============================================================================
#添加了币种图片的描述
class Window_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
# shop_goods : 商品
#--------------------------------------------------------------------------
def initialize( shop_goods)
super ( 0 , 128 , 368 , 352 )
@shop_goods = shop_goods
refresh
self .index = 0
end
#--------------------------------------------------------------------------
# ● 获取物品
#--------------------------------------------------------------------------
def item
return @data [ self .index ]
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self .contents != nil
self .contents .dispose
self .contents = nil
end
@data = [ ]
for goods_item in @shop_goods
case goods_item[ 0 ]
when 0
item = $data_items [ goods_item[ 1 ] ]
when 1
item = $data_weapons [ goods_item[ 1 ] ]
when 2
item = $data_armors [ goods_item[ 1 ] ]
end
if item != nil
@data .push ( item)
end
end
# 如果项目数不是 0 就生成位图、描绘全部项目
@item_max = @data .size
if @item_max > 0
self .contents = Bitmap.new ( width - 32 , row_max * 32 )
for i in 0 ...@item_max
draw_item( i)
end
end
end
#--------------------------------------------------------------------------
# ● 描绘项目
# index : 项目编号
#--------------------------------------------------------------------------
def draw_item( index)
item = @data [ index]
# 获取物品所持数
case item
when RPG::Item
number = $game_party .item_number ( item.id )
when RPG::Weapon
number = $game_party .weapon_number ( item.id )
when RPG::Armor
number = $game_party .armor_number ( item.id )
end
# 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
# 除此之外的情况设置为无效文字色
p item.kind
if item.kind ==nil
p 'zx'
if item.element_set .include ?( 999 ) ==false
if ( item.price <= $game_party .gold ||$game_switches[ 4 ] ==true ) and number < item.max_num
self .contents .font .color = normal_color
else
self .contents .font .color = disabled_color
end
else
if ( item.price <= $game_party .silver ||$game_switches[ 4 ] ==true ) and number < item.max_num
self .contents .font .color = normal_color
else
self .contents .font .color = disabled_color
end
end
end
x = 4
y = index * 32
rect = Rect.new ( x, y, self .width - 32 , 32 )
self .contents .fill_rect ( rect, Color.new ( 0 , 0 , 0 , 0 ) )
bitmap = RPG::Cache .icon ( item.icon_name )
if item.element_set .include ?( 999 ) ==false
p_money=Bitmap.new ( "Graphics/Money/" +"银币.png" )
else
p_money=Bitmap.new ( "Graphics/Money/" +"金币.png" )
end
opacity = self .contents .font .color == normal_color ? 255 : 128
self .contents .blt ( x, y + 4 , bitmap, Rect.new ( 0 , 0 , 24 , 24 ) , opacity)
self .contents .draw_text ( x + 28 , y, 212 , 32 , item.name , 0 )
if $game_switches [ 4 ] ==true
self .contents .draw_text ( x + 216 , y, 88 , 32 , "0" , 2 )
else
self .contents .draw_text ( x + 216 , y, 88 , 32 , item.price .to_s , 2 )
end
self .contents .blt ( x+312 , y+8 , p_money,Rect.new ( 0 ,0 ,16 ,16 ) ,255 )
end
#--------------------------------------------------------------------------
# ● 刷新帮助文本
#--------------------------------------------------------------------------
def update_help
@help_window .set_text ( self .item == nil ? "" : self .item .description )
end
end
#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
# 商店画面、浏览显示可以购买的商品的窗口。
#==============================================================================
#添加了币种图片的描述
class Window_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
# shop_goods : 商品
#--------------------------------------------------------------------------
def initialize( shop_goods)
super ( 0 , 128 , 368 , 352 )
@shop_goods = shop_goods
refresh
self .index = 0
end
#--------------------------------------------------------------------------
# ● 获取物品
#--------------------------------------------------------------------------
def item
return @data [ self .index ]
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self .contents != nil
self .contents .dispose
self .contents = nil
end
@data = [ ]
for goods_item in @shop_goods
case goods_item[ 0 ]
when 0
item = $data_items [ goods_item[ 1 ] ]
when 1
item = $data_weapons [ goods_item[ 1 ] ]
when 2
item = $data_armors [ goods_item[ 1 ] ]
end
if item != nil
@data .push ( item)
end
end
# 如果项目数不是 0 就生成位图、描绘全部项目
@item_max = @data .size
if @item_max > 0
self .contents = Bitmap.new ( width - 32 , row_max * 32 )
for i in 0 ...@item_max
draw_item( i)
end
end
end
#--------------------------------------------------------------------------
# ● 描绘项目
# index : 项目编号
#--------------------------------------------------------------------------
def draw_item( index)
item = @data [ index]
# 获取物品所持数
case item
when RPG::Item
number = $game_party .item_number ( item.id )
when RPG::Weapon
number = $game_party .weapon_number ( item.id )
when RPG::Armor
number = $game_party .armor_number ( item.id )
end
# 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
# 除此之外的情况设置为无效文字色
p item.kind
if item.kind ==nil
p 'zx'
if item.element_set .include ?( 999 ) ==false
if ( item.price <= $game_party .gold ||$game_switches[ 4 ] ==true ) and number < item.max_num
self .contents .font .color = normal_color
else
self .contents .font .color = disabled_color
end
else
if ( item.price <= $game_party .silver ||$game_switches[ 4 ] ==true ) and number < item.max_num
self .contents .font .color = normal_color
else
self .contents .font .color = disabled_color
end
end
end
x = 4
y = index * 32
rect = Rect.new ( x, y, self .width - 32 , 32 )
self .contents .fill_rect ( rect, Color.new ( 0 , 0 , 0 , 0 ) )
bitmap = RPG::Cache .icon ( item.icon_name )
if item.element_set .include ?( 999 ) ==false
p_money=Bitmap.new ( "Graphics/Money/" +"银币.png" )
else
p_money=Bitmap.new ( "Graphics/Money/" +"金币.png" )
end
opacity = self .contents .font .color == normal_color ? 255 : 128
self .contents .blt ( x, y + 4 , bitmap, Rect.new ( 0 , 0 , 24 , 24 ) , opacity)
self .contents .draw_text ( x + 28 , y, 212 , 32 , item.name , 0 )
if $game_switches [ 4 ] ==true
self .contents .draw_text ( x + 216 , y, 88 , 32 , "0" , 2 )
else
self .contents .draw_text ( x + 216 , y, 88 , 32 , item.price .to_s , 2 )
end
self .contents .blt ( x+312 , y+8 , p_money,Rect.new ( 0 ,0 ,16 ,16 ) ,255 )
end
#--------------------------------------------------------------------------
# ● 刷新帮助文本
#--------------------------------------------------------------------------
def update_help
@help_window .set_text ( self .item == nil ? "" : self .item .description )
end
end
#==============================================================================
# ■ Window_ShopNumber
#------------------------------------------------------------------------------
# 商店画面、输入买卖数量的窗口。
#==============================================================================
#添加了币种图片的描述
class Window_ShopNumber < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super ( 0 , 128 , 368 , 352 )
self .contents = Bitmap.new ( width - 32 , height - 32 )
@item = nil
@max = 1
@price = 0
@number = 1
end
#--------------------------------------------------------------------------
# ● 设置物品、最大个数、价格
#--------------------------------------------------------------------------
def set( item, max, price)
@item = item
@max = max
@price = price
@number = 1
refresh
end
#--------------------------------------------------------------------------
# ● 被输入的件数设置
#--------------------------------------------------------------------------
def number
return @number
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self .contents .clear
draw_item_name( @item, 4 , 96 )
if @item .element_set .include ?( 999 ) ==false
bitmap = Bitmap.new ( "Graphics/Money/" +"银币.png" )
else
bitmap = Bitmap.new ( "Graphics/Money/" +"金币.png" )
end
self .contents .font .color = normal_color
self .contents .draw_text ( 272 , 96 , 32 , 32 , "×" )
self .contents .draw_text ( 308 , 96 , 24 , 32 , @number .to_s , 2 )
self .cursor_rect .set ( 304 , 96 , 32 , 32 )
# 描绘合计价格和货币单位
domination = $data_system .words .gold
cx = contents.text_size ( domination) .width
total_price = @price * @number
#(x, y, bitmap, Rect.new(x, y, 宽, 高),透明度)
self .contents .font .color = normal_color
if $game_switches [ 4 ] ==false
self .contents .draw_text ( 4 , 160 , 328 -cx-2 , 32 , total_price.to_s , 2 )
else
self .contents .draw_text ( 4 , 160 , 328 -cx-2 , 32 , "0" , 2 )
end
self .contents .font .color = system_color
self .contents .blt ( 332 -cx, 168 , bitmap,Rect.new ( 0 ,0 ,16 ,16 ) ,255 )
#self.contents.draw_text(332-cx, 160, cx, 32, domination, 2)
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
super
if self .active
# 光标右 (+1)
if Input.repeat ?( Input::RIGHT ) and @number < @max
$game_system .se_play ( $data_system.cursor_se )
@number += 1
refresh
end
# 光标左 (-1)
if Input.repeat ?( Input::LEFT ) and @number > 1
$game_system .se_play ( $data_system.cursor_se )
@number -= 1
refresh
end
# 光标上 (+10)
if Input.repeat ?( Input::UP ) and @number < @max
$game_system .se_play ( $data_system.cursor_se )
@number = [ @number + 10 , @max ] .min
refresh
end
# 光标下 (-10)
if Input.repeat ?( Input::DOWN ) and @number > 1
$game_system .se_play ( $data_system.cursor_se )
@number = [ @number - 10 , 1 ] .max
refresh
end
end
end
end
#==============================================================================
# ■ Window_ShopNumber
#------------------------------------------------------------------------------
# 商店画面、输入买卖数量的窗口。
#==============================================================================
#添加了币种图片的描述
class Window_ShopNumber < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super ( 0 , 128 , 368 , 352 )
self .contents = Bitmap.new ( width - 32 , height - 32 )
@item = nil
@max = 1
@price = 0
@number = 1
end
#--------------------------------------------------------------------------
# ● 设置物品、最大个数、价格
#--------------------------------------------------------------------------
def set( item, max, price)
@item = item
@max = max
@price = price
@number = 1
refresh
end
#--------------------------------------------------------------------------
# ● 被输入的件数设置
#--------------------------------------------------------------------------
def number
return @number
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self .contents .clear
draw_item_name( @item, 4 , 96 )
if @item .element_set .include ?( 999 ) ==false
bitmap = Bitmap.new ( "Graphics/Money/" +"银币.png" )
else
bitmap = Bitmap.new ( "Graphics/Money/" +"金币.png" )
end
self .contents .font .color = normal_color
self .contents .draw_text ( 272 , 96 , 32 , 32 , "×" )
self .contents .draw_text ( 308 , 96 , 24 , 32 , @number .to_s , 2 )
self .cursor_rect .set ( 304 , 96 , 32 , 32 )
# 描绘合计价格和货币单位
domination = $data_system .words .gold
cx = contents.text_size ( domination) .width
total_price = @price * @number
#(x, y, bitmap, Rect.new(x, y, 宽, 高),透明度)
self .contents .font .color = normal_color
if $game_switches [ 4 ] ==false
self .contents .draw_text ( 4 , 160 , 328 -cx-2 , 32 , total_price.to_s , 2 )
else
self .contents .draw_text ( 4 , 160 , 328 -cx-2 , 32 , "0" , 2 )
end
self .contents .font .color = system_color
self .contents .blt ( 332 -cx, 168 , bitmap,Rect.new ( 0 ,0 ,16 ,16 ) ,255 )
#self.contents.draw_text(332-cx, 160, cx, 32, domination, 2)
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
super
if self .active
# 光标右 (+1)
if Input.repeat ?( Input::RIGHT ) and @number < @max
$game_system .se_play ( $data_system.cursor_se )
@number += 1
refresh
end
# 光标左 (-1)
if Input.repeat ?( Input::LEFT ) and @number > 1
$game_system .se_play ( $data_system.cursor_se )
@number -= 1
refresh
end
# 光标上 (+10)
if Input.repeat ?( Input::UP ) and @number < @max
$game_system .se_play ( $data_system.cursor_se )
@number = [ @number + 10 , @max ] .min
refresh
end
# 光标下 (-10)
if Input.repeat ?( Input::DOWN ) and @number > 1
$game_system .se_play ( $data_system.cursor_se )
@number = [ @number - 10 , 1 ] .max
refresh
end
end
end
end
#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
# 处理商店画面的类。
#==============================================================================
#添加了金币的使用
class Scene_Shop
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
# 生成帮助窗口
@help_window = Window_Help.new
# 生成指令窗口
@command_window = Window_ShopCommand.new
# 生成金钱窗口
@gold_window = Window_Gold.new
@gold_window .x = 480
@gold_window .y = 64
# 生成时间窗口
@dummy_window = Window_Base.new ( 0 , 128 , 640 , 352 )
# 生成购买窗口
@buy_window = Window_ShopBuy.new ( $game_temp.shop_goods )
@buy_window .active = false
@buy_window .visible = false
@buy_window .help_window = @help_window
# 生成卖出窗口
@sell_window = Window_ShopSell.new
@sell_window .active = false
@sell_window .visible = false
@sell_window .help_window = @help_window
# 生成数量输入窗口
@number_window = Window_ShopNumber.new
@number_window .active = false
@number_window .visible = false
# 生成状态窗口
@status_window = Window_ShopStatus.new
@status_window .visible = false
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面切换的话就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
@help_window .dispose
@command_window .dispose
@gold_window .dispose
@dummy_window .dispose
@buy_window .dispose
@sell_window .dispose
@number_window .dispose
@status_window .dispose
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
# 刷新窗口
@help_window .update
@command_window .update
@gold_window .update
@dummy_window .update
@buy_window .update
@sell_window .update
@number_window .update
@status_window .update
# 指令窗口激活的情况下: 调用 update_command
if @command_window .active
update_command
return
end
# 购买窗口激活的情况下: 调用 update_buy
if @buy_window .active
update_buy
return
end
# 卖出窗口激活的情况下: 调用 update_sell
if @sell_window .active
update_sell
return
end
# 个数输入窗口激活的情况下: 调用 update_number
if @number_window .active
update_number
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (指令窗口激活的情况下)
#--------------------------------------------------------------------------
def update_command
# 按下 B 键的情况下
if Input.trigger ?( Input::B )
# 演奏取消 SE
$game_system .se_play ( $data_system.cancel_se )
# 切换到地图画面
$scene = Scene_Map.new
return
end
# 按下 C 键的情况下
if Input.trigger ?( Input::C )
# 命令窗口光标位置分支
case @command_window .index
when 0 # 购买
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 窗口状态转向购买模式
@command_window .active = false
@dummy_window .visible = false
@buy_window .active = true
@buy_window .visible = true
@buy_window .refresh
@status_window .visible = true
when 1 # 卖出
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 窗口状态转向卖出模式
@command_window .active = false
@dummy_window .visible = false
@sell_window .active = true
@sell_window .visible = true
@sell_window .refresh
when 2 # 取消
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 切换到地图画面
$scene = Scene_Map.new
end
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (购买窗口激活的情况下)
#--------------------------------------------------------------------------
def update_buy
# 设置状态窗口的物品
@status_window .item = @buy_window .item
# 按下 B 键的情况下
if Input.trigger ?( Input::B )
# 演奏取消 SE
$game_system .se_play ( $data_system.cancel_se )
# 窗口状态转向初期模式
@command_window .active = true
@dummy_window .visible = true
@buy_window .active = false
@buy_window .visible = false
@status_window .visible = false
@status_window .item = nil
# 删除帮助文本
@help_window .set_text ( "" )
return
end
# 按下 C 键的情况下
if Input.trigger ?( Input::C )
# 获取物品
@item = @buy_window .item
# 物品无效的情况下、或者价格在所持金以上的情况下
if @item .element_set .include ?( 999 ) ==false
if ( @item == nil or @item .price > $game_party .gold ) && $game_switches [ 4 ] ==false
# 演奏冻结 SE
$game_system .se_play ( $data_system.buzzer_se )
return
end
else
if @item == nil or @item .price > $game_party .silver &&$game_switches[ 4 ] ==false
# 演奏冻结 SE
$game_system .se_play ( $data_system.buzzer_se )
return
end
end
# 获取物品所持数
case @item
when RPG::Item
number = $game_party .item_number ( @item.id )
when RPG::Weapon
number = $game_party .weapon_number ( @item.id )
when RPG::Armor
number = $game_party .armor_number ( @item.id )
end
# 如果已经拥有了 99 个情况下
if number == @item .max_num
# 演奏冻结 SE
$game_system .se_play ( $data_system.buzzer_se )
return
end
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 计算可以最多购买的数量
if @item .element_set .include ?( 999 ) ==false
max = @item .price == 0 ? 99 : $game_party .gold / @item .price
if $game_switches [ 4 ] ==false
max = [ max,@item.max_num - number] .min
else
max = @item .max_num - number
end
else
max = @item .price == 0 ? 99 : $game_party .silver / @item .price
if $game_switches [ 4 ] ==false
max = [ max, @item .max_num - number] .min
else
max = @item .max_num - number
end
end
# 窗口状态转向数值输入模式
@buy_window .active = false
@buy_window .visible = false
@number_window .set ( @item, max, @item .price )
@number_window .active = true
@number_window .visible = true
end
end
#--------------------------------------------------------------------------
# ● 画面更新 (卖出窗口激活的情况下)
#--------------------------------------------------------------------------
def update_sell
# 按下 B 键的情况下
if Input.trigger ?( Input::B )
# 演奏取消 SE
$game_system .se_play ( $data_system.cancel_se )
# 窗口状态转向初期模式
@command_window .active = true
@dummy_window .visible = true
@sell_window .active = false
@sell_window .visible = false
@status_window .item = nil
# 删除帮助文本
@help_window .set_text ( "" )
return
end
# 按下 C 键的情况下
if Input.trigger ?( Input::C )
# 获取物品
@item = @sell_window .item
# 设置状态窗口的物品
@status_window .item = @item
# 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
if @item == nil or @item .price == 0
# 演奏冻结 SE
$game_system .se_play ( $data_system.buzzer_se )
return
end
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 获取物品的所持数
case @item
when RPG::Item
number = $game_party .item_number ( @item.id )
when RPG::Weapon
number = $game_party .weapon_number ( @item.id )
when RPG::Armor
number = $game_party .armor_number ( @item.id )
end
# 最大卖出个数 = 物品的所持数
max = number
# 窗口状态转向个数输入模式
@sell_window .active = false
@sell_window .visible = false
@number_window .set ( @item, max, @item .price / 2 )
@number_window .active = true
@number_window .visible = true
@status_window .visible = true
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (个数输入窗口激活的情况下)
#--------------------------------------------------------------------------
def update_number
# 按下 B 键的情况下
if Input.trigger ?( Input::B )
# 演奏取消 SE
$game_system .se_play ( $data_system.cancel_se )
# 设置个数输入窗口为不活动·非可视状态
@number_window .active = false
@number_window .visible = false
# 命令窗口光标位置分支
case @command_window .index
when 0 # 购买
# 窗口状态转向购买模式
@buy_window .active = true
@buy_window .visible = true
when 1 # 卖出
# 窗口状态转向卖出模式
@sell_window .active = true
@sell_window .visible = true
@status_window .visible = false
end
return
end
# 按下 C 键的情况下
if Input.trigger ?( Input::C )
# 演奏商店 SE
$game_system .se_play ( $data_system.shop_se )
# 设置个数输入窗口为不活动·非可视状态
@number_window .active = false
@number_window .visible = false
# 命令窗口光标位置分支
case @command_window .index
when 0 # 购买
# 购买处理
case @item
when RPG::Item
$game_party .gain_item ( @item.id , @number_window .number )
when RPG::Weapon
$game_party .gain_weapon ( @item.id , @number_window .number )
when RPG::Armor
$game_party .gain_armor ( @item.id , @number_window .number )
end
if @item .element_set .include ?( 999 ) ==false
if $game_switches [ 4 ] ==false
$game_party .lose_gold ( @number_window.number * @item .price )
end
else
if $game_switches [ 4 ] ==false
$game_party .lose_silver ( @number_window.number * @item .price )
end
end
# 刷新各窗口
@gold_window .refresh
@buy_window .refresh
@status_window .refresh
# 窗口状态转向购买模式
@buy_window .active = true
@buy_window .visible = true
when 1 # 卖出
# 卖出处理
if @item .element_set .include ?( 999 ) ==false
if $game_switches [ 4 ] ==false
$game_party .gain_gold ( @number_window.number * ( @item.price / 2 ) )
end
else
if $game_switches [ 4 ] ==false
$game_party .gain_silver ( @number_window.number * ( @item.price / 2 ) )
end
end
case @item
when RPG::Item
$game_party .lose_item ( @item.id , @number_window .number )
when RPG::Weapon
$game_party .lose_weapon ( @item.id , @number_window .number )
when RPG::Armor
$game_party .lose_armor ( @item.id , @number_window .number )
end
# 刷新各窗口
@gold_window .refresh
@sell_window .refresh
@status_window .refresh
# 窗口状态转向卖出模式
@sell_window .active = true
@sell_window .visible = true
@status_window .visible = false
end
return
end
end
end
#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
# 处理商店画面的类。
#==============================================================================
#添加了金币的使用
class Scene_Shop
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
# 生成帮助窗口
@help_window = Window_Help.new
# 生成指令窗口
@command_window = Window_ShopCommand.new
# 生成金钱窗口
@gold_window = Window_Gold.new
@gold_window .x = 480
@gold_window .y = 64
# 生成时间窗口
@dummy_window = Window_Base.new ( 0 , 128 , 640 , 352 )
# 生成购买窗口
@buy_window = Window_ShopBuy.new ( $game_temp.shop_goods )
@buy_window .active = false
@buy_window .visible = false
@buy_window .help_window = @help_window
# 生成卖出窗口
@sell_window = Window_ShopSell.new
@sell_window .active = false
@sell_window .visible = false
@sell_window .help_window = @help_window
# 生成数量输入窗口
@number_window = Window_ShopNumber.new
@number_window .active = false
@number_window .visible = false
# 生成状态窗口
@status_window = Window_ShopStatus.new
@status_window .visible = false
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面切换的话就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
@help_window .dispose
@command_window .dispose
@gold_window .dispose
@dummy_window .dispose
@buy_window .dispose
@sell_window .dispose
@number_window .dispose
@status_window .dispose
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
# 刷新窗口
@help_window .update
@command_window .update
@gold_window .update
@dummy_window .update
@buy_window .update
@sell_window .update
@number_window .update
@status_window .update
# 指令窗口激活的情况下: 调用 update_command
if @command_window .active
update_command
return
end
# 购买窗口激活的情况下: 调用 update_buy
if @buy_window .active
update_buy
return
end
# 卖出窗口激活的情况下: 调用 update_sell
if @sell_window .active
update_sell
return
end
# 个数输入窗口激活的情况下: 调用 update_number
if @number_window .active
update_number
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (指令窗口激活的情况下)
#--------------------------------------------------------------------------
def update_command
# 按下 B 键的情况下
if Input.trigger ?( Input::B )
# 演奏取消 SE
$game_system .se_play ( $data_system.cancel_se )
# 切换到地图画面
$scene = Scene_Map.new
return
end
# 按下 C 键的情况下
if Input.trigger ?( Input::C )
# 命令窗口光标位置分支
case @command_window .index
when 0 # 购买
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 窗口状态转向购买模式
@command_window .active = false
@dummy_window .visible = false
@buy_window .active = true
@buy_window .visible = true
@buy_window .refresh
@status_window .visible = true
when 1 # 卖出
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 窗口状态转向卖出模式
@command_window .active = false
@dummy_window .visible = false
@sell_window .active = true
@sell_window .visible = true
@sell_window .refresh
when 2 # 取消
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 切换到地图画面
$scene = Scene_Map.new
end
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (购买窗口激活的情况下)
#--------------------------------------------------------------------------
def update_buy
# 设置状态窗口的物品
@status_window .item = @buy_window .item
# 按下 B 键的情况下
if Input.trigger ?( Input::B )
# 演奏取消 SE
$game_system .se_play ( $data_system.cancel_se )
# 窗口状态转向初期模式
@command_window .active = true
@dummy_window .visible = true
@buy_window .active = false
@buy_window .visible = false
@status_window .visible = false
@status_window .item = nil
# 删除帮助文本
@help_window .set_text ( "" )
return
end
# 按下 C 键的情况下
if Input.trigger ?( Input::C )
# 获取物品
@item = @buy_window .item
# 物品无效的情况下、或者价格在所持金以上的情况下
if @item .element_set .include ?( 999 ) ==false
if ( @item == nil or @item .price > $game_party .gold ) && $game_switches [ 4 ] ==false
# 演奏冻结 SE
$game_system .se_play ( $data_system.buzzer_se )
return
end
else
if @item == nil or @item .price > $game_party .silver &&$game_switches[ 4 ] ==false
# 演奏冻结 SE
$game_system .se_play ( $data_system.buzzer_se )
return
end
end
# 获取物品所持数
case @item
when RPG::Item
number = $game_party .item_number ( @item.id )
when RPG::Weapon
number = $game_party .weapon_number ( @item.id )
when RPG::Armor
number = $game_party .armor_number ( @item.id )
end
# 如果已经拥有了 99 个情况下
if number == @item .max_num
# 演奏冻结 SE
$game_system .se_play ( $data_system.buzzer_se )
return
end
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 计算可以最多购买的数量
if @item .element_set .include ?( 999 ) ==false
max = @item .price == 0 ? 99 : $game_party .gold / @item .price
if $game_switches [ 4 ] ==false
max = [ max,@item.max_num - number] .min
else
max = @item .max_num - number
end
else
max = @item .price == 0 ? 99 : $game_party .silver / @item .price
if $game_switches [ 4 ] ==false
max = [ max, @item .max_num - number] .min
else
max = @item .max_num - number
end
end
# 窗口状态转向数值输入模式
@buy_window .active = false
@buy_window .visible = false
@number_window .set ( @item, max, @item .price )
@number_window .active = true
@number_window .visible = true
end
end
#--------------------------------------------------------------------------
# ● 画面更新 (卖出窗口激活的情况下)
#--------------------------------------------------------------------------
def update_sell
# 按下 B 键的情况下
if Input.trigger ?( Input::B )
# 演奏取消 SE
$game_system .se_play ( $data_system.cancel_se )
# 窗口状态转向初期模式
@command_window .active = true
@dummy_window .visible = true
@sell_window .active = false
@sell_window .visible = false
@status_window .item = nil
# 删除帮助文本
@help_window .set_text ( "" )
return
end
# 按下 C 键的情况下
if Input.trigger ?( Input::C )
# 获取物品
@item = @sell_window .item
# 设置状态窗口的物品
@status_window .item = @item
# 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
if @item == nil or @item .price == 0
# 演奏冻结 SE
$game_system .se_play ( $data_system.buzzer_se )
return
end
# 演奏确定 SE
$game_system .se_play ( $data_system.decision_se )
# 获取物品的所持数
case @item
when RPG::Item
number = $game_party .item_number ( @item.id )
when RPG::Weapon
number = $game_party .weapon_number ( @item.id )
when RPG::Armor
number = $game_party .armor_number ( @item.id )
end
# 最大卖出个数 = 物品的所持数
max = number
# 窗口状态转向个数输入模式
@sell_window .active = false
@sell_window .visible = false
@number_window .set ( @item, max, @item .price / 2 )
@number_window .active = true
@number_window .visible = true
@status_window .visible = true
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (个数输入窗口激活的情况下)
#--------------------------------------------------------------------------
def update_number
# 按下 B 键的情况下
if Input.trigger ?( Input::B )
# 演奏取消 SE
$game_system .se_play ( $data_system.cancel_se )
# 设置个数输入窗口为不活动·非可视状态
@number_window .active = false
@number_window .visible = false
# 命令窗口光标位置分支
case @command_window .index
when 0 # 购买
# 窗口状态转向购买模式
@buy_window .active = true
@buy_window .visible = true
when 1 # 卖出
# 窗口状态转向卖出模式
@sell_window .active = true
@sell_window .visible = true
@status_window .visible = false
end
return
end
# 按下 C 键的情况下
if Input.trigger ?( Input::C )
# 演奏商店 SE
$game_system .se_play ( $data_system.shop_se )
# 设置个数输入窗口为不活动·非可视状态
@number_window .active = false
@number_window .visible = false
# 命令窗口光标位置分支
case @command_window .index
when 0 # 购买
# 购买处理
case @item
when RPG::Item
$game_party .gain_item ( @item.id , @number_window .number )
when RPG::Weapon
$game_party .gain_weapon ( @item.id , @number_window .number )
when RPG::Armor
$game_party .gain_armor ( @item.id , @number_window .number )
end
if @item .element_set .include ?( 999 ) ==false
if $game_switches [ 4 ] ==false
$game_party .lose_gold ( @number_window.number * @item .price )
end
else
if $game_switches [ 4 ] ==false
$game_party .lose_silver ( @number_window.number * @item .price )
end
end
# 刷新各窗口
@gold_window .refresh
@buy_window .refresh
@status_window .refresh
# 窗口状态转向购买模式
@buy_window .active = true
@buy_window .visible = true
when 1 # 卖出
# 卖出处理
if @item .element_set .include ?( 999 ) ==false
if $game_switches [ 4 ] ==false
$game_party .gain_gold ( @number_window.number * ( @item.price / 2 ) )
end
else
if $game_switches [ 4 ] ==false
$game_party .gain_silver ( @number_window.number * ( @item.price / 2 ) )
end
end
case @item
when RPG::Item
$game_party .lose_item ( @item.id , @number_window .number )
when RPG::Weapon
$game_party .lose_weapon ( @item.id , @number_window .number )
when RPG::Armor
$game_party .lose_armor ( @item.id , @number_window .number )
end
# 刷新各窗口
@gold_window .refresh
@sell_window .refresh
@status_window .refresh
# 窗口状态转向卖出模式
@sell_window .active = true
@sell_window .visible = true
@status_window .visible = false
end
return
end
end
end