Vai al contenuto

Rilevato Ad-Blocker. Per favore disabilita il tuo adblocker quando navighi su makerando.com - Non c'è nessun annuncio invasivo.

  • Chatbox

    You don't have permission to chat.
    Load More

Recommended Posts

SwapTX


parachute.png
L'applicazione definitiva per cambiare tileset/passaggi più semplicemente!!!



Nome Script: SwapXT
Versione: 1.0
Autore/i: BulletXT

Informazioni:
Con questo script e programma,possiamo utilizzare quanti tileset vogliamo troncando nettamente la limitazione impostata sul VX.
Dalla versione precedente,questa ha subito una forte miglioria,diventando l'applicazione definitiva =)

Screenshots:

1_tileset.png
2_passages.png
3_vx_maps.png
4_create_realtime.png
5_manage_realtime.png



Istruzioni:
- Scaricare ed inserite lo script nel vostro progetto
- Scaricare ed installate il programma
- Una volta aperto il programma vi verrà chiesto di scegliere il progetto che volete modificare selezionando il file Game.ini
- Ora inserite tutti i tileset che volete cambiare creando una cartella in Graphics/System /extra_tiles
- Utilizzare le prime due schede del programma per cambiare tileset/passabilità per poi mappare
- Utilizzare la terza scheda per applicare lo swap a un'ID mappa e modificare quelle esistenti
- Utilizzare la terza scheda per swappare i tile in tempo reale

Script:

=begin
                                SwapXT

Version: 1.0
Author: Marco Di Antonio ([email protected])
Nickname: BulletXt
Date: 14/07/2010

This is SwapXT script that must be put in your VX game script section.
It's Plug&Play.
Use SwapXT application to do swaps once you put this into your VX game.

=end


############################# CONFIGURATION ####################################

#Switch ID.
#If ON, your events will not swap according to tiles and will use default tiles.
DISABLE_EVENT_SWAPPING = 100


=begin
IGNORE the following two switches IDs unless you are using
old 0.4 swapping script found at:
http://lodestone2d.svn.sourceforge.net/viewvc/lodestone2d/Scripts-Dev/Swap_TileSet/Swap_tile_new_passage_setting.rb .
If you are, set the 2 ID switches to ensure compatibility
with your current "old system" swaps.
The meaning of these two switches are described on the old 0.4 script, and you
should already have confidence with them if you need these.
=end
SWAP_TILE = 9999
LOAD_PASSAGE_SETTING = 9998


########################## END CONFIGURATION ###################################


#==============================================================================
# ** Cache

module Cache_Swap_Tiles

  #error message in case user is swapping tiles
  #on a map with both old and new system
  def self.error_message(map_id)
  $bulletxt_error_message_mixed_swapping_configuration = "BulletXt Message:
  on this map ID " + map_id.to_s() + "
  you have a dangerous configuration.
  You are swapping tilesets from events and from the swapping application.
  Mixed configuration is not allowed.
  Please decide which system to use to swap your tiles.
  I highly suggest to swap tilesets using the swapping application.
  If you decide to do this, please be sure you turn off the swapping switch
  ID " + SWAP_TILE.to_s() + " before entering this map.
  I will close the game for security reasons."  
  #get rid of n
  array = $bulletxt_error_message_mixed_swapping_configuration.split("n")
  size = array.length()
  n = 0
  f = ""
  while n < size do
    message = array[n]
    f = f + message
    n = n + 1
  end
  $bulletxt_error_message_mixed_swapping_configuration = f
  end

  #error message in case user is swapping passage settings
  #on a map with both old and new system
  def self.error_message_passage(map_id)
  $bulletxt_error_message_mixed_swapping_configuration = "BulletXt Message:
  on this map ID " + map_id.to_s() + "
  you have a dangerous configuration.
  You are swapping a passage settings from events and from the swapping application.
  Mixed configuration is not allowed.
  Please decide which system to use to swap your passage settings.
  I highly suggest to swap passage settings using the swapping application.
  If you decide to do this, please be sure you turn off the swapping passage
  setting switch ID " + LOAD_PASSAGE_SETTING.to_s() + " before entering this map.
  I will close the game for security reasons."  
  #get rid of n
  array = $bulletxt_error_message_mixed_swapping_configuration.split("n")
  size = array.length()
  n = 0
  f = ""
  while n < size do
    message = array[n]
    f = f + message
    n = n + 1
  end
  $bulletxt_error_message_mixed_swapping_configuration = f
  end  


  #--------------------------------------------------------------------------
  # * Get Character Graphic
  #     filename : Filename
  #--------------------------------------------------------------------------
  def self.swap(filename)
    load_bitmap("Graphics/System/extra_tiles/", filename)
  end

  #--------------------------------------------------------------------------
  # * Clear Cache
  #--------------------------------------------------------------------------
  def self.clear
    @cache = {} if @cache == nil
    @cache.clear
    GC.start
  end
  #--------------------------------------------------------------------------
  # * Load Bitmap
  #--------------------------------------------------------------------------
  def self.load_bitmap(folder_name, filename, hue = 0)
    @cache = {} if @cache == nil
    path = folder_name + filename
    if not @cache.include?(path) or @cache[path].disposed?
      if filename.empty?
        @cache[path] = Bitmap.new(32, 32)
      else
        @cache[path] = Bitmap.new(path)
      end
    end
    if hue == 0
      return @cache[path]
    else
      key = [path, hue]
      if not @cache.include?(key) or @cache[key].disposed?
        @cache[key] = @cache[path].clone
        @cache[key].hue_change(hue)
      end
      return @cache[key]
    end
  end
end


################################################################################



############ CHECK IF THERE ARE SWAPPED TILES AT START PLAY TIME ###############
=begin
We must ensure user is starting game and there are physically swapped tiles or
passage settings,
tiles that have been for example swapped from the application
=end
class Scene_Title < Scene_Base

  alias swapxt_start start
  def start
    swapxt_start
    check_if_tileset_swapped_exist
    check_if_passage_swapped_exist
  end

  def check_if_tileset_swapped_exist
    tile = "Graphics/System/swapped_"
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A1.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A2.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A3.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A4.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "A5.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "B.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "C.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "D.png")
    tileset_swap_loaded_message_error if FileTest.exist?(tile + "E.png")
  end

  def tileset_swap_loaded_message_error
    p sprintf("SwapXT Error: You are not allowed to start your game with swapped tilesets. You must unload your tilesets with SwapXT application first. Open SwapXT, click at top Tools->Restore all Tilesets")
    exit
  end

  def check_if_passage_swapped_exist
    passage = "swapxt/passage_warning.stx"
    passage_swap_loaded_message_error if FileTest.exist?(passage)
  end

  def passage_swap_loaded_message_error
    p sprintf("SwapXT Error: You are not allowed to start your game with swapped passage settings. You must unload your passage setting with SwapXT application first. Open SwapXT, go on PassageSetting tab and click on Restore to Default.")
    exit
  end

end
################################################################################



=begin
this class takes care of checking if there is a map id file. this class does
not swap tilesets but only prepares the tiles variables(if map id file found).
this class handles loading the passage setting file, for both old and
new system
=end

class Game_Map
  include Cache_Swap_Tiles  
  alias bulletxt_goodbye_vx_limit_tile_setup setup
  def setup(map_id)

    #must be false at load time
    $swapxt_realtime = false

    #this variable must always be false at runtime.
    #becomes true only if it finds a map id file
    $swap_tileset_profile_bulletxt = false

    #check if it must load a saved profile TILESET for this map id
    profile_path_tile = "swapxt/tiles/" + map_id.to_s() + ".stx"
    if FileTest.exist?(profile_path_tile)
      #we must now check if user isn't fooling around with his configuration.
      #he must not be swapping tiles on this map with old and new system
      #at the same time. if this is the case, warn him we don't want issues and
      #close the game
      if $game_switches[SWAP_TILE] == true
        Cache_Swap_Tiles.error_message(map_id)
        p sprintf($bulletxt_error_message_mixed_swapping_configuration)
        exit
      end
      #set this to true so we know we want to swap with new system
      $swap_tileset_profile_bulletxt = true
      #p sprintf(profile_path_tile + " found!")
      #read the map id file, it has 8 lines with the name of the tileset to swap.
      #set each tileset global variable with the corresponding found line, in order.
      $tileA1,$tileA2,$tileA3,$tileA4,$tileA5,$tileB,$tileC,$tileD,$tileE = File.read(profile_path_tile).split("n")
    end


    ##################### SWAP PASSSAGE SETTINGS ##########################
    @swap_passagesetting_bulletxt = false
    #for how this works, look at the code above
    profile_path_passages = "swapxt/passages/" + map_id.to_s() + ".stx"
    if FileTest.exist?(profile_path_passages)
      #p sprintf("passage exists on map " + map_id.to_s())
      if $game_switches[LOAD_PASSAGE_SETTING] == true
        Cache_Swap_Tiles.error_message_passage(map_id)
        p sprintf($bulletxt_error_message_mixed_swapping_configuration)
        exit
      end
      @swap_passagesetting_bulletxt = true
      $swap_passages = (File.read(profile_path_passages).split("n"))[0]
    end


    #checks if it should load default passage setting, both for old and new system
    if $game_switches[LOAD_PASSAGE_SETTING] == false and @swap_passagesetting_bulletxt == false
      bulletxt_goodbye_vx_limit_tile_setup(map_id)
      $swap_passages = nil
      return  
    end


    path = "Graphics/System/extra_tiles/" + $swap_passages.to_s() + ".rvdata" rescue nil

    #check if user set $swap_passages to nil cause he wants to load default setting.
    #if user is loading with new system checks if it's equal to empty::*::
    if $swap_passages == nil or $swap_passages == "empty::*::"
      bulletxt_goodbye_vx_limit_tile_setup(map_id)
      return
    end


    #when here, we are sure user wants to swap passage setting, either
    #via old system or new system
    #the file to swap is not default one, he wants to swap to a real new one
    @map_id = map_id
    @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
    @display_x = 0
    @display_y = 0

    # load system settings from that file
    new_system_rvdata = load_data(path)
    # Use passage settings from that file
    @passages = new_system_rvdata.passages

    #default vx code
    referesh_vehicles
    setup_events
    setup_scroll
    setup_parallax
    @need_refresh = false
  end


############################# REAL TIME SWAPS ##################################  
  #if here, player has done a $game_map.tileset call. It must reload
  #map with new passage setting (if it exists) and upate map.
  #OLD SYSTEM
  def tileset
    #if false, we must update and load default passage
    if $game_switches[LOAD_PASSAGE_SETTING] == false
      @passages = $data_system.passages
    else
      #if nil, must reset passage setting to default  
      if $swap_passages == nil
        @passages = $data_system.passages
        $scene = Scene_Map.new
        return
      end
    path = "Graphics/System/extra_tiles/" + $swap_passages + ".rvdata" rescue nil
    # load system settings from that file
    new_system_rvdata = load_data(path)
    # Use passage settings from that file
    @passages = new_system_rvdata.passages
    end   
    #this updates the map tiles. it does not modify events or anything else.
    $scene = Scene_Map.new
  end



  #if here, player has done a $game_map.swapxt() call. It must reload
  #map with new passage setting (if it exists) and upate map.
  #NEW SWAPXT SYSTEM
  def swapxt(integer)
    rtx_path = "swapxt/realtime/" + integer.to_s() + ".rtx"
    if !FileTest.exist?(rtx_path )
      p sprintf("SwapXT Error: You have called $game_map.swapxt(" + integer.to_s() + ") , but that Real-Time swap doesn't exist. Please better check it inside SwapXT app, under the Real-Time section.")
      exit
    end
    $tileA1,$tileA2,$tileA3,$tileA4,$tileA5,$tileB,$tileC,$tileD,$tileE,passage = File.read(rtx_path).split("n")
    path = "Graphics/System/extra_tiles/" + passage + ".rvdata" rescue nil
    if !FileTest.exist?(path)
      p sprintf("SwapXT Error: Unable to find " + path + ". Please go and check your existant passages from SwapXT in the PassageSetting section.")
      exit
    end
    $swapxt_realtime = true #warning,realtime update must occur
    # load system settings from that file
    new_system_rvdata = load_data(path)
    # Use passage settings from that file
    @passages = new_system_rvdata.passages
    #this updates the map tiles. it does not modify events or anything else.
    $scene = Scene_Map.new
  end


end


#this class handles loading tilesets
class Spriteset_Map
include Cache_Swap_Tiles  

  alias bulletxt_lodestone_create_tilemap create_tilemap
  def create_tilemap
    #if true, it means the map doesn't have to load tilesets,
    #neither for old swapping system or new system.
    #if true, also means no realtime update occured
    #it must load DEFAULT tilesets
    if $game_switches[SWAP_TILE] == false and $swap_tileset_profile_bulletxt == false and $swapxt_realtime == false
      bulletxt_lodestone_create_tilemap
      $tileA1 = nil
      $tileA2 = nil
      $tileA3 = nil
      $tileA4 = nil
      $tileA5 = nil
      $tileB = nil
      $tileC = nil
      $tileD = nil
      $tileE = nil
      return
    end



=begin
calling the original function is a trick. if there are tiles to swap
it will just replace them, otherwise if a tile is nil it won't swap anything,
but still the tile will be loaded because it has already loaded the original tile
when calling this function. in other words, if setting a tile$n = nil will simply
make the script load default tile.
=end
    bulletxt_lodestone_create_tilemap
=begin
when here, some/all tiles must be swapped, either old or with new system.
the tile can be equal to "empty::*::" only if it found the file id of the
map and line$n is equal to empty::*::. in that case it must load default tileset.
there are no chances a user with old system is swapping a tileset named
"empty::*::" because you can't name files with ":" characters under
Microsoft Windows OS.
=end
    path_to_graphic = "extra_tiles/"

    #tileA1
    if $tileA1 == "empty::*::"
      @tilemap.bitmaps[0] = Cache.system("TileA1")
    else
      tile1 = Cache_Swap_Tiles.swap($tileA1 + ".png") rescue nil
      @tilemap.bitmaps[0] = tile1 if $tileA1 != nil
    end

    #tileA2
    if $tileA2 == "empty::*::"
      @tilemap.bitmaps[1] = Cache.system("TileA2")
    else
      tile2 = Cache_Swap_Tiles.swap($tileA2 + ".png") rescue nil
      @tilemap.bitmaps[1] = tile2 if $tileA2 != nil
    end

    #tileA3
    if $tileA3 == "empty::*::"
      @tilemap.bitmaps[2] = Cache.system("TileA3")
    else
      tile3 = Cache_Swap_Tiles.swap($tileA3 + ".png") rescue nil
      @tilemap.bitmaps[2] = tile3 if $tileA3 != nil
    end

    #tileA4
    if $tileA4 == "empty::*::"
      @tilemap.bitmaps[3] = Cache.system("TileA4")
    else
      tile4 = Cache_Swap_Tiles.swap($tileA4 + ".png") rescue nil
      @tilemap.bitmaps[3] = tile4 if $tileA4 != nil
    end

    #tileA5
    if $tileA5 == "empty::*::"
      @tilemap.bitmaps[4] = Cache.system("TileA5")
    else
      tile5 = Cache_Swap_Tiles.swap($tileA5 + ".png") rescue nil
      @tilemap.bitmaps[4] = tile5 if $tileA5 != nil
    end

    #tileB
    if $tileB == "empty::*::"
      @tilemap.bitmaps[5] = Cache.system("TileB")
    else
      tile6 = Cache_Swap_Tiles.swap($tileB + ".png") rescue nil
      @tilemap.bitmaps[5] = tile6 if $tileB != nil
    end

    #tileC
    if $tileC == "empty::*::"
      @tilemap.bitmaps[6] = Cache.system("TileC")
    else
      tile7 = Cache_Swap_Tiles.swap($tileC + ".png") rescue nil
      @tilemap.bitmaps[6] = tile7 if $tileC != nil
    end

    #tileD
    if $tileD == "empty::*::"
      @tilemap.bitmaps[7] = Cache.system("TileD")
    else
      tile8 = Cache_Swap_Tiles.swap($tileD + ".png") rescue nil
      @tilemap.bitmaps[7] = tile8 if $tileD != nil
    end

    #tileE
    if $tileE == "empty::*::"
      @tilemap.bitmaps[8] = Cache.system("TileE")
    else
      tile9 = Cache_Swap_Tiles.swap($tileE + ".png") rescue nil
      @tilemap.bitmaps[8] = tile9 if $tileE != nil
    end

  #closes def
  end
#closes class
end


########################## SWAP EVENT'S GRAPHICS #############################
#the following class handles swapping event's graphics according to the tiles
class Sprite_Character < Sprite_Base
include Cache_Swap_Tiles

  alias swap_tileset_bitmap tileset_bitmap
  def tileset_bitmap(tile_id)
     #do not swap events if true
     if $game_switches[DISABLE_EVENT_SWAPPING]
        set_number = tile_id / 256
        return Cache.system("TileB") if set_number == 0
        return Cache.system("TileC") if set_number == 1
        return Cache.system("TileD") if set_number == 2
        return Cache.system("TileE") if set_number == 3
        return nil
        return
     end

     if $game_switches[SWAP_TILE] == false and $swap_tileset_profile_bulletxt == false and $swapxt_realtime == false
        set_number = tile_id / 256
        return Cache.system("TileB") if set_number == 0
        return Cache.system("TileC") if set_number == 1
        return Cache.system("TileD") if set_number == 2
        return Cache.system("TileE") if set_number == 3
        return nil
        return
     end

    swap_tileset_bitmap(tile_id)
    set_number = tile_id / 256

    if $tileB == "empty::*::"
      return Cache.system("TileB") if set_number == 0
    else
      return Cache_Swap_Tiles.swap($tileB) if set_number == 0 rescue nil
    end

    if $tileC == "empty::*::"
      return Cache.system("TileC") if set_number == 1
    else
      return Cache_Swap_Tiles.swap($tileC) if set_number == 1 rescue nil
    end

    if $tileD == "empty::*::"
      return Cache.system("TileD") if set_number == 2
    else
      return Cache_Swap_Tiles.swap($tileD) if set_number == 2 rescue nil
    end

    if $tileE == "empty::*::"
      return Cache.system("TileE") if set_number == 3
    else
       return Cache_Swap_Tiles.swap($tileE) if set_number == 3 rescue nil
    end

    return nil
  end
end



=begin
saves tiles and passage setting variables,
needed if you save on a map that has swapped stuff.
this is only needed when using old system, because new system
reads the value from the map id file
=end
class Scene_File < Scene_Base
  alias bulletxt_swap_tiles_write_save_data write_save_data
  def write_save_data(file)
    bulletxt_swap_tiles_write_save_data(file)
    Marshal.dump($tileA1,      file)
    Marshal.dump($tileA2,      file)
    Marshal.dump($tileA3,      file)
    Marshal.dump($tileA4,      file)
    Marshal.dump($tileA5,      file)
    Marshal.dump($tileB,      file)
    Marshal.dump($tileC,      file)
    Marshal.dump($tileD,      file)
    Marshal.dump($tileE,      file)
    Marshal.dump($swap_passages.to_s(),   file)
    Marshal.dump($swap_tileset_profile_bulletxt,  file)
    Marshal.dump($swapxt_realtime, file)
  end  

  alias bulletxt_swap_tiles_read_save_data read_save_data
  def read_save_data(file)
    bulletxt_swap_tiles_read_save_data(file)
    $tileA1        = Marshal.load(file)
    $tileA2        = Marshal.load(file)
    $tileA3        = Marshal.load(file)
    $tileA4        = Marshal.load(file)
    $tileA5        = Marshal.load(file)
    $tileB        = Marshal.load(file)
    $tileC        = Marshal.load(file)
    $tileD        = Marshal.load(file)
    $tileE        = Marshal.load(file)
    $swap_passages = Marshal.load(file)
    $swap_tileset_profile_bulletxt = Marshal.load(file)
    $swapxt_realtime = Marshal.load(file)
  end

end
Demo:
http://www.mediafire.com/?g2mg7nkp6fy1nax

Incompatibilità:
Incompatibile con lo script Wall Tile Extension.
Compatibile con la versione precedente di swap.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

You need to be a member in order to leave a comment

Crea un account

Iscriviti per un nuovo account nella nostra comunità. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

  • Contenuti simili

    • Da Ally
      Nome Script: H.U.T.O. MMO System por Tomoaky
      Versione:
      Autore/i: Tomoaky, hikimoki
       
      Informazioni:
      Un sistema completo per creare un progetto in pieno stile MMO, dove il movimento è con il mouse e la battaglia è in gruppo.
      Che cosa contiene?
       
      Features:
      - Mini-mappa con caratteristiche realistiche della mappa.
      - Sistema di Battaglia con la partecipazione attiva del party.
      - Sistema di full-pixel: Camminata, Attacco, Abilità, e altre cose che devono essere ancora scoperte nella demo
      - Sistema di tempo con orari diurni e serali giusto.
      - Tempo di sistema. (Climi)
       
      (La demo è ancora in fase di test, quindi verranno aggiunte altre features con il progredire dei test)
       
      Screenshots:

       
      Istruzioni:
      Istruzioni e script, all'interno della demo.
       
      Demo:
      http://hikimoki.sakura.ne.jp/zip/hutommo_ace.zip
    • Da Ally
      Nome Script: Permanent Switches & Variables
      Versione: 1.2
      Autore/i: mikb89
       
      Informazioni:
      Con questo script potrete far sì che i valori di determinate switch e variabili vengano memorizzati in modo da restare tali in nuova partita e caricamento.
      Utile per esempio se si vuole aggiungere un Nuovo gioco +, cambiando una switch appena finito il gioco, oppure un sistema di punteggio alto tramite variabile o magari per memorizzare delle opzioni.
       
      Features:
      Si possono utilizzare sia singoli elementi che range multipli rapidamente.
      È possibile scegliere un nominativo personalizzato per i dati.
       
      Istruzioni:
      Creare una nuova voce sopra Main ed inserire lo script.
      Nel caso di incompatibilità, provare a spostarla più in alto.
       
      Script
       
      Incompatibilità:
      N/A
    • Da Ally
      Nome Script: ReMapped Keys
      Versione: 1.0
      Autore/i: mikb89
       
      Informazioni:
      Con questo script potrete riassegnare i tasti standard. Se ad esempio voleste usare Invio sia per interagire che per correre, basta rimappare il tasto Shift (:A) con quello di Invio (:C). Giusto un esempio.
      Lo script è comunque stato inizialmente creato per un cabinato che supportava solo determinati tasti: combinando questo script con uno di tastiera estesa è stato possibile far funzionare il gioco.
       
      Istruzioni:
      Creare una nuova voce sopra Main ed inserire lo script.
      Nel caso di incompatibilità, provare a spostarla più in alto.
       
      Script
       
      Incompatibilità:
      Ricordatevi di usare uno script per la tastiera estesa separato se le vostre intenzioni sono quelle di usare tasti non standard.
       
      Note dell'autore:
      Script creato per una richiesta di syntonia;
      Ringrazio per il suo script di tastiera estesa che ho usato come esempio.
    • Da Ally
      Nome Script: Independent Player Actor
      Versione: 1.4
      Autore/i: mikb89

      Informazioni:
      Questo script nasce da una richiesta di , fatta in questo topic.
      Pensato per giochi tipo Pokémon, questo script consente di avere un 'leader' (visibile come primo personaggio nel caterpillar e come nome team in battaglia: "Il gruppo di X ha ottenuto punti exp...") che non è parte del gruppo vero e proprio.

      Features:
      L'unica impostazione presente nello script è il numero di una variabile.
      Cambiandone poi il valore potrete:
      disattivare lo script se questo è minore di 1; selezionare l'eroe leader dal database impostando la variabile al suo ID; attivare e disattivare lo script quindi semplicemente moltiplicando la variabile per -1.
      Istruzioni:
      Inserire lo script sotto Materials/Materiali/Modules/Moduli (a seconda della traduzione che avete) ma sopra Main.

      Script

      Demo:
      Demo multilingua v 1.4
      Mediafire, zip di 1.32MB

      Incompatibilità:
      Se non aggiungete nessuno al party, anche se il leader è impostato, non potrete comunque accedere ai vari menu Oggetti, Skill, Equip, Status.

      Note dell'autore:
      per aver richiesto lo script;
      SowS per l'idea originale.

      Pareri in evidenza:
    • Da Ally
      Nome Script: Keyboard Input
      Versione: 3.0
      Autore/i: Keroro
       
      Informazioni:
      Porting per VX-ACE dello script YEM Keyboard Script per VX.
      Rimpiazza lo Scene_Name facendo inserire direttamente da tastiera.
      TODO: Gestire la punteggiatura
       
      Istruzioni:
      Creare una nuova tab sotto Materials e incollare lo script.
      Oltre a modificare lo Scene_Name modifica la classe Input consentendo,
      al programmatore volenteroso di utilizzare tutti le lettere e i numeri tramite sintassi:
       
      if Input.press(:VK_A)
      #se premo la lettera a
      end
      if Input.press(:NUM5) or Input.press(:PAD5)
      #se premo il numero 5 sulla tastiera o sul numpad
      end
       
      Script:
       
       
      #===============================================================================# Keyboard Input - Porting to VX-ACE# By Keroro - [email protected]# Version 3.0# Last Date Updated. 2012.03.17#===============================================================================## OriginalWij and Yanfly Collaboration - Keyboard Input# Last Date Updated: 2010.06.12# Level: Normal## This is a utility script that provides the functionality to return inputs# from the keyboard as well as free up more keys to be used in the Input module.# This script will also replace Scene_Name and allow for direct keyboard input# to type in an actor's name as well as fix the maximum characters shown from# the default base script.##===============================================================================$imported = {} if $imported == nil$imported["KeyboardInput"] = trueclass << Input #-------------------------------------------------------------------------- # Aliases (Mods - Linked to Module) - Created by OriginalWij #-------------------------------------------------------------------------- alias ow_dt_i_press press? unless $@ alias ow_dt_i_trigger trigger? unless $@ alias ow_dt_i_repeat repeat? unless $@ alias ow_dt_i_update update unless $@endmodule Input #-------------------------------------------------------------------------- # constants - Created by OriginalWij and Yanfly and Keroro #-------------------------------------------------------------------------- VALUES = {} VALUES[:VK_A] = 65; VALUES[:VK_B] = 66; VALUES[:VK_C] = 67; VALUES[:VK_D] = 68; VALUES[:VK_E] = 69; VALUES[:VK_F] = 70; VALUES[:VK_G] = 71; VALUES[:VK_H] = 72; VALUES[:VK_I] = 73; VALUES[:VK_J] = 74; VALUES[:VK_K] = 75; VALUES[:VK_L] = 76 VALUES[:VK_M] = 77; VALUES[:VK_N] = 78; VALUES[:VK_O] = 79; VALUES[:VK_P] = 80; VALUES[:VK_Q] = 81; VALUES[:VK_R] = 82; VALUES[:VK_S] = 83; VALUES[:VK_T] = 84; VALUES[:VK_U] = 85; VALUES[:VK_V] = 86; VALUES[:VK_W] = 87; VALUES[:VK_X] = 88 VALUES[:VK_Y] = 89; VALUES[:VK_Z] = 90; LETTERS = [:VK_A,:VK_B,:VK_C,:VK_D,:VK_E,:VK_F,:VK_G,:VK_H,:VK_I,:VK_J, :VK_K,:VK_L,:VK_M,:VK_N,:VK_O,:VK_P,:VK_Q,:VK_R,:VK_S,:VK_T, :VK_U,:VK_V,:VK_W,:VK_X,:VK_Y,:VK_Z] VALUES[:NUM0] = 48; VALUES[:NUM1] = 49; VALUES[:NUM2] = 50; VALUES[:NUM3] = 51; VALUES[:NUM4] = 52; VALUES[:NUM5] = 53; VALUES[:NUM6] = 54; VALUES[:NUM7] = 55; VALUES[:NUM8] = 56; VALUES[:NUM9] = 57; VALUES[:PAD0] = 96; VALUES[:PAD1] = 97; VALUES[:PAD2] = 98; VALUES[:PAD3] = 99; VALUES[:PAD4] = 100; VALUES[:PAD5] = 101; VALUES[:PAD6] = 102; VALUES[:PAD7] = 103; VALUES[:PAD8] = 104; VALUES[:PAD9] = 105; NUMBERS = [:NUM0,:NUM1,:NUM2,:NUM3,:NUM4,:NUM5,:NUM6,:NUM7,:NUM8,:NUM9] NUMPAD = [:PAD0,:PAD1,:PAD2,:PAD3,:PAD4,:PAD5,:PAD6,:PAD7,:PAD8,:PAD9] VALUES[:ENTER] = 13; VALUES[:SPACE] = 32; VALUES[:ESC] = 27; VALUES[:BACK] = 8; VALUES[:PGUP] = 33; VALUES[:PGDN] = 34; VALUES[:CAPS] = 20;#TODO: aggiungere tags per punteggiatura #-------------------------------------------------------------------------- # initial module settings - Created by OriginalWij and Yanfly #-------------------------------------------------------------------------- GetKeyState = Win32API.new("user32", "GetAsyncKeyState", "i", "i") GetCapState = Win32API.new("user32", "GetKeyState", "i", "i") KeyRepeatCounter = {} module_function #-------------------------------------------------------------------------- # alias method: update - Created by OriginalWij and Keroro #-------------------------------------------------------------------------- def update ow_dt_i_update for key in KeyRepeatCounter.keys if (GetKeyState.call(VALUES[key]).abs & 0x8000 == 0x8000) KeyRepeatCounter[key] += 1 else KeyRepeatCounter.delete(key) end end end #-------------------------------------------------------------------------- # alias method: press? - Created by OriginalWij and Keroro #-------------------------------------------------------------------------- def press?(key) return ow_dt_i_press(key) if !VALUES.has_key?(key) return true unless KeyRepeatCounter[key].nil? return key_pressed?(key) end #-------------------------------------------------------------------------- # alias method: trigger? - Created by OriginalWij and Keroro #-------------------------------------------------------------------------- def trigger?(key) return ow_dt_i_trigger(key) if !VALUES.has_key?(key) count = KeyRepeatCounter[key] return ((count == 0) or (count.nil? ? key_pressed?(key) : false)) end #-------------------------------------------------------------------------- # alias method: repeat? - Created by OriginalWij and Keroro #-------------------------------------------------------------------------- def repeat?(key) return ow_dt_i_trigger(key) if !VALUES.has_key?(key) count = KeyRepeatCounter[key] return true if count == 0 if count.nil? return key_pressed?(key) else return (count >= 23 and (count - 23) % 6 == 0) end end #-------------------------------------------------------------------------- # new method: key_pressed? - Created by OriginalWij and Keroro #-------------------------------------------------------------------------- def key_pressed?(key) if (GetKeyState.call(VALUES[key]).abs & 0x8000 == 0x8000) KeyRepeatCounter[key] = 0 return true end return false end #-------------------------------------------------------------------------- # new method: typing? - Created by Yanfly and Keroro #-------------------------------------------------------------------------- def typing? return true if repeat?(:SPACE) for key in LETTERS return true if repeat?(key) end for key in NUMBERS return true if repeat?(key) end return false end #-------------------------------------------------------------------------- # new method: key_type - Created by Yanfly and Keroro #-------------------------------------------------------------------------- def key_type return " " if repeat?(:SPACE) for key in LETTERS next unless repeat?(key) return upcase? ? key.to_s[3].upcase : key.to_s[3].downcase end for key in NUMBERS return key.to_s[3] if repeat?(key) end for key in NUMPADS return key.to_s[3] if repeat?(key) end return "" end #-------------------------------------------------------------------------- # new method: upcase? - Created by Yanfly #-------------------------------------------------------------------------- def upcase? return !press?(:SHIFT) if GetCapState.call(VALUES[:CAPS]) == 1 return true if press?(:SHIFT) return false endend #Input#===============================================================================# Window_NameEdit#===============================================================================class Window_NameEdit < Window_Base #-------------------------------------------------------------------------- # overwrite method: initialize #-------------------------------------------------------------------------- def initialize(actor, max_char) dw = Graphics.width - 176 dy = (Graphics.height - 128) / 2 if $game_message.visible difference = Graphics.height - 128 case $game_message.position when 0; dy += 64 when 1; dy += 0 when 2; dy -= 64 end end super(88, dy, dw, 128) @actor = actor @name = actor.name @max_char = max_char name_array = @name.split(//)[0...@max_char] @name = "" for i in 0...name_array.size @name += name_array[i] end @default_name = @name @index = name_array.size self.active = false refresh end #-------------------------------------------------------------------------- # overwrite method: item_rect #-------------------------------------------------------------------------- def item_rect(index) if index == @max_char rect = Rect.new(0, 0, 0, 0) else rect = Rect.new(0, 0, 0, 0) rect.x = 112 + index * 12 rect.y = 36 rect.width = 24 rect.height = line_height end return rect endend # Window_NameEdit#===============================================================================# Scene_Base#===============================================================================class Scene_Base #-------------------------------------------------------------------------- # new method: name_entry #-------------------------------------------------------------------------- def name_entry(actor_id, max_char) @name_actor_id = actor_id @name_entry_max = max_char start_name_entry end_name_entry end #-------------------------------------------------------------------------- # new method: start_name_entry #-------------------------------------------------------------------------- def start_name_entry Graphics.freeze actor = $game_actors[@name_actor_id] @edit_window = Window_NameEdit.new(actor, @name_entry_max) Graphics.transition(10) loop do update_name_entry if Input.repeat?(:BACK) and @edit_window.index > 0 Sound.play_cancel @edit_window.back elsif Input.typing? and @edit_window.index != @edit_window.max_char Sound.play_cursor @edit_window.add(Input.key_type) elsif Input.trigger?(:ENTER) Sound.play_ok actor.name = @edit_window.name break elsif Input.trigger?(:ESC) Sound.play_cancel break end end end #-------------------------------------------------------------------------- # new method: update_name_entry #-------------------------------------------------------------------------- def update_name_entry Graphics.update Input.update if SceneManager.scene.is_a?(Scene_Map) $game_map.update @spriteset.update elsif SceneManager.scene.is_a?(Scene_Battle) Graphics.update Input.update $game_system.update $game_troop.update @spriteset.update @message_window.update end @edit_window.update end #-------------------------------------------------------------------------- # end_name_entry #-------------------------------------------------------------------------- def end_name_entry @edit_window.dispose @edit_window = nil @name_actor_id = nil @name_entry_max = nil endend # Scene_Base#===============================================================================# Game_Interpreter#===============================================================================class Game_Interpreter #-------------------------------------------------------------------------- # overwrite method: command_303 (Name Input Processing) #-------------------------------------------------------------------------- def command_303 if $data_actors[@params[0]] != nil SceneManager.scene.name_entry(@params[0], @params[1]) end @index += 1 return false endend # Game_Interpreter Incompatibilità:Nessuna incompatibilità
       
      Note dell'Autore:
      In modalità finestra il mouse compare e scompare, a schermo intero invece resta nascosto.
×