HRCodWar - Instalación de la web

HRCodWar puede funcionar como una campaña independiente o con ayuda de ésta gestión web, esto último lo hace todo mas cómodo.

Mediante esta web que estas viendo programada en PHP, los pilotos de cada bando y sus comandantes pueden comprobar como se encuentra el frente y toda la información relacionada con la batalla, accediendo a Campaña aquí e introduciendo su clave correspondiente, pero ¿como funciona realmente?, ¿como se instala este proyecto web?, ¿como se comunica con la máquina que esta lanzando la misión?... veamos.

INSTALACIÓN WEB

¡ATENCIÓN! Se suponen unos conocimientos mínimos de PHP y del funcionamiento general de un servidor web como Apache.

Se hace notar, que la web nació como una ayuda circustancial al proyecto de la campaña y finalmente se ha convertido en algo básico. Aunque la campaña podría funcionar sin el soporte web, la comodidad que otorga el poder estudiar visualente el frente y programas las órdenes lo han convertido en una herramienta casi indispensable. Por ello, por que nació como una una herramienta "sencilla" sin mayores pretensiones y desarrollada en un tiempo record, no esta todo lo completa que debería, y su desarrollo como "web" deja bastante de desear, programada con 2 o 3 módulos de php sin frameworks... es la vergüenza de cualquier profesional en el desarrollo web :)

Lo primero es descargar la web de la sección de descargas aquí y descomprimirla en tu directorio raíz de htdocs local (si dispones de una instalación apache+php local) o en cualquier sitio para que entiendas lo que viene a continuación.

Una vez descomprimido, dirígete al directorio raíz del proyecto y verás un fichero de configuración que se llama:

config.inc.php

Ábrelo y verás una serie variables que se usan globales en todo el proyecto, las que nos interesan y que debes modificar para adaptarlo a tus necesidades son:

  • $CFG_LANGS Un array con los idiomas disponibles y sus nombres.
  • $CFG_LANG Cadena con el llave del idioma por defecto.
  • $CFG_URL_HOME URL absoluta donde se encuentra alojado el proyecto, incluyendo la barra del final, ej: http://www.midominio.com/hrcodwar/
  • $CFG_CLAVE_ACEPTA_ENVIOS La clave que servirá para comunicar el servidor del juego IL2 Cliff of Dover y esta web. Deberá ser la misma que la web_script_clave de su conf.ini.
  • $CFG_DIR_DATOS_BATALLA Esta es la ruta relativa al directorio donde se almacenarán los datos sensibles de la campaña en curso. Es muy importante notar que el directorio no debería estar al alcance via http ya que manipulando la url podría llegar a descargar los ficheros y ver los datos del enemigo.
    Por ello, se recomienda que esté fuera del raíz htdocs, con un "../battledata" podría servir. Sin embargo, a veces no podemos tener acceso al directorio anterior al htdocs, por lo que la solución (aunque sea una chapuza digna de fusilamiento) pasa por ponerle un nombre muy difícil de adivinar, de tal forma que a nadie se le ocurra poder crear esta url:
    http://www.midominio.com/hrcodwar/secretdirectorypleasenotaccessoriwillkillyouandyourfamily/0_bases.json
  • $CFG_DIR_ORDENES Es la ruta relativa al directorio donde se almacenan las órdenes programadas vía web. Evidentemente, deben de aplicarse las mismas consideraciones de seguridad que en el caso anterior.
  • $CFG_CLAVE_ROOT Es la clave del administrador general, es el que puede acceder a la sección Configuración de la Campaña aquí, y cambiar las claves de acceso al mapa estratégico tanto para tropa como para comandantes.
  • $CFG_MAPA Es el nombre de la imagen almacenada en el directorio del proyecto web /mapas, que hará de fondo para el mapa estratégico.
  • $CFG_MAPA_COORD_INI_X Coordenadas iniciales "eje x" de la zona de guerra, es el valor resaltado de la linea de BattleArea en el hrcodwar.mis
    ej: BattleArea 200000 180000 130000 90000 2500
  • $CFG_MAPA_COORD_INI_Y Coordenadas iniciales "eje y" de la zona de guerra, es el valor resaltado en:
    ej: BattleArea 200000 180000 130000 90000 2500
  • $CFG_MAPA_COORD_FIN_X Coordenadas finales "eje x" de la zona de guerra, es la suma de CFG_MAPA_COORD_INI_X y el valor resaltado en:
    ej: BattleArea 200000 180000 130000 90000 2500
  • $CFG_MAPA_COORD_FIN_Y Coordenadas finales "eje y" de la zona de guerra, es la suma de CFG_MAPA_COORD_INI_Y y el valor resaltado en:
    ej: BattleArea 200000 180000 130000 90000 2500
  • $CFG_MAPA_LONG_SECTOR Es la longitud del sector definido en la zona de guerra, es el valor:
    ej: BattleArea 200000 180000 130000 90000 2500
  • $CFG_N_CENTRALES_POR_BANDO Nº de centrales eléctricas obligatorias por bando. Deberá coincidir con numero_centrales en el conf.ini.
  • $CFG_N_TURNOS_REPARACION_FABRICAS Turnos necesarios en reconstruir fabricas y astilleros. Deberá coincidir con reconstruccion_fabricas_jornadas en el conf.ini.
  • $CFG_N_TURNOS_REPARACION_REFINERIAS Turnos necesarios en reconstruir refinerías, es reconstruccion_refinerias_jornadas.
  • $CFG_N_TURNOS_REPARACION_CENTRALES Turnos necesarios en reconstruir centrales eléctricas, es reconstruccion_centrales_jornadas.
  • $CFG_PRECIO_PUNTO_CREACION Valor de referencia de compra por los mercados internacioales del punto de creación, es mercado_reputacion.
  • $CFG_DISTANCIA_UNIDADES_CERCANAS Los metros de visibilidad de cada unidad para hacer recons.

DIRECTORIOS Y PERMISOS DE ACCESO

Como ya has leido, es muy importante la colocación de los directorios $CFG_DIR_DATOS_BATALLA y $CFG_DIR_ORDENES y su denominación. Igualmente es un error clásico en las instalaciones web donde se reciben datos externos, que el lugar donde vayan almacenarse no tenga permisos de escritura para el usuario anónimo, el servidor web (Apache o IIS o el que sea) opera como un usuario anónimo cuando ejecuta el script y salva los datos en el directorio. Por ello debes asegurarte que tengan permisos en el servidor de escritura para todos los usuarios o los scripts fallarán cuando reciban los datos al finalizar la partida.

EL MAPA Y LA ZONA DE GUERRA

Como ya hemos explicado, el mapa que se visualiza en la sección de Campaña en Curso aquí debe almacenarse en el directorio del mismo nombre /mapas, y su nombre almacenado en $CFG_MAPA del config.inc.php. El mapa esta intimamente relacionado al área de batalla definido en el hrcodwar.mis.
La esquina inferior izquierda debe coincidir con el inicio de la zona de guerra fijado por $CFG_MAPA_COORD_INI_X y $CFG_MAPA_COORD_INI_Y, y la esquina superior derecha debe coindicir con $CFG_MAPA_COORD_FIN_X y $CFG_MAPA_COORD_FIN_Y.
Construir el mapa que se visualizará en Campaña en curso es sencillo, se trata de realizar capturas de pantalla en el editor de misiones del juego del área de combate que se ha definido previamente (cuidado! siempre con el mismo nivel de zoom), y despues montarlas con algún programa de edición de imágenes e intentar hacerlas coincidir todas en una sola.
Cuando mas zoom uses mas preciso será luego la representación en pantalla, pero mas complicado será montar el puzzle, tendrás mas capturas. Si usas muy poco zoom las representaciones de las coordenadas en pantalla pueden llegar a ser muy aproximadas. Desgraciadamente, no te podemos indicar que zoom debes usar, ya que dependiendo del área de combate elegida, el mapa puede ser mas o menos extenso, así que dependerá del tamaño a cubrir en cada ocasión.
Sin duda, lo mas importante, uses el zoom que uses para realizar las capturas del puzzle, es que la esquina inferior izquierda y la esquina superior derecha empiecen y acaben JUSTO en las coordenadas anteriormente descritas, de lo contrario las unidades y las entidades como bases, fábricas, etc... aparecerán todas "movidas de su sitio", debido a ese posible error en la captura.

LOS DATOS DEL SISTEMA

En la estructura de directorios verás uno que se llama /datos_sistema. En él, deberían almacenarse los mismos datos que se encuentran en la máquina servidor del juego en el directorio del mismo nombre (missions/hrcodwar/datos_sistema). Estos son los ficheros de configuración json que junto con el conf.ini se usan para gobernar las condiciones y el funcionamiento de la campaña. Cualquier condición que se cambie en el transcurso de la campaña debe reflejarse aquí también, ya que de lo contrario, la web dará información y condiciones falsas.

CLAVES Y ACCESOS

Las claves están almacenadas en un fichero tipo .ini en $CFG_DIR_DATOS_BATALLA, llamado claves.ini, si listas el directorio lo verás y si lo abres te encontrarás algo como esto:

; Password to web access
CFG_PASS_ALIADO = 
CFG_PASS_EJE = 
CFG_PASS_ALIADO_COMANDANTE = 
CFG_PASS_EJE_COMANDANTE = 
Las variables significan:
  • $CFG_PASS_ALIADO Clave única para el acceso de la tropa al bando aliado.
  • $CFG_PASS_EJE Clave única para el acceso de la tropa al bando del eje.
  • $CFG_PASS_ALIADO_COMANDANTE Las claves para la comandancia aliada de cada escuadrón, deben llevar el TAG del escuadrón primero para identificarlas con cada comandante de cada escuadrón y deben ir separadas por comas, por ej. supongamos 2 escuadrones volando de aliado con los tags SQUAD1 y SQUAD2, las claves serían: SQUAD1_clave1, SQUAD2_clave2
  • $CFG_PASS_EJE_COMANDANTE Idem para el eje.
Como se ha leido con anterioridad, estas claves se editan desde Configuración de la Campaña aquí, a la cual se accede con la clave almacenada en $CFG_CLAVE_ROOT del config.inc.php.

Las claves se almacenan y viajan por las peticiones en texto plano y es que la seguridad en ese aspecto es prácticamente nula, quizás en futuras revisiones del proyecto se incluya encriptaciones.

COMUNICACIÓN CON EL SERVER

La campaña se comunica con la web en 2 ocasiones, una cuanda se carga la misión y otra vez cuando acaba, veamos que ocurre en cada caso.

  • Iniciando la batalla: La máquina servidor de la partida, interroga a un script de la web si hay o no órdenes pendientes de ejecutar, de cada escuadrón, si las hay, se las descarga y las ejecuta en lote una detrás de otra, de tal forma que cuando los pilotos entran a volar la pila de órdenes de cada escuadrón ya ha sido ejecutada o esta siendo ejecutada.
  • Finalizando la batalla: Cuando acaba la batalla con un "battle stop" por cualquier circunstancia, ciclo normal de la partida o finalización manual, el server intenta comunicarse con la web a través del mismo script y le envia los resultados de la batalla. El script los recoge y "machaca" los datos anteriores mostrando los resultados actualizados, por lo tanto no hay históricos y solo se muestra los de la última partida.

Para que la máquina que hace de server y esta web puedan comunicarse hay que configurar las siguientes variables:

  • En la web: Volvemos al fichero config.inc.php y editamos la variable $CFG_CLAVE_ACEPTA_ENVIOS almacenando una clave que será comprobada en cada operación.
  • En el server HRCodWar: Editamos su conf.ini y editamos las 3 variables en la sección [GENERAL] que gobiernan esta comunicación:

    web_activa_soporte = true
    web_script_url = http://[ url al proyecto web ]/ajax/services.php?a=datos
    web_script_clave= la misma clave que se almacena en $CFG_CLAVE_ACEPTA_ENVIOS

Y ya esta, si en cualquier momento fallara la comunicación con el server la partida continuaría sin mas, simplemente no se recogerían las órdenes pendientes ni se enviaría automáticamente los datos al final de la partida, sin embargo habría una forma manual de actualizarlos.

Al acabar la batalla, la campaña salva los datos a enviar a la web en /datos_batalla/web, un administrador web podría subir estos datos manualmente mediante FTP del proyecto en su directorio de trabajo, y sería el mismo resultado, ¿fácil no? :)