Jump to content
Rpg²S Forum

Eliminare dal menù una o più opzioni [RGSS3]


Recommended Posts

[RGSS3] Eliminare dal menù una o più opzioni
Versione 1.0
Per: RPGMakerVXAce
Autore: Sora Keyblade
Descrizione:
In una vecchia discussione su uno script di KenzoMe su come eliminare l'opzione "Formazione", è stata esposta l'idea di fare un tutorial su come eliminare, indistintamente, una opzione dal menù; visto che Kenzo non l'ha fatto e io sono affamato di rens, me ne occupo io e tagliamo la testa al toro.
La guida cercherà di essere il più comprensibile possibile, anche per chi non ha mai usato l'rgss, e tutte quelle cose che non sono presenti su rpg maker "base" avranno una spiegazione (spero di non dovermi soffermare più di tanto su cose come le variabili!), come per esempio metodi e classi (con annessi esempi)
Ultima Modifica: 11/01/2015
Tutorial:
Premettiamo fin da subito una cosa, RPG Maker, prima di avviare un gioco, analizza tutto il codice che è presente nello script editor, dall'alto verso il basso, e poi lo esegue; probabilmente a prima vista ciò può sembrare una cosa da nulla, ma se sappiamo sfruttare a nostro vantaggio questa cosa il nostro script può risultare più chiaro e ordinato, infatti RPG Maker, quando legge il codice, se trova uno script avente il nome della classe e un metodo uguali ad uno letto prima (quindi più in alto), sovrascriverà il metodo più in alto con quello più in basso; facciamo un esempio per essere più chiari:
class Window_MenuCommand < Window_Command
  def self.init_command_position
    @@last_command_symbol = nil
  end
Queste sono le prime righe di codice della classe "Window_MenuCommand" (7° script sotto "Windows",che andremo ad analizzare passo passo più avanti).
N.B. una classe può essere immaginata come il progetto di un oggetto, quell'insieme di attributi (cioè le sue caratteristiche) e metodi (cioè ciò che sa fare) che permettono in seguito di rendere il progetto (astratto) in un oggetto("concreto"), per esempio la classe "Distributore d'acqua", avrà come attributo il materiale di cui è fatto o il colore, mentre come metodo quello di erogare l'acqua. Inoltre si può notare che Window_MenuCommand è una sottoclasse di Window_Command, infatti per rendere il lavoro più ordinato e con meno ripetizioni a volte si può scegliere di creare una classe madre per poi rendere disponibile le sue funzioni a quelle figlie, per esempio possiamo creare la classe "Televisione" può avere come classi figlie "Televisore a tubo catodico" e "Televisore a schermo piatto", ma in entrambe le classi figlie non sarà presente un metodo come "Accensione" perché presente nella classe madre (di conseguenza una classe madre presenta le caratteristiche generali che possiedo tutte le classi figlie, mentre le classi figlie vanno più nello specifico)
Viene creata la classe Window_MenuCommand, che ha come primo metodo "self.init_command_position", quest'ultimo serve per stabilire la posizione del cursore, ma se per esempio vogliamo modificare la posizione del cursore (non farlo mettere sulla prima opzione, ma sulla seconda), ci basterà scrivere queste semplici righe nell'editor script, sotto materials (o almeno sotto Window_MenuCommand):
class Window_MenuCommand < Window_Command
  def self.init_command_position
    @@last_command_symbol = :skill
  end
end
ed il gioco è fatto, senza neanche toccare il codice originario.
Adesso passiamo all'analisi del codice, perché è buona cosa quando si va a modificare uno script studiarne tutte le parti e visto che Window_MenuCommand è una classe molto semplice, perché non farlo?
class Window_MenuCommand < Window_Command
...
end
Inizializza la classe Window_MenuCommand che è sottoclasse di Window_Command
def self.init_command_position
    @@last_command_symbol = nil
  end
Questo metodo (come già detto) serve per dare alla macchina la posizione del cursore, all'interno viene inizializzata la variabile di classe " @@last_command_symbol ", se quest'ultima ha valore nullo (nil), l'opzione in cui si troverà il cursore (quando è stato aperto il menù) sarà la prima, mentre se si mette al posto di "nil", per esempio il simbolo ":skill" il cursore si posizionerà su "Abilità" etc
def initialize
    super(0, 0)
    select_last
  end
Qui viene inizializzata la finestra, cioè il menù con le varie opzioni, viene richiamata la funzione inizialize della superclasse/classe madre Window_Command e vengono dati come parametri "0,0", cioé la posizione nello schermo (che sarebbe in alto a sinistra, infatti dovete immaginare lo schermo come un piano cartesiano dove il punto O è in alto a sinistra, invece che in basso a sinistra).
Con "select_last" viene richiamato il metodo "select_last", presente più in basso
def process_ok
    @@last_command_symbol = current_symbol
    super
  end
Scendiamo più in basso, questa è il penultimo metodo, "process_ok", questo metodo modifica il valore di "@@last_command_symbol" con il simbolo corrente (:skill, :item etc)quando viene schiacciato invio, tutto questo cosa significa? Il simbolo corrente è la posizione del cursore nel momento in cui si preme invio, quindi se premiamo Invio quando è su Equipaggia, memorizzerà il simbolo ":equip", però cosa succede quando premiamo Invio su Equipaggia? Prendiamo il controllo di un altro menù (che sia quello accanto dove sono prensenti i pg oppure altri, come quello degli oggetti o degli equipaggiamenti), ma se premiamo esc cosa succede? Torniamo alla finestra principale (quella con Oggetti, Abilità etc) e il cursore punta sull'ultima opzione in cui era posizionato prima di essere schiacciato Invio (proprio quella in cui era stato premuto invio, in questo caso Equipaggia), che è memorizzata nella variabile "@@last_command_symbol", al posto di farlo puntare sulla prima opzione!
"super" invece richiama il metodo "process_ok", presente nella classe madre di Menu_Command (possono esserci superclassi di super classi, come in questo caso), che ,a soldoni, programma il "Quando viene premuto Invio"
def select_last
    select_symbol(@@last_command_symbol)
  end
Questa è il metodo "select_last" che viene richiamato dal metodo "initialize" appena visto sopra, qui viene richiamato il metodo "select_symbol" della classe madre Window_Command e viene passato come argomento la variabile "@@last_command_symbol" , senza entrare troppo nei dettagli è il metodo che posiziona "materialmente" il cursore
def make_command_list
    add_main_commands
    add_formation_command
    add_original_commands
    add_save_command
    add_game_end_command
  end
Adesso passiamo alla parte interessante e che ci interessa maggiormente, questo metodo (make_command_list), crea le varie opzioni del menù (oggetti, abilità etc), anzi, più precisamente chiama altri metodi che creano le varie opzioni, quindi cosa dovremmo fare per eliminare una opzione? Semplicemente cancellare le istruzioni contenute al loro interno!
Visioniamo uno ad uno i metodi richiamati.
def add_main_commands
    add_command(Vocab::item,   :item,   main_commands_enabled)
    add_command(Vocab::skill,  :skill,  main_commands_enabled)
    add_command(Vocab::equip,  :equip,  main_commands_enabled)
    add_command(Vocab::status, :status, main_commands_enabled)
  end
"add_main_commands" aggiunge le opzioni/comandi: Item, Skill; Equip, Status, nulla di particolare.
def add_formation_command
    add_command(Vocab::formation, :formation, formation_enabled)
  end
"add_formation_command" aggiunge l'opzione/comando "Formazione"
def add_original_commands
  end
"add_original_commands" non aggiunge nulla (appunto non c'è niente dentro al metodo), ma può essere riempito da una opzione creata dall'utente (come può essere il bestiario per esempio!)
def add_save_command
    add_command(Vocab::save, :save, save_enabled)
  end
"add_save_command" aggiunge il comando Salva
def add_game_end_command
    add_command(Vocab::game_end, :game_end)
  end
"add_game_end_command" aggiunge l'opzione "Fine Gioco"
Arrivati a questo punto, avendo compreso come funziona questa classe, non resta che modificarlo! Possiamo muoverci in tre modi diversi (faccio l'esempio di Item e Fine Gioco)
Il primo metodo è semplicemente quello di togliere materialmente ciò che è contenuto nel metodo.
Nel caso di Fine Gioco avviene così
Prima:
def add_game_end_command
    add_command(Vocab::game_end, :game_end)
  end

Dopo:

def add_game_end_command
    
  end

Mentre nel caso di Item avviene così

 

Prima:

 def add_main_commands
    add_command(Vocab::item,   :item,   main_commands_enabled)
    add_command(Vocab::skill,  :skill,  main_commands_enabled)
    add_command(Vocab::equip,  :equip,  main_commands_enabled)
    add_command(Vocab::status, :status, main_commands_enabled)
  end

Dopo:

 def add_main_commands
    
    add_command(Vocab::skill,  :skill,  main_commands_enabled)
    add_command(Vocab::equip,  :equip,  main_commands_enabled)
    add_command(Vocab::status, :status, main_commands_enabled)
  end

Ovviamente se dovete eliminare l'opzione "Skill", cancellerete la seconda riga, per Equip, la terza e così via

 

 

Il secondo metodo non si distoglie molto dal primo, ma risulta meno "drastico". In pratica consiste nel mettere prima della riga che vogliamo eliminare il simbolo cancelletto (#), in questo modo tutta la riga alla destra del cancelletto diventerà un commento, quindi non verrà letto da RPG Maker

 

Nel caso di Item funziona così

 def add_main_commands
 #   add_command(Vocab::item,   :item,   main_commands_enabled)
    add_command(Vocab::skill,  :skill,  main_commands_enabled)
    add_command(Vocab::equip,  :equip,  main_commands_enabled)
    add_command(Vocab::status, :status, main_commands_enabled)
  end

mentre nel caso di End Game funziona in questo modo

def add_game_end_command
#    add_command(Vocab::game_end, :game_end)
  end

Questo secondo metodo è nettamente più consigliato del primo, infatti, se in futuro dovreste pentirvi di aver eliminato quel determinato comando potete benissimo togliere il cancelletto e tutto tornerà come prima, cosa nettamente più pratica di dover creare un nuovo progetto, cercare nel codice sorgente la riga che ci interessa e incollarla nel nostro progetto

 

In fine, il terzo metodo ed il più consigliato, dovete creare un nuovo script sotto Material (o almeno sotto -Window_MenuCommand-) e utilizzare quella caratteristica di RPGMAker appena descitta sopra, cioè far sovrascrivere il metodo di una classe mettendolo sotto quello base di rpgmkr

class Nome_Classe  #nel nostro caso Window_MenuCommand
  def Nome_Metodo #nel nostro caso o add_game_end_command oppure add_main_commands
     codice modificato
  end
end

Questo è il "template" che dovremo utilizzare, nulla di molto complicato, dovremo nominare la classe con lo stesso nome di quella dov'è presente il metodo che dobbiamo modificare (nel nostro caso Window_MenuCommand); ridefinire il metodo, creando un metodo con lo stesso nome (nel nostro caso o add_game_end_command oppure add_main_commands); inserire il codice modificato all'interno del metodo; terminare il metodo e la classe con i due -end-

 

Ecco come avviene in modo pratico utilizzando i nostri due esempi

Per eliminare Item

class Window_MenuCommand < Window_Command
  def add_main_commands
    add_command(Vocab::skill,  :skill,  main_commands_enabled)
    add_command(Vocab::equip,  :equip,  main_commands_enabled)
    add_command(Vocab::status, :status, main_commands_enabled)
  end
end

Mentre per End Game:

class Window_MenuCommand < Window_Command
 def add_game_end_command
    
  end
end

In questo modo, il metodo -add_game_end_command- oppure -add_main_commands- verranno eliminati e sostituiti (cioè sovrascritti) dal codice da voi inserito

 

Forse risulterà il metodo più lungo, ma quello più maneggievole e pratico da modificare e distribuire, infatti, semplicemente cancellando lo script da voi creato potrete far tornare tutto alla normalità, senza dover mettere mani nel codice e lo potrete distribuire in modo più semplice e compatto, postando semplicemente il codice da voi scritto ed il gioco è fatto ^^

 

La guida finisce qui, se avete qualche dubbio o consiglio postatelo qua sotto, risponderò a tutti ^^ (se possibile :P)

Edited by Sora Keyblade
Link to comment
Share on other sites

Ottimo, è sempre richiesta comune quella di eliminare una o due opzioni dai menù... potresti spiegare anche come aggiungerle ed occuparti del title pure.

^ ^

(\_/)
(^ ^) <----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

Ottimerrimo!!! Mi serviva una guida del genere! Quando la aggiorni, ti consiglio di fare un nuovo post per avvertire, in modo che sappiamo quando viene aggiornata.

CLICCA SUL BANNER QUI SOTTO PER ENTRARE ANCHE TU NEL GRUPPO VOCALE DISCORD!

>>> BIM_Banner2.png <<<

 

Le mie guide:

 

 

I miei plugin:

 

 

Roba:

 

 

http://i.imgur.com/dWUeHeL.jpg

 

http://37.media.tumblr.com/c5e5c7ccc70b4e7119ad585c98b4eafc/tumblr_n5munym41a1rlwn4io6_r1_250.gif http://67.media.tumblr.com/87ed7c36599b5438e6da0a0d94d99f80/tumblr_mr5fkbv9gO1qkufl8o1_500.gif

http://i.imgur.com/osqupoP.png

xyknPmC.png

Link to comment
Share on other sites

Ottimo, è sempre richiesta comune quella di eliminare una o due opzioni dai menù... potresti spiegare anche come aggiungerle ed occuparti del title pure.

^ ^

Grazie mille ^^ Aggiungere opzioni nel menù è una cosa molto semplice, il problema è cosa mettere all'interno di quel comando XD

Volendo posso aggiungerlo a questa guida, mettendo una roba semplice come "Quando premi l'opzione -Hello World- compare una finestra con su scritto 'Hello World'" o roba del genere, oppure fare un'altra guida con della roba un po' più complicata (consigli?), secondo te qual è meglio? xD

 

Per il title, credo che in futuro lo farò ^^

 

 

Ottimerrimo!!! Mi serviva una guida del genere! Quando la aggiorni, ti consiglio di fare un nuovo post per avvertire, in modo che sappiamo quando viene aggiornata.

Bella guida, hai spiegato benissimo!

Ci conto che la continuerai! ;)

 

Grazie del sostegno ^^

 

Guida Completata

Link to comment
Share on other sites

Io intendevo script già fatti da inserire, quindi mettere il semplice richiama scena per quello script particolare.

^ ^

(\_/)
(^ ^) <----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

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...