function LeviathanImage::Search(%this, %obj, %slot){ %start = %obj.getMuzzlePoint(%slot); %end = vectorAdd(%start, vectorScale(%obj.getMuzzleVector(%slot), 500)); %typemasks = $Typemasks::PlayerObjectType | $Typemasks::FxBrickObjectType | $Typemasks::TerrainObjectType | $Typemasks::InteriorObjectType | $TypeMasks::StaticObjectType | $TypeMasks::VehicleObjectType; %ray = containerRaycast(%start, %end, %typemasks, %obj); if(isObject(%hit = firstWord(%ray))) { %pos = posFromRaycast(%ray); %apos = vectorAdd(%pos, vectorScale(normalFromRaycast(%ray), 0.05)); %prj = new Projectile() { datablock = LeviathanEmitterA; initialPosition = %apos; initialVelocity = "0 0 0"; scale = %obj.getScale(); sourceObject = %obj; sourceSlot = %slot; client = %obj.client; }; }}function LeviathanImage::onFire(%this, %obj, %slot){ if(%obj.lastShot[%this] + %this.minShotTime > getSimTime()) { return; } %obj.lastShot[%this] = getSimTime(); %start = %obj.getMuzzlePoint(%slot); %end = vectorAdd(%start, vectorScale(%obj.getMuzzleVector(%slot), 500)); %typemasks = $Typemasks::PlayerObjectType | $Typemasks::FxBrickObjectType | $Typemasks::TerrainObjectType | $Typemasks::InteriorObjectType | $TypeMasks::StaticObjectType | $TypeMasks::VehicleObjectType; %ray = containerRaycast(%start, %end, %typemasks, %obj); if(isObject(%hit = firstWord(%ray))) { %pos = posFromRaycast(%ray); %apos = vectorAdd(%pos, vectorScale(normalFromRaycast(%ray), 0.05)); %prj = new Projectile() { datablock = LeviathanEmitterA; initialPosition = %apos; initialVelocity = vectorScale(%obj.getMuzzleVector(%slot), 200); scale = %obj.getScale(); sourceObject = %obj; sourceSlot = %slot; client = %obj.client; Leviathanbullet = true; }; }}
Leviathanbullet = true;