CMANO - Lenguaje LUA

CMANO - Command Modern Air/Naval Operations
Harpoon, etc

Moderadores: Hetzer, Moderadores Wargames

Responder
PijusMagnificus
Crack - Oberst
Crack - Oberst
Mensajes: 2845
Registrado: 05 Mar 2011, 08:25
STEAM: Jugador
Ubicación: Dandole caña a Incontinencia Suma

CMANO - Lenguaje LUA

Mensaje 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.
Otros nicks: Meroka37
PijusMagnificus
Crack - Oberst
Crack - Oberst
Mensajes: 2845
Registrado: 05 Mar 2011, 08:25
STEAM: Jugador
Ubicación: Dandole caña a Incontinencia Suma

Re: CMANO - Lenguaje LUA

Mensaje 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.
Otros nicks: Meroka37
Avatar de Usuario
Bandura
Crack - Oberst
Crack - Oberst
Mensajes: 3425
Registrado: 26 Ene 2004, 19:04
STEAM: Jugador
Ubicación: En las faldas del Teide

Re: CMANO - Lenguaje LUA

Mensaje por Bandura »

Esto va a dar muchísimo juego :shock:
Imagen
Avatar de Usuario
Iosef
Crack - Oberst
Crack - Oberst
Mensajes: 8686
Registrado: 13 Oct 2003, 16:47
STEAM: No Jugador
Ubicación: Lanza rota (IC)
Contactar:

Re: CMANO - Lenguaje LUA

Mensaje por Iosef »

Que locura, cuesta seguir el ritmo. :aplauso: :aplauso: :aplauso: :aplauso:
Rasputino
Conscript - Gefreiter
Conscript - Gefreiter
Mensajes: 88
Registrado: 04 Ago 2007, 20:15
STEAM: No Jugador
Ubicación: Valladolid

Re: CMANO - Lenguaje LUA

Mensaje 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.
PijusMagnificus
Crack - Oberst
Crack - Oberst
Mensajes: 2845
Registrado: 05 Mar 2011, 08:25
STEAM: Jugador
Ubicación: Dandole caña a Incontinencia Suma

Re: CMANO - Lenguaje LUA

Mensaje 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.
Última edición por PijusMagnificus el 18 Dic 2014, 12:15, editado 1 vez en total.
Otros nicks: Meroka37
Avatar de Usuario
Iosef
Crack - Oberst
Crack - Oberst
Mensajes: 8686
Registrado: 13 Oct 2003, 16:47
STEAM: No Jugador
Ubicación: Lanza rota (IC)
Contactar:

Re: CMANO - Lenguaje LUA

Mensaje por Iosef »

:babas: :babas: :babas:
PijusMagnificus
Crack - Oberst
Crack - Oberst
Mensajes: 2845
Registrado: 05 Mar 2011, 08:25
STEAM: Jugador
Ubicación: Dandole caña a Incontinencia Suma

Re: CMANO - Lenguaje LUA

Mensaje 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")
Otros nicks: Meroka37
PijusMagnificus
Crack - Oberst
Crack - Oberst
Mensajes: 2845
Registrado: 05 Mar 2011, 08:25
STEAM: Jugador
Ubicación: Dandole caña a Incontinencia Suma

Re: CMANO - Lenguaje LUA

Mensaje 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.
Otros nicks: Meroka37
PijusMagnificus
Crack - Oberst
Crack - Oberst
Mensajes: 2845
Registrado: 05 Mar 2011, 08:25
STEAM: Jugador
Ubicación: Dandole caña a Incontinencia Suma

Re: CMANO - Lenguaje LUA

Mensaje 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
Otros nicks: Meroka37
Responder