1 jul 2015

Descarga y Manual de uso de TerrariaServer GUI


TerrariaServerGUI es una interfaz gráfica basada en Java que permitirá a los usuarios (principalmente a aquellos que jueguen a Terraria y/o monten servidores público y/o privados del juego) gestionar de forma fácil e intuitiva su propio servidor. Esta herramienta, no solo permite realizar las tareas más comunes de gestión, sino que además permite programar mensajes automáticos, ejecutar comandos "in game" e incluso publicar online el estado del servidor. Estad atentos, muy pronto estará disponible la descarga gratuíta de la misma así como la funcionalidad que traerá consigo y como utilizarlo.

ES COMPATIBLE CON LA VERSIÓN 1.3.0.2 (1/7/2015)

Pending:
Dejo pendiente la actualización de la aplicación para que incluya soporte para las nuevas opciones de configuración, como la dificultad experto, el uso de Steam y otras cosas que aún debo comprobar. En cualquier caso, he probado a ver si generaba los nuevos mundos (OJO! No son compatibles con versiones anteriores de Terraria!) y en principio todo funciona bien. Tambien tengo que darle una revisión al código para ver si puedo agregar nuevas funciones o mejorar algo.

Change Log:
v1.0.1.1:
-Ahora, al programar el apagado del servidor, se muestran mensajes cada minuto cuando quedan 5 (es decir, aparecerá el aviso a los 5, 4, 3, 2 y 1 minutos). Antes solo se mostraban cuando quedaban 5 y 1.
-Añadidos dos nuevos comandos "In Game": /setTimer y /timer, para poder configurar y activar el temporizador de auto-apagado (ver detalles en sección 5.6).
v1.0.1.0:
-Incluída versión .exe que permite ejecutar con privilegios de administrador.
-Corregido un bug en el analizador de mensajes que hacía que al escribir en la consola say, kick, ban u otros comandos finalizase inesperadamente.
-Corregido problema con las rutas de worldsBackup, que en ciertos casos impedía iniciar el servidor y no mostraba código de error.
-Eliminadas las tildes de los mensajes del temporizador de auto-apagado, ya que el juego no interpreta bien esos caracteres.
-Añadida comprobación automática y manual de actualizaciones con posibilidad de descargarla directamente del repositorio.
v1.0.0.3:
-Añadida internacionalización (español e inglés).
-Ahora los baneos se guardan en un fichero externo junto al .jar.
-Corregidos los mensajes de aviso de cierre del servidor que no mostraban el tiempo correcto.
-Ahora se permite establecer como tiempo mínimo 1 minuto para el temporizador.
-Añadido al javascript la posibilidad de mostrar la versión del servidor.



Manual de Usuario:

CONSEJO: Usa Control+F para buscar la entrada del índice.


Índice:


1. Introducción
2. Requisitos
3. Descargas
4. Instalación y ejecución:
    4.1. Solución de problemas: no puedo ejecutar el .jar
5. Funcionalidad:
    5.1. Configurar el servidor. Uso de las herramientas de testeo.
    5.2. Mensajes del día (M.O.T.D.)
    5.3. Iniciar/Finalizar el servidor
    5.4. Gestionar a los jugadores (expulsar y banear)
    5.5. Ejecutar comandos manualmente en el servidor
    5.6. Ejecutar comandos "In Game" (desde el chat del juego)
    5.7. Programar la emisión de mensajes publicitarios
    5.8. Programar auto-apagado del servidor
    5.9. Programar auto-generación del Javascript
6. Tareas avanzadas (usando Dropbox):
    6.1. Publicar el estado del servidor en una página web (ejemplos HTML y JS)
    6.2. Compartir el host de un servidor entre varios usuarios
7. Problemas conocidos y soluciones propuestas


1. Introducción

TerrariaServerGUI es mi aplicación Java más reciente. Tiene como objetivo facilitar, a los jugadores de Terraria, el poder montar y publicar sus propios servidores del juego, así como también gestionarlos de una manera fácil, rápida y accesible gracias a la interfaz gráfica que lo implementa. También los provee de nuevas funcionalidades que de serie no traen: como la posibilidad de cerrarlos en un tiempo límite o la publicación automática de mensajes publicitarios.

Estas son solo algunas pinceladas de su potencia y te invito a que pruebes de forma gratuita esta sencilla herramienta.


2. Requisitos

Debes disponer de los siguientes elementos para que todo funcione correctamente:
-S.O. Windows (el servidor solo funciona en este)
-Librerias .NET Framework y XNA (incluídas con Terraria, las usa el servidor)
-Java Runtime Environment (JRE) actualizado (requisito para que funcione la interfaz)
-Conexión a internet (si se desea que el servidor sea público)

Los enlaces a las librerías y la aplicación los encontraréis en la sección "Descargas" de esta entrada.


3. Descargas

Puedes conseguir todas las librerías y material necesario de los siguientes enlaces. Descarga solo aquello que necesites o de lo que tengas dudas de si lo tienes o no instalado.

Op. A: TerrariaServerGUI (exe)https://drive.google.com/file/d/0B3BQx7qHw1SadENJel83QkhTNUU
Op. B: TerrariaServerGUI (jar)https://dl.dropboxusercontent.com/.../TerrariaServerGUI.jar
TerrariaServer - http://www.terraria.org/index2.html
J.R.E. de Java - http://www.java.com/es/download/
.NET Framework 4 - http://www.microsoft.com/es-es/download/details.aspx?id=17851
XNA 4 Redistributable - http://www.microsoft.com/en-us/download/details.aspx?id=20914

Como mínimo te será necesario tener las JRE actualizadas y el ejecutable TerrariaServer.exe que se incluye con el juego y que será indispensable para poder gestionar tus servidores de juego mediante la interfaz.

NOTA: se ha añadido la versión ejecutable (.exe) de TerrariaServerGUI. Si tienes problemas al ejecutar los .jar, puedes optar por descargar la versión .exe. Esta versión siempre será la misma que la de los .jar, pero tiene como finalidad facilitar la labor de ejecución y corregir problemas que surjen al lanzar el jar en ciertos PCs.

4. Instalación y ejecución

TerrariaServerGUI esta creada en Java, por tanto no requiere mas que descargar la aplicación y ejecutarla haciendo doble click sobre el fichero .jar. Es necesario tener Java instalado en la máquina para que funcione.

El resultado será una ventana como la siguiente:


4.1. Solución de problemas: no puedo ejecutar el .jar
A menudo, instalamos ciertas aplicaciones que sobreescriben el programa con el que ejecutamos ciertas extensiones de archivos. Los ficheros .JAR son archivos comprimidos, como el RAR o el ZIP y al instalar estos descompresores, es posible que los JAR tambien se comporten como archivos comprimidos al hacer doble click sobre ellos.

Para que al hacer doble click sobre la interfaz, esta no se abra como comprimido, sino como una aplicación ejecutable, debemos configurar nuestro S.O. para tal efecto.

Para ello:
-Hacemos click derecho sobre TerrariaServerGUI.jar
-Pinchamos sobre Propiedades.
-En la sección "Abrir con:" pinchamos sobre el botón "Cambiar".
-Buscamos la localización "C:\Program Files\Java\jre7\bin\" (tanto 32 como 64bits)
-Seleccionamos el programa "javaw.exe".
-Marcamos la casilla de "Abrir siempre con ese programa".
-Aceptamos todo.

El icono cambiará al de la taza de café de Java. Si ahora le hacemos doble click, debería salir la interfaz del programa, como se mostró en la imagen anterior.

Como alternativa puedes descargar TerrariaServerGUI.exe, que además proporciona la posibilidad de ejecutar con derechos de administrador (útil si el servidor esta guardado en carpetas externas al Home).

5. Funcionalidad:

5.1. Configurar el servidor. Uso de las herramientas de testeo.
La configuración del servidor debe realizarse antes de iniciarlo desde la pestaña Configuración.


Podrán verse distintas opciones, todas ellas son las mismas que se pueden utilizar al iniciar TerrariaServer.exe, con la salvedad de que no es necesario ejecutar comandos o escribir ningún fichero, tu eliges que datos añadir!

Los campos de la izquierda permited escoger la ruta del ejecutable TerrariaServer.exe, sin él, el programa no puede crear servidores. También puedes personalizar el MOTD manualmente o de forma automática (ver sección 5.2 sobre los M.O.T.Ds). El resto de campos son, por ahora, predefinidos y usan rutas relativas. Esto significa que la carpeta "worlds" (por ejemplo) estará en el mismo directorio donde se ejecute TerrariaServerGUI.jar. Lo he hecho así para poder usar el sistema de compartición de host vía dropbox.
La carpeta de "worldsBackup" tiene lugar en tu carpeta personal "C:\Users\<tu_usuario>". Cuando ejecutes el servidor, los mundos se crearán y actualizarán en dicha carpeta, y cuando lo finalices, serán movidos a la carpeta "worlds". Esto evita que si se ejecuta dentro de una carpeta compartida en dropbox, actualice continuamente los datos en la red, aumentando el lag a los jugadores.

Cada vez que modifiques los datos, deberás pinchar en "Guardar", sino no te dejará iniciar el servidor.

Si no estas seguro de si tu partida será visible al resto de jugadores, en el menú "Herramientas" dispones de 2 tests. El primero de permite ver tu IP pública (la que es visible desde internet). La otra te permite probar un puerto o lista de puertos.


Simplemente, haz una lista separada por comas con el nº de puerto a probar y presiona Enter. El programa irá una a una viendo si es o no visible desde el exterior de tu red local. Si te sale un mensaje de OK, entonces puedes usar ese puerto en la pestaña de "Configuración" para montar tu servidor público.

NOTA: si al ejecutar el servidor recibes una excepción en la consola de que no se ha podido iniciar porque el socket está ocupado, cierra el programa y vuelve a ejecutarlo. Hay veces que sucede si por alguna razón, al chequeo no se le da cierto margen de tiempo para que cierre los sockets de los puertos y se lanza el servidor muy seguido. Tened cuidado con eso!


5.2. Mensajes del día (M.O.T.D.)
Los mensajes del día o MOTD son frases muy sencillas, generalmente graciosas o de bienvenida a los nuevos jugadores. Aparece cuando uno se acaba de conectar a la partida. Puedes configurarlos de 3 formas:
-Sin hacer nada: por defecto aparecerá "Server powered by <tu>".
-Manualmente: editando el cuadro de texto de la pestaña "Configuración".
-Aleatoriamente: se escoge la frase de forma aleatoria de un fichero.

Para el modo aleatorio, crea un archivo de texto junto al fichero "TerrariaServerGUI.jar" llamado "motds.txt" (ver ejemplo):


Sabrás que esta bien colocado si cada vez que inicias el programa (que no el servidor) aparece en el cuadro de MOTD una frase diferente.


5.3. Iniciar/Finalizar el servidor
Para iniciar el servidor, en la pestaña inicial "Servidor" dispones de un apartado dedicado al arranque y finalización del servidor. 



Solo se permite una instancia del servidor, por esa razón cuando pinches sobre "Iniciar" la opción se deshabilitará y se activarán el resto. 
Para finalizarlo, pincha sobre "exit-nosave" o "exit". Como ya os habréis dado cuenta aquellos más duchos en el tema, los botones tienen el mismo nombre que el comando al que hacen referencia. De esta forma, exit-nosave finaliza el server sin guardar el mundo y exit, lo finaliza guardándolo. También, si queréis guardarlo durante la partida, pinchad sobre "save". Cualquier resultado se mostrará sobre la consola de salida.


5.4. Gestionar a los jugadores (expulsar y banear)
La gestión de los jugadores se realiza desde un listado en la pestaña "Servidor".


Dicho listado divide entre los jugadores actualmente jugando y los que han sido baneados (en rojo). Al banear, el programa apunta el nombre del jugador y su IP de conexión, de forma que no pueda entrar con ese mismo personaje (ni nadie con su mismo nombre) ni tampoco con la misma IP. No evita del todo que la gente con malas intenciones acabe entrando, pero al menos se ponen la mayor cantidad de traba posibles con tal de mejorar la experiencia de juego al resto. Por supuesto, podréis kickear (echar) a un usuario sin banearlo del todo.

NOTA: la lista de baneados se limpia al cerrar la aplicación. En un futuro quizás haga que sea permanente, según si la gente lo solicita o no.


5.5. Ejecutar comandos manualmente en el servidor
La ejecución de comandos manuales se realiza desde el cuadro de texto "Input" de la pestaña "Servidor". Simplemente escribe tu comando y pulsa Enter o el botón Enviar. Se mostrará en la consola el resultado de tu orden.


5.6. Ejecutar comandos "In Game" (desde el chat del juego)
Esta es posiblemente una de las innovaciones que he agregado al juego de forma indirecta. Ahora podemos ejecutar los comandos más tipicos (de cambio de horario, baneo y kickeo) simplemente escribiéndolo en el chat del juego. Para ello, durante la partida presiona enter y escribe "/comando parametros":


Al presionar Enter para enviar el mensaje, el programa analizará el comando y lo ejecutará solo si estas conectado desde la ip 127.0.0.1 (un mecanismo de seguridad que impide que cualquier otro que no sea el host envie comandos). Ten cuidado de no banearte a ti mismo! xD

Comandos disponibles:
/kick <personaje>
/ban <personaje>
/unban <personaje>
/dusk
/noon
/midnight
/dawn
/settle
/setTimer <minutos>
/timer (start|stop)


5.7. Programar la emisión de mensajes publicitarios
Al igual que en otros juegos, he añadido la posibilidad de que el servidor mande un mensaje cada cierto tiempo. Esto se puede configurar antes de iniciar el servidor desde la pestaña "Avanzado".


Para ello, habilita los mensajes del servidor, escribe el mensaje que quieres que envíe a todos los jugadores conectados y el tiempo entre mensajes, que va desde 15 minutos hasta 2 horas. Cuando inicies el servidor, tras pasar los X minutos que hayas escogido se mostrará un mensaje del servidor con el contenido que hayas puesto. Es una buena forma de publicitar webs, usuarios o lo que sea!


5.8. Programar auto-apagado del servidor
Esta opción de la pestaña "Avanzado" solo esta disponible cuando el servidor está online.


Una vez lanzado, puedes programar el auto-apagado del mismo. El tiempo lo eliges tu (en minutos) y cuanto más se aproxime el momento de cierre, más a menudo aparecerá el mensaje de que el servidor finalizará en X tiempo. Cuando el contador llegue a 0, el servidor guardará el mundo y se cerrará. El programa segurá abierto.


5.9. Programar auto-generación del Javascript
Otra funcionalidad añadida al programa es la posibilidad de generar un sencillo código javascript que permita a los host publicar su servidor en una web. La generación de este código se configura antes de lanzar el servidor en la pestaña "Avanzado".


Simplemente, habilita la opción, escoge la ruta donde se guardará el código (por defecto es en la misma donde esta el fichero TerrariaServerGUI.jar) e introduce cada cuantos minutos quieres que se actualice el código. Básicamente, lo que hará el programa será recuperar la información actual del servidor, generar un archivo y guardarlo. En la sección 6.1, se explica el mismo ejemplo que he creado para este blog, que como veréis, arriba a la derecha he añadido un widget donde se muestra el estado del servidor.


6. Tareas avanzadas (usando Dropbox)

6.1. Publicar el estado del servidor en una página web (ejemplos HTML y JS)
La publicación del estado del servidor en mi blog la realizado usando la función javascript que me genera TerrariaServerGUI (ver sección 5.9), un código html muy sencillo que he creado y dropbox.

Para ello, he configurado TerrariaServerGUI para que guarde el javascript en la carpeta compartida de dropbox, de forma que siempre que se actualice sea accesible desde internet . La carpeta en cuestión esta en https://www.dropbox.com/sh/g9i4y14akb2m9de/5SkkoTApbE. En ese enlace se muestra el javascript "statusServer.js". 

Lo que he hecho ha sido copiar el siguiente código HTML https://dl.dropboxusercontent.com/u/62477074/HTML.txt a la zona de mi web donde me interesaba, que para mi caso era crear un nuevo widget de tipo HTML/Javascript y simplemente escribir los datos que quería que se mostrasen (es decir, pegar el código anterior).

NOTA: el código HTML tiene en la primera línea una ruta web donde se indica donde buscar el código Javascript. La ruta que se muestra es la de mi propio Javascript, por lo que deberéis sustituirla por la vuestra (la ruta se puede obtener haciendo click derecho sobre el fichero statusServer.js y pinchando sobre la opción "Compartir enlace a dropbox").

Si deseas realizar tu propio código HTML, a continuación están las funciones Javascript así como el tipo de dato que devuelven y para que sirven:

String getHostName(): devuelve el nombre de la persona que hace de host (su username de Windows).
String getServerVersion(): devuelve la versión del servidor. Si no coincide con la de los clientes, no podrán conectarse.
String getServerIP(): devuelve la IP pública del servidor.
String getServerPort(): devuelve el puerto de conexión al servidor.
String getTimeOnline(): devuelve el tiempo que lleva online el servidor.
String getWorldName(): devuelve el nombre del mundo.
Integer getMaxPlayers(): devuelve la cantidad máxima de jugadores permitidos.
Integer getNumberOfPlayers(): devuelve el nº de jugadores actualmente jugando.
Boolean hasPassword(): devuelve si el servidor tiene contraseña (no la publica) o no.
Boolean isOnline(): devuelve si el servidor esta online o no.
Boolean isSecured(): devuelve si tiene seguro anti-trampas o no.
List_of_Objetcs getPlayersList(): devuelve la lista de jugadores actualmente jugando.

Ante cualquier duda o ayuda que necesitéis sobre el código HTML o Javascript, no dudéis en consultármelas ;)


6.2. Compartir el host de un servidor entre varios usuarios
Este mecanismo es el que actualmente utilizo junto a mis amigos para en caso de que uno no pueda hostear, el resto pueda seguir jugando al mismo mundo compartido. Para ello, es necesario que todos aquellos que vayan a hacer de host, instalen dropbox y compartan la misma carpeta. Recomiendo seguir la siguiente estructura de archivos en esa carpeta:

Una vez compartida esa carpeta y que todos la hayan sincronizado (véase el tick verde junto a cada fichero), basta con ejecutar el .jar y configurar el programa para que use el mismo nombre del mundo (si se llama world1, todos deben configurarlo para que cargue el world1, para ello basta con editar el cuadro de texto del nombre en la pestaña de "Configuración").

El programa además evitará que dos usuarios ejecuten a la vez el servidor, dando un aviso al segundo indicando que el otro ya lo está ejecutando y proporcionándoles los datos de acceso (si tiene pass, deberá pedírsela).

NOTA: si por algún casual el host cierra de forma abrupta el servidor (por ejemplo se le apaga el PC de golpe sin posibilidad de cerrar manualmente el servidor), notaréis que se ha creado un fichero en la misma carpeta llamada online.txt. Borradla o no os dejará ejecutar el servidor!


7. Problemas conocidos y soluciones propuestas

Esta sección queda reservada para cualquier problema que surja con el programa. Si tiene solución (o incluso si no la tiene), será publicada aquí. Recomiendo mirar los posibles problemas que existan antes de postearlas.

Problema al iniciar el servidor: no arranca tras configurar la ruta de TerrariaServer.exe
Se ha comprobado (gracias a $|_!D3R) que al configurar la ruta de TerrariaServer.exe en la pestaña de Configuración, el .jar no consigue arrancarlo, y no se muestra mensaje de error ni nada.

También puede deberse, según he comprobado, a los privilegios con que se ejecuta el programa. Si usas Vista o Win7, recomiendo descargar la versión .exe y ejecutarla con Privilegios de Administración (click derecho y la opción con el escudo de windows). Esto solo es necesario en una carpeta de solo lectura.

Opción A: Una solución consiste en ejecutar el .jar desde una ventana de consola CMD, usando el comando "java -jar TerrariaServerGUI.jar", que por lo visto no le afecta igual el nombre de las rutas.

Solución: La versión 1.0.1.0 ejecutable (.exe) soluciona cualquier problema que pudiese dar el programa al iniciar el servidor, y si lo diese, ejecutar este con los máximos privilegios.


Problema al cerrar el servidor que no guarda el mundo (desaparece)
Esto sucede cuando se ejecuta TerrariaServerGUI desde una ruta en la que no tiene derechos de escritura. El servidor lo inicia correctamente, genera el mundo y permite conectarte, pero al cerrar, simplemente el mundo no puedo copiarlo y desaparece en el olvido.

Solución A: dar derechos de escritura sobre la carpeta donde esta TerrariaServerGUI, para ello haced click derecho sobre la carpeta y eliminar el tick de la opción Solo Lectura.

Solución B: descargar la versión ejecutable .exe, click derecho sobre la aplicación y "Ejecutar como administrador".


El servidor kickea a usuarios por "spam projectile"
Este bug no es cosa de TerrariaServerGUI (en la consola se muestra la razón). En los foros de TerrariaOnline (oficial) se han reportado casos en los que esto sucede. La razón viene causada por el sistema anti-trampas que implementa el servidor, y que llega a expulsar a los usuarios por razones como usar un arma automática con munición que genera muchos sprites (minishark+crystal bullets).

Pueden evitarse esta clase de kickeos desactivando el sistema anti-trampas, aunque en ciertas ocasiones sigue originándose. Así que hasta que Re-Logic mencione nada, recomiendo no usar esas combinaciones de armas-munición durante las sesiones online.

No hay comentarios:

Publicar un comentario