Stworzy ktoś skrypt, który usunie gameover.
Chodzi mi o to, że po przegranej walce zamiast gameovera teleportowało by nas do wybranego miejsca na jakiejś mapie??
Proszę oto tutek, nie jest mój tylko niejakiego Arrgona
Spoiler:
Zapewne każdy kto zrobił swoją grę w RMXP denerwuje się tym,
że po każdej śmierci musi zaczynać grę od nowa (chyba że zrobił save ^^ )...
Mnie też to denerwowało aż w końcu postanowiłem coś z tym zrobić.
Udało mi się !! I teraz się chcę podzielić z wami jak tego dokonać...
Wymagania:
-mapa (szpital, świątynia itp) [ja nazwałem szpital]
Na początek wchodzimy w edytor skryptów.
To jest najprostrza rzecz, jeśli ktoś sobie nie poradził niech nie czyta dalej,
wogle niech wyłączy komputer bo jeszcze coś zepsuje ;)
Idziemy dalej...
Chcemy zrobić żeby po śmierci gracz miał wybór: 1. bohater (drużyna) idzie na mapę szpital.
2. Kończymy grę. W tym celu do skryptu odpowiedzialnego za wyświetlenie
okna Game Over dodamy okienko wyboru (po kliknięciu enteru).
Starczy teorii. Przejdźmy do czynów...
Odnajdujemy po lewej stronie skrypt Scene_End (gdy podczas gry wcisniemy ESC
pojawia nam się okienko za które odpowiedzialny jest ten skrypt). Klikamy na niego
prawym przyciskiem myszy i wybieramy opcję Kopiuj.
Zjeżdżamy na sam dół listy i znowu prawym przyciskiem na skrypt Main,
ale tym razem klikamy wklej.
Ale nie mogą być 2 skrypty o tej samej nazwie, więc nazwę skryptu zmieniamy na
Scene_Nowa. Otwieramy teraz nasz skrypt. I co widzimy ?
class Scene_End
teraz musimy zmienić nazwę skryptu tam gdzie jest napisane class.
Zmieniamy ją na Scene_Nowa.
Idziemy dalej, a dokładnie jdo lini 13...
interesują nas tylko te linie 13-16
s1 = \"Ekran powitalny\"
zmieniamy na coś co nam bardziej odpowiada np:
s1 = \"Idź do szpitala\"
s2 = \"Windows\"
tak samo. co bardziej odpowiada np:
s2 = \"Koniec gry\"
s3 nam nie będzie potrzebne bo chemy mieć tylko 2 pozycje do wyboru tak więc kasujemy
całą linię 15. Następny krok to edytowanie lini 16 widzimy w nawiasie kwadratowym
[s1, s2, s3] ponieważ wcześniej skasowaliśmy s3 to tu robimy to samo. Kasujemy s3 razem ze
spacją i przecinkiem po s2. Idziemy dalej.
Chodzimy do lini 64.
command_to_title
zmieniamy na command_szpital
a linię 67 i 68 czyli
(when 2 # ???
command_cancel)
kasujemy całkowicie. Znowu chodzimy dalej.
znajdujemy linię 76
class Scene_Nowa
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def main
# ????????????
s1 = \"Do szpitala\"
s2 = \"Koniec gry\"
@command_window = Window_Command.new(192, [s1, s2])
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 240 - @command_window.height / 2
# ?????????
Graphics.transition
# ????—?
loop do
# ?—??????
Graphics.update
# ???????
Input.update
# ??—???
update
# ???????????—????
if $scene != self
break
end
end
# ?????????
Graphics.freeze
# ????????
@command_window.dispose
# ???????????????
if $scene.is_a?(Scene_Title)
# ?????—????
Graphics.transition
Graphics.freeze
end
end
#--------------------------------------------------------------------------
# ? ??—???
#--------------------------------------------------------------------------
def update
# ????????????
@command_window.update
# B ??????????
if Input.trigger?(Input::B)
# ????? SE ???
$game_system.se_play($data_system.cancel_se)
# ???—???????
$scene = Scene_Menu.new(5)
return
end
# C ??????????
if Input.trigger?(Input::C)
# ???????????—???????
case @command_window.index
when 0 # ?????
command_szpital
when 1 # ???????
command_shutdown
end
return
end
end
#--------------------------------------------------------------------------
# ? ???? [?????] ??????
#--------------------------------------------------------------------------
def command_szpital
# ?? SE ???
$game_system.se_play($data_system.decision_se)
$scene = Scene_Szpital.new
end
#--------------------------------------------------------------------------
# ? ???? [???????] ??????
#--------------------------------------------------------------------------
def command_shutdown
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# BGM?BGS?ME ???—????
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
# ???????
$scene = nil
end
#--------------------------------------------------------------------------
# ? ???? [???] ??????
#--------------------------------------------------------------------------
end
Teraz na liście skryptów odnajdujemy skrypt
Scene_Map. Kopieujemy go i wklejamy tak jak ostatnio...
Gdy już wkleimy ten skrypt oczywiście musimy zmienić jego nazwę.
Nazywamy go Scene_Szpital
Znowu zmieniamy
class Scene_Map
na
class Scene_Szpital
idziemy do lini 81 gdzie widzimy takei coś:
if $game_temp.to_title
musimy to zmienić na
if $game_temp.gameover=true
$game_temp.gameover=(false) - Wrpowadza do pamięci gry że żyjemy
$game_map.setup($data_system.start_map_id=3) - zmienia mapę
(zamiast 3 należy wpisać numer mapy)
$game_player.moveto($data_system.start_x=17, $data_system.start_y=7) - współżedne na nowej mapie z których wystartuje bohater (mozna podac dowolne liczby zamiast 17 i 7)
dalej...
$scene = Scene_Gameover.new
zmieniamy na
$scene = Scene_Map.new
Ten skrypt w całości powinnien (po przeróbkach) wyglądać tak:
class Scene_Szpital
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def main
# ???????????
@spriteset = Spriteset_Map.new
# ???—?????????
@message_window = Window_Message.new
# ?????????
Graphics.transition
# ????—?
loop do
# ?—??????
Graphics.update
# ???????
Input.update
# ??—???
update
# ???????????—????
if $scene != self
break
end
end
# ?????????
Graphics.freeze
# ???????????
@spriteset.dispose
# ???—?????????
@message_window.dispose
# ???????????????
if $scene.is_a?(Scene_Title)
# ?????—????
Graphics.transition
Graphics.freeze
end
end
#--------------------------------------------------------------------------
# ? ??—???
#--------------------------------------------------------------------------
def update
# ?—?
loop do
# ???????????????—?????
# (??????????????????????????????
# ????—??????????????????????)
$game_map.update
$game_system.map_interpreter.update
$game_player.update
# ???? (???—)??????
$game_system.update
$game_screen.update
# ????—????????????—????
unless $game_temp.player_transferring
break
end
# ???????
transfer_player
# ???????????????—????
if $game_temp.transition_processing
break
end
end
# ???????????
@spriteset.update
# ???—?????????
@message_window.update
# ?—??—?—???
if $game_temp.gameover=true
# ?—??—?—???????
$game_temp.gameover=(false)
$game_map.setup($data_system.start_map_id=3)
$game_player.moveto($data_system.start_x=17, $data_system.start_y=7)
$scene = Scene_Map.new
return
end
# ???????????
if $game_temp.to_title
# ???????????
$scene = Scene_Title.new
return
end
# ?????????????
if $game_temp.transition_processing
# ?????????????????
$game_temp.transition_processing = false
# ?????????
if $game_temp.transition_name == \"\"
Graphics.transition(20)
else
Graphics.transition(40, \"Graphics/Transitions/\" +
$game_temp.transition_name)
end
end
# ???—????????????
if $game_temp.message_window_showing
return
end
# ?????? ????? 0 ???????????????????
if $game_player.encounter_count == 0 and $game_map.encounter_list != []
# ??????????????????????
unless $game_system.map_interpreter.running? or
$game_system.encounter_disabled
# ??—????
n = rand($game_map.encounter_list.size)
troop_id = $game_map.encounter_list[n]
# ??—??????
if $data_troops[troop_id] != nil
# ??????????????
$game_temp.battle_calling = true
$game_temp.battle_troop_id = troop_id
$game_temp.battle_can_escape = true
$game_temp.battle_can_lose = false
$game_temp.battle_proc = nil
end
end
end
# B ??????????
if Input.trigger?(Input::B)
# ???????????—????????
unless $game_system.map_interpreter.running? or
$game_system.menu_disabled
# ???—???????? SE ?????????
$game_temp.menu_calling = true
$game_temp.menu_beep = true
end
end
# ?????—?? ON ?? F9 ?—?????????
if $DEBUG and Input.press?(Input::F9)
# ???????????????
$game_temp.debug_calling = true
end
# ????—??????????
unless $game_player.moving?
# ????????????
if $game_temp.battle_calling
call_battle
elsif $game_temp.shop_calling
call_shop
elsif $game_temp.name_calling
call_name
elsif $game_temp.menu_calling
call_menu
elsif $game_temp.save_calling
call_save
elsif $game_temp.debug_calling
call_debug
end
end
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def call_battle
# ??????????????
$game_temp.battle_calling = false
# ???—???????????
$game_temp.menu_calling = false
$game_temp.menu_beep = false
# ?????? ???????
$game_player.make_encounter_count
# ??? BGM ?????BGM ???
$game_temp.map_bgm = $game_system.playing_bgm
$game_system.bgm_stop
# ????? SE ???
$game_system.se_play($data_system.battle_start_se)
# ??? BGM ???
$game_system.bgm_play($game_system.battle_bgm)
# ????—??????
$game_player.straighten
# ??????????
$scene = Scene_Battle.new
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def call_shop
# ???????????????
$game_temp.shop_calling = false
# ????—??????
$game_player.straighten
# ???????????
$scene = Scene_Shop.new
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def call_name
# ???????????????
$game_temp.name_calling = false
# ????—??????
$game_player.straighten
# ???????????
$scene = Scene_Name.new
end
#--------------------------------------------------------------------------
# ? ???—?????
#--------------------------------------------------------------------------
def call_menu
# ???—???????????
$game_temp.menu_calling = false
# ???— SE ????????????????
if $game_temp.menu_beep
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ???— SE ?????????
$game_temp.menu_beep = false
end
# ????—??????
$game_player.straighten
# ???—???????
$scene = Scene_Menu.new
end
#--------------------------------------------------------------------------
# ? ?—??????
#--------------------------------------------------------------------------
def call_save
# ????—??????
$game_player.straighten
# ?—????????
$scene = Scene_Save.new
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def call_debug
# ???????????????
$game_temp.debug_calling = false
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ????—??????
$game_player.straighten
# ???????????
$scene = Scene_Debug.new
end
#--------------------------------------------------------------------------
# ? ????—?????
#--------------------------------------------------------------------------
def transfer_player
# ????—???????????
$game_temp.player_transferring = false
# ????????????????
if $game_map.map_id != $game_temp.player_new_map_id
# ?????????????
$game_map.setup($game_temp.player_new_map_id)
end
# ????—??????
$game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
# ????—??????
case $game_temp.player_new_direction
when 2 # ?
$game_player.turn_down
when 4 # ?
$game_player.turn_left
when 6 # ?
$game_player.turn_right
when 8 # ?
$game_player.turn_up end
# ????—??????
$game_player.straighten
# ?????? (????????)
$game_map.update
# ????????????
@spriteset.dispose
@spriteset = Spriteset_Map.new
# ?????????????
if $game_temp.transition_processing
# ?????????????????
$game_temp.transition_processing = false
# ?????????
Graphics.transition(20)
end
# ??????????? BGM ? BGS ??????????
$game_map.autoplay
# ??—?????
Graphics.frame_reset
# ???????
Input.update
end
end
Ostatnią rzeczą jaką musimy zrobić to edytować skrypt Scene_Gameover
Otwieramy go.
Schodzimy do lini 56:
$scene = Scene_Title.new
zmieniamy na
$scene = Scene_Nowa.new
I to wszystko :D
Teraz uruchomcie grę dajcie się zabić jakiemuś stworkowi i sprawdzcie czy działa...
Jeśli nie działa zacznijcie od początku pewnie się gdzieś zgubiliście ^^
W razie jakichkolwiek problemów piszcie na gg 8581693
albo na maila akws@o2.pl
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