Salve ragazzi, faccio questa richiesta non per me (che se avrò aperto vxa 10 volte in vita mia è dire tanto XD), ma per una mia amica (beh anche per me ok, visto che si tratta di una sorta di collaborazione, ma vabè sto divagando asdasdasd...);
Dovremmo inserire, in una sorta di gioco simil survival-horror (come i vecchi RE, SH, Alone in the Dark 4, etc...) un sistema di "combina oggetti" per unire due oggetti in uno (esempio banale: metà sinistra di un emblema + metà destra di un emblema = emblema intero); la mia collega ha trovato uno script su internet che funziona proprio come vuole lei, ma il problema è che apre un interfaccia nuova, che non ha molto senso considerando che di base usa il "single character menu" di un certo Dark Paladin.
http://s15.postimg.org/u98pbkdln/Capture.png
(con un bel po' di editing visivi per lo più) che ha solo le due liste di items e key items (gli unici che ci interessano), e vorremmo che l'opzione "combina" operi direttamente all'interno della lista "Items" senza aprire nuovi menù; abbiamo in oltre un sistema (sempre via script) di "item weight" che, oltre ovviamente a stabilire un limite di carico, ogni volta che si clicca su un oggetto ci viene data la scelta USA e SCARTA, ora siccome Scarta non serve, ho modificato io stesso (per quel poco che ne capisco) in modo da eliminare il comando scarta e aggiungere al suo posto il comando Combina. allo stato attuale delle cose, cliccando su combina viene semplicemente richiamata la Scene_Combine (così si chiama lo script, è una "scene" pensata per sostituire la Scene_Items normale), ma ovviamente l'effetto visivo lascia abbastanza a desiderare.
Ecco gli script "interessati":
Scene_Combine (questo NON l'ho toccato, è così di default):
=begin
===============================================================================
Scene_Combine by efeberk
Version: RGSS3
===============================================================================
This script will allow to combine two items and generate a new item from
combined items. The scene is similiar with item_window. Actually you can use
Scene_Combine instead of Scene_Item because there is an option named "Use" that
allows you to use items. Why you need Item scene?
Example : You have 1 potion and 1 stimulant. Combine them and generate a new
Ultra stimulant.
--------------------------------------------------------------------------------
How to open Scene_Combine:
SceneManager.call(Scene_Combine)
Note : This script works on Items, Weapons and Armors
=end
module EFE
COMBINE_BUTTON = "Combine"
USE_BUTTON = "Use"
SUCCESS = "Items have been combined succesfully"
#Item name will be colored when you select an item in the list.
SELECTED_COLOR = 14
COMBINATIONS = [
#[[item1, :type], [item2, :type], [result, :type]],
#[[item1, :type], [item2, :type], [result, :type]],
[[1, :item],[2, :weapon], [3, :armor]],
[[8, :item],[9, :item], [3, :armor]]
]
end
#==============================================================================
# ** Window_ItemKategory
#------------------------------------------------------------------------------
# This window is for selecting a category of normal items and equipment
# on the item screen or shop screen.
#==============================================================================
class Window_ItemKategory < 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 4
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
@item_window.category = current_symbol if @item_window
end
#--------------------------------------------------------------------------
# * Create Command List
#--------------------------------------------------------------------------
def make_command_list
add_command(Vocab::item, :item)
add_command(Vocab::weapon, :weapon)
add_command(Vocab::armor, :armor)
add_command(Vocab::key_item, :key_item)
end
#--------------------------------------------------------------------------
# * Set Item Window
#--------------------------------------------------------------------------
def item_window=(item_window)
@item_window = item_window
update
end
end
class Window_ItemListe < Window_Selectable
attr_reader :accepted_items
attr_reader :combining
def initialize(x, y, width, height)
super
@combining = false
@accepted_items = []
@category = :none
@data = []
end
def combining=(combine)
@combining = combine
end
def category=(category)
return if @category == category
@category = category
refresh
self.oy = 0
end
def col_max
return 2
end
def item_max
@data ? @data.size : 1
end
def item
@data && index >= 0 ? @data[index] : nil
end
def current_item_enabled?
enable?(@data[index])
end
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
def draw_item_name(item, x, y, enabled = true, width = 172)
return unless item
draw_icon(item.icon_index, x, y, enabled)
draw_text(x + 24, y, width, line_height, item.name)
end
def enable?(item)
return true if @combining
$game_party.usable?(item)
end
def make_item_list
@data = $game_party.all_items.select {|item| include?(item) }
@data.push(nil) if include?(nil)
end
def select_last
select(@data.index($game_party.last_item.object) || 0)
end
def draw_item(index)
item = @data[index]
if item
rect = item_rect(index)
rect.width -= 4
k = [item.id, :item] if item.is_a?(RPG::Item)
k = [item.id, :weapon] if item.is_a?(RPG::Weapon)
k = [item.id, :armor] if item.is_a?(RPG::Armor)
change_color(normal_color, enable?(item))
change_color(text_color(EFE::SELECTED_COLOR), enable?(item)) if @accepted_items.include?(k)
draw_item_name(item, rect.x, rect.y, enable?(item))
draw_item_number(rect, item)
end
end
def draw_item_number(rect, item)
draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
end
def update_help
@help_window.set_item(item)
end
def refresh
make_item_list
create_contents
draw_all_items
end
end
class Window_AcceptCombination < Window_HorzCommand
def initialize(x, y)
super(x, y)
self.z = 0
end
def window_width
return Graphics.width
end
def col_max
return 2
end
def make_command_list
add_command(EFE::COMBINE_BUTTON, :combine)
add_command(EFE::USE_BUTTON, :use)
end
end
class Scene_Combine < Scene_ItemBase
def start
super
create_help_window
create_options_window
create_category_window
create_item_window
end
def create_options_window
@options_window = Window_AcceptCombination.new(0, @help_window.y + @help_window.height)
@options_window.set_handler(:combine, method(:combine_ok))
@options_window.set_handler(:use, method(:use_ok))
@options_window.set_handler(:cancel, method(:return_scene))
end
def combine_ok
@item_window.combining = true
@combine = true
@category_window.item_window = @item_window
@options_window.deactivate.unselect
@category_window.activate.select(0)
end
def use_ok
@item_window.combining = false
@category_window.item_window = @item_window
@options_window.deactivate.unselect
@category_window.activate.select(0)
end
def create_category_window
@category_window = Window_ItemKategory.new
@category_window.viewport = @viewport
@category_window.help_window = @help_window
@category_window.y = @help_window.height + @options_window.height
@category_window.set_handler(:ok, method(:on_category_ok))
@category_window.set_handler(:cancel, method(:on_category_cancel))
end
def create_item_window
wy = @category_window.y + @category_window.height
wh = Graphics.height - wy
@item_window = Window_ItemListe.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.deactivate.unselect
end
def on_category_ok
@item_window.activate
@item_window.select_last
end
def on_category_cancel
@item_window.deactivate.unselect
@item_window.accepted_items.clear
@category_window.deactivate.unselect
@options_window.activate.select(0)
end
def on_item_ok
k = [@item_window.item.id, :item] if @item_window.item.is_a?(RPG::Item)
k = [@item_window.item.id, :weapon] if @item_window.item.is_a?(RPG::Weapon)
k = [@item_window.item.id, :armor] if @item_window.item.is_a?(RPG::Armor)
if !@item_window.combining
@options_window.deactivate
$game_party.last_item.object = item
determine_item
else
if @item_window.accepted_items.include?(k)
@item_window.accepted_items.delete(k)
else
@item_window.accepted_items.push(k)
end
if @item_window.accepted_items.size == 2
check_combinations(@item_window.accepted_items[0], @item_window.accepted_items[1])
@item_window.refresh
else
@item_window.refresh
@item_window.activate
end
end
end
def check_combinations(id1, id2)
EFE::COMBINATIONS.each {|i|
if (id1 == i[0] || id1 == i[1]) && (id2 == i[0] || id2 == i[1])
@combineitem1 = $data_items[i[0][0]] if i[0][1] == :item
@combineitem1 = $data_weapons[i[0][0]] if i[0][1] == :weapon
@combineitem1 = $data_armors[i[0][0]] if i[0][1] == :armor
@combineitem2 = $data_items[i[1][0]] if i[1][1] == :item
@combineitem2 = $data_weapons[i[1][0]] if i[1][1] == :weapon
@combineitem2 = $data_armors[i[1][0]] if i[1][1] == :armor
@resultitem = $data_items[i[2][0]] if i[2][1] == :item
@resultitem = $data_weapons[i[2][0]] if i[2][1] == :weapon
@resultitem = $data_armors[i[2][0]] if i[2][1] == :armor
@item_window.accepted_items.clear
@item_window.refresh
@item_window.activate
$game_party.lose_item(@combineitem1, 1)
$game_party.lose_item(@combineitem2, 1)
$game_party.gain_item(@resultitem, 1)
messagebox(EFE::SUCCESS, 400)
return
end
}
@item_window.accepted_items.clear
@item_window.refresh
@item_window.activate
end
def on_item_cancel
@item_window.unselect
@category_window.activate
end
def play_se_for_item
Sound.play_use_item
end
def use_item
super
@item_window.redraw_current_item
end
end
=begin
===============================================================================
MessageBox by efeberk
Version: RGSS3
===============================================================================
This script will allow to open a new messagebox window only with a text.
--------------------------------------------------------------------------------
Call MessageBox in Script:
messagebox(text, width)
width : width of the window
=end
class Window_MessageBox < Window_Base
def initialize(x, y, text, width)
super(x, y, width, fitting_height(1))
refresh(text)
end
def refresh(text)
draw_text(0, 0, contents_width, line_height, text, 1)
end
end
class Scene_MessageBox < Scene_Base
def start
super
create_message_window
create_background
end
def prepare(text, width)
@text = text
@width = width
end
def update
super
if Input.repeat?(:B) || Input.repeat?(:C)
SceneManager.return
end
end
def create_message_window
@message_window = Window_MessageBox.new(0, 0, @text, @width)
@message_window.width = @width
@message_window.x = (Graphics.width / 2) - (@message_window.width / 2)
@message_window.y = (Graphics.height / 2) - (@message_window.height / 2)
end
def create_background
@background_sprite = Sprite.new
@background_sprite.bitmap = SceneManager.background_bitmap
@background_sprite.color.set(100, 100, 100, 128)
end
end
def messagebox(text, width)
SceneManager.call(Scene_MessageBox)
SceneManager.scene.prepare(text, width)
end
lo script per il peso con le mie piccole modifiche (un fallito tentativo di integrare il primo nel secondo, ma l'unica cosa che realmente sono riuscito a fare è stata togliere "scarta" e inserire "combina" asd:
#=======================================================
# Lune Item Weight
# Author : Raizen
# Script Function:
# The scripts adds the function of items having weight on the game,
# Basically all item have weights and they can only be carried if below the limit
#=======================================================
module Lune_Weight
#=============================================================================#
#========================= General Settings ==============================#
#=============================================================================#
# To configure a weight for an item, go to Database,
# Inside the notetags after choosing an item or equipe, put the following.
# <weight n> where n is the weight value,
# Example an item weighting 60,
# <weight 60>
# In case there are no notetags on the Item, the script will
# choose a default value which is:
Default = 0
# Receive even if over weight?
# To prevent from the actor receiving important itens through the game,
# you can allow the player to receive itens even if they are over the
# weight limit.
Receive = false
# If false, you need to know how to event the important itens, putting
# conditions so that importat itens are not left out without being received.
# In case they are over the weight limit, you can lock the character movement.
Travar = false
# Below the variables that you can use to make the event conditions:
# Choose a variable to receive the value of amount of weight carried.
Var_C = 8
# Choose a variable to receive the value of amount of the weight limit.
Var_M = 9
# With both variables you can event the conditions of receiving items or even
# event conditions considering the weight carried and limit.
LimiteB = "" # Configure if you are using Lune Item Vault (My vault script)
# to have no limite, LimiteB = ""
#=============================================================================#
#===================== Limit Weight Configuration ========================#
#=============================================================================#
# Maximum amount of weight carried,
# to configure the weight limit, you can put a variable value, a constant value
# or strength value.
# To put the main actor strength value => :for1
# To put the sum of actors strength value => :all_for
# To be the main actor level => :lvl1
# To be the sum of all actors level => :all_lvl
# To be a variable => :var
# To be a constant => :fix
# Exemple Carry_Limit = lvl1 will make only the strength of the
# first actor to be put in the formula.
Carry_Limit = :var
# Now you need to configure the formula of the weight limit,
# Exemple, if I want to the limit be 2 times all the party members strength
# def self.weight_formula(at)
# at * 2
# end
# at is the value of the atribute, and the multiply by 2 to get the total limit.
# In case its a variable or a constant number, just put the
# variable number, or the constant number.
# Exemple:
# def self.weight_formula(at)
# 20
# end
# The limit will be variable 20, ou if chosen a constant, will be 20.
def self.weight_formula(at)
9
end
module EFE #edit by ghost
#~ COMBINE_BUTTON = "Combina" #edit by ghost - removed, no need for this
#~ USE_BUTTON = " " #edit by ghost - removed, no need for this
SUCCESS = "Hai ottenuto un nuovo Oggetto." #edit by ghost
#Item name will be colored when you select an item in the list.
SELECTED_COLOR = 14
COMBINATIONS = [
#[[item1, :type], [item2, :type], [result, :type]],
#[[item_id, :item], [item_id, :item], [item_id, :item]],
[[12, :item],[13, :item], [14, :item]],
]
end
#===================== Vocabulary Settings ==========================#
# To Vocab, always put the text between commas '', or "".
# Weight name,
PS = ' lbs'
# Vocab on menu and shop
# Weight:
Peso = '• PESO:'
#Carrying =
Carregando = '• TOT:'
# If Lune Vault System included
# Vault =
Bau = '-unused ' #edit by ghost - removed, no need for this
# Vocabulary on item window
# Use =
Usar = 'Usa'
# Combine =
Combinar = 'Combina' #edit by ghost
# Dispose =
Descartar = 'Scarta' #remove
#=============================================================================#
#========================== Here starts the script ===========================#
#=============================================================================#
#--------------------------------------------------------------------------
# * Calculo do limite de peso
#--------------------------------------------------------------------------
def self.weight_limit
return unless $game_party.members[0]
case Carry_Limit
when :for1
weight = weight_formula($game_party.members[0].param(2))
when :all_for
weight = 0
for members in 0...$game_party.members.size - 1
weight += weight_formula($game_party.members[members].param(2))
end
when :lvl1
weight = weight_formula($game_party.members[0].level)
when :all_lvl
weight = 0
for members in 0...$game_party.members.size - 1
weight += weight_formula($game_party.members[members].level)
end
when :fix
weight = weight_formula(0)
when :var
weight = $game_variables[weight_formula(0)]
end
$game_variables[Var_M] = weight
weight
end
end
#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
# Esta classe gerencia o grupo. Contém informações sobre dinheiro, itens.
# A instância desta classe é referenciada por $game_party.
#==============================================================================
class Game_Party < Game_Unit
alias :lune_weight_gain :gain_item
#--------------------------------------------------------------------------
# * Quantidade de itens carregados mais os itens equipados
#--------------------------------------------------------------------------
def carried_items
@all_carried_items = 0
all_items.each {|item| get_weight(item)}
for i in 0...4
members.each {|actor| @all_carried_items += calc_weight(actor.equips[i], 1)}
end
$game_variables[Lune_Weight::Var_C] = @all_carried_items
@all_carried_items
end
#--------------------------------------------------------------------------
# * Calculo do peso de um item no inventário
#--------------------------------------------------------------------------
def get_weight(item)
if item.note =~ /<weight (.*)>/i
@all_carried_items += $1.to_i * item_number(item)
else
@all_carried_items += Lune_Weight::Default * item_number(item)
end
end
#--------------------------------------------------------------------------
# * Calculo do peso de um item relativo a quantidade
#--------------------------------------------------------------------------
def calc_weight(item, amount)
return 0 unless item
if item.note =~ /<weight (.*)>/i
carried_itens = $1.to_i * amount
else
carried_itens = Lune_Weight::Default * amount
end
carried_itens
end
#--------------------------------------------------------------------------
# * Acrescentar item (redução)
# item : item
# amount : quantia alterada
# include_equip : incluir itens equipados
#--------------------------------------------------------------------------
def gain_item(item, amount, include_equip = false)
if Lune_Weight::Receive
lune_weight_gain(item, amount, include_equip = false)
return
end
return if item == nil
weight = calc_weight(item, amount) + carried_items
while weight > Lune_Weight.weight_limit
amount -= 1
weight = calc_weight(item, amount) + carried_items
return if amount == 0
end
lune_weight_gain(item, amount, include_equip = false)
end
end
#==============================================================================
# ** Scene_Shop
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de loja.
#==============================================================================
class Scene_Shop < Scene_MenuBase
alias :lune_max_buy :max_buy
#--------------------------------------------------------------------------
# * Aquisição do número máximo disponível para compra
#--------------------------------------------------------------------------
def max_buy
max = lune_max_buy
weight = $game_party.calc_weight(@item, max) + $game_party.carried_items
while weight > Lune_Weight.weight_limit && max > 0
max -= 1
weight = $game_party.calc_weight(@item, max) + $game_party.carried_items
end
max
end
#--------------------------------------------------------------------------
# * Criação da janela de ajuda.
#--------------------------------------------------------------------------
def create_help_window
@help_window = Window_Weight_Help.new
@help_window.viewport = @viewport
@get_item_num = $game_party.carried_items
end
#--------------------------------------------------------------------------
# * Atualização da janela de peso
#--------------------------------------------------------------------------
def update
super
if @get_item_num != $game_party.carried_items
@help_window.refresh
@get_item_num = $game_party.carried_items
end
end
end
#==============================================================================
# ** Window_ShopBuy
#------------------------------------------------------------------------------
# Esta janela exibe bens compráveis na tela de loja.
#==============================================================================
class Window_ShopBuy < Window_Selectable
alias :lune_enable_item :enable?
#--------------------------------------------------------------------------
# * Definição de habilitação do item
# item : item
#--------------------------------------------------------------------------
def enable?(item)
return false if $game_party.calc_weight(item, 1) + $game_party.carried_items > Lune_Weight.weight_limit
lune_enable_item(item)
end
end
#==============================================================================
# ** Window_Help
#------------------------------------------------------------------------------
# Esta janela exibe explicação de habilidades e itens e outras informações.
#==============================================================================
class Window_Weight_Help < Window_Base
include Lune_Weight
#--------------------------------------------------------------------------
# * Inicialização do objeto
# line_number : número de linhas
#--------------------------------------------------------------------------
def initialize(line_number = 2, bau = false)
@bau = bau
super(0, 0, Graphics.width, fitting_height(line_number))
self.windowskin = Cache.system("Window-2")
end
#--------------------------------------------------------------------------
# * Configuração de texto
# text : texto
#--------------------------------------------------------------------------
def set_text(text)
if text != @text
@text = text
refresh
end
end
def on_bau(bau = false)
@bau = bau
end
#--------------------------------------------------------------------------
# * Limpeza
#--------------------------------------------------------------------------
def clear
set_text(" ")
end
#--------------------------------------------------------------------------
# * Definição de item
# item : habilidades, itens, etc.
#--------------------------------------------------------------------------
def set_item(item)
@item = item
set_text(item ? item.description : "")
end
#--------------------------------------------------------------------------
# * Renovação
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_text_ex(4, 0, @text)
if @item
text = Peso + $game_party.calc_weight(@item,1).to_s + PS
draw_text(515, 0, 200, line_height, text, 0)
#~ if @bau == true
#~ LimiteB == "" ? text_lim = "????" : text_lim = LimiteB
#~ text = Bau + $game_party.items_on_vault.to_s + "/" + text_lim.to_s + PS
#~ else
text = Carregando + $game_party.carried_items.to_s + "/" + Lune_Weight.weight_limit.to_s + PS
end
draw_text(- 25, line_height, Graphics.width, line_height, text, 2)
end
end
#~ end
#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
# Esta classe gerencia o jogador.
# A instância desta classe é referenciada por $game_player.
#==============================================================================
class Game_Player < Game_Character
alias :lune_move_by :move_by_input
#--------------------------------------------------------------------------
# * Processamento de movimento através de pressionar tecla
#--------------------------------------------------------------------------
def move_by_input
return if Lune_Weight::Travar && $game_party.carried_items > Lune_Weight.weight_limit
lune_move_by
end
end
#==============================================================================
# ** Scene_Item
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de item.
#==============================================================================
class Scene_Item < Scene_ItemBase
alias raizen_combine_start start
def start
raizen_combine_start
@combine_item = Window_Item_Combine.new
@combine_item.viewport = @viewport
@combine_item.set_handler(:use, method(:command_use))
#~ @combine_item.set_handler(:discard, method(:command_discard)) #no need
@combine_item.set_handler(:combine, method(:command_combine)) #edit by ghost
end
def on_item_ok
if item == nil
@item_window.activate
return
end
if @combine_item.close?
@combine_item.open
@combine_item.activate
else
determine_item
end
end
def update
super
if @number_window and @number_window.nitens == true
@number_window.nitens = false
@combine_item.close
@item_window.refresh
@help_window.refresh
@item_window.activate
end
if Input.trigger?(:B) and !@combine_item.close?
Sound.play_cancel
if @number_window and !@number_window.close?
@number_window.close
@combine_item.activate
else
@combine_item.close
@item_window.activate
end
end
end
def command_use
determine_item
end
#~ def command_discard
#~ if @number_window and !@number_window.close?
#~ @combine_item.activate
#~ return
#~ end
#~ @number_window = Window_NumberInputInner.new(Window_Base.new(0,0,0,0), item, @item_window.index)
#~ @number_window.viewport = @viewport
#~ @number_window.start
#~ end
def create_help_window
@help_window = Window_Weight_Help.new
@help_window.viewport = @viewport
end
end
def command_combine #edit by ghost
SceneManager.call(Scene_Combine)# integrare la combinazione di oggetti # edit by ghost
end #edit by ghost
#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
# Esta janela exibe os parâmetros dos membros do grupo na tela de menu.
#==============================================================================
class Window_Item_Combine < Window_Command
include Lune_Weight
#--------------------------------------------------------------------------
# * Inicialização do objeto
#--------------------------------------------------------------------------
def initialize
super(0, 0)
self.z = 9999
self.x = (Graphics.width / 2) - (window_width / 2)
self.y = Graphics.height / 2
self.openness = 0
end
#--------------------------------------------------------------------------
# * Aquisição da largura da janela
#--------------------------------------------------------------------------
def window_width
return 160
end
#--------------------------------------------------------------------------
# * Criação da lista de comandos
#--------------------------------------------------------------------------
def make_command_list
add_main_commands
end
#--------------------------------------------------------------------------
# * Adição dos comandos principais
#--------------------------------------------------------------------------
def add_main_commands
add_command(Usar, :use, true)
add_command(Combinar, :combine, true) #edit by ghost
#~ add_command(Descartar, :discard, true)
end
end
#==============================================================================
# ** Scene_ItemBase
#------------------------------------------------------------------------------
# Esta é a superclasse das classes que executam as telas de itens e
# habilidades.
#==============================================================================
class Scene_ItemBase < Scene_MenuBase
def determine_item
@combine_item.close
if item.is_a?(RPG::Item) and item.for_friend?
show_sub_window(@actor_window)
@actor_window.select_for_item(item)
else
item.is_a?(RPG::Item) ? use_item : Sound.play_buzzer
activate_item_window
end
end
end
#==============================================================================
# ** Window_NumberInputInner
#------------------------------------------------------------------------------
# Esta janela é utilizada para o comando de eventos [Armazenar Número]
#==============================================================================
class Window_NumberInputInner < Window_NumberInput
attr_accessor :nitens
def initialize(message_window, item, index_2)
@index_2 = index_2
@item = item
@get_lost_itens = 0
super(message_window)
end
#--------------------------------------------------------------------------
# * Inicialização do processo
#--------------------------------------------------------------------------
def start
@digits_max = 2
@number = @get_lost_itens
@number = [[@number, 0].max, 10 ** @digits_max - 1].min
@index = 0
update_placement
create_contents
refresh
open
activate
end
#--------------------------------------------------------------------------
# * Atualização da posição da janela
#--------------------------------------------------------------------------
def update_placement
self.width = @digits_max * 20 + padding * 2
self.height = fitting_height(1)
self.x = (Graphics.width - width) / 2
self.y = Graphics.height/2 - height
self.z = 150
end
#--------------------------------------------------------------------------
# * Definição de resultado ao pressionar o botão de confirmação
#--------------------------------------------------------------------------
def process_ok
Sound.play_ok
number = $game_party.item_number(@item)
if @number <= number
make_icon
end
deactivate
@nitens = true
close
end
def make_icon
@nitens = true
$game_party.lose_item(@item, @number)
end
end
#==============================================================================
# ** Window_ItemList
#------------------------------------------------------------------------------
# Esta janela exibe a lista de itens possuidos na tela de itens.
#==============================================================================
class Window_ItemList < Window_Selectable
#--------------------------------------------------------------------------
# * Definição de habilitação do item
# item : item
#--------------------------------------------------------------------------
def enable?(item)
true
end
end
$lune_weight_script = true
e se serve, il menu single di Dark Paladin:
###############################################################################
# Dark Paladin Single Character Menu v1.2
# Platform: VX Ace
# Author: Dark Paladin
# Description: A menu system for a single Character.
# Terms of use: You MAY use this script for your Non-commercial Projects.
# You MAY use this script for Commercial projects without my permission.
# Credit is appreciated but not needed.
# This script requires: N/A Cachext Included
###############################################################################
#==============================================================================
# CONFIG AREA
#==============================================================================
module DKP_Menu_Config
Enable_Background = true # true/false Use Background?
Menu_Background = "Menu" # Set the name of the background pic
# Place Image in "Graphics/DPmenu/Main/" Or change it in the cachext module.
Status_Opacity = 0 # Status Window Opacity
Help_Opacity = 0 # Item Help Window Opacity
Item_Opacity = 0 # Item Window Opacity
Command_Opacity = 0 # Command Window Opacity
CategoryW_Opacity = 0 # Category Window Opacity
end
module Cachext
#--------------------------------------------------------------------------
# DKP Cachext
# Do not edit unless you really know what your doing!
# Platform: VX Ace
# Author: Dark paladin
# Description: Module for menu background.
# -------------------------------------------------------------------------
#--------------------------------------------------------------------------
# *Graphics
#--------------------------------------------------------------------------
#You can edit the stuff in purple between the "" to change folder location.
#--------------------------------------------------------------------------
# *Menu Graphics Folder
#--------------------------------------------------------------------------
def self.dpmenu(filename)# You can change the Folder names here for background image.
load_bitmap("Graphics/DPmenu/Main/", filename)
end
#==============================================================================
# END CONFIG AREA
#==============================================================================
#--------------------------------------------------------------------------
# * Load Bitmap
#--------------------------------------------------------------------------
def self.load_bitmap(folder_name, filename, hue = 0)
@cachext ||= {}
if filename.empty?
empty_bitmap
elsif hue == 0
normal_bitmap(folder_name + filename)
else
hue_changed_bitmap(folder_name + filename, hue)
end
end
#--------------------------------------------------------------------------
# * Create Empty Bitmap
#--------------------------------------------------------------------------
def self.empty_bitmap
Bitmap.new(32, 32)
end
#--------------------------------------------------------------------------
# * Create/Get Normal Bitmap
#--------------------------------------------------------------------------
def self.normal_bitmap(path)
@cachext = Bitmap.new(path) unless include?(path)
@cachext
end
#--------------------------------------------------------------------------
# * Create/Get Hue-Changed Bitmap
#--------------------------------------------------------------------------
def self.hue_changed_bitmap(path, hue)
key =
unless include?(key)
@cachext = normal_bitmap(path).clone
@cachext.hue_change(hue)
end
@cachext
end
#--------------------------------------------------------------------------
# * Check Cache Existence
#--------------------------------------------------------------------------
def self.include?(key)
@cachext && !@cachext.disposed?
end
#--------------------------------------------------------------------------
# * Clear Cache
#--------------------------------------------------------------------------
def self.clear
@cachext ||= {}
@cachext.clear
GC.start
end
end
#==============================================================================
# ** Window_ItemCategory
#------------------------------------------------------------------------------
# This window is for selecting a category of normal items and equipment
# on the item screen or shop screen.
#==============================================================================
class Window_ItemCategory < Window_HorzCommand
include DKP_Menu_Config
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :item_window
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0)
end
#--------------------------------------------------------------------------
# * Get Window Width
#--------------------------------------------------------------------------
def window_width
244
end
#--------------------------------------------------------------------------
# * Get Digit Count
#--------------------------------------------------------------------------
def col_max
return 2
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
@item_window.category = current_symbol if @item_window
end
#--------------------------------------------------------------------------
# * Create Command List
#--------------------------------------------------------------------------
def make_command_list
add_command(Vocab::item, :item)
add_command(Vocab::key_item, :key_item)
end
#--------------------------------------------------------------------------
# * Set Item Window
#--------------------------------------------------------------------------
def item_window=(item_window)
@item_window = item_window
update
end
end
#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
# This window displays party member status on the menu screen.
#==============================================================================
class Window_MenuStatus < Window_Selectable
include DKP_Menu_Config
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :pending_index # Pending position (for formation)
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(x, y)
super(0, 0, 640, 480)
@pending_index = -1
self.opacity = Status_Opacity
refresh
end
#--------------------------------------------------------------------------
# * Get Window Width
#--------------------------------------------------------------------------
def window_width
return 300
end
#--------------------------------------------------------------------------
# * Get Window Height
#--------------------------------------------------------------------------
def window_height
return 370
end
#--------------------------------------------------------------------------
# * Get Number of Items
#--------------------------------------------------------------------------
def item_max
return 1
end
#--------------------------------------------------------------------------
# * Get Item Height
#--------------------------------------------------------------------------
def item_height
(height - standard_padding * 2) / 4
end
#--------------------------------------------------------------------------
# Simple Status
#--------------------------------------------------------------------------
def draw_actor_hp(actor, x, y, width = 200)
draw_gauge(x, y, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2)
change_color(system_color)
draw_text(x, y, 0, line_height, Vocab::hp_a)
#~ draw_current_and_max_values(x, y, width, actor.hp, actor.mhp,
#~ hp_color(actor), normal_color)
end
def draw_actor_name(actor, x, y, width = 140)
change_color(hp_color(actor))
draw_text(x, y, width / 2, line_height, actor.name)
end
def draw_actor_simple_status(actor, x, y)
draw_actor_name(actor, 461, 65) #188, 25
draw_actor_icons(actor, 0, y + line_height * 8)
draw_actor_hp(actor, 7, 60)
end
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
actor = $game_party.members
enabled = $game_party.battle_members.include?(actor)
rect = item_rect(index)
draw_item_background(index)
draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled)
draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 2)
end
#--------------------------------------------------------------------------
# * Draw Background for Item
#--------------------------------------------------------------------------
def draw_item_background(index)
if index == @pending_index
contents.fill_rect(item_rect(index), pending_color)
end
end
#--------------------------------------------------------------------------
# * Processing When OK Button Is Pressed
#--------------------------------------------------------------------------
def process_ok
super
$game_party.menu_actor = $game_party.members
end
#--------------------------------------------------------------------------
# * Restore Previous Selection Position
#--------------------------------------------------------------------------
def select_last
select($game_party.menu_actor.index || 0)
end
#--------------------------------------------------------------------------
# * Set Pending Position (for Formation)
#--------------------------------------------------------------------------
def pending_index=(index)
last_pending_index = @pending_index
@pending_index = index
redraw_item(@pending_index)
redraw_item(last_pending_index)
end
end
#==============================================================================
# ** Window_Help
#------------------------------------------------------------------------------
# This window shows skill and item explanations along with actor status.
#==============================================================================
class DKPWindow_Help < Window_Base
include DKP_Menu_Config
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(line_number = 4)
super(0, 0, 244, fitting_height(line_number))
self.opacity = Help_Opacity
end
#--------------------------------------------------------------------------
# * Set Text
#--------------------------------------------------------------------------
def set_text(text)
if text != @text
@text = text
refresh
end
end
#--------------------------------------------------------------------------
# * Clear
#--------------------------------------------------------------------------
def clear
set_text("")
end
#--------------------------------------------------------------------------
# * Set Item
# item : Skills and items etc.
#--------------------------------------------------------------------------
def set_item(item)
set_text(item ? item.description : "")
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_text_ex(0, 0, word_wrapping(@text))
end
#--------------------------------------------------------------------------
# * Word Wrap
#--------------------------------------------------------------------------
def word_wrapping(text, pos = 0)
current_text_position = 0
for i in 0..(text.length - 1)
if text == "\n"
current_text_position = 0
next
end
current_text_position += contents.text_size(text).width
if (pos + current_text_position) >= (contents.width)
current_element = i
while(text != " ")
break if current_element == 0
current_element -= 1
end
temp_text = ""
for j in 0..(text.length - 1)
temp_text += text
temp_text += "\n" if j == current_element
end
text = temp_text
i = current_element
current_text_position = 0
end
end
return text
end
end
#==============================================================================
# ** Window_Gold
#------------------------------------------------------------------------------
# This window displays the party's gold.
#==============================================================================
class Window_Gold < Window_Base
include DKP_Menu_Config
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, window_width, fitting_height(1))
self.opacity = 0
self.z = 1000
refresh
end
#--------------------------------------------------------------------------
# * Get Window Width
#--------------------------------------------------------------------------
def window_width
return 160
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_currency_value(value, currency_unit, 4, 0, contents.width - 8)
end
#--------------------------------------------------------------------------
# * Get Party Gold
#--------------------------------------------------------------------------
def value
$game_party.gold
end
#~ #--------------------------------------------------------------------------
#~ # Get Currency Unit
#~ #--------------------------------------------------------------------------
def currency_unit
Vocab::currency_unit
end
#~ #--------------------------------------------------------------------------
#~ # * Open Window
#~ #--------------------------------------------------------------------------
def open
refresh
super
end
end
class Window_ItemList < Window_Selectable
include DKP_Menu_Config
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super
@category = :none
@data =
self.opacity = Item_Opacity
end
#--------------------------------------------------------------------------
# * Set Category
#--------------------------------------------------------------------------
def category=(category)
return if @category == category
@category = category
refresh
self.oy = 0
end
#--------------------------------------------------------------------------
# * Get Digit Count
#--------------------------------------------------------------------------
def col_max
return 1
end
#--------------------------------------------------------------------------
# * Get Number of Items
#--------------------------------------------------------------------------
def item_max
@data ? @data.size : 1
end
#--------------------------------------------------------------------------
# * Get Item
#--------------------------------------------------------------------------
def item
@data && index >= 0 ? @data : nil
end
#--------------------------------------------------------------------------
# * Get Activation State of Selection Item
#--------------------------------------------------------------------------
def current_item_enabled?
enable?(@data)
end
#--------------------------------------------------------------------------
# * Include in Item List?
#--------------------------------------------------------------------------
def include?(item)
case @category
when :item
item.is_a?(RPG::Item) && !item.key_item?
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_item_list
@data = $game_party.all_items.select {|item| include?(item) }
@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
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_item_list
create_contents
draw_all_items
end
end
#==============================================================================
# ** Window_MenuCommand
#------------------------------------------------------------------------------
# This command window appears on the menu screen.
#==============================================================================
class Window_MenuCommand < Window_Command
include DKP_Menu_Config
#--------------------------------------------------------------------------
# * Initialize Command Selection Position (Class Method)
#--------------------------------------------------------------------------
def self.init_command_position
@@last_command_symbol = nil
end
#--------------------------------------------------------------------------
# * Get Digit Count
#--------------------------------------------------------------------------
def col_max
return 3
end
#--------------------------------------------------------------------------
# * Get Spacing for Items Arranged Side by Side
#--------------------------------------------------------------------------
def spacing
return 100
end
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, Graphics.height- 47)
activate
select_last
end
#--------------------------------------------------------------------------
# * Get Window Width
#--------------------------------------------------------------------------
def window_width
return 640 #544
end
#--------------------------------------------------------------------------
# * Get Number of Lines to Show
#--------------------------------------------------------------------------
def visible_line_number
return 1
end
#--------------------------------------------------------------------------
# * Create Command List
#--------------------------------------------------------------------------
def make_command_list
add_main_commands
add_save_command
add_game_end_command
end
#--------------------------------------------------------------------------
# * Add Main Commands to List
#--------------------------------------------------------------------------
def add_main_commands
add_command(Vocab::item, :item, main_commands_enabled)
end
#--------------------------------------------------------------------------
# * Add Save to Command List
#--------------------------------------------------------------------------
def add_save_command
add_command(Vocab::save, :save, save_enabled)
end
#--------------------------------------------------------------------------
# * Add Exit Game to Command List
#--------------------------------------------------------------------------
def add_game_end_command
add_command(Vocab::game_end, :game_end)
end
#--------------------------------------------------------------------------
# * Get Activation State of Main Commands
#--------------------------------------------------------------------------
def main_commands_enabled
$game_party.exists
end
#--------------------------------------------------------------------------
# * Get Activation State of Save
#--------------------------------------------------------------------------
def save_enabled
!$game_system.save_disabled
end
#--------------------------------------------------------------------------
# * Processing When OK Button Is Pressed
#--------------------------------------------------------------------------
def process_ok
@@last_command_symbol = current_symbol
super
end
#--------------------------------------------------------------------------
# * Restore Previous Selection Position
#--------------------------------------------------------------------------
def select_last
select_symbol(@@last_command_symbol)
end
end
class Game_Interpreter
def command_351
return if $game_party.in_battle
SceneManager.call(Scene_Item)
Window_MenuCommand::init_command_position
Fiber.yield
end
end
class Scene_Map < Scene_Base
def call_menu
SceneManager.call(Scene_Item)
Window_MenuCommand::init_command_position
end
end
#==============================================================================
# ** Scene_Item
#------------------------------------------------------------------------------
# This class performs the item screen processing.
#==============================================================================
class Scene_Item < Scene_ItemBase
include DKP_Menu_Config
#--------------------------------------------------------------------------
# * Start Processing
#--------------------------------------------------------------------------
def start
super
create_help_window
create_status_window
if Enable_Background != false then create_Image_Background end
#~ create_gold_window
create_command_window
create_category_window
create_item_window
#@category_window.deactivate
end
#--------------------------------------------------------------------------
# * Create Category Window
#--------------------------------------------------------------------------
def create_category_window
@category_window = Window_ItemCategory.new
@category_window.viewport = @viewport
@category_window.help_window = @help_window
@category_window.y = 120
@category_window.opacity = CategoryW_Opacity
@category_window.set_handler(:ok, method(:on_category_ok))
@category_window.set_handler(:cancel, method(:return_item))
end
#--------------------------------------------------------------------------
# * Create Item Window
#--------------------------------------------------------------------------
def create_item_window
@item_window = Window_ItemList.new(0, 170, 244, 270)
@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
#--------------------------------------------------------------------------
# * Create Command Window
#--------------------------------------------------------------------------
def create_command_window
@command_window = Window_MenuCommand.new
@command_window.opacity = Command_Opacity
@command_window.set_handler(:item, method(:command_item))
@command_window.set_handler(:save, method(:command_save))
@command_window.set_handler(:game_end, method(:command_game_end))
@command_window.set_handler(:cancel, method(:return_scene))
end
#--------------------------------------------------------------------------
# * Deactivate category
#--------------------------------------------------------------------------
def return_item
@category_window.deactivate
@command_window.activate
@command_window.select_last
end
#--------------------------------------------------------------------------
# * Command
#--------------------------------------------------------------------------
def command_save
SceneManager.call(Scene_Save)
end
#--------------------------------------------------------------------------
# * Command
#--------------------------------------------------------------------------
def command_game_end
SceneManager.call(Scene_End)
end
#--------------------------------------------------------------------------
# * Command
#--------------------------------------------------------------------------
def command_item
@category_window.activate
@command_window.deactivate
end
#--------------------------------------------------------------------------
# * Create Gold Window
#--------------------------------------------------------------------------
#~ def create_gold_window
#~ @gold_window = Window_Gold.new
#~ @gold_window.x = Graphics.width - @gold_window.width
#~ @gold_window.y = Graphics.height - 100
#~ end
#--------------------------------------------------------------------------
# * Create Background Image
#--------------------------------------------------------------------------
def create_Image_Background
bitmap = Cachext.dpmenu(Menu_Background)
@background_sprite.bitmap = bitmap
end
#--------------------------------------------------------------------------
# * Create Status Window
#--------------------------------------------------------------------------
def create_status_window
@status_window = Window_MenuStatus.new(244, 0)
end
#--------------------------------------------------------------------------
# * Create Help Window
#--------------------------------------------------------------------------
def create_help_window
@help_window = DKPWindow_Help.new
@help_window.viewport = @viewport
end
#--------------------------------------------------------------------------
# * Category
#--------------------------------------------------------------------------
def on_category_ok
@item_window.activate
@item_window.select_last
end
#--------------------------------------------------------------------------
# * Item
#--------------------------------------------------------------------------
def on_item_ok
$game_party.last_item.object = item
determine_item
end
def determine_item
if item.for_friend?
show_sub_window(@actor_window)
@actor_window.select_for_item(item)
else
use_item
activate_item_window
end
end
def cursor_left?
@item_window.index % 1 == 0
end
def show_sub_window(window)
width_remain = Graphics.width - window.width
window.x = cursor_left? ? width_remain : 0
@viewport.rect.x = @viewport.ox = cursor_left? ? 0 : window.width
@viewport.rect.width = width_remain
window.show.activate
end
#--------------------------------------------------------------------------
# * Item
#--------------------------------------------------------------------------
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
ricapitolando, mi servirebbe che la funziona per combinare gli oggetti "lavori" nello stesso menu in cui selezioniamo gli oggetti, piuttosto che aprirne uno nuovo;
il secondo edit, invece, più banale, se possibile mi servirebbe che anche avendo più copie di un oggetto (esempio 2 scatole di munizoni) il peso venga calcolato sempre come se si trattasse di uno solo.
e quest'è... penso che per uno scripter esperto sia roba di 30 secondi, per me è arabo, gia sono sorpreso di quel poco che ho fatto XDDDD
quindi nulla, ringrazio in anticipo chiunque vorrà darmi una mano, anche a nome della mia collega :)
Question
GhostRider
Salve ragazzi, faccio questa richiesta non per me (che se avrò aperto vxa 10 volte in vita mia è dire tanto XD), ma per una mia amica (beh anche per me ok, visto che si tratta di una sorta di collaborazione, ma vabè sto divagando asdasdasd...);
Dovremmo inserire, in una sorta di gioco simil survival-horror (come i vecchi RE, SH, Alone in the Dark 4, etc...) un sistema di "combina oggetti" per unire due oggetti in uno (esempio banale: metà sinistra di un emblema + metà destra di un emblema = emblema intero); la mia collega ha trovato uno script su internet che funziona proprio come vuole lei, ma il problema è che apre un interfaccia nuova, che non ha molto senso considerando che di base usa il "single character menu" di un certo Dark Paladin.
http://s15.postimg.org/u98pbkdln/Capture.png
(con un bel po' di editing visivi per lo più) che ha solo le due liste di items e key items (gli unici che ci interessano), e vorremmo che l'opzione "combina" operi direttamente all'interno della lista "Items" senza aprire nuovi menù; abbiamo in oltre un sistema (sempre via script) di "item weight" che, oltre ovviamente a stabilire un limite di carico, ogni volta che si clicca su un oggetto ci viene data la scelta USA e SCARTA, ora siccome Scarta non serve, ho modificato io stesso (per quel poco che ne capisco) in modo da eliminare il comando scarta e aggiungere al suo posto il comando Combina. allo stato attuale delle cose, cliccando su combina viene semplicemente richiamata la Scene_Combine (così si chiama lo script, è una "scene" pensata per sostituire la Scene_Items normale), ma ovviamente l'effetto visivo lascia abbastanza a desiderare.
Ecco gli script "interessati":
Scene_Combine (questo NON l'ho toccato, è così di default):
=begin =============================================================================== Scene_Combine by efeberk Version: RGSS3 =============================================================================== This script will allow to combine two items and generate a new item from combined items. The scene is similiar with item_window. Actually you can use Scene_Combine instead of Scene_Item because there is an option named "Use" that allows you to use items. Why you need Item scene? Example : You have 1 potion and 1 stimulant. Combine them and generate a new Ultra stimulant. -------------------------------------------------------------------------------- How to open Scene_Combine: SceneManager.call(Scene_Combine) Note : This script works on Items, Weapons and Armors =end module EFE COMBINE_BUTTON = "Combine" USE_BUTTON = "Use" SUCCESS = "Items have been combined succesfully" #Item name will be colored when you select an item in the list. SELECTED_COLOR = 14 COMBINATIONS = [ #[[item1, :type], [item2, :type], [result, :type]], #[[item1, :type], [item2, :type], [result, :type]], [[1, :item],[2, :weapon], [3, :armor]], [[8, :item],[9, :item], [3, :armor]] ] end #============================================================================== # ** Window_ItemKategory #------------------------------------------------------------------------------ # This window is for selecting a category of normal items and equipment # on the item screen or shop screen. #============================================================================== class Window_ItemKategory < 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 4 end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super @item_window.category = current_symbol if @item_window end #-------------------------------------------------------------------------- # * Create Command List #-------------------------------------------------------------------------- def make_command_list add_command(Vocab::item, :item) add_command(Vocab::weapon, :weapon) add_command(Vocab::armor, :armor) add_command(Vocab::key_item, :key_item) end #-------------------------------------------------------------------------- # * Set Item Window #-------------------------------------------------------------------------- def item_window=(item_window) @item_window = item_window update end end class Window_ItemListe < Window_Selectable attr_reader :accepted_items attr_reader :combining def initialize(x, y, width, height) super @combining = false @accepted_items = [] @category = :none @data = [] end def combining=(combine) @combining = combine end def category=(category) return if @category == category @category = category refresh self.oy = 0 end def col_max return 2 end def item_max @data ? @data.size : 1 end def item @data && index >= 0 ? @data[index] : nil end def current_item_enabled? enable?(@data[index]) end 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 def draw_item_name(item, x, y, enabled = true, width = 172) return unless item draw_icon(item.icon_index, x, y, enabled) draw_text(x + 24, y, width, line_height, item.name) end def enable?(item) return true if @combining $game_party.usable?(item) end def make_item_list @data = $game_party.all_items.select {|item| include?(item) } @data.push(nil) if include?(nil) end def select_last select(@data.index($game_party.last_item.object) || 0) end def draw_item(index) item = @data[index] if item rect = item_rect(index) rect.width -= 4 k = [item.id, :item] if item.is_a?(RPG::Item) k = [item.id, :weapon] if item.is_a?(RPG::Weapon) k = [item.id, :armor] if item.is_a?(RPG::Armor) change_color(normal_color, enable?(item)) change_color(text_color(EFE::SELECTED_COLOR), enable?(item)) if @accepted_items.include?(k) draw_item_name(item, rect.x, rect.y, enable?(item)) draw_item_number(rect, item) end end def draw_item_number(rect, item) draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2) end def update_help @help_window.set_item(item) end def refresh make_item_list create_contents draw_all_items end end class Window_AcceptCombination < Window_HorzCommand def initialize(x, y) super(x, y) self.z = 0 end def window_width return Graphics.width end def col_max return 2 end def make_command_list add_command(EFE::COMBINE_BUTTON, :combine) add_command(EFE::USE_BUTTON, :use) end end class Scene_Combine < Scene_ItemBase def start super create_help_window create_options_window create_category_window create_item_window end def create_options_window @options_window = Window_AcceptCombination.new(0, @help_window.y + @help_window.height) @options_window.set_handler(:combine, method(:combine_ok)) @options_window.set_handler(:use, method(:use_ok)) @options_window.set_handler(:cancel, method(:return_scene)) end def combine_ok @item_window.combining = true @combine = true @category_window.item_window = @item_window @options_window.deactivate.unselect @category_window.activate.select(0) end def use_ok @item_window.combining = false @category_window.item_window = @item_window @options_window.deactivate.unselect @category_window.activate.select(0) end def create_category_window @category_window = Window_ItemKategory.new @category_window.viewport = @viewport @category_window.help_window = @help_window @category_window.y = @help_window.height + @options_window.height @category_window.set_handler(:ok, method(:on_category_ok)) @category_window.set_handler(:cancel, method(:on_category_cancel)) end def create_item_window wy = @category_window.y + @category_window.height wh = Graphics.height - wy @item_window = Window_ItemListe.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.deactivate.unselect end def on_category_ok @item_window.activate @item_window.select_last end def on_category_cancel @item_window.deactivate.unselect @item_window.accepted_items.clear @category_window.deactivate.unselect @options_window.activate.select(0) end def on_item_ok k = [@item_window.item.id, :item] if @item_window.item.is_a?(RPG::Item) k = [@item_window.item.id, :weapon] if @item_window.item.is_a?(RPG::Weapon) k = [@item_window.item.id, :armor] if @item_window.item.is_a?(RPG::Armor) if !@item_window.combining @options_window.deactivate $game_party.last_item.object = item determine_item else if @item_window.accepted_items.include?(k) @item_window.accepted_items.delete(k) else @item_window.accepted_items.push(k) end if @item_window.accepted_items.size == 2 check_combinations(@item_window.accepted_items[0], @item_window.accepted_items[1]) @item_window.refresh else @item_window.refresh @item_window.activate end end end def check_combinations(id1, id2) EFE::COMBINATIONS.each {|i| if (id1 == i[0] || id1 == i[1]) && (id2 == i[0] || id2 == i[1]) @combineitem1 = $data_items[i[0][0]] if i[0][1] == :item @combineitem1 = $data_weapons[i[0][0]] if i[0][1] == :weapon @combineitem1 = $data_armors[i[0][0]] if i[0][1] == :armor @combineitem2 = $data_items[i[1][0]] if i[1][1] == :item @combineitem2 = $data_weapons[i[1][0]] if i[1][1] == :weapon @combineitem2 = $data_armors[i[1][0]] if i[1][1] == :armor @resultitem = $data_items[i[2][0]] if i[2][1] == :item @resultitem = $data_weapons[i[2][0]] if i[2][1] == :weapon @resultitem = $data_armors[i[2][0]] if i[2][1] == :armor @item_window.accepted_items.clear @item_window.refresh @item_window.activate $game_party.lose_item(@combineitem1, 1) $game_party.lose_item(@combineitem2, 1) $game_party.gain_item(@resultitem, 1) messagebox(EFE::SUCCESS, 400) return end } @item_window.accepted_items.clear @item_window.refresh @item_window.activate end def on_item_cancel @item_window.unselect @category_window.activate end def play_se_for_item Sound.play_use_item end def use_item super @item_window.redraw_current_item end end =begin =============================================================================== MessageBox by efeberk Version: RGSS3 =============================================================================== This script will allow to open a new messagebox window only with a text. -------------------------------------------------------------------------------- Call MessageBox in Script: messagebox(text, width) width : width of the window =end class Window_MessageBox < Window_Base def initialize(x, y, text, width) super(x, y, width, fitting_height(1)) refresh(text) end def refresh(text) draw_text(0, 0, contents_width, line_height, text, 1) end end class Scene_MessageBox < Scene_Base def start super create_message_window create_background end def prepare(text, width) @text = text @width = width end def update super if Input.repeat?(:B) || Input.repeat?(:C) SceneManager.return end end def create_message_window @message_window = Window_MessageBox.new(0, 0, @text, @width) @message_window.width = @width @message_window.x = (Graphics.width / 2) - (@message_window.width / 2) @message_window.y = (Graphics.height / 2) - (@message_window.height / 2) end def create_background @background_sprite = Sprite.new @background_sprite.bitmap = SceneManager.background_bitmap @background_sprite.color.set(100, 100, 100, 128) end end def messagebox(text, width) SceneManager.call(Scene_MessageBox) SceneManager.scene.prepare(text, width) endlo script per il peso con le mie piccole modifiche (un fallito tentativo di integrare il primo nel secondo, ma l'unica cosa che realmente sono riuscito a fare è stata togliere "scarta" e inserire "combina" asd:
#======================================================= # Lune Item Weight # Author : Raizen # Script Function: # The scripts adds the function of items having weight on the game, # Basically all item have weights and they can only be carried if below the limit #======================================================= module Lune_Weight #=============================================================================# #========================= General Settings ==============================# #=============================================================================# # To configure a weight for an item, go to Database, # Inside the notetags after choosing an item or equipe, put the following. # <weight n> where n is the weight value, # Example an item weighting 60, # <weight 60> # In case there are no notetags on the Item, the script will # choose a default value which is: Default = 0 # Receive even if over weight? # To prevent from the actor receiving important itens through the game, # you can allow the player to receive itens even if they are over the # weight limit. Receive = false # If false, you need to know how to event the important itens, putting # conditions so that importat itens are not left out without being received. # In case they are over the weight limit, you can lock the character movement. Travar = false # Below the variables that you can use to make the event conditions: # Choose a variable to receive the value of amount of weight carried. Var_C = 8 # Choose a variable to receive the value of amount of the weight limit. Var_M = 9 # With both variables you can event the conditions of receiving items or even # event conditions considering the weight carried and limit. LimiteB = "" # Configure if you are using Lune Item Vault (My vault script) # to have no limite, LimiteB = "" #=============================================================================# #===================== Limit Weight Configuration ========================# #=============================================================================# # Maximum amount of weight carried, # to configure the weight limit, you can put a variable value, a constant value # or strength value. # To put the main actor strength value => :for1 # To put the sum of actors strength value => :all_for # To be the main actor level => :lvl1 # To be the sum of all actors level => :all_lvl # To be a variable => :var # To be a constant => :fix # Exemple Carry_Limit = lvl1 will make only the strength of the # first actor to be put in the formula. Carry_Limit = :var # Now you need to configure the formula of the weight limit, # Exemple, if I want to the limit be 2 times all the party members strength # def self.weight_formula(at) # at * 2 # end # at is the value of the atribute, and the multiply by 2 to get the total limit. # In case its a variable or a constant number, just put the # variable number, or the constant number. # Exemple: # def self.weight_formula(at) # 20 # end # The limit will be variable 20, ou if chosen a constant, will be 20. def self.weight_formula(at) 9 end module EFE #edit by ghost #~ COMBINE_BUTTON = "Combina" #edit by ghost - removed, no need for this #~ USE_BUTTON = " " #edit by ghost - removed, no need for this SUCCESS = "Hai ottenuto un nuovo Oggetto." #edit by ghost #Item name will be colored when you select an item in the list. SELECTED_COLOR = 14 COMBINATIONS = [ #[[item1, :type], [item2, :type], [result, :type]], #[[item_id, :item], [item_id, :item], [item_id, :item]], [[12, :item],[13, :item], [14, :item]], ] end #===================== Vocabulary Settings ==========================# # To Vocab, always put the text between commas '', or "". # Weight name, PS = ' lbs' # Vocab on menu and shop # Weight: Peso = '• PESO:' #Carrying = Carregando = '• TOT:' # If Lune Vault System included # Vault = Bau = '-unused ' #edit by ghost - removed, no need for this # Vocabulary on item window # Use = Usar = 'Usa' # Combine = Combinar = 'Combina' #edit by ghost # Dispose = Descartar = 'Scarta' #remove #=============================================================================# #========================== Here starts the script ===========================# #=============================================================================# #-------------------------------------------------------------------------- # * Calculo do limite de peso #-------------------------------------------------------------------------- def self.weight_limit return unless $game_party.members[0] case Carry_Limit when :for1 weight = weight_formula($game_party.members[0].param(2)) when :all_for weight = 0 for members in 0...$game_party.members.size - 1 weight += weight_formula($game_party.members[members].param(2)) end when :lvl1 weight = weight_formula($game_party.members[0].level) when :all_lvl weight = 0 for members in 0...$game_party.members.size - 1 weight += weight_formula($game_party.members[members].level) end when :fix weight = weight_formula(0) when :var weight = $game_variables[weight_formula(0)] end $game_variables[Var_M] = weight weight end end #============================================================================== # ** Game_Party #------------------------------------------------------------------------------ # Esta classe gerencia o grupo. Contém informações sobre dinheiro, itens. # A instância desta classe é referenciada por $game_party. #============================================================================== class Game_Party < Game_Unit alias :lune_weight_gain :gain_item #-------------------------------------------------------------------------- # * Quantidade de itens carregados mais os itens equipados #-------------------------------------------------------------------------- def carried_items @all_carried_items = 0 all_items.each {|item| get_weight(item)} for i in 0...4 members.each {|actor| @all_carried_items += calc_weight(actor.equips[i], 1)} end $game_variables[Lune_Weight::Var_C] = @all_carried_items @all_carried_items end #-------------------------------------------------------------------------- # * Calculo do peso de um item no inventário #-------------------------------------------------------------------------- def get_weight(item) if item.note =~ /<weight (.*)>/i @all_carried_items += $1.to_i * item_number(item) else @all_carried_items += Lune_Weight::Default * item_number(item) end end #-------------------------------------------------------------------------- # * Calculo do peso de um item relativo a quantidade #-------------------------------------------------------------------------- def calc_weight(item, amount) return 0 unless item if item.note =~ /<weight (.*)>/i carried_itens = $1.to_i * amount else carried_itens = Lune_Weight::Default * amount end carried_itens end #-------------------------------------------------------------------------- # * Acrescentar item (redução) # item : item # amount : quantia alterada # include_equip : incluir itens equipados #-------------------------------------------------------------------------- def gain_item(item, amount, include_equip = false) if Lune_Weight::Receive lune_weight_gain(item, amount, include_equip = false) return end return if item == nil weight = calc_weight(item, amount) + carried_items while weight > Lune_Weight.weight_limit amount -= 1 weight = calc_weight(item, amount) + carried_items return if amount == 0 end lune_weight_gain(item, amount, include_equip = false) end end #============================================================================== # ** Scene_Shop #------------------------------------------------------------------------------ # Esta classe executa o processamento da tela de loja. #============================================================================== class Scene_Shop < Scene_MenuBase alias :lune_max_buy :max_buy #-------------------------------------------------------------------------- # * Aquisição do número máximo disponível para compra #-------------------------------------------------------------------------- def max_buy max = lune_max_buy weight = $game_party.calc_weight(@item, max) + $game_party.carried_items while weight > Lune_Weight.weight_limit && max > 0 max -= 1 weight = $game_party.calc_weight(@item, max) + $game_party.carried_items end max end #-------------------------------------------------------------------------- # * Criação da janela de ajuda. #-------------------------------------------------------------------------- def create_help_window @help_window = Window_Weight_Help.new @help_window.viewport = @viewport @get_item_num = $game_party.carried_items end #-------------------------------------------------------------------------- # * Atualização da janela de peso #-------------------------------------------------------------------------- def update super if @get_item_num != $game_party.carried_items @help_window.refresh @get_item_num = $game_party.carried_items end end end #============================================================================== # ** Window_ShopBuy #------------------------------------------------------------------------------ # Esta janela exibe bens compráveis na tela de loja. #============================================================================== class Window_ShopBuy < Window_Selectable alias :lune_enable_item :enable? #-------------------------------------------------------------------------- # * Definição de habilitação do item # item : item #-------------------------------------------------------------------------- def enable?(item) return false if $game_party.calc_weight(item, 1) + $game_party.carried_items > Lune_Weight.weight_limit lune_enable_item(item) end end #============================================================================== # ** Window_Help #------------------------------------------------------------------------------ # Esta janela exibe explicação de habilidades e itens e outras informações. #============================================================================== class Window_Weight_Help < Window_Base include Lune_Weight #-------------------------------------------------------------------------- # * Inicialização do objeto # line_number : número de linhas #-------------------------------------------------------------------------- def initialize(line_number = 2, bau = false) @bau = bau super(0, 0, Graphics.width, fitting_height(line_number)) self.windowskin = Cache.system("Window-2") end #-------------------------------------------------------------------------- # * Configuração de texto # text : texto #-------------------------------------------------------------------------- def set_text(text) if text != @text @text = text refresh end end def on_bau(bau = false) @bau = bau end #-------------------------------------------------------------------------- # * Limpeza #-------------------------------------------------------------------------- def clear set_text(" ") end #-------------------------------------------------------------------------- # * Definição de item # item : habilidades, itens, etc. #-------------------------------------------------------------------------- def set_item(item) @item = item set_text(item ? item.description : "") end #-------------------------------------------------------------------------- # * Renovação #-------------------------------------------------------------------------- def refresh contents.clear draw_text_ex(4, 0, @text) if @item text = Peso + $game_party.calc_weight(@item,1).to_s + PS draw_text(515, 0, 200, line_height, text, 0) #~ if @bau == true #~ LimiteB == "" ? text_lim = "????" : text_lim = LimiteB #~ text = Bau + $game_party.items_on_vault.to_s + "/" + text_lim.to_s + PS #~ else text = Carregando + $game_party.carried_items.to_s + "/" + Lune_Weight.weight_limit.to_s + PS end draw_text(- 25, line_height, Graphics.width, line_height, text, 2) end end #~ end #============================================================================== # ** Game_Player #------------------------------------------------------------------------------ # Esta classe gerencia o jogador. # A instância desta classe é referenciada por $game_player. #============================================================================== class Game_Player < Game_Character alias :lune_move_by :move_by_input #-------------------------------------------------------------------------- # * Processamento de movimento através de pressionar tecla #-------------------------------------------------------------------------- def move_by_input return if Lune_Weight::Travar && $game_party.carried_items > Lune_Weight.weight_limit lune_move_by end end #============================================================================== # ** Scene_Item #------------------------------------------------------------------------------ # Esta classe executa o processamento da tela de item. #============================================================================== class Scene_Item < Scene_ItemBase alias raizen_combine_start start def start raizen_combine_start @combine_item = Window_Item_Combine.new @combine_item.viewport = @viewport @combine_item.set_handler(:use, method(:command_use)) #~ @combine_item.set_handler(:discard, method(:command_discard)) #no need @combine_item.set_handler(:combine, method(:command_combine)) #edit by ghost end def on_item_ok if item == nil @item_window.activate return end if @combine_item.close? @combine_item.open @combine_item.activate else determine_item end end def update super if @number_window and @number_window.nitens == true @number_window.nitens = false @combine_item.close @item_window.refresh @help_window.refresh @item_window.activate end if Input.trigger?(:B) and !@combine_item.close? Sound.play_cancel if @number_window and !@number_window.close? @number_window.close @combine_item.activate else @combine_item.close @item_window.activate end end end def command_use determine_item end #~ def command_discard #~ if @number_window and !@number_window.close? #~ @combine_item.activate #~ return #~ end #~ @number_window = Window_NumberInputInner.new(Window_Base.new(0,0,0,0), item, @item_window.index) #~ @number_window.viewport = @viewport #~ @number_window.start #~ end def create_help_window @help_window = Window_Weight_Help.new @help_window.viewport = @viewport end end def command_combine #edit by ghost SceneManager.call(Scene_Combine)# integrare la combinazione di oggetti # edit by ghost end #edit by ghost #============================================================================== # ** Window_MenuStatus #------------------------------------------------------------------------------ # Esta janela exibe os parâmetros dos membros do grupo na tela de menu. #============================================================================== class Window_Item_Combine < Window_Command include Lune_Weight #-------------------------------------------------------------------------- # * Inicialização do objeto #-------------------------------------------------------------------------- def initialize super(0, 0) self.z = 9999 self.x = (Graphics.width / 2) - (window_width / 2) self.y = Graphics.height / 2 self.openness = 0 end #-------------------------------------------------------------------------- # * Aquisição da largura da janela #-------------------------------------------------------------------------- def window_width return 160 end #-------------------------------------------------------------------------- # * Criação da lista de comandos #-------------------------------------------------------------------------- def make_command_list add_main_commands end #-------------------------------------------------------------------------- # * Adição dos comandos principais #-------------------------------------------------------------------------- def add_main_commands add_command(Usar, :use, true) add_command(Combinar, :combine, true) #edit by ghost #~ add_command(Descartar, :discard, true) end end #============================================================================== # ** Scene_ItemBase #------------------------------------------------------------------------------ # Esta é a superclasse das classes que executam as telas de itens e # habilidades. #============================================================================== class Scene_ItemBase < Scene_MenuBase def determine_item @combine_item.close if item.is_a?(RPG::Item) and item.for_friend? show_sub_window(@actor_window) @actor_window.select_for_item(item) else item.is_a?(RPG::Item) ? use_item : Sound.play_buzzer activate_item_window end end end #============================================================================== # ** Window_NumberInputInner #------------------------------------------------------------------------------ # Esta janela é utilizada para o comando de eventos [Armazenar Número] #============================================================================== class Window_NumberInputInner < Window_NumberInput attr_accessor :nitens def initialize(message_window, item, index_2) @index_2 = index_2 @item = item @get_lost_itens = 0 super(message_window) end #-------------------------------------------------------------------------- # * Inicialização do processo #-------------------------------------------------------------------------- def start @digits_max = 2 @number = @get_lost_itens @number = [[@number, 0].max, 10 ** @digits_max - 1].min @index = 0 update_placement create_contents refresh open activate end #-------------------------------------------------------------------------- # * Atualização da posição da janela #-------------------------------------------------------------------------- def update_placement self.width = @digits_max * 20 + padding * 2 self.height = fitting_height(1) self.x = (Graphics.width - width) / 2 self.y = Graphics.height/2 - height self.z = 150 end #-------------------------------------------------------------------------- # * Definição de resultado ao pressionar o botão de confirmação #-------------------------------------------------------------------------- def process_ok Sound.play_ok number = $game_party.item_number(@item) if @number <= number make_icon end deactivate @nitens = true close end def make_icon @nitens = true $game_party.lose_item(@item, @number) end end #============================================================================== # ** Window_ItemList #------------------------------------------------------------------------------ # Esta janela exibe a lista de itens possuidos na tela de itens. #============================================================================== class Window_ItemList < Window_Selectable #-------------------------------------------------------------------------- # * Definição de habilitação do item # item : item #-------------------------------------------------------------------------- def enable?(item) true end end $lune_weight_script = truee se serve, il menu single di Dark Paladin:
############################################################################### # Dark Paladin Single Character Menu v1.2 # Platform: VX Ace # Author: Dark Paladin # Description: A menu system for a single Character. # Terms of use: You MAY use this script for your Non-commercial Projects. # You MAY use this script for Commercial projects without my permission. # Credit is appreciated but not needed. # This script requires: N/A Cachext Included ############################################################################### #============================================================================== # CONFIG AREA #============================================================================== module DKP_Menu_Config Enable_Background = true # true/false Use Background? Menu_Background = "Menu" # Set the name of the background pic # Place Image in "Graphics/DPmenu/Main/" Or change it in the cachext module. Status_Opacity = 0 # Status Window Opacity Help_Opacity = 0 # Item Help Window Opacity Item_Opacity = 0 # Item Window Opacity Command_Opacity = 0 # Command Window Opacity CategoryW_Opacity = 0 # Category Window Opacity end module Cachext #-------------------------------------------------------------------------- # DKP Cachext # Do not edit unless you really know what your doing! # Platform: VX Ace # Author: Dark paladin # Description: Module for menu background. # ------------------------------------------------------------------------- #-------------------------------------------------------------------------- # *Graphics #-------------------------------------------------------------------------- #You can edit the stuff in purple between the "" to change folder location. #-------------------------------------------------------------------------- # *Menu Graphics Folder #-------------------------------------------------------------------------- def self.dpmenu(filename)# You can change the Folder names here for background image. load_bitmap("Graphics/DPmenu/Main/", filename) end #============================================================================== # END CONFIG AREA #============================================================================== #-------------------------------------------------------------------------- # * Load Bitmap #-------------------------------------------------------------------------- def self.load_bitmap(folder_name, filename, hue = 0) @cachext ||= {} if filename.empty? empty_bitmap elsif hue == 0 normal_bitmap(folder_name + filename) else hue_changed_bitmap(folder_name + filename, hue) end end #-------------------------------------------------------------------------- # * Create Empty Bitmap #-------------------------------------------------------------------------- def self.empty_bitmap Bitmap.new(32, 32) end #-------------------------------------------------------------------------- # * Create/Get Normal Bitmap #-------------------------------------------------------------------------- def self.normal_bitmap(path) @cachext = Bitmap.new(path) unless include?(path) @cachext end #-------------------------------------------------------------------------- # * Create/Get Hue-Changed Bitmap #-------------------------------------------------------------------------- def self.hue_changed_bitmap(path, hue) key = unless include?(key) @cachext = normal_bitmap(path).clone @cachext.hue_change(hue) end @cachext end #-------------------------------------------------------------------------- # * Check Cache Existence #-------------------------------------------------------------------------- def self.include?(key) @cachext && !@cachext.disposed? end #-------------------------------------------------------------------------- # * Clear Cache #-------------------------------------------------------------------------- def self.clear @cachext ||= {} @cachext.clear GC.start end end #============================================================================== # ** Window_ItemCategory #------------------------------------------------------------------------------ # This window is for selecting a category of normal items and equipment # on the item screen or shop screen. #============================================================================== class Window_ItemCategory < Window_HorzCommand include DKP_Menu_Config #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader :item_window #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 0) end #-------------------------------------------------------------------------- # * Get Window Width #-------------------------------------------------------------------------- def window_width 244 end #-------------------------------------------------------------------------- # * Get Digit Count #-------------------------------------------------------------------------- def col_max return 2 end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super @item_window.category = current_symbol if @item_window end #-------------------------------------------------------------------------- # * Create Command List #-------------------------------------------------------------------------- def make_command_list add_command(Vocab::item, :item) add_command(Vocab::key_item, :key_item) end #-------------------------------------------------------------------------- # * Set Item Window #-------------------------------------------------------------------------- def item_window=(item_window) @item_window = item_window update end end #============================================================================== # ** Window_MenuStatus #------------------------------------------------------------------------------ # This window displays party member status on the menu screen. #============================================================================== class Window_MenuStatus < Window_Selectable include DKP_Menu_Config #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader :pending_index # Pending position (for formation) #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(x, y) super(0, 0, 640, 480) @pending_index = -1 self.opacity = Status_Opacity refresh end #-------------------------------------------------------------------------- # * Get Window Width #-------------------------------------------------------------------------- def window_width return 300 end #-------------------------------------------------------------------------- # * Get Window Height #-------------------------------------------------------------------------- def window_height return 370 end #-------------------------------------------------------------------------- # * Get Number of Items #-------------------------------------------------------------------------- def item_max return 1 end #-------------------------------------------------------------------------- # * Get Item Height #-------------------------------------------------------------------------- def item_height (height - standard_padding * 2) / 4 end #-------------------------------------------------------------------------- # Simple Status #-------------------------------------------------------------------------- def draw_actor_hp(actor, x, y, width = 200) draw_gauge(x, y, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2) change_color(system_color) draw_text(x, y, 0, line_height, Vocab::hp_a) #~ draw_current_and_max_values(x, y, width, actor.hp, actor.mhp, #~ hp_color(actor), normal_color) end def draw_actor_name(actor, x, y, width = 140) change_color(hp_color(actor)) draw_text(x, y, width / 2, line_height, actor.name) end def draw_actor_simple_status(actor, x, y) draw_actor_name(actor, 461, 65) #188, 25 draw_actor_icons(actor, 0, y + line_height * 8) draw_actor_hp(actor, 7, 60) end #-------------------------------------------------------------------------- # * Draw Item #-------------------------------------------------------------------------- def draw_item(index) actor = $game_party.members enabled = $game_party.battle_members.include?(actor) rect = item_rect(index) draw_item_background(index) draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled) draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 2) end #-------------------------------------------------------------------------- # * Draw Background for Item #-------------------------------------------------------------------------- def draw_item_background(index) if index == @pending_index contents.fill_rect(item_rect(index), pending_color) end end #-------------------------------------------------------------------------- # * Processing When OK Button Is Pressed #-------------------------------------------------------------------------- def process_ok super $game_party.menu_actor = $game_party.members end #-------------------------------------------------------------------------- # * Restore Previous Selection Position #-------------------------------------------------------------------------- def select_last select($game_party.menu_actor.index || 0) end #-------------------------------------------------------------------------- # * Set Pending Position (for Formation) #-------------------------------------------------------------------------- def pending_index=(index) last_pending_index = @pending_index @pending_index = index redraw_item(@pending_index) redraw_item(last_pending_index) end end #============================================================================== # ** Window_Help #------------------------------------------------------------------------------ # This window shows skill and item explanations along with actor status. #============================================================================== class DKPWindow_Help < Window_Base include DKP_Menu_Config #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(line_number = 4) super(0, 0, 244, fitting_height(line_number)) self.opacity = Help_Opacity end #-------------------------------------------------------------------------- # * Set Text #-------------------------------------------------------------------------- def set_text(text) if text != @text @text = text refresh end end #-------------------------------------------------------------------------- # * Clear #-------------------------------------------------------------------------- def clear set_text("") end #-------------------------------------------------------------------------- # * Set Item # item : Skills and items etc. #-------------------------------------------------------------------------- def set_item(item) set_text(item ? item.description : "") end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh contents.clear draw_text_ex(0, 0, word_wrapping(@text)) end #-------------------------------------------------------------------------- # * Word Wrap #-------------------------------------------------------------------------- def word_wrapping(text, pos = 0) current_text_position = 0 for i in 0..(text.length - 1) if text == "\n" current_text_position = 0 next end current_text_position += contents.text_size(text).width if (pos + current_text_position) >= (contents.width) current_element = i while(text != " ") break if current_element == 0 current_element -= 1 end temp_text = "" for j in 0..(text.length - 1) temp_text += text temp_text += "\n" if j == current_element end text = temp_text i = current_element current_text_position = 0 end end return text end end #============================================================================== # ** Window_Gold #------------------------------------------------------------------------------ # This window displays the party's gold. #============================================================================== class Window_Gold < Window_Base include DKP_Menu_Config #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 0, window_width, fitting_height(1)) self.opacity = 0 self.z = 1000 refresh end #-------------------------------------------------------------------------- # * Get Window Width #-------------------------------------------------------------------------- def window_width return 160 end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh contents.clear draw_currency_value(value, currency_unit, 4, 0, contents.width - 8) end #-------------------------------------------------------------------------- # * Get Party Gold #-------------------------------------------------------------------------- def value $game_party.gold end #~ #-------------------------------------------------------------------------- #~ # Get Currency Unit #~ #-------------------------------------------------------------------------- def currency_unit Vocab::currency_unit end #~ #-------------------------------------------------------------------------- #~ # * Open Window #~ #-------------------------------------------------------------------------- def open refresh super end end class Window_ItemList < Window_Selectable include DKP_Menu_Config #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(x, y, width, height) super @category = :none @data = self.opacity = Item_Opacity end #-------------------------------------------------------------------------- # * Set Category #-------------------------------------------------------------------------- def category=(category) return if @category == category @category = category refresh self.oy = 0 end #-------------------------------------------------------------------------- # * Get Digit Count #-------------------------------------------------------------------------- def col_max return 1 end #-------------------------------------------------------------------------- # * Get Number of Items #-------------------------------------------------------------------------- def item_max @data ? @data.size : 1 end #-------------------------------------------------------------------------- # * Get Item #-------------------------------------------------------------------------- def item @data && index >= 0 ? @data : nil end #-------------------------------------------------------------------------- # * Get Activation State of Selection Item #-------------------------------------------------------------------------- def current_item_enabled? enable?(@data) end #-------------------------------------------------------------------------- # * Include in Item List? #-------------------------------------------------------------------------- def include?(item) case @category when :item item.is_a?(RPG::Item) && !item.key_item? 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_item_list @data = $game_party.all_items.select {|item| include?(item) } @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 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_item_list create_contents draw_all_items end end #============================================================================== # ** Window_MenuCommand #------------------------------------------------------------------------------ # This command window appears on the menu screen. #============================================================================== class Window_MenuCommand < Window_Command include DKP_Menu_Config #-------------------------------------------------------------------------- # * Initialize Command Selection Position (Class Method) #-------------------------------------------------------------------------- def self.init_command_position @@last_command_symbol = nil end #-------------------------------------------------------------------------- # * Get Digit Count #-------------------------------------------------------------------------- def col_max return 3 end #-------------------------------------------------------------------------- # * Get Spacing for Items Arranged Side by Side #-------------------------------------------------------------------------- def spacing return 100 end #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, Graphics.height- 47) activate select_last end #-------------------------------------------------------------------------- # * Get Window Width #-------------------------------------------------------------------------- def window_width return 640 #544 end #-------------------------------------------------------------------------- # * Get Number of Lines to Show #-------------------------------------------------------------------------- def visible_line_number return 1 end #-------------------------------------------------------------------------- # * Create Command List #-------------------------------------------------------------------------- def make_command_list add_main_commands add_save_command add_game_end_command end #-------------------------------------------------------------------------- # * Add Main Commands to List #-------------------------------------------------------------------------- def add_main_commands add_command(Vocab::item, :item, main_commands_enabled) end #-------------------------------------------------------------------------- # * Add Save to Command List #-------------------------------------------------------------------------- def add_save_command add_command(Vocab::save, :save, save_enabled) end #-------------------------------------------------------------------------- # * Add Exit Game to Command List #-------------------------------------------------------------------------- def add_game_end_command add_command(Vocab::game_end, :game_end) end #-------------------------------------------------------------------------- # * Get Activation State of Main Commands #-------------------------------------------------------------------------- def main_commands_enabled $game_party.exists end #-------------------------------------------------------------------------- # * Get Activation State of Save #-------------------------------------------------------------------------- def save_enabled !$game_system.save_disabled end #-------------------------------------------------------------------------- # * Processing When OK Button Is Pressed #-------------------------------------------------------------------------- def process_ok @@last_command_symbol = current_symbol super end #-------------------------------------------------------------------------- # * Restore Previous Selection Position #-------------------------------------------------------------------------- def select_last select_symbol(@@last_command_symbol) end end class Game_Interpreter def command_351 return if $game_party.in_battle SceneManager.call(Scene_Item) Window_MenuCommand::init_command_position Fiber.yield end end class Scene_Map < Scene_Base def call_menu SceneManager.call(Scene_Item) Window_MenuCommand::init_command_position end end #============================================================================== # ** Scene_Item #------------------------------------------------------------------------------ # This class performs the item screen processing. #============================================================================== class Scene_Item < Scene_ItemBase include DKP_Menu_Config #-------------------------------------------------------------------------- # * Start Processing #-------------------------------------------------------------------------- def start super create_help_window create_status_window if Enable_Background != false then create_Image_Background end #~ create_gold_window create_command_window create_category_window create_item_window #@category_window.deactivate end #-------------------------------------------------------------------------- # * Create Category Window #-------------------------------------------------------------------------- def create_category_window @category_window = Window_ItemCategory.new @category_window.viewport = @viewport @category_window.help_window = @help_window @category_window.y = 120 @category_window.opacity = CategoryW_Opacity @category_window.set_handler(:ok, method(:on_category_ok)) @category_window.set_handler(:cancel, method(:return_item)) end #-------------------------------------------------------------------------- # * Create Item Window #-------------------------------------------------------------------------- def create_item_window @item_window = Window_ItemList.new(0, 170, 244, 270) @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 #-------------------------------------------------------------------------- # * Create Command Window #-------------------------------------------------------------------------- def create_command_window @command_window = Window_MenuCommand.new @command_window.opacity = Command_Opacity @command_window.set_handler(:item, method(:command_item)) @command_window.set_handler(:save, method(:command_save)) @command_window.set_handler(:game_end, method(:command_game_end)) @command_window.set_handler(:cancel, method(:return_scene)) end #-------------------------------------------------------------------------- # * Deactivate category #-------------------------------------------------------------------------- def return_item @category_window.deactivate @command_window.activate @command_window.select_last end #-------------------------------------------------------------------------- # * Command #-------------------------------------------------------------------------- def command_save SceneManager.call(Scene_Save) end #-------------------------------------------------------------------------- # * Command #-------------------------------------------------------------------------- def command_game_end SceneManager.call(Scene_End) end #-------------------------------------------------------------------------- # * Command #-------------------------------------------------------------------------- def command_item @category_window.activate @command_window.deactivate end #-------------------------------------------------------------------------- # * Create Gold Window #-------------------------------------------------------------------------- #~ def create_gold_window #~ @gold_window = Window_Gold.new #~ @gold_window.x = Graphics.width - @gold_window.width #~ @gold_window.y = Graphics.height - 100 #~ end #-------------------------------------------------------------------------- # * Create Background Image #-------------------------------------------------------------------------- def create_Image_Background bitmap = Cachext.dpmenu(Menu_Background) @background_sprite.bitmap = bitmap end #-------------------------------------------------------------------------- # * Create Status Window #-------------------------------------------------------------------------- def create_status_window @status_window = Window_MenuStatus.new(244, 0) end #-------------------------------------------------------------------------- # * Create Help Window #-------------------------------------------------------------------------- def create_help_window @help_window = DKPWindow_Help.new @help_window.viewport = @viewport end #-------------------------------------------------------------------------- # * Category #-------------------------------------------------------------------------- def on_category_ok @item_window.activate @item_window.select_last end #-------------------------------------------------------------------------- # * Item #-------------------------------------------------------------------------- def on_item_ok $game_party.last_item.object = item determine_item end def determine_item if item.for_friend? show_sub_window(@actor_window) @actor_window.select_for_item(item) else use_item activate_item_window end end def cursor_left? @item_window.index % 1 == 0 end def show_sub_window(window) width_remain = Graphics.width - window.width window.x = cursor_left? ? width_remain : 0 @viewport.rect.x = @viewport.ox = cursor_left? ? 0 : window.width @viewport.rect.width = width_remain window.show.activate end #-------------------------------------------------------------------------- # * Item #-------------------------------------------------------------------------- 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 endricapitolando, mi servirebbe che la funziona per combinare gli oggetti "lavori" nello stesso menu in cui selezioniamo gli oggetti, piuttosto che aprirne uno nuovo;
il secondo edit, invece, più banale, se possibile mi servirebbe che anche avendo più copie di un oggetto (esempio 2 scatole di munizoni) il peso venga calcolato sempre come se si trattasse di uno solo.
e quest'è... penso che per uno scripter esperto sia roba di 30 secondi, per me è arabo, gia sono sorpreso di quel poco che ho fatto XDDDD
quindi nulla, ringrazio in anticipo chiunque vorrà darmi una mano, anche a nome della mia collega :)
http://imagizer.imageshack.us/a/img10/3981/ghostproductionusebar.png
http://imagizer.imageshack.us/a/img593/9448/ghostrideruserbar.png
Visita Il Mio Canale di Youtube - Tutorial per Principianti e Amatori, video recensioni, let's play e altro ancora sul mondo di Rpg Maker.
Link to comment
Share on other sites
16 answers to this question
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now