Add-on making hasn't changed since v9Whether happened is something completely different
//Please watch my turorials to understand this. Watch Part 3!//Audiodatablock AudioProfile(FlagelShot1Sound){ filename = "./Sounds/fire.wav"; description = AudioClose3d; preload = true;};datablock AudioProfile(FlagelbulletHitSound){ filename = "./Add-Ons/Weapon_Gun/bulletHit.wav"; description = AudioClose3d; preload = true;};//Shell Debrisdatablock DebrisData(FlagelShellDebris){ shapeFile = "./Add-Ons/Weapon_Gun/gunShell.dts"; lifetime = 2.0; minSpinSpeed = -400.0; maxSpinSpeed = 200.0; elasticity = 0.5; friction = 0.2; numBounces = 3; staticOnMaxBounce = true; snapOnMaxBounce = false; fade = true; gravModifier = 2;};//Muzzle Flashdatablock ParticleData(FlagelFlashParticle){ dragCoefficient = 3; gravityCoefficient = -0.5; inheritedVelFactor = 0.2; constantAcceleration = 0.0; lifetimeMS = 25; lifetimeVarianceMS = 15; textureName = "base/data/particles/star1"; spinSpeed = 10.0; spinRandomMin = -500.0; spinRandomMax = 500.0; colors[0] = "0.9 0.9 0.0 0.9"; colors[1] = "0.9 0.5 0.0 0.0"; sizes[0] = 0.5; sizes[1] = 1.0; useInvAlpha = false;};datablock ParticleEmitterData(FlagelFlashEmitter){ ejectionPeriodMS = 3; periodVarianceMS = 0; ejectionVelocity = 1.0; velocityVariance = 1.0; ejectionOffset = 0.0; thetaMin = 0; thetaMax = 90; phiReferenceVel = 0; phiVariance = 360; overrideAdvance = false; particles = "FlagelFlashParticle"; uiName = "Flagel Flash";};datablock ParticleData(FlagelSmokeParticle){ dragCoefficient = 3; gravityCoefficient = -0.5; inheritedVelFactor = 0.2; constantAcceleration = 0.0; lifetimeMS = 525; lifetimeVarianceMS = 55; textureName = "base/data/particles/cloud"; spinSpeed = 10.0; spinRandomMin = -500.0; spinRandomMax = 500.0; colors[0] = "0.5 0.5 0.5 0.9"; colors[1] = "0.5 0.5 0.5 0.0"; sizes[0] = 0.15; sizes[1] = 0.15; useInvAlpha = false;};datablock ParticleEmitterData(FlagelSmokeEmitter){ ejectionPeriodMS = 3; periodVarianceMS = 0; ejectionVelocity = 1.0; velocityVariance = 1.0; ejectionOffset = 0.0; thetaMin = 0; thetaMax = 90; phiReferenceVel = 0; phiVariance = 360; overrideAdvance = false; particles = "FlagelSmokeParticle"; uiName = "Flagel Smoke";};datablock ParticleData(FlagelExplosionParticle){ dragCoefficient = 8; gravityCoefficient = 1; inheritedVelFactor = 0.2; constantAcceleration = 0.0; lifetimeMS = 700; lifetimeVarianceMS = 400; textureName = "base/data/particles/cloud"; spinSpeed = 10.0; spinRandomMin = -50.0; spinRandomMax = 50.0; colors[0] = "0.9 0.9 0.9 0.3"; colors[1] = "0.9 0.5 0.6 0.0"; sizes[0] = 0.25; sizes[1] = 0.75; useInvAlpha = true;};datablock ParticleEmitterData(FlagelExplosionEmitter){ ejectionPeriodMS = 1; periodVarianceMS = 0; ejectionVelocity = 2; velocityVariance = 1.0; ejectionOffset = 0.0; thetaMin = 89; thetaMax = 90; phiReferenceVel = 0; phiVariance = 360; overrideAdvance = false; particles = "FlagelExplosionParticle"; useEmitterColors = true; uiName = "Flagel Hit Dust";};datablock ParticleData(FlagelExplosionRingParticle){ dragCoefficient = 8; gravityCoefficient = -0.5; inheritedVelFactor = 0.2; constantAcceleration = 0.0; lifetimeMS = 50; lifetimeVarianceMS = 35; textureName = "base/data/particles/star1"; spinSpeed = 500.0; spinRandomMin = -500.0; spinRandomMax = 500.0; colors[0] = "1 1 0.0 0.9"; colors[1] = "0.9 0.0 0.0 0.0"; sizes[0] = 1; sizes[1] = 0; useInvAlpha = false;};datablock ParticleEmitterData(FlagelExplosionRingEmitter){ lifeTimeMS = 50; ejectionPeriodMS = 3; periodVarianceMS = 0; ejectionVelocity = 0; velocityVariance = 0.0; ejectionOffset = 0.0; thetaMin = 89; thetaMax = 90; phiReferenceVel = 0; phiVariance = 360; overrideAdvance = false; particles = "FlagelExplosionRingParticle"; useEmitterColors = true; uiName = "Flagel Hit Flash";};datablock ExplosionData(FlagelExplosion){ //explosionShape = ""; //Usually for explosives soundProfile = FlagelbulletHitSound; lifeTimeMS = 150; particleEmitter = FlagelExplosionEmitter; particleDensity = 5; particleRadius = 0.2; emitter[0] = FlagelExplosionRingEmitter; faceViewer = true; explosionScale = "1 1 1"; shakeCamera = false; camShakeFreq = "10.0 11.0 10.0"; camShakeAmp = "1.0 1.0 1.0"; camShakeDuration = 0.5; camShakeRadius = 10.0; // Dynamic light lightStartRadius = 0; lightEndRadius = 2; lightStartColor = "0.3 0.6 0.7"; lightEndColor = "0 0 0";};AddDamageType("Flagel", '<bitmap:add-ons/Weapon_Flagel/CI_Flagel> %1', '%2 <bitmap:add-ons/Weapon_Flagel/CI_Flagel> %1',0.2,1);datablock ProjectileData(FlagelProjectile){ projectileShapeName = "./bullet.dts"; //If you have a custom model place the filename here directDamage = 40; //When projectile hits a player directDamageType = $DamageType::Flagel; //Don't mess with this radiusDamageType = $DamageType::Flagel; //Don't mess with this brickExplosionRadius = 0; brickExplosionImpact = true; //destroy a brick if we hit it directly? brickExplosionForce = 0; //Amount of force applied to fake-killed bricks brickExplosionMaxVolume = 0; //max volume of bricks that we can destroy brickExplosionMaxVolumeFloati ng = 0; //max volume of bricks that we can destroy if they aren't connected to the ground impactImpulse = 400; verticalImpulse = 400; explosion = FlagelExplosion; particleEmitter = ""; //bulletTrailEmitter; muzzleVelocity = 350; //How fast the bullet travels. I use 200 since anything less is odd. velInheritFactor = 1; armingDelay = 00; lifetime = 4000; //Lifetime of projectile fadeDelay = 3500; //Keep this reletively 1000ms or 500ms below "lifetime" bounceElasticity = 0.5; bounceFriction = 0.20; isBallistic = false; gravityMod = 0.1; //Gravity effect applied to bullet. Do not make it too high hasLight = true; //Self explanitory lightRadius = 3.0; lightColor = "0 0 0.5"; uiName = "Flagel Bullet"; //Name of projectile in events for spawning};//////////// item ////////////datablock ItemData(FlagelItem){ category = "Weapon"; // Mission editor category className = "Weapon"; // For inventory system // Basic Item Properties shapeFile = "./Models/gun.dts"; //If you use two-handed weapons, this is what would NOT have two hands rotate = false; mass = 1; density = 0.2; elasticity = 0.2; friction = 0.6; emap = true; //gui stuff uiName = "Flagel"; //Name when you spawn on a brick iconName = "./icon_Flagel"; doColorShift = true; colorShiftColor = "0.25 0.25 0.25 1.000"; // Dynamic properties defined by the scripts image = FlagelImage; canDrop = true;};//////////////////weapon image//////////////////datablock ShapeBaseImageData(FlagelImage){ // Basic Item properties shapeFile = "./Models/gun.dts"; //If you use two-handed weapons, this is what would have two hands emap = true; // Specify mount point & offset for 3rd person, and eye offset // for first person rendering. mountPoint = 0; offset = "0 0 0"; eyeOffset = 0; //"0.7 1.2 -0.5"; rotation = eulerToMatrix( "0 0 0" ); // When firing from a point offset from the eye, muzzle correction // will adjust the muzzle vector to point to the eye LOS point. // Since this weapon doesn't actually fire from the muzzle point, // we need to turn this off. correctMuzzleVector = true; // Add the WeaponImage namespace as a parent, WeaponImage namespace // provides some hooks into the inventory system. className = "WeaponImage"; // Projectile && Ammo. item = BowItem; ammo = " "; projectile = FlagelProjectile; projectileType = Projectile; casing = FlagelShellDebris; //Don't mess with these too much shellExitDir = "1.0 -1.3 1.0"; shellExitOffset = "0 0 0"; shellExitVariance = 15.0; shellVelocity = 7.0; //melee particles shoot from eye node for consistancy melee = false; //raise your arm up or not armReady = true; doColorShift = true; colorShiftColor = FlagelItem.colorShiftColor;//"0.400 0.196 0 1.000"; //casing = " "; // Images have a state system which controls how the animations // are run, which sounds are played, script callbacks, etc. This // state system is downloaded to the client so that clients can // predict state changes and animate accordingly. The following // system supports basic ready->fire->reload transitions as // well as a no-ammo->dryfire idle state. // Initial start up state stateName[0] = "Activate"; stateTimeoutValue[0] = 0.15; stateTransitionOnTimeout[0] = "Ready"; stateSequence[1] = "Equip"; //Optional if you want an equip animation stateSound[0] = weaponSwitchSound; stateName[1] = "Ready"; stateTransitionOnTriggerDown[1] = "Fire"; stateAllowImageChange[1] = true; stateSequence[1] = "Ready"; stateName[2] = "Fire"; stateTransitionOnTimeout[2] = "Smoke"; stateTimeoutValue[2] = 0.09; //Delay between each shot, the smaller the number, the less of a delay. Fast machine guns would have a small number. stateFire[2] = true; stateAllowImageChange[2] = false; stateSequence[2] = "Fire"; //When you make a custom fire animation, place the name here stateScript[2] = "onFire"; stateWaitForTimeout[2] = true; stateEmitter[2] = FlagelFlashEmitter; stateEmitterTime[2] = 0.05; stateEmitterNode[2] = "muzzleNode"; stateSound[2] = FlagelShot1Sound; stateEjectShell[2] = true; stateName[3] = "Smoke"; stateEmitter[3] = FlagelSmokeEmitter; stateEmitterTime[3] = 0.05; stateEmitterNode[3] = "muzzleNode"; stateTimeoutValue[3] = 0.01; stateTransitionOnTimeout[3] = "Reload"; stateName[4] = "Reload"; stateSequence[4] = "Reload"; stateTransitionOnTriggerUp[4] = "Ready"; stateSequence[4] = "Ready";};function FlagelImage::onFire(%this,%obj,%slot){ if(%obj.getDamagePercent() < 1.0) %obj.playThread(2, shiftAway); //The default animation played when you fire the weapon. Change this if you know another default animation Parent::onFire(%this,%obj,%slot); }//Thanks to Ephialtes for this part. It makes the bullets spread out.function FlagelImage::onFire(%this,%obj,%slot){ %projectile = %this.projectile; %spread = 0.00075; //Change this if you wish, but keep it less than 0.1 for realism. %vector = %obj.getMuzzleVector(%slot); %objectVelocity = %obj.getVelocity(); %vector1 = VectorScale(%vector, %projectile.muzzleVelocity); %vector2 = VectorScale(%objectVelocity, %projectile.velInheritFactor); %velocity = VectorAdd(%vector1,%vector2); %x = (getRandom() - 0.5) * 10 * 1.1415926 * %spread; %y = (getRandom() - 0.5) * 10 * 1.1415926 * %spread; %z = (getRandom() - 0.5) * 10 * 1.1415926 * %spread; %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); %velocity = MatrixMulVector(%mat, %velocity); %p = new (%this.projectileType)() { dataBlock = %projectile; initialVelocity = %velocity; initialPosition = %obj.getMuzzlePoint(%slot); sourceObject = %obj; sourceSlot = %slot; client = %obj.client; }; MissionCleanup.add(%p);}