Dynamic Currencies
Publicado em 4 de setembro de 2012.Dynamic Currencies é um script que foi concebido por SephirothSpawn para simular várias moedas e taxas de câmbios opcionais, em um jogo do RPG Maker XP. Com ele, você pode selecionar os valores monetários iniciais, bem como modificar seus valores durante o jogo.
A apresentação deste script parece mais um texto de Economia heheheh!
Você tem a opção de usar moedas “Dynamic”, onde o seu grupo vai carregar mais de uma moeda, ou uma a forma não-dinâmica, onde o registro de apenas uma moeda será realizada em um tempo. Nesta forma, quando a moeda é trocada, sua antiga moeda será automaticamente convertida para a nova moeda, baseada na taxa de câmbio atual.
Também tem a opção deixar o script afetando apenas os drops de gold dos monstros, bem como preços das lojas, onde o preço normal é multiplicado pelo valor da moeda. Isto pode ser útil para prevenir que o jogador ir para a batalha em uma zona de alto valor, a fim de abusar nos drops e ao comprar e vender itens.
Como o “Value” Funciona
Lower Value significa que a moeda vale menos. Um valor de 0,5 significaria que a cada 2 de alguma moeda específica vale 1 da moeda básica.
Fórmula Para Conversões
Indo de N da moeda A com valor X para a moeda B com valor Y:
currency_b = (value_x / 1.0) / (value_y / 1.0) * N
Instruções
Você precisa do SDK para usar este script. Coloque o código do Dynamic Currencies abaixo dele e acima do “Main”.
Para personalize suas moedas, consulte as instruções de personalização nos comentários do script. Consulte a lista de sintaxe para mais instruções.
#==============================================================================
# ** Dynamic Currencies
#------------------------------------------------------------------------------
# SephirothSpawn
# Version 1
# 2006-09-10
#------------------------------------------------------------------------------
# * Description :
#
# This script was designed to simulate multiple currencies and optional
# exchange rates. You may select starting currency values as well as modify
# their values during game play. You have the option to use "Dynamic"
# currencies, where your party will carry more than one currency, or a
# non-dynamic form, where the record of only one currency will be held at a
# time. In this form, when currency is exchanged, your old currency will
# automatically be converted to the new currency with their current exchange
# rates.
#
# You also have the option of affect monster gold drops, as well as
# shop prices, where the normal price is multipled by the currency value.
# This prevents people to battle in a high valued zone in order to abuse
# monster drops, as well as buying and selling to gain gold.
#
# ** How the "Value" Works. **
#
# Lower Value means that the currency is worth less. A value of 0.5 would
# mean that every 2 of that specific currency is 1 of the basic currency.
#
# ** Formula For Conversions:
#
# Going From N Currency A with Value X to Currency B with Value Y
#
# currency_b = (value_x / 1.0) / (value_y / 1.0) * N
#------------------------------------------------------------------------------
# * Instructions :
#
# Place The Script Below the SDK and Above Main.
# To Customize your currencies, refer to the customization instructions.
# Refer to syntax listing for further instructions.
#------------------------------------------------------------------------------
# * Customization :
#
# Setting Currency Starting Values (0 as currency name for default gold)
# - Exchange_Rates = {'currency_name' => value, ...}
#
# Setting Dynamic Currency Flag (See Description)
# - Dynamic = ture (DYNAMIC) or false (NON-DYNAMIC)
#
# Affect Monster Drops
# - Affect_Monster_Drops = true (ON) or false (OFF)
#
# Affect Shop Values
# - Affect_Shop_Values = true (ON) or false (OFF)
#------------------------------------------------------------------------------
# * Syntax :
#
# Reading or Modifing Currency Values
# - $game_currencies.exchange_rates['currency_name']
#
# Switching Current Currency
# - $game_currencies.switch_currency('currency_name')
#
# Reading Currency Exchange Rate (NOT VALUE)
# - $game_currencies.exchange_rate('currency_name')
#
# Retrieving Current Currency Name
# - $game_currencies.currency_name
#
# Retrieving Number of Certain Currency Saved (Dynamic Use Only)
# - $game_party.currency_number('currency_name')
#
# Exchanging From Currency A to B (Dynamic Use Only)
# - $game_party.exchange_currency('currency_a', 'currency_b', amount)
#
# * At any time, 0 as a 'currency_name' will reflect the default RMXP gold.
#==============================================================================
#------------------------------------------------------------------------------
# * SDK Log Script
#------------------------------------------------------------------------------
SDK.log('Dynamic Currencies', 'SephirothSpawn', 1, '2006-09-10')
#------------------------------------------------------------------------------
# * Begin SDK Enable Test
#------------------------------------------------------------------------------
if SDK.state('Dynamic Currencies')
#==============================================================================
# ** Dynamic_Currencies
#==============================================================================
module Dynamic_Currencies
#--------------------------------------------------------------------------
# * Exchange Rates
#
# ~ Exchange_Rates = { currency_name => value , ...}
#
# ** Formula For Conversions:
#
# Going From N Currency A with Value X to Currency B with Value Y
#
# (value_x / 1.0) / (value_y / 1.0) * N
#
# ** Lower the value use more money, Higher value use less money.
# ** These are only starting values, as you can change them mid-game
#--------------------------------------------------------------------------
Exchange_Rates = {
0 => 1.0,
'Dyn Cur A' => 1.4,
'Dyn Cur B' => 0.75,
'Dyn Cur C' => 0.50
}
#--------------------------------------------------------------------------
# * Dynamic
#
# ~ When True
# When you switch from currency a to b, a is saved and all b currency
# is pulled from the memory. This allows the actors to hold more than
# one type of currency at a time.
#
# ~ When False
# When you switch from currency a to b all a will be turned to b,
# leaving no record for the a amount.
#--------------------------------------------------------------------------
Dynamic = false
#--------------------------------------------------------------------------
# * Affect Monster Drops
#
# ~ When True
# Monsters gold drops will be multipled by the current currency value
#
# ~ When False
# Monsters gold dropws will remain unaffected
#--------------------------------------------------------------------------
Affect_Monster_Drops = true
#--------------------------------------------------------------------------
# * Affect Shop Values
#
# ~ When True
# Shop prices will bemultipled by the current currency value
#
# ~ When False
# Shop prices will remain unaffected
#--------------------------------------------------------------------------
Affect_Shop_Values = true
end
#==============================================================================
# ** Game_Currencies
#==============================================================================
class Game_Currencies
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :current_currency
attr_accessor :exchange_rates
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Sets Starting Exchange Rates
@exchange_rates = Dynamic_Currencies::Exchange_Rates.dup
# Sets Current Currency Flag
@current_currency = 0
end
#--------------------------------------------------------------------------
# * Switch Currency
#--------------------------------------------------------------------------
def switch_currency(currency_name)
# Stop if same currency
return if @current_currency == currency_name
# Switch Currency In Party
$game_party.switch_currency(currency_name)
# Switch Current Currency Flag
@current_currency = currency_name
# Switch Currency Name
$data_system.words.gold = currency_name
end
#--------------------------------------------------------------------------
# * Exchange Rate
#--------------------------------------------------------------------------
def exchange_rate(currency_name = @current_currency)
# Sets Default Currency Value if not specified
unless @exchange_rates.has_key?(currency_name)
@exchange_rates[currency_name] = 1.0
end
# Return Currency Value
return @exchange_rates[currency_name] / 1.0
end
#--------------------------------------------------------------------------
# * Currency Name
#--------------------------------------------------------------------------
def currency_name
if @current_currency == 0
return load_data("Data/System.rxdata").words.gold
end
return @current_currency
end
end
#==============================================================================
# ** Game_Party
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_dyncur_gmprty_init initialize
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Original Initialization
seph_dyncur_gmprty_init
# Saves Currency Counter (Used For Dynamic Currencies)
@dynamic_currencies = {}
end
#--------------------------------------------------------------------------
# * Currency Number
#--------------------------------------------------------------------------
def currency_number(currency = 0)
# If Current Currency
return @gold if currency == @current_currency
# Sets Currency to 0 if none saved
unless @dynamic_currencies.has_key?(currency)
@dynamic_currencies[currency] = 0
end
# Returns Currency Value
return @dynamic_currencies[currency]
end
#--------------------------------------------------------------------------
# * Switch Currency
#--------------------------------------------------------------------------
def switch_currency(new_currency = 0)
# If Dynamic Currencies
if Dynamic_Currencies::Dynamic
# Saves Current Currency
if @dynamic_currencies.has_key?($game_currencies.current_currency)
@dynamic_currencies[$game_currencies.current_currency] += @gold
else
@dynamic_currencies[$game_currencies.current_currency] = @gold
end
# Switches to New Currency
@gold = currency_number(new_currency)
# If Non-Dynamic Currencies
else
# Collect Current Currency Exchage Rate
c_rate = $game_currencies.exchange_rate
n_rate = $game_currencies.exchange_rate(new_currency)
# Switch Gold
@gold = Integer(@gold * c_rate / n_rate)
end
end
#--------------------------------------------------------------------------
# * Exchange Currency
#--------------------------------------------------------------------------
def exchange_currency(currency_a, currency_b, amount = nil)
# Returning If Same Currency Or Non-Dynamic Currencies
return if currency_a == currency_b || !Dynamic_Currencies::Dynamic
# If Amount is Nil (ALL)
if amount.nil?
# Get All Currency A Value
amount = currency_number(currency_a)
end
# Return if amount of currency a is 0
return if amount == 0
# Cap Amount if greater than amount saved
amount = [amount, currency_number(currency_a)].min
# Collects Exchange Rates
a_rate = $game_currencies.exchange_rate(currency_a)
b_rate = $game_currencies.exchange_rate(currency_b)
# Start Currency B Counter if none exist
unless @dynamic_currencies.has_key?(currency_b)
@dynamic_currencies[currency_b] = 0
end
# Subtracts Currency A Amount
@dynamic_currencies[currency_a] -= amount
# Increased Currency B Amount
@dynamic_currencies[currency_b] += (amount * a_rate / b_rate)
# If Either Currency is Active Currency, effect current gold count
if currency_a == @current_currency
@gold -= amount
elsif currency_b == @current_currency
@gold += (amount * a_rate / b_rate)
end
end
end
#==============================================================================
# ** Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# * Get Gold
#--------------------------------------------------------------------------
alias seph_dyncur_gmeny_gold gold
def gold
# Collect Original Gold Value
n = seph_dyncur_gmeny_gold
# If Dynamic Enemy Gold Drops
if Dynamic_Currencies::Affect_Monster_Drops
# Calulate Currency Drop
n = Integer(n * $game_currencies.exchange_rate)
end
# Return Gold Drop
return n
end
end
#==============================================================================
# ** RPG::Item
#==============================================================================
class RPG::Item
#--------------------------------------------------------------------------
# * Price
#--------------------------------------------------------------------------
if @seph_dyncur_price.nil?
alias seph_dyncur_rpgi_price price
@seph_dyncur_price = true
end
def price
# Collect Original Price
n = seph_dyncur_rpgi_price
return n if $game_currencies.nil?
# If Dynamic Shop Prices
if Dynamic_Currencies::Affect_Shop_Values
# Calulate Shop Price
n = Integer(n * $game_currencies.exchange_rate)
end
# Return Shop Price
return n
end
end
#==============================================================================
# ** RPG::Weapon
#==============================================================================
class RPG::Weapon
#--------------------------------------------------------------------------
# * Price
#--------------------------------------------------------------------------
alias seph_dyncur_rpgw_price price
def price
# Collect Original Price
n = seph_dyncur_rpgw_price
return n if $game_currencies.nil?
# If Dynamic Shop Prices
if Dynamic_Currencies::Affect_Shop_Values
# Calulate Shop Price
n = Integer(n * $game_currencies.exchange_rate)
end
# Return Shop Price
return n
end
end
#==============================================================================
# ** RPG::Armor
#==============================================================================
class RPG::Armor
#--------------------------------------------------------------------------
# * Price
#--------------------------------------------------------------------------
alias seph_dyncur_rpga_price price
def price
# Collect Original Price
n = seph_dyncur_rpga_price
return n if $game_currencies.nil?
# If Dynamic Shop Prices
if Dynamic_Currencies::Affect_Shop_Values
# Calulate Shop Price
n = Integer(n * $game_currencies.exchange_rate)
end
# Return Shop Price
return n
end
end
#==============================================================================
# ** Scene_Title
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_dyncur_scnttl_cng command_new_game
#--------------------------------------------------------------------------
# * Command : New Game
#--------------------------------------------------------------------------
def command_new_game
# Original Command New Game
seph_dyncur_scnttl_cng
# Creates Game Currencies Game Data
$game_currencies = Game_Currencies.new
end
end
#==============================================================================
# ** Scene_Save
#==============================================================================
class Scene_Save
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_gmlngs_scnsave_wd write_data
#--------------------------------------------------------------------------
# * Command : New Game
#--------------------------------------------------------------------------
def write_data(file)
# Original Write Data
seph_gmlngs_scnsave_wd(file)
# Saves Game Currencies Data
Marshal.dump($game_currencies, file)
end
end
#==============================================================================
# ** Scene_Load
#==============================================================================
class Scene_Load
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_dyncur_scnload_rd read_data
#--------------------------------------------------------------------------
# * Command : New Game
#--------------------------------------------------------------------------
def read_data(file)
# Original Write Data
seph_dyncur_scnload_rd(file)
# Loads Game Currencies Data
$game_currencies = Marshal.load(file)
# Switches Gold Name
$data_system.words.gold = $game_currencies.currency_name
end
end
#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
endInformações adicionais
- Categoria: Programação XP
- Tag: RPG Maker XP
- Adicionado por: LichKing
- Acessos: 52
Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Acesse aqui e saiba como. Obrigado!
