Version: 2.1
By: Berka
Introduction
This script allows you to create characters during play and randomly, without knowing Ruby. Your game will be more realistic and alive.
Features
- random checked position
- name generator
- random dialog generator
- dialogs, item/gold/armor gains...
Screenshots
none
Demo
here
Script
Code:
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#Â Â Â Â Â Â Â Â Â Â Â Â Â Â NPC Generator
#  by berka                     rgss2
#Â Â Â Â Â Â Â Â Â Â Â Â Â [url=http://www.rpgmakervx-fr.com ]http://www.rpgmakervx-fr.com [/url] Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Â Rgss 2Â Â Â Â Â Â Â Â Â v 2.1Â Â Â based on mithos & pipo work
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#Â Â Â Â Â Â Â Â Â Â Â Â Â -Instructions-
# Write in an event, call a script command:
#
# minumum required:
# [event]Â Â Â Â Â Â Â Â # compulsory !
# Â chara : "Actor01"Â Â # name of the charset file or: chara : rand
#
# and optional settings:
# Â x : 5Â Â Â Â Â Â Â Â # x position, random if nothing
# Â y : 10Â Â Â Â Â Â Â Â # y position, random if nothing
# Â nom : "Event01"Â Â # event's name or nom: rand
# Â c_index : 0Â Â Â Â # charset's index
# Â face : "Actor01"Â # name of the faceset file or: face : true (=> same as chara)
# Â f_index : 0Â Â Â Â # faceset's index
# Â dir : 2Â Â Â Â Â Â # event direction
# Â type_mov:0Â Â Â Â Â Â # movement type
# Â vit_mov:0Â Â Â Â Â Â # movement speed
# Â freq_mov:0Â Â Â Â Â Â # muvement frequency
# Â texte:"bonjour"Â Â # dialog or texte:rand (cf. list above)
# Â trigger:0Â Â Â Â Â Â # event trigger
# Â prio_type:1Â Â Â Â # priority
# Â script: "print @a=1" # script command
# Â combat: 1,true,false # battle: id_monster, esc, follow if defeated
# Â or: 0,0,1000Â Â Â Â # gold:Â Â Â 0/1 (add/rem),0/1 (Const/var),amount (nbr/var_id)
# Â objet: 2,0,0,10Â Â # item: Â id,0/1 (add/rem),0/1 (Const/var),amount (nbr/var_id)
# Â arme: 2,0,0,10Â Â Â # weapon: id,0/1 (add/rem),0/1 (Const/var),amount (nbr/var_id)
# Â bouclier: 2,0,0,10 Â # armor: Â id,0/1 (add/rem),0/1 (Const/var),amount (nbr/var_id)
#  suppr : true    # erase this generated event
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Example:
#
# [event]
# chara:rand
# texte:rand
# type_mov : 1
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Â
$characters="people" # series of charsets used to create random character
           # people1, people2...
$chara_nbre=5     # nombre de fichiers people         Â
# Random dialogs (too lazy to translate everything)Â Â Â Â Â Â Â Â Â Â
$dialogues=["Bonjour, il fait beau, nan ?","Comment allez vous ?","Partez d'ici !",
      "Je n'ai pas de temps à vous accorder !","Vous m'ennuyez...","Encore vous ?",
      "Ah! vous voilà , cher ami !","Tiens, vous semblez fatigué.","Grrrrr...",
      "Hors de ma vue !","Quelle belle journée!","Je me promène.","Vous êtes de retour ?",
      "Hihihi !","Rien.","Je ne veux plus vous parler.","Que faire ?","Mais c'est ¥N[1] !",
      "Le temps change...","Vous êtes mon idole...","Dieu, que vous êtes laid !",
      "Vous me rappelez quelqu'un...","Vous avez l'air sournois","Salut ¥N[1] !",
      "Je ne vous fais pas confiance...","Ne m'approchez pas !","Je suis souffrant",
      "Hé ! tu la connais celle là ?","Ahhahaharff...","Bonjour","Portez vous bien !",
      "Ravi de vous revoir","...Tousse...","Coucou!","Encore un étranger ?","Bouh !",
      "Je n'entends rien de ce que vous dites...","Articulez !","Parlez plus bas.",
      "J'ai fait route toute la journée.","Je suis d'accord.","Dégage, mendiant !",
      "Bonjour jeune homme","...snif...","Vous attirez le malheur ici !","Entendu.",
      "Ne me regardez pas comme ça !","Il faut qu'on se parle...","Venez déjeuner !",
      "Je suis content de vous connaitre."]
      # in-game: $dialogues << "You are now an heroe for me !"
     Â
$nom=[%w(Gw Ul Et Rh Ed Gr Dr Dw Tr Gh As Ar Ag Xor),       # name generator
   %w(ai ia eo ui yn or ul ur a e i o u y yr ya yl),
   %w(th rk dd gh z l mn lyr zar gor ryn nia lia )]
  Â
module Berka
 module Pnj_Gen
  Tag = "[event]"                     # Tag of NPC generator
  Separateur = ":"                     # Separator: cmd/value
  Index_Chara = 8                     # Number of patterns
  Commandes = {:face  => "[101,[@_face,@_f_index,0,2]]", # List of commands
         :or    => "[125,[*@_or]]",
         :objet => "[126,[*@_objet]]",
         :arme  => "[127,[*@_arme]]",
         :bouclier => "[128,[*@_bouclier]]",
         :combat  => "[301,[0,*@_combat])]",
         :script  => "[355,[@_script]]",
         :suppr => "[214]",
         :texte => "[401,[@_texte]]"
        }
  ProfCoord = 100                     # Deep of x/y scan
 end
end
Â
include Berka::Pnj_Gen
class Array
 def arand
  self[Kernel.rand(self.size)]
 end
end
class Object
 def rand?
  self == "?"
 end
end
class Game_Map
 include RPG
 def check_event(x,y)
  for event in @events.values
   return event.id if event.x==x&&event.y==y
  end
  return nil
 end
 def make_event(com)
  self.instance_variables.each{|v|eval("#{v}=nil") if v.include?("@_")}
  rand="?"
  com.each_with_index{|c,i|eval("@_#{c.first.id2name}=#{c[1]}")}
  set_rand
  set_options
  return if @_x.nil?||@_y.nil?
  if check_event(@_x,@_y).nil?
   @event=Event.new(@_x,@_y)
   com.each{|c|c=c.first
    ajout_cmd(*eval("#{Commandes[c]}"))if Commandes.has_key?(c)
   }
   @event.id=creerid
   @event.name=@_nom
   @event.pages.first.graphic.character_name=@_chara
   @event.pages.first.graphic.character_index=@_c_index
   @event.pages.first.graphic.direction=@_dir
   @event.pages.first.move_type=@_type_mov
   @event.pages.first.move_frequency=@_freq_mov
   @event.pages.first.move_speed=@_vit_mov
   @event.pages.first.through=@_trav
   @event.pages.first.trigger=@_trigger
   @event.pages.first.priority_type=@_prio_type
   @events[@event.id]=Game_Event.new(@map_id,@event)
   @need_refresh=true
   $scene.refresh_spriteset Â
  end
 end
 def set_rand
  rand="?"
  @_chara||=rand
  @_nom=aleatoire_nom if @_nom.nil?
  @_texte=$dialogues.arand if @_texte.rand?
  @_x,@_y=*aleatoire_pos if @_x.nil?||@_y.nil?
  @_pers=aleatoire_perso
  if @_chara.rand?||@_c_index.rand?
   @_face,@_f_index,@_chara,@_c_index=@_pers
  end
 end
 def set_options
  @_chara=@_pers.first if @chara.nil?
  @_c_index=@_pers[1] if @_c_index.nil?
  @_face,@_f_index = "",0 if @_face==false
  @_dir||=3
  @_type_mov||=0
  @_freq_mov||=3
  @_vit_mov||=3
  @_trav||=false
  @_trigger||=0
  @_prio_type||=1
 end
 def aleatoire_pos
  ProfCoord.times{
   x,y=Kernel.rand(width).to_i,Kernel.rand(height).to_i
   next if x==$game_player.x&&y==$game_player.y
   (return x,y) if passable?(x,y)&&!check_event(x,y)
  }
  return nil,nil
 end
 def aleatoire_perso
  i=Kernel.rand(Index_Chara-1)
  res=$characters+(Kernel.rand($chara_nbre)+1).to_s
  return [res,i,res,i]
 end
 def aleatoire_nom
  n="#{$nom.first.arand}#{$nom[1].arand}#{$nom[2].arand}"
  n<<$nom[1].arand if rand(4)==1
  return n
 end
 def event_name(id)
  @events[id].name if !@events[id].nil?
 end
 def creerid
  id=1
  id+=1 while @events.keys.include?(id)
  return id
 end
 def ajout_cmd(code,param=[],i=0)
  cmd=EventCommand.new
  cmd.code,cmd.parameters,cmd.indent=code,param,i
  @event.pages.first.list.insert(-2,cmd)
 end
end
class Scene_Map<Scene_Base
 def refresh_spriteset
  @spriteset.dispose;@spriteset=Spriteset_Map.new
 end
end
class Game_Interpreter
 def eval(script)
  if script.include?(Tag)
   com=[];script.gsub!(Tag,'')
   list=script.split("\n")
   s=Separateur
   list.each_with_index{|e,i|e.gsub!(' '+s,s);e.gsub!(s+' ',s);f=e.split(s)
   com<<[f.first.to_sym,f[1]]if !f[1].nil?}
   $game_map.make_event(com)
   return
  end
  return Kernel.eval(script)
 end
end
Instructions
Read the comments at the begining of the script.
Do not use this script in parallel process !
FAQ
Place this script above main
Compatibility
No problem.
You may have problems with my video script
Credits and Thanks
Mithos and Pipo both famous French Scripters
Terms and Conditions
this script is totally free of use, but I need an apparent credit in your game and:
Do not post these scripts anywhere without my permission !
have fun.
Berka