Maker Palace
Si quiere un completo acceso al contenido del foro. Registrate

Maker Palace

¡El Reino del RpgMaker y del Ocio!
 
ÍndiceCalendarioFAQBuscarGrupos de UsuariosRegistrarseConectarse
Conectarse
Nombre de Usuario:
Contraseña:
Entrar automáticamente en cada visita: 
:: Recuperar mi contraseña
Temas similares
  • » AKENDA - 1 Script de Agenda de Contactos
  • » [RPGMAKER][XP][Script][Recopilacion][Hecha][Por][Mi]
  • » [RPG Makeer VX] Script Pulsa Start
  • » [RPGXP] Script CBS Suikoden
  • » [RPGXP] Script multijugador
  • » Script de batalla estilo Paper Mario para XP
  • » (XP)(SCRIPT) SWFs/Flash en rpg maker xp
  • » [RMVX Script] Menu del TItulo al estilo Fire Emblem
  • » [Script] The Eye Of Truth (Ojo de la verdad)
  • » [RMVX Script] Map Name
  • Buscar
     
     

    Resultados por:
     
    Rechercher Búsqueda avanzada
    Últimos temas
    » [MurTV] Introducción al nuevo canal de Yutub MURTV!!!
    por Mur-mai-der Hoy a las 8:55 am

    » Webadas de la Web
    por SagahonArturo Hoy a las 7:23 am

    » Concurso de Mapeo Hábil #1
    por arcanite Hoy a las 4:09 am

    » Cuanto tiempo crees que necesitas para crear un videojuego?
    por Ares Vie Mayo 18, 2012 7:28 pm

    » Como configuro un overdrive? Xas
    por arcanite Vie Mayo 18, 2012 12:52 pm

    » Destiny Wings: The Path of Hope (Relanzamiento)
    por NightBreeze Jue Mayo 17, 2012 3:38 pm

    » Sobre un afiliado suyo...
    por DaviX Jue Mayo 17, 2012 1:34 am

    ¿Quién está en línea?
    En total hay 41 usuarios en línea: 4 Registrados, 0 Ocultos y 37 Invitados :: 2 Motores de búsqueda

    Mur-mai-der, rodrigo_master, SagahonArturo, Super Shooter

    La mayor cantidad de usuarios en línea fue 179 el Mar Ago 30, 2011 1:06 pm.
    Minichat
    Mejores posteadores
    DaviX (2596)
     
    Super Shooter (2415)
     
    Frikilangelo (2317)
     
    Falcao (1503)
     
    555goku5551 (1397)
     
    Webmaster24 (1335)
     
    xDarkLinkx (1285)
     
    Ares (1273)
     
    kyonides-arkanthos (1224)
     
    Algo_Odg (1188)
     
    Mas
    Afiliados
    Visitas

    Flag Counter
    free counters

    Compartir | 
     

     AKENDA - 1 Script de Agenda de Contactos

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


    Cantidad de envíos: 1224
    Fecha de inscripción: 02/02/2010

    MensajeTema: AKENDA - 1 Script de Agenda de Contactos   Lun Jul 18, 2011 1: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 Lun Ago 29, 2011 8:32 pm, editado 6 veces
    Volver arriba Ir abajo
    Ver perfil de usuario
    Super Shooter
    Diamante
    Diamante


    Cantidad de envíos: 2415
    Fecha de inscripción: 01/03/2010
    Edad: 19
    Localización: Top-Secret
    Proyecto: Super shooter Battle System

    MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Lun Jul 18, 2011 2: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.

    Volver arriba Ir abajo
    Ver perfil de usuario En línea
    Ares
    Moderador
    Moderador


    Cantidad de envíos: 1273
    Fecha de inscripción: 08/07/2009
    Edad: 82
    Localización: en el baño
    Proyecto: Tales of elven

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

    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 Maker
    Lord Maker


    Cantidad de envíos: 1224
    Fecha de inscripción: 02/02/2010

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

    @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
    Frikilangelo
    Moderador
    Moderador


    Cantidad de envíos: 2317
    Fecha de inscripción: 12/07/2009
    Edad: 25
    Localización: España

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

    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 Maker
    Lord Maker


    Cantidad de envíos: 1224
    Fecha de inscripción: 02/02/2010

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

    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
    Ares
    Moderador
    Moderador


    Cantidad de envíos: 1273
    Fecha de inscripción: 08/07/2009
    Edad: 82
    Localización: en el baño
    Proyecto: Tales of elven

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

    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 Maker
    Lord Maker


    Cantidad de envíos: 1224
    Fecha de inscripción: 02/02/2010

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

    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
    kyonides-arkanthos
    Lord Maker
    Lord Maker


    Cantidad de envíos: 1224
    Fecha de inscripción: 02/02/2010

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

    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
    jehyknaria
    Maestro Maker
    Maestro Maker


    Cantidad de envíos: 148
    Fecha de inscripción: 13/03/2010
    Localización: Canarias, España
    Proyecto: S E Y T A N

    MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Vie Jul 22, 2011 1: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 http://mastermaker.mforos.com
    kyonides-arkanthos
    Lord Maker
    Lord Maker


    Cantidad de envíos: 1224
    Fecha de inscripción: 02/02/2010

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

    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
    kyonides-arkanthos
    Lord Maker
    Lord Maker


    Cantidad de envíos: 1224
    Fecha de inscripción: 02/02/2010

    MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Sáb Jul 23, 2011 10:16 pm

    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
    kyonides-arkanthos
    Lord Maker
    Lord Maker


    Cantidad de envíos: 1224
    Fecha de inscripción: 02/02/2010

    MensajeTema: Re: AKENDA - 1 Script de Agenda de Contactos   Lun Ago 29, 2011 8:43 pm

    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
     

    AKENDA - 1 Script de Agenda de Contactos

    Ver el tema anterior Ver el tema siguiente Volver arriba 
    Página 1 de 1.

     Temas similares

    -
    » peticiones de script de elfbot
    » Pedido, RPG Maker XP, necesito un script para que tu equipo te siga
    » (XP y VX)(SCRIPT) Mini mapa
    » [RMVX Script] Mode 7
    » Script de clima para VX

    Permiso de este foro:No puedes responder a temas en este foro.
    Maker Palace :: RGSS y otros Lenguajes :: Scripts Maker XP-