其实你可以把 deactivatescr() 看成是 reload() ,除了名称不一样,意义完全相同,关键问题是,一旦发生故障就会从第一发开始故障,因此应该不是reload的问题,况且也有无故障的,所以我想应该把思路多放在武器参数,甚至单位参数上,可能有办法
deactivatescr()是系统子脚本,跟reload这些自定脚本有区别
换司令的激光武器的话,很奇怪的都正常了。不知道是不是偶然。
这个武器的特殊性还在于抛物线、尾烟以及弹道加速度上这些,任何直线武器肯定不会有异常
把变量ML的初始化放到闭合脚本里,刚才试了一下,似乎有所改善,5个里有4个正常了,又测试了一下,5个里有3个正常,还应该有能改进的地方。。。
我看这个跟地形还有关系,跟单位的重心还有关系啊。再修改修改单位和武器的属性看看是哪个有问题的。
我觉得跟脚本没啥关系
以下参考原子版巨人火箭车修改的脚本,问题基本解决,不过有些地方控制上做得不太好,虽然BUG是没有了,但总感觉还会有问题建议还是按标准方式修改一个更好。
武器参数里加了这两个
aimrate=2500;//瞄准效率
tolerance=1500; //瞄准宽余度
跟BUG无关系,只是看见巨人火箭车有,所以加了。
#define TA // This is a TA script
#include "sfxtype.h"
#include "exptype.h"
piece base, hips, turret, sleeve, wing1, m01, f01, m02,
f02, m03, f03, m04, f04, m05, f05, m06, f06, m07,
f07, m08, f08, m09, f09, m10, f10, m11, f11, m12,
f12, m13, f13, m14, f14, m15, f15, m16, f16, flash1,
wing2, m17, f17, m18, f18, m19, f19, m20, f20, m21,
f21, m22, f22, m23, f23, m24, f24, m25, f25, m26,
f26, m27, f27, m28, f28, m29, f29, m30, f30, m31,
f31, m32, f32, flash2;
static-var restore_delay, ML;//////, Static_Var_3;
#define SIG_AIM1 2
ACR()
{
move wing1 to x-axis [5] speed [5];
move wing2 to x-axis [-5] speed [5];
wait-for-move wing1 along x-axis;
wait-for-move wing2 along x-axis;
sleep 100;
}
DECR()
{
move wing1 to x-axis [0] speed [5];
move wing2 to x-axis [0] speed [5];
wait-for-move wing1 along x-axis;
wait-for-move wing2 along x-axis;
sleep 10;
show m01;
show m02;
show m03;
show m04;
show m05;
show m06;
show m07;
show m08;
show m09;
show m10;
show m11;
show m12;
show m13;
show m14;
show m15;
show m16;
show m17;
show m18;
show m19;
show m20;
show m21;
show m22;
show m23;
show m24;
show m25;
show m26;
show m27;
show m28;
show m29;
show m30;
show m31;
show m32;
sleep 1000;
}
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;
}
}
Create()
{
cache hips;
cache turret;
cache sleeve;
cache wing1;
dont-cache flash1;
cache wing2;
dont-cache flash2;
dont-shade hips;
dont-shade turret;
dont-shade sleeve;
dont-shade wing1;
dont-shade m01;
dont-shade f01;
hide f01;
dont-shade m02;
dont-shade f02;
hide f02;
dont-shade m03;
dont-shade f03;
hide f03;
dont-shade m04;
dont-shade f04;
hide f04;
dont-shade m05;
dont-shade f05;
hide f05;
dont-shade m06;
dont-shade f06;
hide f06;
dont-shade m07;
dont-shade f07;
hide f07;
dont-shade m08;
dont-shade f08;
hide f08;
dont-shade m09;
dont-shade f09;
hide f09;
dont-shade m10;
dont-shade f10;
hide f10;
dont-shade m11;
dont-shade f11;
hide f11;
dont-shade m12;
dont-shade f12;
hide f12;
dont-shade m13;
dont-shade f13;
hide f13;
dont-shade m14;
dont-shade f14;
hide f14;
dont-shade m15;
dont-shade f15;
hide f15;
dont-shade m16;
dont-shade f16;
hide f16;
dont-shade flash1;
dont-shade wing2;
dont-shade m17;
dont-shade f17;
hide f17;
dont-shade m18;
dont-shade f18;
hide f18;
dont-shade m19;
dont-shade f19;
hide f19;
dont-shade m20;
dont-shade f20;
hide f20;
dont-shade m21;
dont-shade f21;
hide f21;
dont-shade m22;
dont-shade f22;
hide f22;
dont-shade m23;
dont-shade f23;
hide f23;
dont-shade m24;
dont-shade f24;
hide f24;
dont-shade m25;
dont-shade f25;
hide f25;
dont-shade m26;
dont-shade f26;
hide f26;
dont-shade m27;
dont-shade f27;
hide f27;
dont-shade m28;
dont-shade f28;
hide f28;
dont-shade m29;
dont-shade f29;
hide f29;
dont-shade m30;
dont-shade f30;
hide f30;
dont-shade m31;
dont-shade f31;
hide f31;
dont-shade m32;
dont-shade f32;
hide f32;
dont-shade flash2;
ML = turret;
// Static_Var_3 = 1;
restore_delay = 3000;
start-script SmokeUnit();
}
//Reload()
//{
// sleep 8500;
// Static_Var_3 = 1;
//}
SetMaxReloadTime(Func_Var_1)
{
restore_delay = Func_Var_1 * 2;
}
RestoreAfterDelay()
{
sleep restore_delay;
turn turret to y-axis <0> speed <120>;
turn sleeve to x-axis <0> speed <60>;
wait-for-turn turret around y-axis;
wait-for-turn sleeve around x-axis;
sleep 1;
call-script DECR();
set ARMORED to 1;
ML = 1;
return 0;
}
AimPrimary(heading, pitch)
{
signal SIG_AIM1;
set-signal-mask SIG_AIM1;
// while( !Static_Var_3 )
// {
// sleep 25;
// }
set ARMORED to 0;
call-script ACR();
turn turret to y-axis heading speed <120>;
turn sleeve to x-axis <0> - pitch speed <60>;
wait-for-turn turret around y-axis;
wait-for-turn sleeve around x-axis;
if (ML > 32)
{
turn sleeve to x-axis <0> speed <60>;
wait-for-turn sleeve around x-axis;
sleep 150;
call-script DECR();
ML = 1;
sleep 2000;
}
start-script RestoreAfterDelay();
return(1);
}
FirePrimary()
{
if (ML == 1)
{
show f01;
hide m01;
sleep 150;
hide f01;
}
if (ML == 2)
{
show f02;
hide m02;
sleep 150;
hide f02;
}
if (ML == 3)
{
show f03;
hide m03;
sleep 150;
hide f03;
}
if (ML == 4)
{
show f04;
hide m04;
sleep 150;
hide f04;
}
if (ML == 5)
{
show f05;
hide m05;
sleep 150;
hide f05;
}
if (ML == 6)
{
show f06;
hide m06;
sleep 150;
hide f06;
}
if (ML == 7)
{
show f07;
hide m07;
sleep 150;
hide f07;
}
if (ML == 8)
{
show f08;
hide m08;
sleep 150;
hide f08;
}
if (ML == 9)
{
show f09;
hide m09;
sleep 150;
hide f09;
}
if (ML == 10)
{
show f10;
hide m10;
sleep 150;
hide f10;
}
if (ML == 11)
{
show f11;
hide m11;
sleep 150;
hide f11;
}
if (ML == 12)
{
show f12;
hide m12;
sleep 150;
hide f12;
}
if (ML == 13)
{
show f13;
hide m13;
sleep 150;
hide f13;
}
if (ML == 14)
{
show f14;
hide m14;
sleep 150;
hide f14;
}
if (ML == 15)
{
show f15;
hide m15;
sleep 150;
hide f15;
}
if (ML == 16)
{
show f16;
hide m16;
sleep 150;
hide f16;
}
if (ML == 17)
{
show f17;
hide m17;
sleep 150;
hide f17;
}
if (ML == 18)
{
show f18;
hide m18;
sleep 150;
hide f18;
}
if (ML == 19)
{
show f19;
hide m19;
sleep 150;
hide f19;
}
if (ML == 20)
{
show f20;
hide m20;
sleep 150;
hide f20;
}
if (ML == 21)
{
show f21;
hide m21;
sleep 150;
hide f21;
}
if (ML == 22)
{
show f22;
hide m22;
sleep 150;
hide f22;
}
if (ML == 23)
{
show f23;
hide m23;
sleep 150;
hide f23;
}
if (ML == 24)
{
show f24;
hide m24;
sleep 150;
hide f24;
}
if (ML == 25)
{
show f25;
hide m25;
sleep 150;
hide f25;
}
if (ML == 26)
{
show f26;
hide m26;
sleep 150;
hide f26;
}
if (ML == 27)
{
show f27;
hide m27;
sleep 150;
hide f27;
}
if (ML == 28)
{
show f28;
hide m28;
sleep 150;
hide f28;
}
if (ML == 29)
{
show f29;
hide m29;
sleep 150;
hide f29;
}
if (ML == 30)
{
show f30;
hide m30;
sleep 150;
hide f30;
}
if (ML == 31)
{
show f31;
hide m31;
sleep 150;
hide f31;
}
if (ML == 32)
{
show f32;
hide m32;
sleep 150;
hide f32;
}
++ML;
}
AimFromPrimary (piecenum)
{
if(ML == 1)
{
piecenum = f01;
}
if(ML == 2)
{
piecenum = f02;
}
if(ML == 3)
{
piecenum = f03;
}
if(ML == 4)
{
piecenum = f04;
}
if(ML == 5)
{
piecenum = f05;
}
if(ML == 6)
{
piecenum = f06;
}
if(ML == 7)
{
piecenum = f07;
}
if(ML == 8)
{
piecenum = f08;
}
if(ML == 9)
{
piecenum = f09;
}
if(ML == 10)
{
piecenum = f10;
}
if(ML == 11)
{
piecenum = f11;
}
if(ML == 12)
{
piecenum = f12;
}
if(ML == 13)
{
piecenum = f13;
}
if(ML == 14)
{
piecenum = f14;
}
if(ML == 15)
{
piecenum = f15;
}
if(ML == 16)
{
piecenum = f16;
}
if(ML == 17)
{
piecenum = f17;
}
if(ML == 18)
{
piecenum = f18;
}
if(ML == 19)
{
piecenum = f19;
}
if(ML == 20)
{
piecenum = f20;
}
if(ML == 21)
{
piecenum = f21;
}
if(ML == 22)
{
piecenum = f22;
}
if(ML == 23)
{
piecenum = f23;
}
if(ML == 24)
{
piecenum = f24;
}
if(ML == 25)
{
piecenum = f25;
}
if(ML == 26)
{
piecenum = f26;
}
if(ML == 27)
{
piecenum = f27;
}
if(ML == 28)
{
piecenum = f28;
}
if(ML == 29)
{
piecenum = f29;
}
if(ML == 30)
{
piecenum = f30;
}
if(ML == 31)
{
piecenum = f31;
}
if(ML == 32)
{
piecenum = f32;
}
}
QueryPrimary (piecenum)
{
if(ML == 1)
{
piecenum = f01;
}
if(ML == 2)
{
piecenum = f02;
}
if(ML == 3)
{
piecenum = f03;
}
if(ML == 4)
{
piecenum = f04;
}
if(ML == 5)
{
piecenum = f05;
}
if(ML == 6)
{
piecenum = f06;
}
if(ML == 7)
{
piecenum = f07;
}
if(ML == 8)
{
piecenum = f08;
}
if(ML == 9)
{
piecenum = f09;
}
if(ML == 10)
{
piecenum = f10;
}
if(ML == 11)
{
piecenum = f11;
}
if(ML == 12)
{
piecenum = f12;
}
if(ML == 13)
{
piecenum = f13;
}
if(ML == 14)
{
piecenum = f14;
}
if(ML == 15)
{
piecenum = f15;
}
if(ML == 16)
{
piecenum = f16;
}
if(ML == 17)
{
piecenum = f17;
}
if(ML == 18)
{
piecenum = f18;
}
if(ML == 19)
{
piecenum = f19;
}
if(ML == 20)
{
piecenum = f20;
}
if(ML == 21)
{
piecenum = f21;
}
if(ML == 22)
{
piecenum = f22;
}
if(ML == 23)
{
piecenum = f23;
}
if(ML == 24)
{
piecenum = f24;
}
if(ML == 25)
{
piecenum = f25;
}
if(ML == 26)
{
piecenum = f26;
}
if(ML == 27)
{
piecenum = f27;
}
if(ML == 28)
{
piecenum = f28;
}
if(ML == 29)
{
piecenum = f29;
}
if(ML == 30)
{
piecenum = f30;
}
if(ML == 31)
{
piecenum = f31;
}
if(ML == 32)
{
piecenum = f32;
}
}
SweetSpot (piecenum)
{
piecenum = base;
}
Killed(severity, corpsetype)
{
if (severity <= 25)
{
corpsetype = 1;
explode turret type BITMAPONLY | BITMAP1;
explode sleeve type BITMAPONLY | BITMAP1;
explode wing1 type BITMAPONLY | BITMAP1;
explode wing2 type BITMAPONLY | BITMAP1;
return(0);
}
if (severity <= 50)
{
corpsetype = 2;
explode turret type SHATTER | BITMAP4;
explode sleeve type SHATTER | BITMAP4;
explode wing1 type SHATTER | BITMAP4;
explode wing2 type SHATTER | BITMAP4;
return(0);
}
if (severity <= 99)
{
corpsetype = 3;
explode turret type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP2;
explode sleeve type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP2;
explode wing1 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP2;
explode wing2 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP2;
return(0);
}
corpsetype = 3;
explode turret type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP2;
explode sleeve type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP2;
explode wing1 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP2;
explode wing2 type FALL | SMOKE | FIRE | EXPLODE_ON_HIT | BITMAP2;
return(0);
}
效果非常明显,目前没有再测试出bug来,这个脚本的改进非常不错,把瞄准任务由统一的turret分配到每一个发射点上去,我原以为这样做会恶化bug,多谢了!!!