Cantina Halcones Rojos

Acceso Público => Taller => Mensaje iniciado por: Ootoito en Febrero 05, 2013, 01:48:05 pm

Título: Editor del Cliff of Dover
Publicado por: Ootoito en Febrero 05, 2013, 01:48:05 pm
Bueno pues manos a la obra.

1º ¿Que es un trigger? Pues de forma sencilla y como su traducción indica, un gatillo, algo que se desata, se produce, sucede dependiendo de unas condiciones establecidas...

2º ¿Que triggers tiene el COD? Por el momento y supongo que así quedará, lo que he encontrado es lo siguiente:

-TTime: Es un trigger que se dispara transcurrido un cierto numero de segndos, OJO SEGUNDOS, si queremos que sean minutos pues multiplicar por 60, es decir, 10 minutos son 600 segundos.

P.ej.:
TFusilo TTime 600; // pasados 10 minutos te fusilo

// lo que va detrás de // es un comentario y no se "ejecuta" como código, son comentarios para identificar y ayudar a la comprensión del codigo.

-TGroupDestroyed: Es un trigger que se dispara cuando cierto porcentaje de un grupo aviones o vehículos es destruido.

P.ej.:
THeMatao TGroupDestroyed Tu 50; // destruyen un 50% del grupo Tu


-TGroundDestroyed: Igual que el anterior, pero con la particularidad que los objetos destruidos estan dentro de un circulo establecido con unas coordenadas X,Y y un radio Z

P.ej.:
THeRebentao TGroundDestroyed 50 146394 197308 1500; // han rebentao un 50% de objetos en un circulo de radio 1500 en las coordenadas X146394 e Y197308

-TPassThrough: En este último caso, este trigger se activa dos veces, la primera cuando algún grupo indicado, entra en el radio del mismo, establecido por unas coordenadas X e Y y un radio Z, y otra cuando dicho grupo lo abandona...

P.ej.:
THeAvisao TPassThrough 1 Tu 226609 103789 7500; // El grupo Tu ENTRA en el circulo de radio 7500 ubicado en X226609 e Y103789

En este caso, creo, no estoy seguro, que el "1" puede variar para indicar si se ejecuta cuando "ENTRA" o cuando "ABANDONA" el trigger.

3º ¿Que podemos hacer con los triggers?
Bueno, pues aquí viene lo mejor, supongo que cuanto mas se aprenda mas cosas se podrán hacer con ellos, los triggers al fin y al cabo no son mas que la posibilidad de interactuar con la misión dependiendo de los eventos que vayan sucediendo en ella, es decir, de poder predecir unas acciones a tomar en el caso de que se produzcan otras previstas.

Un ejemplo. Supongamos que estamos en una patrulla sobre Londres, la estación de alerta nos avisa de bombarderos enemigos aproximandose a Londres con rumbo oeste a una altitud de 20.000 pies y activa a otros grupos que se encontraban en alerta temprana para apoyarnos.

Lo primero que haremos (cuando pueda lo acompaño con dibus al estilo Graino) será crear un trigger que detecte la presencia del grupo de bombarderos enemigos, lo llamaré TVienenLosMalos.

TVienenLosMalos TPassThrough 1 LW_He111_STG77 226609 103789 5000;

Bajo la etiqueta de [Triggers] en la mision aparecerá este trigger que como ya deberiais saber, detecta la entrada de un grupo llamado "LW_He111_STG77" en una posición X:226609 e Y:103789 con un radio de 5000 metros, para asegurarnos que pasan por ahí.

Ahora crearemos una acción para crear un vuelo de Spitfires que vendrán en nuestro socorro para la interceptación. Lo primero que haremos en el editor es crear el vuelo de los Spitfires y enviarles a donde se supone que deben ir, a los cielos de Londres. ES OBLIGATORIO, indicar que se trata de un grupo creado por script, para que no sea lanzado al comienzo de la misión, para ello debemos marcar la opcion "Script Spawn C" (no tengo la traducción aquí) al crear el grupo de Spitfires.

Hecho esto crearemos la acción de su "aparición milagrosa" en el editor. En el menú de scripts hay una pestaña de "Acciones" la única disponible por ahora :-), es la de crear grupos de la nada, spawngroups.

[Actions]
SpitisSalvadores ASpawnGroup 1 BoB_RAF_F_610Sqn_Early.01

Hecho esto, hay que decirle al "juego" que cuando el grupo de la LW entre en el trigger TVienenLosMalos ejecute la acción SpitsSalvadores. (también lo del mensaje que lo veremos ahora).
Esta parte la he cogido de una mision de Snafu, no se si el propio editor la crea o la debemos escribir nosotros en el editor de scripts del juego, supongo que es esta segunda, también lo puntualizaré, de todas formas la pongo para que la conozcais.

if ("TVienenLosMalos".Equals(shortName) && active)
   {

   GamePlay.gpHUDLogCenter("Aviones de la Luftwaffe localizados al este de Londres, enviamos apoyo");
        AiAction action = GamePlay.gpGetAction("SpitisSalvadores");
          if (action != null)
                {
                     action.Do();
                }
                GamePlay.gpGetTrigger(shortName).Enable = false;     

   }

Como veis, en el IF se evalua si el TVienenLosMalos se ha activado y en caso afirmativo entra dentro de las llaves para ejecutar:

1º GamePlay.gpHUDLogCenter("mensaje al chat") Envia un mensaje a la pantalla, supongo que hay un sistema para diferenciar entre mensajes a la RAF o a la LW, pero no tengo claro cual es todavía, estoy empezando.

2º AiAction action = GamePlay.gpGetAction("SpitisSalvadores"); Solicita se ejecute la acción con nombre "SpitsSalvadores" y recoge el resultado en la variable "action".

3º Evalua si la variable "action" NO ha devuelto un NULL, si devuelve un NULL es que no existe en la mision, es decir, que en la etiqueta [Actions] no hay ninguna acción con este nombre, una letra puede echar al traste el script, si por ejemplo se nos cuela una S y en lugar de SpitsSalvadores escribimos SSpitsSalvadores, devolverá NULL y por lo tanto no entrará dentro de las llaves del if (action != null)
En caso de no ser NULL es que existe la accion y entonces la ejecuta action.Do();

4º Al ejecutar la acción, el grupo de Spits que habiamos creado y que no se había activado, pues estaba a la espera de ser activado por código, recibirá el visto bueno y aparecerá en la mision, en el primer punto de vuelo que le hayamos dicho con los datos tal y como los crearamos en el editor...

Con esto habremos conseguido detectar la llegada a un punto de los bombarderos de la LW, enviar un mensaje de alerta y enviar grupos de apoyo a dicha interceptación.

Ahora podeís imaginar por ejemplo si divido el canal en zonas, en cada una pongo un Trigger de activación y una acción para cada uno de ellos... dependiendo de donde se detecte el grupo enemigo aparecerá un mensaje y se tomarán o no acciones en consecuencia... como si fuera un sistema de radar.

:-)

En el próximo capitulo explicaremos la reproducción de la oruga araña, que no muerde, sino araña.  :M8:

P.d.: Yo no he profundizado todavía en el editor, estoy como quien dice aprendiendo, pero si engancho a otros a probar estas cosas puede que creemos un grupo de edición y creación de misiones, aprendiendo todos de todos ... :-)

Título: Re:Editor del Cliff of Dover
Publicado por: Grainovich en Febrero 05, 2013, 07:48:44 pm
mmmm... eso mismo ;D , a partir de ahora el que diga que no sabe crear misiones le fusilamos 5 veces!! con 5 triggers que avisen de su maltrecha situación y con do.action al final para hacer respawn de los enterradores que vengan a llevarselo ;D

pd: reveeeeeeeeentaaaaaaaaaaaaaaaaaaaoooooooooooooooooooooooooooooo!!!!!

ppd: Por cierto, efectivamente, los mensajes se pueden enviar al bando que queramos, incluso a un player en particular, se puede hacer lo que se quiera...
Título: Re:Editor del Cliff of Dover
Publicado por: Barripower en Febrero 06, 2013, 09:45:22 am
Ah, ahora lo entiendo todo, sí  :M8:
Título: Re:Editor del Cliff of Dover
Publicado por: Stalin en Febrero 06, 2013, 10:17:31 am
[Actions]
SpitisEsomepasatambienami,  :nt: ASpawnGroup 1 BoB_RAF_F_610Sqn_Early.01

if ("TVienenLosMalos".Equals(shortName) && active)
   {

   GamePlay.gpHUDLogCenter("Aviones de la Luftwaffe localizados al este de Londres, enviamos apoyo");
        AiAction action = GamePlay.gpGetAction("SpitisSalvadores");
          if (action != null)
                {
                     action.Do();
                }
                GamePlay.gpGetTrigger(shortName).Enable = false;     

   }
Título: Re:Editor del Cliff of Dover
Publicado por: Ootoito en Febrero 06, 2013, 02:30:12 pm
Saludos,

Maricas.

Graino, ¿como usas el log? ¿tienes que activarlo en el conf.ini para que lo grabe? algo como log=1 donde pone log=0 ...

En este hilo (http://forum.1cpublishing.eu/showthread.php?t=28997) parece que muestra otra forma de "comprobar errores del script"
Título: Re:Editor del Cliff of Dover
Publicado por: Grainovich en Febrero 06, 2013, 03:46:04 pm
No lo tienes siempre activado por defecto? ;D , no se... yo siempre lo he tenido ahí...

Lo que muestra ese hilo es lo del editor ese cachipiruli que comentó Nag y es el que uso, sobre todo para añadir las librearías del COD y conocer los parámetros de los objetos, lo de los errores es que te lo escupe directamente al log.txt  , esta noche lo miro a ver donde tengo yo eso del log=1 y si existe algo asi...
Título: Re:Editor del Cliff of Dover
Publicado por: Grainovich en Febrero 06, 2013, 08:25:10 pm
Oto, yo tengo esto en el confs.ini

Código: [Seleccionar]
[Console]
IP=20000
IPS=
LOG=0
LOGTIME=0
LOGFILE=logs.txt
HISTORY=128
HISTORYCMD=128
WRAP=1
PAUSE=1
PAGE=20
LOGKEEP=1

Es curioso porque tengo log=0 pero siempre lo he tenido.. igual 0 es tenerlo y 1 quitarlo ;D
Título: Re:Editor del Cliff of Dover
Publicado por: Naglfar en Febrero 06, 2013, 08:33:08 pm
O igual es porque el confs.ini es la configuracion del server dedicado :iOi:
Título: Re:Editor del Cliff of Dover
Publicado por: Grainovich en Febrero 06, 2013, 08:41:49 pm
O igual es porque el confs.ini es la configuracion del server dedicado :iOi:

Pero cuando lanzaba el server dedicado tambien tenía siempre el log.txt  :iOi:

Edito: No se como coño se me ha cambiado, igual fue al hacer las últimas pruebas, pero la muy puta de Nag tiene razón ;D , Oto, en el conf.ini

Citar

[Console]
  IP=20001
  UseStartLog=1
  WRAP=1
  PAUSE=1
  HISTORY=1024
  HISTORYCMD=1024
  PAGE=20
  LOG=1
  LOGTIME=1
  LOAD=console.cmd
  SAVE=console.cmd
  LOGFILE=log.txt
  LOGKEEP=1


Zorra!!  :w:

Oyep, y ya que estamos, lo del PAUSE alguien sabe que es?
Título: Re:Editor del Cliff of Dover
Publicado por: Naglfar en Febrero 06, 2013, 09:25:07 pm
Pero cuando lanzaba el server dedicado tambien tenía siempre el log.txt  :iOi:

Si, el log.txt que te generaba tu CoD lanzado normal al conectarse a tu servidor dedicado :iOi:
Título: Re:Editor del Cliff of Dover
Publicado por: Grainovich en Febrero 07, 2013, 08:02:05 am
Si, el log.txt que te generaba tu CoD lanzado normal al conectarse a tu servidor dedicado :iOi:

Si.. bueno... vale.. tienes razón... puta!  :iOi:
Título: Re:Editor del Cliff of Dover
Publicado por: Ootoito en Febrero 11, 2013, 10:11:05 am
Saludos,

Un truco que he descubierto y que utilizo con mucha frecuencia.

Muchas veces es necesario calcular cuando un avión llega a un punto, por ejemplo si se trata de un avión con el cual debemos reunirnos en mitad del mar del norte, suelo situar un barco, que luego borro, en el punto de reunión. La misión debe ser configurada con una hora exacta, digamos las 12:00h. Creo la ruta de dicho avión y pongo un punto cerca del barco. De esta forma obtengo un tiempo aproximado de cuando pasará el avión sobre el barco, pero este tiempo es muy impreciso, aunque le digamos que vuele a una velocidad asequible para aparato, no suelen ser muy puntuales con los tiempos dados en dichos puntos, y para ser precisos es este "truco". Tened en cuenta que si le decimos a un Tiger que vuele a 300km/h y el sim no tiene puesta como máxima velocidad 280, los puntos de ruta se calcularan como si el avión volara a 300Km/h, cosa del todo imposible para un Tiger.

Tenemos un barco.
Un avión con puntos de ruta. (hora aproximada de paso 12:15)

No podemos utilizar un crono, a no se que nos peguemos esperando los 15 minutos para asegurarnos de que el avión llega en el tiempo que dice el editor, podríamos jugar con la velocidad de los puntos buscando una asequible para el avión, pero esto lleva mucho tiempo. Usar la aceleración de tiempo impide el uso de un crono, a no ser que algún colgado se dedique a contar los segundos y multiplicarlos por 8 desde el comienzo del momento en que alcanza esta velocidad pulsando la aceleración de tiempo.

El truco consiste en situar un avión pilotado por el jugador, acelerar el tiempo y cuando el avión estee sobre el barco darle a pause. Entonces en la cabina del piloto se mira el reloj de cabina y se observa la hora, este tiempo es exacto al transcurrido de mision e independiente de la velocidad a la que situemos la simulación. En mis pruebas los aviones siempre llegan a la hora acordada ajustandolos con este sistema.

Es útil en muchos casos, para reuniones, emboscadas, bombardeos, despegues en mitad de un ataque, etc, etc, etc.

Ahí lo dejo por si a alguno le viene bien.
Título: Re:Editor del Cliff of Dover
Publicado por: Grainovich en Febrero 11, 2013, 08:05:40 pm
pero que reventao por dios!!   :XDDDD:
Título: Re:Editor del Cliff of Dover
Publicado por: Barripower en Febrero 12, 2013, 09:37:20 am
Jeje, yo también hice eso mismo para una reunión en las misiones de instrucción
Título: Re:Editor del Cliff of Dover
Publicado por: Ootoito en Febrero 12, 2013, 01:10:30 pm
Jeje, yo también hice eso mismo para una reunión en las misiones de instrucción
Creo que son interesantes estos trucos, de esta forma a veces uno encuentra formas de plasmar cosas que de otra forma se pueden alargar buscando soluciones.

Anoche terminé otra misión, aunque es una cosa general, en el sistema Snafu, se suele dar como objetivo completo si un recon de regreso llega hasta un punto, digamos sobre la base donde debe aterrizar, entonces ese recon se supone que ha aterrizado.
La duda me surgió pues para un grupo de bombarderos, el objetivo está en destruir un blanco, o en regresar del bombardeo. Se puede comprobar que porcentaje de aparatos regresan, y dar un mensaje dicendo que los bombarderos han llegado, ¿pero se puede dar el caso de que ambos bandos consigan el exito de sus misiones?
Digamos que para los rojos el exito se haya calculado para derribar un 75% de un grupo de bombarderos, digamos que son 9.
Para los azules el éxito será bombardear unos objetivos y destruir al menos el 50%.
Pues bien, ambos serian exitosos si los azules destruyen ese porcentaje y los rojos tras bombardear regresan mas del 75% ... ¿es correcto? pues imagino que si, se establecen unos objetivo, no quiere decir que se trate de  blanco o negro, simplemente que cada grupo cumpla con lo especificado.

Una duda que me ha surgido, es que si establecemos un 75% de bombarderos destruidos de una formación de 9, que deben ser formados por 3 vuelos de 3, del mismo escuadron y distintas escuadrillas, al indicar en el trigger el porcentaje de destrucción este lo calcula con respecto al "grupo" que seleccionemos, 1 de esos 3, o con respecto a la escuadrilla? si es esto ultimo la solución es sencilla, y si no Graino que me corrija, pero si establezco 3 triggers, cada uno a un grupo con un 66% de destrucción, es decir 2 de cada grupo, y los concateno en la misma condicion:

if (TriggerGrupo1Destroy)&&(TriggerGrupo2Destroy)&&(TriggerGrupo3Destroy) then
Objetivo red conseguido

6.75 de 9 son un 75%, no se si detectará la destrucción de 6 ó 7 bombarderos, peo es una forma de conseguir establecer porcentajes de objetivos de formaciones superiores a 3
Título: Re:Editor del Cliff of Dover
Publicado por: Barripower en Febrero 12, 2013, 04:36:42 pm
Pues yo no lo veo claro, en ese caso que comentas el éxito aliado debería partir de la destrucción de ese 75 % de aparatos enemigos, pero con la condición de que ellos no cumplan su objetivo (destruir el 50% de sus objetivos). Entiendo que la misión de interceptación de bombarderos nunca puede considerarse un éxito si no se evita el bombardeo.

Y al revés, los bombarderos creo que cumplen si el bombardeo es éxitoso, con independencia del número de aparatos que vuelvan, al menos en términos tan básicos de ganar/perder la misión.

Sin embargo, en un reconocimiento sí parece imprescindible que el avión vuelva a base para entender cumplida la misión, pues lógicamente debe regresar con la información y material fotográfico obtenido
Título: Re:Editor del Cliff of Dover
Publicado por: Ootoito en Febrero 12, 2013, 05:50:38 pm
Saludos,

Efectivamente, si las ordenes de la RAF son evitar el bombardeo, si este se produce no han cumplido con su objetivo, pero si sus ordenes son diezmar los bombarderos enemigos, y si es posible evitar el bombardeo... ("Prefiero derribar 50 aunque hayan conseguido sus objetivos que 10 antes de conseguirlo...no olvide que sus objetivos son mis campos de aviación Lee Malory, además no derriba usted 50, ni siquiera 10... (The Battle of Britain 1:11)") si derriban un porcentaje de los mismos se puede entender como conseguida, o se puede indicar que además de eso la LW no destruya un X% del objetivo de tierra encomendado, pues también...

En realidad el código en el .cs es así

if (("TriggerGrupo1Destroy".Equals(shortName) && active) && ("TriggerObjetivoLWDestroy".Equals(shortName) && !active)) entonces

Que yo entiendo como si ("TriggerGrupo1Destroy".Equals(shortName) && active se ha cumplido y por lo tanto está activo o en true y  ("TriggerObjetivoLWDestroy".Equals(shortName) && !active) (!active, no estoy seguro de que sea así) no se ha cumplido y por lo tanto sigue !active (lo contrario de activo) es que se han destruido X% de bombarderos enemigos y NO se ha destruido el % de objetivo de la LW ..

A ver si Graino me aclara lo del !active ... o hago una prueba en el editor... si no se entiende lo que escribo, que me ha costado Dios y ayuda, es porque estoy rebentado y casi no he dormido...  :XDDDD: :XDDDD:

Vamos lo que quiero decir es que dependiendo de lo que quieras plantear como tu objetivo se puede establecer. Yo creo que es posible que en una mision ambos bandos cumplan sus objetivos sin necesidad de que ninguno salga ganador.
Título: Re:Editor del Cliff of Dover
Publicado por: Grainovich en Febrero 12, 2013, 07:38:17 pm
mmm.. no estoy seguro Maese, pero creo que el !active no se refiere a que si NO se ha conseguido la condición del trigger, ya que de lo contrario, estaría "saltando" todo el tiempo.

El active creo que nos dice que el trigger "sigue a la escucha",  por eso podemos desactivarlo luego con el:

GamePlay.gpGetTrigger(shortName).Enable = false;

Y lo que hacemos ahí es desactivarlo, entonces cuando se vuelva a disparar entraría de nuevo a la función, pero su "active" sería false.

Es una programación un poco rara la verdad, si se desactiva un trigger no tendría que dispararse y ejecutar el evento ... pero en fin...  :M8:

Todo lo expuesto... "creo" que es asi ;D
Título: Re:Editor del Cliff of Dover
Publicado por: Ootoito en Febrero 12, 2013, 09:21:08 pm
mmm.. no estoy seguro Maese, pero creo que el !active no se refiere a que si NO se ha conseguido la condición del trigger, ya que de lo contrario, estaría "saltando" todo el tiempo.

El active creo que nos dice que el trigger "sigue a la escucha",  por eso podemos desactivarlo luego con el:

GamePlay.gpGetTrigger(shortName).Enable = false;

Y lo que hacemos ahí es desactivarlo, entonces cuando se vuelva a disparar entraría de nuevo a la función, pero su "active" sería false.

Es una programación un poco rara la verdad, si se desactiva un trigger no tendría que dispararse y ejecutar el evento ... pero en fin...  :M8:

Todo lo expuesto... "creo" que es asi ;D

Si, he salido a correr y lo he estado pensndo, me faltaba algo, y creo que para evitar precisamente que estee todo el rato saltando lo que falta es que el tiempo transcurrido de mision sea superior a X, por ejemplo 50 minutos, en ese tiempo los bombarderos supervivientes, no estaran en disposición, casi seguro de atacar el objetivo o de ser destruidos... un 3º &&

Coño, tengo que probarlo, esta noche mismo lo hago, le meto un tiempo de 10 minutos tras el comienzo de la mision, y a ver que pasa, esta es la forma de aprender...
Título: Re:Editor del Cliff of Dover
Publicado por: Ootoito en Febrero 13, 2013, 08:55:08 am
Saludos,

Un tutorial sobre C# de Guille. (http://www.elguille.info/NET/cursoCSharpErik/index.htm)