Maker Palace

¡El Reino del RpgMaker y del Ocio!
 
ÍndiceBuscarGrupos de UsuariosScriptsRecursosTutorialesPalaceJuegosPalaceWikiFAQRegistrarseConectarse
Conectarse
Nombre de Usuario:
Contraseña:
Entrar automáticamente en cada visita: 
:: Recuperar mi contraseña
Temas similares
Buscar
 
 

Resultados por:
 
Rechercher Búsqueda avanzada
Últimos temas
» Dando una vuelta por acá
por LinkLuis55 Dom Ago 20, 2017 2:56 pm

» Heroes del Crimen 2 DEMO
por jasuso Mar Ago 01, 2017 12:04 am

» The Legend of Celestia II: A World of Twilight Shadows Demo
por Jlopez_96 Vie Jul 28, 2017 6:20 pm

» Screenshot del nuevo KUnits XP oon menú
por kyonides-arkanthos Sáb Jul 15, 2017 1:14 am

» The Legend of Celestia: Four Cristals
por Jlopez_96 Mar Abr 25, 2017 4:59 pm

» [VXAce] Burando Doragon
por gantzer49 Dom Abr 23, 2017 7:43 pm

» Que se cuece por estos lares?
por Frikilangelo Jue Mar 23, 2017 8:10 am

Recomendados
RPG en RPG Maker
La importancia de un Backup
Que requiere un sistema de Batalla para ser exitoso
9 Minutos de Juegos por fans
Guía de Subforos para Tontos de Maker Palace
Indice de Scripts Locales XP
Falcao Pearl ABS Liquid
¿Quién está en línea?
En total hay 8 usuarios en línea: 0 Registrados, 0 Ocultos y 8 Invitados :: 1 Motor de búsqueda

Ninguno

La mayor cantidad de usuarios en línea fue 179 el Mar Ago 30, 2011 10:06 pm.
MiniChat
Mejores posteadores
Raiden (3346)
 
DaviX (2740)
 
Frikilangelo (2461)
 
SagahonArturo (1806)
 
Falcao (1775)
 
kyonides-arkanthos (1766)
 
Mur-mai-der (1755)
 
Ares (1613)
 
LinkLuis55 (1556)
 
Webmaster24 (1354)
 
Afiliados
Crear foro Mundo Maker Foro de anime y RM2k3/XP/VX Computer mix
Flag Counter
free counters
Visitas


Comparte | 
 

 AKENDA - 1 Script de Agenda de Contactos

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: AKENDA - 1 Script de Agenda de Contactos   Lun Jul 18, 2011 10:12 pm

AKENDA
Script de Agenda de Contactos
Versión 0.3.0
por Kyonides-Arkanthos


No se ofrecen reembolsos!

En realidad su funcionamiento para el nivel de un usuario común es muy simple. En un archivo de texto cuya extensión sea TXT, bueno .txt, Uds. anotan los datos de todos los amigos o enemigos del personaje o los personajes principales según lo hice yo en el archivo de ejemplo, vean los datos del Contenido del Archivo de Ejemplo debajo del script. Por cierto, sí hace falta digitar los datos en ese orden en específico.

(Si creyeran que requieren de una ayuda para organizarlos los datos según el nombre o el número de ID, que en el ejemplo de aquí sería el número de 4 dígitos que está al inicio de cada renglón, pues, les puedo pasar un scriptlet específico para ordenar las entradas.)

LO QUE SI TIENE

  • Con la Constante VARID se puede definir la única Variable que utilizarán para agregar a los amigos o enemigos.
  • Se puede mantener y visualizar las listas para uno o más héroes por separado.
  • No hace falta crear varias listas, solo se ocupa la principal como una especie de base de datos, de lo demás se encarga el script.
  • Se puede empezar con cero amigos o enemigos e ir agregando a los que vaya conociendo uno por uno. Solo se ocupa definir cuál variable manejará el ID del amigo o enemigo (ID de la lista no del evento en el Maker) y nada más.
  • Se puede ir bajando o subiendo en la lista o incluso se puede ir de inmediato al puro inicio o al puro final de la lista (siempre y cuando haya más de 5 contactos en la lista).

  • Gráficos de los personajes que se mueven o se tornan grises en caso de ser seleccionados o de permanecer inactivos. (Depende de otro script que publiqué tiempo atrás, sería el del tema Prototipo Menú de Personajes en Movimiento con una ligerísima variante.)



Cómo se lo hace funcionar?

En un llamado a script digiten:

$scene = Akenda.new

======

Para agregar a un amigo o enemigo solo hagan 1 de estas 2 cosas:

Digiten en un llamado a script:

$game_variables[numero_que_deseen_pero_solo_un_mismo_numero] = 14

====

Ingresen en el evento y hagan clic para incluir un nuevo comando en el listado y luego en el control de Variables y elijan la opción que les permite fijar un único valor, por ejemplo 1478, y cierren al presionar en OK y guarden el evento.

Si no quieren que más de un héroe sea amigo o enemigo de ese NPC, creen una nueva página de eventos y hagan que el evento cambie de página poco después de agregar sus datos a la lista de contactos del héroe (del líder del equipo en ese momento para ser más específico).

======

LO QUE ESTE SCRIPT AUN NO INCLUYE

Hay una razón muy específica para no haber dicho que es la versión 1.0.0 o algo por el estilo y es que no está terminado, mas es tan funcional como cualquier otro. Lo malo para Uds. es que carece de gráficos interesantes...

Sin cooperación forera esa situación no va a poder cambiar jamás!

Otras cosas por añadir...

  • Carece de un cursor...
  • No hay modo de modificar el nivel de amistad o enemistad, pero sí se contempló esta variable en el script.
  • No todos los datos están desplegados, de momento solo se ven el nombre, la edad y el número telefónico.
  • Paciencia de parte del scripter


DESCARGA DE DEMO & SCRIPT

La plantilla para crear el archivo friends.txt que se requiere para poder crear la base de datos de amigos para la versión 0.3.0 ya viene incluida en el demo en una sección muy visible en el editor de scripts del Maker XP.

COMPENDIO DE VERSIONES OBSOLETAS

VERSIÓN 0.2.5
Código:
#  AKENDA
#  by Kyonides-Arkanthos
#  v 0.2.5 - 07/24/2011

module FriendsDB
  VARID = 0
  WIDTH = 100
  DBFILE = File.readlines('friends.txt')
  def self.make_list(index)
    dbfile = 'friends'+sprintf("%03d", index)+'.rxdata'
    friendsdb = self.check_file(dbfile)
  end

  def self.check_file(dbfile)
    return {} if !File.exist?(dbfile)
    file = File.open(dbfile, 'rb')
    friendsdb = Marshal.load file
    file.close
    friendsdb
  end

  def self.read_file(file)
    data = {}
    File.readlines(file).each do |fr|
      numbers = [0,2,3,5]
      info = fr.split(',')
      info.each {|d| i = info.index(d)
              info[i] = d.to_i if numbers.include?(i)}
      data[info[0]] = info[1..-1]
    end if File.exist?(file)
    data
  end

  def self.add_friend(friend_id)
    actor_id = $game_party.actors[0].id
    allfriends = self.read_file('friends.txt')
    dbfile = 'friends'+sprintf("%03d", actor_id)+'.rxdata'
    friendsdb = self.check_file(dbfile)
    return if friendsdb.keys.include?(friend_id)
    friendsdb[friend_id] = allfriends[friend_id]
    if !friendsdb.empty?
      temp_ary = []
      temp_ary.each {|v| friendsdb[v[0]] = v[1..(-1)]}
      friendsdb
      friendsdb.each {|k,v| temp_ary << [k, v].flatten}
      temp_ary.sort! {|x,y| x[0] <=> y[0]}
      hsh = {}
      temp_ary.each {|v| hsh[v[0]] = v[1..(-1)]}
      friendsdb = hsh
    end
    file = File.open(dbfile, 'wb')
    Marshal.dump friendsdb, file
    file.close
  end
end

module RPG::Cache
  def self.face(filename) self.load_bitmap('Graphics/Faces/', filename) end
end

module ColorsDB
  WHITE  = Color.new(255, 255, 255, 255)
  YELLOW  = Color.new(255, 255, 64, 255)
  SKYBLUE = Color.new(192, 224, 255, 255)
  GRAY    = Color.new(255, 255, 255, 128)
  RED    = Color.new(255, 64, 0)
end

module SpriteAddOn
  def dispose
    self.bitmap.dispose if !self.bitmap.nil?
    super
  end
end

class Game_Variables
  def []=(variable_id, value)
    return unless variable_id <= 5000
    if variable_id == FriendsDB::VARID
      FriendsDB.add_friend(value)
    else
      @data[variable_id] = value
    end
  end
end

class FriendsList
  attr_reader :names, :members
  attr_accessor :onscreen
  def initialize(file)
    @data = FriendsDB.make_list(file)
    @members, @ids, @names = [], [], []
    return if @data.empty?
    @data.each do |id, data|
      @members << Friend.new(id, data)
      @ids << id
      @names << data[0]
    end
    @members.sort! {|x,y| x.name <=> y.name}
  end

  def size; @data.keys.size end

  def new_member(member, id=0)
    a_member = id == 0 ? member[0] : id
    @members << Friend.new(a_member, member[1..-1])
  end

  def old_member(member, id=0)
    a_member = id == 0 ? member[0] : id
    @members.delete member if @members.include?(a_member)
  end
end

class Friend
  attr_reader :unique_id, :friendship, :name, :age, :phone, :photo, :home,
    :likes, :hates, :block
  def initialize(friend_id, data)
    @unique_id = friend_id.is_a?(Integer)? friend_id : false
    @friendship = 0
    return if !@unique_id
    @name, @age, @phone, @photo, @friendship = data[0..4]
    @home, @likes, @hates, @block = data[5..8]
  end

  def level=(units) (@friendship += units) if !@block; end

  def block=(state) @block = state end
end

class Sprite_FriendFace < Sprite
  include SpriteAddOn
  def initialize(viewport, char, x=0, y=0)
    super(viewport)
    @char, @y, @x = char, y, x
    update
  end

  def update
    super
    if @picture_name != @char.photo && @char.photo != nil && @char.photo != ''
      @picture_name = @char.photo
      self.bitmap = RPG::Cache.face(@picture_name)
    end
    self.visible = @picture_name != ''
    return if !self.visible
    self.ox, self.oy, self.x, self.y, self.z = 0, 0, @x, 28 + @y, 200
  end
end

class Sprite_FriendInfo < Sprite
  include SpriteAddOn
  def initialize(viewport, friend, x=0, y=0, w=218)
    super(viewport)
    self.x, self.y, self.z, @w = x, y, 200, w
    self.bitmap = Bitmap.new(@w, 80)
    new_info(friend)
  end

  def update
    self.bitmap.clear
    self.bitmap.font.color = ColorsDB::YELLOW
    self.bitmap.draw_text(0, 0, @w, 24, @name)
    self.bitmap.font.color = ColorsDB::WHITE
    self.bitmap.draw_text(0, 28, @w, 24, @age.to_s)
    self.bitmap.font.color = ColorsDB::SKYBLUE
    phone = @phone.to_s
    phone = sprintf("%3d-%4d", phone[0,3], phone[3,4])
    self.bitmap.draw_text(0, 56, @w, 24, phone)
  end

  def new_info(friend, x=false)
    self.x = x if x
    @name = friend.name || 'Desconocido'
    @age = friend.age || 0
    @phone = friend.phone || 0000000
    @photo = friend.photo || '001-Fighter01'
    @friendship = friend.friendship || 0
    @home = friend.home || 'Ningún Lugar'
    @likes = friend.likes || ['Todo']
    @hates = friend.hates || ['Todo']
    update
  end
end

class Scene_FriendsList
  MAX_LINES = 4
  def main
    @party, @actors = $game_party.actors, $game_party.actors.dup
    @cells, @faces, @heroes, @heroes_sprites = [], [],[], []
    @back, @pos = Sprite.new, 0
    @back.bitmap = RPG::Cache.picture('background')
    MAX_LINES.times do |n|
      @cells << Sprite.new
      @cells.last.bitmap = RPG::Cache.picture('cell')
      @cells.last.x, @cells.last.y = 124, (n * 100) + 40
    end
    @viewport = Viewport.new(0, 0, 640, 480)
    @viewport.z = 500
    for i in 0...@party.size
      @heroes << Game_Hero.new(i)
      x, y = 14 + (32 * i), 52
      sprite = Sprite_CharacterAnime.new(@viewport, @heroes[i], x, y)
      sprite.id = @party[i].id
      @heroes_sprites.push sprite
    end
    update_sprites_windows
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      break if $scene != self
    end
    Graphics.freeze
    @info.each {|info| info.dispose}
    @heroes_sprites.each {|s| s.dispose}
    @faces.each {|f| f.dispose} if !@faces.nil?
    @faces = @heroes = @heroes_sprites = nil
    @viewport.dispose
    @cells.each {|c| c.dispose}
    @back.dispose
  end
 
  def make_friends_list(actor)
    @friends = FriendsList.new(actor.id)
    @info.each {|info| info.dispose} if !@info.nil?
    @faces.each {|f| f.dispose} if !@faces.nil?
    @y, @info = -FriendsDB::WIDTH, []#@windows
    @contacts = @friends.members
    MAX_LINES.times do |n|
      break if n > @contacts.size-1
      x = (n % 2 == 0)? 120 : 352
      x2 = x == 120 ? 228 : 132
      @info << Sprite_FriendInfo.new(@viewport,@contacts[n], x2, 44 + (n * 100))
      @faces << Sprite_FriendFace.new(@viewport,@contacts[n], x, n * 100)
    end
  end

  def update_sprites_windows
    @heroes_index = @party.index(@actors[0])
    @heroes_sprites.each do |hero|
      hero.tone.gray = hero.id == @party[@heroes_index].id ? 0 : 255
      hero.update
    end
    make_friends_list(@actors[0])
  end
 
  def update_info_sprites
    @pos = @pos == 0 ? 2 : 0
    @faces.each {|f| f.dispose}
    @faces.clear
    MAX_LINES.times do |n|
      x = ((@pos == 0 and n%2 == 0) or (@pos == 2 and n%2 != 0))? 120 : 352
      x2 = x == 120 ? 228 : 132
      @faces << Sprite_FriendFace.new(@viewport, @contacts[n], x, n * 100)
      @info[n].new_info(@contacts[n], x2)
    end
  end

  def update
    @heroes[@heroes_index].update
    @heroes_sprites[@heroes_index].update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
    end
    if Input.trigger?(Input::L)
      $game_system.se_play($data_system.decision_se)
      @actors.unshift @actors.pop
      update_sprites_windows
    elsif Input.trigger?(Input::R)
      $game_system.se_play($data_system.decision_se)
      @actors.push @actors.shift
      update_sprites_windows
    end if @actors.size > 1
    return if @contacts.nil? or @contacts.size < MAX_LINES + 1
    if Input.trigger?(Input::UP)
      @contacts.unshift @contacts.pop
      update_info_sprites
    elsif Input.trigger?(Input::DOWN)
      @contacts.push @contacts.shift
      update_info_sprites
    end
  end
end

VERSIÓN 0.2.0
Código:
#  AKENDA
#  by Kyonides-Arkanthos
#  v 0.2.0 - 07/22/2011

module FriendsDB
  VARID = 0
  DIGITS = 4
  MAX_LINES = 5
  def self.make_list(index)
    data, file = {}, 'friends'+sprintf("%03d", index)+'.txt'
    File.readlines(file).each do |fr|
      info = fr.scan(/([\w\s]+|\d+)/).flatten
      info.each {|d| (info[info.index(d)] = d.to_i) if d.match(/\d+/)}
      data[info[0]] = info[1..-1]
    end if File.exist?(file)
    data
  end

  def self.add_friend(friend_id)
    actor_id = $game_party.actors[0].id
    temp_ary = []
    maindbfile = File.readlines('friends.txt')
    maindbfile.each {|data| temp_ary << data[0, FriendsDB::DIGITS].to_i}
    if temp_ary.include?(friend_id)
      new_friend = maindbfile[temp_ary.index(friend_id)]
      temp_ary.clear
      herodbfile = 'friends'+sprintf("%03d", actor_id)+'.txt'
      if File.exist?(herodbfile)
        heros_friends = File.readlines(herodbfile)
        heros_friends.each {|data| temp_ary << data[0].to_s}
      else
        heros_friends = []
      end
      heros_friends << new_friend if !temp_ary.include?(friend_id)
      return if temp_ary.include?(friend_id)
      heros_friends.sort! {|x, y| x[0] <=> y[0]}
      file = File.open(herodbfile,'w')
      file.puts heros_friends
      file.close
    end
  end
end

class Game_Variables
  def []=(variable_id, value)
    return unless variable_id <= 5000
    if variable_id == FriendsDB::VARID
      FriendsDB.add_friend(value)
    else
      @data[variable_id] = value
    end
  end
end

class FriendsList
  attr_reader :names, :members
  attr_accessor :onscreen
  def initialize(file)
    @data = FriendsDB.make_list(file)
    @members, @ids, @names = [], [], []
    @data.each do |id, data|
      @members << Friend.new(id, data)
      @ids << id
      @names << data[0]
    end
    @members.sort! {|x,y| x.name <=> y.name}
  end

  def size; @data.keys.size end

  def new_member(member, id=0)
    a_member = id == 0 ? member[0] : id
    @members << Friend.new(a_member, member[1..-1])
  end

  def old_member(member, id=0)
    a_member = id == 0 ? member[0] : id
    @members.delete member if @members.include?(a_member)
  end
end

class Friend
  attr_reader :unique_id, :friendship, :name, :age, :phone, :photo, :block
  def initialize(friend_id, data)
    @unique_id = friend_id.is_a?(Integer)? friend_id : false
    @friendship = 0
    return if !@unique_id
    @name, @age, @phone, @photo, @friendship, @block = data
  end

  def level=(units) @friendship += units end

  def block=(state) @block = state end
end

class Window_Friend < Window_Base
  def initialize(friend=nil, y=-60)
    super(80, 88 + y, 380, 60)
    @name = friend.name || 'Desconocido'
    @age = friend.age || 0
    @phone = friend.phone || 0000000
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end

  def refresh
    self.contents.clear
    #cx = contents.text_size(@name).width
    #cx = self.width / 2.5 if cx > self.width / 2.5
    self.contents.font.color = crisis_color
    self.contents.draw_text(0, 0, 180, 28, @name[0,13]+'...')#0,0,cx
    self.contents.font.color = normal_color
    self.contents.draw_text(0, 0, 200, 28, @age.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, 340, 28, @phone.to_s, 2)
  end

  def new_info(friend)
    @name, @age, @phone = friend.name, friend.age, friend.phone
    refresh
  end
end

class Window_Empty < Window_Base
  def initialize(y=-60)
    super(80, 88 + y, 380, 60)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
end

class Window_HeroName < Window_Base
  def initialize(name, x=170, y=20)
    super(x, y, 220, 60)
    @name = name
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end

  def refresh
    self.contents.clear
    self.contents.font.color = crisis_color
    self.contents.draw_text(0, 0, 188, 28, @name, 1)
  end

  def new_name=(name) @name = name; refresh end
end

class Scene_FriendsList
  def main
    @party, @actors = $game_party.actors, $game_party.actors.dup
    @viewport = Viewport.new(0, 0, 640, 480)
    @viewport.z = 500
    @heroes, @heroes_sprites = [], []
    for i in 0...@party.size
      @heroes << Game_Hero.new(i)
      x, y = 32 + (44 * i), 64
      sprite = Sprite_CharacterAnime.new(@viewport, @heroes[i], x, y)
      sprite.id = @party[i].id
      @heroes_sprites.push sprite
    end
    update_sprites_windows
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      break if $scene != self
    end
    Graphics.freeze
    @windows.each {|window| window.dispose}
    @current_hero.dispose
    @heroes_sprites.each {|s| s.dispose}
    @heroes = @heroes_sprites = nil
    @viewport.dispose
  end
 
  def make_friends_list(actor)
    if @current_hero.nil?
      @current_hero = Window_HeroName.new(actor.name, (640 - 220)/ 2)
    else
      @current_hero.new_name = actor.name
    end
    @friends = FriendsList.new(actor.id)
    @windows.each {|window| window.dispose} if !@windows.nil?
    @y, @windows = -60, []
    if @friends.members.empty?
      FriendsDB::MAX_LINES.times {|n| @windows << Window_Empty.new(n * 60)}
      return
    end
    @contacts = @friends.members
    FriendsDB::MAX_LINES.times do |n|
      unless n > @contacts.size-1
        @windows << Window_Friend.new(@contacts[n], @y += 60)
      else
        @windows << Window_Empty.new(n * 60)
      end
    end
  end

  def update_sprites_windows
    @heroes_index = @party.index(@actors[0])
    @heroes_sprites.each do |hero|
      hero.tone.gray = hero.id == @party[@heroes_index].id ? 0 : 255
      hero.update
    end
    make_friends_list(@actors[0])
  end

  def update
    @heroes[@heroes_index].update
    @heroes_sprites[@heroes_index].update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
    end
    if Input.trigger?(Input::L)
      $game_system.se_play($data_system.decision_se)
      @actors.unshift @actors.pop
      update_sprites_windows
    elsif Input.trigger?(Input::R)
      $game_system.se_play($data_system.decision_se)
      @actors.push @actors.shift
      update_sprites_windows
    end if @actors.size > 1
    return if @contacts.nil? or @contacts.size < @windows.size
    if Input.trigger?(Input::UP)
      @contacts.unshift @contacts.pop
      @windows.each {|w| w.new_info(@contacts[@windows.index(w)])}
    elsif Input.trigger?(Input::DOWN)
      @contacts.push @contacts.shift
      @windows.each {|w| w.new_info(@contacts[@windows.index(w)])}
    elsif Input.trigger?(Input::LEFT)
      @contacts.sort! {|x,y| x.name <=> y.name}
      @windows.each {|w| w.new_info(@contacts[@windows.index(w)])}
    elsif Input.trigger?(Input::RIGHT)
      @contacts.sort! {|x,y| x.name <=> y.name}
      last5 = @contacts[-(@windows.size)..(-1)]
      @contacts = last5 + (@contacts - last5)
      @windows.each {|w| w.new_info(@contacts[@windows.index(w)])}
    end
  end
end


VERSIÓN 0.1.0
Código:
#  AKENDA
#  by Kyonides-Arkanthos
#  v 0.1.0 - 07/18/2011

module FriendsDB
  VARID = 3
  DIGITS = 4
  MAX_LINES = 5
  def self.make_list(index)
    data, file = {}, 'friends'+sprintf("%03d", index)+'.txt'
    File.readlines(file).each do |fr|
      info = fr.scan(/([\w\s]+|\d+)/).flatten
      info.each {|d| (info[info.index(d)] = d.to_i) if d.match(/\d+/)}
      data[info[0]] = info[1..-1]
    end if File.exist?(file)
    data
  end

  def self.add_friend(friend_id)
    actor_id = $game_party.actors[0].id
    temp_ary = []
    maindbfile = File.readlines('friends.txt')
    maindbfile.each {|data| temp_ary << data[0, FriendsDB::DIGITS].to_i}
    if temp_ary.include?(friend_id)
      new_friend = maindbfile[temp_ary.index(friend_id)]
      temp_ary.clear
      herodbfile = 'friends'+sprintf("%03d", actor_id)+'.txt'
      if File.exist?(herodbfile)
        heros_friends = File.readlines(herodbfile)
        heros_friends.each {|data| temp_ary << data[0].to_s}
      else
        heros_friends = []
      end
      heros_friends << new_friend if !temp_ary.include?(friend_id)
      return if temp_ary.include?(friend_id)
      heros_friends.sort! {|x, y| x[0] <=> y[0]}
      file = File.open(herodbfile,'w')
      file.puts heros_friends
      file.close
    end
  end
end

class Game_Variables
  def []=(variable_id, value)
    return unless variable_id <= 5000
    if variable_id == FriendsDB::VARID
      FriendsDB.add_friend(value)
    else
      @data[variable_id] = value
    end
  end
end

class FriendsList
  attr_reader :names, :members
  attr_accessor :onscreen
  def initialize(file)
    @data = FriendsDB.make_list(file)
    @members, @ids, @names = [], [], []
    @data.each do |id, data|
      @members << Friend.new(id, data)
      @ids << id
      @names << data[0]
    end
    @members.sort! {|x,y| x.name <=> y.name}
  end

  def size; @data.keys.size end

  def new_member(member, id=0)
    a_member = id == 0 ? member[0] : id
    @members << Friend.new(a_member, member[1..-1])
  end

  def old_member(member, id=0)
    a_member = id == 0 ? member[0] : id
    @members.delete member if @members.include?(a_member)
  end
end

class Friend
  attr_reader :unique_id, :friendship, :name, :age, :phone, :photo, :block
  def initialize(friend_id, data)
    @unique_id = friend_id.is_a?(Integer)? friend_id : false
    @friendship = 0
    return if !@unique_id
    @name, @age, @phone, @photo, @friendship, @block = data
  end

  def level=(units) @friendship += units end

  def block=(state) @block = state end
end

class Window_Friend < Window_Base
  def initialize(friend=nil, y=-60)
    super(80, 88 + y, 380, 60)
    @name = friend.name || 'Desconocido'
    @age = friend.age || 0
    @phone = friend.phone || 0000000
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end

  def refresh
    self.contents.clear
    cx = contents.text_size(@name).width
    cx = 160 if cx > 160
    self.contents.font.color = crisis_color
    self.contents.draw_text(0, 0, cx, 28, @name)
    self.contents.font.color = normal_color
    self.contents.draw_text(0, 0, 200, 28, @age.to_s, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, 340, 28, @phone.to_s, 2)
  end

  def new_info(friend)
    @name, @age, @phone = friend.name, friend.age, friend.phone
    refresh
  end
end

class Window_Empty < Window_Base
  def initialize(y=-60)
    super(80, 88 + y, 380, 60)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
end

class Window_HeroName < Window_Base
  def initialize(name, x=160, y=20)
    super(x, y, 240, 60)
    @name = name
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end

  def refresh
    self.contents.clear
    self.contents.font.color = crisis_color
    self.contents.draw_text(0, 0, 208, 28, @name, 1)
  end

  def new_name=(name) @name = name; refresh end
end

class Scene_FriendsList
  def main
    @actors = $game_party.actors.dup
    make_friends_list(@actors[0])
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      break if $scene != self
    end
    Graphics.freeze
    @windows.each {|window| window.dispose}
    @current_hero.dispose
  end
 
  def make_friends_list(actor)
    if @current_hero.nil?
      @current_hero = Window_HeroName.new(actor.name, (640 - 240)/ 2)
    else
      @current_hero.new_name = actor.name
    end
    @friends = FriendsList.new(actor.id)
    @windows.each {|window| window.dispose} if !@windows.nil?
    @y, @windows = -60, []
    if @friends.members.empty?
      FriendsDB::MAX_LINES.times {|n| @windows << Window_Empty.new(n * 60)}
      return
    end
    @contacts = @friends.members
    FriendsDB::MAX_LINES.times do |n|
      unless n > @contacts.size-1
        @windows << Window_Friend.new(@contacts[n], @y += 60)
      else
        @windows << Window_Empty.new(n * 60)
      end
    end
  end

  def update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
    end
    if Input.trigger?(Input::L)
      $game_system.se_play($data_system.decision_se)
      @actors.unshift @actors.pop
      make_friends_list(@actors[0])
    elsif Input.trigger?(Input::R)
      $game_system.se_play($data_system.decision_se)
      @actors.push @actors.shift
      make_friends_list(@actors[0])
    end if @actors.size > 1
    return if @contacts.nil? or @contacts.size < @windows.size
    if Input.trigger?(Input::UP)
      @contacts.unshift @contacts.pop
      @windows.each {|w| w.new_info(@contacts[@windows.index(w)])}
    elsif Input.trigger?(Input::DOWN)
      @contacts.push @contacts.shift
      @windows.each {|w| w.new_info(@contacts[@windows.index(w)])}
    elsif Input.trigger?(Input::LEFT)
      @contacts.sort! {|x,y| x.name <=> y.name}
      @windows.each {|w| w.new_info(@contacts[@windows.index(w)])}
    elsif Input.trigger?(Input::RIGHT)
      @contacts.sort! {|x,y| x.name <=> y.name}
      last5 = @contacts[-(@windows.size)..(-1)]
      @contacts = last5 + (@contacts - last5)
      @windows.each {|w| w.new_info(@contacts[@windows.index(w)])}
    end
  end
end

CONTENIDO DEL ARCHIVO DE EJEMPLO PARA VERSIONES 0.2.5 E INFERIORES

1473,Akantha,20,4257892,006-Fighter06,0
2483,Geras,10,7458629,004-Fighter04,0
3845,Alguien,14,8249876,001-Fighter01,0
4576,Hypnos,8,7452481,001-Fighter01,0
7457,Aquel,18,8245781,001-Fighter01,0
8542,Nadie,16,8249542,001-Fighter01,0
8749,Imera,12,7454157,001-Fighter01,0
9999,Fantasma de la Opera,1000,0,001-Fighter01,0
6152,Jeanette,16,3844875,002-Fighter02,0

En el archivo friends.txt siempre recuerden dejar al final una línea vacía, o sea, sin ningún caracter. Recuerden eso, es lo único que podría hacer que algo saliera mínimamente mal.

Si utilizan la versión 0.2.0 en adelante, necesitarán este script de Prototipo de Menú de Personajes Moviéndose.

Código:
#  Prototipo de Menu con Personajes en Movimiento
#  por Kyonides-Arkanthos
#  04.07.2010
class Window_Party < Window_MenuStatus
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      x = 64
      y = i * 116
      actor = $game_party.actors[i]
      draw_actor_name(actor, x, y)
      draw_actor_class(actor, x + 144, y)
      draw_actor_level(actor, x, y + 32)
      draw_actor_state(actor, x + 90, y + 32)
      draw_actor_exp(actor, x, y + 64)
      draw_actor_hp(actor, x + 236, y + 32)
      draw_actor_sp(actor, x + 236, y + 64)
    end
  end
end

class Game_Hero < Game_Character
  def initialize(index)
    super()
    @index = index
    # Character's Direction Change Timer : Integer
    @direction_count = Graphics.frame_rate * 3
    set_character_graphic
  end

  def update
    if @walk_anime
      @anime_count += 1.5
    elsif @step_anime
      @anime_count += 1
    end
    # If animation count exceeds maximum value
    # * Maximum value is move speed * 1 taken from basic value 18
    if @anime_count > 18 - @move_speed * 2
      # If stop animation is OFF when stopping
      if !@step_anime and @stop_count > 0
        @pattern = @original_pattern
      else
        @pattern = (@pattern + 1) % 4
      end
      @anime_count = 0
    end
    (@direction_count -= 1; return) if @direction_count > 0
    if @direction_count == 0
      @direction = @direction < 8 ? @direction + 2 : 2
      @direction_count = Graphics.frame_rate * 3
    end
    return if @starting or lock?
  end

  def refresh
    if $game_party.actors.size == 0 or @index > $game_party.actors.size-1
      @character_name, @character_hue = '', 0
      return
    end
    set_character_graphic
    @opacity, @blend_type = 255, 0
  end

  def set_character_graphic
    actor = $game_party.actors[@index]
    @character_name, @character_hue = actor.character_name, actor.character_hue
  end
end

class Sprite_CharacterAnime < RPG::Sprite
  attr_accessor :character, :id
  def initialize(viewport, character=nil, x=16, y=48)
    super(viewport)
    @character, @tile_id = character, 0
    self.x, self.y = x, y
    update
  end

  def update
    super
    if @character_name != @character.character_name
      @character_name = @character.character_name
      @character_hue = @character.character_hue
      self.bitmap = RPG::Cache.character(@character.character_name,
        @character.character_hue)
    end
    @cw = bitmap.width / 4
    @ch = bitmap.height / 4
    self.ox = @cw / 2
    self.oy = @ch
    self.visible = true
    sx = @character.pattern * @cw
    sy = (@character.direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      animation(animation, true)
      @character.animation_id = 0
    end
  end
end


Última edición por kyonides-arkanthos el Mar Ago 30, 2011 5:32 am, editado 6 veces
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
Raiden
Admin
Admin
avatar

Cantidad de envíos : 3346
Miembro desde : 01/03/2010
Edad : 24
Sexo : Masculino

Maker : RMXP

Logros MP :


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Lun Jul 18, 2011 11:50 pm

No digas que no hay cooperación forera, cuando necesites gráficos pídelos, hasta yo te ayudaría con ellos, sin mencionar que hay muchos otros que también lo harían.

Bueno yo estoy haciendo el script pero el mio es algo diferente a este ya que incluye tanto gráficos (rero rero) como una forma diferente de añadir la gente y otros datos y solo estará disponible es la tienda.


_________________




"La amenaza de una espada, mantiene a la otra envainada."

Spoiler:
 
Volver arriba Ir abajo
Ver perfil de usuario
Ares
Super Mod
Super Mod
avatar

Cantidad de envíos : 1613
Miembro desde : 08/07/2009
Edad : 87
Localización : en el baño
Sexo : Masculino

Maker : RMXP

Logros MP :


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Mar Jul 19, 2011 12:22 am

pon las medidas de los graficos y los colores ¬¬ porque no quiero que si le pongo un azul me diga que no porque es muy gay que mejor un morado dinosaurio.... y yo ayudo con los graficos ;D

_________________
Volver arriba Ir abajo
Ver perfil de usuario http://ares-games.blogspot.com/
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Mar Jul 19, 2011 2:33 am

@Ares
Entonces puede hacerlos en varios tonos o colores y que el usuario escoja cuáles prefiere...

@Todos
A partir de ahora doy inicio al "concurso", por llamarlo de alguna manera, para que los foreros con dotes de grafista o diseñador gráfico presenten sus propuestas sobre cómo debe de verse este script de AKENDA.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
Frikilangelo
Old Staff
Old Staff
avatar

Cantidad de envíos : 2461
Miembro desde : 13/07/2009
Edad : 30
Localización : España
Sexo : Masculino

Logros MP :


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Mar Jul 19, 2011 4:57 am

Bueno, ya hice lo que pedias =)

Lo unicoq ue yo em encuentro con el mismo problema que siempre... no tengo el maker aqui en el trabajo, asiq ue no peudo probar el script y ver que tiene para ver que se le peude poner (graficamente)

Pero si necesitas algo concreto aqui ando, que ahora mismo me estoy tomando un mini descanso con el CvO hasta que me hagan caso los del otro foro jajaja!!!
Volver arriba Ir abajo
Ver perfil de usuario
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Mar Jul 19, 2011 5:04 am

Pues de momento solo utiliza ventanas comunes y corrientes. Entre las cosas que he visto que puedo necesitar estàn un gràfico de fondo, un sìmbolo de telèfono para colocarlo antes de cada nùmero de telèfono, tanto en activo como en inactivo porque el personaje no tenga nùmero, un sìmbolo para hombre y otro para mujer y otro para no muerto y otro màs para monstruo comùn y tal vez algunos para niño y niña. No estarìa de màs un cursor decente o despampanante.

Igual si pueden dar ideas de còmo distribuir mejor toda la informaciòn del personaje, tanto la que se muestra desde un inicio como la que se verìa en una ventana nueva, no me quejarè, jejeje, rero.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
Ares
Super Mod
Super Mod
avatar

Cantidad de envíos : 1613
Miembro desde : 08/07/2009
Edad : 87
Localización : en el baño
Sexo : Masculino

Maker : RMXP

Logros MP :


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Jue Jul 21, 2011 3:52 pm

osea que primero te mostramos digamos un boceto en imagen de la propuesta.... digamos no tiene que ser funcional si no una idea de colores imágenes iconos y distribución de información

_________________
Volver arriba Ir abajo
Ver perfil de usuario http://ares-games.blogspot.com/
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Vie Jul 22, 2011 3:36 am

Sì, eso podrìa servir de momento mientras màs gente define què opciones podrìa incorporar un script asì.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Vie Jul 22, 2011 5:21 am

Publicada la VERSIÓN 0.2.0!!!

@Ares
Sì, eso podrìa servir de momento mientras màs gente define què opciones podrìa incorporar un script asì.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
jehyknaria
Caballero Maker
Caballero Maker
avatar

Cantidad de envíos : 154
Miembro desde : 13/03/2010
Localización : Canarias, España
Sexo : Femenino

Maker : RMXP


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Vie Jul 22, 2011 10:01 am

A mí se me ocurre añadir una pequeña foto y un lugar dónde encontrarlo o dónde vive.

Se podría añadir eso en una nueva pantalla (tipo agenda de teléfono), primero seleccionándolo de la listo primero.

Bueno, esas son mis ideas después de estarlo probando.
Volver arriba Ir abajo
Ver perfil de usuario
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Sáb Jul 23, 2011 7:17 am

Publicada la VERSIÓN 0.2.1!!!

Esta versiòn ya contempla algunas de las cosas propuestas para la visualización del script para alegría de Uds., no tanto para mí, jejeje, rero.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Dom Jul 24, 2011 7:16 am

Publicada la VERSIÓN 0.2.5!!!

En esta versiòn ya se ha contemplado más de las cosas propuestas para la visualización del script para alegría de Uds. y no tanto para mí como ya lo saben, jejeje, rero.

Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Mar Ago 30, 2011 5:43 am

Bueno ya subí la versión 0.3.0 de AKENDA cuya principal misión es hacer las cosas un poco más simples. Es más, la cantidad de líneas de código disminuyó.

Ahora se agregan a los amigos o contactos haciendo que una variable del juego (alguna de $game_variables según la que Uds. definan en VARID) guarde el número del índice del contacto (como el primer o segundo contacto que Uds. digitaron en su plantilla y así sucesivamente). Lo demás pasará automáticamente.

Recuerden que si no quieren que su líder del equipo sea el que haga una nueva amistad sino que lo haga otro de sus héroes, deberán cambiarlo por ese otro héroe antes de que hablen con quien pueda ser su nuevo amigo.

Incluye en una sección del editor de scripts el nuevo formato de la plantilla y un breve comentario sobre su uso, que ahora debería de ser mucho más fácil de leer.

No olviden mover el archivo friends.txt, que en este caso sería su plantilla, a otra parte una vez que ya estén listos para distribuir sus proyectos. Aun si lo olvidaran antes de distribuirlo, ningún cambio que los jugadores hicieran en dicho archivo podría afectar la experiencia de jugar su proyecto.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
Contenido patrocinado




MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   

Volver arriba Ir abajo
 
AKENDA - 1 Script de Agenda de Contactos
Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.
 Temas similares
-
» Nesesito un script o a un Scriptador
» script "Intro del juego con imágenes" [VX]
» Agenda del 09 de Julio al 15 de Julio de 2012.
» Victor Script Nieblas VX Ace
» [RPG Maker VX] Script para cambiar de TileSets (SwapXT)

Permisos de este foro:No puedes responder a temas en este foro.
Maker Palace :: RGSS Scripts :: Scripts Maker XP-
Cambiar a: