下面TA-EXCESS II alpha1e版的ARM的T1飞机工厂的脚本,估计每个版本的都一样,如果你的版本不一样也可以对照看看
下面是脚本的注释:
#define TA
#include “sfxtype.h”
#include “exptype.h”
piece base, plate, decor4, decor5, decor6, building, system, lathe, spray, shield, decor1, decor2, decor3, buildpad, arrow, socle;
static-var DesiredState, StateChanging; //定义两个静态变量DesiredState和 StateChanging
SmokeUnit(HealthPercent, SleepTime)
{
while( get BUILD_PERCENT_LEFT )
{
sleep 500;
}
while( TRUE )
{
HealthPercent = get HEALTH;
if( HealthPercent < 60 )
{
emit-sfx 256 | 1 from decor1;
emit-sfx 256 | 1 from decor6;
SleepTime = 350;
}
if( HealthPercent < 30 )
{
emit-sfx 256 | 2 from decor2;
emit-sfx 256 | 2 from decor4;
SleepTime = 250;
}
sleep SleepTime;
}
}
RequestState(RequestedState, CurrentState) //请求状态(请求状态,当前状态)
{
if( StateChanging ) //如果(状态改变中),开头定义的静态变量
{
DesiredState = RequestedState; //要求状态=请求状态,
return (0); //返回0
}
StateChanging = TRUE; //状态改变中=真的
CurrentState = DesiredState; //当前状态=要求状态
DesiredState = RequestedState; //要求状态=请求状态
while( DesiredState != CurrentState ) //当要求状态!=当前状态的时候
{
if( DesiredState == 0 ) //要求状态==0,也就是打开状态
{
set ARMORED to 0; //护甲系统无效
//下面是打开的运动
move system to y-axis [2.00] speed [8.00]; //把部件上升
move shield to y-axis [-2.00] speed [8.00]; //把部件下降
sleep 250;
move system to x-axis [2.00] speed [8.00]; //把部件左移
sleep 250;
move lathe to x-axis [2.00] speed [4.00]; //把部件左移
turn lathe to z-axis <-40.00> speed <80.00>; //把部件绕Z轴向下转动40度
sleep 500;
//下面是打开后把地面打开,也就是yardmap的c可以通过,不用管,
set YARD_OPEN to 1; //
while( !get YARD_OPEN )
{
set BUGGER_OFF to 1;
sleep 1500;
set YARD_OPEN to 1;
}
set BUGGER_OFF to 0; //
set INBUILDSTANCE to 1; //处于建造状态=1
CurrentState = 0; //当前状态=0
}
if( DesiredState == 1 ) //要求状态==1,也就是关闭状态
{ //和上面是反的
set INBUILDSTANCE to 0;
set YARD_OPEN to 0;
while( get YARD_OPEN )
{
set BUGGER_OFF to 1;
sleep 1500;
set YARD_OPEN to 0;
}
set BUGGER_OFF to 0;
move lathe to x-axis [0.00] speed [4.00];
turn lathe to z-axis <0.00> speed <80.00>;
sleep 500;
move system to x-axis [0.00] speed [8.00];
sleep 250;
move system to y-axis [0.00] speed [8.00];
move shield to y-axis [0.00] speed [8.00];
sleep 250;
set ARMORED to 1; //护甲系统有效
CurrentState = 1; //当前状态=1
}
}
StateChanging = FALSE; //状态改变中=假的
}
//很长,不过我们要改的也就是打开关闭的动作,其他可以不用管
Create()
{
DesiredState = TRUE;
StateChanging = FALSE;
set ARMORED to 1; //出生状态是关闭的,所以护甲系统也要有效
dont-shade plate;
dont-shade decor4;
dont-shade decor5;
dont-shade decor6;
dont-shade building;
dont-shade system;
dont-shade lathe;
dont-shade shield;
dont-shade decor1;
dont-shade decor2;
dont-shade decor3;
dont-shade socle;
dont-shade arrow;
dont-cache arrow;
hide arrow;
start-script SmokeUnit();
}
QueryNanoPiece(PieceNum) //这个是纳米喷枪的喷嘴
{
PieceNum = spray; //喷嘴就是spray部件
}
Activate() //活动
{
signal 2;
start-script RequestState(0);
}
Deactivate() //不活动
{
signal 2;
set-signal-mask 2;
sleep 5000; //这个延迟时间是,停止建造之后5000毫秒,然后工厂关闭
set-signal-mask 0;
start-script RequestState(1);
}
QueryBuildInfo(PieceNum) //被建造的单位的托盘,
{
PieceNum = buildpad; //托盘是buildpad部件,如果托盘旋转(或其他运动)的话,单位被建造时会跟着旋转
}
StartBuilding() //开始建造,可以在这里加些动作和效果
{
}
StopBuilding() //停止建造,如果上面加了效果可以在这里停止
{
}
SweetSpot(PieceNum)
{
PieceNum = building; //焦点,被敌人攻击时,维修时作为目标的点是building部件的原点
}
//下面的直到kill()前的是用来做特殊能力的,不过并不复杂。
它是一套攻击的脚本。用于指示一个位置。
TA-EXCESS II的工厂都有这样的东西。对应的是一个没有攻击力的factorydir的武器,是用来设置特殊能力的,单击工厂的那个direct攻击地面,会看到出现工厂一个箭头。
这个其实是通过攻击瞄准来水平旋转建造托盘到我们希望的方向,这样单位一造出来就会面对那个方向,方便其走出工厂。进游戏看看就明白。
别的MOD没有这样的,是TA-EXCESS II的作者想出来的,如果不需要就删除,估计删除也没问题。
AimFromTertiary(PieceNum)
{
PieceNum = buildpad;
}
QueryTertiary(PieceNum)
{
PieceNum = buildpad;
}
AimTertiary(Heading, Pitch)
{
signal 4;
set-signal-mask 4;
turn buildpad to y-axis Heading now;
return (1);
}
FireTertiary()
{
signal 8;
set-signal-mask 8;
show arrow;
move arrow to y-axis [5.00] now;
move arrow to z-axis [15.00] now;
move arrow to z-axis [25.00] speed [20.00];
sleep 500;
move arrow to z-axis [15.00] now;
move arrow to z-axis [25.00] speed [20.00];
sleep 500;
move arrow to z-axis [15.00] now;
move arrow to z-axis [25.00] speed [20.00];
sleep 500;
move arrow to z-axis [15.00] now;
move arrow to z-axis [25.00] speed [20.00];
sleep 500;
hide arrow;
}
Killed(Severity, CorpseType)
{
hide arrow;
if( Severity <= 50 )
{
CorpseType = 1;
explode shield type BITMAPONLY | BITMAP3;
explode decor1 type BITMAPONLY | BITMAP1;
explode decor2 type BITMAPONLY | BITMAP3;
explode decor3 type BITMAPONLY | BITMAP3;
explode decor4 type BITMAPONLY | BITMAP3;
explode decor5 type BITMAPONLY | BITMAP3;
explode decor6 type BITMAPONLY | BITMAP3;
return (0);
}
CorpseType = 2;
explode building type SHATTER | BITMAP5;
explode plate type BITMAPONLY | BITMAP2;
explode shield type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode decor1 type BITMAPONLY | BITMAP1;
explode decor2 type BITMAPONLY | BITMAP2;
explode decor3 type BITMAPONLY | BITMAP1;
explode decor4 type BITMAPONLY | BITMAP3;
explode decor5 type BITMAPONLY | BITMAP1;
explode decor6 type BITMAPONLY | BITMAP1;
}
//工厂的特别之处也就是有打开建造,需要改的也就是改一下打开关闭的动作,要加些特别花样的研究C语言去吧
ArmT1AF.rar (3.21 KB)