• Reglas del Foro Reglas del Juego Guias Ayuda y Preguntas Eventos Solis Support

    Se recuerda a todos los usuarios que para acceder a los contenidos del foro en su totalidad han de estar REGISTRADOS






[Informática] printf("Guerreros Programadores");

Estado
No está abierto para más respuestas.

DeletedUser

Guest
Hola chicos, se que esta comunidad recién está empezando y aún no somos muchos pero...

Hay programadores jugando por aquí? Alguno se ha interesado en desarrollar aplicaciones estadísticas como el Grepostats? Por ejemplo. O grepomaps, o alguna otra aplicación referente a Grepolis?

Los desarrolladores somos curiosos y supongo que a alguno le habrá interesado este tema, no me digan que no :p

Y si no es este tu caso, pero eres programador, ¿en qué lenguajes trabajas?
 

DeletedUser64

Guest
Yo programo en basic pero soy un noob :p aunque me gustaría aprender otros lenguajes...
 

DeletedUser

Guest
Al igual que naz- también uso el basic e igual soy muy, pero muy noob, aunque el tema me encanta espero seguir conociendo el lenguaje de la programación.
 

DeletedUser8

Guest
Os recuerdo que cualquier script o/y addons mientras no lo autoricemos con IG, su uso es ilegal.

 

DeletedUser8

Guest
Un scrip de lo más interesante sería un buen compactador de batallas, donde sobre todo salga la suma final de perdidas.
 

DeletedUser64

Guest
Un scrip de lo más interesante sería un buen compactador de batallas, donde sobre todo salga la suma final de perdidas.
Buenas,
Creo que lo que buscas es el GRC (Grepolis Report Converter), podés descargarlo desde acá: link
Con ese podés convertir a texto + imágenes cualquier informe y hay 2 versiones, para foro de la alianza o para foro externo (este), si eliges el del foro de alianza y pegas el código acá seguramente no se vea... si eliges el de foro externo se verá bien.
Por las dudas te añade un botón como el de Publicar pero que dice "Convertir", y desde ahí podés hacer esto. También te da la opción para esconder tropas atacantes, ciudades, etc.
Espero que te sirva.
 

DeletedUser

Guest
Buenas,
Creo que lo que buscas es el GRC (Grepolis Report Converter), podés descargarlo desde acá: link
Con ese podés convertir a texto + imágenes cualquier informe y hay 2 versiones, para foro de la alianza o para foro externo (este), si eliges el del foro de alianza y pegas el código acá seguramente no se vea... si eliges el de foro externo se verá bien.
Por las dudas te añade un botón como el de Publicar pero que dice "Convertir", y desde ahí podés hacer esto. También te da la opción para esconder tropas atacantes, ciudades, etc.
Espero que te sirva.

Yo conocía otro compactador, pero creo que dejó de funcionar después de implementar la versión 2.0 de Grepolis.
Si no recuerdo mal éste compactador ya lo conoce MadreWicca, ya que lo vi en un thread de ella hace unos días. Le falta algo? porque parece ser muy completo.

Naz- y pezuña, yo no programé en basic pero si en Visual Basic 5.0 y 6.0 y posteriormente Visual Basic.Net. Igual en la mayoría de lenguajes se usan siempre las mismas instrucciones básicas, luego cada uno tiene lo suyo pero saber ya un lenguaje te ayuda mucho para aprender otro.
 

DeletedUser114

Guest
saludos Dismal-
soy programador manejo el HTML5 bueno y me suena la idea de lo de la pagina de estadísticas aunque no encuentro las API donde estaban las bases de datos para descargar las cuales las había visto al prncipio que abrieron el server y por cuestiones de tiempo no desarolle ese proyecto actualmente cuanto con algo mas de tiempo y me encuentro con la sorpresa que todavía no hay pagina de estadisticas para el server argentino lo cual me parece que es una herramienta fundamental por lo menos para los jugadores que venimos de otros server en los cuales las usamos para muchas cosas.
 

DeletedUser

Guest
Acá te dejo el acceso a la base de datos, esto es para el mundo Alpha, para el beta cambia el "1" que está después del "ar" por un "2".

Código:
http://ar1.grepolis.com/data/players.txt
http://ar1.grepolis.com/data/alliances.txt
http://ar1.grepolis.com/data/player_kills_all.txt
http://ar1.grepolis.com/data/player_kills_att.txt
http://ar1.grepolis.com/data/player_kills_def.txt
http://ar1.grepolis.com/data/alliance_kills_all.txt
http://ar1.grepolis.com/data/alliance_kills_att.txt
http://ar1.grepolis.com/data/alliance_kills_def.txt
http://ar1.grepolis.com/data/towns.txt
http://ar1.grepolis.com/data/conquers.txt
http://ar1.grepolis.com/data/islands.txt

La estructura de la base de datos es como la de un CSV, un archivo de texto plano con n líneas, la cual cada línea contiene n campos separadas por comas (,). Cada archivo sigue esta estructura:

Código:
"players.txt"
Orden de los campos: $id, $name, $alliance_id, $points, $rank, $towns 

"player_kills_all.txt", "player_kills_att.txt", "player_kills_def.txt"
Orden de los campos: $rank, $player_id, $points 

"alliances.txt"
Orden de los campos: $id, $name, $points, $villages, $members, $rank 

"alliance_kills_all.txt", "alliance_kills_att.txt", "alliance_kills_def.txt"
Orden de los campos: $rank, $alliance_id, $points 

"towns.txt" 
Orden de los campos: $id, $player_id, $name, $island_x, $island_y, $number_on_island, $points 

"conquers.txt"
Orden de los campos: $town_id, $time, $new_player_id, $old_player_id, $new_ally_id, $old_ally_id, $town_points 

"islands.txt"
Orden de los campos: $id, $x, $y, $island_type, $available_towns

Te dejo unas aclaraciones por si no has trabajado antes ya con estos archivos:

-El último archivo islands.txt no se modifica, desde que se abre el mundo será el mismo. Así que solo tienes que descargarlo una sola vez, si es que lo llegas a usar. Recuerda esto porque es el que más pesa si no recuerdo mal.
-El dato de la fecha en el archivo "conquers.txt" está dado en formato de timespam (cantidad de segundos desde 1/1/1970)
-Los archivos están codificados en urlcode y utf8, si haces el tratamiento inverso podrás ver bien los nombres.

Creo que nada más en cuanto a los datos. Para acceder a los archivos con SQL puedes importar la base usando LOAD DATA LOCAL INFILE ó LOAD DATA INFILE, es un método rápido.

Si queres hacer algo al estilo grepostats, tienes que crear un script para que te haga el update de la base de datos, ten en cuenta cada cuantas horas correras el script porque esto incrementa la cantidad de recursos usado por tu hosting, por si no es pago lo digo.

Para tener el incremento de puntos diario como lo tienes en el grepostat tienes que crear una tabla nueva en tu base de datos, donde ahí colocarás los incrementos parciales para cada día de la semana. Esta tabla también se actualizará en el script, y actualizará el incremento diario mientras estes en un mismo día.

Con eso ya tienes practicamente todos los datos que suministra el grepostats, solo te queda jugar un poco con las relaciones de las tablas.

Yo estas semanas ando con muy poco tiempo por la universidad, pero si tienes dudas puedes escribirlas que entro seguido por aquí e intentaré hacerme tiempo.

Suerte con tu proyecto! :D
 

DeletedUser114

Guest
gracias Dismal ya entendi la estructura.
te agradecería una explicación detallada de como convertir la base de datos txt en sql porque la verdad las que manejo son en sql.
 

DeletedUser

Guest
Bueno, vamos por partes dijo nuestro amigo Jack.

Como lo que quieres es una web utilizaremos php para tener acceso a la base de datos.

Dejo datos técnicos:

Código:
Server: Apache 2.2.22
PHP Version: 5.4.3
MySql Version: 5.5.24

Bueno arrancamos con el código.

Primero accederemos a la base de datos de tu web, te recomiendo que la crees antes. Todas las tablas con todos los campos, fijate bien si pones mayúsculas en algo. Te recomiendo también que hagas un diagrama de relaciones y la imprimas, de esa forma tendrás todos los nombres de los campos a mano, uno suele confindirse a veces con tantos nombres.

Una vez que ya tengas tu base de datos creada solo hace falta acceder a ella y llenarla.

Acceso a la base de datos:

PHP:
$connection = mysql_connect("localhost", "root", "");
if(!$connection)
     exit("data base error");

mysql_select_db("grepolis");

Con esto lo que hicimos fué crear una variable connection donde tendremos nuestra conexión. Los argumentos de la función mysql_connect() son ("nombre_del_servidor", "nombre_de_usuario", "password"). Luego, si no se pudo conectar tira mensaje de error y termina todo, de lo contrario seleccionaremos la base de datos a usar (ya que puede haber varias) con mysql_select_db(), como argumento de esta función va el nombre de la base de datos.

Ahora tenemos que descargar los archivos a usar, recuerda que te dije que había que decodificar los datos para que se vean bien todos los nombres. Así que creamos una función llamada downloadFile() que tiene como argumentos la url del archivo y el path de dónde lo va a guardar.

PHP:
function downloadFile($url,$fileName){
     $fp = fopen($fileName,"w");
     fwrite($fp, str_replace("\n",chr(13).chr(10), utf8_decode(urldecode(file_get_contents($url)))));
     fclose($fp);
}

Con la función file_get_contents obtienes el contenido del archivo, ahora decodificas ese contenido con urldecode y lo mismo con utf8_decode. El reemplazo que hice con str_replace es porque había conflicto con el salto de línea.

Ahora vamos a usar esta función para bajar todos los archivos (menos el de islas por lo que te comenté antes):

PHP:
downloadFile("http://ar1.grepolis.com/data/players.txt","players.txt");
downloadFile("http://ar1.grepolis.com/data/alliances.txt","alliances.txt");
downloadFile("http://ar1.grepolis.com/data/player_kills_all.txt","player_kills_all.txt");
downloadFile("http://ar1.grepolis.com/data/player_kills_att.txt","player_kills_att.txt");
downloadFile("http://ar1.grepolis.com/data/player_kills_def.txt","player_kills_def.txt");
downloadFile("http://ar1.grepolis.com/data/alliance_kills_all.txt","alliance_kills_all.txt");
downloadFile("http://ar1.grepolis.com/data/alliance_kills_att.txt","alliance_kills_att.txt");
downloadFile("http://ar1.grepolis.com/data/alliance_kills_def.txt","alliance_kills_def.txt");
downloadFile("http://ar1.grepolis.com/data/towns.txt","towns.txt");
downloadFile("http://ar1.grepolis.com/data/conquers.txt","conquers.txt");;

Listo! ya tenemos los archivos en nuestro servidor, ahora solo queda importarlos a la base de datos. Como lo que queremos es actualizar todo el tiempo nuestra base de datos con estos archivos, lo que debemos hacer antes es borrar todas las tablas pertenecientes a cada archivo, esto es para no duplicar información.

Con esto borramos las tablas:

PHP:
mysql_query("truncate table players ",$connection);
mysql_query("truncate table alliances ",$connection);
mysql_query("truncate table towns ",$connection);
mysql_query("truncate table alliancekillsall ",$connection);
mysql_query("truncate table alliancekillsatt ",$connection);
mysql_query("truncate table alliancekillsdef ",$connection);
mysql_query("truncate table conquers ",$connection);
mysql_query("truncate table playerkillsall ",$connection);
mysql_query("truncate table playerkillsatt ",$connection);
mysql_query("truncate table playerkillsdef ",$connection);

Ahora ya está todo listo para el llenado de las tablas, lo haremos de esta forma (son un poco largas las sentencias):

PHP:
mysql_query ("LOAD DATA LOCAL INFILE 'players.txt' INTO TABLE players 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(id_player, name, id_alliance, points, rank, towns);",$connection);

mysql_query ("LOAD DATA LOCAL INFILE 'alliances.txt' INTO TABLE alliances 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(id_alliance, al_name, al_points, al_towns, members, al_rank);",$connection);

mysql_query ("LOAD DATA LOCAL INFILE 'alliance_kills_all.txt' INTO TABLE allianceKillsAll 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(aka_rank, id_alliance, aka_points);",$connection);

mysql_query ("LOAD DATA LOCAL INFILE 'alliance_kills_att.txt' INTO TABLE allianceKillsAtt 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(akat_rank, id_alliance, akat_points);",$connection);

mysql_query ("LOAD DATA LOCAL INFILE 'alliance_kills_def.txt' INTO TABLE allianceKillsDef 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(akd_rank, id_alliance, akd_points);",$connection);

mysql_query ("LOAD DATA LOCAL INFILE 'player_kills_all.txt' INTO TABLE playerKillsAll 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(pka_rank, id_player, pka_points);",$connection);

mysql_query ("LOAD DATA LOCAL INFILE 'player_kills_att.txt' INTO TABLE playerKillsAtt 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(pkat_rank, id_player, pkat_points);",$connection);

mysql_query ("LOAD DATA LOCAL INFILE 'player_kills_def.txt' INTO TABLE playerKillsDef 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(pkd_rank, id_player, pkd_points);",$connection);

mysql_query ("LOAD DATA LOCAL INFILE 'towns.txt' INTO TABLE towns 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(id_town, id_player, townName, posX, posY, nIsland, townPoints);",$connection);

mysql_query ("LOAD DATA LOCAL INFILE 'conquers.txt' INTO TABLE conquers 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' 
(id_town, dTime, id_playerNew, id_playerOld, id_allianceNew, PointsTown);",$connection);

La sentencia para hacer una consulta es mysql_query(), tiene como argumentos "sentencia_sql", variable_de_conexión.

Vamos a ver que dice esa sentencia, que si te fijas es similar en todas.

LOAD DATA LOCAL INFILE 'nombre_del_archivo' INTO TABLE nombre_de_la_tabla
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n'
(nombre_del_campo_1, nombre_del_campo_2, nombre_del_campo_3, nombre_del_campo_etc);",variable_de_conexión);

Lo que hace esto es importar información desde un archivo local tomando el archivo (nombre_del_archivo) e importándolo a la tabla (nombre_de_la_tabla). Luego aclara que en ese archivo los datos estan separados por coma (,) y los registros por saltos de línea ('\r\n'). Luego también aclaramos los nombres de los campos de esa tabla, esto tiene que seguir un orden que será el orden de como aparecen los campos en el archivo. Por ejemplo, si el primer campo es id de player pués le indicarás que el primer campo irá a tu campo id_player de tu tabla. Por último se indica la conexión usada.

Bueno este sería tu script de actualización de la base de datos, al menos la primera versión que ya luego le agregarás lo que falta. Ahora solo queda acceder a las tablas para mostrar la información, pero como dices que ya manejas Sql supongo que ya lo sabes hacer.

Saludos!
 

DeletedUser9

Guest
Es que hoy mi cerebro anda un poco solo un poco agotado.

¿Eso es para lo del juego?

¿Da clases por privado a gente que entiende lento y que se le olvidan las cosas a los 5 segundos?

Por eso de no querer pasar ridículo aquí :(
 

DeletedUser

Guest
Sí, para una web de estadísticas alternativa a grepostats.

Si hay paga de por medio es lo mejor tener gente que entiende lento y que se le olvidan las cosas, porque al entender lento son más horas las que me pagará, y al olvidarse las cosas pués lo mismo :p Digamos que sería un cliente vitalicio xD
 

DeletedUser114

Guest
Dismal gracias creo que mas claro imposible en estos momentos en el pc en el que me encuentro no tengo el wanserver instalado por lo cual no puedo crear la base de datos ni lo demas pero bueno ya con esto tengo los indicios para comenzar.
tan pronto tenga algo ya el desarrollado os aviso y si alguien mas se quiere unir a este proyecto bienvenido sea.
posdata: alguien maneja el canvas de HTML5?
 
Última edición por un moderador:

DeletedUser

Guest
No de nada! yo no he manejado canvas así que con eso no podré ayudarte.

Con wampserver no deberías tener ningún problema, pero si es así me avisas. Ahora, cuando uses un hosting puede que no te funcione correctamente la sentencia LOAD DATA... ya que en los hosting suelen tener un servidor para la web y otro servidor para la base de datos, y la sentencia Sql que se ejecuta en el servidor de la base de datos intentará tener acceso al archivo, pero no está en ese servidor así que no lo encontrará. Esto tienes que verlo con el soporte de tu hosting, para que te diga como debes hacer el acceso al otro servidor. Pero para ir probando con wampserver no tendrás problemas ya que tanto web como base de datos están alojados en el mismo servidor.
 

DeletedUser114

Guest
como lo predecias tengo problemas con el LOAD DATA para cargar los archivos ya me comunique con el soporte del hosting haber que me dicen para este problema.

compis alguna otra idea para solucionar el problema porque por lo que es un host gratuito dudo mucho que se tomen la molestia de contestarme.
 
Última edición por un moderador:

DeletedUser64

Guest
posdata: alguien maneja el canvas de HTML5?
yo hice un pequeño juego en canvas que tienes una unidad y la mueves con las flechitas si la seleccionas con el mouse, y también podés disparar a otras 2 unidades (que están estáticas jeje), no creo que lo maneje lo suficiente para ayudarte, yo ando aprendiendo por mi cuenta y mejorando el minijuego poco a poco
 

DeletedUser

Guest
como lo predecias tengo problemas con el LOAD DATA para cargar los archivos ya me comunique con el soporte del hosting haber que me dicen para este problema.

compis alguna otra idea para solucionar el problema porque por lo que es un host gratuito dudo mucho que se tomen la molestia de contestarme.

No suelen tardar más de dos días en contestar, por eso hay que ser muy precisos con el problema.

A ver, supongo que en wampserver no te dió ningún problema no? Si es así, el único problema que tendrías es importar la base de datos en el hosting gratuito. Si quieres ir probando yo diría que hagas la importación manual (bueno casi), me refiero a que tomes el archivo de texto y lo leas linea a linea y por cada línea hagas un INSERT, recuerda la estructura del archivo, tendrás que hacer un split de la línea para obtener los campos correspondientes. Esto es solo para probar y empezar a desarrollar la web, porque como veras no es nada eficiente y de hecho (y esto tenelo muy encuenta) este método aumenta exponencialmente la cantidad de sentencias sql ejecutadas y por ende los recursos del servidor, y esto es algo restringido en un hosting gratuito. Te pueden llegar a cancelar la cuenta si abusas del servidor. Así que puedes hacer esto pero para ejecutarlo solo manualmente cuando actualices la base de datos, pero no bajo un script en Cron ejecutandose a una frecuencia.

No me acuerdo si hay otro método de importación desde archivo con MySql, pero supongo que vas a llegar al mismo problema, por ahora puedes hacer como te digo mientras le buscas una solución el problema del hosting.
 

DeletedUser114

Guest
bueno ya lo solucione la importación ahora si a seguir con el desarrollo de la pagina.
aunque lo hize tal como lo mencionaste y eso que fue antes de leer tu respuesta estuve googleando ayer y hoy para poder solucionarlo y negus lei creo que la única forma es como lo hice.
 
Estado
No está abierto para más respuestas.
Arriba