+ TBWCS 951 Posted August 31, 2014 (edited) Basic Scene Mail 1.0 Author: Soulpour777 August 31, 2014 Web URL: infinitytears.wordpress.com Change Log: September 21 - Updated the script for Equipping Scene compatibility. Description: This script allows the developer to set up items that are only visible by a certain note tag which they can basically use for anything. The items are called Mails, which means you can use them as set up for mails the actor can receive throughout the game. Instructions of Using the Script: 1. Above all else, put the script below Materials above Main. 2. On your items you want to be used as mails, place the note tag <mail> on those items. Now remember, when you note tag something with it, they would be made automatically as mails and you can not find them in the Item list because they are now Mails. 3. To call the List of Mails, do it on a script call: SceneManager.call(Scene_Mail) Terms of Use: - Preserve the script banner. - Credits must be given to the author when script is used. - You are allowed to modify, add, or edit any part of the content as long as the original author is credited. - You are free to use this script for Non Commercial Games. If used for a commercial game, please feel free to inform the author. You will not be charged for anything for using this script, but there the author should at least be informed that it is being used somewhere. For support, please mail the author at rpgmakervxace.net or in his website. Screenshot Script Download #============================================================================== # ** Basic Scene Mail 1.0 # Author: Soulpour777 # August 31, 2014 # Web URL: infinitytears.wordpress.com # Change Log: September 1 - Equipment Compatibility Change and Fix #------------------------------------------------------------------------------ # Description: # This script allows the developer to set up items that are only visible by # a certain note tag which they can basically use for anything. The items # are called Mails, which means you can use them as set up for mails the actor # can receive throughout the game. #------------------------------------------------------------------------------ # Instructions of Using the Script: # 1. Above all else, put the script below Materials above Main. # 2. On your items you want to be used as mails, place the note tag <mail> on # those items. Now remember, when you note tag something with it, they would # be made automatically as mails and you can not find them in the Item list # because they are now Mails. # 3. To call the List of Mails, do it on a script call: # SceneManager.call(Scene_Mail) #------------------------------------------------------------------------------ # Terms of Use: # - Preserve the script banner. # - Credits must be given to the author when script is used. # - You are allowed to modify, add, or edit any part of the content as long # as the original author is credited. # - You are free to use this script for Non Commercial Games. #------------------------------------------------------------------------------ # If used for a commercial game, please feel free to inform the author. You # will not be charged for anything for using this script, but there the author # should at least be informed that it is being used somewhere. #------------------------------------------------------------------------------ # For support, please mail the author at rpgmakervxace.net or in his website. #============================================================================== module Soulpour module MailingList Mail_RegEx = /<mail>/i Mail_Name = "Mails" end end class Window_CategMail < Window_HorzCommand #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader :item_window #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 0) end #-------------------------------------------------------------------------- # * Get Window Width #-------------------------------------------------------------------------- def window_width Graphics.width end #-------------------------------------------------------------------------- # * Get Digit Count #-------------------------------------------------------------------------- def col_max return 1 end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super @item_window.category = current_symbol if @item_window end #-------------------------------------------------------------------------- # * Create Command List #-------------------------------------------------------------------------- def make_command_list add_command(Soulpour::MailingList::Mail_Name, :mail_item) end #-------------------------------------------------------------------------- # * Set Item Window #-------------------------------------------------------------------------- def item_window=(item_window) @item_window = item_window update end end class Window_MailingList < Window_Selectable #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @category = :none @data = [] end #-------------------------------------------------------------------------- # * Set Category #-------------------------------------------------------------------------- def category=(category) return if @category == category @category = category refresh self.oy = 0 end #-------------------------------------------------------------------------- # * Get Digit Count #-------------------------------------------------------------------------- def col_max return 2 end #-------------------------------------------------------------------------- # * Get Number of Items #-------------------------------------------------------------------------- def item_max @data ? @data.size : 1 end #-------------------------------------------------------------------------- # * Get Item #-------------------------------------------------------------------------- def item @data && index >= 0 ? @data[index] : nil end #-------------------------------------------------------------------------- # * Get Activation State of Selection Item #-------------------------------------------------------------------------- def current_item_enabled? enable?(@data[index]) end #-------------------------------------------------------------------------- # * Include in Item List? #-------------------------------------------------------------------------- def include?(item) case @category when :item item.is_a?(RPG::Item) && !item.key_item? when :weapon item.is_a?(RPG::Weapon) when :armor item.is_a?(RPG::Armor) when :key_item item.is_a?(RPG::Item) && item.key_item? else false end end #-------------------------------------------------------------------------- # * Display in Enabled State? #-------------------------------------------------------------------------- def enable?(item) $game_party.usable?(item) end #-------------------------------------------------------------------------- # * Create Item List #-------------------------------------------------------------------------- def make_mailing_list_items @data = $game_party.all_items.select {|item| item.note =~ Soulpour::MailingList::Mail_RegEx } @data.push(nil) if include?(nil) end #-------------------------------------------------------------------------- # * Restore Previous Selection Position #-------------------------------------------------------------------------- def select_last select(@data.index($game_party.last_item.object) || 0) end #-------------------------------------------------------------------------- # * Draw Item #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] if item rect = item_rect(index) rect.width -= 4 draw_item_name(item, rect.x, rect.y, enable?(item)) draw_item_number(rect, item) end end #-------------------------------------------------------------------------- # * Draw Number of Items #-------------------------------------------------------------------------- def draw_item_number(rect, item) draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2) end #-------------------------------------------------------------------------- # * Update Help Text #-------------------------------------------------------------------------- def update_help @help_window.set_item(item) end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh make_mailing_list_items create_contents draw_all_items end end class Scene_Mail < Scene_ItemBase #-------------------------------------------------------------------------- # * Start Processing #-------------------------------------------------------------------------- def start super create_help_window create_category_window create_item_window end #-------------------------------------------------------------------------- # * Create Category Window #-------------------------------------------------------------------------- def create_category_window @category_window = Window_CategMail.new @category_window.viewport = @viewport @category_window.help_window = @help_window @category_window.y = @help_window.height @category_window.set_handler(:ok, method(:on_category_ok)) @category_window.set_handler(:cancel, method(:return_scene)) end #-------------------------------------------------------------------------- # * Create Item Window #-------------------------------------------------------------------------- def create_item_window wy = @category_window.y + @category_window.height wh = Graphics.height - wy @item_window = Window_MailingList.new(0, wy, Graphics.width, wh) @item_window.viewport = @viewport @item_window.help_window = @help_window @item_window.set_handler(:ok, method(:on_item_ok)) @item_window.set_handler(:cancel, method(:on_item_cancel)) @category_window.item_window = @item_window end #-------------------------------------------------------------------------- # * Category [OK] #-------------------------------------------------------------------------- def on_category_ok @item_window.activate @item_window.select_last end #-------------------------------------------------------------------------- # * Item [OK] #-------------------------------------------------------------------------- def on_item_ok $game_party.last_item.object = item determine_item end #-------------------------------------------------------------------------- # * Item [Cancel] #-------------------------------------------------------------------------- def on_item_cancel @item_window.unselect @category_window.activate end #-------------------------------------------------------------------------- # * Play SE When Using Item #-------------------------------------------------------------------------- def play_se_for_item Sound.play_use_item end #-------------------------------------------------------------------------- # * Use Item #-------------------------------------------------------------------------- def use_item super @item_window.redraw_current_item end end class Window_ItemList < Window_Selectable attr_accessor :only_if_noted #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @category = :none @data = [] @only_if_noted = false end #-------------------------------------------------------------------------- # * Set Category #-------------------------------------------------------------------------- def category=(category) return if @category == category @category = category refresh self.oy = 0 end #-------------------------------------------------------------------------- # * Get Digit Count #-------------------------------------------------------------------------- def col_max return 2 end #-------------------------------------------------------------------------- # * Get Number of Items #-------------------------------------------------------------------------- def item_max @data ? @data.size : 1 end #-------------------------------------------------------------------------- # * Get Item #-------------------------------------------------------------------------- def item @data && index >= 0 ? @data[index] : nil end #-------------------------------------------------------------------------- # * Get Activation State of Selection Item #-------------------------------------------------------------------------- def current_item_enabled? enable?(@data[index]) end #-------------------------------------------------------------------------- # * Include in Item List? #-------------------------------------------------------------------------- def include?(item) case @category when :item @only_if_noted = true item.is_a?(RPG::Item) && !item.key_item? when :weapon @only_if_noted = true item.is_a?(RPG::Weapon) when :armor @only_if_noted = true item.is_a?(RPG::Armor) when :key_item @only_if_noted = true item.is_a?(RPG::Item) && item.key_item? else false end end #-------------------------------------------------------------------------- # * Display in Enabled State? #-------------------------------------------------------------------------- def enable?(item) $game_party.usable?(item) end #-------------------------------------------------------------------------- # * Create Item List #-------------------------------------------------------------------------- def make_item_list @data = $game_party.all_items.select {|item| include?(item) && !(item.note =~ Soulpour::MailingList::Mail_RegEx) } @data.push(nil) if include?(nil) end end class Window_EquipItem < Window_ItemList #-------------------------------------------------------------------------- # * Create Item List #-------------------------------------------------------------------------- def make_item_list @data = $game_party.all_items.select {|item| include?(item) } @data.push(nil) if include?(nil) end #-------------------------------------------------------------------------- # * Overwrite Refresh #-------------------------------------------------------------------------- def refresh make_item_list create_contents draw_all_items end end Edited September 1, 2014 by SoulPour777 4 Nekotori, Wren, TheoAllen and 1 other reacted to this Share this post Link to post Share on other sites
Wren 179 Posted August 31, 2014 Did you just make this? This is pretty awesome! Holy cow, if we select one of the items, can we use it to say, call a script call or call common event and consume them, just like normal items? 1 TBWCS reacted to this Share this post Link to post Share on other sites
+ TBWCS 951 Posted August 31, 2014 Did you just make this? This is pretty awesome! Holy cow, if we select one of the items, can we use it to say, call a script call or call common event and consume them, just like normal items? yes, because the item works like a normal item 1 Wren reacted to this Share this post Link to post Share on other sites
Wren 179 Posted August 31, 2014 Yep, I just ran it through its paces, and man, it is a nice tight little script that works great. Thanks for sharing this! 1 TBWCS reacted to this Share this post Link to post Share on other sites
MHRob 8 Posted August 31, 2014 (edited) Lol, to think I requested something like this not too long ago. Am definitely gonna try it out. Edit: Alright, so I noticed in my items screen that everything isn't being thrown into it's proper category anymore after adding this particular script in and that it's actually not compatible with Yanfly's Equip engine. It causes you to be able to equip anything in any slot, making a lot of items to disappear. Not asking for a compatibility patch, but I thought I should report it anyways. Edited September 1, 2014 by MHRob Share this post Link to post Share on other sites
Rudi Sihabudi 31 Posted September 1, 2014 (edited) Report, : an error happened when I tried the script in a new project: Edited March 14, 2015 by Turt Share this post Link to post Share on other sites
+ TBWCS 951 Posted September 1, 2014 Lol, to think I requested something like this not too long ago. Am definitely gonna try it out. Edit: Alright, so I noticed in my items screen that everything isn't being thrown into it's proper category anymore after adding this particular script in and that it's actually not compatible with Yanfly's Equip engine. It causes you to be able to equip anything in any slot, making a lot of items to disappear. Not asking for a compatibility patch, but I thought I should report it anyways. Report: error also happened when try this script in a new project: I updated the script and I hope the equipping scene is resolved, as I have overwritten the original equip's refresh. 1 Rudi Sihabudi reacted to this Share this post Link to post Share on other sites
MHRob 8 Posted September 1, 2014 Alright, just re-tested the updated script. The equipment scene works as normal again, but when you enter your inventory, everything can still be accessed via any of the categories there (Items, Weapons, Armors, Key Items, whatever other tab you have on your game) meaning if you went into the armor tab, you would still see your whole inventory, including stuff that doesn't belong in that category. Trying to decide if I can manage with that or not, just seems a bit odd if anything but everything else works as intended. Share this post Link to post Share on other sites
Xypher 176 Posted September 1, 2014 @data = $game_party.all_items.select {|item| not (item.note =~ Soulpour::MailingList::Mail_RegEx) } should be @data = $game_party.all_items.select {|item| include?(item) && !(item.note =~ Soulpour::MailingList::Mail_RegEx) } 2 Rudi Sihabudi and TBWCS reacted to this Share this post Link to post Share on other sites
+ TBWCS 951 Posted September 1, 2014 Quick update, added Xypher's fix. Now shows the item only if it is an item, note tagged items appear in Scene_Mail. Share this post Link to post Share on other sites
ShinGamix 101 Posted September 1, 2014 I hope this is compatible with the text from a file script. Don't remember the name exactly but it would be awesome. Share this post Link to post Share on other sites
MHRob 8 Posted September 1, 2014 Added the updated script once more and everything works just fine! Thanks for sharing this script, Soul and thank you Xypher for that last fix. Share this post Link to post Share on other sites
+ DarthVollis 59 Posted September 26, 2014 Can you add a feature for me? I would like the new mail to have an icon different from the old mail. I have the icons already made jsut need that added. Share this post Link to post Share on other sites
+ TBWCS 951 Posted September 26, 2014 Hmmm, those are still items so you can always change the icon ^^ or did I miss something? Share this post Link to post Share on other sites
+ DarthVollis 59 Posted September 27, 2014 I want the icon to change after you read them. Share this post Link to post Share on other sites