赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 21598 |
最后登录 | 2017-9-25 |
在线时间 | 448 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 448 小时
- 注册时间
- 2011-10-9
- 帖子
- 184
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 冷徹心扉 于 2013-1-28 17:50 编辑
这脚本相当优异,使用上也没有问题
但有几个地方希望能够请版上的高手们协助优化
1.战斗后获得的相同战利品能够合并计算
(如从两只史莱姆身上各掉1罐空瓶,会分两次弹窗显示为 空瓶x1、空瓶x1,希望能改为空瓶x2 藉此省去玩家的等待时间)
2.此外,有无可能在弹窗的同时,玩家依然能够移动?类似于并行处理那样
(预设是类似自动执行那样,弹窗的时候游戏为静止状态)
感激不尽- #==============================================================================
- # Chest Item Pop-Up
- #==============================================================================
- # Author : OriginalWij
- # Version : 3.1
- #==============================================================================
- # To use:
- #
- # Normal Mode : turn on the switch (designated below) BEFORE
- # each gold/item addition
- # Automatic Mode : turn on the switch (designated below) if you DON'T want
- # popups and then turn the switch off when done
- #
- # To call manually:
- #
- # (useful if using a break-limits script and popping-up 100+ of one item)
- #
- # $scene = Chest_Popup.new(type, amount, index, add = false, x = pX, y = pY)
- # type : 0 :gold, 1 :items, 2 :weapons, 3 :armor
- # amount : number of items "gaining"
- # index : item ID
- # add : adds item(s) shown into inventory if true (default = false)
- # x : custom X coordinate to pop-up at (default = player X)
- # y : custom Y coordinate to pop-up at (default = player Y)
- #==============================================================================
- #==============================================================================
- # NOTE: when adding multiple (different) items in an event, insert a WAIT(1)
- # between them (insert the WAIT(1) even if in AUTOMATIC mode)
- #==============================================================================
- # NOTE: the switch turns itself off after each "add item/gold" event command
- # UNLESS in automatic mode (you MUST turn it off MANUALLY in auto-mode)
- #==============================================================================
- # NOTE: insert a WAIT(7) between a text message and adding items in events
- # (allows time for the message window to close)
- #==============================================================================
- #自動彈跳視窗
- AUTO_POPUP = true
- #彈跳窗口開關
- POPUP_SWITCH = 11
- # 金錢的圖示icon編號 205
- GOLD_ICON = 204
- # 同樣道具只出現一次彈跳視窗
- ONLY_SHOW_ONE = true
- # 戰鬥後戰利品的跳出視窗
- BATTLE_POP = true
- BATTLE_REWARD = ''#掉落道具
-
- # 彈出窗口時播放音效?
- PLAY_P_SND = true
- #######################################################
- # 3 options below are valid ONLY if PLAY_P_SND = true #
- #######################################################
- # Sound to play upon popup
- #~ P_SND = 'Audio/SE/Chime2'
- P_SND = 'Audio/SE/新取得'
- P_SND_V = 75 #100 音量
- P_SND_P = 100 #150 音調高低
-
- # 播放關閉視窗的音效?
- PLAY_C_SND = true
- #######################################################
- # 3 options below are valid ONLY if PLAY_C_SND = true #
- #######################################################
- # Sound to play upon popup close
- C_SND = 'Audio/SE/Cancel'
- C_SND_V = 80
- C_SND_P = 100
-
- # Show popup text?
- SHOW_POPUP_TEXT = true
- ##############################################################
- # ALL options below are valid ONLY if SHOW_POPUP_TEXT = true #
- ##############################################################
- # Show icon with popup text?
- SHOW_POPUP_TEXT_ICON = true #顯示彈窗圖示
- # Show "gold window" (total gold) when popping-up gold?
- SHOW_GOLD_WINDOW = true #顯示總計金錢視窗
- # Auto adjust window if over player
- TEXT_WINDOW_MOVE = true #自動調整窗口
- # Popup text window Y coordinate
- TEXT_WINDOW_Y = 195 #彈出視窗的縱標180
- # Popup text window X coordinate offset
- # 0 (Zero) : 視窗中央
- # negative integer : 置左offset left (centered)
- # positive integer : 置右offset right (centered)
- TEXT_WINDOW_X_OFFSET = 0
- # Wait for button to close? (false = wait for time)
- # ------------------------------------------------------------------------------------------------------------------------------------------
- WAIT_FOR_BUTTON = false #等待確認按下
- # Buttons to wait for
- # (if WAIT_FOR_BUTTON = true)
- # (Set both to the same button to check for only one)
- BUTTON_TO_WAIT_FOR1 = Input::C
- BUTTON_TO_WAIT_FOR2 = Input::B
- # Frames to wait
- # (if WAIT_FOR_BUTTON = false)
- WAIT_FOR_TIME = 25 #要等多久
- # ------------------------------------------------------------------------------------------------------------------------------------------
-
- #==============================================================================
- # Game_System
- #==============================================================================
- class Game_System
- #--------------------------------------------------------------------------
- # Public Instance Variables (Added)
- #--------------------------------------------------------------------------
- attr_accessor :battle_pop # holds items to popup after battle
- attr_accessor :battle_pop_gold #
- #--------------------------------------------------------------------------
- # Initialize (Mod)
- #--------------------------------------------------------------------------
- alias chest_pop_gs_initialize initialize unless $@
- def initialize
- chest_pop_gs_initialize
- @battle_pop = nil
- @battle_pop_gold = 0
- end
- end
- #==============================================================================
- # Game_Interpreter
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # Change Gold (Mod)
- #--------------------------------------------------------------------------
- alias chest_pop_command_125 command_125 unless $@
- def command_125
- value = operate_value(@params[0], @params[1], @params[2])
- # Pop-up
- if $game_switches[POPUP_SWITCH] != AUTO_POPUP and @params[0] == 0
- $scene = Chest_Popup.new(0, value, 1)
- end
- chest_pop_command_125
- end
- #--------------------------------------------------------------------------
- # Change Items (Mod)
- #--------------------------------------------------------------------------
- alias chest_pop_command_126 command_126 unless $@
- def command_126
- value = operate_value(@params[1], @params[2], @params[3])
- # Pop-up
- if $game_switches[POPUP_SWITCH] != AUTO_POPUP and @params[1] == 0
- $scene = Chest_Popup.new(1, value, @params[0])
- end
- chest_pop_command_126
- end
- #--------------------------------------------------------------------------
- # Change Weapons (Mod)
- #--------------------------------------------------------------------------
- alias chest_pop_command_127 command_127 unless $@
- def command_127
- value = operate_value(@params[1], @params[2], @params[3])
- # Pop-up
- if $game_switches[POPUP_SWITCH] != AUTO_POPUP and @params[1] == 0
- $scene = Chest_Popup.new(2, value, @params[0])
- end
- chest_pop_command_127
- end
- #--------------------------------------------------------------------------
- # Change Armor (Mod)
- #--------------------------------------------------------------------------
- alias chest_pop_command_128 command_128 unless $@
- def command_128
- value = operate_value(@params[1], @params[2], @params[3])
- # Pop-up
- if $game_switches[POPUP_SWITCH] != AUTO_POPUP and @params[1] == 0
- $scene = Chest_Popup.new(3, value, @params[0])
- end
- chest_pop_command_128
- end
- end
- #==============================================================================
- # Item Popup Window (New)
- #==============================================================================
- class Item_Popup_Window < Window_Base
- #--------------------------------------------------------------------------
- # Initialize
- #--------------------------------------------------------------------------
- def initialize(x, y)
- super(0, 0, Graphics.width, Graphics.height) # res
- self.opacity = 0
- # Adjust X/Y to proper origin
- @x, @y = x - 27, y - 60
- end
- #--------------------------------------------------------------------------
- # Pop-Up
- #--------------------------------------------------------------------------
- def pop_up(icon_index, x_offset, y_offset)
- self.contents.clear
- # Draw pop-up icon
- draw_icon(icon_index, @x + x_offset, @y + y_offset, true)
- end
- end
- #==============================================================================
- # Name window (New)
- #==============================================================================
- class Name_Window < Window_Base
- #--------------------------------------------------------------------------
- # Initialize
- #--------------------------------------------------------------------------
- def initialize(x, y, desc, no_desc, index, gold = false, icon = 0)
- super(x, y, 56, WLH + 32-2)
- # Adjust window to content's size and center
- icon_x = self.contents.text_size(index).width + 6-4 #
- width = self.contents.text_size(desc).width
- self.width = width + 30#32
- self.x = ((Graphics.width - self.width) / 2) + TEXT_WINDOW_X_OFFSET # res
- create_contents
- # Draw pop-up text
- ix = no_desc ? 0 : icon_x
- item_check = $game_system.battle_pop
- gold_check = $game_system.battle_pop_gold
- if BATTLE_POP and (item_check != nil or gold_check > 0) # If battle reward
- ix += self.contents.text_size(BATTLE_REWARD).width + 2
- end
- tx = gold ? 4 : 0
- draw_icon(icon, ix-1, 0-1) if SHOW_POPUP_TEXT_ICON and !gold #
- self.contents.draw_text(tx-6, 0-1, width, WLH, desc, 0) #
- draw_icon(GOLD_ICON, width - 24, 0, true) if gold
- end
- end
- #==============================================================================
- # Scene_Base
- #==============================================================================
- class Scene_Base
- #--------------------------------------------------------------------------
- # Initialize (New)
- #--------------------------------------------------------------------------
- def initialize
- @disable_blur = false
- end
- #--------------------------------------------------------------------------
- # Disable blur (New)
- #--------------------------------------------------------------------------
- def disable_blur=(enabled)
- @disable_blur = enabled
- end
- #--------------------------------------------------------------------------
- # Create Snapshot for Using as Background of Another Screen (Rewrite)
- #--------------------------------------------------------------------------
- def snapshot_for_background
- $game_temp.background_bitmap.dispose
- $game_temp.background_bitmap = Graphics.snap_to_bitmap
- # Don't blur if disabled
- $game_temp.background_bitmap.blur unless @disable_blur # changed
- end
- end
- #==============================================================================
- # Scene_Map
- #==============================================================================
- class Scene_Map < Scene_Base
- #--------------------------------------------------------------------------
- # Start (Mod)
- #--------------------------------------------------------------------------
- alias chest_pop_start start unless $@
- def start
- chest_pop_start
- # Popup battle rewards
- if BATTLE_POP
- if $game_system.battle_pop_gold > 0 # gold
- gold = $game_system.battle_pop_gold
- $game_system.battle_pop_gold = 0
- $scene = Chest_Popup.new(0, gold, 0, true)
- elsif $game_system.battle_pop != nil # items
- item = $game_system.battle_pop.shift
- if item == nil
- $game_system.battle_pop = nil
- else
- type = 1 if item.is_a?(RPG::Item)
- type = 2 if item.is_a?(RPG::Weapon)
- type = 3 if item.is_a?(RPG::Armor)
- $scene = Chest_Popup.new(type, 1, item.id, true)
- end
- end
- end
- end
- end
- #==============================================================================
- # Scene_Battle
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # Display Gained Experience and Gold (Rewrite)
- #--------------------------------------------------------------------------
- def display_exp_and_gold
- # Save gold to popup after battle
- $game_system.battle_pop_gold = $game_troop.gold_total if BATTLE_POP # added
- exp = $game_troop.exp_total
- gold = BATTLE_POP ? 0 : $game_troop.gold_total # changed
- $game_party.gain_gold(gold) unless BATTLE_POP # changed
- text = sprintf(Vocab::Victory, $game_party.name)
- $game_message.texts.push('\|' + text)
- if exp > 0
- text = sprintf(Vocab::ObtainExp, exp)
- $game_message.texts.push('\.' + text)
- end
- if gold > 0
- text = sprintf(Vocab::ObtainGold, gold, Vocab::gold)
- $game_message.texts.push('\.' + text)
- end
- wait_for_message
- end
- #--------------------------------------------------------------------------
- # Display Gained Drop Items (Mod)
- #--------------------------------------------------------------------------
- alias chest_pop_display_drop_items display_drop_items unless $@
- def display_drop_items
- # Save items to popup after battle
- $game_system.battle_pop = $game_troop.make_drop_items if BATTLE_POP
- return if BATTLE_POP
- chest_pop_display_drop_items
- end
- end
- #==============================================================================
- # Chest_Popup (New)
- #==============================================================================
- class Chest_Popup < Scene_Base
- #--------------------------------------------------------------------------
- # Initialize
- #--------------------------------------------------------------------------
- def initialize(type, amount, index, add = false, x = nil, y = nil)
- x = $game_player.screen_x if x == nil
- y = $game_player.screen_y if y == nil
- $game_switches[POPUP_SWITCH] = !AUTO_POPUP
- $scene.disable_blur = true
- @x, @y, @amount = x, y, amount
- [url=home.php?mod=space&uid=236945]@gold[/url] = @no_desc = false#
- case type
- when 0 # 金錢old
- $game_party.gain_gold(amount) if add
- @icon = GOLD_ICON
- @desc_amount = ''
- @desc = @amount.to_s #+ '' #
- @amount = 1
- [url=home.php?mod=space&uid=236945]@gold[/url] = false #
-
- when 1 # 道具
- $game_party.gain_item($data_items[index], amount) if add
- @icon = $data_items[index].icon_index
- #
- #~ @desc_amount = '取得' + @amount.to_s + '個' #
- @desc_amount = '' #
- @desc_amount = '' if @amount == 1
- @no_desc = true if @amount == 1
- #取得道具名稱欄位
- @desc = $data_items[index].name + ' x ' + @amount.to_s + '' #
- @amount = 1 if ONLY_SHOW_ONE
-
- when 2 # 武器
- $game_party.gain_item($data_weapons[index], amount) if add
- @icon = $data_weapons[index].icon_index
- @desc_amount = ''
- @desc_amount = '' if @amount == 1
- @no_desc = true if @amount == 1
- @desc = $data_weapons[index].name + ' x ' + @amount.to_s + ''
- @amount = 1 if ONLY_SHOW_ONE
-
- when 3 # 護具
- $game_party.gain_item($data_armors[index], amount) if add
- @icon = $data_armors[index].icon_index
- @desc_amount = ''
- @desc_amount = '' if @amount == 1
- @no_desc = true if @amount == 1
- @desc = $data_armors[index].name + ' x ' + @amount.to_s + ''
- @amount = 1 if ONLY_SHOW_ONE
- end
- # Set index
- @index = @desc_amount
- # 添加描述文本
- if @gold
- @desc = @desc + ''#金幣和名稱的距離
- else
- if SHOW_POPUP_TEXT_ICON
- @desc = @desc_amount + ' ' + @desc #
- else
- @desc = @desc_amount + '' + @desc if @desc_amount != ''
- end
- end
- # If 戰鬥獎勵
- item_check = $game_system.battle_pop
- gold_check = $game_system.battle_pop_gold
- if BATTLE_POP and (item_check != nil or gold_check > 0)
- @desc = BATTLE_REWARD + @desc
- end
-
- end
- #--------------------------------------------------------------------------
- # Start
- #--------------------------------------------------------------------------
- def start
- create_background
- # Create pop-up window
- @popup_window = Item_Popup_Window.new(@x, @y)
- end
- #--------------------------------------------------------------------------
- # Terminate
- #--------------------------------------------------------------------------
- def terminate
- # Dispose windows
- @popup_window.dispose
- @menuback_sprite.dispose
- @name_window.dispose if SHOW_POPUP_TEXT
- end
- #--------------------------------------------------------------------------
- # Return Scene
- #--------------------------------------------------------------------------
- def return_scene
- # Turn off blur and pop-up switch
- $scene.disable_blur = false
- $game_switches[POPUP_SWITCH] = false
- $scene = Scene_Map.new
- end
- #--------------------------------------------------------------------------
- # Update
- #--------------------------------------------------------------------------
- def update
- super
- # Update pop-up window
- @popup_window.update
- @menuback_sprite.update
- # Do the actual popping-up
- do_popup
- end
- #--------------------------------------------------------------------------
- # Update Basic
- #--------------------------------------------------------------------------
- def update_basic
- Graphics.update
- Input.update
- end
- #--------------------------------------------------------------------------
- # Wait
- #--------------------------------------------------------------------------
- def wait(duration)
- # Wait for DURATION frames
- for i in 0..duration
- update_basic
- end
- end
- #--------------------------------------------------------------------------
- # Wait for close
- #--------------------------------------------------------------------------
- def wait_for_close
- count = 0
- loop do
- update_basic
- count += 1
- # Close if button 1 pressed
- break if Input.trigger?(BUTTON_TO_WAIT_FOR1) and WAIT_FOR_BUTTON
- # Close if button 2 pressed
- break if Input.trigger?(BUTTON_TO_WAIT_FOR2) and WAIT_FOR_BUTTON
- # Close if time elapsed
- break if count >= WAIT_FOR_TIME and !WAIT_FOR_BUTTON
- end
- end
- #--------------------------------------------------------------------------
- # Create Background
- #--------------------------------------------------------------------------
- def create_background
- # Create modified background
- @menuback_sprite = Sprite.new
- @menuback_sprite.bitmap = $game_temp.background_bitmap
- @menuback_sprite.update
- end
- #--------------------------------------------------------------------------
- # Show Name
- #--------------------------------------------------------------------------
- def show_name
- x = Graphics.width / 2 # res
- y = TEXT_WINDOW_Y
- py = $game_player.screen_y - 32
- cy = (py - y).abs
- # Offset Y if text box is above player's position
- if cy < 128 and TEXT_WINDOW_MOVE
- y = py < y ? y + (y / 2) : y - (y / 2)
- end
- # Create Window (and gold window)
- @name_window = Name_Window.new(x, y, @desc, @no_desc, @index, @gold, @icon)
- if SHOW_GOLD_WINDOW and @gold
- @gold_window = Window_Gold.new(Graphics.width - 160, 0)
- end
- # Wait for button(s) or time
- wait_for_close
- # Close gold window
- @gold_window.dispose if SHOW_GOLD_WINDOW and @gold
- # Play sound
- Audio.se_play(C_SND, C_SND_V, C_SND_P) if WAIT_FOR_BUTTON and PLAY_C_SND
- end
- #--------------------------------------------------------------------------
- # Do Pop-Up
- #--------------------------------------------------------------------------
- def do_popup
- # Pop-up icon(s)
- for i in 1..@amount
- Audio.se_play(P_SND, P_SND_V, P_SND_P) if PLAY_P_SND
- for i in 0..4
- @popup_window.pop_up(@icon, 0, i * -4) #
- @popup_window.update
- wait(0)
- end
- wait(0) if i != @amount and !ONLY_SHOW_ONE
- end
- wait(0)
- # Pop-up text
- show_name if SHOW_POPUP_TEXT
- # Exit
- return_scene
- end
- end
复制代码 |
|