Author Topic: Weapon spawns in v20 but not v21 [SOLVED]  (Read 735 times)

I used this tutorial and the pre made package LINK: https://www.youtube.com/watch?v=ldQ9TT19Ajw



I have a pistol called Whipto it spawns in v20 but not v21
it appears in the item selection in the brick but, when I hit done it simply doesn't spawn. Could someone help me please?



Quote
//Please watch my turorials to understand this. Watch Part 3!

//Audio
datablock AudioProfile(WhiptoShot1Sound)
{
   filename    = "./Sounds/fire.wav";
   description = AudioClose3d;
   preload = true;
};
datablock AudioProfile(WhiptobulletHitSound)
{
   filename    = "./Add-Ons/Weapon_Gun/bulletHit.wav";
   description = AudioClose3d;
   preload = true;
};


//Shell Debris
datablock DebrisData(WhiptoShellDebris)
{
   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 Flash
datablock ParticleData(WhiptoFlashParticle)
{
   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(WhiptoFlashEmitter)
{
   ejectionPeriodMS = 3;
   periodVarianceMS = 0;
   ejectionVelocity = 1.0;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 0;
   thetaMax         = 90;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvance = false;
   particles = "WhiptoFlashParticle";

   uiName = "Whipto Flash";
};

datablock ParticleData(WhiptoSmokeParticle)
{
   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(WhiptoSmokeEmitter)
{
   ejectionPeriodMS = 3;
   periodVarianceMS = 0;
   ejectionVelocity = 1.0;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 0;
   thetaMax         = 90;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvance = false;
   particles = "WhiptoSmokeParticle";

   uiName = "Whipto Smoke";
};


datablock ParticleData(WhiptoExplosionParticle)
{
   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(WhiptoExplosionEmitter)
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   ejectionVelocity = 2;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 89;
   thetaMax         = 90;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvance = false;
   particles = "WhiptoExplosionParticle";

   useEmitterColors = true;
   uiName = "Whipto Hit Dust";
};


datablock ParticleData(WhiptoExplosionRingParticle)
{
   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(WhiptoExplosionRingEmitter)
{
   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 = "WhiptoExplosionRingParticle";

   useEmitterColors = true;
   uiName = "Whipto Hit Flash";
};

datablock ExplosionData(WhiptoExplosion)
{
   //explosionShape = ""; //Usually for explosives
   soundProfile = WhiptobulletHitSound;

   lifeTimeMS = 150;

   particleEmitter = WhiptoExplosionEmitter;
   particleDensity = 5;
   particleRadius = 0.2;

   emitter[0] = WhiptoExplosionRingEmitter;

   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("Whipto",   '<bitmap:add-ons/Weapon_Whipto/CI_Whipto> %1',    '%2 <bitmap:add-ons/Weapon_Whipto/CI_Whipto> %1',0.2,1);
datablock ProjectileData(WhiptoProjectile)
{
   projectileShapeName = "./bullet.dts"; //If you have a custom model place the filename here
   directDamage        = 40;         //When projectile hits a player
   directDamageType    = $DamageType::Whipto; //Don't mess with this
   radiusDamageType    = $DamageType::Whipto; //Don't mess with this

   brickExplosionRadius = 0;         
   brickExplosionImpact = true;          //destroy a brick if we hit it directly?
   brickExplosionForce  = 10;         //Amount of force applied to fake-killed bricks
   brickExplosionMaxVolume = 1;          //max volume of bricks that we can destroy
   brickExplosionMaxVolumeFloati ng = 2;  //max volume of bricks that we can destroy if they aren't connected to the ground

   impactImpulse        = 400;
   verticalImpulse     = 400;
   explosion           = WhiptoExplosion;
   particleEmitter     = ""; //bulletTrailEmitter;

   muzzleVelocity      = 200;      //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 = "Whipto Bullet";   //Name of projectile in events for spawning
};

//////////
// item //
//////////
datablock ItemData(WhiptoItem)
{
   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 = "Whipto";      //Name when you spawn on a brick
   iconName = "./icon_Whipto";
   doColorShift = true;
   colorShiftColor = "0.25 0.25 0.25 1.000";

    // Dynamic properties defined by the scripts
   image = WhiptoImage;
   canDrop = true;
};

////////////////
//weapon image//
////////////////
datablock ShapeBaseImageData(WhiptoImage)
{
   // Basic Item properties
   shapeFile = "./Models/Whipto.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 = WhiptoProjectile;
   projectileType = Projectile;

   casing = WhiptoShellDebris;      //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 = WhiptoItem.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]               = WhiptoFlashEmitter;
   stateEmitterTime[2]            = 0.05;
   stateEmitterNode[2]            = "muzzleNode";
   stateSound[2]               = WhiptoShot1Sound;
   stateEjectShell[2]       = true;

   stateName[3] = "Smoke";
   stateEmitter[3]               = WhiptoSmokeEmitter;
   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 WhiptoImage::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 WhiptoImage::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);
}
« Last Edit: September 01, 2014, 11:32:50 AM by xXArkGuyXx »

So let me get this straight. You posted this literally like 2 topics ago, changed the names of everything, then asked again? Also why are you setting item = BowItem; on the shape base image data when you created a datablock for a new item just above it?
Also what's the find/replace command? Ctrl+G? Because if you're going to use this on code that looks copied straight out of weapon_gun then you can't be changing stuff like
Code: [Select]
   directDamageType    = $DamageType::Whipto; //Don't mess with this
   radiusDamageType    = $DamageType::Whipto; //Don't mess with this
As the comments, plainly state. You can't just copy paste code and pray to the heavens it works.

So let me get this straight. You posted this literally like 2 topics ago, changed the names of everything, then asked again? Also why are you setting item = BowItem; on the shape base image data when you created a datablock for a new item just above it?
Also what's the find/replace command? Ctrl+G? Because if you're going to use this on code that looks copied straight out of weapon_gun then you can't be changing stuff like
Code: [Select]
   directDamageType    = $DamageType::Whipto; //Don't mess with this
   radiusDamageType    = $DamageType::Whipto; //Don't mess with this
As the comments, plainly state. You can't just copy paste code and pray to the heavens it works.
Sorry I thought the first topic was bad so i made a new one and i followed a guide that i linked before.

If you can model and make nice looking models then you can easily find a scripter to write the scripts for you. If you wish to learn how to script, then look at already made add-ons, and try to see how they work. You can also go look for online tutorials, as there are bound to be more than a few. And if you think about things like weapon scripts are pretty straight forward, if you see a comment, as defined by the // then you should read them. They normally tell you what the code right after is or is doing.