Author Topic: How do I allow an item to be picked up more than once?  (Read 1659 times)

Lol that's funny I set the timescale to 0.2 and apparently the default spear has the same discoloration. So that's not my fault.

The explosion emitter still is an issue though.

If the projectile model is using a transparent texture, it turns white because projectiles can't be re-colored, they have to be a separate model that uses solid textures

If the projectile model is using a transparent texture, it turns white because projectiles can't be re-colored, they have to be a separate model that uses solid textures

So I need to edit the texture then, I thought this was my fault.

Or you could just have a separate model that uses solid textures if you want the actual item to continue being able to be re-colored via scripts

The color is fixed, the explosion still isn't fixed.

When the spears disappear after being struck into the ground they just vanish. My knife script has a smoke effect like the arrows but I can't get it to work on the spear.

I broke the spear fire sound and I don't know how to fix it it doesn't give me any errors.

Code: [Select]
//Throwingspear.cs


datablock AudioProfile(ThrowingspearExplosionSound)
{
   filename    = "./swordHit.wav";
   description = AudioClose3d;
   preload = true;
};

datablock AudioProfile(ThrowingspearFireSound)
{
   filename    = "./spearFire.wav";
   description = AudioClose3d;
   preload = true;
};


//spear trail
datablock ParticleData(ThrowingspearTrailParticle)
{
dragCoefficient = 3.0;
windCoefficient = 0.0;
gravityCoefficient = 0.0;
inheritedVelFactor = 0.0;
constantAcceleration = 0.0;
lifetimeMS = 600;
lifetimeVarianceMS = 0;
spinSpeed = 10.0;
spinRandomMin = -50.0;
spinRandomMax = 50.0;
useInvAlpha = true;
animateTexture = false;
//framesPerSec = 1;

textureName = "base/data/particles/ring";
//animTexName = " ";

// Interpolation variables
colors[0] = "0.75 0.75 0.75 0.3";
colors[1] = "0.75 0.75 0.75 0.2";
colors[2] = "1 1 1 0.0";
sizes[0] = 0.15;
sizes[1] = 0.35;
sizes[2] = 0.05;
times[0] = 0.0;
times[1] = 0.5;
times[2] = 1.0;
};

datablock ParticleEmitterData(ThrowingspearTrailEmitter)
{
   ejectionPeriodMS = 5;
   periodVarianceMS = 0;

   ejectionVelocity = 0; //0.25;
   velocityVariance = 0; //0.10;

   ejectionOffset = 0;

   thetaMin         = 0.0;
   thetaMax         = 90.0; 

   particles = ThrowingspearTrailParticle;

   useEmitterColors = true;
   uiName = "Throwing Spear Trail";
};


//effects
datablock ParticleData(ThrowingspearExplosionParticle)
{
dragCoefficient = 3.0;
windCoefficient = 0.0;
gravityCoefficient = 0.5;
inheritedVelFactor = 0.0;
constantAcceleration = 0.0;
lifetimeMS = 900;
lifetimeVarianceMS = 300;
spinSpeed = 10.0;
spinRandomMin = -50.0;
spinRandomMax = 50.0;
useInvAlpha = true;
animateTexture = false;
//framesPerSec = 1;

textureName = "base/data/particles/cloud";
//animTexName = "~/data/particles/cloud";

// Interpolation variables
colors[0] = "0.3 0.3 0.2 0.9";
colors[1] = "0.2 0.2 0.2 0.0";
sizes[0] = 0.5;
sizes[1] = 1.0;
times[0] = 0.5;
times[1] = 1.0;
};

datablock ParticleEmitterData(ThrowingspearExplosionEmitter)
{
   ejectionPeriodMS = 7;
   periodVarianceMS = 0;
   lifeTimeMS    = 21;
   ejectionVelocity = 8;
   velocityVariance = 1.0;
   ejectionOffset   = 0.0;
   thetaMin         = 0;
   thetaMax         = 90;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvance = false;
   particles = "ThrowingspearExplosionParticle";

   uiName = "Throwing Spear Smoke";
   emitterNode = TenthEmitterNode;
};

datablock ParticleData(ThrowingspearExplosionParticle2)
{
dragCoefficient = 2;
windCoefficient = 1.0;
gravityCoefficient = 2.0;
inheritedVelFactor = 0.2;
constantAcceleration = 0.0;
lifetimeMS = 500;
lifetimeVarianceMS = 300;
spinSpeed = 10.0;
spinRandomMin = -50.0;
spinRandomMax = 50.0;
useInvAlpha = true;
animateTexture = false;
//framesPerSec = 1;

textureName = "base/data/particles/chunk";
//animTexName = "~/data/particles/cloud";

// Interpolation variables
colors[0] = "0.0 0.0 0.0 1.0";
colors[1] = "0.0 0.0 0.0 0.0";
sizes[0]      = 0.45;
sizes[1]      = 0.0;
};

datablock ParticleEmitterData(ThrowingspearExplosionEmitter2)
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   lifetimeMS       = 7;
   ejectionVelocity = 15;
   velocityVariance = 5.0;
   ejectionOffset   = 0.0;
   thetaMin         = 0;
   thetaMax         = 90;
   phiReferenceVel  = 0;
   phiVariance      = 360;
   overrideAdvance = false;
   particles = "ThrowingspearExplosionParticle2";

   useEmitterColors = true;
   uiName = "Throwing Spear Chunk";
   emitterNode = HalfEmitterNode;
};

datablock ExplosionData(ThrowingspearExplosion)
{
   //explosionShape = "";
   lifeTimeMS = 150;

   soundProfile = ThrowingspearExplosionSound;

   emitter[0] = ThrowingspearExplosionEmitter;
   emitter[1] = ThrowingspearExplosionEmitter2;
   //particleDensity = 1;
   //particleRadius = 1.0;

   faceViewer     = true;
   explosionScale = "1 1 1";

   shakeCamera = true;
   camShakeFreq = "7.0 8.0 7.0";
   camShakeAmp = "1.0 1.0 1.0";
   camShakeDuration = 0.5;
   camShakeRadius = 15.0;

   // Dynamic light
   lightStartRadius = 4;
   lightEndRadius = 3;
   lightStartColor = "0.45 0.3 0.1";
   lightEndColor = "0 0 0";

   //impulse
   impulseRadius = 0;
   impulseForce = 100;

   //radius damage
   radiusDamage        = 0;
   damageRadius        = 0;
};

//projectile
AddDamageType("ThrowingSpearDirect",   '<bitmap:add-ons/Weapon_Throwing_Spear/CI_spear> %1',       '%2 <bitmap:add-ons/Weapon_Throwing_Spear/CI_spear> %1',1,1);

datablock ProjectileData(ThrowingspearProjectile)
{
   projectileShapeName = "./spearProjectile.dts";

   directDamage        = 50;
   directDamageType    = $DamageType::ThrowingSpearDirect;

   radiusDamage        = 0;
   damageRadius        = 0;
   radiusDamageType    = $DamageType::ThrowingSpearDirect;

   explosion             = ThrowingspearExplosionParticle2;
   stickExplosion        = ThrowingspearExplosion;
   bloodExplosion        = ThrowingspearExplosion;
   particleEmitter       = ThrowingspearTrailEmitter;
   explodeOnPlayerImpact = true;
   explodeOnDeath        = true; 

   armingDelay         = 30000;
   lifetime            = 30000;
   fadeDelay           = 30000;

   isBallistic         = true;
   bounceAngle         = 170; //stick almost all the time
   minStickVelocity    = 10;
   bounceElasticity    = 0.2;
   bounceFriction      = 0.01;   
   gravityMod = 0.25;

   hasLight    = false;
   lightRadius = 3.0;
   lightColor  = "0 0 0.5";

   muzzleVelocity      = 65;
   velInheritFactor    = 1;

   uiName = "Spear";
};
package ThrowingSpearPackage
{
function Armor::onCollision(%this, %obj, %col, %a, %b, %c, %d, %e, %f)
{
if(%col.dataBlock $= "ThrowingSpearItem" && %col.canPickup)
{
for(%i=0;%i<%this.maxTools;%i++)
{
%item = %obj.tool[%i];
if(%item $= 0 || %item $= "")
{
%freeSlot = 1;
break;
}
}

if(%freeSlot)
{
%obj.pickup(%col);
return;
}
}
Parent::onCollision(%this, %obj, %col, %a, %b, %c, %d, %e, %f);
}
};
activatePackage(ThrowingSpearPackage);

//////////
// item //
//////////
datablock ItemData(ThrowingspearItem)
{
category = "Weapon";  // Mission editor category
className = "Weapon"; // For inventory system

// Basic Item Properties
shapeFile = "./spear.dts";
mass = 1;
density = 0.2;
elasticity = 0.2;
friction = 0.6;
emap = true;

//gui stuff
uiName = "Throwing Spear";
iconName = "./icon_Throwing_Spear";
doColorShift = true;
colorShiftColor = "0.400 0.196 0 1.000";

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

//function spear::onUse(%this,%user)
//{
// //mount the image in the right hand slot
// %user.mountimage(%this.image, $RightHandSlot);
//}

////////////////
//weapon image//
////////////////
datablock ShapeBaseImageData(ThrowingspearImage)
{
   // Basic Item properties
   shapeFile = "./spear.dts";
   emap = true;

   // Specify mount point & offset for 3rd person, and eye offset
   // for first person rendering.
   mountPoint = 0;
   offset = "0 0 0";
   //eyeOffset = "0.1 0.2 -0.55";

   // 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 = ThrowingspearItem;
   ammo = " ";
   projectile = ThrowingspearProjectile;
   projectileType = Projectile;

   //melee particles shoot from eye node for consistancy
   melee = false;
   //raise your arm up or not
   armReady = true;

   //casing = " ";
   doColorShift = true;
   colorShiftColor = "0.400 0.196 0 1.000";

   // 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.1;
stateTransitionOnTimeout[0] = "Ready";
stateSequence[0] = "ready";
stateSound[0] = weaponSwitchSound;

stateName[1] = "Ready";
stateTransitionOnTriggerDown[1] = "Charge";
stateAllowImageChange[1] = true;

stateName[2]                    = "Charge";
stateTransitionOnTimeout[2] = "Armed";
stateTimeoutValue[2]            = 0.7;
stateWaitForTimeout[2] = false;
stateTransitionOnTriggerUp[2] = "AbortCharge";
stateScript[2]                  = "onCharge";
stateAllowImageChange[2]        = false;

stateName[3] = "AbortCharge";
stateTransitionOnTimeout[3] = "Ready";
stateTimeoutValue[3] = 0.3;
stateWaitForTimeout[3] = true;
stateScript[3] = "onAbortCharge";
stateAllowImageChange[3] = false;

stateName[4] = "Armed";
stateTransitionOnTriggerUp[4] = "Fire";
stateAllowImageChange[4] = false;

stateName[5] = "Fire";
stateTransitionOnTimeout[5] = "Done";
stateTimeoutValue[5] = 0.5;
stateFire[5] = true;
stateSequence[5] = "fire";
stateScript[5] = "onFire";
stateWaitForTimeout[5] = true;
stateAllowImageChange[5] = false;
stateSound[5] = ThrowingspearFireSound;

stateName[6] = "Done";
stateScript[6] = "onDone";


};

function ThrowingspearImage::onCharge(%this, %obj, %slot)
{
%obj.playthread(2, spearReady);
%obj.ThrowingSpearSlot = %obj.currTool;
}

function ThrowingspearImage::onAbortCharge(%this, %obj, %slot)
{
%obj.playthread(2, root);
}
function ThrowingSpearImage::onFire(%this, %obj, %slot)
{
%obj.playthread(2, ThrowingspearThrow);
Parent::OnFire(%this, %obj, %slot);

%currSlot = %obj.ThrowingSpearSlot;
%obj.tool[%currSlot] = 0;
%obj.weaponCount--;
messageClient(%obj.client,'MsgItemPickup','',%currSlot,0);
serverCmdUnUseTool(%obj.client);
}

function ThrowingSpearImage::onDone(%this,%obj,%slot)
{
%obj.unMountImage(%slot);
}

The color is fixed, the explosion still isn't fixed.
I just realized you're setting the projectile's explosion data to a particle datablock, which you can't do
Quote
datablock ProjectileData(ThrowingspearProjectile)
{
   projectileShapeName = "./spearProjectile.dts";

   directDamage        = 50;
   directDamageType    = $DamageType::ThrowingSpearDirect;

   radiusDamage        = 0;
   damageRadius        = 0;
   radiusDamageType    = $DamageType::ThrowingSpearDirect;

   explosion             = ThrowingspearExplosionParticl e2;
   stickExplosion        = ThrowingspearExplosion;
   bloodExplosion        = ThrowingspearExplosion;
   particleEmitter       = ThrowingspearTrailEmitter;
   explodeOnPlayerImpact = true;
   explodeOnDeath        = true; 

   armingDelay         = 30000;
   lifetime            = 30000;
   fadeDelay           = 30000;

   isBallistic         = true;
   bounceAngle         = 170; //stick almost all the time
   minStickVelocity    = 10;
   bounceElasticity    = 0.2;
   bounceFriction      = 0.01;   
   gravityMod = 0.25;

   hasLight    = false;
   lightRadius = 3.0;
   lightColor  = "0 0 0.5";

   muzzleVelocity      = 65;
   velInheritFactor    = 1;

   uiName = "Spear";
};
Change that to the name of the explosion datablock
   explosion             = ThrowingspearExplosion;

When the spears disappear after being struck into the ground they just vanish. My knife script has a smoke effect like the arrows but I can't get it to work on the spear.
The projectile data is similar to the bow's, so i guess Blockland doesn't accept 30000 as a value for armingDelay, lifetime and fadeDelay, so try using a smaller value for those like 9999, 9000, 8000, etc


As for the sound being broken, did you overwrite the sound file?
« Last Edit: December 09, 2015, 04:17:25 AM by Masterlegodude »

The explosion works now.

I didn't overwrite the sound file. I even copy and pasted the original script I had and then repasted in every edit and still nothing.
« Last Edit: December 09, 2015, 04:26:22 AM by Lord Tony® »

So that fixed the explosion but now when it  disappears it plays the swordhit sound. The swordhit sound is only for the projectile to actually hit something.
This is because you're delaying the explosion and the sound played with it with armingDelay in the projectile data, what you can do with this is change the explosion sound to something different, maybe an actual explosion if you want, or for a silent projectile explosion, you can just comment out the explosion sound by adding '//' just to the left of 'soundProfile' in the explosion datablock

Then if you want to add a sound effect for the projectile actually hitting into things, you can add this to the CS file
Code: [Select]
function ThrowingspearProjectile::onCollision(%this,%obj,%col,%fade,%pos,%normal)
{
serverPlay3D(AudioProfile_DatablockName,%obj.getTransform());
}
And just replace 'AudioProfile_DatablockName' with whatever audioProfile datablocks you have at the top of your CS file, so you can use 'ThrowingspearExplosionSound' there instead of in the explosion datablock

Now when your projectile collides with anything, it'll play the sound file of the audio profile you provide

No I fixed all that. The spear fire sound is not playing.

Loading Add-On: Weapon_Throwing_Spear (CRC:1150804353)
Executing Add-Ons/Weapon_Throwing_Spear/server.cs.
Executing Add-Ons/Weapon_Throwing_Spear/weapon_Throwing_Spear.cs.
ParticleEmitterData(ThrowingspearExplosionEmitter 2) no particleString, invalid datablock
Add-Ons/Weapon_Throwing_Spear/weapon_Throwing_Spear.cs (0): Register object failed for object ThrowingspearExplosionEmitter 2 of class ParticleEmitterData.
Object 'ThrowingspearExplosionEmitter 2' is not a member of the 'ParticleEmitterData' data block class
Activating package: ThrowingSpearPackage
13 datablocks added.

« Last Edit: December 09, 2015, 11:20:16 PM by Lord Tony® »