Funciones Lua Blitzkrieg 1

30

Click here to load reader

Transcript of Funciones Lua Blitzkrieg 1

Page 1: Funciones Lua Blitzkrieg 1

Funciones LUA para Blitzkrieg 1por ElGotele, junio 2007

traducción libre de los documentos

Aide sur les commandes Lua pour BlitzKriegVersion 1.5

BlitzKrieg Guide to Programming Lua functionsVersion 1.6

deCalvin

Page 2: Funciones Lua Blitzkrieg 1

Índice de contenidoLista de funciones ........................................................................................................................... 5Principios basicos relativos a la IA.............................................................................................. 6Descripción de funciones............................................................................................................... 7

AddIronMan(iScriptID)............................................................................................................ 7ChangeFormation(iScriptID, iFormation).............................................................................. 7ChangePlayer(iScriptID, iParty).............................................................................................. 7ChangeWarFog(iParty)............................................................................................................... 7Cmd ou GiveCommand : Cmd(iAction, iScriptID [,params, ...])......................................... 8

iAction = 0 - MOVE TO - Cmd(0, iScriptID, x, y).......................................................... 8iAction = 1 - ATTACK UNIT - Cmd(1, iScriptID, iScriptID_Cible)........................... 8iAction = 2 - ATTACK OBJECT or ATTACK NON UNIT OBJECT : Cmd(2, ....).....8iAction = 3 - SWARM TO : Cmd(3, iScriptID, x, y).......................................................8iAction = 4 - LOAD UNIT : Cmd(4, iScriptID, iScripID_Cible)................................. 8iAction = 5 - UNLOAD UNIT : Cmd(5, iScriptID, x, y)................................................ 9iAction = 6 - ENTER TO BUILDING : Cmd(6, iScriptID, iScriptID_Cible)............ 9iAction = 7 - LEAVE BUILDING : Cmd(7, iScriptID, x, y)......................................... 10iAction = 8 - ROTATE TO : Cmd(8, iScriptID, x, y).................................................... 10iAction = 9 - STOP : Cmd(9, iScriptID).......................................................................... 10iAction = 10 - PARADE : Cmd(10, iScriptID, iParade)................................................. 10iAction = 11 - PLACEMINE : Cmd(11, iScriptID, x, y).................................................. 10iAction = 12 - CLEAR MINE : Cmd(12,..)..........................................................................10iAction = 13 - GUARD : Cmd(13, ...).................................................................................. 10iAction = 14 - AMBUSH : Cmd(14, iScriptID)................................................................10iAction = 15 - RANGE AREA : Cmd(15, iScriptID, x, y).............................................. 10iAction = 16 - SUPRESSIVE FIRE : Cmd(16, iScriptID, x, y).....................................11iAction = 17 - INSTALL : Cmd(17, iScriptID)................................................................ 11iAction = 18 - UNINSTALL : Cmd(18, iScriptID).......................................................... 11iAction = 19 - CALL BOMBERS : Cmd(19, Avion_iScriptID, iParty, x, y)................ 11iAction = 20 - CALL FIGHTERS : Cmd(20, Avion_iScriptID, iParty, x , y).............11iAction = 21 - CALL SCOUT : Cmd(21, Avion_iScriptID, iParty, x, y)...................... 11iAction = 22 - CALL PARADROP : Cmd(22, Avion_iScriptID, iParty, x, y)............. 11iAction = 23 - RESUPLY UNITS : Cmd(23, ...)............................................................... 11iAction = 24 - REPAIR UNIT : Cmd(24, ...).................................................................... 12iAction = 29 - USE SPY GLASS : Cmd(29, iScriptID, x, y)........................................12iAction = 31 - TAKE ARTILLERY : Cmd(31, iScript, iSCriptArtillery).................... 12iAction = 32 - DEPLOY ARTILLERY : Cmd(32, iScript, x, y)..................................... 12iAction = 34 – DISBAND SQUAD : Cmd(34, iScriptID)............................................ 12iAction = 35 – FORM FORMATION : Cmd(35, iScriptID, ....)................................... 12iAction= 36 - CALL GROUND ATTACK PLANE: Cmd(36, Avion_iScriptID, iParty, x, y).......................................................................................................................................... 13

Page 3: Funciones Lua Blitzkrieg 1

iAction = 39 – FOLLOW : Cmd(39, iScriptID, iScript_Cible)....................................13iAction = 43 - RESUPLY HUMANS : Cmd(43, ...).......................................................... 13iAction = 45 – ENTRENCH SELF : Cmd(45, ...).............................................................. 13iAction = 46 – CHANGE SHELL TYPE : Cmd(46, ...)..................................................... 13

DamageObject(iScriptID, fDamage).................................................................................... 13DeleteReinforcement(iScriptID).......................................................................................... 13DisableAviation(iParty, iAviationType)................................................................................ 14DisplayTrace(strText [, params, ...]).................................................................................... 14Draw()........................................................................................................................................... 14EnableAviation(iParty, iAviationType).................................................................................. 14GetActiveShellType(iScriptID)............................................................................................. 14GetAviationState(iPlayer)....................................................................................................... 15GetFGlobalVar(strGlobalVarName, 0).................................................................................. 15GetFrontDir(iScriptID)........................................................................................................... 15GetIGlobalVar(strGlobalVarName,0)................................................................................... 15GetMapSize()............................................................................................................................. 15GetNAmmo(iScriptID)............................................................................................................. 15GetNAntitankInScriptArea(strScriptAreaName)........................................................... 16GetNAPFencesInScriptArea(strScriptAreaName).......................................................... 16GetNFencesInScriptArea(strScriptAreaName)............................................................... 16GetNMinesInScriptArea(strScriptAreaName)................................................................. 16GetNScriptUnitsInArea(iScriptID, strScriptAreaName)............................................. 16GetNTrenchesInScriptArea(strScriptAreaName).......................................................... 16GetNUnitsInArea(iPlayer, strScriptAreaName)............................................................... 16GetNUnitsInCircle(iPlayer, X, Y, Radius)............................................................................ 16GetNUnitsInParty(iPlayer)..................................................................................................... 17GetNUnitsInPartyUF(iParty)................................................................................................. 17GetNUnitsInPlayerUF(iPlayer)............................................................................................... 17GetNUnitsInScriptGroup(iScriptID [, iPlayer])................................................................ 17GetNUnitsInSide(iParty)........................................................................................................ 17GetNUnitsOfType(strUnitType, iPlayer)............................................................................ 17GetObjCoord(iScriptID)......................................................................................................... 18GetObjectHPs(iScriptID_Static)......................................................................................... 18GetPartyOfUnits(iScriptID).................................................................................................. 18GetScriptAreaParams(strScriptAreaName)...................................................................... 18GetSGlobalVar(strGlobalVarName, 0).................................................................................. 18GetSquadInfo(iScriptID)........................................................................................................ 18GetUnitMorale(iScriptID)...................................................................................................... 19GetUnitState(iScriptID)......................................................................................................... 19God(iParty, iMode).................................................................................................................... 19IsEntrenched(iScriptID)........................................................................................................ 20IsFollowing(iScriptID)............................................................................................................ 20IsPlayerPresent(iPlayer)......................................................................................................... 20

Page 4: Funciones Lua Blitzkrieg 1

IsStandGround(iScriptID)..................................................................................................... 20IsUnitUnderSupply(iScripID)............................................................................................... 20IsWarehouseConnected(iScript_StorageID)................................................................... 20KillScript(strScriptFunctionName)...................................................................................... 20LandReinforcement(iReinfID)................................................................................................ 21ObjectiveChanged(iObjNum, iState)................................................................................... 21Password(strName).................................................................................................................. 22QCmd ou GiveQCommand : QCmd(iAction, iScriptID [,params, ...])............................ 22RandomFloat()............................................................................................................................ 22RandomInt(n)............................................................................................................................. 22ReserveAviationForTimes(iParty, iTime)............................................................................ 22RunScript(strScriptFunctionName, iPeriodicity [, iNumberOfRepetitions])........... 22SetCheatDifficultyLevel(n).................................................................................................... 22SetDifficultyLevel(n)............................................................................................................... 22SetFGlobalVar (strGlobalVarName, fVar).......................................................................... 22SetGameSpeed(n)..................................................................................................................... 23SetIGlobalVar(strGlobalVarName, iVar)............................................................................ 23SetSGlobalVar(strGlobalVarName, sVar)........................................................................... 23ShowActiveScripts()................................................................................................................ 23Suicide()...................................................................................................................................... 23SwitchWeather(iState).......................................................................................................... 23SwitchWeatherAutomatic(iState)....................................................................................... 23Trace(strText [, params, …])................................................................................................. 24ViewZone(strScriptAreaName, iParam).............................................................................. 24Win(iParty)................................................................................................................................. 24

Programa de ejemplo.....................................................................................................................25

Page 5: Funciones Lua Blitzkrieg 1

Lista de funcionesFunción Oficial Modo juego Función Oficial Modo juegoAddIronMan Si Multi / Mono GetSGlobalVar Si Multi / Mono

ChangeFormation Si Multi / Mono GetSquadInfo Si Multi / Mono

ChangePlayer Si Multi / Mono GetUnitMorale No ¿?

ChangeWarFog Si Multi / Mono GetUnitState Si Multi / Mono

Cmd Si Multi / Mono GiveCommand Si Multi / Mono

DamageObject Si Multi / Mono GiveQCommand Si Multi / Mono

DeleteReinforcement Si Multi / Mono God Si Multi / Mono

DisableAviation Si Multi / Mono IsEntrenched Si Multi / Mono

DisplayTrace Si Depuración IsFollowing Si Multi / Mono

Draw Si Multi / Mono IsPlayerPresent Si Multi / Mono

EnableAviation Si Multi / Mono IsStandGround Si Multi / Mono

GetActiveShellType Si Multi / Mono IsUnitUnderSupply No ¿?

GetAviationState Si Multi / Mono IsWarehouseConnected No ¿?

GetFGlobalVar Si Multi / Mono KillScript Si Multi / Mono

GetFrontDir Si Multi / Mono LandReinforcement Si Multi / Mono

GetIGlobalVar Si Multi / Mono Loose Si Multi / Mono

GetMapSize Si Multi / Mono ObjectiveChanged Si Multi / Mono

GetNAmmo Si Multi / Mono Password No Depuración

GetNAntitankInScriptArea No Multi / Mono QCmd Si Multi / Mono

GetNAPFencesInScriptArea No Multi / Mono RandomFloat Si Multi / Mono

GetNFencesInScriptArea No Multi / Mono RandomInt Si Multi / Mono

GetNMinesInScriptArea No Multi / Mono ReserveAviationForTimes No ¿?

GetNScriptUnitsInArea Si Multi / Mono RunScript Si Multi / Mono

GetNTrenchesInScriptArea No Multi / Mono SetCheatDifficultyLevel No Depuración

GetNUnitsInArea Si Multi / Mono SetDifficultyLevel No Multi / Mono

GetNUnitsInCircle Si Multi / Mono SetFGlobalVar Si Multi / Mono

GetNUnitsInParty Si Multi / Mono SetGameSpeed No Multi / Mono

GetNUnitsInPartyUF Si Multijugador SetIGlobalVar Si Multi / Mono

GetNUnitsInPlayerUF Si Multijugador SetSGlobalVar Si Multi / Mono

GetNUnitsInScriptGroup Si Multi / Mono ShowActiveScripts Si Depuración

GetNUnitsInSide Si Multi / Mono Suicide Si Multi / Mono

GetNUnitsOfType No Multi / Mono SwitchWeather Si Multi / Mono

GetObjCoord Si Multi / Mono SwitchWeatherAutomatic Si Multi / Mono

GetObjectHPs Si Multi / Mono Trace Si Depuración

GetPartyOfUnits Si Multi / Mono ViewZone Si Depuración

GetScriptAreaParams Si Multi / Mono Win Si Multi / Mono

Page 6: Funciones Lua Blitzkrieg 1

Principios basicos relativos a la IA1. Las unidades emplazadas en el mapa son estaticas, es decir no se desplazan a ningún lugar por propia iniciativa.

2. Estas unidades reaccionan ante las unidades enemigas cuando aparecen en su linea de visión.

3. Estas unidades recuperan su posición inicial una vez que las unidades enemigas son destruidas.

4. La artilleria dispara en el caso de que una unidad de tierra o la aviación descubra unidades enemigas.

5. Si los camiones se situan proximos a las piezas de artilleria, y hay un almacén disponible en las cercanias, aprovisionarán de municiones a la artilleria.

6. Si un “punto de entrada” para la aviación ha sido definido con el editor, un avión de reconocimento hará varios vuelos de reconocimiento, a continuación, si hay refuerzos disponibles para la IA y se avistan enemigos, aparecerán los bombarderos.

Page 7: Funciones Lua Blitzkrieg 1

Descripción de funciones

AddIronMan(iScriptID)● Prohibe a la IA aprovisionar automáticamente a las unidades con iScriptID.● Funciones relacionadas Cmd(23, ...).

ChangeFormation(iScriptID, iFormation)● Ordena a una unidad de infantería que cambie de formación. Solo es valido con pelotones de

infantería o francotiradores.● Para la infantería

Formaciones iFormation Editor MovimientoFormación por defecto 0 DEFAULT En grupoFormación de marcha 1 MOVEMENT En columnasFormación defensiva 2 DEFENSIVE Cuerpo a tierraFormación de asalto 3 OFFENSIVE En linea

● Para el francotirador

Formaciones iFormation EditorFormación por defecto 0 DEFAULTFormación de marcha 1 MOVEMENTFormación defensiva 2 DEFENSIVEFormación de asalto 3 OFFENSIVE

● Funciones relacionadas GetSquadInfo().

ChangePlayer(iScriptID, iParty)● Permite cambiar el bando al que pertenece la unidad con iScriptID.

ChangeWarFog(iParty)● Cambia la niebla de guerra al bando identificado en iParty.

PanzerKampfwagen VI.B Tiger II

Page 8: Funciones Lua Blitzkrieg 1

Cmd ou GiveCommand : Cmd(iAction, iScriptID [,params, ...])Esta función permite ejecutar las acciones(comandos) siguientes:

iAction = 0 - MOVE TO - Cmd(0, iScriptID, x, y)● Ordena a la unidad con iScriptID que se desplace al punto con las coordenadas x, y.● La formación de la unidad no cambia.● Si a una unidad de infanteria montada en un camión se le dá la orden de movimiento, bajará del

camión y se desplazará al punto indicado. La orden de movimiento debe darse al camión para que transporte a la infanteria hasta el punto objetivo.

● Hay unidades como las ametralladoras o los cañones sin remolcar a los que no afecta esta orden. ● Los trenes y vagones deben estar sobre railes, alineados y enlazados, para que se muevan.● GetUnitState() devuelve, durante el desplazamiento, los valores que se exponen en la tabla

siguiente. No todas las unidades disponibles han sido comprobadas aunque si un gran número de ellas.

Valor Unidades

0 Morteros, lanzacohetes, cañones antitanque32 Infantería, blindados, tanques ligeros, camiones y otros vehiculos no armados, trenes, cañones

autopropulsados-1 Equipos de ametralladoras

iAction = 1 - ATTACK UNIT - Cmd(1, iScriptID, iScriptID_Cible)● Da la orden a la unidad con iScriptID de atacar a la unidad con iScriptID_Cible. ● Esta orden no se aplica por igual a todos los tipos de unidades, funciona, según se ha comprobado,

en las combinaciones que se exponen en la tabla siguiente.Atacante Atacado

Infantería Artillería, ametralladoras, morteros, blindados, camiones, trenes y resto de vehiculos.Blindados Artillería, camiones, algunos modelos de tanques basicamente ligeros, antitanques,

morteros, ametralladoras, trenes y resto de vehiculos.● GetUnitState() devuelve el valor 21 durante el ataque, tanto para la infantería como para los

blindados.

iAction = 2 - ATTACK OBJECT or ATTACK NON UNIT OBJECT : Cmd(2, ....)● ERROR – Este comando no está implementado.● Si es posible ordenar el ataque a un edificio al jugador humano.

iAction = 3 - SWARM TO : Cmd(3, iScriptID, x, y)● Ordena a la unidad con iScriptID que se desplace, en modo de asalto, al punto x, y.● Solo valido para unidades moviles armadas (infanteria, tanques pesados y ligeros), no para

ametralladoras, morteros, etc.● Los camiones y otros vehiculos no armados nunca obedecen esta orden.● La formación no cambia.● GetUnitState() devuelve el valor 11 durante el movimiento tanto para infantería como para blindados.

iAction = 4 - LOAD UNIT : Cmd(4, iScriptID, iScripID_Cible)● Ordena a la unidad con iScriptID subir a bordo del vehiculo con iScriptID_Cible.● GetUnitState() devuelve el valor 5 mientras la unidad se dirige al vehiculo y monta en él y el valor 3,

una vez que la unidad ha subido al vehiculo. El vehiculo devuelve el valor 2 mientras la espera a que la unidad monte y una vez está montada devuelve el valor 1.

Page 9: Funciones Lua Blitzkrieg 1

● Esta orden solo es valida si la unidad que se envia a montar y el vehiculo son apropiados, es decir no se puede enviar un peloton de infantería a montar en un jeep o una ambulancia, deben montar en un camión, al contrario si se puede enviar a un oficial a montar en un jeep o un coche de mando y por supuesto a un camión.

● Es posible enviar a la infantería a montar en un tren pero debe enviarse a un vagon de carga o pasajeros, no a la locomotora.

iAction = 5 - UNLOAD UNIT : Cmd(5, iScriptID, x, y)● Ordena a la unidad con iScriptID que descargue a la unidad que lleva montada en el punto x, y.● Esta orden es dificil de utilizar por si sola, a menos que el vehiculo se encuentre ya en las

coordenadas del punto de descarga.● La mejor forma de utilizarla es combinandola con el comando Move To (Cmd(0...) de manera que

primero se le indica al vehiculo que se mueva hasta el punto de descarga y luego se le ordena descargar.

● Ejemplo:○ Cmd(0, 100, 1200, 1300)○ Qcmd(5, 100, 1200, 1300)

● Qcmd hace que el segundo comando se ejecute solo cuando se ha completado el primero.● Esta orden solo es valida para unidades de infanteria montadas en vehiculos (camiones y otros), para

desenganchar cañones remolcados hay un comando propio (Deploy Artillery).● No es posible descargar infanteria de los vagones de tren aunque se transportan hasta el punto

indicado.● GetUnitState() devuelve los valores siguientes para las unidades afectadas por la orden

Desplazamiento Descarga Finalizada descarga

Infantería 3 32 1Camión 32 32 1

iAction = 6 - ENTER TO BUILDING : Cmd(6, iScriptID, iScriptID_Cible)● Ordena a la unidad con iScriptID entrar en el edifio (tambien una trinchera) con iScriptID_Cible.● Es posible enviar una unidad desde un edificio a otro sin ordenale abandonar el primer edificio,

existiendo, al menos, dos posibilidades de hacerlo. No se han probado más opciones y para estas puede haber otras formas (mas elegantes) de hacerlo.

1. Enviarlos de un edificio a otro entrando solo en el último.Cmd(6, 100 ,200)QCmd(6, 100 ,300)

2. Enviarlos de una edificio a otro entrando en cada uno de ellos.Cmd(6, 100 ,200)function SegundaCasa()

if GetUnitState(100)==8 thenCmd(6, 100, 300)

endend

● Aparentemente, los edificios deben tener un iScriptID_Cible > 99.● GetUnitState() devuelve el valor 6, durante el desplazamiento hasta el edificio. Cuando la unidad se

desplaza hacia una trinchera el valor es 7.● GetUnitState() devuelve el valor 8 cuando la unidad está dentro del edificio. Cuando están dentro de

una trinchera el valor es 9.● La formación no cambia.

Page 10: Funciones Lua Blitzkrieg 1

iAction = 7 - LEAVE BUILDING : Cmd(7, iScriptID, x, y)● Ordena a la unidad con iScriptID salir del edificio en el que se encuentra y dirigirse al punto x, y.● GetUnitState() devuelve el valor 10, al abandonar el edificio. No he podido comprobar si cuando

abandona la trinchera el valor es 12.● GetUnitState() devuelve el valor 32 mientras la unidad se dirige al punto x,y. Al abandonar la

trinchera la unidad no se desplaza hasta el punto indicado, se queda sobre la trinchera.

iAction = 8 - ROTATE TO : Cmd(8, iScriptID, x, y)● Ordena a la unidad con iScriptID orientarse en la dirección del punto x, y.● GetUnitState() devuelve, mientras la unidad está rotando, los valores que se exponen en la tabla

siguiente. No todas las unidades disponibles han sido comprobadas aunque si un gran número de ellas.

Valor Unidades

0 Infantería43 Equipos de ametralladoras, artilleria, morteros, camiones y otros vehiculos no armados,

antitanques

iAction = 9 - STOP : Cmd(9, iScriptID)● Ordena a la unidad con iScriptID detener la acción que estan realizando.

iAction = 10 - PARADE : Cmd(10, iScriptID, iParade)● Ordena a la unidad con iScriptID pasar al modo detenida, según iParade [0...n].● Cualquier valor de Iparade hace que la unidad pase a formación 0 (formación por defecto).● Aparentemente este comando ejecuta la misma acción que ChangeFormation(iScriptID, 0).

iAction = 11 - PLACEMINE : Cmd(11, iScriptID, x, y)● Ordena a la unidad con iScriptID poner minas (2) en el punto x,y.● Esta orden solo funciona, por supuesto, con los camiones de ingenieros.● GetUnitState() devuelve el valor 41, mientras coloca las minas.

iAction = 12 - CLEAR MINE : Cmd(12,..)● ERROR – Comando desconocido.

iAction = 13 - GUARD : Cmd(13, ...)● ERROR – Comando desconocido.

iAction = 14 - AMBUSH : Cmd(14, iScriptID)● Ordena a la unidad con iScriptID pasar al modo Emboscada.● Las unidades a las que afecta esta orden son la infatería, las ametralladoras, los morteros, los

antitanques y los blindados.● GetUnitState() devuelve el valor 15 para todas las unidades mientras estén emboscadas.

iAction = 15 - RANGE AREA : Cmd(15, iScriptID, x, y)● Ordena a la artilleria conn iScriptID disparar en modo automático sobre el punto x, y.● Las unidades a las que aplica esta orden son la artilleria y los morteros.● Esta acción corresponde a la que se ejecuta al pulsar la tecla [X] en el juego.● GetUnitState() devuelve el valor 16, mientras está disparando.

Page 11: Funciones Lua Blitzkrieg 1

iAction = 16 - SUPRESSIVE FIRE : Cmd(16, iScriptID, x, y)● Ordena a la artilleria conn iScriptID disparar en modo “supresión” sobre el punto x, y.● Las unidades a las que aplica esta orden son la artilleria y los morteros.● Esta acción corresponde a la que se ejecuta al pulsar la tecla [W] en el juego.● GetUnitState() devuelve el valor 34, mientras está disparando.

iAction = 17 - INSTALL : Cmd(17, iScriptID)● Ordena a la unidad con iScriptID posicionarse.● Aparentemente esta acción implica ordenar a la unidad que se desplace.● No he podido comprobarlo

iAction = 18 - UNINSTALL : Cmd(18, iScriptID)● Ordena a la unidad con iScriptID abandonar la posición.● Aparentemente esta acción implica ordenar a la unidad que se desplace.● No he podido comprobarlo

iAction = 19 - CALL BOMBERS : Cmd(19, Avion_iScriptID, iParty, x, y)● Llama a los bombarderos del jugador del bando iParty a descargar sus bombas sobre el punto x, y. ● Prerequisitos de este comando :

Tener en el menú "Map \ Unit Creation Info" del editor por lo menos un "Appear Points” y en la sección “bombers” uno o más aviones.Haber ejecutado previamente el comando EnableAviation(), para el bando y el tipo de avión

adecuado (3 en este comando).

● Avion_iScriptID corresponde al iScriptID temporal dado al avión durante el vuelo, puede ser cualquier número entero pero se suele utilizar los valores, 99, 999, 9999 para los aviones.

iAction = 20 - CALL FIGHTERS : Cmd(20, Avion_iScriptID, iParty, x , y)● Llama a los cazas sobre el punto x, y, para el jugador iParty.● El punto x, y no representa un objetivo sino un destino.● Vel el comando Cmd(19, ...) para los requisito que deben definirse en el editor.

iAction = 21 - CALL SCOUT : Cmd(21, Avion_iScriptID, iParty, x, y)● Llama a un avión de reconocimiento sobre el punto x, y, para el jugador iParty.● El punto x, y no representa un destino, indica la zona a sobrevolar.● Ver el comando Cmd(19, ...) para los requisito que deben definirse en el editor.

iAction = 22 - CALL PARADROP : Cmd(22, Avion_iScriptID, iParty, x, y)● Llama a los paracaidistas sobre el punto x, y, para el jugador iParty.● El punto x, y es el punto de descenso de las tropas.● Ver el comando Cmd(19, ...) para los requisito que deben definirse en el editor.● Es importante inicializar la variable global ParadropSquad.ScriptID con el iScriptID designado para

controlar a los paracaidistas. Ej: SetIGlobalVar( "ParadropSquad.ScriptID", 999); --- 999 es el iScriptID de los paracaidistas !

● GetUnitState(iScriptID de los paracaidistas) devuelve el valor 27 durante el lanzamiento (me devuelve el valor 0).

iAction = 23 - RESUPLY UNITS : Cmd(23, ...)● ERROR – Comando desconocido.● Aparentemente este comando no funciona al invocarlo por programa.

Page 12: Funciones Lua Blitzkrieg 1

● Por contra si funciona cuando desde el editor se ordena a un camión realizar esta acción.● Por tanto es necesario asignar un Start Command a la unidad encargada del reaprovisionamiento:

Desplegar el menú Menu Unit y pulsar Add Start Command. Seleccionar RESUPPLY, dar las coordenadas VIS de la unidad a aprovisionar. Dejar la variable Parameter a Zéro. El camión debe situarse al lado de la unidad a aprovisionar.

● GetUnitState() devuelve el valor 37, durante el aprovisionamiento.● Emplazando un camión cerca de una pieza de artilleria, el camión aprovisionará automáticamente a

la artilleria.● Asignar apropiadamente los camiones a las piezas de artilleria: Cañon pesado = Camión pesado, etc.

iAction = 24 - REPAIR UNIT : Cmd(24, ...)● ERROR – Comando desconocido.● Aparentemente este comando no funciona al invocarlo por programa.● Por contra si funciona cuando desde el editor se ordena a un camión realizar esta acción.● Por tanto es necesario asignar un Start Command a la unidad encargada de la reparación:

Desplegar el menú Menu Unit y pulsar Add Start Command. Seleccionar REPAIR, dar las coordenadas VIS de la unidad a reparar. Dejar la variable Parameter a Zéro. El camión debe situarse al lado de la unidad a reparar al principio del juego.

● GetUnitState() devuelve el valor 36, durante la reparación.

iAction = 29 - USE SPY GLASS : Cmd(29, iScriptID, x, y)● Ordena a la unidad con iScriptID utilizar los prismaticos en la dirección del punto x, y.● GetUnitState() devuelve el valor 33, durante la mientras se observa con los prismaticos.

iAction = 31 - TAKE ARTILLERY : Cmd(31, iScript, iSCriptArtillery)● Ordena al camión iScript enganchar la pieza de artilleria iScriptArtillery.● GetUnitState() devuelve 24 para la pieza de artilleria, una vez enganchada. ● GetUnitState() devuelve 47 para el camión mientras engancha la pieza de artilleria y 1 una vez

enganchada.

iAction = 32 - DEPLOY ARTILLERY : Cmd(32, iScript, x, y)● Ordena al camión con iScript desenganchar la pieza de artilleria en el punto x,y.● GetUnitState() devuelve 1 para el camión 0 para la pieza de artilleria una vez dsenganchada.

iAction = 34 – DISBAND SQUAD : Cmd(34, iScriptID)● Ordena a la unidad de infanteria con iScriptID romper la formación.● GetSquadInfo() devuelve el valor -1.● En esta situación parece imposible seguir dando ordenes a esta “unidad”.

iAction = 35 – FORM FORMATION : Cmd(35, iScriptID, ....)● Permite la creación de una unidad .......● Es imposible hacerla funcionar... no hay mensajes de error, pero no pasa nada.

iAction= 36 - CALL GROUND ATTACK PLANE: Cmd(36, Avion_iScriptID, iParty, x, y)● Llama a los aviones de ataque a tierra sobre el punto x,y para el jugador iParty.

Page 13: Funciones Lua Blitzkrieg 1

● El punto x,y es el objetivo del ataque.● Ver el comando Cmd(19, ...) para los requisito que deben definirse en el editor.

iAction = 39 – FOLLOW : Cmd(39, iScriptID, iScript_Cible)● Ordena a la unidad con iScriptID seguir a la unidad iScript_Cible.● GetUnitState(iScriptID) devuelve el valor 0 mientras se mueve siguiendo a la unidad objetivo (Cible),

en lugar del valor 32.● Si a la unidad con iScriptID se le ordena cualquier otro movimiento (ej. Cmd(0, iScript,x,y), entonces

deja de seguir a la unidad objetivo.● Es necesario utilizar la función iSFollowing() para saber si una unidad está siguiendo a otra.

iAction = 43 - RESUPLY HUMANS : Cmd(43, ...)● ERROR – Comando desconocido.● Aparentemente este comando no funciona al invocarlo por programa.● Por contra si funciona cuando desde el editor se ordena a un camión realizar esta acción.● Por tanto es necesario asignar un Start Command a la unidad encargada del reaprovisionamiento:

Desplegar el menú Menu Unit y pulsar Add Start Command. Seleccionar RESUPPLY_HUMAN, dar las coordenadas VIS de la unidad a aprovisionar. Dejar la variable Parameter a Zéro. El camión debe situarse cerca de la unidad.

● GetUnitState() devuelve el valor 38, durante el aprovisionamiento.

iAction = 45 – ENTRENCH SELF : Cmd(45, ...)● ERROR – Comando desconocido.● Aparentemente este comando no funciona al invocarlo por programa.

iAction = 46 – CHANGE SHELL TYPE : Cmd(46, ...)● ERROR – Comando desconocido.● Aparentemente este comando no funciona al invocarlo por programa.

DamageObject(iScriptID, fDamage)● Inflige daños al objeto o a la unidad con iScriptID por el valor indicado en fDamage, es decir le resta

dicho valor de los puntos HP que tenga el objeto o la unidad. Si fDamage = 0, la unidad o el objeto se destruyen. El valor HP pasa a 0. Si fDamage = -1, los objetos estaticos (no las unidades) son restaurados, aunque no completamente.

Una forma de destruir completamente un objeto estatico es DamageObject(iScriptID, GetObjectHPs(iScriptID));

DeleteReinforcement(iScriptID)● Elimina del mapa todas o parte de las unidades con iScriptID pertenecientes al grupo de refuerzos

iReinfID.● Función relacionada con la función LandReinforcement().● iScriptID corresponde bien al iScriptID de las unidades pertenecientes al grupo de refuerzos

iReinfID, por tanto es posibe eliminar del mapa solo una parte de los refuerzos.

DisableAviation(iParty, iAviationType)● Impide al jugador iParty, llamar al soporte aereo del tipo iAviationType, que puede tener los valores

Page 14: Funciones Lua Blitzkrieg 1

siguientes:iAviationType Soporte aereo Comando relacionado

0 Avión de reconocimiento Cmd (21, ......)1 Avión de combate (cazas) Cmd (20, ......)2 Paracaidistas Cmd (22, ......)3 Bombarderos Cmd (19, ......)4 Avión de ataque a tierra Cmd (36, ......)-1 Todos los tipos Todos

● Si iParty es igual a –1, todos los jugadores están afectados por esta prohibición.

DisplayTrace(strText [, params, ...])● Esta función permite visualizar un mensaje para todos los jugadores; ej.: DisplayTrace('el centro de

la ciudad ha sido capturado');● DisplayTrace() puede visualizar una cadena de caracteres o el contenido de una variable númerica:

La cadena de caracteres debe estar entre comillas simples (' ...') o dobles comillas (“ “). La visualización de valores númerico debe hacerse de la siguiente forma:

DisplayTrace(“El estado de la unidad %g es %g”, iScriptID, GetUnitState(iScriptID)); Si iScriptID es igual a 100, y la unidad está en movimiento. El resultado es : El estado de la unidad 100 es 32.

● Esta función es muy útil para seguir la ejecución de ordenes asociadas al mapa.

Draw()● En el caso de una partida multijugador, la función Draw() supone el abandono de todos los jugadores.

EnableAviation(iParty, iAviationType)● Permite al jugador iParty, activar las llamadas al soporte aereo de cualquier tipo de avión para el que

se hayan definido unidades en el editor. iAviationType Soporte aereo Comando relacionado

0 Avión de reconocimiento Cmd (21, ......)1 Avión de combate (cazas) Cmd (20, ......)2 Paracaidistas Cmd (22, ......)3 Bombarderos Cmd (19, ......)4 Avión de ataque a tierra Cmd (36, ......)-1 Todos los tipos Todos

● Si iParty es igual a –1, todos los jugadores están afectados por esta autorización.

GetActiveShellType(iScriptID)● Devuelve los tipos de munición actualmente en uso.

Si GetActiveShellType() devuelve el valor 0, se refiere a la munición primaria. Si GetActiveShellType() devuelve el valor 1, se refiere a la munición secundaria.

● Función relacionada: GetNAmmo().

Page 15: Funciones Lua Blitzkrieg 1

GetAviationState(iPlayer)● Devuelve el último tipo de aviación que ha sido llamado por el jugador iPlayer. En el caso del jugador

humano el tipo será el que haya seleccionado en el panel de refuerzos aéreos.

iAviationType Soporte aereo

0 Avión de reconocimiento1 Avión de combate (cazas)2 Paracaidistas3 Bombarderos4 Avión de ataque a tierra

GetFGlobalVar(strGlobalVarName, 0)● Devuelve el valor de la variable strGlobalVarName.● La variable strGlobalVarName es un valor decimal (ej. 10,456).● El nombre de la variable debe ir entre comillas (dobles o simples).● Ej : GetFGlobalVar(“total”, 0).● Función relacionada: SetFGlobalVar().● El 0 del segundo parámetro es obligatorio.

GetFrontDir(iScriptID)● Devuelve la dirección actual de la unidad con iScriptID.● El valor devuelto está comprendido entre 0 y 65535 que se corresponde a 0 y 360 en grados.● Si se devuelve –1 la unidad con iScriptID o no existe o no es una unidad movil.● Ej. : angulo = GetFrontDir(iScriptID)/65536 * 360 ; -- devuelve el valor en grados del angulo, sobre

el norte, en que se encuentra la unidad.

GetIGlobalVar(strGlobalVarName,0)● Devuelve el valor de la variable strGlobalVarName.● La variable strGlobalVarName es un número entero.● El nombre de la variable debe ir entre comillas (dobles o simples).● Función relacionada: SetFGlobalVar().● El 0 del segundo parámetro es obligatorio.

GetMapSize()● Devuelve el tamaño del mapa en “Script points”.● Ej.: ladox, ladoy = GetMapSize().● Para calcular el resultado en “VIS points”, es suficiente con dividir por 64 el valor en “Script points”.

GetNAmmo(iScriptID)● Devuelve el nivel actual de munición de la unidad con iScriptID.● Ej. : munición_primaria, munición_secundaria = GetNAmmo(iScriptID) ;● En general, para la artilleria, la munición primaria corresponde a los obuses perforantes y la

secundaria al humo.

GetNAntitankInScriptArea(strScriptAreaName)● Devuelve el número de minas antitanque que hay en la zona identificada en strScriptAreaName.● El nombre del área debe ir entre comillas dobles o simples.

Page 16: Funciones Lua Blitzkrieg 1

● Esta función no parece funcionar correctamente. Siempre devuelve 0.

GetNAPFencesInScriptArea(strScriptAreaName)● Devuelve el número de tramos de alambrada en la zona identificada en strScriptAreaName.● El valor devuelto corresponde el número de tramos de alambrada existentes (un tramo = 1 VIS ).● El nombre del área debe ir entre comillas dobles o simples.● Función relacionada GetNFencesInScriptArea().

GetNFencesInScriptArea(strScriptAreaName)● Devuelve el número de tramos de cualquiera de los objetos de la categoría “fences”, en la zona

identificada en strScriptAreaName.● El nombre del área debe ir entre comillas dobles o simples.● El valor devuelto corresponde al número de tramos de alambrada existentes (un tramo = 1 VIS ).

GetNMinesInScriptArea(strScriptAreaName)● Devuelve el número de minas que hay en la zona identificada en strScriptAreaName.● El nombre del área debe ir entre comillas dobles o simples.● Esta función no diferencia entre minas antitanque y minas antipersonales.

GetNScriptUnitsInArea(iScriptID, strScriptAreaName)● Devuelve el número de unidades con iScriptID encontradas en la zona identificada en

strScriptAreaName.● El nombre del área debe ir entre comillas dobles o simples.● Un pelotón cuenta como 1 unidad (no se considera el número de elementos individuales que lo

componen).

GetNTrenchesInScriptArea(strScriptAreaName)● Devuelve la longitud en VIS de las trincheras existentes en la zona identificada en

strScriptAreaName. ● El nombre del área debe ir entre comillas dobles o simples.● GetUnitState() devuelve el valor 1 si la infanteria está en las trincheras.

GetNUnitsInArea(iPlayer, strScriptAreaName)● Devuelve el número de unidades del jugador iPLayer que existen en la zona identificada en

strScriptAreaName.● El nombre del área debe ir entre comillas dobles o simples.● Un pelotón devuelve el número de soldados que lo componen.● Una pieza de artilleria cuenta por 4 unidades (3 artilleros + 1 cañon).● Las unidades que estén dentro de los edificios tambien son contabilizadas.

GetNUnitsInCircle(iPlayer, X, Y, Radius)● Devuelve el número de unidades del jugador iPLayer existentes en el interior de un circulo cuyo

centro se situa en las coordenadas x,y y el diametro es el valor de Radius.● Los valores de x, y y el diametro se pueden obtener con GetScriptAreaParams("Areacirculo")● El nombre del área debe ir entre comillas dobles o simples.● Un pelotón devuelve el número de soldados que lo componen.● Una pieza de artilleria cuenta por 4 unidades (3 artilleros + 1 cañon).● Las unidades que estén dentro de los edificios tambien son contabilizadas.

Page 17: Funciones Lua Blitzkrieg 1

GetNUnitsInParty(iPlayer)● Devuelve el número de unidades en juego para el jugador iPlayer.● Un pelotón devuelve el número de soldados que lo componen.● Una pieza de artilleria cuenta como 1 unidad. Si los artilleros son eliminados, la pieza de artilleria no

cuenta como unidad del jugador. Pasa a ser neutral.● Las unidades que estén dentro de los edificios tambien son contabilizadas.

GetNUnitsInPartyUF(iParty)● Devuelve el número de unidades en juego para el bando iParty.● Funciona en modo multijugador y en misiones de un solo jugador.● Un pelotón cuenta como 1 unidad (no se considera el número de elementos individuales que lo

componen).● Una pieza de artilleria cuenta como 1 unidad.

GetNUnitsInPlayerUF(iPlayer)● Devuelve el número de unidades del jugador iPlayer.● Funciona en modo multijugador y en misiones de un solo jugador.● Los pelotones se cuenta como 1 unidad.● Una pieza de artilleria cuenta como 1 unidad.

GetNUnitsInScriptGroup(iScriptID [, iPlayer])● Devuelve el número de unidades con iScriptID.● Los pelotones se cuenta como 1 unidad.● Una pieza de artilleria cuenta como 1 unidad. Si los artilleros son eliminados, la pieza de artilleria no

cuenta como unidad del jugador. Pasa a ser neutral.● La opción iPlayer permite si una pieza de artilleria esta activa o no.● Ej. : pieza activa: GetNUnitsInScriptGroup(100, 1) = 1● Ej.: Los artilleros han muerto: GetNUnitsInScriptGroup(100, 1)= 0 & GetNUnitsInScriptGroup(100,

2) = 1

GetNUnitsInSide(iParty)● Devuelve el número de unidades pertenecientes al bando iParty.● Un pelotón devuelve el número de soldados que lo componen.● Una pieza de artilleria cuenta por 4 unidades (3 artilleros + 1 cañon).● Las unidades que estén dentro de los edificios tambien son contabilizadas.

GetNUnitsOfType(strUnitType, iPlayer)● Devuelve el número de unidades del tipo strUnitType con que cuenta el jugador iPlayer.● strUnitType puede tener los valores siguientes:● La respuesta es confusa ¿cuales son los tipos de unidades?, “infantry” y otras más no las reconoce.

Francotirador (sniper). Oficial (officer). ...

● Ej.: GetNUnitsOfType(“ sniper”, 1), devuelve los francotiradores en juego para el jugador 1.

GetObjCoord(iScriptID)● Devuelve las coordenadas en que se encuentra la unidad con iScriptID.

Page 18: Funciones Lua Blitzkrieg 1

● Las coordenadas se expresan en “Script points”.● Ej. : x, y = GetObjCoord(100)● Si x = -1 y/o y = -1 la unidad no existe.

GetObjectHPs(iScriptID_Static)● Devuelve para el objeto estatico con iScriptID_Static (Edificios, etc..) el número de puntos de vida.● Esta función no es valida para usarla con unidades moviles.

GetPartyOfUnits(iScriptID)● Devuelve el bando de la unidad con iScriptID.

GetScriptAreaParams(strScriptAreaName)● Devuelve las coordenadas de la zona strScriptAreaName definida con el editor utilizando las

opciones del menú Map Tools.● Si strScriptAreaName es un rectangulo la función devuelve los valores siguientes:

x, y, mitad_largo, mitad_ancho = GetScriptAreaParams(“Zona 1”) ; x,y son las coordenadas del punto central del rectangulo.

● Si strScriptAreaName es un circulo, la función devuelve los valores siguientes: x, y, diametro = GetScriptAreaParams(“Zona 1”) ; x, y son las coordenadas del punto central del circulo.

GetSGlobalVar(strGlobalVarName, 0)● Devuelve el valor de la variable strGlobalVarName.● La variable strGlobalVarName contiene una cadena de caracteres.● El nombre de la variable debe ir entre comillas (dobles o simples).● Función relacionada: SetFGlobalVar().● El 0 del segundo parámetro es obligatorio.

GetSquadInfo(iScriptID)● Devuelve el tipo de formación actual de la unidad.

Tipos GetSquadInfoInfantería

GetSquadInfoFrancotirador

Unidad no existe -2, -3 -2, -3Formación por defecto 0 0Formación de marcha 1 1Formación defensivaFormación furtiva

22

Formación de asalto 3 3● Funciones relacionadas: ChangeFormation()

GetUnitMorale(iScriptID)● Devuelve el valor 1 para cualquier unidad que no sea de infantería.● Verificar su utilidad !!● La infanteria no es reconocida como una unidad por este comando y devuelve el valor del iScriptID.

Page 19: Funciones Lua Blitzkrieg 1

GetUnitState(iScriptID)● Devuelve el estado de la unidad con iScriptID.● El valor devuelto es un valor entre –1 y n (ver la tabla mas abajo)● GetUnitState() es una función esencial, porque permite conocer el estado de una unidad y actuar en

consecuencia si es necesario.

Valor Comentarios Comando relacionado

Valor Comentarios Comando relacionado

-1 La unidad no exite 23

0 Estado desconocido 24 Enganchada a un camión Cmd(31, ...)

1 Unidad en espera 25 Sirviendo a un cañon. Sin verificar

2 Vehiculo cargando pasajeros Cmd(4, ...) 26 Bombardeando . Sin verificar

3 Unidad montada en un vehiculo Cmd(4, ...) 27 Paracaidistas han saltado Cmd(22, ...)

4 Vehiculo descargando Cmd(5, ...) 28 Avión derribado. Sin verificar

5 Unidad montando en el vehiculo Cmd(4, ...) 29 Contruyendo un objeto grande

6 Unidad dirigiendose a un edificio Cmd(6, ...) 30 Reparando un puente

7 Unidad dirigiendose a una trinchera Cmd(6, ...) 31 Ingenieros buscando minas

8 Unidad dentro de un edificio Cmd(6, ...) 32 En movimiento Cmd(0, ...)

9 Unidad eentro de una trinchera Cmd(6, ...) 33 Utilizando los prismaticos Cmd(29, ...)

10 Saliendo de un edificio Cmd(7, ...) 34 En tiro de supresión Cmd(16, ...)

11 Asaltando un objetivo Cmd(3, ...) 35 Reparando un edificio

12 Abandonando una trinchera Cmd(7, ...) 36 Reparando otra unidad Cmd(24, ...)

13 Unidad atacando un edificio 37 Aprovisionado municiones Cmd(23, ...)

14 Cambiando de formación 38 Asistiendo a unidades de infantería. Sin verificar

Cmd(43, ...)

15 Emboscada Cmd(14, ...) 39 Construyendo un puente

16 En tiro automático Cmd(15, ...) 40 Contruyendo obstaculos antitanques

17 - 41 Colocando minas Cmd(11, ...)

18 Construyendo alambradas 42 -

19 Construyendo trincheras 43 Pivotando / Girando

20 - 44 -

21 Atacando (solo infanteria) Cmd(1, ...) 45 -

22 Blindado atancando a una unidad dentro de un edificio

47 Remolcando un cañon

God(iParty, iMode)● Durante la creación de un mapa, del programa, esta función da a las unidades del bando iParty

caracteristicas especiales según se expone en la tabla siguiente:Caracteristica iModeDetiene completamente el modo Dios (“God”) 0Unidades invulnerables 1Unidades invulnerables y eliminan a las unidades enemigas al primer contacto 2Eliminar a las unidades enemigas al primer contacto 3Detener la invulnerabilidad 4Detener la eliminación de unidades enemigas al primer contacto 5

● Es necesario haber ejecutado previamente la función Password(« Panzerklein ») antes de ejecutar

Page 20: Funciones Lua Blitzkrieg 1

la función God().

IsEntrenched(iScriptID)● Comprueba si la unidad con iScript está atrincherada, corresponde a la tecla [F] en el juego. ● El valor devuelto es 1, si la unidad está atrincherada, si no el valor devuelto es 0.● Solo funcionan con las unidades que pueden atrincherarse, tanques, artilleria, etc., no funciona con la

infanteria aunque se encuentre en una trinchera. Ya que no hay un comando para atrincherar a este tipo de unidades la orden solo es efectiva para las unidades del bando humano.

IsFollowing(iScriptID)● Comprueba si la unidad, de cualquier tipo, con iScriptID sigue, o no, a otra unidad del mismo tipo u

otro diferente.● Si la unidad está siguiendo a otra devuelve el valor 1, si no el valor devuelto es 0.● Si el valor devuelto es -1 la unidad no existe.● Funciones relacionadas: Cmd(39, …)

IsPlayerPresent(iPlayer)● Comprueba la presencia del jugador iPlayer en una partida multijugador.● IsPlayerPresent() devuelve el valor 1 si el jugador está presente, si no devuelve el valor 0.

IsStandGround(iScriptID)● Comprueba si la unidad con iScriptID defiende la posición (Tecla [E])● El valor devuelto es 1 si la unidad defiende la posición, si no el valor devuelto es 0.

IsUnitUnderSupply(iScripID)● Devuelve el valor 1 permanentemente....

IsWarehouseConnected(iScript_StorageID)● Comprueba si un almacén avanzado es conectado o no a un almacén

general.● Si el valor devuelto es 1, ambos almacenes están conectados, si no el

valor devuelto es 0.

KillScript(strScriptFunctionName)● Esta función tiene por objetivo cancelar la ejecución de la función strScriptFunctionName que

previamente ha debido ser llamada al menos una vez.● Esta función es la equivalente a la función Suicide(), salvo que se ejecuta desde fuera de la función a

cancelar.● Una situación en la que interesa utilizar esta función es cuando se quiere cambiar la frecuencia de

llamada de la función . Ej.: Al inicio del programa la función A() se ejecuta cada segundo con la setencia RunScript(“A”, 1000);, durante la partida algunos sucesos como la llegada de refuerzos, la consecución de objetivos, etc., pueden requerir que la función sea llamada con un frecuencia diferente, para lo cual se cancelara su ejecución con KillScript(“A”); y a continuación RunScript(“A”, 5000);. La función será ejecutada ahora cada 5 segundos.

LandReinforcement(iReinfID)● Esta función hace que aparezcan sobre el mapa los grupos de refuerzo con iReinfID definidos

previamente en el editor.

Page 21: Funciones Lua Blitzkrieg 1

● Para definir los refuerzo en el editor: Emplazar en el mapa, en la ubicación en que deben aparecer en el juego, las unidades que

constituyen un grupo de refuerzo. Los elementos que van a componer el grupo de refuerzo pueden llevar el mismo iScriptID o no. Todos

deben llevar un iScriptID asignado. Crear desde el menú Reinforcement Group un nuevo grupo de refuerzo y asignarle un número de

GroupID. Este es el iReinfID. Este codigo debe corresponder con alguno de los iScriptID asignados a los elementos que componen el grupo.

Seleccionar la casilla Groupe N : xxx, donde xxx es el GroupID o iReinfID que se acaba de crear. A continuación asociar a este grupo las unidades creadas en el primer punto, utilizando el botón Add

group with iScriptID.

Loose()● En el modo de un solo jugador, la ejecución de esta función provoca la derrota del jugador humano.

ObjectiveChanged(iObjNum, iState)● Esta función tiene por objeto señalar en pantalla el objetivo iObjNum que corresponde con el

contenido de los ficheros <iObjNum>.txt & <iObjNum>h.txt residentes en la misma carpeta que el fichero fichier 1.xml.

● Ej.: ObjectiveChanged(0,0) ; -- Señala el contenido del fichero 0.txt con el titulo del contenido del fichero 0h.txt.

● Es obligatorio salvar los ficheros en UNICODE. Para lo cual hay que utilizar el Bloc de Notas de Windows (NotePad.exe) y en la opción Guardar como cambiar el tipo de codificación ANSI a UNICODE. Este parámetro está situado debajo del nombre del fichero a guardar y de su tipo (.txt).

● El parámetro iState designa el estado de los objetivos.Estado Situación del objetivo

0 El objetivo ha sido señalado al jugador. (visualizacion del contenido del fichero correspondiente iObjNum y visualización de una flecha en el minimapa)

1 Objetivo alcanzado (la flecha desaparece del minimapa)2 Estado no comprobado

● Ej.: Al principio del programa ObjectiveChanged(0,0) ; -- el objetivo 0 es señalado.

● Una vez que el objetivo 0 es alcanzado se pasa al objetivo siguiente ObjectiveChanged(0, 1) ; -- el objetivo 0 se dá por conseguido y desaparece. ObjectiveChanged(1, 0) ; -- el objetivo 1 es señalado.

● Etc.

Password(strName)● Esta función autoriza la ejecución de otras funciones tales como God(), etc..● El único parámetro conocido, hasta ahora, es “Panzerklein”.

QCmd ou GiveQCommand : QCmd(iAction, iScriptID [,params, ...])● Esta función es la misma que Cmd(), los comandos / acciones que pueden utilizarse son los mismos.● La ventaja de QCmd() es que permite ordenar una serie de acciones consecutivas para una unidad.● Ej.: Pedir a una unidad desplazarse a diferentes sitios del mapa.

Cmd(0, 101, 1000, 500) – ordena a la unidad 101 dirigirse a 1000,500. QCmd(0, 101, 1000, 1000) – a continuación ir al punto 1000,1000.

Page 22: Funciones Lua Blitzkrieg 1

QCmd(0, 101, 2000, 2000) – a continuación ir al punto 2000,2000. etc..

RandomFloat()● La función RandomFloat() devuelve un valor aleatorio (decimal) comprendido entre 0 y 1,00.

RandomInt(n)● La función RandomInt(n) devuelve un valor aleatorio (entero) comprendido entre 0 y n-1.

ReserveAviationForTimes(iParty, iTime)● Esta función parece prohibir (a verificar) el uso de la aviación para el bando iParty durante el tiempo

iTime (en milisegundos). No ha sido posible verificar su funcionamiento.

RunScript(strScriptFunctionName, iPeriodicity [, iNumberOfRepetitions])● Ejecuta la función strScriptFunctionName con la periodicidad iPeriodicity en milisegundos (1000 =

1 segundo).● Ej.: RunScript(“ProbarObjetivos_1”, 1000) ; -- Ejecuta la función

ProbarObjetivos_1 cada segundo.● iNumberOfRepetions es opcional, este parámetro indica el número de

repeticiones de ejecución de la función strScriptFunctionName.● Ej.: RunScript(“ProbarObjetivos_2 », 300000, 3) ; -- Ejecuta la función

ProbarObjetivos_2 cada 5 minutos. (5*60*1000) y solamente 3 veces.● La función RunScript() es una de las mas importantes para escribir

programas en LUA.

SetCheatDifficultyLevel(n)● Establece el nivel de “trampas” del juego (N).● N puede tener los valores siguientes: 0, 1 y 2● Nota del autor: No conozco el impacto de estos niveles.

SetDifficultyLevel(n)● Establece el nivel de dificultad del juego (N).● N puede tener los valores siguientes: 0 (Facil), 1 (Normal) et 2 (Dificil)

SetFGlobalVar (strGlobalVarName, fVar)● Asigna el valor fVar (un valor decimal) a la variable global strGlobalVarName.● Si la variable global strGlobalVarName no existe la crea antes de la primera asignación.● Funciones relacionadas: GetFGlobalVar().

SetGameSpeed(n)● La función SetGameSpeed() permite establecer al velocidad del juego.● N puede tener los valores entre 0 y 19.● El valor 0 parece ser el que corresponde a la velocidad normal.

SetIGlobalVar(strGlobalVarName, iVar)● Asigna el valor iVar (un valor entero) a la variable global strGlobalVarName.● Si la variable global strGlobalVarName no existe la crea antes de la primera asignación.

Page 23: Funciones Lua Blitzkrieg 1

● Funciones relacionadas: GetFGlobalVar().

SetSGlobalVar(strGlobalVarName, sVar)● Asigna el valor sVar (una cadena de caracteres) a la variable global strGlobalVarName.● Si la variable global strGlobalVarName no existe la crea antes de la primera asignación.● Funciones relacionadas: GetFGlobalVar().

ShowActiveScripts()● La función ShowActiveScripts() visualiza en la consola del juego las funciones que están en

ejecución.● Ej.: Si tenemos en ejecución la sentencia del programa: RunScript(“Prueba_1”, 2000) ; etc..● La función ShowActiveScripts() devolverá: Prueba_1.

Suicide()● La función Sucide() hace que se cancele la ejecución de una función que ha sido invocada por la

función RunScript().● Ej. : Tenemos la función Prueba() que ha sido llamada por la función RunScript(“Prueba”, 1000) y que

comprueba cada segundo la variable global gTest (es un ejemplo). Si gTest es igual a 1 entonce la función Prueba() saca un mensaje en pantalla y se detiene.

● En caso contrario la función no hace nada y volverá a ejecutar al segundo.● El codigo de la función Prueba() es el siguiente:

Prueba()if (GetIGlobalVar(« gTest », 0) == 1) thenDisplayTrace(“Prueba pasada”);Suicide(); -- a partir de ahora la función no vuelve a ejecutarse.end ;end ;

SwitchWeather(iState)● Esta función permite cambiar el clima.● Si iState = 1, el clima cambia a “malo” y entre otros efectos la aviación no estará .● Si iState = 0, el clima cambia a “bueno”.

SwitchWeatherAutomatic(iState)● Esta función permite activar o desactivar el cambio de clima automático.● Si iState=1, el clima cambiará automáticamente en intervalos aleatorios.● Si iState=0, el clima no cambiará del estado en que se encuentre en este momento.

Trace(strText [, params, …])● En el modo depuración (debug), Trace() es una función que permite visualizar mensajes en consola

del juego.● Trace() puede visualizar mensajes de cadena de caracteres o el contenido de variables númericas.

Las cadenas de caracteres debe estar entre dobles comillas (“ “). La visualización de valores númerico debe hacerse de la siguiente forma:

Trace(“El estado de la unidad %g es %g”, iScriptID, GetUnitState(iScriptID)); Si iScriptID es igual a 100, y la unidad está en movimiento. El resultado es : El estado de la unidad 100 es 32.

● Esta función es muy útil para seguir y depurar la ejecución de los programas.

Page 24: Funciones Lua Blitzkrieg 1

ViewZone(strScriptAreaName, iParam)● Permite visualizar la zona strScriptAreaName sin niebla de guerra si iParam = 1● Si iParam = 0 la zona será visible pero con niebla de guerra.

Win(iParty)● En modo de un solo jugador, el jugador iParty gana la partida.● En modo multijugador el bando iParty gana la partida.

** *

Pz.Kpfw II.Ausf C

Page 25: Funciones Lua Blitzkrieg 1

Programa de ejemploEl siguiente programa es un ejemplo, denominado Ayuda (Support en el original de Calvin). Es un programa generico que no está relacionado con ninguna zona del mapa ni con ningún objetivo, ni objeto.El proposito del programa es hacer que una unidad atacada, reciba ayuda, despues de enviar una llamada de alarma.La unidad atacada está en el centro del mapa y las unidades que acuden en su ayuda en el noreste.

Aquellos que quieran probar el programa y de paso aprender algo sobre diseño de mapas y programación en LUA para BK1 deben ejecutar los pasos siguientes:

1. Crear un nuevo mapa de 6x6 o 8x8.2. Colocar para el jugador controlado por la IA (el aleman por ejemplo) una torre de vigilancia en el

centro del mapa.3. Colocar dentro de la torre un pelotón de infanteria alemana.4. Colocar en la esquina superior del mapa 3 vehiculos acorazados alemanes.5. Colocar en la esquina derecha del mapa 2 camiones y un cañon alemanes.6. Colocar en la esquina inferior 2 o 3 pelotones de infantería alemana.7. Colocar en la esquina izquierda alguno vehiculos acorazados aliados.8. A continuación ejecutar BK y atacar la torre de vigiliancia, el resto de las unidades alemanas no se

moverán, ni al atacar la torre ni al atacar a cualquiera de los otros grupos de unidades.9. Ahora, añadir a el mapa el programa ayuda.lua, para lo cual hay que copiar el texto de las paginas

siguientes en el fichero de texto con extensión .lua.10. Asignar al pelotón de infanteria que está dentro de la torre el iScriptID 101.11. Asignar a los 3 vehiculos acorazados alemanes el iScriptID 201.12. Asignar a los 2 camiones alemanes el iScriptID 401.13. Asignar al cañon aleman el iScriptID 301.14. Asignar a los 2 o 3 pelotones de infantería de la esquina inferior del mapa el iScriptID 10215. y probar a ejecutar el programa de nuevo.........16. Durante las pruebas si se mantienen activadas las sentencias Password, ChageFog y God, se podrá

ver lo que sucede en el mapa y ver información en el modo consola.17. A divertirse....

Page 26: Funciones Lua Blitzkrieg 1

-- Ayuda.lua V1.0-- Calvin - 29/05/03-- 16/06/03 - Añadida prueba de trincheras y zona zona maxima de intervención-- 01/07/07 - ElGotele, traducción del codigo al español del programa Support.lua V1.2---- El proposito de este programa es enviar una alarma a la unidad mas proxima cuando una unidad es atacada.-- -- PREREQUISITOS---- Asignar un iScriptID a cada unidad o grupo de unidades-- La infanteria (dentro o fuera del edificio) debe tener un iScriptID entre 101 y 110-- Los vehiculos acorazados deben tener un iScriptID entre 201 y 210-- Los cañones deben tener un iScriptID entre 301 y 310-- Los camiones deben tener un iScriptID entre 401 y 410-- Las unidades especiales deben tener un iScriptID entre 501 y 510---- El programa gestiona como maximo 50 unidades con iScriptID entre 100 y 510 -- Las unidades con iScriptID inferior a 100 o superior a 510 son gestionadas directamente por BK con funciones propias-- de la IA. No es necesario asignar un script a todas las unidades.

-- CONSTANTES

-- Jugador (PLAYER_ID) = 1 IA, 0 = Humano, 2 = NeutralPLAYER_ID = 1

-- Constantes - x = GetUnitState(iScriptID)ETAT_NEXISTEPAS = -1ETAT_INDISPONIBLE = 0ETAT_ENATTENTE = 1ETAT_ENDEFENSE = 8ETAT_DSTRANCHEE = 9ETAT_MVT_ASSAUT = 11ETAT_ATTAQUE_1 = 13ETAT_EMBUSCADE = 15ETAT_TIR_X = 16ETAT_POSE_BARBELES = 18ETAT_ATTAQUE_2 = 21ETAT_MVT_NORMAL = 32ETAT_JUMELLES = 33ETAT_TIR_W = 34ETAT_REPARER = 36ETAT_RECHARGER = 37ETAT_PIVOTE = 43ETAT_REMORQUE = 47

-- TABLASarg={0,0,0,0,0} -- iScriptID de la unidades en el mapa

-- gActiveUnits[][1] = iDScript-- gActiveUnits[][2] = Status-- gActiveUnits[][3] = 1 (attack mode) ou 0 (defense mode)

gActiveUnits = {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}

MAX_ACTIVE_UNITS = 50 -- Numero maximo de unidades en el mapa

UNIT_DEF = 0 -- [][3]UNIT_ATT = 1 -- [][3]UNIT_NORMAL = 1 -- [][2] -- Identico ETAT_ENATTENTEUNIT_MVT = 2 -- [][2]UNIT_ALARME = 3 -- [][2]

--Zona de alarmaALARME_RAYON = 12*64 -- ALARME_RAYON es el radio (en Script points) de un circulo, el centro del circulo es una unidad de infanteriaZONE_MAX_INTERVENTION = 128 -- ZONE_MAX_INTERVENTION es la distancia maxima en VIS point para ayuda a otra unidad

-- Tipos de unidadesUTYPE_INF = 100UTYPE_TANK = 200UTYPE_GUN = 300UTYPE_TRUCK = 400UTYPE_SPECIAL = 500UTYPE_INF_ID = 1UTYPE_TANK_ID = 2UTYPE_GUN_ID = 3UTYPE_TRUCK_ID = 4UTYPE_SPECIAL_ID = 5

Page 27: Funciones Lua Blitzkrieg 1

UTYPE_UNITS_MAX = 10

-- La tabla gActiveTypeUnits contiene para cada tipo de unidad el número de unidadesgActiveTypeUnits = {0, 0, 0, 0, 0}

-- Función InitActiveUnits()-- El proposito de esta función es rellenar la tabla gActiveUnits[][] de la forma siguiente:-- Primero se obtiene el número de unidades en el mapa para cada tipo de unidad.-- Los 5 tipos de unidades son: Infanteria, Tanques, Cañones, Camiones y una unidad especial (francotirador).-- El número maximo de unidades de cada tipo es de 10 según se especifia en UTYPE_UNITS_MAX. -- La función GetHowManyUnits() es la que devuelve el número de unidades por tipo en el mapa.---- A continuación se comprueba el estado de cada unidad con GetUnitState()-- Por defecto los cañones, los camiones y las unidades especiales están en modo defensivo.-- En el modo defensivo las unidades no ayudarán a otras que envien una alarma.-- La infanteria en el interior de edificios o trincheras se consideran en modo defensivo.-- ========================================================================================function InitActiveUnits()--Recuperar número de unidades de cada tipo en el mapa

local n, i, j, u = 0, 0, 0, 0;gActiveTypeUnits[UTYPE_INF_ID] = GetHowManyUnits(UTYPE_INF);gActiveTypeUnits[UTYPE_TANK_ID] = GetHowManyUnits(UTYPE_TANK);gActiveTypeUnits[UTYPE_GUN_ID] = GetHowManyUnits(UTYPE_GUN);gActiveTypeUnits[UTYPE_TRUCK_ID] = GetHowManyUnits(UTYPE_TRUCK);gActiveTypeUnits[UTYPE_SPECIAL_ID] = GetHowManyUnits(UTYPE_SPECIAL);

-- Establecer el estado de cada unidadj = 0;while (j<5) do

i = 0;u = UTYPE_INF * (j+1);while (i<gActiveTypeUnits[j+1]) do

if (GetUnitState(u+i+1) > 0 )thengActiveUnits[n+1][1] = u+i+1; gActiveUnits[n+1][2] = GetUnitState(u+i+1); if ((gActiveUnits[n+1][2] == ETAT_ENDEFENSE) or (gActiveUnits[n+1][2] ==

ETAT_DSTRANCHEE)) thengActiveUnits[n+1][3] = UNIT_DEF;

elsegActiveUnits[n+1][3] = UNIT_ATT;

end;-- Las unidades de tipo artilleria, camiones y especiales no se desplazan para ayudar

if ((u >= UTYPE_GUN) and (u <= UTYPE_SPECIAL + 99)) thengActiveUnits[n+1][3] = UNIT_DEF;

end;n = n +1; if (n >= MAX_ACTIVE_UNITS) then

break;end;

end; i = i +1;

end; j = j +1;if (n >= MAX_ACTIVE_UNITS) then

break;end;

end; gActiveUnits[n+1][2] = -2;SetIGlobalVar("temp.map.nbunits",n);i = 0;while (i<n) do

i = i +1;end;Suicide();

end;-- ========================================================================================-- Función GetHowManyUnits(...)-- El proposito de esta función es devolver el número de unidades para el tipo de unidad designado en el parametro-- El número maximo de unidades en la tabla gActiveUnits[][] es MAX_ACTIVE_UNITS (50 unidades)---- Parámetros de entrada :-- tabla arg[1] el iScriptID a comprobar---- Parámetros de salida :

function GetHowManyUnits(...)local i = 1;local n = 0;while (i<UTYPE_UNITS_MAX) do

if (GetNUnitsInScriptGroup(arg[1]+i, PLAYER_ID) > 0) thenn = n +1;

end;i = i + 1;

end;

Page 28: Funciones Lua Blitzkrieg 1

return n;end;

-- ========================================================================================-- Funcón Test_Att()-- El proposito de esta función es determinar si una unidad está siendo atacada.-- Se comprueban las unidades referenciadas en la tabla gActiveUnits[][].---- Una unidad de infantería esta bajo ataque cuando sus enemigos entra en la zona ALARME_RAYON alrededor de la unidad.-- Los tanques y cañones están bajo ataque cuando la función GetUnitState() devuelve 21-- Un camión esta bajo ataque cuando sus enemigos entra en la zona ALARME_RAYON alrededor de la unidad.-- A francotirador está bajo ataque cuando sus enemigos entran en la zona ALARME_RAYON+(2*64) alrededor de la unidad.---- Cuando una unidad está bajo ataque se llama a la función SelectUnitToHelp() para buscar la unidad mas cercana que puede ayudarla.--function Test_Att()

local i = 0;local uid = 0;local x,y = 0,0;if (GetIGlobalVar("temp.map.EC",0) == 0) then

SetIGlobalVar("temp.map.EC",1); while (i<GetIGlobalVar("temp.map.nbunits",0)) do

uid = gActiveUnits[i+1][1];if (GetUnitState(uid) ~= -1) then

x,y = GetObjCoord(uid);if (uid < UTYPE_TANK) then

if (GetNUnitsInCircle(0,x,y,ALARME_RAYON) > 0) thenif (gActiveUnits[i+1][2] ~= UNIT_ALARME) then

gActiveUnits[i+1][2] = UNIT_ALARME;SelectUnitToHelp(x,y,uid);

end; else

if (GetUnitState(uid) == ETAT_ENATTENTE) thengActiveUnits[i+1][2] = UNIT_NORMAL;

end;end;

end; -- If INFif ((uid > UTYPE_TANK) and (uid < UTYPE_GUN)) then

if (GetUnitState(uid) == ETAT_ATTAQUE_2) thenif (gActiveUnits[i+1][2] ~= UNIT_ALARME) then

gActiveUnits[i+1][2] = UNIT_ALARME;SelectUnitToHelp(x,y,uid);

end; else

if (GetUnitState(uid) == ETAT_ENATTENTE) thengActiveUnits[i+1][2] = UNIT_NORMAL;

end;end;

end; -- If TANKif ((uid > UTYPE_GUN) and (uid < UTYPE_TRUCK)) then

if (GetUnitState(uid) == ETAT_ATTAQUE_2) thenif (gActiveUnits[i+1][2] ~= UNIT_ALARME) then

gActiveUnits[i+1][2] = UNIT_ALARME;SelectUnitToHelp(x,y,uid);

end; -- if UNIT_NORMALelse

if (GetUnitState(uid) == ETAT_ENATTENTE) thengActiveUnits[i+1][2] = UNIT_NORMAL;

end;end;

end; -- If GUNif ((uid > UTYPE_TRUCK) and (uid < UTYPE_SPECIAL))then

if (GetNUnitsInCircle(0,x,y,ALARME_RAYON) > 0) thenif (gActiveUnits[i+1][2] ~= UNIT_ALARME) then

gActiveUnits[i+1][2] = UNIT_ALARME;SelectUnitToHelp(x,y,uid);

end; else

if (GetUnitState(uid) == ETAT_ENATTENTE) thengActiveUnits[i+1][2] = UNIT_NORMAL;

end;end;

end; if ((uid > UTYPE_SPECIAL) and (uid < UTYPE_SPECIAL + 99))then -- Test the special

untisif (GetNUnitsInCircle(0,x,y,ALARME_RAYON+(2*64)) > 0) then

if (gActiveUnits[i+1][2] ~= UNIT_ALARME) thengActiveUnits[i+1][2] = UNIT_ALARME;SelectUnitToHelp(x,y,uid);

end; else

if (GetUnitState(uid) == ETAT_ENATTENTE) then

Page 29: Funciones Lua Blitzkrieg 1

gActiveUnits[i+1][2] = UNIT_NORMAL;end;

end;end;

end; i = i +1;

end;SetIGlobalVar("temp.map.EC",0);end;

end;-- ========================================================================================-- Función SelectUnitToHelp(...)-- Activa la unidad mas cercana a la unidad que ha enviado la alarma.--function SelectUnitToHelp(...)

local i, distance, tp, uid, uidx = 0,0,0,0,0;local x,y = 0,0;while (i<GetIGlobalVar("temp.map.nbunits",0)) do

if ((gActiveUnits[i+1][2] == UNIT_NORMAL) and (gActiveUnits[i+1][3] == UNIT_ATT)) thenif (GetUnitState(gActiveUnits[i+1][1]) ~= -1) then

x,y = GetObjCoord(gActiveUnits[i+1][1]);tp = CalculDistance(arg[1]/64, arg[2]/64, x/64,y/64);if (tp < ZONE_MAX_INTERVENTION) then

if ((distance == 0) or (tp < distance)) thendistance = tp;uid = gActiveUnits[i+1][1];uidx = i+1;

end; end;

end;end;i = i +1;

end; if (distance > 0) then

gActiveUnits[uidx][2] = UNIT_MVT;if (uid < UTYPE_TANK) then

Cmd(0,uid,arg[1],arg[2]);else

Cmd(3,uid,arg[1],arg[2]);end;

end;end;-- ========================================================================================-- Función CalculDistance(...)-- Esta función calcula la distancia entre dos puntos (A, B) del mapa.-- Se utiliza la expresión matematica: distancia = SQRT((Bx-Ax)² + (By-Ay)²)-- Las coordenada pueden ser expresadas en VIS points o SCRIPT points-- Nota : 1x1 VIS points= 64x64 SCRIPT points-- Las coordenadas de los puntos A y B-- arg[1] coordenada x de A-- arg[2] coordenada y de A-- arg[3] coordenada x de B-- arg[4] coordenada y de B--function CalculDistance(...)

return sqrt(((arg[3]-arg[1])*(arg[3]-arg[1])) + ((arg[4]-arg[2])*(arg[4]-arg[2])));end;-- ========================================================================================-- Function sqrt()-- Calcual la posición del valor x en el mapa oficial Secure_area.lua--function sqrt( x)local ITNUM = 4;local sp = 0local i = ITNUM;local inv = 0;local a, b;

if ( x <= 0) then return 0; end;if ( x < 1) then

x = 1 / x;inv = 1;

end;while ( x > 16) do

sp = sp + 1;x = x / 16;

end;a = 2;

-- while (i > 0) do

b = x / a;a = a + b;a = a * 0.5;i = i - 1;

end;

Page 30: Funciones Lua Blitzkrieg 1

--while ( sp > 0) do

sp = sp - 1;a = a * 4;

end;if ( inv == 1) then

a = 1 / a;end;return a;

end;--------------------------------------------------------------------------------------------------function Init()

RunScript("InitActiveUnits",1000);----------------

Password( "Panzerklein" )ChangeWarFog(1)

-- God(1,1)-----------------

RunScript("Test_Att", 2000);Trace("Final Init");end;