Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
Usunięcie zapisu z Menu [VX]
Autor Wiadomość
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
  Wysłany: Pon 08 Lut, 2010 13:39
Usunięcie zapisu z Menu [VX]
Witam :-) Przedstawiam Wam krótki tutorial, pokazujący jak usunąć opcję save z menu.

Oczywiście tutorial odwołuje się do domyślnej klasy Scene_Menu, która może być modyfikowana przez inne używane przez Was skrypty. Dlatego w przypadku, gdy wprowadzone przez Was modyfikacje nie działają, oznacza to, że należy wyszukać w dodatkowych skryptach również odwołań do klasy Scene_Menu.

Uwaga!
Spoiler:

Zanim przystąpimy do modyfikowania warto skopiować całą klasę, w której mamy dokonać zmian i wkleić ją nad Main (nie przeszkadza to w niczym jak skrypt się dybluje). Uchroni to nasz projekt przed błędami. W późniejszym etapie można usunąć te definicje, których nie zmieniamy, a zostawić tylko te z wprowadzonymi przez nas poprawkami. Program sam powoła się na wcześniejsze definicje. Czemu tak się dzieje? Otóż nawet gdy w swoim projekcie użyjemy skryptów, które zmieniają tę samą klasę, to 'wygra' ten, który jest najbliżej Main. Szerzej na ten temat w innym tutorialu :->


Co najważniejsze, poniżej zamieszczam instrukcję krok po kroku, jak usunąć zapis z menu.

Tutorial
Spoiler:

1. Wchodzimy w Edytor skryptów i w lewym pasku wyszukujemy Scene_Menu (sekcja Scenes). Zaimplementowana tam klasa odwołuje się do Menu - tylko do pierwszego okna, które pojawia się po wciśnięciu ESC.

2. Wyszukujemy definicji (linijka 53)
Kod:
def create_command_window

Jak sama nazwa wskazuje definicja tworzy okno poleceń. Znajdują się tu poszczególne polecenia, którym przyporządkowano zmienne lokalne: s1, s2, s3, s4 itd.
Kod:
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::save
s6 = Vocab::game_end

Spójrzmy na zmienną s5. Przyporządkowane jest zostało słówko 'save' ('vocab' to skrót od angielskiego 'vocabulary' - słownictwo), a jego tłumaczenie pobierane jest z Bazy Danych z zakładki Terms.

Ale skoro nam niepotrzebny jest zapis w menu, to usuwamy s5 i w jego miejsce wstawiamy kolejny vocab, czyli:

Kod:
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::game_end

Zauważcie, że zmienną s6 zmieniliśmy na s5. W gruncie rzeczy to tylko cyferka, lecz w 'skrypciarstwie' przydaje się odrobina pedantyzmu.

3. W tej samej definicji, tuż pod zmiennymi znajduje się linijka, która tworzy okno (odwołuje się do zaimplementowanej już klasy - Window_Command)
Kod:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])

160 - to szerokość okna poleceń (można ją dowolnie zmieniać)
[s1, s2, s3, s4, s5, s6] - to tablica, na której elementy składają się modyfikowane przez nas zmienne. Jak widać zmiennych jest o jedną za dużo. Należy ją usunąć, przez co otrzymamy:
Kod:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])


4. W porządku. Mamy tyle poleceń, o ile nam chodziło. Gdy uruchomimy grę, zobaczymy jednak, że odwołanie tych komend jest niezmienione, czyli nadal z miejsca, gdzie był Zapis (teraz to komenda Koniec gry) przenosi do okna Zapisu. Koniecznie musimy to naprawić.
Wracamy zatem do Scene_Menu i wyszukujemy definicji (linijka 74):
Kod:
def update_command_selection

W tej definicji znajduje się informacje, co się dzieje, gdy będąc w menu wciśniemy Enter (Input::C) lub ESC (Input::B).
Nas interesuje tylko ten fragment:
Kod:
case @command_window.index
when 0      # Item
  $scene = Scene_Item.new
when 1,2,3  # Skill, equipment, status
  start_actor_selection
when 4      # Save
  $scene = Scene_File.new(true, false, false)
when 5      # End Game
  $scene = Scene_End.new
end

Kod ten można mniej więcej przetłumaczyć następująco: "w zależności od tego (case), jaki jest indeks okna poleceń (@command_window.index) to rób to i to". Indeks odpowiada kolejno :
s1 = indeks 0
s2 = indeks 1
s3 = indeks 2
Czyli pierwsza komenda w oknie zawsze będzie miała indeks 0.
W naszym przypadku indeks 0 ma polecenie Item / Przedmiot.
Domyślnie zatem zapis gry (skoro jest piąte na liście) ma indeks 4. Zatem przyjrzyjmy się linijce:
Kod:
when 4      # Save
  $scene = Scene_File.new(true, false, false)

W naszej nowej liście indeks 4 powinnien zostać przyporządkowany Końcowi gry, zatem usuwamy powyższą linijkę i 'when' końca gry zmieniamy z 5 na 4. Całość po przeróbkach powinna wyglądać następująco:
Kod:
case @command_window.index
when 0      # Item
  $scene = Scene_Item.new
when 1,2,3  # Skill, equipment, status
  start_actor_selection
when 4      # End Game
  $scene = Scene_End.new
end


5. Przetestujmy naszą grę. Wszystko wydaje się funkcjonować prawidłowo, poza jednym wyjątkiem :-> Gdy wybierzemy polecenie 'End Game' / 'Koniec gry' i po przejściu do nowego okna będziemy chcieli wrócić do menu (po wciśnięciu ESC) przeniesie nas w puste miejsce na liście.


By to zmienić musimy przejść do innej Scene, a mianowicie do Scene_End.
Wyszukujemy definicji:
Kod:
def return_scene

Jedna linijka tej definicji powoduje, że wychodząc w okna z powrotem do Menu, automatycznie zaznaczona zostanie komenda końca gry. Zgodnie z wcześniejszym omówieniem jest to 5 pozycja na liście, czyli indeks 4. Zamieńmy zatem 5 w nawiasie na 4.
Kod:
def return_scene
  $scene = Scene_Menu.new(4)
end

Teraz wszystko powinno działać bez zarzutu.

Aha i Uwaga! Pomimo wprowadzenia modyfikacji w kodzie nie została usunięta opcja wyłączenia zapisu (Change Save Access w poleceniach zdarzenia). Nie jest to potrzebne, ale za wyłączenie opcji zapisu odpowiadają kolejno:
Kod:
if $game_system.save_disabled             # If save is forbidden
  @command_window.draw_item(4, false)     # Disable save
end

oraz w następnej definicji:
Kod:
elsif $game_system.save_disabled and @command_window.index == 4
  Sound.play_buzzer
return

Jeśli ktoś chce może bezpiecznie usunąć powyższe fragmenty. Jednak jak już wspomniałam, nie jest to wymagane.


Piszcie w razie problemów :->
________________________


 
 
 
Malian 




Preferowany:
RPG Maker XP

Pomógł: 3 razy
Dołączył: 22 Gru 2009
Posty: 262
Skąd: Warszawa
Wysłany: Pon 08 Lut, 2010 15:09
Świetnie, dodam jeszcze że tak można zrobić z innymi rzeczami w naszym menu, m.in.: Przedmioty, Umiejętności, Uzbrojenie, Status, oraz Koniec gry. Wystarczy się tylko dostosować do tego toturiala.

To działa również w XP.
________________________
 
 
 
 
Loyd 



Preferowany:
RPG Maker VX

Dołączył: 16 Gru 2010
Posty: 27
Wysłany: Sro 16 Mar, 2011 05:54
A ja poprostu wchodze z folder z grą i usuwam plik "Save" :-PP
:papa:
________________________
Klikajcie i sie rejestrujcie!!! Prosze!!!!
http://filesget.pl/znajomy,3427.html

89% graczy uważa, że najważniejsza jest grafika.
Jeśli należysz do pozostałych 11% wklej to do swojego podpisu.

http://grawbank.tk/84/andzio
http://stworzwirusa.tk/656/zdislaw
 
 
Feniks 




Preferowany:
RPG Maker XP

Ranga RM:
2 gry

Pomógł: 62 razy
Dołączył: 04 Wrz 2010
Posty: 511
Wysłany: Sro 16 Mar, 2011 07:21
Loyd, wtedy ci usuwa save'a z gry, nie całego :D, świetny tutorial, i przejrzysty, przyda się niektórym.
________________________

 
 
Loyd 



Preferowany:
RPG Maker VX

Dołączył: 16 Gru 2010
Posty: 27
Wysłany: Sro 16 Mar, 2011 19:15
Cytat:
Loyd, wtedy ci usuwa save'a z gry, nie całego

nie żebym był głupi czy niedomyślny :oops: ale... chodzi ci o to ,że w menu zostaje
save? Cóż i tak nie da się go wczytać więc dla mnie to nie problem :mrgreen: :papa:
________________________
Klikajcie i sie rejestrujcie!!! Prosze!!!!
http://filesget.pl/znajomy,3427.html

89% graczy uważa, że najważniejsza jest grafika.
Jeśli należysz do pozostałych 11% wklej to do swojego podpisu.

http://grawbank.tk/84/andzio
http://stworzwirusa.tk/656/zdislaw
 
 
Agumon 




Preferowany:
RPG Maker VX

Ranga RM:
1 gra

Pomógł: 53 razy
Dołączył: 30 Gru 2009
Posty: 515
Skąd: Ruda Śląska
Wysłany: Sro 16 Mar, 2011 20:17
Loyd, tutaj chodzi o to że z menu usuwasz rubryke save a nie zapisy z gry.
________________________
Pomogłem? Daj ""
Piszę poprawnie po polsku

 
 
Finwe 




Preferowany:
RPG Maker VXAce

Pomógł: 34 razy
Dołączył: 30 Lip 2011
Posty: 322
Skąd: Rzeszów
Wysłany: Pon 10 Paź, 2011 17:53
Wielkie, naprawdę wielkie dzięki Ayene ;-) .A jest jakiś tutek co do zmieniania opcji w TITLE? Bo mi by się przydało do gier robionych bez menu obrazkowego.
 
 
 
kamokeg 



Preferowany:
RPG Maker VXAce

Dołączył: 04 Lut 2012
Posty: 43
Skąd: Włocławek
Wysłany: Czw 08 Mar, 2012 20:37
możesz zrobić jak usunąć equip? bo mi robi że nie ma equip, ale status, save i game end nie działa
________________________
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene