UltimaForum

Wsparcie [XP] - Game Over

Yoroiookami - Sob 19 Cze, 2010 16:37
Temat postu: Game Over
Potrzebowałbym, żeby po ¶mierci (Game Over) pojawiała się opcja Menu, albo Kontynuuj(Przenosi do ostatniego zapisu/checkpointa). Wiem, że jest skrypt który wy¶wietla opcję Menu i Wczytaj, ale ja potrzebuję dokładnie tego co powyżej, a sam nie potrafię przerobić. >_>
Za pomoc dziękuję z góry.

CreeperCrisis - Sob 19 Cze, 2010 20:16

Tu masz skrypt na quick save :-)
Spoiler:

Kod:
#===============================================================================
#--------# Quicksave Script #---------------------------------------------------
#--------#    version 1.0   #---------------------------------------------------
#--------#    by Thieffer   #---------------------------------------------------
#--------#    25.08.2009    #---------------------------------------------------
#===============================================================================


#===============================================================================
#--------#      INFO        #---------------------------------------------------
#===============================================================================
# Skrypt umożliwia szybkie wczytywanie i zapisywanie oraz autozapis stanu gry.
#
# Aby użyć szybkiego zapisu wystarczy wcisnąć odpowiedni klawisz (patrz: CONFIG)
# będąc na mapie. Opcjonalnie jest to klawisz F5.
#
# Szybkie wczytanie dostępne jest z poziomu Ekranu Tytułowego. Jednak, aby
# działało poprawnie musisz skaskować linijkę:
#       @command_window = Window_Command.new(192, [s1, s2, s3])
# a w jej miejsce wpisać:
#       set_title_commands
#
# Aby użyć autozapisu wywołaj komendę:
#       $game_system.autosave
#
# W dowolnym momencie gry możesz użyć opcji szybkiego wczytania, wywołaj komendę:
#       $game_system.quickload
#===============================================================================


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

Działa :?: Jak nie to sorka, ponieważ nie mam jak przetestować :-) nie mam RMXP :-)
#--------#      CONFIG      #---------------------------------------------------
#===============================================================================
Quicksave = 'Data/Quicksave'          # �ieżka oraz nazwa pliku
Quicksave_Key = Input::F5             # przycisk szybkiego zapisu

Quicksave_Text = 'Dokonano zapisu'    # tekst szybkiego zapisu
Quicksave_Text_Color = 0              # kolor tekstu (od 0 do 7), zdefiniowany w Window_Base
Quicksave_Text_Size = 19              # rozmiar tekstu
Quicksave_Text_Switch = true          # włącznik/wyłącznik tekstu (true/false)

Autosave_Text = 'Dokonano autozapisu' # tekst automatycznego zapisu
Autosave_Text_Color = 6               # kolor tekstu (od 0 do 7), zdefiniowany w Window_Base
Autosave_Text_Size = 19               # rozmiar tekstu
Autosave_Text_Switch = true           # włącznik/wyłącznik tekstu (true/false)
#===============================================================================


class Scene_Title
 
  def set_title_commands
    commands = ["Nowa Gra", "Wczytaj", "Szybkie Wczytanie", "Wyj�ie"]
    @command_window = Window_Command.new(210, commands)
    if not FileTest.exist?(Quicksave)
      @command_window.disable_item(2)
    end
  end
 
  def update
    @command_window.update
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0
        command_new_game
      when 1
        command_continue
      when 2
        command_quickload
      when 3
        command_shutdown
      end
    end
  end
 
  def command_quickload
    $game_system.quickload
  end
 
end

class Window_Quicksave < Window_Base
 
  def initialize(type)
    super(0, -10, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    @type = type
    refresh
  end

  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    case @type
    when 'quick'
      text = Quicksave_Text
      color_number = Quicksave_Text_Color
      size = Quicksave_Text_Size
      self.visible = false if not Quicksave_Text_Switch
    when 'auto'
      text = Autosave_Text
      color_number = Autosave_Text_Color
      size = Autosave_Text_Size
      self.visible = false if not Autosave_Text_Switch
    end
    self.contents.font.color = text_color(color_number)
    self.contents.font.size = size
    cx = contents.text_size(text).width
    self.contents.draw_text(304-cx/2, 0, cx, 32, text, 1)
  end
 
end

class Scene_Map
 
  alias quicksave_script_main main
  def main
    @wait_count = 0
    quicksave_script_main
  end
 
  alias quicksave_script_update update
  def update
    if @wait_count > 0
      @wait_count -= 1
    end
    if Input.press?(Quicksave_Key) and @wait_count == 0
      $game_system.quicksave
      $game_system.se_play($data_system.save_se)
      if @quicksave_text != nil
        @quicksave_text.dispose
      end
      @quicksave_text = Window_Quicksave.new('quick')
      @wait_count = 20
    end
    if @quicksave_text != nil
      @quicksave_text.update
    end
    if @wait_count == 0 and @quicksave_text != nil
      @quicksave_text.contents_opacity -= 10
      if @quicksave_text.contents_opacity <= 0
        @quicksave_text = nil
      end
      @wait_count = 5
    end
    quicksave_script_update
    if not $scene.is_a?(Scene_Map) and @quicksave_text != nil
      @quicksave_text.dispose
    end
  end
 
  def autosave
    $game_system.se_play($data_system.save_se)
    if @quicksave_text != nil
      @quicksave_text.dispose
    end
    @quicksave_text = Window_Quicksave.new('auto')
  end
 
end

class Game_System
 
  def autosave
    quicksave
    if $scene.is_a?(Scene_Map)
      $scene.autosave
    end
  end
 
  def quicksave
    file = File.open(Quicksave, 'wb')
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      characters.push([actor.character_name, actor.character_hue])
    end
    Marshal.dump(characters, file)
    Marshal.dump(Graphics.frame_count, file)
    $game_system.save_count += 1
    $game_system.magic_number = $data_system.magic_number
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
    file.close
  end
 
  def quickload
    if File.exist?(Quicksave)
      file = File.open(Quicksave)
      read_save_data(file)
      file.close
      $game_system.bgm_play($game_system.playing_bgm)
      $game_system.bgs_play($game_system.playing_bgs)
      $game_map.update
      $game_system.se_play($data_system.decision_se)
      $game_temp = Game_Temp.new
      $scene = Scene_Map.new
    else
      $game_system.se_play($data_system.buzzer_se)
    end
  end

  def read_save_data(file)
    characters = Marshal.load(file)
    Graphics.frame_count = Marshal.load(file)
    $game_system        = Marshal.load(file)
    $game_switches      = Marshal.load(file)
    $game_variables     = Marshal.load(file)
    $game_self_switches = Marshal.load(file)
    $game_screen        = Marshal.load(file)
    $game_actors        = Marshal.load(file)
    $game_party         = Marshal.load(file)
    $game_troop         = Marshal.load(file)
    $game_map           = Marshal.load(file)
    $game_player        = Marshal.load(file)
    if $game_system.magic_number != $data_system.magic_number
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
    $game_party.refresh
  end
 
end
#==============================================================================



checkpoint możesz zrobić, gdy wywołasz:
Kod:
$game_system.autosave


a tu skrypt z Game Over:
Spoiler:

Kod:
class Scene_Gameover
  def main
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.gameover($data_system.gameover_name)
    s1 = "Kontynuuj"
    s2 = "Koniec"
    @command_window = Window_Command.new(192, [s1, s2])
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
    $game_system.bgm_play(nil)
    $game_system.bgs_play(nil)
    $game_system.me_play($data_system.gameover_me)
    Graphics.transition(120)
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @sprite.bitmap.dispose
    @sprite.dispose
    @command_window.dispose
    Graphics.transition(40)
    Graphics.freeze
    if $BTEST
      $scene = nil
    end
  end
    def update
    @command_window.update
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0
        command_menu
      when 1
        command_end
      end
    end
    def command_menu
      $game_system.quickload
    end
    def command_end
      $game_system.se_play($data_system.decision_se)
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    $scene = nil
      end
end
end


Yoroiookami - Nie 20 Cze, 2010 08:52

Napiszę jeszcze raz żeby 'migało':
---------------------
Dzięki, wypróbuję ^^

EDIT: można wywołać ten checkpoint podobnym skryptem?
W sensie, czy można w trakcie gry przesun±ć gracza do ostatniego checkpointa.

CreeperCrisis - Nie 20 Cze, 2010 10:18

To ja już chyba nie wiem. Spróbuję :-)
jest takie co¶. Ten quick save można zapisać przyciskiem "F5"

Yoroiookami - Nie 20 Cze, 2010 10:22

Chodzi o to, żeby w grze były te autozapisy(to już mam) i żebym np. po ¶mierci mógł to wywołać, żeby gracz miał opcję powrotu do checkpointa. ^^
Sabikku - Pon 21 Cze, 2010 21:04

Mówisz o $game_system.quickload ? Czy chodzi o jaki¶ zupełnie nowy skrypt? Staraj się konkretniej tłumaczyć...
Yoroiookami - Pon 21 Cze, 2010 21:56

Sabikku - a sk±d mam kurde wiedzieć? Nie znam się na Ruby i nigdy nie bawiłem się skryptami, wstawiam gotowce w 0% obrabiane przeze mnie(chyba że na podstawie instrukcji). Nie wiem na czym polega ten skrypt, chcę po prostu użyć skryptu wyżej (checkpoint), żeby ten drugi skrypt którego potrzebuję(ten quickload czy jak go tam nazwałe¶) przenosił gracza do tego checkpointu w dowolnym momencie gry. Po prostu chcę ustawić żeby w pewnym momencie się wracał do tego checkpointa, żeby był wczytywany, a nie teleportowany.
Wyja¶niłem dokładniej? Czy wolisz wypracowanie :?:

Sabikku - Pon 21 Cze, 2010 22:19

To może ja też napiszę konkretniej:
Spoiler:


Nie denerwuj się, przecież chcę ci pomóc ;-) .

Yoroiookami - Pon 21 Cze, 2010 22:56

Sabikku - ...aż szkoda gadać.
Ja wiem jak się tego używa...nie znałem tylko tego kodu z autoload.
Tak czy inaczej dzięki, temat można zamkn±ć >_>


Powered by phpBB modified by Przemo © 2003 phpBB Group