• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[SCRIPT] Autosalvataggio + Neo Save System 3.0
#1
DESCRIZIONE:
Script per autosalvataggio del gioco dopo aver cambiato mappa, dopo aver vinto una battaglia o dopo aver chiuso il menù.
ATTENZIONE: Il salvataggio di default non verrà eliminato, si potrà ancora salvare dal menù (E' stato comunque implementato allo script il Neo Save System 3.0, un tipo di salvataggio "evoluto" xD)

AUTORE/I:
Bulletxt per lo script dell'autosalvataggio;
Woratana per il Neo Save System 3.0;
Dheed per la traduzione.

ISTRUZIONI:
Inserire lo script sopra Main.
Il resto lo trovate nello script

SCRIPT:
[SPOILER]
Codice:
=begin
                      AutoSave VX + Woratana Neo Save System 3.0
                                  
Autore: BulleXt(bulletxt@gmail.com)
Version: 0.1
Date: 06/07/2009
Traduttore:Dheed(io)

Descrizione:
Questo script ti permette di salvare automaticamente quando fai un cambio di mappa,
dopo aver finito un combattimento o dopo essere uscito dal menù.
Puoi inoltre chiamare un autosalvataggio,semplicemento inserendo in un evento
un call script come questo:
Auto_Save.new
Questo script non disabilità il normale salvataggio,così il giocatore puo
salvare quando vuole,il giocatore non potrà sovrascrivere l'autosalvataggio.
Lo script ti permette di settare il numero di spazi che vuoi.
=end


#Questo è il numero dello slot/spazio dove si effettua l'autosalvataggio
SAVE_NUMBER = 1

#Questo è un'ID switch, se ON disabilità l'autosalvataggio quando si cambia mappa
SAVE_ON_MAP_TRANSFER = 1

#Questo è un'ID switch, se ON disabilità l'autosalvataggio dopo una vittoria
SAVE_AFTER_WINNING_BATTLE = 2

#Questo è  un'ID switch, se ON disabilità l'autosalvataggio dopo
SAVE_AFTER_CLOSING_MENU = 3



#===============================================================
# ? [VX] ? Neo Save System III ? ?
#--------------------------------------------------------------
# ? by Woratana [woratana@hotmail.com]
# ? Thaiware RPG Maker Community
# ? Released on: 15/02/2009
# ? Version: 3.0
#--------------------------------------------------------------
# ? Log III:
# - Change back to draw tilemap as screenshot. Don't need any image.
# - For drawing tilemap, the characters won't show on the tilemap.
#--------------------------------------------------------------
# ? Log II:
# - Screenshot DLL is not work with Vista Aero, so I remove it
# and use image for each map instead of screenshot.
# - Il livello degli attori mostrati nella versione 1,non sono corretti.
#--------------------------------------------------------------
# ? Novità:
# - Infiniti slot di salvataggio,puoi scegliere il limite
# - Puoi scegliere l'immagine del background della scena
# - Scegli il nome del salvataggio e il percorso di esso
# - Scegli di mostrare solo le informazioni che vuoi
# - Testi editabili della schermata informazioni
# - Mostra tilemap della mappa dove si trova il giocatore.
# - Rimuovi le scritte indesiderate dalla mappa (e.g. etichette per gli eventi)
# - Scegli la mappa di cui non vuoi mostrare il nome
# - Include la finestra per confermare il sovrascrivere del salvataggio
#=================================================================

module Wora_NSS
  #==========================================================================
  # * START NEO SAVE SYSTEM - SETUP
  #--------------------------------------------------------------------------
  NSS_WINDOW_OPACITY = 255 # Opacità di tutte le finestre (basso 0 - 255 alto)
  # Puoi setterlo a 0 nel caso tu voglia lasciare un'immagine in background
  NSS_IMAGE_BG = '' # Il nome del file background,deve essere nella cartella Pictures.
  # Usa '' per nessun background
  NSS_IMAGE_BG_OPACITY = 255 # Opacità del background.
  
  MAX_SAVE_SLOT = 20 # Numero massimo di saveslot.
  SLOT_NAME = 'SPAZIO {id}'
  # nome dell'autosalvataggio (mostrato nella schermata di caricamento),
  #Usa {id} per l'ID dello slot
  SAVE_FILE_NAME = 'Autosalvataggio{id}.rvdata'
  # Nome del salvataggio, puoi anche cambiarlo da .rvdata
  # Usa {id} per l'ID dello slot
  SAVE_PATH = '' # Percorso del salvataggio, e.g. 'Save/' or '' (per il percorso default)
  
  SAVED_SLOT_ICON = 133 # IconaIndex per il save slot
  EMPTY_SLOT_ICON = 141 # Colore per lo slot vuoto
  
  EMPTY_SLOT_TEXT = '-Nessun Salvataggio-' # Testo per gli slot vuoti
  
  DRAW_GOLD = true # Mostara oro
  DRAW_PLAYTIME = true # Mostra tempo di gioco
  DRAW_LOCATION = true # Mostra locazione
  DRAW_FACE = true # Mostra faccia giocatore
  DRAW_LEVEL = true # Mostra faccia giocatore
  DRAW_NAME = true # mostra nome giocatore
  
  PLAYTIME_TEXT = 'Tempo Giocato: '
  GOLD_TEXT = 'Oro: '
  LOCATION_TEXT = 'Locazione: '
  LV_TEXT = 'Lv '
  
  MAP_NAME_TEXT_SUB = %w{}
  # Testo che vuoi rimuovere dal map name,
  # e.g. %w{[LN] [DA]} rimuoverà '[LN]' e '[DA]' dal map name
  MAP_NO_NAME_LIST = [] # ID della mappa che non mostr map name, e.g. [1,2,3]
  MAP_NO_NAME_NAME = '??????????' # What you will use to call map in no name list
  
  MAP_BORDER = Color.new(0,0,0,200) # Colore bordo mappa (R,G,B,Opacity)
  FACE_BORDER = Color.new(0,0,0,200) # Colore bordo faccia
  
  ## fINESTRA CONFERMA SALVATAGGIO ##
  SFC_Text_Confirm = 'Confermi il salvataggio?' # Testo per confermare il salvataggio
  SFC_Text_Cancel = 'Cancella' # Testo per cancellare la schermata di conferma
  SFC_Window_Width = 200 # Larghezza della finestra di conferma
  SFC_Window_X_Offset = 0 # Muovi la finestra di conferma orizontalmente
  SFC_Window_Y_Offset = 0 # Muovi la finestra di conferma verticalmente
  #----------------------------------------------------------------------
  # END NEO SAVE SYSTEM - SETUP
  #=========================================================================
end

class Auto_Save < Scene_File
  def initialize
    do_save
  end
end



class Scene_File < Scene_Base
  include Wora_NSS
  attr_reader :window_slotdetail
  #--------------------------------------------------------------------------
  # * Inizio processo
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    if NSS_IMAGE_BG != ''
      @bg = Sprite.new
      @bg.bitmap = Cache.picture(NSS_IMAGE_BG)
      @bg.opacity = NSS_IMAGE_BG_OPACITY
    end
    @help_window = Window_Help.new
    command = []
    (1..MAX_SAVE_SLOT).each do |i|
      command << SLOT_NAME.clone.gsub!(/\{ID\}/i) { i.to_s }
    end
    @window_slotdetail = Window_NSS_SlotDetail.new
    @window_slotlist = Window_SlotList.new(160, command)
    @window_slotlist.y = @help_window.height
    @window_slotlist.height = Graphics.height - @help_window.height
    @help_window.opacity = NSS_WINDOW_OPACITY
    @window_slotdetail.opacity = @window_slotlist.opacity = NSS_WINDOW_OPACITY
    
  # Creazione cartella salvataggio
  if SAVE_PATH != ''
    Dir.mkdir(SAVE_PATH) if !FileTest.directory?(SAVE_PATH)
  end
    if @saving
      @index = $game_temp.last_file_index
      @help_window.set_text(Vocab::SaveMessage)
    else
      @index = self.latest_file_index
      @help_window.set_text(Vocab::LoadMessage)
      (1..MAX_SAVE_SLOT).each do |i|
        @window_slotlist.draw_item(i-1, false) if !@window_slotdetail.file_exist?(i)
      end
    end
    @window_slotlist.index = @index
    # Mostra informazioni
    @last_slot_index = @window_slotlist.index
    @window_slotdetail.draw_data(@last_slot_index + 1)
  end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    unless @bg.nil?
      @bg.bitmap.dispose
      @bg.dispose
    end
    @window_slotlist.dispose
    @window_slotdetail.dispose
    @help_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    if !@confirm_window.nil?
      @confirm_window.update
      if Input.trigger?(Input::C)
        if @confirm_window.index == 0
          determine_savefile
          @confirm_window.dispose
          @confirm_window = nil
        else
          Sound.play_cancel
          @confirm_window.dispose
          @confirm_window = nil
        end
      elsif Input.trigger?(Input::B)
      Sound.play_cancel
      @confirm_window.dispose
      @confirm_window = nil
      end
    else
      update_menu_background
      @window_slotlist.update
      if @window_slotlist.index != @last_slot_index
        @last_slot_index = @window_slotlist.index
        @window_slotdetail.draw_data(@last_slot_index + 1)
      end
      @help_window.update
      update_savefile_selection
    end
  end
  #--------------------------------------------------------------------------
  # * Update Save File Selection
  #--------------------------------------------------------------------------
  def update_savefile_selection
    if Input.trigger?(Input::C)
      if @saving and @window_slotdetail.file_exist?(@last_slot_index + 1)
        Sound.play_decision
        text1 = SFC_Text_Confirm
        text2 = SFC_Text_Cancel
        @confirm_window = Window_Command.new(SFC_Window_Width,[text1,text2])
        @confirm_window.x = ((544 - @confirm_window.width) / 2) + SFC_Window_X_Offset
        @confirm_window.y = ((416 - @confirm_window.height) / 2) + SFC_Window_Y_Offset
      else
        determine_savefile
      end
    elsif Input.trigger?(Input::B)
      Sound.play_cancel
      return_scene
    end
  end
  #--------------------------------------------------------------------------
  # * ESEGUIRE SALVATAGGIO
  #--------------------------------------------------------------------------
  def do_save
    
    #Se true, il giocatore salva da dentro il menù
    if @saving
      file = File.open(make_filename(@last_slot_index), "wb")
    else
      #Se il giocatore effetua un Auto_Save.new chiamato da un evento
      s = SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { SAVE_NUMBER.to_s }
      file = File.open( s , "wb")
    end
    write_save_data(file)
    file.close
    $scene = Scene_Map.new if @saving
  end
  #--------------------------------------------------------------------------
  # * ESEGUIRE CARICAMENTO
  #--------------------------------------------------------------------------
  def do_load
    file = File.open(make_filename(@last_slot_index), "rb")
    read_save_data(file)
    file.close
    $scene = Scene_Map.new
    RPG::BGM.fade(1500)
    Graphics.fadeout(60)
    Graphics.wait(40)
    @last_bgm.play
    @last_bgs.play
  end
  #--------------------------------------------------------------------------
  # * CONFERMA SALVATAGGIO
  #--------------------------------------------------------------------------
  def determine_savefile
    
    if @last_slot_index + 1 == SAVE_NUMBER
      saving_not_allowed if @saving
      return  if @saving
    end
    
    if @saving
      Sound.play_save
      do_save
    else
      if @window_slotdetail.file_exist?(@last_slot_index + 1)
        Sound.play_load
        do_load
      else
        Sound.play_buzzer
        return
      end
    end
    $game_temp.last_file_index = @last_slot_index
  end
  
  #Finestra per informare che il giocatore non puo salvare qui
  def saving_not_allowed
    Sound.play_buzzer
    b = Bitmap.new(340,60)
    b.draw_text(0, 20,340, 20, "Non puoi salvare su questo slot.")
    w = Window_Message.new
    w.contents = b
    w.width = 380
    w.height = 100
    w.visible = true
    w.openness = 255
    w.x = 100
    w.y = 180
    w.back_opacity = 255
    w.opacity = 255
    w.update
    Graphics.wait(180)
    b.dispose
    w.dispose
    w = nil
    b = nil
  end  

  
  
  #--------------------------------------------------------------------------
  # * Create Filename
  #     file_index : save file index (0-3)
  #--------------------------------------------------------------------------
  def make_filename(file_index)
    return SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { (file_index + 1).to_s }
  end
  #--------------------------------------------------------------------------
  # * Select File With Newest Timestamp
  #--------------------------------------------------------------------------
  def latest_file_index
    latest_index = 0
    latest_time = Time.at(0)
    (1..MAX_SAVE_SLOT).each do |i|
      file_name = make_filename(i - 1)
      next if !@window_slotdetail.file_exist?(i)
      file_time = File.mtime(file_name)
      if file_time > latest_time
        latest_time = file_time
        latest_index = i - 1
      end
    end
    return latest_index
  end
end

class Window_SlotList < Window_Command
  #--------------------------------------------------------------------------
  # * MOSTRA OGGETTI
  #--------------------------------------------------------------------------
  def draw_item(index, enabled = true)
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    icon_index = 0
    self.contents.clear_rect(rect)
    if $scene.window_slotdetail.file_exist?(index + 1)
      icon_index = Wora_NSS::SAVED_SLOT_ICON
    else
      icon_index = Wora_NSS::EMPTY_SLOT_ICON
    end
    if !icon_index.nil?
      rect.x -= 4
      draw_icon(icon_index, rect.x, rect.y, enabled) # Draw Icon
      rect.x += 26
      rect.width -= 20
    end
    self.contents.clear_rect(rect)
    self.contents.font.color = normal_color
    self.contents.font.color.alpha = enabled ? 255 : 128
    self.contents.draw_text(rect, @commands[index]) if index + 1 != SAVE_NUMBER
    self.contents.draw_text(rect, "Auto Save") if index + 1 == SAVE_NUMBER
  end
  
  def cursor_down(wrap = false)
    if @index < @item_max - 1 or wrap
      @index = (@index + 1) % @item_max
    end
  end

  def cursor_up(wrap = false)
    if @index > 0 or wrap
      @index = (@index - 1 + @item_max) % @item_max
    end
  end
end

class Window_NSS_SlotDetail < Window_Base
  include Wora_NSS
  def initialize
    super(160, 56, 384, 360)
    @data = []
    @exist_list = []
    @bitmap_list = {}
    @map_name = []
  end
  
  def dispose
    dispose_tilemap
    super
  end

  def draw_data(slot_id)
    contents.clear # 352, 328
    dispose_tilemap
    load_save_data(slot_id) if @data[slot_id].nil?
    if @exist_list[slot_id]
      save_data = @data[slot_id]
      # MOSTRA SCREENSHOT~
      contents.fill_rect(0,30,352,160, MAP_BORDER)
      create_tilemap(save_data['gamemap'].data, save_data['gamemap'].display_x,
    save_data['gamemap'].display_y)
      if DRAW_GOLD
        # MOSTRA ORO
        gold_textsize = contents.text_size(save_data['gamepar'].gold).width
        goldt_textsize = contents.text_size(GOLD_TEXT).width
        contents.font.color = system_color
        contents.draw_text(0, 0, goldt_textsize, WLH, GOLD_TEXT)
        contents.draw_text(goldt_textsize + gold_textsize,0,200,WLH, Vocab::gold)
        contents.font.color = normal_color
        contents.draw_text(goldt_textsize, 0, gold_textsize, WLH, save_data['gamepar'].gold)
      end
      if DRAW_PLAYTIME
        # MOSTRA TEMPO DI GIOCO
        hour = save_data['total_sec'] / 60 / 60
        min = save_data['total_sec'] / 60 % 60
        sec = save_data['total_sec'] % 60
        time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
        pt_textsize = contents.text_size(PLAYTIME_TEXT).width
        ts_textsize = contents.text_size(time_string).width
        contents.font.color = system_color
        contents.draw_text(contents.width - ts_textsize - pt_textsize, 0,
        pt_textsize, WLH, PLAYTIME_TEXT)
        contents.font.color = normal_color
        contents.draw_text(0, 0, contents.width, WLH, time_string, 2)
      end
      if DRAW_LOCATION
        # MOSTRA LOCAZIONE
        lc_textsize = contents.text_size(LOCATION_TEXT).width
        mn_textsize = contents.text_size(save_data['map_name']).width
        contents.font.color = system_color
        contents.draw_text(0, 190, contents.width,
        WLH, LOCATION_TEXT)
        contents.font.color = normal_color
        contents.draw_text(lc_textsize, 190, contents.width, WLH,
        save_data['map_name'])
      end
        # MOSTRA FACCIA & Livello & Nome
        save_data['gamepar'].members.each_index do |i|
          actor = save_data['gameactor'][save_data['gamepar'].members[i].id]
          face_x_base = (i*80) + (i*8)
          face_y_base = 216
          lvn_y_plus = 10
          lv_textsize = contents.text_size(actor.level).width
          lvt_textsize = contents.text_size(LV_TEXT).width
        if DRAW_FACE
          # Draw Face
          contents.fill_rect(face_x_base, face_y_base, 84, 84, FACE_BORDER)
          draw_face(actor.face_name, actor.face_index, face_x_base + 2,
          face_y_base + 2, 80)
        end
        if DRAW_LEVEL
          # Draw Level
          contents.font.color = system_color
          contents.draw_text(face_x_base + 2 + 80 - lv_textsize - lvt_textsize,
          face_y_base + 2 + 80 - WLH + lvn_y_plus, lvt_textsize, WLH, LV_TEXT)
          contents.font.color = normal_color
          contents.draw_text(face_x_base + 2 + 80 - lv_textsize,
          face_y_base + 2 + 80 - WLH + lvn_y_plus, lv_textsize, WLH, actor.level)
        end
        if DRAW_NAME
          # Draw Name
          contents.draw_text(face_x_base, face_y_base + 2 + 80 + lvn_y_plus - 6, 84,
          WLH, actor.name, 1)
        end
      end
    else
      contents.draw_text(0,0, contents.width, contents.height - WLH, EMPTY_SLOT_TEXT, 1)
    end
  end
  
  def load_save_data(slot_id)
    file_name = make_filename(slot_id)
    if file_exist?(slot_id) or FileTest.exist?(file_name)
      @exist_list[slot_id] = true
      @data[slot_id] = {}
      # Start load data
      file = File.open(file_name, "r")
      @data[slot_id]['time'] = file.mtime
      @data[slot_id]['char'] = Marshal.load(file)
      @data[slot_id]['frame'] = Marshal.load(file)
      @data[slot_id]['last_bgm'] = Marshal.load(file)
      @data[slot_id]['last_bgs'] = Marshal.load(file)
      @data[slot_id]['gamesys'] = Marshal.load(file)
      @data[slot_id]['gamemes'] = Marshal.load(file)
      @data[slot_id]['gameswi'] = Marshal.load(file)
      @data[slot_id]['gamevar'] = Marshal.load(file)
      @data[slot_id]['gameselfvar'] = Marshal.load(file)
      @data[slot_id]['gameactor'] = Marshal.load(file)
      @data[slot_id]['gamepar'] = Marshal.load(file)
      @data[slot_id]['gametro'] = Marshal.load(file)
      @data[slot_id]['gamemap'] = Marshal.load(file)
      @data[slot_id]['total_sec'] = @data[slot_id]['frame'] / Graphics.frame_rate
      @data[slot_id]['map_name'] = get_mapname(@data[slot_id]['gamemap'].map_id)
      file.close
    else
      @exist_list[slot_id] = false
      @data[slot_id] = -1
    end
  end

  def make_filename(file_index)
    return SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { (file_index).to_s }
  end
  
  def file_exist?(slot_id)
    return @exist_list[slot_id] if !@exist_list[slot_id].nil?
    @exist_list[slot_id] = FileTest.exist?(make_filename(slot_id))
    return @exist_list[slot_id]
  end

  def get_mapname(map_id)
    if @map_data.nil?
      @map_data = load_data("Data/MapInfos.rvdata")
    end
    if @map_name[map_id].nil?
      if MAP_NO_NAME_LIST.include?(map_id)
        @map_name[map_id] = MAP_NO_NAME_NAME
      else
        @map_name[map_id] = @map_data[map_id].name
        MAP_NAME_TEXT_SUB.each_index do |i|
          @map_name[map_id].sub!(MAP_NAME_TEXT_SUB[i], '')
        end
      end
    end
    return @map_name[map_id]
  end
  
  def create_tilemap(map_data, ox, oy)
    @viewport = Viewport.new(self.x + 2 + 16, self.y + 32 + 16, 348,156)
    @viewport.z = self.z
    @tilemap = Tilemap.new(@viewport)
    @tilemap.bitmaps[0] = Cache.system("TileA1")
    @tilemap.bitmaps[1] = Cache.system("TileA2")
    @tilemap.bitmaps[2] = Cache.system("TileA3")
    @tilemap.bitmaps[3] = Cache.system("TileA4")
    @tilemap.bitmaps[4] = Cache.system("TileA5")
    @tilemap.bitmaps[5] = Cache.system("TileB")
    @tilemap.bitmaps[6] = Cache.system("TileC")
    @tilemap.bitmaps[7] = Cache.system("TileD")
    @tilemap.bitmaps[8] = Cache.system("TileE")
    @tilemap.map_data = map_data
    @tilemap.ox = ox / 8 + 99
    @tilemap.oy = oy / 8 + 90
  end
  
  def dispose_tilemap
    unless @tilemap.nil?
      @tilemap.dispose
      @tilemap = nil
    end
  end
end

class Scene_Title < Scene_Base
  def check_continue
    file_name = Wora_NSS::SAVE_PATH + Wora_NSS::SAVE_FILE_NAME.gsub(/\{ID\}/i) { '*' }
    @continue_enabled = (Dir.glob(file_name).size > 0)
  end
end

################################################################################
class Scene_Menu < Scene_Base
  #Salva quando esci dal menù
  alias auto_save_bulletxt_update_command_selection update_command_selection
  def update_command_selection    
    if Input.trigger?(Input::B)
      Auto_Save.new if $game_switches[SAVE_AFTER_CLOSING_MENU] == false
    end
    auto_save_bulletxt_update_command_selection
  end
end

class Scene_Battle < Scene_Base
  #Salvataggio dopo aver vinto una battaglia
  alias auto_save_bulletxt_process_victory process_victory
  def process_victory
    auto_save_bulletxt_process_victory
    Auto_Save.new if $BTEST == false && $game_switches[SAVE_AFTER_WINNING_BATTLE] == false
  end
end



class Scene_Map < Scene_Base
  #Salvataggio dopo un cambio di mappa
  alias auto_save_bulletxt_update_transfer_player  update_transfer_player
  def update_transfer_player
    return unless $game_player.transfer?
    auto_save_bulletxt_update_transfer_player
    Auto_Save.new if $game_switches[SAVE_ON_MAP_TRANSFER] == false
  end
end

#======================================================================
# END - NEO SAVE SYSTEM by Woratana
[/SPOILER]


BUG E CONFLITTI NOTI:
Nessuno.
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  [SCRIPT] RPG Maker VX Action Battle System (PRABS2) OmegaSt 4 5,844 08-05-2012, 10:23 AM
Ultimo messaggio: SuperMario
  [SCRIPT] Mouse System Johnny 97 0 1,329 14-07-2011, 07:15 PM
Ultimo messaggio: Johnny 97
  [SCRIPT] Tankentai Sidewiew System Zapetino 4 1,522 25-06-2011, 12:12 PM
Ultimo messaggio: Zapetino
Wink [SCRIPT] I-Phone System lavezzinapoli7 0 1,088 24-06-2011, 10:21 PM
Ultimo messaggio: lavezzinapoli7
  [SCRIPT] Neo Save System V lavezzinapoli7 0 1,297 24-06-2011, 08:34 PM
Ultimo messaggio: lavezzinapoli7
  [SCRIPT] Time system Zapetino 0 1,397 30-04-2011, 07:53 PM
Ultimo messaggio: Zapetino

Vai al forum:


Browsing: 1 Ospite(i)