寻求SCRIPT帮助

TALON航母的脚本,要求将两个建造位置改为飞机维修平台,因为这种移动建造比较烦。。。

#define TA // This is a TA script
#define plantheight 2449660
#define height 593536

#include “sfxtype.h”
#include “exptype.h”

piece pad1, flare1, flare2, flare3, base, dish, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, wakes, turret, gun, pad2, pad3;

static-var Static_Var_1, gun_1, statechg_DesiredState, statechg_StateChanging, ifplant, padnum;

// Signal definitions
#define SIG_MOVE 2
#define SIG_AIM 4

// Lowest valid unit ID number
#ifndef MIN_ID
#define MIN_ID 69
#endif

// Highest valid unit ID number
#ifndef MAX_ID
#define MAX_ID 70
#endif

// ID of current unit
#ifndef MY_ID
#define MY_ID 71
#endif

// Player number of the unit given in parameter
#ifndef UNIT_TEAM
#define UNIT_TEAM 72
#endif

// Like BUILD_PERCENT_LEFT, but comes with a unit parameter
#ifndef UNIT_BUILD_PERCENT_LEFT
#define UNIT_BUILD_PERCENT_LEFT 73
#endif

// Is unit allied to the current COB script
#ifndef UNIT_ALLIED
#define UNIT_ALLIED 74
#endif

// Is unit owned by the local computer
#ifndef UNIT_IS_ON_THIS_COMP
#define UNIT_IS_ON_THIS_COMP 75
#endif

// Kills * 100
#ifndef VETERAN_LEVEL
#define VETERAN_LEVEL 32
#endif
InitState()
{
statechg_DesiredState = TRUE;
statechg_StateChanging = FALSE;
}

RequestState(requestedstate, currentstate)
{
if( statechg_StateChanging )
{
statechg_DesiredState = requestedstate;
return (0);
}
statechg_StateChanging = TRUE;
currentstate = statechg_DesiredState;
statechg_DesiredState = requestedstate;
while( statechg_DesiredState != currentstate )
{
if( statechg_DesiredState == 0 )
{
currentstate = 0;
}
if( statechg_DesiredState == 1 )
{
currentstate = 1;
}
}
statechg_StateChanging = FALSE;
}

SmokeUnit(healthpercent, sleeptime, smoketype)
{
while( get BUILD_PERCENT_LEFT )
{
sleep 400;
}
while( TRUE )
{
healthpercent = get HEALTH;
if( healthpercent < 66 )
{
smoketype = 256 | 2;
if( Rand( 1, 66 ) < healthpercent )
{
smoketype = 256 | 1;
}
emit-sfx smoketype from base;
}
sleeptime = healthpercent * 50;
if( sleeptime < 200 )
{
sleeptime = 200;
}
sleep sleeptime;
}
}

RestoreAfterDelay()
{
sleep 3000;
spin dish around y-axis speed <60.010989>;
turn gun to x-axis <0.000000> speed <35.005495>;
turn turret to y-axis <0.000000> speed <15.000000>;
}

detectplane()
{

sleep rand(500,5000);
var unit_ID, numbcared;
var max, min;
max = get MAX_ID;
min = get MIN_ID;
var myteam;
myteam = get UNIT_TEAM(get MY_ID);
numbcared=0;
while(1)
{
if(get ACTIVATION == 1)
{
numbcared=0;
for (unit_ID = min; unit_ID <= max; ++unit_ID)
{
if (get UNIT_XZ(unit_ID) == get PIECE_XZ(pad2))
{
++numbcared;
padnum=pad3;
}
if (get UNIT_XZ(unit_ID) == get PIECE_XZ(pad3))
{
++numbcared;
padnum=pad2;
}
}
if(numbcared < 2)
{
if(ifplant)
{
for (unit_ID = min; unit_ID <= max; ++unit_ID)
{
if (get UNIT_IS_ON_THIS_COMP(unit_ID))
{
if (get UNIT_BUILD_PERCENT_LEFT(unit_ID))
{
if (get UNIT_HEIGHT(unit_ID) != [4.2])
{
if (get UNIT_TEAM(unit_ID) == myteam)
{
if (get UNIT_Y(unit_ID) != get PIECE_Y(pad2))
{
attach-unit unit_ID to -1;
attach-unit unit_ID to padnum;
break;
/if (get UNIT_XZ(unit_ID) == get PIECE_XZ(padnum))
{
++padnum;
if(padnum == 23)
{
padnum = 21;
}
}
/
}
}
}
}
}
}
}
}
}
sleep 999;
}
}

detectplant()
{

sleep rand(500,5000);
var myteam;
var unit_ID;
var max, min;
max = get MAX_ID;
min = get MIN_ID;

myteam = get UNIT_TEAM(get MY_ID);
while(1)
{
ifplant=0;
for (unit_ID = min; unit_ID <= max; ++unit_ID)
{
if (!(get UNIT_BUILD_PERCENT_LEFT(unit_ID)))
{
if (get UNIT_IS_ON_THIS_COMP(unit_ID))
{
if (get UNIT_HEIGHT(unit_ID) == plantheight)
{
if (get UNIT_TEAM(unit_ID) == myteam)
{
ifplant=1;
show pad2;
show pad3;
}
}
}
}
}
if (!ifplant)
{
hide pad2;
hide pad3;
}
sleep 2500;
}
}

Create()
{
//hide pad2;
//hide pad3;
padnum=pad2;
Static_Var_1 = 0;
gun_1 = 1;
ifplant=0;
hide flare1;
hide flare2;
hide flare3;
dont-cache flare1;
dont-cache flare2;
dont-cache flare3;
call-script InitState();
start-script SmokeUnit();
while( get BUILD_PERCENT_LEFT )
{
sleep 1000;
}
spin dish around y-axis speed <60.010989>;
if(get UNIT_IS_ON_THIS_COMP(get MY_ID))
{
start-script detectplant();
}
if(get UNIT_IS_ON_THIS_COMP(get MY_ID))
{
start-script detectplane();
}
}

StartMoving()
{
signal SIG_MOVE;
set-signal-mask SIG_MOVE;
while( TRUE )
{
emit-sfx 3 from w1;
emit-sfx 3 from w2;
emit-sfx 3 from w3;
emit-sfx 3 from w4;
emit-sfx 3 from w5;
emit-sfx 3 from w6;
emit-sfx 3 from w7;
emit-sfx 3 from w8;
emit-sfx 3 from w9;
emit-sfx 3 from w10;
emit-sfx 3 from w11;
emit-sfx 3 from w12;
emit-sfx 5 from w1;
emit-sfx 5 from w2;
emit-sfx 5 from w3;
emit-sfx 5 from w4;
emit-sfx 5 from w5;
emit-sfx 5 from w6;
emit-sfx 5 from w7;
emit-sfx 5 from w8;
emit-sfx 5 from w9;
emit-sfx 5 from w10;
emit-sfx 5 from w11;
emit-sfx 5 from w12;
sleep 250;
}
}

StopMoving()
{
signal SIG_MOVE;
}

SweetSpot(piecenum)
{
piecenum = base;
}

QueryLandingPad(Func_Var_1, Func_Var_2)
{
Func_Var_1 = pad1;
Func_Var_2 = pad1;
}

AimTertiary(heading, pitch)
{
signal SIG_AIM;
set-signal-mask SIG_AIM;
turn turret to y-axis heading speed <250>;
turn dish to y-axis heading speed <250>;
turn gun to x-axis <0.000000> - pitch speed <250>;
wait-for-turn turret around y-axis;
wait-for-turn gun around x-axis;
start-script RestoreAfterDelay();
return (1);
}

flareu()
{
show flare1;
sleep 45;
hide flare1;
}

flared()
{
show flare2;
sleep 45;
hide flare2;
}

flaret()
{
show flare3;
sleep 45;
hide flare3;
}

FireTertiary()
{
if( gun_1 == 1 )
{
start-script flareu();
}
if( gun_1 == 2 )
{
start-script flared();
}
if( gun_1 == 3 )
{
start-script flaret();
}
++gun_1;
if( gun_1 == 4 )
{
gun_1 = 1;
}
}

QueryTertiary(piecenum)
{
piecenum = gun_1;
}

AimFromTertiary(piecenum)
{
piecenum = gun_1;
}

Killed(severity, corpsetype)
{
if( severity <= 25 )
{
corpsetype = 1;
explode base type BITMAPONLY | BITMAP1;
explode dish type BITMAPONLY | BITMAP2;
explode pad1 type BITMAPONLY | BITMAP3;
explode w1 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w2 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w3 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w4 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w5 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w6 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w7 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w8 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w9 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w10 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w11 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w12 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
if( severity <= 50 )
{
corpsetype = 2;
explode base type BITMAPONLY | BITMAP1;
explode dish type SHATTER | BITMAP2;
explode pad1 type FALL | BITMAP3;
explode w1 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w2 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w3 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w4 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w5 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w6 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w7 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w8 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w9 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w10 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w11 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w12 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
if( severity <= 99 )
{
corpsetype = 3;
explode base type BITMAPONLY | BITMAP1;
explode dish type SHATTER | BITMAP2;
explode pad1 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w1 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w2 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w3 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w4 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w5 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w6 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w7 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w8 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w9 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w10 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w11 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w12 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
corpsetype = 3;
explode base type BITMAPONLY | BITMAP1;
explode dish type SHATTER | EXPLODE_ON_HIT | BITMAP2;
explode pad1 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w1 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w2 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w3 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w4 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w5 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w6 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w7 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w8 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w9 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w10 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
explode w11 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP3;
explode w12 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP4;
}

水上飞机工厂,会将飞机生产转移到航母上,想将这个转移取消。

// Signal definitions
#define SIG_ACTIVATE 2

#define SECURE_XZ
if(xz<0)
{
xz=0 - xz;
}
x=xz/65536;
z=xz - x65536;
if(z>32767)
{
z=65536 - z;
/x=x+(1-2(xz<0));
/
x=x+(xz>0);
}
if(707333111<get XZ_HYPOT((x/2)*65536 + (z/2)))
{
xz=500333222;
}

#include “sfxtype.h”
#include “exptype.h”

// Lowest valid unit ID number
#ifndef MIN_ID
#define MIN_ID 69
#endif

// Highest valid unit ID number
#ifndef MAX_ID
#define MAX_ID 70
#endif

// ID of current unit
#ifndef MY_ID
#define MY_ID 71
#endif

// Player number of the unit given in parameter
#ifndef UNIT_TEAM
#define UNIT_TEAM 72
#endif

// Like BUILD_PERCENT_LEFT, but comes with a unit parameter
#ifndef UNIT_BUILD_PERCENT_LEFT
#define UNIT_BUILD_PERCENT_LEFT 73
#endif

// Is unit allied to the current COB script
#ifndef UNIT_ALLIED
#define UNIT_ALLIED 74
#endif

// Is unit owned by the local computer
#ifndef UNIT_IS_ON_THIS_COMP
#define UNIT_IS_ON_THIS_COMP 75
#endif

// Kills * 100
#ifndef VETERAN_LEVEL
#define VETERAN_LEVEL 32
#endif

activatescr()
{
signal 4;
set-signal-mask 4;
if( TRUE )
{
dont-cache nanobar;
dont-cache nano1;
dont-cache nano2;
set ARMORED to 0;
}
if( TRUE )
{
turn nanobar to z-axis <90> speed <90>;
move nanobar to x-axis [2.037482] speed [2.037482];
move nano1 to y-axis [3] speed [3];
move nano2 to y-axis [3] speed [3];
wait-for-move nano1 along y-axis;
}
if( TRUE )
{
cache nanobar;
cache nano1;
cache nano2;
}
}

deactivatescr()
{
signal 4;
set-signal-mask 4;
if( TRUE )
{
dont-cache nanobar;
dont-cache nano1;
dont-cache nano2;
}
if( TRUE )
{
turn nanobar to z-axis <0> speed <90>;
move nanobar to x-axis [0] speed [2.037482];
move nano1 to y-axis [0] speed [3];
move nano2 to y-axis [0] speed [3];
wait-for-move nano1 along y-axis;
}
if( TRUE )
{
cache nanobar;
cache nano1;
cache nano2;
set ARMORED to 1;
}
}

bubble()
{
emit-sfx 256 | 3 from nano1;
sleep 200;
emit-sfx 256 | 3 from nano2;
sleep 200;
emit-sfx 256 | 3 from point1;
sleep 200;
emit-sfx 256 | 3 from point2;
sleep 200;
emit-sfx 256 | 3 from tower_naval1;
sleep 200;
emit-sfx 256 | 3 from nanobar;
sleep 200;
emit-sfx 256 | 3 from body;
sleep 200;
emit-sfx 256 | 3 from pad;
sleep 200;
emit-sfx 256 | 3 from base;
sleep 200;
emit-sfx 256 | 3 from tower_naval2;
sleep 200;
}

SmokeUnit(healthpercent, sleeptime, smoketype)
{
while( get BUILD_PERCENT_LEFT )
{
sleep 400;
}
if( depth )
{
{
healthpercent = get HEALTH;
if( healthpercent < 66 )
{
smoketype = 256 | 2;
if( Rand( 1, 66 ) < healthpercent )
{
smoketype = 256 | 1;
}
emit-sfx smoketype from base;
}
sleeptime = healthpercent * 50;
if( sleeptime < 200 )
{
sleeptime = 200;
}
sleep sleeptime;
}
}
if( !depth )
{
healthpercent = get HEALTH;
sleeptime = healthpercent*healthpercent;
if( healthpercent < 66 )
{
emit-sfx 256 | 3 from base;
sleep sleeptime;
emit-sfx 256 | 3 from tower;
if( Rand( 1, 66 ) > healthpercent )
{
start-script bubble();
sleep sleeptime;
}
}
}
start-script smokeunit();
}

OpenYard()
{
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;
}

CloseYard()
{
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;
}

movenano(nano_ID)
{
nanostate=1;
var xz, z, x;
var count;
while(get UNIT_BUILD_PERCENT_LEFT(nano_ID))
{
xz=get PIECE_XZ(base) - get UNIT_XZ(nano_ID);
SECURE_XZ
turn newnoarm to y-axis get XZ_ATAN(get PIECE_XZ(base) - get UNIT_XZ(nano_ID)) now;
move newno to z-axis get XZ_HYPOT(xz) now;
move newno to y-axis ((get UNIT_Y(nano_ID)) - (get PIECE_Y(base))) now;
sleep 1;
}
nanostate=0;
}

detectplane()
{
var xz, x, z, unit_ID, distance;
var max, min;
max = get MAX_ID;
min = get MIN_ID;
while(kbuild)
{
for (unit_ID = min; unit_ID <= max; ++unit_ID)
{
if (get UNIT_BUILD_PERCENT_LEFT(unit_ID))
{
if (get UNIT_IS_ON_THIS_COMP(unit_ID))
{
//if (get UNIT_HEIGHT(unit_ID) == height)
//{
if (get UNIT_XZ(unit_ID) == get PIECE_XZ(pad))
{
if (get UNIT_Y(unit_ID) == get PIECE_Y(pad))
{
drop-unit unit_ID;
start-script movenano(unit_ID);
sleep 2222;
if (get UNIT_BUILD_PERCENT_LEFT(unit_ID))
{
attach-unit unit_ID to pad;
if (get UNIT_XZ(unit_ID) != get PIECE_XZ(pad))
{
if (get UNIT_Y(unit_ID) != get PIECE_Y(pad))
{
move pole to y-axis [28] speed [10];
}
}
if (get UNIT_XZ(unit_ID) == get PIECE_XZ(pad))
{
if (get UNIT_Y(unit_ID) == get PIECE_Y(pad))
{
move pole to y-axis [0] speed [10];
}
}
while(get UNIT_BUILD_PERCENT_LEFT(unit_ID))
{
sleep 100;
}
}
}
}
//}
}
}
}
sleep 1500;
}
move pole to y-axis [0] speed [10];
}

Go()
{
call-script activatescr();
call-script OpenYard();
set INBUILDSTANCE to 1;
kbuild=1;
if(ifcar)
{
sleep 1;
if(get UNIT_IS_ON_THIS_COMP(get MY_ID))
{
start-script detectplane();
}
}
}

Stop()
{
sleep 7500;
set INBUILDSTANCE to 0;
call-script CloseYard();
start-script deactivatescr();
kbuild=0;
}

InitState()
{
statechg_DesiredState = TRUE;
statechg_StateChanging = FALSE;
}

RequestState(requestedstate, currentstate)
{
if( statechg_StateChanging )
{
statechg_DesiredState = requestedstate;
return (0);
}
statechg_StateChanging = TRUE;
currentstate = statechg_DesiredState;
statechg_DesiredState = requestedstate;
while( statechg_DesiredState != currentstate )
{
if( statechg_DesiredState == 0 )
{
call-script Go();
currentstate = 0;
}
if( statechg_DesiredState == 1 )
{
call-script Stop();
currentstate = 1;
}
}
statechg_StateChanging = FALSE;
}

detectcar()
{
sleep rand(500,5000);
var myteam;
var unit_ID;
var max, min;
max = get MAX_ID;
min = get MIN_ID;
myteam = get UNIT_TEAM(get MY_ID);
while(1)
{
ifcar=0;
for (unit_ID = min; unit_ID <= max; ++unit_ID)
{
if (!(get UNIT_BUILD_PERCENT_LEFT(unit_ID)))
{
if (get UNIT_IS_ON_THIS_COMP(unit_ID))
{
if (get UNIT_HEIGHT(unit_ID) == carheight)
{
if (get UNIT_TEAM(unit_ID) == myteam)
{
ifcar=1;

					}
				}
			}
		}
	}
	sleep 2500;
}

}

Create()
{
ifcar=0;
dont-cache pole;
dont-shade base;
dont-shade pad;
dont-shade body;
dont-shade nanobar;
dont-shade nano1;
dont-shade nano2;
dont-shade tower;
dont-shade tower_naval1;
dont-shade tower_naval2;
Static_Var_1 = 1;
nanostate=0;
call-script InitState();
start-script SmokeUnit();
kbuild=0;
depth = get PIECE_Y(base)/* - get GROUND_HEIGHT(get PIECE_XZ(base))*/;
if(depth == 0)
{
hide tower;
}
if(depth > 0)
{
hide tower_naval1;
hide tower_naval2;
}
move tower to y-axis [20] now;
while( get BUILD_PERCENT_LEFT )
{
sleep 1000;
}
if(get UNIT_IS_ON_THIS_COMP(get MY_ID))
{
start-script detectcar();
}
}

QueryNanoPiece(piecenum)
{
if(nanostate==0)
{
if( Static_Var_1 == 1 )
{
piecenum = point1;
}
if( Static_Var_1 == 2 )
{
piecenum = point2;
}
++Static_Var_1;
if( Static_Var_1 == 3 )
{
Static_Var_1 = 1;
}
}
if(nanostate == 1)
{
piecenum = newno;
}
}

Activate()
{
signal SIG_ACTIVATE;
start-script RequestState(0);
}

Deactivate()
{
signal SIG_ACTIVATE;
set-signal-mask SIG_ACTIVATE;
set-signal-mask 0;
start-script RequestState(1);
}

StartBuilding()
{
dont-cache pad;
spin pad around y-axis speed <30.005495>;
}

StopBuilding()
{
cache pad;
stop-spin pad around y-axis;
turn pad to y-axis <0> speed <30.005495>;
}

QueryBuildInfo(piecenum)
{
piecenum = pad;
}

SweetSpot(piecenum)
{
piecenum = base;
}

Killed(severity, corpsetype)
{
if( severity <= 25 )
{
corpsetype = 1 + (!depth);
explode base type FALL | FIRE | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
if( severity <= 50 )
{
corpsetype = 2;
explode base type FALL | FIRE | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
if( severity <= 99 )
{
corpsetype = 3;
explode base type FALL | FIRE | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
corpsetype = 3;
explode base type FALL | FIRE | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
}

水上飞机工厂脚本2,水上飞机工厂有陆上型和水上型的分别,所以多了一套脚本

#define TA // This is a TA script

#include “sfxtype.h”
#include “exptype.h”

piece base, body, pad, nanobar, nano1, nano2, point1, point2, tower, tower_naval1, tower_naval2;

static-var Static_Var_1, Static_Var_2, statechg_DesiredState, statechg_StateChanging, depth;

// Signal definitions
#define SIG_ACTIVATE 2

activatescr()
{
if( TRUE )
{
dont-cache nanobar;
dont-cache nano1;
dont-cache nano2;
set ARMORED to 0;
}
if( TRUE )
{
turn nanobar to z-axis <90> speed <90>;
move nanobar to x-axis [2.037482] speed [2.037482];
move nano1 to y-axis [3] speed [3];
move nano2 to y-axis [3] speed [3];
wait-for-move nano1 along y-axis;
}
if( TRUE )
{
cache nanobar;
cache nano1;
cache nano2;
}
}

deactivatescr()
{
if( TRUE )
{
dont-cache nanobar;
dont-cache nano1;
dont-cache nano2;
}
if( TRUE )
{
turn nanobar to z-axis <0> speed <90>;
move nanobar to x-axis [0] speed [2.037482];
move nano1 to y-axis [0] speed [3];
move nano2 to y-axis [0] speed [3];
wait-for-move nano1 along y-axis;
}
if( TRUE )
{
cache nanobar;
cache nano1;
cache nano2;
set ARMORED to 1;
}
}

bubble()
{
emit-sfx 256 | 3 from nano1;
sleep 200;
emit-sfx 256 | 3 from nano2;
sleep 200;
emit-sfx 256 | 3 from point1;
sleep 200;
emit-sfx 256 | 3 from point2;
sleep 200;
emit-sfx 256 | 3 from tower_naval1;
sleep 200;
emit-sfx 256 | 3 from nanobar;
sleep 200;
emit-sfx 256 | 3 from body;
sleep 200;
emit-sfx 256 | 3 from pad;
sleep 200;
emit-sfx 256 | 3 from base;
sleep 200;
emit-sfx 256 | 3 from tower_naval2;
sleep 200;
}

SmokeUnit(healthpercent, sleeptime, smoketype)
{
while( get BUILD_PERCENT_LEFT )
{
sleep 400;
}
if( depth )
{
{
healthpercent = get HEALTH;
if( healthpercent < 66 )
{
smoketype = 256 | 2;
if( Rand( 1, 66 ) < healthpercent )
{
smoketype = 256 | 1;
}
emit-sfx smoketype from base;
}
sleeptime = healthpercent * 50;
if( sleeptime < 200 )
{
sleeptime = 200;
}
sleep sleeptime;
}
}
if( !depth )
{
healthpercent = get HEALTH;
sleeptime = healthpercent*healthpercent;
if( healthpercent < 66 )
{
emit-sfx 256 | 3 from base;
sleep sleeptime;
emit-sfx 256 | 3 from tower;
if( Rand( 1, 66 ) > healthpercent )
{
start-script bubble();
sleep sleeptime;
}
}
}
start-script smokeunit();
}

OpenYard()
{
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;
}

CloseYard()
{
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;
}

Go()
{
call-script activatescr();
call-script OpenYard();
set INBUILDSTANCE to 1;
}

Stop()
{
sleep 2000;
set INBUILDSTANCE to 0;
call-script CloseYard();
call-script deactivatescr();
}

InitState()
{
statechg_DesiredState = TRUE;
statechg_StateChanging = FALSE;
}

RequestState(requestedstate, currentstate)
{
if( statechg_StateChanging )
{
statechg_DesiredState = requestedstate;
return (0);
}
statechg_StateChanging = TRUE;
currentstate = statechg_DesiredState;
statechg_DesiredState = requestedstate;
while( statechg_DesiredState != currentstate )
{
if( statechg_DesiredState == 0 )
{
call-script Go();
currentstate = 0;
}
if( statechg_DesiredState == 1 )
{
call-script Stop();
currentstate = 1;
}
}
statechg_StateChanging = FALSE;
}

Create()
{
dont-shade base;
dont-shade pad;
dont-shade body;
dont-shade nanobar;
dont-shade nano1;
dont-shade nano2;
dont-shade tower;
dont-shade tower_naval1;
dont-shade tower_naval2;
Static_Var_1 = 1;
call-script InitState();
start-script SmokeUnit();
depth = get PIECE_Y(base)/* - get GROUND_HEIGHT(get PIECE_XZ(base))*/;
if(depth == 0)
{
hide tower;
}
if(depth > 0)
{
hide tower_naval1;
hide tower_naval2;
}
move tower to y-axis [20] now;
while( get BUILD_PERCENT_LEFT )
{
sleep 1000;
}
}

QueryNanoPiece(piecenum)
{
if( Static_Var_1 == 1 )
{
piecenum = point1;
}
if( Static_Var_1 == 2 )
{
piecenum = point2;
}
++Static_Var_1;
if( Static_Var_1 == 3 )
{
Static_Var_1 = 1;
}
}

Activate()
{
signal SIG_ACTIVATE;
start-script RequestState(0);
}

Deactivate()
{
signal SIG_ACTIVATE;
set-signal-mask SIG_ACTIVATE;
set-signal-mask 0;
start-script RequestState(1);
}

StartBuilding()
{
dont-cache pad;
spin pad around y-axis speed <30.005495>;
}

StopBuilding()
{
cache pad;
stop-spin pad around y-axis;
turn pad to y-axis <0> speed <30.005495>;
}

QueryBuildInfo(piecenum)
{
piecenum = pad;
}

SweetSpot(piecenum)
{
piecenum = base;
}

Killed(severity, corpsetype)
{
if( severity <= 25 )
{
corpsetype = 1 + (!depth);
explode base type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
if( severity <= 50 )
{
corpsetype = 2;
explode base type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
if( severity <= 99 )
{
corpsetype = 3;
explode base type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
corpsetype = 3;
explode base type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
}

水上飞机工厂脚本3,不知道为什么还有一个脚本

#define TA

#include “sfxtype.h”
#include “exptype.h”

piece base, body, tower, nanobar,
nano1, point1, nano2, point2,
pad, tower_naval1, tower_naval2,
nanoshoulder, nanoarm;

static-var depth, nano_shuffling;

#define SIG_ACTDEACT 16

SmokeUnit()
{
var healthpercent,sleeptime,smoketype;
while(TRUE)
{
healthpercent=get HEALTH;
if(healthpercent<66)
{
smoketype=SFXTYPE_BLACKSMOKE;
if(rand(1,66)<healthpercent)
{
smoketype=SFXTYPE_WHITESMOKE;
}
emit-sfx smoketype from base;
}
sleeptime=healthpercent*50;
if(sleeptime<200)
{
sleeptime=200;
}
sleep sleeptime;
}
}

BubbleUnit()
{
var healthpercent,sleeptime,bubblefrom;
bubblefrom=0;
while(TRUE)
{
++bubblefrom;
if(bubblefrom<25 || bubblefrom>35){bubblefrom=25;}
healthpercent=get HEALTH;
if(healthpercent<66)
{
if(bubblefrom==25){emit-sfx 256 | 3 from nano1;}
if(bubblefrom==26){emit-sfx 256 | 3 from nano2;}
if(bubblefrom==27){emit-sfx 256 | 3 from point1;}
if(bubblefrom==28){emit-sfx 256 | 3 from point2;}
if(bubblefrom==29){emit-sfx 256 | 3 from tower_naval1;}
if(bubblefrom==30){emit-sfx 256 | 3 from nanobar;}
if(bubblefrom==31){emit-sfx 256 | 3 from body;}
if(bubblefrom==32){emit-sfx 256 | 3 from pad;}
if(bubblefrom==33){emit-sfx 256 | 3 from tower;}
if(bubblefrom==34){emit-sfx 256 | 3 from tower_naval2;}
if(bubblefrom==35){emit-sfx 256 | 3 from base;}
}
sleeptime=healthpercent*50;
if(sleeptime<200)
{
sleeptime=200;
}
sleep sleeptime;
}
}

Create()
{
dont-shade base;
dont-shade pad;
dont-shade body;
dont-shade nanobar;
dont-shade nano1;
dont-shade nano2;
dont-shade tower;
dont-shade tower_naval1;
dont-shade tower_naval2;
nano_shuffling=1;
hide tower;
hide tower_naval1;
hide tower_naval2;
depth = get PIECE_Y(base)/* - get GROUND_HEIGHT(get PIECE_XZ(base))*/;
if(depth == 0)
{
hide tower;
}
if(depth > 0)
{
hide tower_naval1;
hide tower_naval2;
}
move tower to y-axis [20] now;
sleep 1;//Just in case, to let everything fall into place

// Static_Var_5 = get PIECE_Y(base) - get GROUND_HEIGHT(get PIECE_XZ(base));
// Was that an attempt to detecting if it's on dry ground or floating?
// But don't you know all amphibious building are seafloor huggers?

/* underwater = (get GROUND_HEIGHT(get PIECE_XZ(base))<3123456);
// I’m assuming all maps have the same sea level, which of course is untrue
if(!underwater)
{
show tower;
}
if(underwater)
{
show tower_naval1;
show tower_naval2;
}

while(get BUILD_PERCENT_LEFT)
{
	sleep 721;
}
if(!underwater)
{
	start-script SmokeUnit();
}
if(underwater)
{
	start-script BubbleUnit();
}*/

}

QueryNanoPiece(piecenum)
{
if(nano_shuffling)
{
piecenum=point1;
}
if(!nano_shuffling)
{
piecenum=point2;
}
nano_shuffling=(!nano_shuffling);
}

Activate()
{
signal SIG_ACTDEACT;
set-signal-mask SIG_ACTDEACT;

set ARMORED to FALSE;
dont-cache nanobar;
dont-cache nano1;
dont-cache nano2;
turn nanobar to z-axis <90> speed <90>;
move nanobar to x-axis [2.037482] speed [2.037482];
move nano1 to y-axis [3] speed [3];
move nano2 to y-axis [3] speed [3];
wait-for-move nano1 along y-axis;

cache nanobar;
cache nano1;
cache nano2;

// OpenYard
set YARD_OPEN to TRUE;
while(!get YARD_OPEN)
{
	set BUGGER_OFF to TRUE;
	sleep 1500;
	set YARD_OPEN to TRUE;
}
set BUGGER_OFF to FALSE;

set INBUILDSTANCE to TRUE;

}

Deactivate()
{
signal SIG_ACTDEACT;
set-signal-mask SIG_ACTDEACT;

sleep 2000;

set INBUILDSTANCE to FALSE;

// CloseYard
set YARD_OPEN to FALSE;
while(get YARD_OPEN)
{
	set BUGGER_OFF to TRUE;
	sleep 1500;
	set YARD_OPEN to FALSE;
}
set BUGGER_OFF to FALSE;

dont-cache nanobar;
dont-cache nano1;
dont-cache nano2;
turn nanobar to z-axis <0> speed <90>;
move nanobar to x-axis [0] speed [2.037482];
move nano1 to y-axis [0] speed [3];
move nano2 to y-axis [0] speed [3];
wait-for-move nano1 along y-axis;

cache nanobar;
cache nano1;
cache nano2;
set ARMORED to TRUE;

}

StartBuilding()
{
dont-cache pad;
spin pad around y-axis speed <30>;
}

StopBuilding()
{
cache pad;
stop-spin pad around y-axis;
turn pad to y-axis <0> speed <30>;
}

QueryBuildInfo(piecenum)
{
piecenum = pad;
}

SweetSpot(piecenum)
{
piecenum = base;
}

Killed(severity, corpsetype)
{
if( severity <= 25 )
{
corpsetype = 1 + depth;
explode base type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
if( severity <= 50 )
{
corpsetype = 2;
explode base type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
if( severity <= 99 )
{
corpsetype = 3;
explode base type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
return (0);
}
corpsetype = 3;
explode base type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode pad type FALL | EXPLODE_ON_HIT | BITMAP2;
explode nanobar type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower type SHATTER | EXPLODE_ON_HIT | BITMAP1;
explode nano1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode nano2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
explode point1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP3;
explode point2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP4;
explode tower_naval1 type SHATTER | EXPLODE_ON_HIT | BITMAP3;
explode tower_naval2 type SHATTER | EXPLODE_ON_HIT | BITMAP4;
}

setSFXoccupy(setSFXoccupy_rawlocvar)
{
sleep 50;
explode base type BITMAPONLY | BITMAPNUKE;
}

高手帮我改脚本吧:7_335: