Tamaño del Texto:
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
 

Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: [Guia] Custom Skill  (Leído 2328 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Crislex
Posteador de Oro
*
Desconectado Desconectado

Mensajes: 600
Miembro Nº: 1263




Última visita: 20 de Mayo de 2008, 07:11:27
« : 24 de Septiembre de 2007, 01:39:36 »

[Guia] Custom Skills


Ya, que a la mayoria le interesa, el como crear nuevas skills, aqui les dejo esta pequeña guia que ire ampliando poco a poco.

Realizada por: Crislex

Descriptcion.-
Esta guia explica, de una forma censilla el como crear nuevas skill(se hara una Skill Cencilla pero funcional), para un entendimiento mas practico, la guia se dividira en tres Partes:
  • Agregando la Skill en el Codigo fuente del emulador
  • Agregando la Skill a los archivos del servidor
  • Implementacion de la Skill en el Cliente
Requisitos y Materiales a usar.-
Los requisitos y Materiales seran expuestos, al inicio de cada Parte.


[Parte 1] Agregando la Skill en el Codigo fuente del Emulador

Requisitos.-
  • Conocimientos Basicos de programacion
  • Conocimientos de Compilacion en Cygwing
  • Pasiencia y Dedicacion
Materiales.-
  • Compilador Cygwin
  • Visual C++, para editar el codigo fuente(aunque cualquier editor de texto sirve)

Nota: Si no tienes Conocimientos en Programacion, o Compilacion con Cygwin pero aun asi te interesa el Tema. checa este par de enlaces:

Tutorial basico de C++
Guia de Compilacion en Cygwing

Introduccion.-
Agregar una nueva Skill, no es mas complicado que agregar un NPC, o una Clase Custom, basta con seguir la guia.

[Parte 1.1] Skill Summon Slayer

Huum, pues la Skill tiene un nombre interesante(esperemos les agrade su funcion), primero que nada, vamos a ampliar el Numero maximo de la Skill_db, para esto abriremos el archivo skill.h.
Ruta: Src\map\skill.h

En este archivo buscamos la siguiente linea:
Código:
[COLOR=Red]#define MAX_SKILL_DB           1100[/COLOR]
y le agregamos unos cuantos espacios mas(no me gusta quedarme sin espacio):
Código:
[COLOR=Blue]  #define MAX_SKILL_DB           1300[/COLOR]
En el mismo archivo Buscamos lo Siguiente:
Código:
[B] KN_CHARGEATK = 1001,
CR_SHRINK,
AS_SONICACCEL,
AS_VENOMKNIFE,
RG_CLOSECONFINE,
WZ_SIGHTBLASTER,
SA_CREATECON,
SA_ELEMENTWATER,
HT_PHANTASMIC,
BA_PANGVOICE,
DC_WINKCHARM,
BS_UNFAIRLYTRICK,
BS_GREED,
PR_REDEMPTIO,
MO_KITRANSLATION,
MO_BALKYOUNG,
SA_ELEMENTGROUND,
SA_ELEMENTFIRE,[/B]
[COLOR=Red][B] SA_ELEMENTWIND,  [/B][/COLOR]
y despues del elemento Señalado con Rojo, agregamos nuestra nueva Skill:
Código:
[B] KN_CHARGEATK = 1001,
CR_SHRINK,
AS_SONICACCEL,
AS_VENOMKNIFE,
RG_CLOSECONFINE,
WZ_SIGHTBLASTER,
SA_CREATECON,
SA_ELEMENTWATER,
HT_PHANTASMIC,
BA_PANGVOICE,
DC_WINKCHARM,
BS_UNFAIRLYTRICK,
BS_GREED,
PR_REDEMPTIO,
MO_KITRANSLATION,
MO_BALKYOUNG,
SA_ELEMENTGROUND,
SA_ELEMENTFIRE,
[COLOR=Red] SA_ELEMENTWIND,[/COLOR]
[COLOR=Blue] NSC_SUMMONSLAYER,[/COLOR][/B] [COLOR=DarkGreen]//El numero de nuestra Skill es 1020[/COLOR]
Nota: NSC(Nueva Skill Custom), no es mas ke un identificador que le doy, para que no cause conflictos, en caso de haber otra Skill llamada SUMMONSLAYER, ademas suelen ser las iniciales del job al que pertenece la Skill).

Con esto ya dimos de alta el identificador de nuestra Custom Skill y el numero que tendra es 1020 que es el consecutivo de SA_ELEMENTWIND(1019), ahora solo Guardamos y cerramos el archivo.

Nota: Usar un id de Skill Consecutivo como el que semuestra

[Parte 1.2] Que hace SummonSlayer?

Summon Slayer, es una Skill de 5 niveles que invocara un mob(Mob segun nivel de la skill), para ayudar al player.

Para hacer posible esta skill, añadiremos una varible a la structura map_session_data.

Abrimos el archivo map.h,
Ruta: src\map\map.h

y Buscamos lo siguiente:
Código:
[B][COLOR=Red]char away_message[128];[/COLOR][/B]
Este es el ultimo elemento de la  Estructura map_session_data, y debajo debajo de este pondremos nuestra variable asi:
Código:
[COLOR=Red][B] char away_message[128];[/B][/COLOR]
[B][COLOR=Blue] struct mob_data *Slayer;[/COLOR][/B]
La Varibale Slayer, sera la contenedora de nuestro mob, (sin esta variable no es posible determinar a que player pertenece, cada mob invocado, pormedio de la skill) guardamos y cerramos el archivo map.h.

Ahora se hara la funcion que invocara a nuestro mob, para esto abriremos el archivo skill.c
Ruta: src\map\skill.c

Añadimos la Skill Custom, a la Lista de Skills(skill_name_db skill_names[]) para que el emulador la reconosca, para eso buscamos la siguiente linea:
Código:
[B][COLOR=Red]  { SA_SUMMONMONSTER, "SA_SUMMONMONSTER", "Monster_Chant" } ,[/COLOR][/B]
Y debajo de esa linea, añadimos nuestra Skill:
Código:
[COLOR=Red][B] { SA_SUMMONMONSTER, "SA_SUMMONMONSTER", "Monster_Chant" } ,[/B][/COLOR]
[B][COLOR=Blue] { NSC_SUMMONSLAYER, "NSC_SUMMONSLAYER", "Summon_Slayer" } ,[/COLOR][/B]
En el mismo archivo pondremos el Codigo de nuestra skill en esta Funcion skill_castend_nodamage_id(ya que nuestra skill no hace daño, solo invoca a un mob), buscamos el siguiente codigo:
Codigo:
Código:
[B][COLOR=Red][COLOR=Black] case SA_COMA:
            clif_skill_nodamage(src,bl,skillid,skilllv,sc_start(bl,type,100,skilllv,skill_get_time2(skillid,skilllv)));[/COLOR]
break;[/COLOR][/B]
y Justo despues del break; ponemos el codigo de nuestra skill

Codigo:
Código:
[COLOR=Blue] case NSC_SUMMONSLAYER:[/COLOR]
[COLOR=Red][B] {[/B][/COLOR]  [COLOR=DarkGreen]/*Se abre llave de codigo para poder declarar Variables*/[/COLOR]
[COLOR=Blue] int duration=30;[/COLOR] [COLOR=DarkGreen]/*Duracion de nuetro mob invocado, en minutos*/[/COLOR]
[COLOR=Blue] int Slayers[5] = { 1031, 1193, 1275, 1716, 1219 };[/COLOR] [COLOR=DarkGreen]/*Ids de los mob que puede invocar la skill*/[/COLOR]
         [COLOR=Blue]clif_skill_nodamage(src,bl,skillid,skilllv,1);[/COLOR] [COLOR=DarkGreen]/*Configuracion de parametros de la skill*/[/COLOR]
         [COLOR=Blue]if (&sd->Slayer->bl==0)[/COLOR]  [COLOR=DarkGreen]/*Verifica si hay un mob invocado*/[/COLOR]
         [COLOR=Blue][B]{}[/B][/COLOR]
         [COLOR=Blue][B]else[/B]
         [B]{[/B][/COLOR]
                      [COLOR=Blue]status_zap(&sd->Slayer->bl,sd->Slayer->status.hp, 0);[/COLOR] [COLOR=DarkGreen]/*Si ya hay un mob invocado lo matamos*/[/COLOR]
         [B][COLOR=Blue]}[/COLOR][/B]
        [COLOR=DarkGreen] /*Cargamos en la variable Slayer datos de spawn del mob(mapa, cordenadas, nombre,etc)*/[/COLOR]
        [COLOR=Blue]sd->Slayer = mob_once_spawn_sub(&sd->bl, sd->bl.m, -1, -1, "Slayer", [/COLOR][COLOR=Blue]Slayers[skilllv-1][/COLOR][COLOR=Blue], "");[/COLOR]  
                     
       [COLOR=Blue] if(sd->Slayer)[/COLOR]
        [COLOR=Blue][B]{      [/B][/COLOR]             [COLOR=DarkGreen]/*Carga de Datos del mob*/[/COLOR]
                      [COLOR=Blue]sd->Slayer->master_id=sd->bl.id;[/COLOR] [COLOR=DarkGreen]/*Se indica el Id del invocador*/[/COLOR]
                       [COLOR=DarkGreen]/*Se indica Inteligencia del mob*/[/COLOR]
                      [COLOR=Blue]sd->Slayer->special_state.ai=1;[/COLOR]
                     [COLOR=DarkGreen]/*Se inicializa el contador de tiempo de vida del mob*/  [/COLOR]
                   [COLOR=Blue]sd->Slayer->deletetimer=add_timer(gettick()+(duration*60000),mob_timer_delete,sd->Slayer->bl.id,0);[/COLOR]
                    [COLOR=Blue]clif_misceffect2(&sd->Slayer->bl,344);[/COLOR] [COLOR=DarkGreen]/*Se usa efecto de invocacion*/[/COLOR]
                    [COLOR=Blue]mob_spawn(sd->Slayer); [/COLOR][COLOR=DarkGreen]/*Invocamos al mob, usando los datos que estan cargados en Slayer*/[/COLOR]
                    [COLOR=Blue]sc_start4(&sd->Slayer->bl, SC_MODECHANGE, 100, 1, 0,[/COLOR] [COLOR=Blue]MD_AGGRESSIVE, 0, (duration*60000));[/COLOR] [COLOR=DarkGreen]/*Cargamos los modos de la ia del Mob*/[/COLOR]
        [B][COLOR=Blue]}[/COLOR][/B]
[COLOR=Red][B] }[/B][/COLOR] [COLOR=DarkGreen]/*Se cierra la llave de codigo*/[/COLOR]
[COLOR=Blue] break;[/COLOR]
Con este pequeño codigo invocamos a nuestro Slayer que ayudara a su invocador, Solo se podra invocar 1 a la vez(los mobs invocados, Dropearan items cuando mueran, asi que recomiendo usen mobs que no tengan dropeo, o Copias de los mobs sin dropeo, para evitar abusos de los players).

Guardamos y Cerramos el archivo, Con esto termina la parte 1, ya solo se Compila para que los cambios sean efectivos.


[Parte 2] Agregando la Skill a los archivos del servidor

Bien ya que creamos la Skill en el codigo fuente y compilamos, ahora tenemos que dar de alta la skill en las bases de datos del emulador, para asi poder asignarla a un Job.

Requisitos.-
  • Conocimiento del archivo skill_require_db.txt
  • Conocimiento del archivo skill_tree.txt
  • Conocimiento del archivo skill_db.txt
Materiales.-

 [Parte 2.1] Configurar los requisitos de uso de la Skill

La Skill ha sido creada Exitosamente pero aun nos falta una parte importante, Agregarla al Archivo:skill_db.txt
Ruta: db\skill_db.txt

Buscamos la siguiente linea:
Código:
[COLOR=Red]1019,9,6,1,4,1,0,1,1,yes,0,1,0,magic,0 [/COLOR][COLOR=DarkGreen]//SA_ELEMENTWIND#Elemental Change Wind#[/COLOR]
y debajo de ella agregamos nuestra skill:
Código:
[COLOR=Red]1019,9,6,1,4,1,0,1,1,yes,0,1,0,magic,0[/COLOR] [COLOR=DarkGreen]//SA_ELEMENTWIND#Elemental Change Wind#[/COLOR]
[COLOR=Blue]1020,0,6,4,0,1,0,5,1,yes,0,2,0,magic,0 [/COLOR]
ahora vamos a configurar sus requisitos de uso(consumo de SP,Catalizadores, Cast,etc.), para configurar sus Requisitos de uso abriremos el archivo skill_require_db.txt.
Ruta: db\skill_require_db.txt

Buscamos la siguiente linea:
Código:
[COLOR=Red] 1019,0,0,30,0,0,0,99,0,0,none,0,12117,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0[/COLOR] [COLOR=DarkGreen]//SA_ELEMENTWIND[/COLOR]
y debajo de esa ponemos lo que la skill requiere para su uso:
Código:
[COLOR=Red] 1019,0,0,30,0,0,0,99,0,0,none,0,12117,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0[/COLOR] //SA_ELEMENTWIND
[COLOR=Blue] 1020,[B][COLOR=DarkRed]1000:900:800:700:600[/COLOR][/B],[/COLOR][COLOR=Blue]0,[/COLOR][COLOR=Blue][B][COLOR=DarkGreen]60:70:80:90:100[/COLOR][/B],0,0,0,0,0,0,none,0,[B][COLOR=Purple]604:604:604:604:604[/COLOR][/B],[B][COLOR=DarkOrange]1:1:1:1:1[/COLOR][/B],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0[/COLOR]    [COLOR=DarkGreen]//Summon Slayer[/COLOR]
Las partes Multicolor, son los requisitos que pide la skill para poder ser usada los cuales se descriven acontinuacion:
  • 1000:900:800:700:600.-Sacrificio de Hp, Segun el nivel de la Skill(a lvl1:1000 de Hp,,,,,lvl5:600 de hp)
  • 60:70:80:90:100.-coste de SP segun el nivel de la Skill( a lvl1:60 de Sp,,,,,lvl5:100 de Sp)
  • 604:604:604:604:604.- Item que consume la Skill segun su nivel(para todos los niveles consume Deaht Branch)
  • 1:1:1:1:1.- Cantidad del Item que consume la skill(para todos los niveles consume 1 item)
Guardamos y cerramos, con esto ya se ha configurado los requisitos de la skill, bien ahora a que Job le pondremos la Skill???
Abrimos el archivo skill_tree.txt
Ruta db\skill_tree.txt

Buscamos el siguiente codigo:
Código:
[COLOR=Black][B] 4009,79,10,12,1,78,1,77,3,0,0,0,0 //PR_MAGNUS#Magnus Exorcismus#
4009,1014,1,0,0,0,0,0,0,0,0,0,0 //PR_REDEMPTIO#Redemptio#
4009,361,5,33,1,9,3,66,3,0,0,0,0 //HP_ASSUMPTIO#Assumptio#
4009,362,5,75,2,9,1,73,3,0,0,0,0 //HP_BASILICA#Basilica#
4009,363,10,68,3,9,5,76,5,0,0,0,0 //HP_MEDITATIO#Meditatio#
4009,481,5,65,10,23,10,0,0,0,0,0,0 //HP_MANARECHARGE#Mana Recharge#[/B][/COLOR]
[COLOR=Red][B] 4009,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#[/B][/COLOR]
y debajo de la ultima linea pondremos la de nuestra skill:
Código:
[B] 4009,79,10,12,1,78,1,77,3,0,0,0,0 //PR_MAGNUS#Magnus Exorcismus#
4009,1014,1,0,0,0,0,0,0,0,0,0,0 //PR_REDEMPTIO#Redemptio#
4009,361,5,33,1,9,3,66,3,0,0,0,0 //HP_ASSUMPTIO#Assumptio#
4009,362,5,75,2,9,1,73,3,0,0,0,0 //HP_BASILICA#Basilica#
4009,363,10,68,3,9,5,76,5,0,0,0,0 //HP_MEDITATIO#Meditatio#
4009,481,5,65,10,23,10,0,0,0,0,0,0 //HP_MANARECHARGE#Mana Recharge#
[COLOR=Red] 4009,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#[/COLOR]
[COLOR=Blue] 4009,[COLOR=DarkRed]1020[/COLOR],[COLOR=Purple]5[/COLOR],0,0,0,0,0,0,0,0,0,0 //NSC_SUMMONSLAYER#SUMMON SLAYER#[/COLOR][/B]
las modificaciones fueron las siguientes:
4010.- Id del Job(HighPriest)
1020.- Id de la skill
5     .- Maximo lvl de la Skill

De esta forma el high Priest tiene una nueva skill a su disposicion.


[Parte 3] Implementacion de la Skill en el Cliente

Con los 2 pasos anteriores, se creo la skill, se configuraron los requisitos de uso y se le asigno a un Job, bien ahora como paso final haremos que el cliente reconosca suestra skill, para asi poder usarla y que no le cause error a los demas.

 Requisitos.-
  • Conocimiento de uso de X-Ray
  • Conocimiento de creacion de Sprites
Materiales.-
  • Cliente X-Ray
  • Programa Sprite Conview
  • Programa Actor
  • Imagen de la Skill en BMP de 24x24 pixeles
  • Sprite y Act de la Skill
 [Parte 3.1] Agregar Skill y su descripcion

Para agregar la skill al Cliente abrimos los archivos: ability_player_tab.txt y  ability_tab.txt
Ruta: Data\ability_player_tab.txt y Data\ability_tab.txt

Buscamos la siguiente linea:
Código:
[COLOR=Red]SA_ELEMENTWIND[/COLOR]
y debajo de ella ponemos nuestra skill:
Código:
[COLOR=Red]SA_ELEMENTWIND[/COLOR]
[COLOR=Blue] NSC_SUMMONSLAYER[/COLOR]
Con esto agregamos la skill, usando el X-Ray, ahora abrimos el archivo: skilldesctable.txt
Ruta: Data\skilldesctable.txt

vamos al final del archivo y agregamos lo siguiente:
Código:
[B][COLOR=Blue] NSC_SUMMONSLAYER#[/COLOR][/B]
[B][COLOR=Black] Summon Slayer
Max Level:^777777 5^000000
Type:^777777 Invocacion^000000
SP Cost:^777777 50+SkillLvl*10^000000
HP Cost:^777777 1000-SkillLvl*100^000000
Target:^777777 ninguno^000000
Range:^777777 ninguno^000000
ATK Type:^777777 Summon Monster^000000
Cast Time:^777777 0 sec^000000
Cool Down:^777777 0 sec^000000
Duration:^777777 30 min^000000
Effect:^777777 Invoca un Slayer^000000[/COLOR][/B]
[B][COLOR=Blue] #[/COLOR][/B]
Con esto agregamos la descripcion de nuestra skill.

 [Parte 3.2] Agregar el texto de la Skill
Para agregar el texto que aparece cuando usamos la Skill, abriremos el siguiente archivo: skillnametable.txt
Ruta: Data\skillnametable.txt

Vamos al Final del archivo y agregamos la siguiente linea:
Código:
[B][COLOR=Blue]NSC_SUMMONSLAYER#[COLOR=Black]Invocar Slayer[/COLOR]#[/COLOR][/B]
 

 [Parte 3.3] Skill de Lvl seleccionable

Como la Skill es de 5 lvl y cada lvl invoca a un Mob diferente, vamos a hacer que se pueda seleccionar libremente el lvl de la skill que se desea usar,
Para hacer esto vamos al archivo: leveluseskillspamount.txt
Ruta Data\leveluseskillspamount.txt

Vamos al final del archivo y ponemos lo siguiente:
Código:
[COLOR=Black][B][COLOR=Blue]NSC_SUMMONSLAYER#[/COLOR][/B]
[B]60#
70#
80#
90#
100#
@[/B][/COLOR]
Con esto se podra seleccionar el nivel de la skill(Igual que los Bolts del mago, o el Heal del Priest).


[Parte 3.4] Agregar Imagenes de la skill

Ahora como paso final pondremos las imagenes de la Skill,(las que se veran en la ventana de skills y cuando la arrastres a la barra de acceso rapido)
Primero vamos a la catpeta item
Ruta Data\texture\À¯ÀúÀÎÅÍÆäÀ̽º\item

ahi pondremos la Imagen bmp de la skill, tiene que ser una imagen de 24x24 pixeles, y com nombre de archivo deve llevar el nombre de la Skill ejemplo:
Código:
[B][COLOR=Blue] NSC_SUMMONSLAYER.bmp[/COLOR][/B]
ahora vamos a la carpeta ¾ÆÀÌÅÛ
Ruta: Data\sprite\¾ÆÀÌÅÛ

Ahi pondrmos el archivo de Sprite y act de la Skill, para que a a la hora de arrastrarla  fuera de la ventana de skills, no nos cause error.
Código:
 [B][COLOR=Blue]NSC_SUMMONSLAYER.spr[/COLOR][/B]
[B][COLOR=Blue] NSC_SUMMONSLAYER.act[/COLOR][/B]
Asi de censillo tenemos una nueva skill, Customizada y funcional.

De esta forma llegamos al final de esta guia, espero les sirva de base, para la creacion de nuevas skills que agan lo que ustedes les preogramen xD, Suerte.
Citar
Agrego un archivo Rar, con la imagen, que use para la Skill asi como los archivos que modifique en el cliente.
Guia en archivo .doc, Sprite y Act
« Última modificación: 24 de Septiembre de 2007, 03:37:21 por Crislex » En línea

La Verdad siempre esta oculta tras el velo de la Realidad
pdevilaz1 Crislex Assembler [IMG]http://img404.imageshack.us/i
DivineRO :: Foro :: Ragnarok Online
« : 24 de Septiembre de 2007, 01:39:36 »

 En línea
Azura Kamaitachi
Donadores
Posteador de Oro
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 736
Miembro Nº: 2706


Admin of SnS-RO


WWW

Última visita: 25 de Julio de 2008, 07:04:37
« Respuesta #1 : 24 de Septiembre de 2007, 06:13:20 »

¿Y si quisiera por ejemplo crear la "Sabaku Kyo"(Sabaku no Gaara) y quiero que salga una animación creada por mi estilo Ranging Fire Formation pero saliendo una mano de arena aplastando? ¿como lo haria?

Porque en esa skill que tú has puesto no sale ninguna animación, si no me equivoco.
« Última modificación: 24 de Septiembre de 2007, 06:15:41 por Azura Kamaitachi » En línea


~Servidor totalmente ON. || Web disponible de nuevo~
~ http://sns-ro.es/ ~
Myzter
Moderador
Posteador
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 99
Miembro Nº: 3469


Pensar es gratis.


WWW

Última visita: 02 de Abril de 2008, 06:18:31
« Respuesta #2 : 24 de Septiembre de 2007, 07:05:05 »

Excelente guía, correcta, bien redactada y de fácil comprensión.

NO1

No sería malo que exploraras la compilación usando Visual C++ .NET, hay un famoso error con el manejo de conexiones TCP que tiene Cygwin que produce caídas a las pocas horas de funcionar el map-server.

Al compilar usando C++ eAthena puede funcionar 1 semana sin caídas y mucho más rápido al no tratarse de código interpretado.

Gracias por compartir tu guía.
Myzter
En línea


Servidores Ragnarok:
> Pow4Ever (Mid Rates)
> C.Y.G.N.U.S Project (Low Rates - Pronto)
Shuji Yagami
Moderador Director
Posteador Divino
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 3167
Miembro Nº: 220


~ Divine Director ~


WWW

Última visita: Hoy a las 02:42:28
« Respuesta #3 : 24 de Septiembre de 2007, 08:44:21 »

AÑADIDA A GUIAS Y FAQS

CLOSE TOPIC.
En línea

Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Powered by SMF 1.1.5 | SMF © 2006, Simple Machines LLC
Seo4Smf v0.2 © Webmaster's Talks

BlueSkies design by Bloc, editado por eves para DivineRO | XHTML | CSS

Página creada en 0.548 segundos con 19 consultas.


Google visitó por ultima vez esta pagina 24 de Julio de 2008, 08:29:54