//下面TA-EXCESS II alpha1e版的CORE的T1导弹车的脚本,估计每个版本的都一样,如果你的版本不一样也可以对照看看,这个脚本包含很多方面的内容
//解析这个脚本的目的是介绍:攻击后隐藏导弹,装完弹后显示,以及对空控制
#define TA
#include “sfxtype.h”
#include “exptype.h”
piece base, hull, ltrack, lshadow, rtrack, rshadow, radar, turret, pitchturret, launcher1, msl1, launcher2, msl2,
flare1, flare2, ltireturn, lhubcap, ltire, rtireturn, rhubcap, rtire;
static-var DamageNow, LastDamage, Launcher, Reloading, AntiAir, UnitHeading, UnitSpeed;
SmokeUnit(HealthPercent, SleepTime)
{
signal 8;
set-signal-mask 8;
while( get BUILD_PERCENT_LEFT )
{
sleep 500;
}
while( TRUE )
{
HealthPercent = get HEALTH;
if( HealthPercent < 60 )
{
emit-sfx 256 | 1 from rtireturn;
SleepTime = 300;
}
if( HealthPercent < 30 )
{
emit-sfx 256 | 2 from launcher1;
emit-sfx 256 | 2 from ltrack;
SleepTime = 200;
}
sleep SleepTime;
}
}
HitByWeapon(AngleX, AngleZ)
{
DamageNow = get HEALTH;
if( DamageNow <= LastDamage - 10 )
{
signal 128;
set-signal-mask 128;
LastDamage = DamageNow;
turn base to z-axis AngleZ speed <105.000000>;
turn base to x-axis AngleX speed <105.000000>;
wait-for-turn base around z-axis;
wait-for-turn base around x-axis;
turn base to z-axis <0.000000> speed <30.000000>;
turn base to x-axis <0.000000> speed <30.000000>;
return (0);
}
LastDamage = DamageNow;
}
Reload() //装弹控制脚本
{
Reloading = 1; //静态变量Reloading = 1
sleep 2000; //延迟 2秒
show msl1; //显示导弹1
show msl2; //显示导弹2
move msl1 to z-axis [0.00] speed [1.00]; //导弹1前移到初始位置,
move msl2 to z-axis [0.00] speed [1.00]; //导弹2前移到初始位置
sleep 1000; //延迟1秒
Reloading = 0; //静态变量Reloading = 0
return (0);
}
//实际上这里是冷却了3秒,中途2秒时插了一个显示导弹装填的动作,把因为下面会在攻击后后移导弹向前移到原位,这样搞只是为了使导弹好像是装上去一样。
Create()
{
DamageNow = 100;
LastDamage = 100;
Launcher = msl1; //初生状态下,导弹出发点是msl1
Reloading = 0; //初生状态下,不需要装弹
AntiAir = 0; //初生状态下,不是对空
UnitSpeed = 1; //初生状态下,速度1
dont-cache flare1;
dont-cache flare2;
hide flare1;
hide flare2;
spin flare1 around z-axis speed <200.00>;
spin flare2 around z-axis speed <2000.00>;
start-script SmokeUnit();
while( get BUILD_PERCENT_LEFT )
{
sleep 500;
}
spin radar around y-axis speed <210.00>;
}
RestoreAfterDelay()
{
sleep 4000;
AntiAir = 0;
show msl1;
show msl2;
move msl1 to z-axis [0.00] speed [1.00];
move msl2 to z-axis [0.00] speed [1.00];
turn turret to y-axis <0.000000> speed <120.000000>;
turn pitchturret to x-axis <0.000000> speed <30.000000>;
start-script SmokeUnit();//Smoke script seems to disappear sometimes. This should fix the issue.
}
SweetSpot(PieceNum)
{
PieceNum = turret;
}
StartMoving() //开始移动
{
set-signal-mask 4; //设置为信号4
dont-cache ltrack; //播放左边履带动画
dont-cache rtrack;
spin ltire around x-axis speed <360.000000> accelerate <100.000000>;//旋转左前轮
spin rtire around x-axis speed <360.000000> accelerate <100.000000>;
while( TRUE )
{
if( UnitSpeed == 1 ) //如果是速度1
{
UnitHeading = UnitHeading - get XZ_ATAN(7); //计算单位向那个方向运动,不懂的照抄
turn ltireturn to y-axis 5 * UnitHeading speed <200.00>; //左前轮向移动的方向转动
turn rtireturn to y-axis 5 * UnitHeading speed <200.00>;
UnitHeading = get XZ_ATAN(7);
}
if( UnitSpeed == 2 ) //如果是速度2
{
UnitHeading = UnitHeading - get XZ_ATAN(7);
turn ltireturn to y-axis 2.5 * UnitHeading speed <200.00>; //左前轮转动,但是幅度较上面小
turn rtireturn to y-axis 2.5 * UnitHeading speed <200.00>;
UnitHeading = get XZ_ATAN(7);
}
sleep 100;
}
}
StopMoving() //停止移动
{
signal 4; //杀掉信号4
cache ltrack; //停止播放左边履带动画
cache rtrack;
spin ltire around x-axis speed <0.000000> accelerate <-210.000000>; //左前轮减速旋转直到转速为0
spin rtire around x-axis speed <0.000000> accelerate <-210.000000>;
turn ltireturn to y-axis <0.00> speed <200.00>;
turn rtireturn to y-axis <0.00> speed <200.00>;
}
MoveRate1() //系统脚本,用来评估单位的当前速度,在fbi文件里设定参数大小,这个单位是MoveRate1=1.5
{
UnitSpeed = 1; //静态变量UnitSpeed=1
}
MoveRate2() //这个没有在fbi文件里指定大小,一般如果分2个MoveRate,就只指定1个,3个就指定2个,原因不明
{
UnitSpeed = 2;
}
AimFromPrimary(PieceNum)
{
PieceNum = pitchturret;
}
QueryPrimary(PieceNum)
{
PieceNum = Launcher;
}
AimPrimary(Heading, Pitch) //第一武器瞄准,这个是对地用
{
if( AntiAir == 1 )
{
return(0);
}
signal 2;
set-signal-mask 2;
turn turret to y-axis Heading speed <220.00>;
turn pitchturret to x-axis <0.00> - Pitch speed <60.00>;
while( Reloading == 1 )
{
sleep 100;
}
turn turret to y-axis Heading speed <220.00>;
turn pitchturret to x-axis <0.00> - Pitch speed <60.00>;
wait-for-turn turret around y-axis;
wait-for-turn pitchturret around x-axis;
start-script RestoreAfterDelay();
return (1);
}
FirePrimary()
{
if( Launcher == msl1 )
{
Launcher = msl2;
start-script Reload();
move flare1 to x-axis [2.65] now;
move flare2 to x-axis [2.65] now;
hide msl1; //发射后隐藏导弹1
move msl1 to z-axis [-1.00] now; //往后立刻移动1,这是为了装弹后可以向前移的动作
move launcher1 to z-axis [-1.00] speed [10.00];
emit-sfx 256 | 2 from flare1;
show flare1;
show flare2;
sleep 75;
emit-sfx 256 | 2 from flare1;
hide flare2;
sleep 75;
emit-sfx 256 | 1 from flare1;
hide flare1;
move launcher1 to z-axis [0.00] speed [1.00];
return (0);
}
Launcher = msl1;
start-script Reload();
move flare1 to x-axis [-2.65] now;
move flare2 to x-axis [-2.65] now;
hide msl2; //发射后隐藏导弹2
move msl2 to z-axis [-1.00] now; //往后移动导弹2
move launcher2 to z-axis [-1.00] speed [10.00];
emit-sfx 256 | 2 from flare1;
show flare1;
show flare2;
sleep 75;
emit-sfx 256 | 2 from flare1;
hide flare2;
sleep 75;
emit-sfx 256 | 1 from flare1;
move launcher2 to z-axis [0.00] speed [1.00];
hide flare1;
}
AimFromTertiary(PieceNum)
{
PieceNum = pitchturret;
}
QueryTertiary(PieceNum)
{
PieceNum = Launcher;
}
AimTertiary(Heading, Pitch) //第3武器瞄准,对空用
{
AntiAir = 1;
signal 2;
set-signal-mask 2;
turn turret to y-axis Heading speed <220.00>;
turn pitchturret to x-axis <0.00> - Pitch speed <60.00>;
while( Reloading == 1 )
{
sleep 100;
}
turn turret to y-axis Heading speed <220.00>;
turn pitchturret to x-axis <0.00> - Pitch speed <60.00>;
wait-for-turn turret around y-axis;
wait-for-turn pitchturret around x-axis;
AntiAir = 0;
start-script RestoreAfterDelay();
return (1);
}
FireTertiary()
{
if( Launcher == msl1 )
{
Launcher = msl2;
start-script Reload();
move flare1 to x-axis [2.65] now;
move flare2 to x-axis [2.65] now;
hide msl1;
move msl1 to z-axis [-1.00] now;
move launcher1 to z-axis [-1.00] speed [10.00];
emit-sfx 256 | 2 from flare1;
show flare1;
show flare2;
sleep 75;
emit-sfx 256 | 2 from flare1;
hide flare2;
sleep 75;
emit-sfx 256 | 1 from flare1;
hide flare1;
move launcher1 to z-axis [0.00] speed [1.00];
return (0);
}
Launcher = msl1;
start-script Reload();
move flare1 to x-axis [-2.65] now;
move flare2 to x-axis [-2.65] now;
hide msl2;
move msl2 to z-axis [-1.00] now;
move launcher2 to z-axis [-1.00] speed [10.00];
emit-sfx 256 | 2 from flare1;
show flare1;
show flare2;
sleep 75;
emit-sfx 256 | 2 from flare1;
hide flare2;
sleep 75;
emit-sfx 256 | 1 from flare1;
move launcher2 to z-axis [0.00] speed [1.00];
hide flare1;
}
Killed(Severity, CorpseType)
{
hide flare1;
hide flare2;
hide msl1;
hide msl2;
if( Severity <= 50 )
{
CorpseType = 1;
explode ltireturn type BITMAPONLY | BITMAP3;
explode rtireturn type BITMAPONLY | BITMAP3;
explode radar type BITMAPONLY | BITMAP1;
explode pitchturret type BITMAPONLY | BITMAP3;
explode ltrack type BITMAPONLY | BITMAP3;
explode rtrack type BITMAPONLY | BITMAP3;
explode lhubcap type SHATTER | BITMAP5;
explode rhubcap type SHATTER | BITMAP5;
return (0);
}
CorpseType = 2;
explode hull type SHATTER | BITMAP5;
explode ltireturn type BITMAPONLY | BITMAP3;
explode rtireturn type BITMAPONLY | BITMAP3;
explode radar type BITMAPONLY | BITMAP1;
explode turret type BITMAPONLY | BITMAP3;
explode ltrack type BITMAPONLY | BITMAP3;
explode rtrack type BITMAPONLY | BITMAP3;
explode launcher1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode launcher2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode ltire type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode rtire type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
}
//关于对空控制,这个单位有两个武器,武器1和武器3,武器3是对空武器。在下也没看懂在什么情况下用武器3,什么情况下用武器1攻击的原理,所以会C语言的自行研究,不会的照抄就好。
CoreT1AATank.rar (4.52 KB)