Funciones LUA para Blitzkrieg 1 por ElGotele, junio 2007

Funciones LUA para Blitzkrieg 1 por ElGotele, junio 2007 traducción libre de los documentos Aide sur les commandes Lua pour BlitzKrieg Version 1.5 ...
10 downloads 3 Views 426KB Size
Funciones LUA para Blitzkrieg 1 por ElGotele, junio 2007 traducción libre de los documentos

Aide sur les commandes Lua pour BlitzKrieg Version 1.5

BlitzKrieg Guide to Programming Lua functions Version 1.6 de

Calvin

Índice de contenido Lista de funciones ........................................................................................................................... 5 Principios basicos relativos a la IA.............................................................................................. 6 Descripción de funciones............................................................................................................... 7 AddIronMan(iScriptID)............................................................................................................ 7 ChangeFormation(iScriptID, iFormation).............................................................................. 7 ChangePlayer(iScriptID, iParty).............................................................................................. 7 ChangeWarFog(iParty)............................................................................................................... 7 Cmd ou GiveCommand : Cmd(iAction, iScriptID [,params, ...])......................................... 8 iAction = 0 - MOVE TO - Cmd(0, iScriptID, x, y).......................................................... 8 iAction = 1 - ATTACK UNIT - Cmd(1, iScriptID, iScriptID_Cible)........................... 8 iAction = 2 - ATTACK OBJECT or ATTACK NON UNIT OBJECT : Cmd(2, ....).....8 iAction = 3 - SWARM TO : Cmd(3, iScriptID, x, y)....................................................... 8 iAction = 4 - LOAD UNIT : Cmd(4, iScriptID, iScripID_Cible)................................. 8 iAction = 5 - UNLOAD UNIT : Cmd(5, iScriptID, x, y)................................................ 9 iAction = 6 - ENTER TO BUILDING : Cmd(6, iScriptID, iScriptID_Cible)............ 9 iAction = 7 - LEAVE BUILDING : Cmd(7, iScriptID, x, y)......................................... 10 iAction = 8 - ROTATE TO : Cmd(8, iScriptID, x, y).................................................... 10 iAction = 9 - STOP : Cmd(9, iScriptID).......................................................................... 10 iAction = 10 - PARADE : Cmd(10, iScriptID, iParade)................................................. 10 iAction = 11 - PLACEMINE : Cmd(11, iScriptID, x, y).................................................. 10 iAction = 12 - CLEAR MINE : Cmd(12,..)..........................................................................10 iAction = 13 - GUARD : Cmd(13, ...).................................................................................. 10 iAction = 14 - AMBUSH : Cmd(14, iScriptID)................................................................10 iAction = 15 - RANGE AREA : Cmd(15, iScriptID, x, y).............................................. 10 iAction = 16 - SUPRESSIVE FIRE : Cmd(16, iScriptID, x, y).....................................11 iAction = 17 - INSTALL : Cmd(17, iScriptID)................................................................ 11 iAction = 18 - UNINSTALL : Cmd(18, iScriptID).......................................................... 11 iAction = 19 - CALL BOMBERS : Cmd(19, Avion_iScriptID, iParty, x, y)................ 11 iAction = 20 - CALL FIGHTERS : Cmd(20, Avion_iScriptID, iParty, x , y).............11 iAction = 21 - CALL SCOUT : Cmd(21, Avion_iScriptID, iParty, x, y)...................... 11 iAction = 22 - CALL PARADROP : Cmd(22, Avion_iScriptID, iParty, x, y)............. 11 iAction = 23 - RESUPLY UNITS : Cmd(23, ...)............................................................... 11 iAction = 24 - REPAIR UNIT : Cmd(24, ...).................................................................... 12 iAction = 29 - USE SPY GLASS : Cmd(29, iScriptID, x, y)........................................12 iAction = 31 - TAKE ARTILLERY : Cmd(31, iScript, iSCriptArtillery).................... 12 iAction = 32 - DEPLOY ARTILLERY : Cmd(32, iScript, x, y)..................................... 12 iAction = 34 – DISBAND SQUAD : Cmd(34, iScriptID)............................................ 12 iAction = 35 – FORM FORMATION : Cmd(35, iScriptID, ....)................................... 12 iAction= 36 - CALL GROUND ATTACK PLANE: Cmd(36, Avion_iScriptID, iParty, x, y).......................................................................................................................................... 13

iAction = 39 – FOLLOW : Cmd(39, iScriptID, iScript_Cible)....................................13 iAction = 43 - RESUPLY HUMANS : Cmd(43, ...).......................................................... 13 iAction = 45 – ENTRENCH SELF : Cmd(45, ...).............................................................. 13 iAction = 46 – CHANGE SHELL TYPE : Cmd(46, ...)..................................................... 13 DamageObject(iScriptID, fDamage).................................................................................... 13 DeleteReinforcement(iScriptID).......................................................................................... 13 DisableAviation(iParty, iAviationType)................................................................................ 14 DisplayTrace(strText [, params, ...]).................................................................................... 14 Draw()........................................................................................................................................... 14 EnableAviation(iParty, iAviationType).................................................................................. 14 GetActiveShellType(iScriptID)............................................................................................. 14 GetAviationState(iPlayer)....................................................................................................... 15 GetFGlobalVar(strGlobalVarName, 0).................................................................................. 15 GetFrontDir(iScriptID)........................................................................................................... 15 GetIGlobalVar(strGlobalVarName,0)................................................................................... 15 GetMapSize()............................................................................................................................. 15 GetNAmmo(iScriptID)............................................................................................................. 15 GetNAntitankInScriptArea(strScriptAreaName)........................................................... 16 GetNAPFencesInScriptArea(strScriptAreaName).......................................................... 16 GetNFencesInScriptArea(strScriptAreaName)............................................................... 16 GetNMinesInScriptArea(strScriptAreaName)................................................................. 16 GetNScriptUnitsInArea(iScriptID, strScriptAreaName)............................................. 16 GetNTrenchesInScriptArea(strScriptAreaName).......................................................... 16 GetNUnitsInArea(iPlayer, strScriptAreaName)............................................................... 16 GetNUnitsInCircle(iPlayer, X, Y, Radius)............................................................................ 16 GetNUnitsInParty(iPlayer)..................................................................................................... 17 GetNUnitsInPartyUF(iParty)................................................................................................. 17 GetNUnitsInPlayerUF(iPlayer)............................................................................................... 17 GetNUnitsInScriptGroup(iScriptID [, iPlayer])................................................................ 17 GetNUnitsInSide(iParty)........................................................................................................ 17 GetNUnitsOfType(strUnitType, iPlayer)............................................................................ 17 GetObjCoord(iScriptID)......................................................................................................... 18 GetObjectHPs(iScriptID_Static)......................................................................................... 18 GetPartyOfUnits(iScriptID).................................................................................................. 18 GetScriptAreaParams(strScriptAreaName)...................................................................... 18 GetSGlobalVar(strGlobalVarName, 0).................................................................................. 18 GetSquadInfo(iScriptID)........................................................................................................ 18 GetUnitMorale(iScriptID)...................................................................................................... 19 GetUnitState(iScriptID)......................................................................................................... 19 God(iParty, iMode).................................................................................................................... 19 IsEntrenched(iScriptID)........................................................................................................ 20 IsFollowing(iScriptID)............................................................................................................ 20 IsPlayerPresent(iPlayer)......................................................................................................... 20

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

Lista de funciones Función

Oficial Modo juego

Función

Oficial Modo juego

AddIronMan

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

¿?

Principios basicos relativos a la IA 1. 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.

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



Movimiento

Formación por defecto

0

DEFAULT

Formación de marcha

1

MOVEMENT En columnas

Formación defensiva

2

DEFENSIVE Cuerpo a tierra

Formación de asalto

3

OFFENSIVE En linea

En grupo

Para el francotirador Formaciones



iFormation Editor

iFormation Editor

Formación por defecto

0

DEFAULT

Formación de marcha

1

MOVEMENT

Formación defensiva

2

DEFENSIVE

Formació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

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 antitanque

32

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.





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

1

Camió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 then Cmd(6, 100, 300) end end 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.

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ía

43

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.

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.

● ●

● ● ●

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.

● ●

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

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().

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 reconocimiento

1

Avión de combate (cazas)

2

Paracaidistas

3

Bombarderos

4

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.



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.

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.

● ● ●

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 Unidad no existe



GetSquadInfo GetSquadInfo Infantería Francotirador -2, -3

-2, -3

Formación por defecto

0

0

Formación de marcha

1

1

Formación defensiva Formación furtiva

2

Formación de asalto

3

2 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.

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 Valor Comentarios relacionado

Comando relacionado

-1

La unidad no exite

23

0

Estado desconocido

24

Enganchada a un camión

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

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 Cmd(43, ...) verificar

15

Emboscada

Cmd(14, ...)

39

Construyendo un puente

16

En tiro automático

Cmd(15, ...)

40

Contruyendo obstaculos antitanques

17

-

41

Colocando minas

18

Construyendo alambradas

42

-

19

Construyendo trincheras

43

Pivotando / Girando

20

-

44

-

21

Atacando (solo infanteria)

45

-

22

Blindado atancando a una unidad dentro de un edificio

47

Remolcando un cañon

Cmd(1, ...)

Cmd(31, ...)

Cmd(22, ...)

Cmd(11, ...)

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



iMode

Detiene completamente el modo Dios (“God”)

0

Unidades invulnerables

1

Unidades invulnerables y eliminan a las unidades enemigas al primer contacto

2

Eliminar a las unidades enemigas al primer contacto

3

Detener la invulnerabilidad

4

Detener la eliminación de unidades enemigas al primer contacto

5

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

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.



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 .txt & 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.



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.



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) then DisplayTrace(“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.

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

Programa de ejemplo El 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 102 15. 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....

-- 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 = Neutral PLAYER_ID = 1 -- Constantes - x = GetUnitState(iScriptID) ETAT_NEXISTEPAS = -1 ETAT_INDISPONIBLE = 0 ETAT_ENATTENTE = 1 ETAT_ENDEFENSE = 8 ETAT_DSTRANCHEE = 9 ETAT_MVT_ASSAUT = 11 ETAT_ATTAQUE_1 = 13 ETAT_EMBUSCADE = 15 ETAT_TIR_X = 16 ETAT_POSE_BARBELES = 18 ETAT_ATTAQUE_2 = 21 ETAT_MVT_NORMAL = 32 ETAT_JUMELLES = 33 ETAT_TIR_W = 34 ETAT_REPARER = 36 ETAT_RECHARGER = 37 ETAT_PIVOTE = 43 ETAT_REMORQUE = 47 -- TABLAS arg={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 = UNIT_ATT = UNIT_NORMAL = UNIT_MVT = UNIT_ALARME =

0 1 1 2 3

------

[][3] [][3] [][2] -- Identico ETAT_ENATTENTE [][2] [][2]

--Zona de alarma ALARME_RAYON = 12*64 -- ALARME_RAYON es el radio (en Script points) de un circulo, el centro del circulo es una unidad de infanteria ZONE_MAX_INTERVENTION = 128 -- ZONE_MAX_INTERVENTION es la distancia maxima en VIS point para ayuda a otra unidad -- Tipos de unidades UTYPE_INF = UTYPE_TANK = UTYPE_GUN = UTYPE_TRUCK = UTYPE_SPECIAL = UTYPE_INF_ID = UTYPE_TANK_ID = UTYPE_GUN_ID = 3 UTYPE_TRUCK_ID = UTYPE_SPECIAL_ID =

100 200 300 400 500 1 2 4 5

UTYPE_UNITS_MAX = 10 -- La tabla gActiveTypeUnits contiene para cada tipo de unidad el número de unidades gActiveTypeUnits = {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 unidad j = 0; while (j= UTYPE_GUN) and (u = 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 UTYPE_TANK) and (uid < UTYPE_GUN)) then if (GetUnitState(uid) == ETAT_ATTAQUE_2) then if (gActiveUnits[i+1][2] ~= UNIT_ALARME) then gActiveUnits[i+1][2] = UNIT_ALARME; SelectUnitToHelp(x,y,uid); end; else if (GetUnitState(uid) == ETAT_ENATTENTE) then gActiveUnits[i+1][2] = UNIT_NORMAL; end; end; end; -- If TANK if ((uid > UTYPE_GUN) and (uid < UTYPE_TRUCK)) then if (GetUnitState(uid) == ETAT_ATTAQUE_2) then if (gActiveUnits[i+1][2] ~= UNIT_ALARME) then gActiveUnits[i+1][2] = UNIT_ALARME; SelectUnitToHelp(x,y,uid); end; -- if UNIT_NORMAL else if (GetUnitState(uid) == ETAT_ENATTENTE) then gActiveUnits[i+1][2] = UNIT_NORMAL; end; end; end; -- If GUN if ((uid > UTYPE_TRUCK) and (uid < UTYPE_SPECIAL))then if (GetNUnitsInCircle(0,x,y,ALARME_RAYON) > 0) then if (gActiveUnits[i+1][2] ~= UNIT_ALARME) then gActiveUnits[i+1][2] = UNIT_ALARME; SelectUnitToHelp(x,y,uid); end; else if (GetUnitState(uid) == ETAT_ENATTENTE) then gActiveUnits[i+1][2] = UNIT_NORMAL; end; end; end; if ((uid > UTYPE_SPECIAL) and (uid < UTYPE_SPECIAL + 99))then -- Test the special untis if (GetNUnitsInCircle(0,x,y,ALARME_RAYON+(2*64)) > 0) then if (gActiveUnits[i+1][2] ~= UNIT_ALARME) then gActiveUnits[i+1][2] = UNIT_ALARME; SelectUnitToHelp(x,y,uid); end; else if (GetUnitState(uid) == ETAT_ENATTENTE) then

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 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 = 0 local i = ITNUM; local inv = 0; local a, b; if ( 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;

-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;