Author Topic: need more help scripting  (Read 674 times)

The following script belongs to the stone add-on from the element spell pack. I want to know what will I have to change about this script to decrease the amount of time it takes to refire shots. plz post the number of the lines containing the part of the script needing be changed. Alos I will need to know what to do with it. (no irrelevant comments plz)

datablock audioProfile(StoneExplodeSound)
{
   fileName = "Add-Ons/Weapon_ElementalSpells/Sounds/StoneExplode.wav";
   description = AudioDefault3D;
   preload = true;
};
datablock audioProfile(StoneFireSound)
{
   fileName = "Add-Ons/Weapon_ElementalSpells/Sounds/StoneFire.wav";
   description = AudioClosest3D;
   preload = true;
};

datablock ParticleData(StoneAmbientParticle)
{
   dragCoefficient = 0;
   windCoefficient = 0;
   gravityCoefficient = 0.35;
   inheritedVelFactor = 0.25;
   constantAcceleration = 0;
   lifetimeMS = 1200;
   lifetimeVarianceMS = 500;
   spinSpeed = 0;
   spinRandomMin = -900;
   spinRandomMax = 900;
   useInvAlpha = true;
   framesPerSec = 1;
   textureName = "base/data/particles/cloud";

   colors[0] = "0.6 0.35 0 1";
   colors[1] = "0.5 0.25 0 1";
   colors[2] = "0.25 0.125 0 0";
   sizes[0] = 0.25;
   sizes[1] = 0.33;
   sizes[2] = 0.1;
   times[0] = 0;
   times[1] = 0.5;
   times[2] = 1;
};
datablock ParticleEmitterData(StoneAmbientEmitter)
{
   ejectionPeriodMS = 30;
   periodVarianceMS = 5;
   ejectionVelocity = 1;
   velocityVariance = 0;
   ejectionOffset = 0;
   thetaMin = 0;
   thetaMax = 180;
   phiReferenceVel = 0;
   phiVariance = 360;
   particles = StoneAmbientParticle;
   uiName = "Stone - Ambient";
};

datablock DebrisData(stoneShardDebris)
{
   emitters = StoneAmbientEmitter;

   shapeFile = "Add-Ons/Weapon_ElementalSpells/OtherShapes/StoneShard.dts";
   lifetime = 3;
   minSpinSpeed = -200;
   maxSpinSpeed = 200;
   elasticity = 0.5;
   friction = 0.2;
   numBounces = 1;
   staticOnMaxBounce = true;
   snapOnMaxBounce = false;
   fade = true;

   gravModifier = 1.5;
};

datablock ParticleData(StoneExplosionParticle)
{
   dragCoefficient = 1;
   windCoefficient = 0;
   gravityCoefficient = 1;
   inheritedVelFactor = 0;
   constantAcceleration = 0;
   lifetimeMS = 1100;
   lifetimeVarianceMS = 300;
   spinSpeed = 0;
   spinRandomMin = -900;
   spinRandomMax = 900;
   useInvAlpha = true;
   textureName = "base/data/particles/cloud";
   colors[0] = "0.8 0.65 0.30 1";
   colors[1] = "0.75 0.50 0 1";
   colors[2] = "0.50 0.25 0 0";
   sizes[0] = 0.8;
   sizes[1] = 0.7;
   sizes[2] = 0.6;
   times[0] = 0;
   times[1] = 0.5;
   times[2] = 1;
};
datablock ParticleEmitterData(StoneExplosionEmitter)
{
   ejectionPeriodMS = 1;
   periodVarianceMS = 0;
   ejectionVelocity = 25;
   velocityVariance = 0;
   ejectionOffset = 1;
   thetaMin = 0;
   thetaMax = 75;
   phiReferenceVel = 0;
   phiVariance = 360;
   particles = StoneExplosionParticle;
   lifetimeMS = 300;
};

datablock ExplosionData(StoneExplosion)
{
   soundProfile = StoneExplodeSound;

   lifeTimeMS = 200;

   particleEmitter = StoneExplosionEmitter;
   particleDensity = 100;
   particleRadius = 5;

   debris = stoneShardDebris;
   debrisNum = 5;
   debrisNumVariance = 1;
   debrisPhiMin = 0;
   debrisPhiMax = 360;
   debrisThetaMin = 15;
   debrisThetaMax = 60;
   debrisVelocity = 22;
   debrisVelocityVariance = 2;

   emitter[0] = StoneExplosionEmitter;

   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;

   lightStartRadius = 10;
   lightEndRadius = 1;
   lightStartColor = "1 0.5 0";
   lightEndColor = "1 0.5 0";
};

AddDamageType("StoneSpike", '<bitmap:Add-Ons/Weapon_ElementalSpells/Icons/CI_Stone> %1', '%2 <bitmap:Add-Ons/Weapon_ElementalSpells/Icons/CI_Stone> %1', 1, 1);

datablock ProjectileData(StoneMProjectile)
{
   shapeFile = "base/data/shapes/empty.dts";
   directDamage = 0;
   directDamageType = $DamageType::StoneSpike;
   radiusDamageType = $DamageType::StoneSpike;

   brickExplosionRadius = 5;
   brickExplosionImpact = true;
   brickExplosionForce = 50;
   brickExplosionMaxVolume = 15;
   brickExplosionMaxVolumeFloati ng = 25;

   impactImpulse = 0;
   verticalImpulse = 0;
   explosion = StoneExplosion;
   particleEmitter = StoneAmbientEmitter;

   muzzleVelocity = 60;
   velInheritFactor = 1;

   armingDelay = 0;
   lifetime = 4000;
   fadeDelay = 3500;
   bounceElasticity = 0.5;
   bounceFriction = 0.20;
   isBallistic = true;
   gravityMod = 1;

   hasLight = true;
   lightRadius = 2;
   lightColor = "1 0.5 0";

   uiName = "Stone Spike";
};

datablock StaticShapeData(StoneSpikeData)
{
   category = "Statics";
   shapeFile = "Add-Ons/Weapon_ElementalSpells/OtherShapes/StoneSpike.dts";
   skinName = 'null';
};

function StoneMProjectile::onCollision(%this, %obj, %col, %fade, %pos, %normal)
{
   if(strPos(%col.getClassName(), "Player") != -1)
   {
      %start = %col.getPosition();
      %end = vectorAdd(%start, "0 0 " @ -2 * getWord(%col.getScale(), 2));
      %ray = containerRayCast(%start, %end, $TypeMasks::FxBrickObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType);
      if(!isObject(%col = firstWord(%ray)))
      {
         return;
      }
      %pos = posFromRaycast(%ray);
      %normal = normalFromRaycast(%ray);
   }
   if(%col.getType() & $TypeMasks::InteriorObjectType || %col.getType() & $TypeMasks::FxBrickObjectType || %col.getType() & $TypeMasks::TerrainObjectType)
   {
      %scale = %obj.getScale();
      %spike = new TSstatic()
      {
         datablock = StoneSpikeData;
         shapeName = "Add-Ons/Weapon_ElementalSpells/OtherShapes/StoneSpike.dts";
         position = %pos;
         rotation = "0 0 0 0";
         scale = %scale;
      };
      MissionCleanup.add(%spike);
      for(%i = 2; %i <= 24; %i++)
      {
         %spike.schedule(%i * 200, setScale, vectorScale(%scale, 1 / (%i / 2)));
      }
      StoneSpikeData.schedule(10, doDamage, %spike, %obj.sourceObject, %pos, %scale);
      %spike.schedule(5000, delete);
   }
}

function StoneSpikeData::doDamage(%data, %spike, %obj, %pos, %scale)
{
   %scale = getWord(%scale, 2);
   %typemasks = $Typemasks::PlayerObjectType | $Typemasks::VehicleObjectType;
   InitContainerRadiusSearch(%pos, 3 * %scale, %typemasks);
   while(isObject(%hit = ContainerSearchNext()))
   {
      if(minigameCanDamage(%obj, %hit) && getMinigameFromObject(%hit).weaponDamage)
      {
         %hit.damage(%obj, %pos, 10 * %scale, $DamageType::StoneSpike);
         %add = vectorScale(vectorAdd("0 0 10", getRandom(-2, 2) SPC getRandom(-2, 2) SPC getRandom(0, 5)), %scale);
         %hit.setVelocity(vectorAdd(%hit.getVelocity(), %add));
         %hit.lastPusher = %obj.sourceObject;
         %hit.lastPushTime = getSimTime();
      }
   }
   %boxpos = vectorAdd(%pos, "0 0 " @ %scale * 3);
   %boxsize = vectorScale("3 3 7", %scale);
   InitContainerBoxSearch(%boxpos, %boxsize, %typemasks);
   while(isObject(%hit = ContainerSearchNext()))
   {
      if(minigameCanDamage(%obj, %hit) && getMinigameFromObject(%hit).weaponDamage)
      {
         %hit.damage(%obj, %pos, 15 * %scale, $DamageType::StoneSpike);
         %hit.lastPusher = %obj.sourceObject;
         %hit.lastPushTime = getSimTime();
         %add = vectorScale(vectorAdd("0 0 10", getRandom(-5, 5) SPC getRandom(-5, 5) SPC getRandom(0, 5)), %scale);
         %hit.setVelocity(vectorAdd(%hit.getVelocity(), %add));
      }
   }
}

datablock ItemData(StoneMItem)
{
   category = "Weapon";
   className = "Weapon";

   shapeFile = "Add-Ons/Weapon_ElementalSpells/ItemShapes/Stone.dts";
   rotate = false;
   mass = 0.5;
   density = 0.7;
   elasticity = 0.6;
   friction = 0.6;
   emap = true;

   uiName = "Magic - Stone";
   iconName = "Add-Ons/Weapon_ElementalSpells/Icons/Icon_Stone";
   doColorShift = false;
   colorShiftColor = "1 1 1 1";

   image = StoneMImage;
   canDrop = true;
};

datablock ShapeBaseImageData(StoneMImage)
{
   shapeFile = "base/data/shapes/empty.dts";
   emap = true;

   mountPoint = 0;
   offset = "0 0 0";
   eyeOffset = 0;
   rotation = "0 0 0";

   correctMuzzleVector = true;

   className = "WeaponImage";

   item = StoneMItem;
   ammo = " ";
   MPused = 75;
   projectile = StoneMProjectile;
   projectileType = Projectile;

   melee = false;
   armReady = true;

   doColorShift = false;
   colorShiftColor = "1 1 1 1";

   NoAbsorb["FireM"] = 1; //Damage from type "FireM" is not reduced
   NoAbsorb["WindM"] = 1; //Damage from type "WindM" is not reduced

   stateName[0]                   = "Activate";
   stateTimeoutValue[0]           = 0.15;
   stateTransitionOnTimeout[0]    = "Ready";
   stateSound[0]                  = weaponSwitchSound;

   stateName[1]                   = "Ready";
   stateTransitionOnTriggerDown[1]= "Fire";
   stateAllowImageChange[1]       = true;
   stateEmitter[1]                = StoneAmbientEmitter;
   stateEmitterTime[1]            = 300;

   stateName[2]                   = "Fire";
   stateTransitionOnTimeout[2]    = "Reload";
   stateTimeoutValue[2]           = 1;
   stateFire[2]                   = true;
   stateAllowImageChange[2]       = false;
   stateSequence[2]               = "Fire";
   stateScript[2]                 = "onFire";
   stateWaitForTimeout[2]         = true;
   stateSound[2]                  = StoneFireSound;
   stateEjectShell[2]             = true;

   stateName[3]                   = "Reload";
   stateTransitionOnTriggerUp[3]  = "Ready";
};

function StoneMImage::onFire(%this, %obj, %slot)
{
   if(%obj.lst[%this] > getSimTime())
   {
      return;
   }
   %obj.lst[%this] = getSimTime() + 1000;
   if(%obj.getDatablock().isMage)
   {
      if(%obj.hasEnergy(%this.MPused))
      {
         parent::onFire(%this, %obj, %slot);
         %obj.setEnergyLevel(%obj.getEnergyLevel() - %this.MPused);
      }
      else if(isObject(%client = %obj.getControllingClient()))
      {
         %client.centerPrint("\c4Not enough MP!<br>\c3" @ %obj.getEnergyLevel() @ "/" @ %this.MPused, 3);
      }
   }
   else
   {
      parent::onFire(%this, %obj, %slot);
   }
}

package MagicStone
{
   function armor::damage(%this, %obj, %sourceObject, %pos, %amt, %type)
   {
      %img = %obj.getMountedImage(0);
      if(%img == StoneMImage.getID())
      {
         if(!%img.NoAbsorb[$DamageType_Array[%type]])
         {
            %amt*= 0.75;
         }
      }
      parent::damage(%this, %obj, %sourceObject, %pos, %amt, %type);
   }
};
activatePackage(MagicStone);

Lock this, edit your topic you already made. This is almost an exact duplicate of the last topic, and continuing to make topics like this after being warned can be considered spam. Help will come when it does, don't get impatient and spammy.

Lock this, edit your topic you already made. This is almost an exact duplicate of the last topic, and continuing to make topics like this after being warned can be considered spam. Help will come when it does, don't get impatient and spammy.
Impatience had nothing to do with my reasoning for a second post; I was  unaware that a post could be modified after being posted. Well thx for the warning, but regardless if I have already made this post it would be a waste of time to lock this one and go back to modify my old one.

Copy all the information from this OP
Paste it into the other
Lock this one
Profit.

Copy all the information from this OP
Paste it into the other
Lock this one
Profit.
Well duhh I can obviously see that its that simple, yet that doesn't change my opinion of it as a waste of time, but if its really that important than fine. even though I don’t see why that would be necessary, seeing that you could just as easily click this one as you can the other and even if I do lock this one its not like it removes It from the list. Its still going to be there taking up as much space locked as it would be left alone. But if such senseless actions are needed for the cooperation of people willing to help I guess I don’t have much of a choice, now do i?  >3(