Página 1 de 1
CMANO - Lenguaje LUA
Publicado: 22 Nov 2014, 17:34
por PijusMagnificus
Estos días andamos liados los testeadores para lo que será un próximo parche v1.06 que incluirá muchas, pero que muchas novedades, una de ellas es la introducción del lenguaje LUA en el editor de eventos, Tomcat84 ha creado un pequeño tutorial con video que puede verse aquí
http://www.matrixgames.com/forums/tm.asp?m=3745517
En cuanto acabe con la tarea en la que estoy liado de adaptar todos los escenarios del Community Package (van casi 170 escenarios) a la nueva versión, incluyendo unas mejoras en el tema aéreo que va a revolucionar, si cabe más, el simulador; me pondré a realizar un tutorial en castellano con todas las novedades.
Re: CMANO - Lenguaje LUA
Publicado: 23 Nov 2014, 11:47
por PijusMagnificus
Aquí
http://wiki.baloogancampaign.com/index.php/CommandLua
Encontrareis un listado de las funciones de LUA que hay de momento para Command, así como 3 tutoriales de su uso...irán saliendo muchas más funciones para utilizar.
Reference[edit]
Command Lua API
Function Name
Description
ScenEdit_SetWeather Set temperature, rainfall, cloud percentage and sea state.
ScenEdit_AddAircraft Creates a new aircraft in flight.
ScenEdit_AddShip Creates a new ship.
ScenEdit_AddSubmarine Creates a new submarine.
ScenEdit_AddFacility Creates a new facility.
ScenEdit_AssignUnitToMission Assigns a unit to a specified mission.
ScenEdit_SetSidePosture Sets the posture between two sides.
ScenEdit_SetEMCON Sets the state of the EMCON inheritable settings for a side, a missions, a group or a unit.
ScenEdit_RunScript Runs a script in your Lua directory.
ScenEdit_SetKeyValue Saves a variable into the scenario file.
ScenEdit_GetKeyValue Retrieves a variable from the scenario file.
ScenEdit_AddUnit Adds a unit.
ScenEdit_SetUnit Modifies a unit.
ScenEdit_DeleteUnit Deletes a unit.
ScenEdit_AddReferencePoint Adds a reference point.
ScenEdit_SetReferencePoint Modifies a reference point.
ScenEdit_DeleteReferencePoint Deletes a reference point.
print Evaluates an expression and writes it to the console window.
Re: CMANO - Lenguaje LUA
Publicado: 23 Nov 2014, 12:20
por Bandura
Esto va a dar muchísimo juego

Re: CMANO - Lenguaje LUA
Publicado: 23 Nov 2014, 22:42
por Iosef
Re: CMANO - Lenguaje LUA
Publicado: 11 Dic 2014, 12:48
por Rasputino
En cierta ocasión pregunte por qué estaba la librería de LUA presente. Veo que era porque no estaba implementada todavía, pero lo tenían previsto desde el principio.
Este lenguaje hará que los diseñadores de escnarios hagan autenticas maravillas de escenarios. Este lenguaje, LUA, es muy potente, liviano y sencillo.
Re: CMANO - Lenguaje LUA
Publicado: 18 Dic 2014, 11:54
por PijusMagnificus
Empiezo a ir presentando funciones del lenguaje LUA para su uso en CMANO con posibles ideas de su uso, (las que se me ocurren a mí), por supuesto quiero que esto sea un foro donde se vayan exponiendo ideas y ejemplo de uso por parte de todos los que lo deseen.
ScenEdit_SetWeather([Average Temperature], [Rainfall Rate (0-50)], [Cloud Percentage (0.0 - 1.0)], [Sea State (0 - 9)])
Esta función se puede utilizar (como todas las funciones LUA de C:MANO) en una acción de un evento.
Ejemplos:
ScenEdit_SetWeather(10, 20, 0.5, 3)
Aquí sería, temperatura media 10 ºC, lluvia 20, porcentaje de nubes 50%, estado viento/mar 3
ScenEdit_SetWeather(math.random(0,25), math.random(0,50), math.random(0,10)/10.0, math.random(0,9))
Aquí todo es aleatorio
ScenEdit_SetWeather( 5, math.random(0,50), math.random(0,10)/10, 4)
En este ejemplo la temperatura y estado de mar/viento está fijado pero no así la lluvía y nubes; se puede realizar cualquier combinación.
Se puede utilizar en conjunción con un evento que se activa al cargar el escenario, utilizando el nuevo trigger ScenarioLoad; o utilizando eventos con trigger de tiempo fijo o aleatorio para ir cambiando de manera prefijada o aleatoriamente las condiciones atmosféricas.
Re: CMANO - Lenguaje LUA
Publicado: 18 Dic 2014, 12:10
por Iosef
Re: CMANO - Lenguaje LUA
Publicado: 18 Dic 2014, 12:13
por PijusMagnificus
Otra función LUA muy útil y permite simular muchas situaciones es:
ScenEdit_SetSidePosture (NombrebandoA, NombrebandoB, postura)
Las posibles posturas son:
F Friendly Amigo
H Hostile Hostil
N Neutral Neutral
U Unfriendly No-amigos
supongamos que tenemos dos bandos BUENOS, MALOS y que el bando BUENOS contemple al bando MALOS como neutrales y la vez el bando MALOS contemple al bando BUENO como enemigo, podríamos en un evento como acción lo siguiente
utilizariamos
ScenEdit_SetSidePosture("BUENOS", "MALOS", "N")
ScenEdit_SetSidePosture("MALOS", "BUENOS", "H")
Re: CMANO - Lenguaje LUA
Publicado: 18 Dic 2014, 20:14
por PijusMagnificus
JapShipSunk = 0
ScenEdit_SetKeyValue('JapShipS', JapShipSunk)
FSXDestroyed=0
ScenEdit_SetKeyValue('FSXD', FXSDestroyed)
La función ScenEdit_SetKeyValue('Key', 'value') permite asignar a una variable global y persistente (se salva con el escenario y su puede utilizar en cualquier momento) un valor.
En el ejemplo de arriba que lo he sacado de un escenario, que estamos haciendo Iosef y yo, creamos dos variables globales que utilizamos para comprobar el número de barcos japoneses destruidos y de aviones FSX destruidos, estas funciones están puestas con un evento ScenarioLoaded para inicializar las variables a 0.
Cada vez que un barco japonés es destruido se incrementa la variable JapShipS con el script
JapShipSunk = tonumber(ScenEdit_GetKeyValue('JapShipS'))
JapShipSunk = JapShipSunk + 1
ScenEdit_SetKeyValue('JapShipS', JapShipSunk)
La primera línea recupera el valor de la variable en forma número utilizando para ello la función ScenEdit_GetKeyValue, la segunda línea lo incrementa en 1 y la tercera línea vuelve a colocar el valor nuevo de la variable.
En el escenario del que hablo esto lo utilizamos para contar las unidades de superficie que pierde una formación japonesa, cuando supera un número a esta formación se le cambia la misión a una de patrulla lejana de la zona de conflicto para simular que huye para ponerse a salvo.
El script completo utlizando el ScenEdit_AssignUnitToMission es
JapShipSunk = tonumber(ScenEdit_GetKeyValue('JapShipS'))
JapShipSunk = JapShipSunk + 1
ScenEdit_SetKeyValue('JapShipS', JapShipSunk)
if JapShipSunk > 2 then
ScenEdit_AssignUnitToMission('DDH Group', 'M_Jap_Retire')
end
Que traducido es "si la formación DDH Group pierde mas de 2 unidades se le asigna la misión M_Jap_Retire.
Re: CMANO - Lenguaje LUA
Publicado: 24 Dic 2014, 07:55
por PijusMagnificus
La función ScenEdit_SetUnit permite cambiar los parámetros de una unidad, en este ejemplo la utilizamos para cambiar la proficiency (calidad); la misma va de 1 a 5 (Novice, Cadet, Regular, Veteran, Ace).
El script de abajo lo utilizamos Iosef y yo en un escenario que estamos ultimando; la idea es que cuando el 203 Escuadrón de Caza japonés pierde la mitad de sus aparatos baja la proficiency de los restantes, con esto queremos simular el efecto sobre la moral de los restantes pilotos del escuadrón que representa las altas pérdidas en el mismo.
El script forma parte de un evento que se dispara cada vez que un F15J es destruido, hay una variable global o KeyValue que lleva el control del número de F15J nipones destruidos, es 'F15JD', se comprueba si es mayor de 5 y si lo es, se ejecuta la función local SetProficiency que realiza el cambio de proficiency de cada aparato a 2 (Cadet), previamente se comprueba con if unit ~= nil que la unidad a la que se quiere hacer el cambio aun existe (no ha sido destruida) ya que si se intenta aplicar la función ScenEdit_SetUnit a un unidad nula (no existente) daría un error durante el juego.
Esto es un ejemplo de uso de ScenEdit_SetUnit, iremos viendo otros.
F15JDestroyed = tonumber(ScenEdit_GetKeyValue('F15JD'))
F15JDestroyed = F15JDestroyed + 1
ScenEdit_SetKeyValue('F15JD', F15JDestroyed)
if F15JDestroyed > 5 then
function SetProficiency(side_name,unit_name,set_proficiency)
local unit = ScenEdit_GetUnit({side=side_name,name=unit_name,proficiency=unit_proficiency})
if unit ~= nil then
ScenEdit_SetUnit({side=side_name,name=unit_name,Proficiency=set_proficiency})
end
end
profSquadron=2
SetProficiency('Japan', '203SQN #1', profSquadron)
SetProficiency('Japan', '203SQN #2', profSquadron)
SetProficiency('Japan', '203SQN #3', profSquadron)
SetProficiency('Japan', '203SQN #4', profSquadron)
SetProficiency('Japan', '203SQN #7', profSquadron)
SetProficiency('Japan', '203SQN #8', profSquadron)
SetProficiency('Japan', '203SQN #9', profSquadron)
SetProficiency('Japan', '203SQN #10', profSquadron)
SetProficiency('Japan', '203SQN #11', profSquadron)
SetProficiency('Japan', '203SQN #12', profSquadron)
end