Jump to content

Sire

Arquitecto
  • Mensajes

    185
  • Ingresó

  • Última visita

  • Días ganados

    73
  • Invited by

    VictoriSV

Todo lo publicado por Sire

  1. Un esquema sencillo: Las cruces representan aviones. El IV Gruppe era discrecional. Todos los Gruppe tienen un esquema similar. Se ha simplificado el esquema.
  2. ¿Todavía no había abierto unas notas de diseño sobre Anzio? Anzio es un escenario excelente porque en poco espacio existían dos frentes: La Línea Gustav en la que empujaban los aliados y La Cabeza de Playa en la que empujaban los alemanes. Una buena y breve descripción del escenario la tenéins (en inglés) aquí: https://www.nationalww2museum.org/war/articles/last-ride-anzio-german-counterattacks-february-1944
  3. A raíz del artículo del compañero @Luftmanu conocimos cómo los alemanes se vieron abocados a mediados de 1943 a realizar caza nocturna "a ojo" (llamada Wilde Sau) una vez que sus radares fueron inutilizados por la utilización de una contramedida llamada Window. Ni más ni menos que el primer uso masivo de chaff: tiras de aluminio cortadas a una longitud determinada, arrojadas al aire para formar enormes nubes de efecto barrera al radar. (Wilde Sau es un interesantísimo y divertido escenario de juego que estoy desarrollando para IL-2. Puedes ver más sobre ello en las notas de desarrollo). Si somos curiosos, eso nos hace pensar inevitablemente en el antes y después de ese momento, es decir el uso del radar y los procedimientos para la interceptación por radar alemana. Este artículo pretende ser una introducción simplificada al asunto. Antecedentes. Los desarrollos científicos en la guerra van marcados de las necesidades de los frentes y así, tras la caída del Francia en junio del 40, y hasta la invasión de la URSS en junio del 41, Gran Bretaña se quedará sola frente a Alemania durante un año entero. Los británicos, junto con los alemanes, tenían los ingenieros más avanzados de la época. Geográficamente Gran Bretaña cuenta con una excelente barrera natural que es el Canal de La Mancha y frente a los avances tecnológicos que reducían esa ventaja, los británicos estuvieron espabilados en preparar y mantener sus defensas: la poderosa Royal Navy para el mar, un buen contingente de cazas para el aire y una fantástica red de radares y centros de control llamada Chain Home. El desarrollo de esta tecnología, su construcción y el desarrollo de los procedimientos de comunicación, seguimiento e interceptación, no se improvisan de la noche a la mañana y fue la verdadera arma secreta que salvo a Gran Bretaña de la derrota. Los alemanes no tuvieron la fuerza aérea suficiente para doblegar tal resistencia y así tuvieron que cambiar de objetivo. A partir de ese momento Alemania pasó a la defensiva en el frente occidental, empezando prácticamente de cero con su red de defensa aérea, en una zona mucho más amplia, contra un enemigo sediento de venganza y posteriormente la entrada de un aliado todopoderoso, los EEUU. La Chain Home merece su propio artículo aparte, pues estableció todos los procedimientos y denominaciones que todavía hoy se utilizan en el empleo de radares, demostración de lo acertadas que fueron todas su previsiones. Por otro lado, si Alemania hubiera ganado la guerra posiblemente estaríamos utilizando sus desarrollos así que, hay muchos motivos para conocer más sobre los radares alemanes, ¿verdad? Cronología simplificada Mejor si empezamos estableciendo las diferentes etapas de la defensa aérea alemana, la Defensa del Reich como ellos mismos denominaron. De manera muy simplificada tenemos, considerando "mediados de" los siguientes años: 1940 Línea Kammhuber 1941 Evolución a células Himmelbett 1942 Radar embarcado Lichtenstein 1943 Los británicos ciegan los radares con Window dando lugar a la Wilde Sau 1944 Los alemanes recuperan sus radares y aplican Zahme Sau La Línea Kammhuber Tras la caída de Francia, desde Julio de 1940 los alemanes empezaron a establecer una línea defensiva antiaérea para impedir las incursiones desde Inglaterra. Esta línea se conoció con el nombre de su desarrollador, y tenía forma de línea, así el nombre resultó evidente, Línea Kammhuber que como todos los sistemas de la SGM tuvo su desarrollo y su lucha de medidas y contramedidas. La línea funcionaba como una muralla dividida en secciones de unos 20 km de ancho por 30 km de profundo. Imagen: plano real obtenido por la resistencia belga en el 42 Cada sección o célula funcionaba como un elemento asilado con su dotación de radares y cazas asignados. Tanto el tamaño de la célula como esta forma de funcionar aislada se debía a dos limitaciones tecnológicas de la época: el alcance de los radares Würzburg y Freya la imposibilidad de compartir información en tiempo real entre células Esta muy bien explicado en este breve post del que hago un resumen: Los alemanes dirigían cada célula mediante una instalación de radar compuesta por 2x Würzburg + 1x (o más) Freya. Dentro de caza célula orbitaban a la espera un número muy limitado de cazas que los radares eran capaces de vectorizar (dirigir hacia el objetivo). Freya y Würzburg Freya era un radar de mayor alcance pero de poca "definición" así que se utilizaba como radar de alerta temprana, poniendo sobre aviso a los Würzburg, con un alcance menor pero mucha mayor "definición". Así, mientras un Würzburg seguía a sus propios interceptores, haciendo órbitas en espera en ese momento, el segundo Würzburg capturaba al intruso y lo seguía. Imagen: a la izquierda Würzburg, a la derecha Freya (yo diría que capturados por los americanos a juzgar por los uniformes¿?) Ambos Würzburg empezaban a compartir información, de una forma muy primitiva, en una tabla de trazado llamada Auswertetisch (posteriormente evolucionada a Seeburg), en la que los ángulos y distancias se cruzaban mecánica y manualmente para poder representar el curso de los intrusos y los interceptores. Imagen: en la parte de abajo dos sistemas mecánico-luminosos trasladan azimut y elevación de cada Würburg, mediante un haz de luz a un panel traslúcido en la parte superior, posicionando intruso e interceptor en un mapa. Esas "tripas" operadas manualmente desde abajo, hacían funcionar dos luces en un tablero que representaba un mapa de la zona, con la que un oficial de control podría hacer sus cálculos, pasar la información a centros superiores y dar sus órdenes, no sólo a los cazas (interceptores), también a la antiaérea de su célula, ya que trabajaban en conjunto. Imagen: mesa de trazado con el JLO en el centro (Jägerleitoffizier, Oficial de Guía de Cazas) Himmelbett Hoy estamos acostumbrados a la electrónica con la que, en una única pantalla, se combina toda la información, pero en la SGM hubieron de desarrollarse todos esos principios "a mano" . Si bien, como ya se ha dicho, los británicos fueron los primeros, la evolución de la guerra para los alemanes por la que pasaron a la defensiva, primero les obligó a desarrollar su propio sistema desde cero (en los territorios ocupados), pero después evolucionarlo a niveles muchísimo más altos y sorprendentes. (No dejes de leer este magnífico post del que he extraído varias imágenes y gran información). Primero empezó con la sofisticación del diseño original del la Línea Kammhuber, en la que mediante prueba y error, fueron refinando el tamaño de cada célula, su posición, su equipamiento y los procedimientos de interceptación. Esas célula, llamadas Himmelbett (cama con dosel) fueron equipadas con formidables búnker de control llamadosTigerstelling. Algunos de esos búnkers han sido "rescatados" y son visitables hoy en día, explicándose su funcionamiento: Imagen: Esta está en Holanda y la web para visitarlo está aquí En la imagen vemos dos mesas de trazado, las numeradas con un (3) en el esquema del búnker y también podemos observar dos paneles de seguimiento en la pared (5) de escala mayor cuyo funcionamiento era a base de bombillitas que por detrás una serie de operadores iba pinchando componiendo la imagen de la ruta seguida por los aviones detectados. Imagen: panel de seguimiento, desde atrás, pinchando bombillitas. Imagen: panel de seguimiento (desde delante). Unificando la información de varias instalaciones de radar y con el trazado luminoso en "tiempo real" de un par de incursiones. Medidas y contramedidas. Pero los aliados no estaban parados. Eran muy conscientes del aumento de sus bajas en sus raids nocturnos y por tanto muy conscientes que alguna tecnología de radar se estaba empleando contra ellos. Así que siempre hicieron siempre todo lo posible para reunir información, tanto de escucha radioeléctrica como de espionaje y operaciones de comandos. Os pongo varios ejemplos: Constantemente hacían vuelos de reconocimiento para intentar fotografiar instalaciones sospechosas y evaluarlas. Una vez que los aliados conocieron las existencia y forma de operar de estas células, decidieron concentrar sus bombarderos para hacerlos pasar por una única célula saturando a sus interceptores y dejando al resto de cazas de otras células inútiles. En Febrero del 42, los británicos organizaron un ataque de comandos en Francia, para robar un radar Wüzburg completo y sus operadores alemanes. En el 43 un caza nocturno Junkers Ju 88 R-1 equipado con radar desertó a Escocia entregando su valioso radar embarcado Lichtenstein, lo que condujo a la elaboración de Window y el "apagón" de los radares alemanes por una año y el nacimiento del Wilde Sau. Imagen: radar Lichtenstein Como ya se ha explicado el "apagón" de los radares alemanes por causa de Window llevó a un periodo de desconcierto y desesperación en la que se emplearon tácticas de interceptación nocturna visuales que resultaron mortíferas para ambos bandos, prácticamente insostenibles para los alemanes cuyos recursos eran menores. El advenimiento de una nueva tecnología de radares a mediados del 44 devolvió a la Luftwaffe su capacidad de interceptación de radar, mejorándose de nuevo instalaciones y tácticas. (Los Wilde Sau, por ejemplo, se emplearon como Zahme Sau). Sin embargo el inexorable avance de los aliados por Europa conllevó la perdida del cinturón exterior de defensa compuesto por las instalaciones existentes en los territorios ocupados de Francia y el Benelux, degradando la capacidad de alerta temprana frente a unas cada vez más gigantescas oleadas de bombarderos 24 horas al día. La guerra ya estaba perdida mucho antes de la ocupación de Berlín pero los alemanes continuaron tozudamente dando el máximo hasta la rendición. No dejes de ver: Como añadido final te recomiendo que veas estos dos vídeos: El primero, breve, contemporáneo, es un fragmento de un documental en inglés que describe la versión gigante del Würzburg. Verás como todo lo que te he explicado cuadra. El segundo es una joya, un documental alemán real de 1943 explicando la guerra electrónica que libraban con los británicos. En la primera mitad trata de la guerra aérea y podréis ver en funcionamiento toda la cadena de mando del sistema de interceptación (aunque el vídeo hace incidencia en la parte de captación e interferencia de las señales británicas).
  4. Bien, ya que el post original de aquí se ha convertido en un Artículo, edito el hilo y lo convierto en un recopilatorio adicional de datos sobre la caza dirigida por radar. Esta es la imagen de uno de los proyectores de haz de luz, bajo la mesa Seeberg. Ahí se pueden ver sus escalas y sus palancas y mecanismos de calibración. Otra imagen de una sala de control. Y bueno, he encontrado una especie de manual de procedimientos del JLO (el oficial controlador de intercepción), así que con eso me las tengo que ingeniar para reproducir este tipo de misiones en IL2. Todo está aquí dentro, una página llena a rebosar de información sobre el uso de emisiones electromagnéticas por los alemanes, tierra, mar y aire. El manual está aquí, por si tienes ganas de practicar alemán.
  5. Diferenciar claramente Wilde Sau de Zahme Sau Existe bastante confusión el la literatura entre Wilde Sau y Zahme Sau, porque ambas tácticas las usó el mismo Geschwader (Ala), el JG300. Si tenemos claro que Sau significa jabalí (un animal fiero, de hábitos nocturnos, que busca la comida con el hocico) ya sólo tenemos que fijarnos en el adjetivo (en el alemán va delante). Wilde es salvaje en alemán, y hace referencia a la primera época en la que cazaban "a ojo" porque los radares alemanes estaban inoperativos. Básicamente de mediados del 43 hasta mediados del 44. Tame es doméstico, domesticado, y hace referencia a que un control en tierra los dirige y se emplea el radar. Desde mediados del 44 en adelante, cuando además también se les utiliza (por necesidad) en operaciones diurnas. Y ahora hablemos del Fw-190 Aunque la mayoría de los aparatos utilizados eran Bf-109 G-6, también se utilizaron en menor medida el FW-190. Como con el Messerschmitt se utilizaban las versiones disponibles en el momento. Recordemos que muchos de sus aviones eran prestados de otras unidades que lo volaban por el día. Existen muchas ilustraciones e imágenes de Fw-190, pudiendo dar la falsa impresión de que su uso fue proporcionalmente mucho mayor. También se producen otros errores, por ejemplo (y empezamos a poner algunas imágenes): Si lleva radar NO es Wilde, es Zahme, evidentemente. En cuanto al armamento, al BF-109 se le instalaban barquillas con cañones MG 151, mientras que todas las imágenes muestran a los Fw-190 Sau sin armamento adicional bajos las alas. Eso sí, ambos modelos volaban con el depósito central. Más interesante para la historia de los Fw-190 Sau, en algún momento de la segunda parte del 44, la necesidad de interceptación (nocturna y diurna) fue apremiante y la JadgGeschgwader J300 empezó a sufrir muchos cambios. Reubicaciones, destacamentos, incluso cambios organizativos. Del uso "duro" del 190 Así en el verano de 1944 el segundo Gruppe de la Geschwader (algo así como el segundo escuadrón del ala) fue remodelado para convertirse de caza (jadg) a asalto (sturm), que significaba equiparla con Fw-190 pesadamente armados y blindados, para lanzarlos al combate extremadamente cercano con las formaciones de bombarderos. Coincide también con su utilización cada vez más frecuente también diurna, en cuyas operaciones se combinaban sturm (Fw-190) contra los bombarderos, mientras que los jadg (Bf-109) se dedicaban a los cazas de escolta. Aquí otra cita ilustrativa de la Wikipedia: Teniendo en cuenta las variables de la guerra y las necesidades cualquier combinación podía darse. Los bombarderos (sobre todo diurnos, aunque en menor medida y con otras tácticas) podían ir escoltados (o no) por cazas. Los Sau podían operar de noche o ser solicitados de día y emplearían la mejor opción entre lo disponible y las amenazas conocidas. Y de la mortandad en todas estas unidades. Una constante en todos los casos es que, si bien los Sau derribaban un número relativamente (solo relativamente) significante de bombarderos (y escoltas) las bajas propias siempre eran también muy importantes. Por ejemplo, de esta publicación de Facebook extraemos la siguiente fotografía, presumiblemente de poco antes de finales del 43 (apogeo de Wilde Sau), en la que se ven 4 ases de caza Sau con Goering (en el centro). Sólo Majo Hermann (el creador y director del Wilde y Tame Sau), el más alto a la derecha de G. sobrevivió a la guerra.
  6. Añado una serie de links con información de aparatos disponibles, señalado por @Luftmanu https://www.ww2.dk/air/jagd/jg300.htm https://www.ww2.dk/oob/bestand/jagd/bstjg300.html https://www.ww2.dk/oob/bestand/jagd/bijg300.html https://www.ww2.dk/oob/bestand/jagd/biijg300.html https://www.ww2.dk/oob/bestand/jagd/biiijg300.html https://www.ww2.dk/oob/bestand/jagd/bivjg300.html
  7. He he encontrado un documento que detalla las características técnicas y esquemas de pintura de los Wilde Sau aquí Os recomiendo su lectura. Podréis ver una pequeñas biografías de varios de sus pilotos así como los camuflajes de sus aviones que eran bastante variados, ya que muchas veces eran aviones prestados y por tanto volaban también de día. A mi me llaman la atención estás dos conversiones improvisadas a un esquema nocturno: O esta otra: Nótese como trataban de reducir todos las marcas blancas del camuflaje, de manera muy apresurada. Los Wilde Sau operaron en varios escenarios ya que conforme avanzaba la guerra se les destacaba donde hiciera falta y se les utilizaba de día y noche indistintamente. Este de abajo operó en Rumanía, y por lo tanto se le aplico las marcas del Frente del Este que eran las puntas de las alas amarilla. Estos se fueron a Helsinki a ayudar a los Finlandeses en una serie de tres días de raids soviéticos que sufireron: Y estos se emplearon sobre las playas de Normandía, para intentar frenar en el desembarco. (Dos se equivocaron de aeródromo y fueron capturados al aterrizar). Ya habréis deducido de las imágenes que la inmensa mayoría de los aviones utilizados eran Me-109 G-6 o G-5, con góndolas de cañones y depósito de combustible extra, para darle una autonomía de 80 minutos.
  8. Supongamos que una persona tiene el PWCG y quiere gestionar una campaña en su máquina (su PC) y sin embargo prefiere ejecutar las misiones en otra máquina más potente con un servidor dedicado. (En redacción)
  9. @Luftmanu ha proporcionado en el Discord información muy necesaria sobre el tipo de formación que empleaban los Lancaster. Básicamente un flujo de 600 bombarderos marcado por un ancho de hasta 15 kilómetros y hasta 2 Km de profundidad. En realidad y pese a la imagen que lo ilustra, Es un flujo siete veces más ancho que profundo. La imagen no es un "río" de bombarderos, más bien un "muro espeso" de bombarderos. Eso sí cada uno en posición libre dentro de él. Muy interesante. Las altitud del ataque la sacamos de este post: https://ww2aircraft.net/forum/threads/bombing-altitude-of-raf-and-8tth-air-force.15440/ Las altitudes frecuentes de bombardeo eran para los B-17 25.000 pies, B-24 20.000 pies y Lancaster (el caso) 12.000 pies Finalmente y para completar la documentación dejo aquí anotado una interesante web con las formaciones de bombarderos diurnos (americanos), lógicamente diferentes a las nocturnas: https://b17flyingfortress.de/en/details/formationsflug/ Y ahora sí os dejo con la cita de @Luftmanu
  10. @Luftmanu fue quien levantó la liebre del interesante escenario de la caza nocturna alemana en su lucha contra los bombardeos británicos. (Los británicos bombardeaban de noche y los americanos de día). Hay mucha información interesante aquí: https://en.wikipedia.org/wiki/Wilde_Sau En este vídeo: Y una curiosidad sobre su "inventor" promotor y ejecutor en un vídeo contemporáneo aquí: Resumen Para los inquietos resumir que la caza nocturna "salvaje", es decir, sin ayuda de radar u otros instrumentos de guía electrónica (por tanto a ojo) se desarrollo como una necesidad cuando (por motivo de la deserción de un aparato completamente equipado) los británicos desbarataron los radares de los alemanes y estos tuvieron que improvisar caza nocturna con monomotores diurnos para salvar el culo mientras acababan de desarrollar un nuevo tipo de radar. Este tipo de caza a la desesperada, que duró desde de Julio del 43 hasta mediados del 44, aproximadamente, se le llamo Wilde Sau (Jabalí Salvaje). Cuando por fin lo alemanes pudieron terminar el nuevo sistema de radar y control de misión, al tipo de caza nocturna se le denominó Tame Sau (Jabalí Domesticado). Está claro que los nombres tienen su intención. Si os fijáis en los datos que da el primer vídeo, la caza nocturna de esa manera, era igualmente mortal para ambos bandos porque los pilotos de caza se mataban con enorme facilidad. Sus aviones no contaban con ningún tipo de ayuda especial para el vuelo nocturno. Debían contar únicamente con sus ojos, y todo tipo de ayudas luminosas que pudieran proporcionarles en el campo de batalla: cañones de luz, trazadoras, bengalas... y los propios incendios de las ciudades. Campaña en modo Dogfight Todo esto crea un excelente y peculiar escenario para hacer una campaña de misiones nocturnas en base a una misión Dogfight con las siguientes condiciones: Estoy trabajando en ello y me estoy encontrando con dificultades técnicas, por ejemplo incendiar una ciudad no ilumina lo que debiera. Tampoco el simulador puede mover cientos de bombarderos. En el lado positivo es divertido y un reto. Además en la realidad la mayoría de los pilotos carecía de formación para el vuelo nocturno (más aún hacia la mitad y final) y se mataban en accidentes. Esa parte estoy seguro que la vamos a clavar Se edita una misión en Dogfight para ponerla en el Dedi X días X horas. La gente que pueda/quiera se embarca en su avión. La misión lanza aleatoriamente oleadas de bombarderos contra sus objetivos. Cambiantes automáticamente cada día de misión. Los jugadores pueden tratar de organizarse bien, improvisadamente o jugar en solitario (las tres formas serían realistas). Se guardan las estadísticas (opcional) para crear una sensación de continuidad... de modo carrera. Dificultades técnicas Editar una misión así tiene ciertos retos técnicos. Por un lado IL-2 pone perfectamente los escenarios de noche, las luces de los aviones funcionan, los cañones de luz búsqueda también, la IA sabe reaccionar en la noche, hay bengalas y luces para iluminar los aeródromos. La cosa, en principio pinta bastante bien. Pero la dificultad viene del elemento más espectacular del Wilde Sau y es que los gigantescos incendios de las ciudades iluminaban el cielo y las nubes y el contraluz era lo que favorecía que los cazas pudieran encontrar sus objetivos. Eso no funciona bien en IL-2 y el motivo es el que puede verse en esta imagen: Los incendios generan mucho humo opaco y muy poca luz. Mas incendios pones más humo lo tapa todo. Aquí se aprecia perfectamente la boina: He intentado buscar de meter luz en el escenario y he encontrado un MOD que introduce unos emisores que existían en el antiguo ROF (Rise of Flight) que es el juego sobre cuyo motor se basa el IL-2. La luz que generan es pobre para las necesidades. Aun poniendo un gran número la intensidad lumínica no se suma, solo se puede agradar el área afectada: Quitados los incendios e iluminado un barrio para ver el fecto la cosa queda así: Bien abajo (para los tanques, por ejemplo) pero insuficiente arriba. También lo he intentado poniendo las luces en altura, lo que sería por encima de las nubes, para intentar lo que sería el efecto radiante de las nubes de humo por la incidencia de la luz de los incendios de debajo. En eso estoy ahora mismo, seguiré editando el post con nuevos avances. Hasta el momento ayer hice una prueba con Cutter y es muy especial volar en estas condiciones, conseguir un derribo y volver a casa. Creo que la prueba de concepto ha funcionado y merece la pena seguir investigando.
  11. Vamos a ver, simplificadamente, como funciona un servidor de Dedicado y qué herramientas hay para gestionarlo. El Servidor Dedicado (máquina y programa) Es una aplicación dserver.EXE haciendo de servidor del juego IL-2 Sturmovik Great Battles en una máquina conectada a Internet. Los jugadores, en sus respectivas máquinas, corren un programa cliente junto con el juego que se conecta al servidor e intercambia datos. Aspecto del servidor dedicado corriendo La Batalla de Inglaterra Hay que evitar confusiones cuando usamos la palabra "servidor" pues se utiliza tanto para referirnos la máquina como al programa. Igualmente "dedicado" es un término confuso porque la máquina puede correr otros programas en paralelo, por ejemplo un programa servidor de IL-2 y otro de DCS. Dedicado se refiere a que se centra en la tarea de gestionar el escenario y no a la parte jugable, pero no necesariamente en exclusiva. Volviendo al término servidor, para ser muy claro, a partir de aquí voy a referirme al programa como DSERVER, mientras que al equipo que lo corre la lo llamaré la máquina. Para que el DSERVER funcione necesita obligatoriamente dos cosas: Un archivo *.mission o *.msnbin, con sus respectivos archivos acompañantes y su estructura de carpetas. Un archivo de configuración *.sds, con los parámetros de inicialización del dserver como por ejemplo: "la misión que tienes que cargar se llama mision1.mission", "la contraseña es 'picopato' " o "no se puede modificar el fuel". Ejemplo de parte de los archivos que conforman La Batalla de Inglaterra Ejemplo del archivo SDS de configuración de La Batalla de Inglaterra. Nótese que el nombre puede se cualquiera que se desee. Por su parte la MÁQUINA tiene que tener unos puertos abiertos y accesibles desde Internet, lo que se conoce como enrutado dentro de su propia red. Existe un servidor no dedicado. Cuando desde dentro del propio "juego" alguien va a Multijugador, elige la opción de Crear Servidor y juega con los amigos esta corriendo en su máquina un servidor + un cliente. Nótese que para que funciones previamente hay que 1) abrir puertos y enrutarlos, 2)debes tener los archivos de la misión en tu ordenador y 3) previamente a iniciarlo tiene un menú de configuración de parámetros de juego, lo que esta generando (sin que te des cuenta) un SDS. ¿Ves?, exactamente lo mismo que con el dedicado. Por lo tanto al DSERVER se le llama servidor dedicado porque se dedica sólo a hacer de servidor (que no exclusivamente). La Consola Remota. La Consola Remota es un cliente específico para conectarse al DSERVER y controlarlo remotamente. También se le podría llamar "terminal". Aspecto general de la Consola Remota. ROF en su título hace referencia al Rise Of Flight, el juego para la que fue originariamente diseñada en 2009. La consola es muy pedestre, con un protocolo de comunicaciones muy áspero. Comandos de palabras clave, contestados con códigos en un formato muy áspero. Por ejemplo, le pedimos el listado de jugadores en ese momento: Todos esos caracteres extraños, como "%2cn", son caracteres de control para representar, por ejemplo, una barra vertical, pero la consola lo vierte en bruto y es casi ininteligible para un humano. Es decir la consola no está pensada para ser usada directamente de forma asidua. Capacidad de la Consola Los comandos que puede recibir la consola están previamente determinados y cerrados, no son muchos pero sí muy útiles. Entre otros permite enviar mensajes al chat del juego, indicar el SDS a ejecutar, reiniciar el dserver y ordenar la ejecución de determinados comandos (MCU) dentro del juego (la misión). Para no complicar las cosas sólo quiero indicar que la Consola solo introduce datos en el dserver (IN). La salida (OUT) de datos tiene que hacerse desde los archivos de registro (LOG) que el dserver va generando. Así, por ejemplo si un administrador quiere chatear con los usuarios dentro del juego necesita introducir su texto por la consola y buscar las respuestas en otro lugar, los archivos de registro. Sí, una ? que mejor requiere de un programa más inteligente que unifique las dos cosas. Por eso, desde mi punto de vista, la consola no es un programa para gestionar todos los días. IL2Bot Para mantener la sencillez de este post voy a señalar nada más que una herramienta para simplificar el uso de la Consola Remota a la que tengo echada el ojo. Su nombre es il2_discord_bot y yo lo he abreviado como IL2Bot. Es una herramienta escrita en Python con unos pocos scripts. Como la mayoría de los programas modernos se basa a su vez en una serie de "módulos" ya escritos, enlazándolos y adaptándolos a la necesidad. discord_bot.py, que es el script que crea el bot en la máquina y gestiona su presencia y funcionamiento Discord remote_console.py, que es el script que se encarga de traducir las comunicaciones HACIA la consola remota remote_console_actions.py, que es el script que "traduce" las respuestas DESDE la consola remota (tanto de bit y bytes y esas cosas como a un formato más legible por humanos). Ventajas. Es código abierto y completamente configurable. Las comunicaciones entre la máquina y Discord están cifradas. Los usuarios permitidos se configuran por una lista blanca. Sus usuarios no requieren conocer la consola para nada. Inconvenientes. Ponerlo en marcha, que no es demasiado complicado. Requiere Python instalado en la máquina y los módulos de sus dependencias, pero su impacto en el rendimiento (calculo) es mínimo. Seguridad. Hasta donde yo sé es seguro (aunque no soy ningún experto). Cuando se crea el bot y se le vincula con el Discord se le indica el nivel de acceso que se le puede dejar en un mínimo absoluto. ¿Incompatibilidad o interferencia con otros programas gestores como el il2-Commander? Actualmente no se hasta que punto. Habría que hacer pruebas. Pero es evidente que si IL2-Commander tiene la tarea de que siempre esté funcionando la Misión A y IL2Bot indica al dserver que inicie la Misión B, hay va a haber un conflicto y ganará el más insistente (en este caso el IL2-Commander). ¿Qué funciones se quedan por cubrir? ¿Qué soluciones se le pueden dar? Para responder eso hoy, antes tendría que hacer pruebas. Más información: El hilo del IL2 Bot Su código y documentación en GitHub
  12. EDITO: he creado unas instrucciones detalladas aquí Buenas, Quisiera aprovechar la ocasión para señalar a la comunidad hispana un nuevo server con misiones llenas de acción arcade: aviones, tanques y banderas. Lo mismo se genial para partidas cortas o viciarse unas horas. Jugar sólo con una avión o un tanque (hay IA bien programadas) o un montón de humanos por bando. El autor es Super-Truite (del foro Il2 oficial en inglés) que es un editor y programador muy competente y abierto siempre a sugerencias. El hilo original esta aquí. Parece un poco complicado iniciarse, pero sólo hasta que se comprende el mecanismo del juego y su representación sobre el mapa. Para ayudaros he editado una imagen del mapa señalándoos los puntos de interés. Actualmente hay cinco escenarios distintos y en el futuro puede ir cambiando algunos detalles, así que quedaos con los conceptos, no con la imagen exacta. Otros datos importantes: La meteorología tiene un techo de nubes bajo y con niebla parcial, lo que obliga a los aviones a buscar sus objetivos muy bajos. Los aviones empiezan en el aire, y hasta donde sé, terminas el vuelo aterrizando en cualquier lugar. Hay varios mapas diferentes y más que se quieren hacer, con la misma mecánica y composición. El server tiene activado el "GPS" (lo cual para mi es un acierto porque es un juego muy rápido y cambiante y si no es muy fácil perderse con los tanques) Tiene un discord oficial para coordinar nueva información y vuelos, pero NO es obligatorio. Tiene un sevidor de estadísticas. Aportes de otros compañeros: Animaos a probarlo y añadir a este post las reglas que me he dejado por explicar (¡soy nuevo en este!) y vuestras experiencias. Un saludo
  13. IL2 trae un nivel muy bajo de programación por defecto para la edición de las misiones. Para entenderlo, por comparación, en DCS puedes crear una vuelo e indicarle aquí haces CAP, a partir de aquí haces CAS y luego vuelves haciendo escolta, con relativamente pocas instrucciones, porque ya está preprogramado para ello. No sólo como para que las IAs sepan afrontar ese tipo de misiones, con el armamento que tienen, sino que han creado un sistema que permite establecer roles, concatenarlos, priorizarlos, etc. IL2 no. Es muy crudo al respecto. Pueden despegar y aterrizar, pueden atacar objetivos en el aire y pueden atacar objetivos en tierra pero es labor tuya indicarle cuándo, cómo, cuanto tiempo y no puedes indicarle con qué arma o cuantas de ellas puede utilizar. Probablemente no sea tan importante para la SGM, ya que el multirol en los aviones es hijo de la polivalencia que ha traído la electrónica y la mayor capacidad de carga de los aviones modernos. Pero el caso es que es farragoso crear una misión. La solución pasa por crearse grupos (conjunto de objetos y órdenes) genéricos y retocarlos según necesidad. Un grupo de interceptación, por ejemplo, será un vuelo de cazas esperando a que un disparador los active y los haga a acudir a una zona de caza. La parte de configuración será el modelo de avión, la altura, distancias, posición y radio del activador, y finalmente área de caza. Si lo haces bien fino despegarán y aterrizarán en aeródromo (más bonito aún si hacen taxi). Bien pues aquí os traigo un intento de preprogramar todo lo necesario para montar misiones en base a una serie de grupos interconectados con una lógica para activar o desactivar opciones según conveniencia. Muy interesante propuesta y un gran esfuerzo haberlo llevado a cabo. Aquí -> OPERATIONS SERVER INSTRUCTIONS Imagen: un vistazo general al grupo de Lógica de SPRUE v5 Opinión. El autor es un campeón por haber diseñado algo tan ambicioso y haberlo materializado con los medios que IL2 proporciona. Sin embargo el resultado es tan complejo que su comprensión requiere de un estudio tan detallado que anula una de las primeras premisas para construir algo así: simplificar la creación de misiones. Es posible que una documentación detallada mejoraría parcialmente el problema si se formara adecuadamente al usuario de qué hay que conectar dónde, pero no existe más que una serie de vídeos con buena intención pero poca claridad. Uno de ellos aquí Yo no me rindo y voy a trabajarlo hasta que lo comprenda todo porque contiene mucho conocimiento sobre "programación" avanzada de IL2 peor es evidente que ni 1 entre 10.000 usuarios prestará la dedicación que requiere este interesante proyecto. Gracias David Setchell por compartir. Cuando lo consiga, tengo intención de escribir un artículo más detallado sobre SPRUE. Hasta entonces, saludos.
  14. Yo distinguiría entre dos tipos de misiones: las puntuales y las continuas. Las puntuales son aquellas en las que las cosas están preparadas para funcionar una sola vez. Una misión, una "partida". son relativamente sencillas ya que sólo hay que preparar los activadores para que funcionen una vez. Es como preparar una partida de rol. Imaginas unas escenas y se las planteas a los jugadores. La incertidumbre de como van a desenvolverse los jugadores es lo que genera el realismo, y a lo mejor incluyes un par de elementos aleatorios para que la escena no esté tan encorsetada... aunque tampoco es necesario. Si como editor tomas el papel del destino la escena que prepares es como tiene que ser. Eso sí, la rejugabilidad está muy comprometida. Los humanos pronto reconocemos los patrones. Las misiones continuas son mucho más complejas. Son aquellas que están preparadas para "vivir" en un servidor dedicado durante horas. Puedes introducir varias situaciones puntuales pero como nexo de unión siempre vas a necesitar una matriz de acontecimientos que puedan repetirse en bucle y cuyo patrón activador no sea fácilmente reconocible (lo mejor, meter aleatoriadores). No vamos ahora a centrarnos en los activadores si no en los bucles. Uno sería una patrulla aérea, que apareciera en escena bajo ciertas condiciones. Bien, pues ojo aquí porque nos encontramos con otra limitación de IL-2. Aunque lo preferible es usar formaciones (también con la IA), no se puede activar dos veces la misma formación de aviones. Hay que utilizar el Spawn (en vez del Trigger Activate), y los aviones spawneados NO reconocen las formaciones, da igual que se la indiques. Cuatro aviones serán cuatro robots volando independiente con riesgo de chocarse. Aunque hay formas de disimular esto. Bien, solo era una introducción al problema, lo veremos en algún otro post. Para empezar a editar bucles lo ideal es empezar por algo más sencillo, relativamente sencillo. En realidad es bastante avanzado así que tómate tu tiempo para analizar la misión. En este ejemplo tenemos tres grupos, todos tienen una entrada (inicio) y una salida (resultado). Fábrica: Cuando se llama a Fábrica esta produce un camión y lo dirige a Depósito Depósito: Cuando un camión llega a depósito lo transforma en un montón de cajas. Cuando las 4 cajas están construidas construye un tanque. Aquí espera. Combate: Cuando el Depósito tiene 4 cajas estás son destruidas para crear un tanque. Cuando el tanque resulta destruido avisa al Depósito para que pida cajas de nuevo. Como se ve, conectando las entradas y salidas de los tres grupos entre ellos tenemos el bucle. A partir de aquí viene la configuración para cada caso específico. Por ejemplo: Evidentemente la posición y la distancia entre elementos hay que adaptarlas a tu mapa y tus necesidades. En el ejemplo es muy corto para que el bucle sea fácil de ver. Cuantos camiones hacen falta para completar un montón de cajas (hay un contador, por defecto 1) Cuanto tiempo pasa entre que hay cuatro cajas y se monta el tanque (es simplemente un timmer) También podrías editar la fábrica para que no sólo saliera un camión, si no un convoy, y que su longitud y composición fuera variable (esto lo veremos en otro post). Bien, ahora si te ha interesado esto, no tienes más remedio que dedicar tiempo a estudiar la misión para comprender sus entresijos. El código está a continuación. 1. Copia el código 2. Pégalo en un TXT, guárdalo como nombrequequieras.mission en la carpeta data/missions de tu instalación de IL-2 Un saludo Sire:) Fin del post # Mission File Version = 1.0; Options { LCName = 0; LCDesc = 1; LCAuthor = 2; PlayerConfig = ""; Time = 12:30:0; Date = 25.8.1942; HMap = "graphics\LANDSCAPE_summer\height.hini"; Textures = "graphics\LANDSCAPE_summer\textures.tini"; Forests = "graphics\LANDSCAPE_summer\trees\woods.wds"; Layers = ""; GuiMap = "lapino-summer"; SeasonPrefix = "su"; MissionType = 0; AqmId = 0; CloudLevel = 500; CloudHeight = 200; PrecLevel = 0; PrecType = 0; CloudConfig = "summer\00_clear_00\sky.ini"; SeaState = 0; Turbulence = 0; TempPressLevel = 0; Temperature = 25; Pressure = 760; Haze = 0; WindLayers { 0 : 0 : 0; 500 : 0 : 0; 1000 : 0 : 0; 2000 : 0 : 0; 5000 : 0 : 0; } Countries { 0 : 0; 101 : 1; 102 : 1; 103 : 1; 201 : 2; 202 : 2; 203 : 2; 301 : 3; 302 : 3; 303 : 3; 304 : 3; 305 : 3; 401 : 4; 402 : 4; } } Block { Name = "Block"; Index = 2; LinkTrId = 0; XPos = 24616.227; YPos = 101.593; ZPos = 19888.529; XOri = 0.00; YOri = 22.10; ZOri = 0.00; Model = "graphics\blocks\industrial_200x140_01.mgm"; Script = "LuaScripts\WorldObjects\Blocks\industrial_200x140_01.txt"; Country = 0; Desc = ""; Durability = 25000; DamageReport = 50; DamageThreshold = 1; DeleteAfterDeath = 1; } MCU_TR_CameraOperator { Index = 3; Name = "Translator Camera Operator"; Desc = ""; Targets = []; Objects = []; XPos = 24338.384; YPos = 270.630; ZPos = 19999.279; XOri = 0.00; YOri = 13.47; ZOri = 311.87; Enabled = 1; Speed = 0; FOV = 90; FirstId = -1; SecondId = -1; LockView = 0; CameraType = 0; Config = ""; } Vehicle { Name = "Vehicle"; Index = 4; LinkTrId = 5; XPos = 24569.367; YPos = 104.477; ZPos = 20029.092; XOri = 1.75; YOri = 105.19; ZOri = 1.96; Script = "LuaScripts\WorldObjects\vehicles\pak38.txt"; Model = "graphics\artillery\pak38\pak38.mgm"; Desc = ""; Country = 201; NumberInFormation = 0; Vulnerable = 0; Engageable = 0; LimitAmmo = 0; AILevel = 2; DamageReport = 50; DamageThreshold = 1; DeleteAfterDeath = 1; CoopStart = 0; Spotter = -1; BeaconChannel = 0; Callsign = 0; PayloadId = 0; WMMask = 1; Fuel = 1; Callnum = 0; Skin = ""; RepairFriendlies = 0; RehealFriendlies = 0; RearmFriendlies = 0; RefuelFriendlies = 0; RepairTime = 0; RehealTime = 0; RearmTime = 0; RefuelTime = 0; MaintenanceRadius = 10; } MCU_TR_Entity { Index = 5; Name = "Vehicle entity"; Desc = ""; Targets = []; Objects = []; XPos = 24569.367; YPos = 104.677; ZPos = 20029.092; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 4; } MCU_TR_MissionBegin { Index = 7; Name = "Translator Mission Begin"; Desc = ""; Targets = [8]; Objects = []; XPos = 24611.653; YPos = 105.476; ZPos = 20050.152; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; } MCU_CMD_AttackArea { Index = 9; Name = "command AttackArea"; Desc = ""; Targets = []; Objects = [5]; XPos = 24546.894; YPos = 106.787; ZPos = 20089.286; XOri = 0.00; YOri = 0.00; ZOri = 0.00; AttackGround = 0; AttackAir = 0; AttackGTargets = 1; AttackArea = 50; Time = 59940; Priority = 2; } MCU_Timer { Index = 8; Name = "2S"; Desc = ""; Targets = [9]; Objects = []; XPos = 24608.392; YPos = 106.502; ZPos = 20073.912; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 2; Random = 100; } Group { Name = "Build"; Index = 11; Desc = ""; MCU_Spawner { Index = 12; Name = "Spawn"; Desc = ""; Targets = []; Objects = [13]; XPos = 24594.801; YPos = 103.875; ZPos = 19896.166; XOri = 0.00; YOri = 112.67; ZOri = 0.00; SpawnAtMe = 0; } MCU_Timer { Index = 14; Name = "100ms"; Desc = ""; Targets = [15,16]; Objects = []; XPos = 24591.402; YPos = 98.018; ZPos = 19886.061; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 1.1; Random = 100; } Vehicle { Name = "Vehicle"; Index = 17; LinkTrId = 13; XPos = 24559.661; YPos = 100.114; ZPos = 19884.613; XOri = 3.40; YOri = 202.60; ZOri = 357.25; Script = "LuaScripts\WorldObjects\vehicles\gmc-cckw.txt"; Model = "graphics\vehicles\gmc-cckw\gmc-cckw.mgm"; Desc = ""; Country = 103; NumberInFormation = 0; Vulnerable = 1; Engageable = 1; LimitAmmo = 1; AILevel = 2; DamageReport = 50; DamageThreshold = 1; DeleteAfterDeath = 1; CoopStart = 0; Spotter = -1; BeaconChannel = 0; Callsign = 0; PayloadId = 0; WMMask = 1; Fuel = 1; Callnum = 0; Skin = ""; RepairFriendlies = 0; RehealFriendlies = 0; RearmFriendlies = 0; RefuelFriendlies = 0; RepairTime = 0; RehealTime = 0; RearmTime = 0; RefuelTime = 0; MaintenanceRadius = 10; } MCU_TR_Entity { Index = 13; Name = "Vehicle entity"; Desc = ""; Targets = []; Objects = []; XPos = 24559.661; YPos = 100.314; ZPos = 19884.613; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 17; } MCU_Timer { Index = 19; Name = "IN Build&Send"; Desc = ""; Targets = [12,14]; Objects = []; XPos = 24609.052; YPos = 98.516; ZPos = 19887.413; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_CMD_Formation { Index = 15; Name = "F_VRoad"; Desc = ""; Targets = []; Objects = [13]; XPos = 24583.672; YPos = 97.847; ZPos = 19886.006; XOri = 0.00; YOri = 0.00; ZOri = 0.00; FormationType = 4; FormationDensity = 0; } MCU_Timer { Index = 16; Name = "100ms"; Desc = ""; Targets = [22]; Objects = []; XPos = 24576.847; YPos = 98.018; ZPos = 19891.636; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 1.1; Random = 100; } } Group { Name = "Depot"; Index = 23; Desc = ""; MCU_Waypoint { Index = 22; Name = "Trigger Waypoint"; Desc = ""; Targets = [25]; Objects = [13]; XPos = 24425.170; YPos = 105.439; ZPos = 20109.585; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Area = 10; Speed = 100; Priority = 1; } Block { Name = "Block"; Index = 26; LinkTrId = 0; XPos = 24405.828; YPos = 105.147; ZPos = 20100.040; XOri = 0.00; YOri = 116.10; ZOri = 0.00; Model = "graphics\blocks\industrial_object_smallwarehouse.mgm"; Script = "LuaScripts\WorldObjects\Blocks\industrial_object_smallwarehouse.txt"; Country = 0; Desc = ""; Durability = 25000; DamageReport = 50; DamageThreshold = 1; DeleteAfterDeath = 1; } Block { Name = "Crate1"; Index = 27; LinkTrId = 28; XPos = 24404.981; YPos = 105.147; ZPos = 20122.965; XOri = 0.00; YOri = 296.79; ZOri = 0.00; Model = "graphics\blocks\port_up_unit_woodbox_1x4.mgm"; Script = "LuaScripts\WorldObjects\Blocks\port_up_unit_woodbox_1x4.txt"; Country = 103; Desc = ""; Durability = 25000; DamageReport = 50; DamageThreshold = 1; DeleteAfterDeath = 1; } MCU_TR_Entity { Index = 28; Name = "Block entity"; Desc = ""; Targets = []; Objects = []; XPos = 24404.981; YPos = 105.347; ZPos = 20122.965; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 27; } Block { Name = "Crate2"; Index = 30; LinkTrId = 31; XPos = 24389.820; YPos = 105.147; ZPos = 20115.465; XOri = 0.00; YOri = 296.79; ZOri = 0.00; Model = "graphics\blocks\port_up_unit_woodbox_1x4.mgm"; Script = "LuaScripts\WorldObjects\Blocks\port_up_unit_woodbox_1x4.txt"; Country = 103; Desc = ""; Durability = 25000; DamageReport = 50; DamageThreshold = 1; DeleteAfterDeath = 1; } MCU_TR_Entity { Index = 31; Name = "Block entity"; Desc = ""; Targets = []; Objects = []; XPos = 24389.820; YPos = 105.347; ZPos = 20115.465; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 30; } Block { Name = "Crate3"; Index = 33; LinkTrId = 34; XPos = 24400.310; YPos = 105.147; ZPos = 20132.525; XOri = 0.00; YOri = 296.79; ZOri = 0.00; Model = "graphics\blocks\port_up_unit_woodbox_1x4.mgm"; Script = "LuaScripts\WorldObjects\Blocks\port_up_unit_woodbox_1x4.txt"; Country = 103; Desc = ""; Durability = 25000; DamageReport = 50; DamageThreshold = 1; DeleteAfterDeath = 1; } MCU_TR_Entity { Index = 34; Name = "Block entity"; Desc = ""; Targets = []; Objects = []; XPos = 24400.310; YPos = 105.347; ZPos = 20132.525; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 33; } Block { Name = "Crate4"; Index = 36; LinkTrId = 37; XPos = 24385.051; YPos = 105.147; ZPos = 20125.214; XOri = 0.00; YOri = 296.79; ZOri = 0.00; Model = "graphics\blocks\port_up_unit_woodbox_1x4.mgm"; Script = "LuaScripts\WorldObjects\Blocks\port_up_unit_woodbox_1x4.txt"; Country = 103; Desc = ""; Durability = 25000; DamageReport = 50; DamageThreshold = 1; DeleteAfterDeath = 1; } MCU_TR_Entity { Index = 37; Name = "Block entity"; Desc = ""; Targets = []; Objects = []; XPos = 24385.051; YPos = 105.347; ZPos = 20125.214; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 36; } MCU_CMD_Damage { Index = 39; Name = "Destroy x4"; Desc = ""; Targets = []; Objects = [28,31,34,37]; XPos = 24376.835; YPos = 105.736; ZPos = 20115.538; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Damage = 2; Type = 1; } MCU_CMD_Damage { Index = 40; Name = "Repair1"; Desc = ""; Targets = []; Objects = [28]; XPos = 24379.316; YPos = 104.812; ZPos = 20089.644; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Damage = 2; Type = 0; } MCU_CMD_Damage { Index = 41; Name = "Repair4"; Desc = ""; Targets = []; Objects = [34]; XPos = 24359.216; YPos = 104.812; ZPos = 20129.969; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Damage = 2; Type = 0; } MCU_CMD_Damage { Index = 42; Name = "Repair2"; Desc = ""; Targets = []; Objects = [31]; XPos = 24376.637; YPos = 104.812; ZPos = 20097.818; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Damage = 2; Type = 0; } MCU_CMD_Damage { Index = 43; Name = "Repair3"; Desc = ""; Targets = []; Objects = [37]; XPos = 24367.005; YPos = 104.812; ZPos = 20118.738; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Damage = 2; Type = 0; } MCU_Timer { Index = 25; Name = "OnArrival"; Desc = ""; Targets = [45,46]; Objects = []; XPos = 24414.931; YPos = 105.612; ZPos = 20081.271; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_Timer { Index = 45; Name = "IN Depot"; Desc = ""; Targets = [48]; Objects = []; XPos = 24360.386; YPos = 104.595; ZPos = 20049.476; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_Counter { Index = 48; Name = "EveryN"; Desc = ""; Targets = [50,51,52,53]; Objects = []; XPos = 24353.004; YPos = 104.877; ZPos = 20049.574; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Counter = 1; Dropcount = 1; } MCU_Timer { Index = 50; Name = "ON Crate1"; Desc = ""; Targets = [40,55,56,57]; Objects = []; XPos = 24353.059; YPos = 105.088; ZPos = 20058.699; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_TR_MissionBegin { Index = 58; Name = "Setup"; Desc = ""; Targets = [59]; Objects = []; XPos = 24317.841; YPos = 103.475; ZPos = 20101.129; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; } MCU_Timer { Index = 59; Name = "1s"; Desc = ""; Targets = [61,3,62]; Objects = []; XPos = 24327.664; YPos = 104.032; ZPos = 20100.859; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 1; Random = 100; } MCU_Timer { Index = 61; Name = "OFFCratesx4"; Desc = ""; Targets = [39,64]; Objects = []; XPos = 24360.044; YPos = 105.705; ZPos = 20101.064; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_Timer { Index = 51; Name = "ON Crate2"; Desc = ""; Targets = [42,66,67,57]; Objects = []; XPos = 24348.205; YPos = 105.088; ZPos = 20070.397; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_Timer { Index = 52; Name = "ON Crate3"; Desc = ""; Targets = [43,69,70,57]; Objects = []; XPos = 24342.959; YPos = 105.088; ZPos = 20081.195; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_Timer { Index = 53; Name = "ON Crate4"; Desc = ""; Targets = [41,72,73]; Objects = []; XPos = 24336.971; YPos = 105.088; ZPos = 20091.178; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_Deactivate { Index = 64; Name = "TD"; Desc = ""; Targets = [51,52,53]; Objects = []; XPos = 24360.394; YPos = 105.700; ZPos = 20091.288; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_Activate { Index = 55; Name = "TA"; Desc = ""; Targets = [51]; Objects = []; XPos = 24349.073; YPos = 102.568; ZPos = 20058.843; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_Activate { Index = 66; Name = "TA"; Desc = ""; Targets = [52]; Objects = []; XPos = 24343.229; YPos = 102.568; ZPos = 20070.594; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_Activate { Index = 69; Name = "TA"; Desc = ""; Targets = [53]; Objects = []; XPos = 24336.961; YPos = 102.568; ZPos = 20081.450; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_Deactivate { Index = 56; Name = "SelfTD"; Desc = ""; Targets = [50]; Objects = []; XPos = 24353.007; YPos = 102.994; ZPos = 20062.224; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_Deactivate { Index = 67; Name = "SelfTD"; Desc = ""; Targets = [51]; Objects = []; XPos = 24348.117; YPos = 102.994; ZPos = 20073.930; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_Deactivate { Index = 70; Name = "SelfTD"; Desc = ""; Targets = [52]; Objects = []; XPos = 24342.881; YPos = 102.994; ZPos = 20084.253; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_Deactivate { Index = 72; Name = "SelfTD"; Desc = ""; Targets = [53,45]; Objects = []; XPos = 24337.053; YPos = 102.994; ZPos = 20093.736; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_Timer { Index = 82; Name = "Refesh"; Desc = ""; Targets = [83]; Objects = []; XPos = 24328.679; YPos = 102.767; ZPos = 20060.849; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_Activate { Index = 83; Name = "TA"; Desc = ""; Targets = [45,50]; Objects = []; XPos = 24336.213; YPos = 102.599; ZPos = 20058.386; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_Timer { Index = 57; Name = "SendMore"; Desc = ""; Targets = [19,86]; Objects = []; XPos = 24307.132; YPos = 105.704; ZPos = 20119.230; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_Delete { Index = 46; Name = "Trigger Delete"; Desc = ""; Targets = []; Objects = [13]; XPos = 24409.204; YPos = 104.899; ZPos = 20070.644; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } MCU_TR_Subtitle { Index = 86; Name = "Txt"; Desc = ""; Targets = []; Objects = []; XPos = 24300.592; YPos = 105.339; ZPos = 20122.506; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; SubtitleInfo { Duration = 2; FontSize = 40; HAlign = 1; VAlign = 2; RColor = 255; GColor = 255; BColor = 255; LCText = 13; } Coalitions = [0, 1, 2, 3, 4]; } MCU_Timer { Index = 73; Name = "AskATank"; Desc = ""; Targets = [90,61]; Objects = []; XPos = 24344.203; YPos = 105.711; ZPos = 20116.306; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 30; Random = 100; } MCU_Timer { Index = 62; Name = "1min"; Desc = ""; Targets = [57]; Objects = []; XPos = 24331.773; YPos = 105.667; ZPos = 20111.513; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 60; Random = 100; } MCU_Timer { Index = 92; Name = "Refresh&Send"; Desc = ""; Targets = [93,57]; Objects = []; XPos = 24327.110; YPos = 105.608; ZPos = 20129.706; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } MCU_Timer { Index = 93; Name = "100ms"; Desc = ""; Targets = [82]; Objects = []; XPos = 24322.773; YPos = 105.599; ZPos = 20122.945; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } } Group { Name = "Fight"; Index = 95; Desc = ""; MCU_Timer { Index = 90; Name = "IN Tank"; Desc = ""; Targets = [97,98]; Objects = []; XPos = 24369.379; YPos = 104.907; ZPos = 20158.815; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0; Random = 100; } Vehicle { Name = "Vehicle"; Index = 99; LinkTrId = 100; XPos = 24381.697; YPos = 106.600; ZPos = 20149.710; XOri = 358.03; YOri = 27.35; ZOri = 3.34; Script = "LuaScripts\WorldObjects\vehicles\m4a2.txt"; Model = "graphics\vehicles\m4a2\m4a2.mgm"; Desc = ""; Country = 103; NumberInFormation = 0; Vulnerable = 1; Engageable = 1; LimitAmmo = 1; AILevel = 2; DamageReport = 50; DamageThreshold = 1; DeleteAfterDeath = 1; CoopStart = 0; Spotter = -1; BeaconChannel = 0; Callsign = 0; PayloadId = 0; WMMask = 1; Fuel = 1; Callnum = 0; Skin = ""; RepairFriendlies = 0; RehealFriendlies = 0; RearmFriendlies = 0; RefuelFriendlies = 0; RepairTime = 0; RehealTime = 0; RearmTime = 0; RefuelTime = 0; MaintenanceRadius = 10; } MCU_TR_Entity { Index = 100; Name = "Vehicle entity"; Desc = ""; Targets = []; Objects = []; XPos = 24381.697; YPos = 106.800; ZPos = 20149.710; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 0; MisObjID = 99; OnEvents { OnEvent { Type = 13; TarId = 92; } OnEvent { Type = 13; TarId = 102; } } } MCU_Spawner { Index = 97; Name = "Trigger Spawner"; Desc = ""; Targets = []; Objects = [100]; XPos = 24377.812; YPos = 105.287; ZPos = 20154.948; XOri = 0.00; YOri = 0.00; ZOri = 0.00; SpawnAtMe = 0; } MCU_Timer { Index = 98; Name = "100ms"; Desc = ""; Targets = [105]; Objects = []; XPos = 24375.173; YPos = 105.175; ZPos = 20160.574; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 0.1; Random = 100; } MCU_Waypoint { Index = 105; Name = "Trigger Waypoint"; Desc = ""; Targets = [107]; Objects = [100]; XPos = 24509.846; YPos = 109.200; ZPos = 20194.083; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Area = 20; Speed = 100; Priority = 2; } MCU_Waypoint { Index = 107; Name = "Trigger Waypoint"; Desc = ""; Targets = []; Objects = [100]; XPos = 24558.720; YPos = 109.200; ZPos = 20060.446; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Area = 20; Speed = 100; Priority = 2; } MCU_Timer { Index = 102; Name = "5s"; Desc = ""; Targets = [110]; Objects = []; XPos = 24390.072; YPos = 104.948; ZPos = 20159.068; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 5; Random = 100; } MCU_Delete { Index = 110; Name = "Delete"; Desc = ""; Targets = []; Objects = [100]; XPos = 24389.111; YPos = 104.636; ZPos = 20169.371; XOri = 0.00; YOri = 0.00; ZOri = 0.00; } } # end of file
  15. Sire

    Viento y humo

    El viento y el humo son complicados de manejar en el IL-2, porque no funcionan exactamente como debieran. Así que una vez más nos toca ponernos las pilas. VIENTO El viento en el editor se introduce con la dirección en la que sopla Mientras los pilotos necesitan saber la dirección en la que viene el viento, para poder encararlo (despegue, lanzamiento de bombas). HUMO Varios humos no se orientan automáticamente con el viento (!!!???) y hay que orientar el icono "a mano". Cuidado si luego cambias el viento de la misión, acuérdate de corregir los humos. En principio, aunque hay que estar pendiente de las actualizaciones, los humos que hay que orientar son: Hay que orientar los humos grandes (city_fire, city_firesmall,villagesmoke) Fuente y más detalle en la imagen. El problema, que como es un comportamiento anormal, puede que lo arreglen en cualquier actualización, así que ojo. Además. Una conclusión mía: si los humos "grandes" no se orientan es que su diseño es estático, como "una película" puesta en el escenario. Esto no sólo tiene el problema de la orientación (corregible a mano), es que los humos tienen una aplicación enorme en la vida real ya que muestran no solo la dirección del viento, sino además la intensidad y el flujo en las diferentes capas de la atmosfera (inversiones térmicas, turbulencia...). Esto último no está modelado en IL-2, pero la intensidad sí es muy importante. ¡No tener que hacer caso a los ojos va en contra de la inmersión en un simulador! La intensidad y la dirección sí funcionan correctamente en las mangas: Compruébalo tu mismo. Recuerda, los humos grandes (de ciudad) son una película, mientras que los humos pequeños los calcula. La mejor forma de verlo es que lo compruebes en una misión sencilla como la que acompaño. Misión de prueba. Humo y viento. 1. Copia todo el texto de código 2. Abre un archivo txt, pega el código y guardar como "Humo y Viento.mission" en la carpeta /data/missions Fin de la entrada. Código de la misión a continuación. # Mission File Version = 1.0; Options { LCName = 0; LCDesc = 1; LCAuthor = 2; PlayerConfig = "LuaScripts\WorldObjects\Planes\hurricanemkii.txt"; Time = 12:30:0; Date = 19.11.1942; HMap = "graphics\landscape\height.hini"; Textures = "graphics\landscape\textures.tini"; Forests = "graphics\landscape\trees\woods.wds"; Layers = ""; GuiMap = "lapino-winter"; SeasonPrefix = "wi"; MissionType = 0; AqmId = 0; CloudLevel = 500; CloudHeight = 200; PrecLevel = 0; PrecType = 0; CloudConfig = "winter\00_clear_00\sky.ini"; SeaState = 0; Turbulence = 0; TempPressLevel = 0; Temperature = -15; Pressure = 760; Haze = 0; WindLayers { 0 : 270 : 5; 500 : 270 : 5; 1000 : 270 : 5; 2000 : 270 : 5; 5000 : 270 : 5; } Countries { 0 : 0; 101 : 1; 102 : 1; 103 : 1; 201 : 2; 202 : 2; 203 : 2; 301 : 3; 302 : 3; 303 : 3; 304 : 3; 305 : 3; 401 : 4; 402 : 4; } } Plane { Name = "Plane"; Index = 2; LinkTrId = 3; XPos = 23470.380; YPos = 151.832; ZPos = 30483.137; XOri = 0.00; YOri = 2.43; ZOri = 9.90; Script = "LuaScripts\WorldObjects\Planes\hurricanemkii.txt"; Model = "graphics\planes\hurricanemkii\hurricanemkii.mgm"; Country = 101; Desc = ""; Skin = ""; AILevel = 0; CoopStart = 0; NumberInFormation = 0; Vulnerable = 1; Engageable = 1; LimitAmmo = 1; StartInAir = 2; Callsign = 0; Callnum = 0; Time = 60; DamageReport = 50; DamageThreshold = 1; PayloadId = 0; WMMask = 1; AiRTBDecision = 0; DeleteAfterDeath = 1; Spotter = -1; Fuel = 1; } MCU_TR_Entity { Index = 3; Name = "Plane entity"; Desc = ""; Targets = []; Objects = []; XPos = 23470.380; YPos = 152.032; ZPos = 30483.137; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 2; } MCU_TR_MissionBegin { Index = 4; Name = "Translator Mission Begin"; Desc = ""; Targets = [5]; Objects = []; XPos = 23466.536; YPos = 149.886; ZPos = 30534.194; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; } MCU_Timer { Index = 5; Name = "Trigger Timer"; Desc = ""; Targets = [6]; Objects = []; XPos = 23475.988; YPos = 149.886; ZPos = 30533.889; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Time = 1; Random = 100; } MCU_CMD_Effect { Index = 6; Name = "Command Effect"; Desc = ""; Targets = []; Objects = [20,21,22,23,24,25,26,27,28,29,30,35,36]; XPos = 23598.697; YPos = 149.886; ZPos = 30727.569; XOri = 0.00; YOri = 0.00; ZOri = 0.00; ActionType = 0; } Effect { Name = "Effect"; Index = 7; LinkTrId = 20; XPos = 23786.125; YPos = 149.886; ZPos = 30532.760; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\chimneystalk_smoke_black.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 8; LinkTrId = 21; XPos = 23762.407; YPos = 149.886; ZPos = 30532.760; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\chimneystalk_smoke_grey.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 9; LinkTrId = 22; XPos = 23741.115; YPos = 149.886; ZPos = 30534.126; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\chimneystalk_smoke_white.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 10; LinkTrId = 23; XPos = 23719.439; YPos = 149.886; ZPos = 30534.137; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\city_fire.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 11; LinkTrId = 24; XPos = 23698.201; YPos = 149.886; ZPos = 30534.811; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\city_fire_loop.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 12; LinkTrId = 25; XPos = 23676.289; YPos = 149.886; ZPos = 30534.474; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\city_firesmall.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 13; LinkTrId = 26; XPos = 23652.017; YPos = 149.886; ZPos = 30534.474; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\city_firesmall_loop.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 14; LinkTrId = 27; XPos = 23629.514; YPos = 149.886; ZPos = 30534.770; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\house_smoke.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 15; LinkTrId = 28; XPos = 23606.166; YPos = 149.886; ZPos = 30535.301; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\landfire.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 16; LinkTrId = 29; XPos = 23581.226; YPos = 149.886; ZPos = 30535.301; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\signalsmoke_red.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 17; LinkTrId = 30; XPos = 23557.348; YPos = 149.886; ZPos = 30534.770; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\static_fire.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 18; LinkTrId = 35; XPos = 23535.592; YPos = 149.886; ZPos = 30611.712; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\villagesmoke.txt"; Model = ""; Desc = ""; } Effect { Name = "Effect"; Index = 19; LinkTrId = 36; XPos = 23508.000; YPos = 149.886; ZPos = 30614.365; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Script = "luascripts\worldobjects\mapemitters\villagesmoke_loop.txt"; Model = ""; Desc = ""; } MCU_TR_Entity { Index = 20; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23786.125; YPos = 150.086; ZPos = 30532.760; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 7; } MCU_TR_Entity { Index = 21; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23762.407; YPos = 150.086; ZPos = 30532.760; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 8; } MCU_TR_Entity { Index = 22; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23741.115; YPos = 150.086; ZPos = 30534.126; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 9; } MCU_TR_Entity { Index = 23; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23719.439; YPos = 150.086; ZPos = 30534.137; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 10; } MCU_TR_Entity { Index = 24; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23698.201; YPos = 150.086; ZPos = 30534.811; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 11; } MCU_TR_Entity { Index = 25; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23676.289; YPos = 150.086; ZPos = 30534.474; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 12; } MCU_TR_Entity { Index = 26; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23652.017; YPos = 150.086; ZPos = 30534.474; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 13; } MCU_TR_Entity { Index = 27; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23629.514; YPos = 150.086; ZPos = 30534.770; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 14; } MCU_TR_Entity { Index = 28; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23606.166; YPos = 150.086; ZPos = 30535.301; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 15; } MCU_TR_Entity { Index = 29; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23581.226; YPos = 150.086; ZPos = 30535.301; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 16; } MCU_TR_Entity { Index = 30; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23557.348; YPos = 150.086; ZPos = 30534.770; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 17; } Flag { Name = "Flag"; Index = 31; LinkTrId = 34; XPos = 23484.629; YPos = 149.886; ZPos = 30488.137; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Model = "graphics\flag\windsock.mgm"; Desc = ""; Script = "LuaScripts\WorldObjects\Flags\windsock.txt"; Country = 0; StartHeight = 0; SpeedFactor = 1; BlockThreshold = 1; Radius = 1000; Type = 0; CountPlanes = 1; CountVehicles = 1; } Flag { Name = "Flag"; Index = 32; LinkTrId = 33; XPos = 23485.347; YPos = 149.886; ZPos = 30479.436; XOri = 0.00; YOri = 73.27; ZOri = 0.00; Model = "graphics\flag\banner.mgm"; Desc = ""; Script = "LuaScripts\WorldObjects\Flags\banner.txt"; Country = 0; StartHeight = 0; SpeedFactor = 1; BlockThreshold = 1; Radius = 1000; Type = 0; CountPlanes = 1; CountVehicles = 1; } MCU_TR_Entity { Index = 33; Name = "Flag entity"; Desc = ""; Targets = []; Objects = []; XPos = 23485.347; YPos = 150.086; ZPos = 30479.436; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 32; } MCU_TR_Entity { Index = 34; Name = "Flag entity"; Desc = ""; Targets = []; Objects = []; XPos = 23484.629; YPos = 150.086; ZPos = 30488.137; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 31; } MCU_TR_Entity { Index = 35; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23535.592; YPos = 150.086; ZPos = 30611.712; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 18; } MCU_TR_Entity { Index = 36; Name = "Effect entity"; Desc = ""; Targets = []; Objects = []; XPos = 23508.000; YPos = 150.086; ZPos = 30614.365; XOri = 0.00; YOri = 0.00; ZOri = 0.00; Enabled = 1; MisObjID = 19; } # end of file
  16. R: Cuando un Cliente se conecta al Servidor lo primero que hace es buscar el archivo .list donde los archivos de juego que necesita y entonces: Si tiene el archivo ya en su máquina continúa. Si no tiene el archivo comienza a descargarlo. El error 100013 ocurre cuando en el listado ve que necesita un archivo, no lo tiene y no está en el servidor para bajarlo. Pongamos un ejemplo real: La primera línea le dice que busque el archivo waypoint.chr que lo tiene en la carpeta de instalación del il2, dentro de Graphics, dentro de Helpers. El cliente mira dentro de su máquina... "ah, sí, lo veo" (porque es un archivo que está en todas las instalaciones de IL2), "vale, sigo leyendo" La segunda línea le dice que busque en la carpeta Missions, "Missions pacakge for manual", "fme" y no la encuentra (porque es un archivo que sólo se instaló el Sr. que editó la misión. Entonces el Cliente busca en la máquina del Servidor dedicado, en esa ubicación y tampoco lo encuentra (porque el Sr. Editor usa otra máquina, donde instaló el archivo de marras). "Oh, oh. No tengo el archivo, no está en el servidor.... Ahhhhh" Y peta. Error #100013 y para casa. Sería preferible que el juego tirara para adelante y tratara de obviar el archivo que falta ya que no necesariamente lo va a a necesitar y aunque lo necesitara podría intentar continuar adelante sin ejecutar esa parte. Pero no. No está programado así. No está: mueres. Así, hay que corregir esa carencia: O borramos el elemento que necesita ese archivo (en este caso un MCU:Media) O ponemos el archivo en una carpeta que exista en el servidor, para que el Cliente pueda encontrarlo ahí. O más limpio aún, ponemos en el archivo en la capeta de la misión (bdi en el ejemplo) y apuntamos el elemento al archivo en esa nueva ruta. Ya no habrá conflicto y no dará error. Feliz edición.
  17. Las cámaras son vistas externas preconfiguradas, apuntando a un sitio. No tienen país o coalición, así que desde el F12 cualquiera puede ir rotando entre todas ellas. Con el F11 pasarías a modo libre y podrías moverte desde la vista, pero la cámara seguirá en el mismo sitio. R: Requiere primero crear la cámara y luego apuntarla. 1. Crea un Begin, un temporizador de algunos segundos (3s por ejemplo) para que no cargue en el mortífero segundo cero y luego el MCU de la cámara. 2. Ahora toca enfocarla, para ello hay que ir al menú de "mirar desde este objeto" (seleccionar el objeto click izquierdo, menú contextual botón derecho) 3. Una vez movida la vista de la cámara al gusto (paciencia si no manejas bien los controles de cámara) hay que grabar la posición de la vista. Click derecho, Copiar la posición y orientación al objeto. Y listo. Guardar misión. Todas las cámaras que añadas serán visibles ciclando con F12.
  18. Estamos hablando de conseguir hacer un mapa como este desde el editor: R: El modo carrera utiliza un sistema propio de generación de mapas que (al menos por ahora) no se puede igualar. Como mucho, con tiempo y paciencia puedes emular bastante. Tal que así: Adicionalmente, desde la versión 4.x se han cargado la posibilidad de dar color a los textos, que ahora siempre son negros. Así que si te quieres poner manos a la obra, prepara tiempo y a estudiar. Recuerda que en el manual de edición se explican bastantes tipos de líneas y su uso (pero no todos) y aquí tienes el ejemplo de cómo conseguir lo de arriba: Y esta es la fuente de información, que incluye la misión del tutorial: https://forum.il2sturmovik.com/topic/38416-the-perfect-map-gui/
  19. R: Aunque desde el propio cliente no se vea, ya solo te muestra los canales disponible (según configuración entre 5 y 25, y una o dos radios), las frecuencias son 251, 252... AM, empezando desde el canal 1.
  20. Así que cuando uses bloques con varios edificios dentro no los va a "ver". Va a apuntar una y otra vez al centro. Aunque haya bloques independientes en su interior, como son la torre del agua a la izquierda o el camión a la derecha tampoco los "ve". Calculo que porque el peso del bloque grande es mucho mayor a la hora de elgir objetivo. Eso es un comportamiento muy limitado y poco verosímil.
  21. Nueva versión: Dátil + NUEVO: Sistema de Objetivos y Victoria El sistema lleva cuenta de los objetivos secundarios conseguidos hasta la fecha (ver en Shift+Tab) y activa la victoria final alemana cuando se consiguen 4 de 5 [4 de 4 en el momento actual porque falta un objetivo que añadir] Si se alcanza el límite de tiempo sin victoria alemana, el sistema da la victoria a los británicos. + NUEVO: El convoy (naval) desaparece si alcanza alta mar, con mensaje triunfal. + Tiempo de partida fijado a 4h* + Corregidos todos los bugs de la anterior. + Los Stukas ya no pueden usar bombas de 250Kg (histórico) Nota*: este es el tiempo de partida para el que se diseñó desde el principio. En la versión Dátil falta añadir actividad alemana para la última hora y media. Es una falta conocida que se solucionará en la próxima versión.
  22. Pregunta de @Senet La misión del PWCG , creada con la última versión (la que incluye edificios en tierra destruibles), se congela durante la carga con este mensaje: Respuesta: El problema es un clásico. La misión está intentando cargar un objeto que no existe en la base de datos del programa. Generalmente un objeto antiguo que ha dejado de usarse en las versión del programa actual. El programa detiene su carga porque es incapaz de ignorar el objeto, no crearlo, y tirar adelante a ver que pasa [que sería como debería funcionar para evitar los cuelgues: avisar del error, ignorar y seguir]. En ocasiones das al aceptar y sigue, en otras no. Solución: La solución de estos errores siempre es la misma: localizar el objeto anticuado y sustituirlo por uno actual correcto. Para ello: 1. Abrimos en el Notepad++ el archivo .MISSION 2. Hacemos una búsqueda con el final de la cadena que ha dado el error "Blocks\smallwarehouse.txt" 3. Anotamos el número de bloque. 4. Nos aseguramos que no salga más veces la cadena en otros objetos. En el caso del ejemplo sólo sale una vez. 5. A partir de aquí queda sustituir los objetos "rotos". Si son muchos es mejor hacerlo desde el Noetpad++ con una simple sustitución de la cadena completa que no existe por la que sí que existe (la correcta). En este caso quería saber con seguridad qué objeto para conocer el motivo del error, así que lo hice gráficamente con el editor. a. Primero localicé el objeto sospechoso abriendo la .mission. Ahí puede ver que era aparentemente un objeto de escenografía. b. Luego busqué en el mismo punto en una mapa virgen de Kuban (para ello tuve que crear una misión, nueva cargar Kuban, y cargar las ciudades de Kuban) (NO se puede buscar en dos misiones diferentes por el número de índice porque NO VAN A COINCIDIR. Los índices se regeneran de cero al último objeto que haya, cada vez. Así que NO. En este caso hay que hacerlo por posicionamiento en el mapa.) c. Bien, ahora ya conocemos el model que hay que utilizar. REGRESAMOS con el editor a la misión del PW, buscamos de nuevo el objeto y únicamente le cambiamos el modelo. Nada más. d. Guardar la misión y listo. ARREGLADO -- ¿Cuál es el origen del problema? Se puede ver que el mapa que usa el Patrick Willson contiene varios edificios originalmente neutrales del mapa en Entidades con Nacionalidad: Tiene toda la pinta que para la nueva versión en la que hay misiones contra edificios el Sr. Patrick ha cogido varios edificios del mapa, los ha convertido en Entidad (para que existan "físicamente" y sean destruibles y no un mero modelo indestructible) y les ha dado Nacionalidad (para que no se considere daño en aliados, al disparar sobre ellos). Ha hecho esto para convertirlos en posibles objetivos de su generador de misiones. Bien, pues a partir de aquí sólo puedo especular con que la versión de los objetos con los que ha hecho esos cambios es antigua, o que mientras desarrollaba su nuevo sistema de objetivos el Sr. IL2 ha metido una actualización silenciosa de esos objetos. A partir de ahí el mapa de Kuban para el PWCG queda roto, porque siempre va a intentar cargar un objeto obsoleto. Es de pensar que pronto le llegarán noticias al Sr. Patrcik Willson y lo corregirá. PARCHE NO OFICIAL A LA VERSIÓN 11.10.0 La solución la dará el Sr. PW pero mientras (a tu propio riesgo, aunque no va a pasar nada) te propongo que cambies la plantilla de Mapa-de-Kuban-del-PWCG con el error a esta corregida. 1. Descarga el archivo. 2. Ves a la carpeta donde tengas instalado el PW, ves a la carpeta BoSData/Input/Kuban y sobreescribe el archivo del mismo nombre (GroundStructures.json) https://mega.nz/file/20YTwa7D#lgDMJuzH_X7Q3_G1Vj8upHNeJ3oIVA4b5fkOU5RCeOw Así se generará el objeto correcto, no el obsoleto.
  23. Ya está disponible la nueva versión: Coco. + Nuevo objetivo: Tráfico rodado. Las carreteras cercanas a la costa son transitadas por convoys de logística y tropas. El objetivo alemán es destruir 30 vehículos. El Führer ha ordenado específicamente que NO se ataquen las ambulancias, lo que causaría un resteo del contador de vehículos a cero. Se han puesto marcadores de objetivos en las zonas centrales de más tráfico, pero la zona de tránsito es mucho más amplia. El contador global (en el mapa, encima de la costa norte de Inglaterra) suma todos los vehículos destruidos, independientemente de la zona donde ha ocurrido (Norte, Centro, Sur).
  24. Sire

    Contador en Mapa

    Tres horas de esta mañana de domingo para hacer un contador en el mapa. Muy útil para misiones dogfight en las que hay que contar muchos pequeños objetivos manteniendo informados a los jugadores. CÓDIGO 1. Copia el texto de código en un archivo .TXT 2. Renómbralo Marcador.group INSTRUCCIONES 1. Pon el marcador donde te interese en el mapa (al menos los dos montones de iconos, que es lo que se va a mostrar) 2. Alimenta "IN Scoreboard" con lo que te interese contar. Que lo disfrutes
  25. 7. ¿Se podría poner tal avión o tal otro? La Batalla de Inglaterra es una campaña histórica: no se van a poner aviones que no fueran empleados, como tampoco se permiten configuraciones que no existieran en la época u objetivos anacrónicos, como que los británicos se fueran a bombardear en esa situación. Simular requiere reproducir con la mayor exactitud posible los recursos y las limitaciones, lo que establece el mismo contexto que los protagonistas tuvieron que afrontar. A través de sus ojos podemos comprender, mientras jugamos, por que hicieron lo que hicieron y por qué ocurrió de determinada manera. Si nos lo saltamos añadimos al cocktail variables cuya repercusión no podemos controlar. Se utilizan: 2 aviones de coleccionista (hurri y spit) 10,71€ y 4,11€, 2 aviones de Stalingrado 6,18€ (el 87 y el 111) y 3 aviones de la Batalla de Moscú 10,30€ (109, 110 y el 88). [Precios en rebajas, al momento de escribir esto] Recordad que West Kirby tiene todos los aviones a vuestra disposición en cualquier momento, eso sí fuera de la BdI.
×
×
  • Crear nuevo...