Jump to content
Rpg²S Forum

-Prezzi variabili


Xtam
 Share

Recommended Posts

Prezzi Variabili

 

Descrizione

 

 

Nonostante sia un'idea abbastanza semplice non l'ho trovata su questo forum, mi appresto quindi a postarla.

Script che permette di assegnare un valore in percentuale a due variabili tramite le quali è possibile modificare i prezzi di acquisto e vendita dei negozi.

 

Autore

 

 

Xtam, partendo dall'idea contenuta in uno script di Jragyn

 

 

Demo

http://www.mediafire...4549nzy48syyeb9

 

Istruzioni per l'uso

 

 

Nella demo. Dopo aver inserito lo script (al posto di Scene_Shop) bisogna assegnare alle variabili A e V (righe 22 e 23) il numero della variabile che si vuole venga utilizzata (variabili 1 e 2 di default). Dopodiché si tratta solamente di modificarle prima di lanciare un negozio (tre esempi nella demo).

NB: il valore della variabile sarà un numero in percentuale. Quindi se per esempio volete che un mercante venda degli oggetti con un surplus potete fare sì che A valga 110, 120 o anche di più, a piacere. E sì, gestisce TUTTI gli oggetti venduti o acquistati da un determinato mercante.

 

Qui di seguito il codice (per buona parte è uguale allo Scene_Shop - motivo per cui l'ho sovrascritto -, l'unica modifica consiste nelle formule di calcolo per gestire gli acquisti e le vendite).

 

#====================================================

# ** Scene_Shop_Modificato

#------------------------------------------------------------------------------

# Classe che permette di lanciare negozi con prezzi modificati

#====================================================

# Questo script permette di utilizzare due variabili per immagazzinare le %

# di acquisto e vendita degli oggetti.

# Idea originale di tale Jragyn, mi sono permesso di togliere un paio di codici

# superflui e perfezionare la configurabilità per utenti inesperti (tra i quali

# mi piace annoverarmi) :D

#------------------------------------------------------------------------------

# Istruzioni: 1. configurare le variabili delle righe 22-23

# 2. prima di far partire un negozio gestirle tramite eventi (guarda demo)

# CONFIGURAZIONE VARIABILI - selezionate le variabili che volete utilizzare per

# immagazzinare le percentuali - modificare solo i numeri

#------------------------------------------------------------------------------

module X

A = 1 # numero della variabile assegnata alla % d'acquisto

V = 2 # numero della variabile assegnata alla % di vendita

end

# NON modificare nulla da qui in poi (la scene è comunque pressoché

# identica alla rtp)

class Window_ShopBuy < Window_Selectable

#--------------------------------------------------------------------------

# * Draw Item

# index : item number

# altered 1 line to allow for price alterations.

#--------------------------------------------------------------------------

def draw_item(index)

item = @data[index]

# Get items in possession

case item

when RPG::Item

number = $game_party.item_number(item.id)

when RPG::Weapon

number = $game_party.weapon_number(item.id)

when RPG::Armor

number = $game_party.armor_number(item.id)

end

# If price is less than money in possession, and amount in possession is

# not 99, then set to normal text color. Otherwise set to disabled color

if ((item.price * $game_variables[X::A]) / 100) <= $game_party.gold and number < 99

self.contents.font.color = normal_color

else

self.contents.font.color = disabled_color

end

x = 4

y = index * 32

rect = Rect.new(x, y, self.width - 32, 32)

self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))

bitmap = RPG::Cache.icon(item.icon_name)

opacity = self.contents.font.color == normal_color ? 255 : 128

self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)

self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)

self.contents.draw_text(x + 240, y, 88, 32, ((item.price * $game_variables[X::A]) / 100).to_s, 2)

end

end

class Scene_Shop

#--------------------------------------------------------------------------

# * Main Processing

#--------------------------------------------------------------------------

def main

# Make help window

@help_window = Window_Help.new

# Make command window

@command_window = Window_ShopCommand.new

# Make gold window

@gold_window = Window_Gold.new

@gold_window.x = 480

@gold_window.y = 64

# Make dummy window

@dummy_window = Window_Base.new(0, 128, 640, 352)

# Make buy window

@buy_window = Window_ShopBuy.new($game_temp.shop_goods)

@buy_window.active = false

@buy_window.visible = false

@buy_window.help_window = @help_window

# Make sell window

@sell_window = Window_ShopSell.new

@sell_window.active = false

@sell_window.visible = false

@sell_window.help_window = @help_window

# Make quantity input window

@number_window = Window_ShopNumber.new

@number_window.active = false

@number_window.visible = false

# Make status window

@status_window = Window_ShopStatus.new

@status_window.visible = false

# Execute transition

Graphics.transition

# Main loop

loop do

# Update game screen

Graphics.update

# Update input information

Input.update

# Frame update

update

# Abort loop if screen is changed

if $scene != self

break

end

end

# Prepare for transition

Graphics.freeze

# Dispose of windows

@help_window.dispose

@command_window.dispose

@gold_window.dispose

@dummy_window.dispose

@buy_window.dispose

@sell_window.dispose

@number_window.dispose

@status_window.dispose

end

#--------------------------------------------------------------------------

# * Frame Update

#--------------------------------------------------------------------------

def update

# Update windows

@help_window.update

@command_window.update

@gold_window.update

@dummy_window.update

@buy_window.update

@sell_window.update

@number_window.update

@status_window.update

# If command window is active: call update_command

if @command_window.active

update_command

return

end

# If buy window is active: call update_buy

if @buy_window.active

update_buy

return

end

# If sell window is active: call update_sell

if @sell_window.active

update_sell

return

end

# If quantity input window is active: call update_number

if @number_window.active

update_number

return

end

end

#--------------------------------------------------------------------------

# * Frame Update (when command window is active)

#--------------------------------------------------------------------------

def update_command

# If B button was pressed

if Input.trigger?(Input::B)

# Play cancel SE

$game_system.se_play($data_system.cancel_se)

# Switch to map screen

$scene = Scene_Map.new

return

end

# If C button was pressed

if Input.trigger?(Input::C)

# Branch by command window cursor position

case @command_window.index

when 0 # buy

# Play decision SE

$game_system.se_play($data_system.decision_se)

# Change windows to buy mode

@command_window.active = false

@dummy_window.visible = false

@buy_window.active = true

@buy_window.visible = true

@buy_window.refresh

@status_window.visible = true

when 1 # sell

# Play decision SE

$game_system.se_play($data_system.decision_se)

# Change windows to sell mode

@command_window.active = false

@dummy_window.visible = false

@sell_window.active = true

@sell_window.visible = true

@sell_window.refresh

when 2 # quit

# Play decision SE

$game_system.se_play($data_system.decision_se)

# Switch to map screen

$scene = Scene_Map.new

end

return

end

end

#--------------------------------------------------------------------------

# * Frame Update (when buy window is active)

# altered 3 lines to allow for price alterations.

#--------------------------------------------------------------------------

def update_buy

# Set status window item

@status_window.item = @buy_window.item

# If B button was pressed

if Input.trigger?(Input::B)

# Play cancel SE

$game_system.se_play($data_system.cancel_se)

# Change windows to initial mode

@command_window.active = true

@dummy_window.visible = true

@buy_window.active = false

@buy_window.visible = false

@status_window.visible = false

@status_window.item = nil

# Erase help text

@help_window.set_text("")

return

end

# If C button was pressed

if Input.trigger?(Input::C)

# Get item

@item = @buy_window.item

# If item is invalid, or price is higher than money possessed

if @item == nil or ((@item.price * $game_variables[X::A]) / 100) > $game_party.gold

# Play buzzer SE

$game_system.se_play($data_system.buzzer_se)

return

end

# Get items in possession count

case @item

when RPG::Item

number = $game_party.item_number(@item.id)

when RPG::Weapon

number = $game_party.weapon_number(@item.id)

when RPG::Armor

number = $game_party.armor_number(@item.id)

end

# If 99 items are already in possession

if number == 99

# Play buzzer SE

$game_system.se_play($data_system.buzzer_se)

return

end

# Play decision SE

$game_system.se_play($data_system.decision_se)

# Calculate maximum amount possible to buy

max = ((@item.price * $game_variables[X::A]) / 100) == 0 ? 99 : $game_party.gold / ((@item.price * $game_variables[X::A]) / 100)

max = [max, 99 - number].min

# Change windows to quantity input mode

@buy_window.active = false

@buy_window.visible = false

@number_window.set(@item, max, ((@item.price * $game_variables[X::A]) / 100))

@number_window.active = true

@number_window.visible = true

end

end

#--------------------------------------------------------------------------

# * Frame Update (when sell window is active)

# altered 2 lines to allow for price alterations.

#--------------------------------------------------------------------------

def update_sell

# If B button was pressed

if Input.trigger?(Input::B)

# Play cancel SE

$game_system.se_play($data_system.cancel_se)

# Change windows to initial mode

@command_window.active = true

@dummy_window.visible = true

@sell_window.active = false

@sell_window.visible = false

@status_window.item = nil

# Erase help text

@help_window.set_text("")

return

end

# If C button was pressed

if Input.trigger?(Input::C)

# Get item

@item = @sell_window.item

# Set status window item

@status_window.item = @item

# If item is invalid, or item price is 0 (unable to sell)

if @item == nil or ((@item.price * $game_variables[X::V]) / 100) == 0

# Play buzzer SE

$game_system.se_play($data_system.buzzer_se)

return

end

# Play decision SE

$game_system.se_play($data_system.decision_se)

# Get items in possession count

case @item

when RPG::Item

number = $game_party.item_number(@item.id)

when RPG::Weapon

number = $game_party.weapon_number(@item.id)

when RPG::Armor

number = $game_party.armor_number(@item.id)

end

# Maximum quanitity to sell = number of items in possession

max = number

# Change windows to quantity input mode

@sell_window.active = false

@sell_window.visible = false

@number_window.set(@item, max, ((@item.price * $game_variables[X::V]) / 100))

@number_window.active = true

@number_window.visible = true

@status_window.visible = true

end

end

#--------------------------------------------------------------------------

# * Frame Update (when quantity input window is active)

# altered 2 lines to allow for price alterations.

#--------------------------------------------------------------------------

def update_number

# If B button was pressed

if Input.trigger?(Input::B)

# Play cancel SE

$game_system.se_play($data_system.cancel_se)

# Set quantity input window to inactive / invisible

@number_window.active = false

@number_window.visible = false

# Branch by command window cursor position

case @command_window.index

when 0 # buy

# Change windows to buy mode

@buy_window.active = true

@buy_window.visible = true

when 1 # sell

# Change windows to sell mode

@sell_window.active = true

@sell_window.visible = true

@status_window.visible = false

end

return

end

# If C button was pressed

if Input.trigger?(Input::C)

# Play shop SE

$game_system.se_play($data_system.shop_se)

# Set quantity input window to inactive / invisible

@number_window.active = false

@number_window.visible = false

# Branch by command window cursor position

case @command_window.index

when 0 # buy

# Buy process

$game_party.lose_gold(@number_window.number * ((@item.price * $game_variables[X::A]) / 100))

case @item

when RPG::Item

$game_party.gain_item(@item.id, @number_window.number)

when RPG::Weapon

$game_party.gain_weapon(@item.id, @number_window.number)

when RPG::Armor

$game_party.gain_armor(@item.id, @number_window.number)

end

# Refresh each window

@gold_window.refresh

@buy_window.refresh

@status_window.refresh

# Change windows to buy mode

@buy_window.active = true

@buy_window.visible = true

when 1 # sell

# Sell process

$game_party.gain_gold(@number_window.number * ((@item.price * $game_variables[X::V]) / 100))

case @item

when RPG::Item

$game_party.lose_item(@item.id, @number_window.number)

when RPG::Weapon

$game_party.lose_weapon(@item.id, @number_window.number)

when RPG::Armor

$game_party.lose_armor(@item.id, @number_window.number)

end

# Refresh each window

@gold_window.refresh

@sell_window.refresh

@status_window.refresh

# Change windows to sell mode

@sell_window.active = true

@sell_window.visible = true

@status_window.visible = false

end

return

end

end

end

 

 

 

Bugs e Conflitti Noti

 

Modifica le formule di calcolo in Scene_Shop e Window_ShopBuy, quindi interferirà con qualsiasi script che interagisce con queste o che le sovrascrive.

 

Altri Dettagli

 

Ci tengo a rimarcare che anche se lo script è stato rifatto interamente da me l'idea è del già citato Jragyn. Il mio script parte dallo stesso concetto del suo, che però mi dava parecchi problemi quando si trattava di inizializzare le vendite. Mi sono quindi permesso di ri-gestire le variabili e di cancellare alcune parti di codice inutili arrivando a questo nuovo (seppur semplice) risultato. Scrivete pure qui di seguito per eventuali problemi.
Link to comment
Share on other sites

In giro mi pare di averne rivisti, ma più sono e meglio è, soprattutto se fatti le proprie mani :D, poi puoi personalizzarlo quanto vuoi pensando a nuove opzioncine :D

Bel lavoro! ^ ^

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

 

SUWOnzB.jpg 🖤
http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gif
http://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3
http://i.imgur.com/MpaUphY.jpg by Idriu E:3

Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44)

http://i.imgur.com/PgUqHPm.png
Ufficiale
"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"


http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3
Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^
http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^
http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.png
Grazie Testament XD Fan n°1 ufficiale di PQ! :D

Viva
il Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che non
avevo programmi di grafica per fare un banner su questo pc XD (ora ho di
nuovo il mio PC veramente :D)

Rosso Guardiano della
http://i.imgur.com/Os5rvhx.png

Rpg2s RPG BY FORUM:

Nome: Darth Reveal

 

PV totali 2
PA totali 16

Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.
Bozze vesti non definitive qui.

Equipaggiamento:
Indossa:
60$ e 59$ divisi in due tasche interne
Levaitan

Spada a due mani elsa lunga

Guanti del Defender (2PA)
Anello del linguaggio animale (diventato del Richiamo)

Scrinieri da lanciere (2 PA)

Elmo del Leone (5 PA)

Corazza del Leone in Ferro Corrazzato (7 PA)

ZAINO (20) contenente:
Portamonete in pelle di cinghiale contenente: 100$
Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)
Corda
Bottiglia di idromele
Forma di formaggio
Torcia (serve ad illuminare, dura tre settori)

Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)
Ampolla Bianca

Semi di Balissa

 

CAVALLO NORMALE + SELLA (30 +2 armi) contentente:
66$
Benda di pronto soccorso x3
Spada a due mani

Fagotto per Adara (fazzoletto ricamato)


 

Link to comment
Share on other sites

Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...