It does, I think, I see trigger here and there
function PulserImage::onFire(%this, %obj, %slot)
{
//messageAll( 'MsgClient', 'pushBroom prefired!!!');
Parent::onFire(%this, %obj, %slot);
%obj.playthread(2, rotCW);
}
function PulserImage::onStopFire(%this, %obj, %slot)
{
%obj.playthread(2, root);
//messageAll( 'MsgClient', 'stopfire');
}
datablock TriggerData(ImpulseTrigger)
{
// tickPeriodMS is a value is used to control how often the console
// onTriggerTick callback is called while there are any objects
// in the trigger. The default value is 100 MS.
tickPeriodMS = 100;
};
function ImpulseTrigger::onTickTrigger(%this)
{
//Do nothing as it spams console :(
}
function ImpulseTrigger::onEnterTrigger(%this, %trigger, %obj)
{
if(%obj.getClassName() $= "WheeledVehicle")
{
if($Pref::Server::Impulse_AllowVehicles == 1)
{
return;
}
}
%impulse = %trigger.brick.impulse;
if(%impulse $= "")
{
schedule(100,0,"KillImpTrig",%trigger);
return;
}
if(!isObject(%trigger.brick)){
schedule(100,0,"KillImpTrig",%trigger);
return;
}
%impulse = %trigger.brick.impulse;
%obj.applyImpulse(0,%impulse);
}
function CreateImpulseTrigger(%brick)
{
if(!isobject(%brick)) return;
%triggerX = %brick.dataBlock.brickSizeX/2 + 0.1;
%triggerY = %brick.dataBlock.brickSizeY/2 + 0.1;
%triggerZ = %brick.dataBlock.brickSizeZ*0.2 + 0.1;
if(%brick.angleid == 2){
%newpos = getWord(%brick.getTransform(),0) + %triggerX/2 SPC getWord(%brick.getTransform(),1) - %triggerY/2 SPC getWord(%brick.getTransform(),2) - (%triggerZ / 2);
%newrot = %brick.rotation;
}
if(%brick.angleid == 0){
%triggerXnew = %triggerX/2;
%triggerYnew = %triggerY/2;
%newpos = getWord(%brick.getTransform(),0) - %triggerXnew SPC getWord(%brick.getTransform(),1) + %triggerYnew SPC getWord(%brick.getTransform(),2) - (%triggerZ / 2);
%newrot = %brick.rotation;
}
if(%brick.angleid == 1){
%triggerYsq = %triggerX/2;
%triggerYsq = %triggerYsq - %triggerYsq*2;
%triggerXsq = %triggerY/2;
%triggerXsq = %triggerXsq - %triggerXsq*2;
%newrot = %brick.rotation;
%newpos = getWord(%brick.getTransform(),0) - %TriggerXsq SPC getWord(%brick.getTransform(),1) - %triggerYsq SPC getWord(%brick.getTransform(),2) - (%triggerZ / 2);
}
if(%brick.angleid == 3){
%triggerXsq = %triggerY/2;
%triggerYsq = %triggerX/2;
%newrot = %brick.rotation;
%newpos = getWord(%brick.getTransform(),0) - %TriggerXsq SPC getWord(%brick.getTransform(),1) - %triggerYsq SPC getWord(%brick.getTransform(),2) - (%triggerZ / 2);
}
%trigger = new Trigger() {
position = %newpos;
rotation = %newrot;
scale = "1 1 1.2";
dataBlock = ImpulseTrigger;
polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 0.0000000 1.0000000";
};
%brick.trigger = %trigger;
%trigger.brick = %brick;
%trigger.setScale(%triggerX SPC %triggerY SPC %triggerZ);
}
function KillImpTrig(%obj)
{
%obj.delete();
}
function serverCmdSetImpulse(%client,%x,%y,%z)
{
if(%x $= "" || %y $= "" || %z $= "")
{
Messageclient(%client,'',"\c2You did not fill in all the specified values!");
%client.impulse = "";
return;
}
if(%x > 100 || %y > 100 || %z > 100)
{
Messageclient(%client,'',"\c2One or more of your values were too big! (< 100)");
%client.impulse = "";
return;
}
if(%x < -100 || %y < -100 || %z < -100)
{
Messageclient(%client,'',"\c2One or more of your values were too small! (> -100)");
%client.impulse = "";
return;
}
%client.impulse = (%x*100) SPC (%y*100) SPC (%z*100);
Messageclient(%client,'',"\c2You have set your impulse, now use the Pulser to create a impulse!");
}
I have absolutely no idea what any of this means, but from what Terror says it allows the projectile to make a brick Impulse anyone who touches it.
I just need to get a weapon to create an Impulse field when the projectile hits a wall (brick or not) or detonates mid air, and make it last a set amount of time.