//------------------------------------------------------------------------------ // BeamSwordPack.cs // // beam sword weapon - original code by -Abirikcham, // modified a little by -defender to work as a pack. // original pack code I used is made by -DynaBlade.. //------------------------------------------------------------------------------ //----------------- //----BeamSound---- //----------------- datablock AudioProfile(BeamSwitchSound) { filename = "fx/weapons/generic_switch.wav"; description = AudioClosest3d; preload = true; }; datablock AudioProfile(BeamFireSound) { filename = "fx/powered/vehicle_screen_off.wav"; //filename = "fx/powered/vehicle_screen_on.wav"; description = AudioClosest3d; preload = true; }; datablock AudioProfile(BeamLoopSound) { //filename = "fx/powered/vehicle_screen_on.wav"; filename = "fx/powered/vehicle_screen_off.wav"; description = CloseLooping3d; preload = true; }; //-------------------------------------------------------------------------- datablock ShapeBaseImageData(BeamSwordDecalImage) { mountPoint = 1; shapeFile = "pack_deploy_turreti.dts"; offset = "0.16 0 0"; rotation = "0 1 0 180"; }; datablock ShapeBaseImageData(BeamSwordPackImage) { shapeFile = "pack_deploy_turreti.dts"; item = BeamSwordPack; mountPoint = 1; offset = "-0.16 0 0"; rotation = "0 1 0 180"; emap = true; gun = BeamSwordGunImage; stateName[0] = "Idle"; stateTransitionOnTriggerDown[0] = "Activate"; stateName[1] = "Activate"; stateScript[1] = "onActivate"; stateSequence[1] = "fire"; stateSound[1] = BeamSwitchSound; stateTransitionOnTriggerUp[1] = "Deactivate"; stateName[2] = "Deactivate"; stateScript[2] = "onDeactivate"; stateTransitionOnTimeout[2] = "Idle"; }; datablock ItemData(BeamSwordPack) { className = Pack; catagory = "Packs"; shapeFile = "pack_deploy_turreti.dts"; mass = 1; elasticity = 0.2; friction = 0.6; pickupRadius = 2; rotate = true; image = "BeamSwordPackImage"; pickUpName = "a Beam Sword pack"; emap = true; }; //---------------- //---Projectile--- //---------------- datablock TargetProjectileData(LightBeam) { maxRifleRange = 20; beamColor = "0.01 0.01 1.0"; startBeamWidth = 0.16; pulseBeamWidth = 0.16; beamFlareAngle = 3.0; minFlareSize = 0.0; maxFlareSize = 0.0; pulseSpeed = 5; pulseLength = 0.450; textureName[0] = "special/nonlingradient"; textureName[1] = "special/flare"; textureName[2] = "special/Shocklance_effect01"; textureName[3] = "special/expflare"; beacon = true; }; datablock ShapeBaseImageData(BeamSwordGunImage) { className = WeaponImage; shapeFile = "turret_tank_barrelchain.dts"; item = Plasma; projectile = LightBeam; projectileType = TargetProjectile; usesEnergy = true; minEnergy = 0.1; stateName[0] = "Activate"; stateSequence[0] = "Activate"; stateSound[0] = BeamSwitchSound; stateTimeoutValue[0] = 0.1; stateTransitionOnTimeout[0] = "ActivateReady"; stateName[1] = "ActivateReady"; stateTransitionOnAmmo[1] = "Ready"; stateTransitionOnNoAmmo[1] = "NoAmmo"; stateName[2] = "Ready"; stateTransitionOnNoAmmo[2] = "NoAmmo"; stateTransitionOnTriggerDown[2] = "DelayFire"; statename[6] = "delayfire"; stateTimeoutValue[6] = 0.35; stateSound[6] = BeamFireSound; stateTransitionOnTimeout[6] = "Fire"; stateName[3] = "Fire"; stateEnergyDrain[3] = 8; stateSound[3] = BeamLoopSound; //stateRecoil[3] = LightRecoil; stateFire[3] = true; stateAllowImageChange[3] = false; stateScript[3] = "onFire"; stateTransitionOnTriggerUp[3] = "Deconstruction"; stateTransitionOnNoAmmo[3] = "Deconstruction"; stateName[4] = "NoAmmo"; stateTransitionOnAmmo[4] = "Ready"; stateName[5] = "Deconstruction"; stateScript[5] = "onRelease"; //stateRecoil[5] = LightRecoil; stateTimeoutValue[5] = 0.0; stateTransitionOnTimeout[5] = "Ready"; }; datablock ExplosionData(beamfakeexp) { emitter = ""; }; datablock LinearProjectileData(BeamSwordFakeProj) { projectileShapeName = "turret_muzzlepoint.dts"; scale = "0.1 0.1 0.1"; faceViewer = true; directDamageType = $DamageType::BeamSword; directDamage = 0.60; hasDamageRadius = true; indirectDamage = 0.60; damageRadius = 0.01; kickBackStrength = 0; radiusDamageType = $DamageType::BeamSword; explosion = "beamfakeexp"; dryVelocity = 0; wetVelocity = 0; velInheritFactor = 0.0; lifetimeMS = 0.00001; explodeOnDeath = true; reflectOnWaterImpactAngle = 0.0; explodeOnWaterImpact = true; deflectionOnWaterImpact = 0.0; hasLight = false; }; function BeamSwordPackImage::onMount(%data, %obj, %node) { %obj.mountImage(BeamSwordDecalImage, 7); } function BeamSwordPackImage::onUnmount(%data, %obj, %node) { %obj.unmountImage(7); // dismount the Kicker gun if the player had it mounted // need the extra "if" statement to avoid a console error message if(%obj.getMountedImage($WeaponSlot)) if(%obj.getMountedImage($WeaponSlot).getName() $= "BeamSwordGunImage") %obj.unmountImage($WeaponSlot); } function BeamSwordPackImage::onActivate(%data, %obj, %slot) { // don't activate the pack if player is piloting a vehicle if(%obj.isPilot()) { %obj.setImageTrigger(%slot, false); return; } if(!isObject(%obj.getMountedImage($WeaponSlot)) || %obj.getMountedImage($WeaponSlot).getName() !$= "BeamSwordGunImage") { // unmount any weapon the player may have been holding if(%obj.getMountedImage($WeaponSlot)) %obj.unmountImage($WeaponSlot); // make sure player's arm thread is "look" %obj.setArmThread(look); // mount the Kicker gun %obj.mountImage(BeamSwordGunImage, $WeaponSlot); commandToClient(%obj.client, 'setRepairReticle'); } } function BeamSwordPackImage::onDeactivate(%data, %obj, %slot) { //called when the player hits the "pack" key again (toggle) %obj.setImageTrigger(%slot, false); if(%obj.getMountedImage($WeaponSlot).getName() $= "BeamSwordGunImage") %obj.unmountImage($WeaponSlot); } function BeamSwordGunImage::onMount(%this,%obj,%slot) { %obj.setImageAmmo(%slot,true); } function BeamSwordGunImage::onUnmount(%this,%obj,%slot) { %obj.setImageTrigger(%slot, false); %obj.setImageTrigger($BackpackSlot, false); %obj.fired = ""; %obj.lastProjectile.delete(); } function BeamSwordPack::onPickup(%this, %obj, %shape, %amount) { // created to prevent console errors } //-------------- //---Release---- //-------------- function BeamSwordGunImage::onRelease(%data,%obj,%slot) { %obj.fired = ""; %obj.lastProjectile.delete(); } function checkfortarg(%obj) { %mask = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType | $TypeMasks::StationObjectType | $TypeMasks::GeneratorObjectType | $TypeMasks::SensorObjectType | $TypeMasks::TurretObjectType; %muzzlePos = %obj.getMuzzlePoint(%slot); %muzzleVec = %obj.getMuzzleVector(%slot); %endPos = VectorAdd(%muzzlePos, VectorScale(%muzzlevec, 20)); %obj.hit = ContainerRayCast(%muzzlePos, %endPos, %mask, %obj); %obj.hitpos = getWord(%obj.hit, 1) @ " " @ getWord(%obj.hit, 2) @ " " @ getWord(%obj.hit, 3); if (%obj.fired) { if (%obj.hit !$= "0") { %fake = new (LinearProjectile)() { dataBlock = BeamSwordFakeProj; initialDirection = "0 0 0"; initialPosition = %obj.hitpos; sourceSlot = %obj.sourceslot; sourceobject = %obj; }; MissionCleanup.add(%fake); } if (%obj.hit $= "0") { } schedule(190, 0, "checkfortarg", %obj); } } //--------------- //----OnFire----- //--------------- function BeamSwordGunImage::onFire(%pos, %obj, %target) { %obj.fired = true; %p = new (TargetProjectile)() { dataBlock = LightBeam; initialDirection = %obj.getMuzzleVector(%slot); initialPosition = %obj.getMuzzlePoint(%slot); sourceSlot = %obj.sourceslot; sourceobject = %obj; }; MissionCleanup.add(%p); %obj.lastProjectile = %p; checkfortarg(%obj); }