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




Valutazione discussione:
  • 1 voto(i) - 5 media
  • 1
  • 2
  • 3
  • 4
  • 5
Citizens Script v1.0
#1
Citizens Script v1.0
Descrizione
Questo script permette di rendere le grosse città/villaggi ricche di personaggi creando solo pochi eventi e senza pesare sul gioco.
Basterà scrivere all'interno di un commento dell'evento "begin passante" e l'evento otterrà delle caratteristiche particolari:
• Movimento Casuale Personalizzato: si muove spesso in avanti e ogni tanto cambia direzione
• Frequenza e Velocità: sono entrambe decise via script, la velocità è casuale
• Grafica: la grafica dell'evento è gestita dallo script, che ne sceglie una a caso tra i characters di default "Civilian"
• Posizionamento: se i cittadini si allontaneranno troppo dal personaggio, verranno riposizionati casualmente nelle vicinanze dell'eroe (ovviamente fuori dallo schermo)

Capite che in questo modo creando una decina di eventi Cittadino il personaggio incontrerà sempre persone diverse, qualunque sia la dimensione della città!


Autore
Alato

Credits: questo script contiene l'XPML Script di Rataime e una versione modificata da alato dell'Anti Event Lag Script di Near Fantastica

Allegati
Lo script in versione txt è in fondo alla pagina

Istruzioni per l'uso
Create una pagina sopra il main, e incollate al suo interno lo script.
Fatto ciò vi basterà creare un commento "begin passante" all'interno degli eventi che volete rendere Cittadini. Consiglio di provarlo in una mappa ampia.

Codice:
#==============================================================================
# - Citizens Script ~ v1.0 # ( 13/12/06 )
#--------------------------#---------------------------------------------------
# by Alato ~ www.rpg2s.net #
#--------------------------#
# Contiene l'XPML Script di Rataime e una versione
# modificata da me dell'Anti Event Lag Script di
# Near Fantastica.
#------------------------------------------------------------------------------
# Incollato questo script in una pagina sopra il Main
# avrete a disposizione un nuovo comando per gli eventi.
# Scrivendo "begin passante" in un commento dell'evento
# questo verrà considerato come un passante, cioè sarà
# sempre presente vicino allo schermo.
# Grafica, velocità e frequenza sono gestiti dallo
# script in maniera casuale (per la grafica utilizza
# i character di default "Civilian").
#
# In caso di domande o problemi chiedete nel forum
# di www.rpg2s.net
#==============================================================================

############################################
######## Aggiunte a Game_Character #########
############################################
class Game_Character
  #--------------------------------------------------------------------------
  # - Aggiornamento
  #--------------------------------------------------------------------------
  def update
    if passante?
      @move_type = 77 # Movimento Passanti
      @move_frequency = 6
    end
    if jumping?
      update_jump
    elsif moving?
      update_move
    else
      update_stop
    end
    if @anime_count > 18 - @move_speed * 2
      if not @step_anime and @stop_count > 0
        @pattern = @original_pattern
      else
        @pattern = (@pattern + 1) % 4
      end
      @anime_count = 0
    end
    if @wait_count > 0
      @wait_count -= 1
      return
    end
    if @move_route_forcing
      move_type_custom
      return
    end
    if @starting or lock?
      return
    end
    if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
      case @move_type
      when 1
        move_type_random
      when 2
        move_type_toward_player
      when 3
        move_type_custom
      when 77
        move_type_passante
      end
    end
  end
  #--------------------------------------------------------------------------
  # - Riposiziona
  #--------------------------------------------------------------------------
  def riposiziona
    case rand(3)
    when 0
      r_x = $game_map.display_x + rand(21)*128 - 128*3
      r_y = $game_map.display_y - 128*3
    when 1
      r_x = $game_map.display_x + rand(21)*128 - 128*3
      r_y = $game_map.display_y + 2176 + 128*3
    when 2
      r_x = $game_map.display_x - 128*3
      r_y = $game_map.display_y + rand(16)*128 - 128*3
    when 3
      r_x = $game_map.display_x + 2816 + 128*3
      r_y = $game_map.display_y + rand(16)*128 - 128*3
    end
    x = r_x / 128
    y = r_y / 128
    if $game_map.passable?(x, y, 0)
      @real_x = r_x
      @real_y = r_y
      @x = x
      @y = y
    else
      riposiziona
    end
    r = rand(23) + 1
    if r < 10
      name = "10" + r.to_s + "-Civilian0" + r.to_s
    else
      name = "1" + r.to_s + "-Civilian" + r.to_s
    end
    @character_name = name
    @move_speed = rand(2)+ 1
  end
  #--------------------------------------------------------------------------
  # - Movimento Passante
  #--------------------------------------------------------------------------
  def move_type_passante
    case rand(19)
    when 0..16
      move_forward
    when 17
      move_random
    when 18
      @stop_count = 0
    end
  end
end

############################################
######### Aggiunte a GAme_Event ############
############################################
class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # - Controlla se è un passante
  #--------------------------------------------------------------------------
  def passante?
    params = XPML_read("passante",@id,2)
    return (params != nil)
  end
end

############################################
######### Aggiunte a Game_Player ###########
############################################
class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # - Il Player non è mai un passante
  #--------------------------------------------------------------------------
  def passante?
    return false
  end
end

           ###################
############ XPML Definition ###############
           #      by Rataime #
           ###################
def XPML_read(markup,event_id,max_param_number=0)
   parameter_list = nil
   event=$game_map.events[event_id]
   return if event.list==nil
     for i in 0...event.list.size
       if event.list[i].code == 108 and event.list[i].parameters[0].downcase == "begin "+markup.downcase
         parameter_list = [] if parameter_list == nil
         for j in i+1...event.list.size
           if event.list[j].code == 108
             parts = event.list[j].parameters[0].split
             if parts.size!=1 and parts[0].downcase!="begin"
               if parts[1].to_i!=0 or parts[1]=="0"
                 parameter_list.push(parts[1].to_i)
               else
                 parameter_list.push(parts[1])
               end
             else
               return parameter_list
             end
           else
             return parameter_list
           end
           return parameter_list if max_param_number!=0 and j==i+max_param_number
         end
       end
     end
   return parameter_list
end

      ############################
####### Anti Event Lag Script v3 ###############
      #       by Near Fantastica #
      ############################
      #           ~ mod by Alato #
      ############################
#====
# ¦ Game_Map
#====

class Game_Map
#------
def in_range?(object)
screne_x = $game_map.display_x
screne_x -= 256
screne_y = $game_map.display_y
screne_y -= 256
screne_width = $game_map.display_x
screne_width += 2816
screne_height = $game_map.display_y
screne_height += 2176
return false if object.real_x <= screne_x
return false if object.real_x >= screne_width
return false if object.real_y <= screne_y
return false if object.real_y >= screne_height
return true
end
#------
def in_big_range?(object)
screne_x = $game_map.display_x
screne_x -= 256*6
screne_y = $game_map.display_y
screne_y -= 256*6
screne_width = $game_map.display_x
screne_width += 2816 + 256*5
screne_height = $game_map.display_y
screne_height += 2176 + 256*5
return false if object.real_x <= screne_x
return false if object.real_x >= screne_width
return false if object.real_y <= screne_y
return false if object.real_y >= screne_height
return true
end
#------
def update
if $game_map.need_refresh
refresh
end
if @scroll_rest > 0
distance = 2 ** @scroll_speed
case @scroll_direction
when 2
   scroll_down(distance)
when 4
   scroll_left(distance)
when 6  
   scroll_right(distance)
when 8  
   scroll_up(distance)
end
@scroll_rest -= distance
end
for event in @events.values
if in_range?(event) or event.trigger == 3 or event.trigger == 4
   event.update
elsif event.passante? # se è un passante riposizionalo
   event.update
   until in_big_range?(event)
     event.riposiziona
   end
end
end
for common_event in @common_events.values
common_event.update
end
@fog_ox -= @fog_sx / 8.0
@fog_oy -= @fog_sy / 8.0
if @fog_tone_duration >= 1
d = @fog_tone_duration
target = @fog_tone_target
@fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
@fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
@fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
@fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
@fog_tone_duration -= 1
end
if @fog_opacity_duration >= 1
d = @fog_opacity_duration
@fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
@fog_opacity_duration -= 1
end
end
end

#====
# ¦ Spriteset_Map
#====

class Spriteset_Map
#------
def in_range?(object)
screne_x = $game_map.display_x
screne_x -= 256
screne_y = $game_map.display_y
screne_y -= 256
screne_width = $game_map.display_x
screne_width += 2816
screne_height = $game_map.display_y
screne_height += 2176
return false if object.real_x <= screne_x
return false if object.real_x >= screne_width
return false if object.real_y <= screne_y
return false if object.real_y >= screne_height
return true
end
#------
def in_big_range?(object)
screne_x = $game_map.display_x
screne_x -= 256*6
screne_y = $game_map.display_y
screne_y -= 256*6
screne_width = $game_map.display_x
screne_width += 2816 + 256*5
screne_height = $game_map.display_y
screne_height += 2176 + 256*5
return false if object.real_x <= screne_x
return false if object.real_x >= screne_width
return false if object.real_y <= screne_y
return false if object.real_y >= screne_height
return true
end
#------
def update
if @panorama_name != $game_map.panorama_name or
  @panorama_hue != $game_map.panorama_hue
@panorama_name = $game_map.panorama_name
@panorama_hue = $game_map.panorama_hue
if @panorama.bitmap != nil
   @panorama.bitmap.dispose
   @panorama.bitmap = nil
end
if @panorama_name != ""
   @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
end
Graphics.frame_reset
end
if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
@fog_name = $game_map.fog_name
@fog_hue = $game_map.fog_hue
if @fog.bitmap != nil
   @fog.bitmap.dispose
   @fog.bitmap = nil
end
if @fog_name != ""
   @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
end
Graphics.frame_reset
end
@tilemap.ox = $game_map.display_x / 4
@tilemap.oy = $game_map.display_y / 4
@tilemap.update
@panorama.ox = $game_map.display_x / 8
@panorama.oy = $game_map.display_y / 8
@fog.zoom_x = $game_map.fog_zoom / 100.0
@fog.zoom_y = $game_map.fog_zoom / 100.0
@fog.opacity = $game_map.fog_opacity
@fog.blend_type = $game_map.fog_blend_type
@fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
@fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
@fog.tone = $game_map.fog_tone
i=0
for sprite in @character_sprites
if sprite.character.is_a?(Game_Event)
   if in_range?(sprite.character) or sprite.character.trigger == 3 or sprite.character.trigger == 4 or (sprite.character.passante? and in_big_range?(sprite.character))
     sprite.update
     i+=1
   end
else
   sprite.update
   i+=1
end
end
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.ox = $game_map.display_x / 4
@weather.oy = $game_map.display_y / 4
@weather.update
for sprite in @picture_sprites
sprite.update
end
@timer_sprite.update
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
@viewport3.color = $game_screen.flash_color
@viewport1.update
@viewport3.update
end
end

Postate qui nel caso si riscontrino bug o problemi di sorta. Tongue
 
Rispondi
#2
Utilissimo! Solo... utile per qualche personina qua e là, i messaggi delle persone non sono personalizzabili... o sbaglio?
 
Rispondi
#3
Citazione:Questo script permette di rendere le grosse città/villaggi ricche di personaggi creando solo pochi eventi e senza pesare sul gioco.
Basterà scrivere all'interno di un commento dell'evento "begin passante" e l'evento otterrà delle caratteristiche particolari:
• Movimento Casuale Personalizzato: si muove spesso in avanti e ogni tanto cambia direzione
• Frequenza e Velocità: sono entrambe decise via script, la velocità è casuale
• Grafica: la grafica dell'evento è gestita dallo script, che ne sceglie una a caso tra i characters di default "Civilian"
• Posizionamento: se i cittadini si allontaneranno troppo dal personaggio, verranno riposizionati casualmente nelle vicinanze dell'eroe (ovviamente fuori dallo schermo)

Capite che in questo modo creando una decina di eventi Cittadino il personaggio incontrerà sempre persone diverse, qualunque sia la dimensione della città!
parlano se metti:
commento: begin passante
mess cosa dice la persona
 
Rispondi
#4
Wink 
Devo dire molto carina come idea, volevo solo avvertirti di un piccolo errore che mi succede, se io creo eventi di questo tipo vicini me lo conta come uno e crea un solo cittadino, ma se lo metto a distanza di un quadretto della griglia funziona che è una meraviglia! BOH!
 
Rispondi
  


Vai al forum:


Browsing: 1 Ospite(i)