CoreT1AirPad脚本分析- from fonter456

下面TA-EXCESS II alpha1e版的CORE的T1飞机维修平台的脚本,估计每个版本的都一样,如果你的版本不一样也可以对照看看
#define TA
#include “sfxtype.h”
#include “exptype.h”
piece spray, base, building, nanopillar, support1, plate1, dockpad1, support2, plate2, dockpad2, support3, plate3, dockpad3,
expl1, expl2, expl3;
static-var DockNum; //定义一个静态变量DockNum
SmokeUnit(HealthPercent, SleepTime)
{
while( get BUILD_PERCENT_LEFT )
{
sleep 500;
}
while( TRUE )
{
HealthPercent = get HEALTH;
if( HealthPercent < 60 )
{
emit-sfx 256 | 1 from expl1;
emit-sfx 256 | 1 from expl2;
SleepTime = 350;
}
if( HealthPercent < 30 )
{
emit-sfx 256 | 2 from nanopillar;
emit-sfx 256 | 2 from expl2;
SleepTime = 250;
}
sleep SleepTime;
}
}
Create()
{
DockNum = 1; //单位初生时,DockNum的值是1

dont-shade building;
dont-shade nanopillar;
dont-shade support1;
dont-shade plate1;
dont-shade support2;
dont-shade plate2;
dont-shade support3;
dont-shade plate3;

move building to y-axis [8.00] now; //把building部件立刻向上移动8,不明作用的动画,估计无用,纯粹为了好看

start-script SmokeUnit();
}
SweetSpot(PieceNum)
{
PieceNum = base;
}
QueryLandingPad(DockTo1, DockTo2, DockTo3) //飞机停靠的脚本,三个变量DockTo1,2,3代表3个平台
{
if( DockNum == 1) //如果DockNum=1,
{
DockNum = 2; //那就让它=2,
DockTo1 = dockpad1; //飞机停靠的首选平台是dockpad1部件
DockTo2 = dockpad2; //飞机停靠的次选平台是dockpad2部件
DockTo3 = dockpad3; //飞机停靠的再选平台是dockpad3部件
return (0);
}
if( DockNum == 2) //如果DockNum=2
{
DockNum = 3; //那就让它=3,
DockTo1 = dockpad3;
DockTo2 = dockpad1;
DockTo3 = dockpad2;
return (0);
}
DockNum = 1; //其他情况下DockNum=1,C语言的一般方法,通过这样形成1,2,3之间的循环
DockTo1 = dockpad2;
DockTo2 = dockpad3;
DockTo3 = dockpad1;
}
//这是一个3平台维修坪的例子,首先设置一个静态变量,在Create()里给静态变量一个预置值,在QueryLandingPad()里,括号的三个变量是用来只是那个部件是飞机停靠的地方,通过下面的循环,不断让飞机在3个平台之间选择,直到选到可以停靠的平台为止。这样做是为了让飞机在平台上有飞机的情况下找下一个平台。不懂C语言的无需理会循环的具体运作,把这段复制粘贴就可以。下面是4平台的例子,你可以参照它做出5平台和6平台的:

///// QueryLandingPad(DockTo1, DockTo2, DockTo3, DockTo4)
///// {
///// if( DockNum == 1)
///// {
///// DockNum = 2;
///// DockTo1 = dockpad1;
///// DockTo2 = dockpad2;
///// DockTo3 = dockpad3;
///// DockTo4 = dockpad4;
///// return (0);
///// }
///// if( DockNum == 2)
///// {
///// DockNum = 3;
///// DockTo1 = dockpad4;
///// DockTo2 = dockpad1;
///// DockTo3 = dockpad2;
///// DockTo4 = dockpad3;
///// return (0);
///// }
///// if( DockNum == 3)
///// {
///// DockNum = 4;
///// DockTo1 = dockpad3;
///// DockTo2 = dockpad4;
///// DockTo3 = dockpad1;
///// DockTo4 = dockpad2;
///// return (0);
///// }
///// DockNum = 1;
///// DockTo1 = dockpad2;
///// DockTo2 = dockpad3;
///// DockTo3 = dockpad4;
///// DockTo4 = dockpad1;
///// }

Killed(Severity, CorpseType)
{
if( Severity <= 50 )
{
CorpseType = 1;
explode plate1 type BITMAPONLY | BITMAP3;
explode plate2 type BITMAPONLY | BITMAP3;
explode plate3 type BITMAPONLY | BITMAP3;
explode expl1 type BITMAPONLY | BITMAP1;
explode expl2 type BITMAPONLY | BITMAP3;
explode expl3 type BITMAPONLY | BITMAP5;
explode nanopillar type SHATTER | BITMAP5;
explode spray type BITMAPONLY | BITMAP1;
return (0);
}
CorpseType = 2;
explode support1 type SHATTER | BITMAP5;
explode support2 type SHATTER | BITMAP5;
explode support3 type SHATTER | BITMAP5;
explode plate1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode plate2 type BITMAPONLY | BITMAP1;
explode plate3 type BITMAPONLY | BITMAP1;
explode expl1 type BITMAPONLY | BITMAP3;
explode expl2 type BITMAPONLY | BITMAP3;
explode expl3 type BITMAPONLY | BITMAP3;
explode nanopillar type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode spray type BITMAPONLY | BITMAP1;
}

//补充
//这个脚本大家会发现缺了一个东西,就是纳米的喷头
//正常来说会有这个,这是双喷头,喷头是beam1和beam2。
// QueryNanoPiece(piecenum)
// {
// if( spray == 0 )
// {
// piecenum = beam1;
// }
// if( spray != 0 )
// {
// piecenum = beam2;
// }
// spray = !spray;
// }

//这套脚本里面有个叫spray的部件,不知道是不是只要将部件改这个名字就会被系统默认为喷头。(估计可能性很小)
但是根据其它脚本来看,系统如果没有指定喷头就会从模型主部件的中心喷。而这个脚本一开始时使主部件上升8(注:其实这个模型故意把主部件做到地底下8,上升8只是回复到初始位置),可能是为了使主部件上升8看起来喷头就在高处一样。
CoreT1AirPad.jpg
CoreT1AirPad.rar (4.84 KB)