Jump to content
Sign in to follow this  
TBWCS

Basic Scene Mail 1.0

Recommended Posts

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

 

scene-mail.jpg?w=625

 

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 by SoulPour777

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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 :D

Share this post


Link to post
Share on other sites

Yep, I just ran it through its paces, and man, it is a nice tight little script that works great.

 

Thanks for sharing this!

Share this post


Link to post
Share on other sites

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 by MHRob

Share this post


Link to post
Share on other sites

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:

 

 

soul_1.png

 

 

 

I updated the script and I hope the equipping scene is resolved, as I have overwritten the original equip's refresh.

Share this post


Link to post
Share on other sites

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

 

@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) }

Share this post


Link to post
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
Top ArrowTop Arrow Highlighted