赞 | 0 |
VIP | 7 |
好人卡 | 0 |
积分 | 1 |
经验 | 3983 |
最后登录 | 2013-2-27 |
在线时间 | 72 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 72 小时
- 注册时间
- 2010-10-18
- 帖子
- 104
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 迷路子 于 2010-11-12 15:25 编辑
早先就有這個想法了
只是之前一直沒有想到合適的寫法
昨天靈光閃現
花了一些時間終於寫出來了
而基於原本的內建商店畫面不是那麼的華麗
因此結合了億萬星辰前輩的個性化商店腳本
在其腳本上加入了我寫的限量商店腳本
因為限量販售載圖看不出來
就直接放代碼啦- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ 限量商店物品腳本◆ VX ◆
- #_/
- #_/ ◇ 項目分類 : 商店強化
- #_/ ◇ 項目版本 : 1.0.1111
- #_/ ◇ 建立日期 : 2010/11/11
- #_/ ◇ 最後更新 : 2010/11/11 ◇
- #_/----------------------------------------------------------------------------
- #_/ 腳本作者:迷路子
- #_/ 結合腳本:個性化商店 作者:億萬星辰
- #_/============================================================================
- #_/ 【基本機能】
- #_/ 1. 可設定道具、武器、防具的限量販售
- #_/ 2. 可設定能隨著時間或步數增加而再生的商品
- #_/ 3. 可分別設定可再生和不可再生的商品
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- module Miluko
- #使用的開關編號
- SW_SBS = 1
-
- #哪些物品分別為限量
- #1為item 2為weapon 3為armor
- #[]中為物品在數據庫中的編號 以逗號為分隔
- SHOP_BUY_SPECIAL = {
- 1 => [1,2,3,4],
- 2 => [1],
- 3 => [],
- }
-
- #物品限制的數量 分別對應至SHOP_BUY_SPECIAL中的物品
- #以範例來說
- #表示道具編號為1 2 3 4的四樣道具
- #分別的限制購買數量為10 5 7 3
- #當該道具的購買總量達到SHOP_BUY_SPECIAL_NUM中設定的數量時
- #便不可繼續購買
- #只有賣回給商店才能消除已購買的數量 賣回一個就可再購買一個
- SHOP_BUY_SPECIAL_NUM = {
- 1 => [10,5,7,3],
- 2 => [1],
- 3 => [],
- }
-
- #商店道具是否可自動再生
- #0為不自動再生 1為依據遊戲經過秒數自動再生 2為依據行走步數自動再生
- #範例為2
- SHOP_AUTO_REFRESH = 2
-
- #商店道具回覆的時間
- #當SHOP_AUTO_REFRESH為1時使用 單位為秒
- SHOP_REFRESH_SEC = 10
-
- #商店道具回覆的時間
- #當SHOP_AUTO_REFRESH為2時使用 單位為人物行走步數
- SHOP_REFRESH_STEP = 10
-
- #當SHOP_AUTO_REFRESH設定為1或2時使用
- #數組內的值為數據庫中的道具編號
- #列在數組內的道具將不具有回覆性 可藉此設定可自動再生和不可自動再生的物品
- #以範例而言 便是道具編號2號和武器編號1號這兩樣道具不可再生
- #而2號道具在前面設定為只能購買5個 因此此遊戲的商店便只會販賣5個2號道具
- #當全部買完後 除非賣回給商店 否則商店便不再刷新該道具
- SHOP_NOT_AUTOREFRESH = {
- 1 => [2],
- 2 => [1],
- 3 => [],
- }
- end
- #==============================================================================
- # ■ Scene_Title
- #------------------------------------------------------------------------------
- # 標題菜單。
- #==============================================================================
- class Scene_Title < Scene_Base
-
- #--------------------------------------------------------------------------
- # ● 新遊戲開始時設定
- #--------------------------------------------------------------------------
- def command_new_game
- confirm_player_location
- Sound.play_decision
- $game_party.setup_starting_members
- $game_map.setup($data_system.start_map_id)
- $game_player.moveto($data_system.start_x, $data_system.start_y)
- $game_player.refresh
- $shop_buy_special_item = []
- $shop_buy_special_weapon = []
- $shop_buy_special_armor = []
- $shop_sec = 0
- $shop_step = 0
- $scene = Scene_Map.new
- RPG::BGM.fade(1500)
- close_command_window
- Graphics.fadeout(60)
- Graphics.wait(40)
- Graphics.frame_count = 0
- RPG::BGM.stop
- $game_map.autoplay
- end
- end
- #==============================================================================
- # ■ Scene_File
- #------------------------------------------------------------------------------
- # 存讀檔。
- #==============================================================================
- class Scene_File < Scene_Base
- #--------------------------------------------------------------------------
- # ● 存檔時將變數儲存
- #--------------------------------------------------------------------------
- def write_save_data(file)
- characters = []
- for actor in $game_party.members
- characters.push([actor.character_name, actor.character_index])
- end
- $game_system.save_count += 1
- $game_system.version_id = $data_system.version_id
- @last_bgm = RPG::BGM::last
- @last_bgs = RPG::BGS::last
- Marshal.dump(characters, file)
- Marshal.dump(Graphics.frame_count, file)
- Marshal.dump(@last_bgm, file)
- Marshal.dump(@last_bgs, file)
- Marshal.dump($game_system, file)
- Marshal.dump($game_message, file)
- Marshal.dump($game_switches, file)
- Marshal.dump($game_variables, file)
- Marshal.dump($game_self_switches, file)
- Marshal.dump($game_actors, file)
- Marshal.dump($game_party, file)
- Marshal.dump($game_troop, file)
- Marshal.dump($game_map, file)
- Marshal.dump($game_player, file)
- Marshal.dump($shop_buy_special_item, file)
- Marshal.dump($shop_buy_special_weapon,file)
- Marshal.dump($shop_buy_special_armor, file)
- Marshal.dump($shop_sec, file)
- Marshal.dump($shop_step, file)
- end
- #--------------------------------------------------------------------------
- # ● 讀檔時將變數讀出
- #--------------------------------------------------------------------------
- def read_save_data(file)
- characters = Marshal.load(file)
- Graphics.frame_count = Marshal.load(file)
- @last_bgm = Marshal.load(file)
- @last_bgs = Marshal.load(file)
- $game_system = Marshal.load(file)
- $game_message = Marshal.load(file)
- $game_switches = Marshal.load(file)
- $game_variables = Marshal.load(file)
- $game_self_switches = Marshal.load(file)
- $game_actors = Marshal.load(file)
- $game_party = Marshal.load(file)
- $game_troop = Marshal.load(file)
- $game_map = Marshal.load(file)
- $game_player = Marshal.load(file)
- $shop_buy_special_item = Marshal.load(file)
- $shop_buy_special_weapon = Marshal.load(file)
- $shop_buy_special_armor = Marshal.load(file)
- $shop_sec = Marshal.load(file)
- $shop_step = Marshal.load(file)
- if $game_system.version_id != $data_system.version_id
- $game_map.setup($game_map.map_id)
- $game_player.center($game_player.x, $game_player.y)
- end
- end
- end
- #==============================================================================
- # ■ Window_ShopBuy
- #------------------------------------------------------------------------------
- # 購買窗口。
- #==============================================================================
- class Window_ShopBuy < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化
- # x : X 坐標
- # y : Y 坐標
- #--------------------------------------------------------------------------
- def initialize(x, y)
- super(x, y, 384, 256)
- @shop_goods = $game_temp.shop_goods
- refresh
- self.index = 0
- end
- #--------------------------------------------------------------------------
- # ● 幫助文字更新
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_item(item)
- end
-
- #--------------------------------------------------------------------------
- # ● 顯示商店販售物品
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- number = $game_party.item_number(item)
- enabled = (item.price <= $game_party.gold and number < 99)
- if $game_switches[Miluko::SW_SBS]
- if item.is_a?(RPG::Item)
- for i in 0..Miluko::SHOP_BUY_SPECIAL.size
- if item.id == Miluko::SHOP_BUY_SPECIAL[1][i] && $shop_buy_special_item[i].to_i < Miluko::SHOP_BUY_SPECIAL_NUM[1][i]
- enabled = true
- elsif item.id == Miluko::SHOP_BUY_SPECIAL[1][i] && $shop_buy_special_item[i].to_i >= Miluko::SHOP_BUY_SPECIAL_NUM[1][i]
- enabled = false
- end
- end
- elsif item.is_a?(RPG::Weapon)
- for i in 0..Miluko::SHOP_BUY_SPECIAL.size
- if item.id == Miluko::SHOP_BUY_SPECIAL[2][i] && $shop_buy_special_weapon[i].to_i < Miluko::SHOP_BUY_SPECIAL_NUM[2][i]
- enabled = true
- elsif item.id == Miluko::SHOP_BUY_SPECIAL[2][i] && $shop_buy_special_weapon[i].to_i >= Miluko::SHOP_BUY_SPECIAL_NUM[2][i]
- enabled = false
- end
- end
- elsif item.is_a?(RPG::Item)
- for i in 0..Miluko::SHOP_BUY_SPECIAL.size
- if item.id == Miluko::SHOP_BUY_SPECIAL[3][i] && $shop_buy_special_armor[i].to_i < Miluko::SHOP_BUY_SPECIAL_NUM[3][i]
- enabled = true
- elsif item.id == Miluko::SHOP_BUY_SPECIAL[3][i] && $shop_buy_special_armor[i].to_i >= Miluko::SHOP_BUY_SPECIAL_NUM[3][i]
- enabled = false
- end
- end
- end
- end
- rect = item_rect(index)
- self.contents.clear_rect(rect)
- draw_item_name(item, rect.x, rect.y, enabled)
- rect.width -= 4
- self.contents.draw_text(rect, item.price, 2)
- end
- end
- #==============================================================================
- # ■ Window_ShopSell
- #------------------------------------------------------------------------------
- # 出售窗口。
- #==============================================================================
- class Window_ShopSell < Window_Item
- #--------------------------------------------------------------------------
- # ● 初始化
- # x : X 坐標
- # y : Y 坐標
- # width : 窗口寬度
- # height : 窗口高度
- #--------------------------------------------------------------------------
- def initialize(x, y, width, height)
- super(x, y, width, height)
- @column_max = 1
- end
- #--------------------------------------------------------------------------
- # ● 幫助文字更新
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_item(item)
- end
- end
- #==============================================================================
- # ■ Window_ShopNumber
- #------------------------------------------------------------------------------
- # 買賣輸入個數窗口。
- #==============================================================================
- class Window_ShopNumber < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化
- # x : 窗口 X 坐標
- # y : 窗口 Y 坐標
- #--------------------------------------------------------------------------
- def initialize(x, y)
- super(x, y, 384, 256)
- @item = nil
- @max = 1
- @price = 0
- @number = 1
- end
- end
- #==============================================================================
- # ■ Window_ShopHelp
- #------------------------------------------------------------------------------
- # 商店說明。
- #==============================================================================
- class Window_ShopHelp < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化
- #--------------------------------------------------------------------------
- def initialize
- super(0, 312, 544, 104)
- end
- #--------------------------------------------------------------------------
- # ● 文字設定
- # item : 物品
- #--------------------------------------------------------------------------
- def set_item(item)
- if item.nil?
- self.contents.clear
- self.contents.font.color = normal_color
- self.contents.draw_text(0, 0, 512, 24, $game_temp.shop_word)
- @item = nil
- return
- end
- if item != @item
- @item = item
- self.contents.clear
- self.contents.font.color = normal_color
- self.contents.draw_text(0, 0, 512, 24, @item.description)
- if @item.is_a?(RPG::Item)
- # 物品範圍描述
- scope = "[對象] : "
- case @item.scope
- when 0; scope += "無"
- when 1; scope += "敵單體"
- when 2; scope += "敵全體"
- when 3; scope += "敵單體 連續"
- when 4; scope += "敵單體 隨機"
- when 5; scope += "敵二體 隨機"
- when 6; scope += "敵三體 隨機"
- when 7; scope += "我方單體"
- when 8; scope += "我方全體"
- when 9; scope += "我方單體 (陣亡)"
- when 10; scope += "我方全體 (陣亡)"
- when 11; scope += "使用者"
- end
- self.contents.draw_text(0, 24, 512, 24, scope)
- # 物品範圍描述結束
- # 物品恢復效果描述
- effection = "[效果] : "
- if @item.hp_recovery_rate > 0
- effection += "#{Vocab.hp}+#{@item.hp_recovery_rate}% "
- elsif @item.hp_recovery_rate < 0
- effection += "#{Vocab.hp}-#{@item.hp_recovery_rate}% "
- elsif @item.hp_recovery > 0
- effection += "#{Vocab.hp}+#{@item.hp_recovery} "
- elsif @item.hp_recovery < 0
- effection += "#{Vocab.hp}-#{@item.hp_recovery} "
- end
- if @item.mp_recovery_rate > 0
- effection += "#{Vocab.mp}+#{@item.mp_recovery_rate}% "
- elsif @item.mp_recovery_rate < 0
- effection += "#{Vocab.mp}-#{@item.mp_recovery_rate}% "
- elsif @item.mp_recovery > 0
- effection += "#{Vocab.mp}+#{@item.mp_recovery} "
- elsif @item.mp_recovery < 0
- effection += "#{Vocab.mp}-#{@item.mp_recovery} "
- end
- effection += "傷害#{@item.base_damage} " if @item.base_damage != 0
- case @item.parameter_type
- when 1
- effection += "最大#{Vocab.hp}+#{@item.parameter_points}"
- when 2
- effection += "最大#{Vocab.mp}+#{@item.parameter_points}"
- when 3
- effection += "#{Vocab.atk}+#{@item.parameter_points}"
- when 4
- effection += "#{Vocab.def}+#{@item.parameter_points}"
- when 5
- effection += "#{Vocab.spi}+#{@item.parameter_points}"
- when 6
- effection += "#{Vocab.agi}+#{@item.parameter_points}"
- end
- self.contents.draw_text(0, 48, 512, 24, effection)
- # 物品恢復效果描述結束
- else
- # 武器防具可裝備人員描述
- equip = "[可裝備] : "
- for actor in $game_party.members
- if actor.equippable?(@item)
- equip += "、" if equip != "[可裝備] : "
- equip += actor.name
- end
- end
- equip += "無" if equip == "[可裝備] : "
- self.contents.draw_text(0, 24, 512, 24, equip)
- # 武器防具可裝備人員描述結束
- # 武器防具攻防增減描述
- effection = "[屬性] : "
- if @item.atk != 0
- effection += "攻擊力+#{@item.atk} "
- end
- if @item.def != 0
- effection += "防禦力+#{@item.def} "
- end
- if @item.spi != 0
- effection += "精神力+#{@item.spi} "
- end
- if @item.agi != 0
- effection += "敏捷性+#{@item.agi} "
- end
- # 武器防具攻防增減描述結束
- if @item.is_a?(RPG::Armor)
- # 防具特殊屬性描述
- if @item.prevent_critical
- effection += "防止會心一擊 "
- end
- if @item.half_mp_cost
- effection += "消費MP減半 "
- end
- if @item.double_exp_gain
- effection += "雙倍經驗 "
- end
- if @item.auto_hp_recover
- effection += "自動恢復HP "
- end
- # 防具特殊屬性描述結束
- else
- # 武器特殊屬性描述
- if @item.two_handed
- effection += "雙手持 "
- end
- if @item.fast_attack
- effection += "先發制人 "
- end
- if @item.dual_attack
- effection += "連擊 "
- end
- if @item.critical_bonus
- effection += "頻發會心一擊 "
- end
- # 武器特殊屬性描述結束
- end
- unless @item.element_set.empty?
- # 武器防具屬性描述(左邊那一欄需要打勾的)
- effection += @item.is_a?(RPG::Armor) ? " [防具狀態] : " : " [武器屬性] : "
- for state in @item.element_set
- effection += $data_system.elements[state] + " "
- end
- # 武器防具屬性描述結束
- end
- unless @item.state_set.empty?
- # 武器防具狀態描述(右邊那一欄需要打勾的)
- effection += @item.is_a?(RPG::Armor) ? " [無效化屬性] : " : " [附加狀態] : "
- for state in @item.state_set
- effection += $data_states[state].name + " "
- end
- # 武器防具狀態描述結束
- end
- self.contents.draw_text(0, 48, 512, 24, effection)
- end
- end
- end
- end
- class Game_Temp
- attr_accessor :shop_name
- attr_accessor :shop_word
- attr_accessor :shop_mm
- alias old_ini initialize
- def initialize
- old_ini
- @shop_name = ""
- @shop_word = ""
- @shop_mm = ""
- end
- end
- #==============================================================================
- # ■ Scene_Shop
- #------------------------------------------------------------------------------
- # 商店畫面的處理。
- #==============================================================================
- class Scene_Shop < Scene_Base
- #--------------------------------------------------------------------------
- # ● 開始
- #--------------------------------------------------------------------------
- def start
- super
- create_menu_background
- create_command_window
- @help_window = Window_ShopHelp.new
- @gold_window = Window_Gold.new(384, 56)
- @title_window = Window_Base.new(0, 0, @command_window.x, 56)
- @title_window.contents.draw_text(0, 0, @title_window.width - 32, 24, $game_temp.shop_name)
- @buy_window = Window_ShopBuy.new(0, 56)
- @buy_window.active = false
- @buy_window.visible = false
- @buy_window.help_window = @help_window
- @sell_window = Window_ShopSell.new(0, 56, 384, 256)
- @sell_window.active = false
- @sell_window.visible = false
- @sell_window.help_window = @help_window
- @number_window = Window_ShopNumber.new(0, 56)
- @number_window.active = false
- @number_window.visible = false
- @loli_sprite = Sprite.new
- @loli_sprite.x = 384
- @loli_sprite.y = 112
- @loli_sprite.bitmap = Cache.picture($game_temp.shop_mm)
- @help_window.set_item(nil)
- if Miluko::SHOP_AUTO_REFRESH == 1
- @total_sec = Graphics.frame_count / Graphics.frame_rate
- if $shop_sec != 0 && @total_sec - $shop_sec > Miluko::SHOP_REFRESH_SEC
- for i in 1..Miluko::SHOP_BUY_SPECIAL.size
- for j in 0..Miluko::SHOP_BUY_SPECIAL[i].size
- if i == 1 && $shop_buy_special_item[j].to_i > 0 && !Miluko::SHOP_NOT_AUTOREFRESH[1].include?(@item.id)
- $shop_buy_special_item[j] -= (@total_sec - $shop_sec)/Miluko::SHOP_REFRESH_SEC
- $shop_buy_special_item[j] = 0 if $shop_buy_special_item[j] < 0
- elsif i == 2 && $shop_buy_special_weapon[j].to_i > 0 && !Miluko::SHOP_NOT_AUTOREFRESH[2].include?(@item.id)
- $shop_buy_special_weapon[j] -= (@total_sec - $shop_sec)/Miluko::SHOP_REFRESH_SEC
- $shop_buy_special_item[j] = 0 if $shop_buy_special_item[j] < 0
- elsif i == 3 && $shop_buy_special_armor[j].to_i > 0 && !Miluko::SHOP_NOT_AUTOREFRESH[3].include?(@item.id)
- $shop_buy_special_armor[j] -= (@total_sec - $shop_sec)/Miluko::SHOP_REFRESH_SEC
- $shop_buy_special_item[j] = 0 if $shop_buy_special_item[j] < 0
- end
- end
- end
- end
- elsif Miluko::SHOP_AUTO_REFRESH == 2
- @total_step = $game_party.steps
- if $shop_step != 0 && @total_step - $shop_step > Miluko::SHOP_REFRESH_STEP
- for i in 1..Miluko::SHOP_BUY_SPECIAL.size
- for j in 0..Miluko::SHOP_BUY_SPECIAL[i].size
- if i == 1 && $shop_buy_special_item[j].to_i > 0 && !Miluko::SHOP_NOT_AUTOREFRESH[1].include?(Miluko::SHOP_BUY_SPECIAL[i][j])
- $shop_buy_special_item[j] -= (@total_step - $shop_step)/Miluko::SHOP_REFRESH_STEP
- $shop_buy_special_item[j] = 0 if $shop_buy_special_item[j] < 0
- elsif i == 2 && $shop_buy_special_weapon[j].to_i > 0 && !Miluko::SHOP_NOT_AUTOREFRESH[2].include?(Miluko::SHOP_BUY_SPECIAL[i][j])
- $shop_buy_special_weapon[j] -= (@total_step - $shop_step)/Miluko::SHOP_REFRESH_STEP
- $shop_buy_special_item[j] = 0 if $shop_buy_special_item[j] < 0
- elsif i == 3 && $shop_buy_special_armor[j].to_i > 0 && !Miluko::SHOP_NOT_AUTOREFRESH[3].include?(Miluko::SHOP_BUY_SPECIAL[i][j])
- $shop_buy_special_armor[j] -= (@total_step - $shop_step)/Miluko::SHOP_REFRESH_STEP
- $shop_buy_special_item[j] = 0 if $shop_buy_special_item[j] < 0
- end
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 結束處理
- #--------------------------------------------------------------------------
- def terminate
- super
- dispose_menu_background
- dispose_command_window
- @help_window.dispose
- @gold_window.dispose
- @title_window.dispose
- @buy_window.dispose
- @sell_window.dispose
- @number_window.dispose
- @loli_sprite.bitmap.dispose
- @loli_sprite.dispose
- $shop_sec = @total_sec if Miluko::SHOP_AUTO_REFRESH == 1 && @total_sec - $shop_sec > Miluko::SHOP_REFRESH_SEC
- $shop_step = @total_step if Miluko::SHOP_AUTO_REFRESH == 2 && @total_step - $shop_step > Miluko::SHOP_REFRESH_STEP
- end
- #--------------------------------------------------------------------------
- # ● 畫面更新
- #--------------------------------------------------------------------------
- def update
- super
- update_menu_background
- @help_window.update
- @command_window.update
- @gold_window.update
- @buy_window.update
- @sell_window.update
- @number_window.update
- if @command_window.active
- update_command_selection
- elsif @buy_window.active
- update_buy_selection
- elsif @sell_window.active
- update_sell_selection
- elsif @number_window.active
- update_number_input
- end
- end
- #--------------------------------------------------------------------------
- # ● 創建命令窗口
- #--------------------------------------------------------------------------
- def create_command_window
- s1 = Vocab::ShopBuy
- s2 = Vocab::ShopSell
- s3 = Vocab::ShopCancel
- @command_window = Window_Command.new(384, [s1, s2, s3], 3)
- @command_window.x = Graphics.width - @command_window.width
- if $game_temp.shop_purchase_only
- @command_window.draw_item(1, false)
- end
- end
- #--------------------------------------------------------------------------
- # ● 命令窗口釋放
- #--------------------------------------------------------------------------
- def dispose_command_window
- @command_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 命令列選擇的更新
- #--------------------------------------------------------------------------
- def update_command_selection
- if Input.trigger?(Input::B)
- Sound.play_cancel
- $scene = Scene_Map.new
- $game_switches[Miluko::SW_SBS] = false if $game_switches[Miluko::SW_SBS]
- elsif Input.trigger?(Input::C)
- case @command_window.index
- when 0 # 購入する
- Sound.play_decision
- @command_window.active = false
- @buy_window.active = true
- @buy_window.visible = true
- @buy_window.refresh
- @buy_window.update_help
- when 1 # 売卻する
- if $game_temp.shop_purchase_only
- Sound.play_buzzer
- else
- Sound.play_decision
- @command_window.active = false
- @sell_window.active = true
- @sell_window.visible = true
- @sell_window.refresh
- @sell_window.update_help
- end
- when 2 # やめる
- Sound.play_decision
- $scene = Scene_Map.new
- $game_switches[Miluko::SW_SBS] = false if $game_switches[Miluko::SW_SBS]
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 購入物品選擇的更新
- #--------------------------------------------------------------------------
- def update_buy_selection
- if Input.trigger?(Input::B)
- Sound.play_cancel
- @command_window.active = true
- @buy_window.active = false
- @buy_window.visible = false
- @help_window.set_item(nil)
- return
- end
- if Input.trigger?(Input::C)
- @item = @buy_window.item
- number = $game_party.item_number(@item)
- if @item == nil or @item.price > $game_party.gold or number == 99
- Sound.play_buzzer
- elsif $game_switches[Miluko::SW_SBS]
- if @item.is_a?(RPG::Item)
- if Miluko::SHOP_BUY_SPECIAL[1].include?(@item.id)
- for i in 0..Miluko::SHOP_BUY_SPECIAL[1].size
- if @item.id == Miluko::SHOP_BUY_SPECIAL[1][i] && $shop_buy_special_item[i].to_i < Miluko::SHOP_BUY_SPECIAL_NUM[1][i]
- max = @item.price == 0 ? Miluko::SHOP_BUY_SPECIAL_NUM[1][i] : $game_party.gold / @item.price
- max = [max, Miluko::SHOP_BUY_SPECIAL_NUM[1][i] - $shop_buy_special_item[i].to_i].min
- Sound.play_decision
- @buy_window.active = false
- @buy_window.visible = false
- @number_window.set(@item, max, @item.price)
- @number_window.active = true
- @number_window.visible = true
- elsif @item.id == Miluko::SHOP_BUY_SPECIAL[1][i] && $shop_buy_special_item[i].to_i >= Miluko::SHOP_BUY_SPECIAL_NUM[1][i]
- Sound.play_buzzer
- end
- end
- else
- max = @item.price == 0 ? 99 : $game_party.gold / @item.price
- max = [max, 99 - number].min
- Sound.play_decision
- @buy_window.active = false
- @buy_window.visible = false
- @number_window.set(@item, max, @item.price)
- @number_window.active = true
- @number_window.visible = true
- end
- elsif @item.is_a?(RPG::Weapon)
- if Miluko::SHOP_BUY_SPECIAL[2].include?(@item.id)
- for i in 0..Miluko::SHOP_BUY_SPECIAL[2].size
- if @item.id == Miluko::SHOP_BUY_SPECIAL[2][i] && $shop_buy_special_weapon[i].to_i < Miluko::SHOP_BUY_SPECIAL_NUM[2][i]
- max = @item.price == 0 ? Miluko::SHOP_BUY_SPECIAL_NUM[2][i] : $game_party.gold / @item.price
- max = [max, Miluko::SHOP_BUY_SPECIAL_NUM[2][i] - $shop_buy_special_weapon[i].to_i].min
- Sound.play_decision
- @buy_window.active = false
- @buy_window.visible = false
- @number_window.set(@item, max, @item.price)
- @number_window.active = true
- @number_window.visible = true
- elsif @item.id == Miluko::SHOP_BUY_SPECIAL[2][i] && $shop_buy_special_weapon[i].to_i >= Miluko::SHOP_BUY_SPECIAL_NUM[2][i]
- Sound.play_buzzer
- end
- end
- else
- max = @item.price == 0 ? 99 : $game_party.gold / @item.price
- max = [max, 99 - number].min
- Sound.play_decision
- @buy_window.active = false
- @buy_window.visible = false
- @number_window.set(@item, max, @item.price)
- @number_window.active = true
- @number_window.visible = true
- end
- elsif @item.is_a?(RPG::Armor)
- if Miluko::SHOP_BUY_SPECIAL[3].include?(@item.id)
- for i in 0..Miluko::SHOP_BUY_SPECIAL[3].size
- if @item.id == Miluko::SHOP_BUY_SPECIAL[3][i] && $shop_buy_special_armor[i].to_i < Miluko::SHOP_BUY_SPECIAL_NUM[3][i]
- max = @item.price == 0 ? Miluko::SHOP_BUY_SPECIAL_NUM[3][i] : $game_party.gold / @item.price
- max = [max, Miluko::SHOP_BUY_SPECIAL_NUM[3][i] - $shop_buy_special_armor[i].to_i].min
- Sound.play_decision
- @buy_window.active = false
- @buy_window.visible = false
- @number_window.set(@item, max, @item.price)
- @number_window.active = true
- @number_window.visible = true
- elsif @item.id == Miluko::SHOP_BUY_SPECIAL[3][i] && $shop_buy_special_armor[i].to_i >= Miluko::SHOP_BUY_SPECIAL_NUM[3][i]
- Sound.play_buzzer
- end
- end
- else
- max = @item.price == 0 ? 99 : $game_party.gold / @item.price
- max = [max, 99 - number].min
- Sound.play_decision
- @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
- else
- max = @item.price == 0 ? 99 : $game_party.gold / @item.price
- max = [max, 99 - number].min
- Sound.play_decision
- @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
- end
- #--------------------------------------------------------------------------
- # ● 售出物品選擇的更新
- #--------------------------------------------------------------------------
- def update_sell_selection
- if Input.trigger?(Input::B)
- Sound.play_cancel
- @command_window.active = true
- @sell_window.active = false
- @sell_window.visible = false
- @help_window.set_item(nil)
- elsif Input.trigger?(Input::C)
- @item = @sell_window.item
- if @item == nil or @item.price == 0
- Sound.play_buzzer
- else
- Sound.play_decision
- max = $game_party.item_number(@item)
- @sell_window.active = false
- @sell_window.visible = false
- @number_window.set(@item, max, @item.price / 2)
- @number_window.active = true
- @number_window.visible = true
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 買賣個數輸入更新
- #--------------------------------------------------------------------------
- def update_number_input
- if Input.trigger?(Input::B)
- cancel_number_input
- elsif Input.trigger?(Input::C)
- decide_number_input
- end
- end
- #--------------------------------------------------------------------------
- # ● 買賣個數輸入的取消
- #--------------------------------------------------------------------------
- def cancel_number_input
- Sound.play_cancel
- @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
- end
- end
- #--------------------------------------------------------------------------
- # ● 買賣個數輸入的決定
- #--------------------------------------------------------------------------
- def decide_number_input
- Sound.play_shop
- @number_window.active = false
- @number_window.visible = false
- case @command_window.index
- when 0 # 購入する
- if $game_switches[Miluko::SW_SBS]
- if @item.is_a?(RPG::Item)
- for i in 0..Miluko::SHOP_BUY_SPECIAL[1].size
- if @item.id == Miluko::SHOP_BUY_SPECIAL[1][i]
- $shop_buy_special_item[i] = $shop_buy_special_item[i].to_i + @number_window.number
- end
- end
- elsif @item.is_a?(RPG::Weapon)
- for i in 0..Miluko::SHOP_BUY_SPECIAL[2].size
- if @item.id == Miluko::SHOP_BUY_SPECIAL[2][i]
- $shop_buy_special_weapon[i] = $shop_buy_special_weapon[i].to_i + @number_window.number
- end
- end
- elsif @item.is_a?(RPG::Armor)
- for i in 0..Miluko::SHOP_BUY_SPECIAL[3].size
- if @item.id == Miluko::SHOP_BUY_SPECIAL[3][i]
- $shop_buy_special_armor[i] = $shop_buy_special_armor[i].to_i + @number_window.number
- end
- end
- end
- end
- $game_party.lose_gold(@number_window.number * @item.price)
- $game_party.gain_item(@item, @number_window.number)
- @gold_window.refresh
- @buy_window.refresh
- @buy_window.active = true
- @buy_window.visible = true
- when 1 # 売卻する
- if $game_switches[Miluko::SW_SBS]
- if @item.is_a?(RPG::Item)
- for i in 0..Miluko::SHOP_BUY_SPECIAL[1].size
- if @item.id == Miluko::SHOP_BUY_SPECIAL[1][i]
- $shop_buy_special_item[i] -= @number_window.number
- end
- end
- elsif @item.is_a?(RPG::Weapon)
- for i in 0..Miluko::SHOP_BUY_SPECIAL[2].size
- if @item.id == Miluko::SHOP_BUY_SPECIAL[2][i]
- $shop_buy_special_weapon[i] -= @number_window.number
- end
- end
- elsif @item.is_a?(RPG::Armor)
- for i in 0..Miluko::SHOP_BUY_SPECIAL[3].size
- if @item.id == Miluko::SHOP_BUY_SPECIAL[3][i]
- $shop_buy_special_armor[i] -= @number_window.number
- end
- end
- end
- end
- $game_party.gain_gold(@number_window.number * (@item.price / 2))
- $game_party.lose_item(@item, @number_window.number)
- @gold_window.refresh
- @sell_window.refresh
- @sell_window.active = true
- @sell_window.visible = true
- end
- end
- end
复制代码 MS很長的腳本 其實大多數是前輩的腳本
我只是基於其基礎加強罷了-
- 設定方法大多寫在腳本開頭了
- SW_SBS可設定開關 只在要開啟限量販售商店再打開即可
-
- 限量道具的列表在這裡定義 1為道具 2為武器 3為防具
- 因為數據庫分開 所以不得不分開定義
- 若要1 3 5 6 四樣道具和11號武器以及3 4兩個防具為限量販售
- 便如下設定 兩兩之間需以逗號隔開
- SHOP_BUY_SPECIAL = {
- 1 => [1,3,5,6],
- 2 => [11],
- 3 => [3,4],
- }
-
- 限量自然需要設定限制的數量
- 注意 此設定需將SHOP_BUY_SPECIAL互相對照
- SHOP_BUY_SPECIAL中定義幾樣道具 此設定便需定義幾個
- 依照上面的定義設定
- SHOP_BUY_SPECIAL_NUM = {
- 1 => [10,5,7,3], #1號道具只賣10個 3號道具賣5個 依此類推
- 2 => [1], #11號武器只賣1個
- 3 => [4,1], #3號防具只賣4個 4號防具只賣1個
- }
-
- 商店道具可設定是否要自動再生
- 例如藥水一次只能買10罐 買完需過一段時間才能再買
- 再生為全道具再生 只要是被設定為限量且未獨立設定成不可再生的道具便會再生
- 再生時最多只會再生至SHOP_BUY_SPECIAL_NUM設定的數量 也就是1號道具每次最多只能買10個
- 有三種模式 分別對應 0 1 2
- 0為不再生 1為依據時間經過再生 2為依據人物移動步數再生
- SHOP_AUTO_REFRESH = 2
-
- 當SHOP_AUTO_REFRESH為1時使用 單位為秒
- 以下設定便是每10秒會刷新1個道具
- 也就是經過50秒再去買便會刷新5個
- SHOP_REFRESH_SEC = 10
-
- 當SHOP_AUTO_REFRESH為2時使用 單位為人物行走步數
- 以下設定是每十步會刷新1次道具
- 走30步後再去買就是刷新3個
- SHOP_REFRESH_STEP = 10
-
- 當SHOP_AUTO_REFRESH設定為1或2時使用
- 列在數組內的道具將不具有回覆性 可藉此設定可自動再生和不可自動再生的物品
- 以範例而言 便是道具編號3號和武器編號11號這兩樣道具不可再生
- 而3號道具在前面設定為只能購買5個 因此此遊戲的商店便只會販賣5個3號道具
- 全部買完後 除非賣回給商店 否則商店便不再刷新該道具
- SHOP_NOT_AUTOREFRESH = {
- 1 => [3],
- 2 => [11],
- 3 => [],
- }
复制代码 大概是如此
目前測試結果是無錯(應該吧)
如果有啥錯誤麻煩回報一下
我會儘量修正的
新功能我也想不到啥了
所以這腳本應該就這樣吧
祝大家遊戲製作愉快!
發現做了蠢事 忘了發工程了~(汗)
Project2.rar
(336.64 KB, 下载次数: 1003)
|
评分
-
查看全部评分
|