//loading system if ($mpm_AE != 1) { $mpm_load[$mpm_loads] = Mpm_AREP_Load; $mpm_loads++; $mpm_load[$mpm_loads] = Mpm_ACLK_Load; $mpm_loads++; $mpm_load[$mpm_loads] = Mpm_ADIS_Load; $mpm_loads++; $mpm_load[$mpm_loads] = Mpm_AESP_Load; $mpm_loads++; $mpm_load[$mpm_loads] = Mpm_AMOR_Load; $mpm_loads++; $mpm_AE = 1; } //Loads datablock ItemData(Mpm_AREP_Load):Mpm_Base_Load { slot = 0; cost = 25; name = "[AID] Repair Pulse"; friendly = 1; missile = Mpm_B_MIS4; }; datablock ItemData(Mpm_ACLK_Load):Mpm_Base_Load { slot = 0; cost = 30; name = "[AID] Cloak Pulse"; friendly = 1; missile = Mpm_B_MIS4; }; datablock ItemData(Mpm_ADIS_Load):Mpm_Base_Load { slot = 0; cost = 25; name = "[AID] Dissasemble Pulse"; friendly = 0; missile = Mpm_B_MIS4; }; datablock ItemData(Mpm_AESP_Load):Mpm_Base_Load { slot = 0; cost = 50; name = "[AID] Electo Static Pulse"; friendly = 0; missile = Mpm_B_MIS4; }; datablock ItemData(Mpm_AMOR_Load):Mpm_Base_Load { slot = 0; cost = 50; name = "[AID] Morph Pulse"; friendly = 0; missile = Mpm_B_MIS4; }; function Mpm_AREP_Load::Explode(%data,%p,%pos) { if (IsObject(%p)) { Aidpulse(%pos,%p.owner,0); } } function Mpm_ACLK_Load::Explode(%data,%p,%pos) { if (IsObject(%p)) { Aidpulse(%pos,%p.owner,1); } } function Mpm_ADIS_Load::Explode(%data,%p,%pos) { if (IsObject(%p)) { Aidpulse(%pos,%p.owner,2); } } function Mpm_AESP_Load::Explode(%data,%p,%pos) { if (IsObject(%p)) { Aidpulse(%pos,%p.owner,3); } } function Mpm_AMOR_Load::Explode(%data,%p,%pos) { if (IsObject(%p)) { Aidpulse(%pos,%p.owner,4); } } //Shockwaves datablock ShockwaveData(RepairWave) { className = "ShockwaveData"; scale = "1 1 1"; delayMS = "0"; delayVariance = "0"; lifetimeMS = "10000"; lifetimeVariance = "0"; width = "1"; numSegments = "60"; numVertSegments = "30"; velocity = "10"; height = "20"; verticalCurve = "5"; acceleration = "1"; times[0] = "0"; times[1] = "0.25"; times[2] = "0.9"; times[3] = "1"; colors[0] = "1.000000 0.200000 0.200000 1.000000"; //1.0 0.9 0.9 colors[1] = "1.000000 0.200000 0.200000 1.000000"; //0.6 0.6 0.6 colors[2] = "1.000000 0.200000 0.200000 1.000000"; //0.6 0.6 0.6 colors[3] = "1.000000 0.200000 0.200000 0.000000"; texture[0] = "special/redbump2"; texture[1] = "special/shockwave4"; //gradient"; texWrap = "1"; is2D = "0"; mapToTerrain = "0"; orientToNormal = "1"; renderBottom = "1"; renderSquare = "0"; }; datablock ShockwaveData(CloakWave):RepairWave { colors[0] = "1 1 1 1"; colors[1] = "1 1 1 1"; colors[2] = "1 1 1 1"; colors[3] = "1 1 1 0"; texture[0] = "special/cloakTexture"; texture[1] = "special/shockwave4"; texWrap = "5"; }; datablock ShockwaveData(DisWave):RepairWave { colors[0] = "0.2 0.2 1 1"; colors[1] = "0.2 0.2 1 1"; colors[2] = "0.2 0.2 1 1"; colors[3] = "0.2 0.2 1 0"; texture[0] = "special/shockwave5"; texture[1] = "special/shockwave4"; texWrap = "1"; }; datablock ShockwaveData(EspWave):RepairWave { colors[0] = "0.8 0.2 1 1"; colors[1] = "0.8 0.2 1 1"; colors[2] = "0.8 0.2 1 1"; colors[3] = "0.8 0.2 1 0"; texture[0] = "special/shockwave5"; texture[1] = "special/shockwave4"; texWrap = "1"; }; datablock ShockwaveData(MORWave):RepairWave { colors[0] = "0.8 1 0.2 1"; colors[1] = "0.8 1 0.2 1"; colors[2] = "0.8 1 0.2 1"; colors[3] = "0.8 1 0.2 0"; texture[0] = "special/shockwave5"; texture[1] = "special/shockwave4"; texWrap = "1"; }; //Emitters datablock ParticleData(RepairWave_P) { dragCoeffiecient = 0.0; gravityCoefficient = 0.0; inheritedVelFactor = 0.0; lifetimeMS = 10000; lifetimeVarianceMS = 0; constantAcceleration = 0.1; spinRandomMin = -30.0; spinRandomMax = 30.0; windcoefficient = 0; textureName = "special/redflare"; colors[0] = "1 0.2 0.2 1"; colors[1] = "1 0.2 0.2 1"; colors[2] = "1 0.2 0.2 1"; colors[3] = "1 0.2 0.2 0"; sizes[0] = 1; sizes[1] = 2; sizes[2] = 4; sizes[3] = 5; times[0] = "0"; times[1] = "0.25"; times[2] = "0.9"; times[3] = "1"; }; datablock ParticleData(CloakWave_P):RepairWave_P { textureName = "flarebase"; constantAcceleration = 0.1; colors[0] = "1 1 1 1"; colors[1] = "1 1 1 1"; colors[2] = "1 1 1 1"; colors[3] = "1 1 1 0"; }; datablock ParticleData(DISWave_P):RepairWave_P { textureName = "flarebase"; constantAcceleration = 0.1; colors[0] = "0.2 0.2 1 1"; colors[1] = "0.2 0.2 1 1"; colors[2] = "0.2 0.2 1 1"; colors[3] = "0.2 0.2 1 0"; }; datablock ParticleData(ESPWave_P):RepairWave_P { textureName = "flarebase"; constantAcceleration = 0.1; colors[0] = "0.8 0.2 1 1"; colors[1] = "0.8 0.2 1 1"; colors[2] = "0.8 0.2 1 1"; colors[3] = "0.8 0.2 1 0"; }; datablock ParticleData(MORWave_P):RepairWave_P { textureName = "flarebase"; constantAcceleration = 0.1; colors[0] = "0.8 1 0.2 1"; colors[1] = "0.8 1 0.2 1"; colors[2] = "0.8 1 0.2 1"; colors[3] = "0.8 1 0.2 0"; }; datablock ParticleEmitterData(RepairWave_E) { lifetimeMS = 1000; ejectionPeriodMS = 1; periodVarianceMS = 0; ejectionVelocity = 10; velocityVariance = 0; ejectionoffset = 5; thetaMin = 0.0; thetaMax = 180.0; phiReferenceVel = "0"; phiVariance = "360"; orientParticles = false; orientOnVelocity = false; particles = "RepairWave_P"; }; datablock ParticleEmitterData(CLOAKWave_E):RepairWave_E { lifetimeMS = 1000; ejectionPeriodMS = 1; ejectionVelocity = 10; ejectionoffset = 5; velocityVariance = 0; particles = "CloakWave_P"; thetaMin = 0.0; thetaMax = 180.0; phiReferenceVel = "0"; phiVariance = "360"; }; datablock ParticleEmitterData(DISWave_E):RepairWave_E { lifetimeMS = 1000; ejectionPeriodMS = 1; ejectionVelocity = 10; ejectionoffset = 5; velocityVariance = 0; particles = "DISWave_P"; thetaMin = 0.0; thetaMax = 180.0; phiReferenceVel = "0"; phiVariance = "360"; }; datablock ParticleEmitterData(ESPWave_E):RepairWave_E { lifetimeMS = 1000; ejectionPeriodMS = 1; ejectionVelocity = 10; velocityVariance = 0; ejectionoffset = 5; particles = "ESPWave_P"; thetaMin = 0.0; thetaMax = 180.0; phiReferenceVel = "0"; phiVariance = "360"; }; datablock ParticleEmitterData(MORWave_E):RepairWave_E { lifetimeMS = 1000; ejectionPeriodMS = 1; ejectionVelocity = 10; velocityVariance = 0; ejectionoffset = 5; particles = "MORWave_P"; thetaMin = 0.0; thetaMax = 180.0; phiReferenceVel = "0"; phiVariance = "360"; }; datablock ExplosionData(RepairPulseExplosion):BaseExplosion //From blast.cs { emitter[0] = "RepairWave_E"; Shockwave = "RepairWave"; }; datablock ExplosionData(CloakPulseExplosion):BaseExplosion //From blast.cs { emitter[0] = "CloakWave_E"; Shockwave = "CloakWave"; }; datablock ExplosionData(DisPulseExplosion):BaseExplosion //From blast.cs { emitter[0] = "DISWave_E"; Shockwave = "DisWave"; }; datablock ExplosionData(ESPPulseExplosion):BaseExplosion //From blast.cs { emitter[0] = "ESPWave_E"; Shockwave = "ESPWave"; }; datablock ExplosionData(MORPulseExplosion):BaseExplosion //From blast.cs { emitter[0] = "MORWave_E"; Shockwave = "MORWave"; }; datablock TracerProjectileData(RepairPulseProjectile):BaseProjectile { Explosion = "RepairPulseExplosion"; }; datablock TracerProjectileData(CloakPulseProjectile):BaseProjectile { Explosion = "CloakPulseExplosion"; }; datablock TracerProjectileData(DisPulseProjectile):BaseProjectile { Explosion = "DisPulseExplosion"; }; datablock TracerProjectileData(ESPPulseProjectile):BaseProjectile { Explosion = "ESPPulseExplosion"; }; datablock TracerProjectileData(MORPulseProjectile):BaseProjectile { Explosion = "MORPulseExplosion"; }; function Aidpulse(%pos,%owner,%type,%nrm) { schedule(200,0,"Serverplay3D",FlashGrenadeExplosionSound,%pos); %types = "RepairPulseProjectile CloakPulseProjectile DisPulseProjectile ESPPulseProjectile MORPulseProjectile"; %proj = GetWord(%types,%type); %nrm = !%nrm ? "0 0 -1" : %nrm; shockwave(%pos,%nrm,%proj); %waveblock = %proj.explosion.shockwave; %accel = %waveblock.acceleration; //accel of wave %speed = %waveblock.velocity; //speed of wave %mtime = %waveblock.lifetimeMS/1000; //time the wave lasts %lastdist = 0; %checks = %mtime/2; //2 per second AidPulseWaved(%pos,%mtime,%speed,%accel,%waveblock,%owner); Cancel(%owner.resetmorphsch); %owner.resetmorphsch = Schedule(%mtime*1000+5000,%owner,"resetmorphsize",%owner); for (%i = 1;%i<20;%i++) { %time = %i/2; %dist = %time*%speed+1/2 * mPow(%time,2)*%accel+10; schedule(%time*1000,0,"AidpulseWaver",%pos,%dist,%lastdist-2,%waveblock,%owner); %lastdist = %dist; } } function solveadist(%accel,%speed,%dist) { %awn = mSolveQuadratic(%accel/2,%speed,-1*%dist); if (getWord(%awn,0) <0 || getWord(%awn,1) > 0) return 0; else return -1*getWord(%awn,1); } function AidPulseWaved(%pos,%time,%speed,%accel,%wave,%owner) { %area = %time*%speed+1/2 * mPow(%time,2)*%accel+10; InitContainerRadiusSearch(%pos, %area, $TypeMasks::StaticShapeObjectType | $TypeMasks::ForceFieldObjectType ); while ((%targetObject = containerSearchNext()) != 0) { %dist = containerSearchCurrRadDamageDist(); %ttime = solveadist(%accel,%speed,%dist-10); if (%ttime != 0 || %ttime < %time) %wave.schedule(%ttime*1000,"AidEffect",%targetobject,%owner,%pos); } } function AidpulseWaver(%pos,%area,%lastar,%wave,%owner) { InitContainerRadiusSearch(%pos, %area, $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType |$TypeMasks::ItemObjectType | $TypeMasks::CorpseObjectType ); while ((%targetObject = containerSearchNext()) != 0) { %dist = containerSearchCurrRadDamageDist(); if (%dist > %area || %dist < %lastar) continue; %wave.AidEffect(%targetobject,%owner,%pos); } } function RepairWave::AidEffect(%block,%obj,%owner,%pos) { if (!isObject(%obj) || %obj.isforceField()) return ""; %obj.playShieldEffect("1 1 1"); %obj.setDamageLevel(0); } function CloakWave::AidEffect(%block,%obj,%owner,%pos) { if (!isObject(%obj) || %obj.isforceField()) return ""; Cancel(%obj.uncloaksch); %obj.setCloaked(True); %obj.uncloaksch = %obj.schedule(60000,"setCloaked",False); } function DisWave::AidEffect(%block,%obj,%owner,%Pos) { if (%obj.isRemoved || !isObject(%owner) || !isObject(%obj)) return; %dataBlockName = %obj.getDataBlock().getName(); if (%dataBlockName $= "StationInventory" || %dataBlockName $= "GeneratorLarge" ||%dataBlockName $= "SolarPanel" ||%dataBlockName $= "SensorMediumPulse" ||%dataBlockName $= "SensorLargePulse") if (%obj.deployed != true) return; if ($reverseDeployItem[%obj.getDataBlock().getName()] $= "") return; if (%obj.team != %owner.team && !(%owner.isAdmin || %owner.isSuperAdmin)) return; if ($Host::OnlyOwnerCascade == 1 && %obj.getOwner() != %owner && !(%owner.isAdmin || %owner.isSuperAdmin)) return; %obj.getDataBlock().disassemble(%owner, %obj); // Run Item Specific code. } function ESPWave::AidEffect(%block,%obj,%owner,%pos) { if (!isObject(%obj)) return ""; %hadsch = %obj.uncloacksch ? 1 : 0; Cancel(%obj.uncloaksch); if (!%obj.isforcefield()) %obj.setCloaked(FALSE); Cancel(%obj.unemplockschd); if (%obj.isVehicle()) vehemplock(%obj); else if (%obj.isPlayer()) PlayerEmpLock(%obj); else if (%obj.getDatablock().maxEnergy !$= "") { if (%obj.getDataBlock().className $= "Generator" && %obj.lastState) { if (!%hadsch) toggleGenerator(%obj,0); %obj.unemplockschd = schedule(30000,%obj," toggleGenerator",%obj,0); } %obj.setEnergyLevel(0); } } function MORWave::AidEffect(%block,%obj,%owner,%pos) { if (%obj.isRemoved || !isObject(%owner) || !isObject(%obj) || %obj.isPLayer() || %obj.isVehicle()) return; if (!(deployables.isMember(%obj))) return; %dataBlockName = %obj.getDataBlock().getName(); if (%dataBlockName $= "StationInventory" || %dataBlockName $= "GeneratorLarge" ||%dataBlockName $= "SolarPanel" ||%dataBlockName $= "SensorMediumPulse" ||%dataBlockName $= "SensorLargePulse") if (%obj.deployed != true) return; if (%obj.team != %owner.team && !(%owner.isAdmin || %owner.isSuperAdmin)) return; if ($Host::OnlyOwnerCascade == 1 && %obj.getOwner() != %owner && !(%owner.isAdmin || %owner.isSuperAdmin)) return; Cancel(%obj.unmorphsch); %obj.unmorphsch = Schedule(30000,%obj,"ResetMorphObject",%obj); if (%obj.morphed) return; %obj.oldcenter = %obj.getEdge("0 0 0"); %obj.oldrealsize = %obj.getrealSize(); %obj.morphed = 1; %size = %owner.morphpulsesize ? %owner.morphpulsesize : 0.1; %scale = VectorScale("1 1 1",%size); %offset = VectorMultiply(VectorSub(%obj.getEdge("0 0 0"),%pos),%scale); %obj.setRealSize(VectorMultiply(%obj.getRealSize(),%scale)); %obj.setEdge(VectorAdd(%pos,%offset),"0 0 0"); if (!%obj.isforcefield()) %obj.startfade(500,0,0); if (isObject(%obj.pzone)) { %obj.pzone.setScale(%Obj.getScale); %obj.pzone.setTransform(%obj.getTransform()); } if (isObject(%obj.emitter)) { %obj.emitter.oldsize = %obj.getScale(); %obj.emitter.setScale(VectorScale(%obj.emitter.getScale(),%size)); %obj.emitter.setTransform(%obj.getTransform()); } if (isObject(%obj.trigger)) { %obj.trigger.oldsize = %obj.getScale(); %obj.trigger.setScale(VectorScale(%obj.trigger.getScale(),%size)); %obj.trigger.setTransform(%obj.getTransform()); } } //ESP functions function vehemplock(%vehicle) { Cancel(%vehicle.unemplockschd); Cancel(%vehicle.lockff.unemplockschd); %vehicle.setFrozenState(true); %vehicle.zapObject(); forceFieldLock(%vehicle); %vehicle.unemplockschd = Schedule(30000,%vehicle,"vehUnEmpLock",%vehicle); %vehicle.lockff.unemplockschd = %vehicle.lockff.Schedule(30000,"delete"); } function vehUnEmpLock(%vehicle) { Cancel(%vehicle.unemplockschd); Cancel(%vehicle.lockff.unemplockschd); %vehicle.lockff.delete(); %vehicle.setFrozenState(false); } function PlayerEmpLock(%player) { Cancel(%player.unemplockschd); Cancel(%player.lockff.unemplockschd); Cancel(%player.lock.unemplockschd); if (!%player.isemped) { %lock = new StaticShape() { dataBlock = SelectionPad; scale = "0.01 0.01 0.01"; }; %lock.startFade(0,0,1); %vec = VectorNormalize(%player.getVelocity()); %vec = (VectorLen(%vec)>0.1) ? %vec : "0 0 1"; %center = %player.getEdge("0 0 0"); %rot = fullrot(%vec,VectorCross(%player.getEyeVector(),%vec)); %player.setTransform(%player.getEdge("0 0 -1") SPC %rot); %player.setEdge(%center,"0 0 0"); %lock.setTransform(getWords(%player.getTransform(),0,2) SPC %rot); %lock.mountObject(%player,0); %lock.player = %player; %player.emplock = %lock; %player.isemped = 1; %player.zapObject(); forceFieldLock(%player); } %player.unemplockschd = Schedule(30000,%player,"PlayerUnEmpLock",%player); if (isObject(%player.lock)) %player.lock.unemplockschd = %player.lock.Schedule(30000,"delete"); if (isObject(%player.lockff)) %player.lockff.unemplockschd = %player.lockff.Schedule(30000,"delete"); } function PlayerUnEmpLock(%player) { %player.isemped = 0; Cancel(%player.unemplockschd); Cancel(%player.lockff.unemplockschd); Cancel(%player.lock.unemplockschd); %player.lockff.delete(); %player.unMount(); if (isObject(%player.emplock)) %player.emplock.delete(); } function forceFieldLock(%obj) { if (!isObject(%obj.lockff)) { %ff = new ForceFieldBare() { dataBlock = DeployedForceField5; scale = "1 1 1"; }; %ff.noSlow = true; %ff.pzone.delete(); %ff.pzone = ""; %obj.lockff = %ff; %ff.obj = %obj; %ff.setScale(%obj.getRealSize()); %ff.setTransform(%obj.getEdge("-1 -1 -1") SPC %Obj.getRotation()); } } //Morph functions function ResetMorphObject(%obj) { Cancel(%obj.unmorphsch); if (!%obj.isforcefield()) %obj.startfade(500,0,0); %obj.setRealSize(%obj.oldrealsize); %obj.setEdge(%obj.oldcenter,"0 0 0"); if (isObject(%obj.pzone)) { %obj.pzone.setScale(%Obj.getScale); %obj.pzone.setTransform(%obj.getTransform()); } if (isObject(%obj.emitter)) { %obj.emitter.setTransform(%obj.getTransform()); %obj.emitter.setScale(%obj.trigger.oldsize); } if (isObject(%obj.trigger)) { %obj.trigger.setTransform(%obj.getTransform()); %obj.trigger.setScale(%obj.trigger.oldsize); } %obj.oldrealsize = ""; %obj.oldcenter = ""; %obj.morphed = ""; } function resetmorphsize(%owner) { %size = (getRandom()*0.9+0.1); %dir = (Getrandom()*2 > 1); %owner.morphpulsesize = %dir ? %size : 1+%size+getRandom()*3; }