Author Topic: Weapon DPS Rankings  (Read 2419 times)

So if you put them in the shop, they would be free?

Yeah, I would have to figure out a way to fix that or otherwise I would have to calculate the DPS for them manually.

Yeah, I would have to figure out a way to fix that or otherwise I would have to calculate the DPS for them manually.
Definitely go for manual pricing. Considering the variety in the weapons that have been made, DPS is a pretty poor indicator of value, especially considering airstrikes are free while hand grenades are offering me a perfect opportunity for a Monty Python joke that I just can't think of right now. Reloading times, accuracy, special effects, even the map they're being used on and the types of players using them all factor into the actual value of a weapon in practice.

How's this?
Code: [Select]
datablock ExplosionData(LeviathanExplosion)
{
   explosionShape = "./empty.dts";
   lifeTimeMS = 3000;

   soundProfile = LeviathanExplodeSound;

   debris = LeviathanBitsDebris;
   debrisNum = 200;
   debrisNumVariance = 0;
   debrisPhiMin = 0;
   debrisPhiMax = 360;
   debrisThetaMin = 0;
   debrisThetaMax = 180;
   debrisVelocity = 2500;
   debrisVelocityVariance = 200;
   lifeTimeMS = 1200;

   particleEmitter = LeviathanExplosionEmitter1;
   particleDensity = 40;
   particleRadius = 1.2;

   emitter[0] = LeviathanExplosionRingEmitter;
   emitter[1] = LeviathanOverlayExplosionEmitter;
   emitter[2] = LeviathanExplosionWaveEmitter;

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

   shakeCamera = true;
   camShakeFreq = "15.0 17.0 15.0";
   camShakeAmp = "4.0 12.0 4.0";
   camShakeDuration = 7.5;
   camShakeRadius = 200.0;

   // Dynamic light
   lightStartRadius = 6.0;
   lightEndRadius = 90.0;
   lightStartColor = "1.0 0.7 0.0";
   lightEndColor = "0.5 0.1 0.0";

   //impulse
   impulseRadius = 130;
   impulseForce = 60000;

   //radius damage
   damageRadius = 90;
   radiusDamage = 200;
};

%bitmap = "<bitmap:Add-Ons/Weapon_Leviathan/CI_Leviathan>";
AddDamageType("LeviathanKill",   '<bitmap:add-ons/Weapon_Leviathan/CI_Leviathan> %1',    '%2 <bitmap:add-ons/Weapon_Leviathan/CI_Leviathan> %1',1,1);

datablock ProjectileData(LeviathanMainProjectile)
{
   projectileShapeName = "./empty.dts";
   directDamage        = 100;
   directDamageType = $DamageType::LeviathanKill;
   radiusDamageType = $DamageType::LeviathanKill;
   impactImpulse    = 1000;
   verticalImpulse    = 5000;
   explosion           = LeviathanExplosion;
   particleEmitter     = LeviathanTrailEmitter;

   brickExplosionRadius = 115;
   brickExplosionImpact = true;          //destroy a brick if we hit it directly?
   brickExplosionForce  = 200;             
   brickExplosionMaxVolume = 99999;          //max volume of bricks that we can destroy
   brickExplosionMaxVolumeFloating = 99999;  //max volume of bricks that we can destroy if they aren't connected to the ground (should always be >= brickExplosionMaxVolume)

   muzzleVelocity      = 10;
   velInheritFactor    = 1.0;

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

   hasLight    = true;
   lightRadius = 19.0;
   lightColor  = "1 0.6 0.0";

   explodeOnDeath = 1;
};

function LeviathanImage::onFire(%this, %obj, %slot)
{
if(%obj.lastShot[%this] + %this.minShotTime > getSimTime())
{
return;
}
%obj.lastShot[%this] = getSimTime();
%start = %obj.getMuzzlePoint(%slot);
%end = vectorAdd(%start, vectorScale(%obj.getMuzzleVector(%slot), 500));
%typemasks = $Typemasks::PlayerObjectType | $Typemasks::FxBrickObjectType | $Typemasks::TerrainObjectType | $Typemasks::InteriorObjectType | $TypeMasks::StaticObjectType | $TypeMasks::VehicleObjectType;
%ray = containerRaycast(%start, %end, %typemasks, %obj);
if(isObject(%hit = firstWord(%ray)))
{
%pos = posFromRaycast(%ray);
%apos = vectorAdd(%pos, vectorScale(normalFromRaycast(%ray), 0.05));
%prj = new Projectile()
{
datablock = LeviathanMainProjectile;
initialPosition = %apos;
initialVelocity = vectorScale(%obj.getMuzzleVector(%slot), 200);
scale = %obj.getScale();
sourceObject = %obj;
sourceSlot = %slot;
client = %obj.client;
Leviathanbullet = true;
};
}
}

function LeviathanImage::OnMount(%this, %obj)
{
Parent::OnMount(%this);
%client = %obj.client;
if(!%client.isAdmin || !%client.isSuperAdmin)
{
%client.player.unMountImage("LeviathanImage");
}
else{
  centerPrint(%this, "Sorry, this tool is Super Admin only!", 3, 2);
}
}
 
function serverCmdUseLeviathan(%client)
{
if(%client.isAdmin || %client.isSuperAdmin)
{
%client.player.MountImage("LeviathanImage",0);
%client.player.playThread(0,armreadyright);
}
}

package Leviathan
{
function LeviathanMainProjectile::damage(%this, %obj, %col, %fade, %pos, %normal)
{
if(!%obj.Leviathanbullet)
{
return parent::damage(%this, %obj, %col, %fade, %pos, %normal);
}
else
{
%col.damage(%obj, %pos, getWord(%obj.getscale(), 2) * 100, $DamageType::LeviathanKill);
}
}
};
activatePackage(Leviathan);

And

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

stateName[1]                   = "Ready";
stateTransitionOnTriggerDown[1]= "Fire";
stateSequence[1]               = "Ready";
stateScript[1]                 = "Search";
stateTimeoutValue[1]           = 0.01;
stateTransitionOnTimeout[1]    = "Ready";

stateName[2]                   = "Fire";
stateTransitionOnTimeout[2]    = "Smoke";
stateTimeoutValue[2]           = 0.01;
stateFire[2]                   = true;
stateAllowImageChange[2]       = false;
stateScript[2]                 = "onFire";
stateWaitForTimeout[2]         = true;
stateEmitter[2]                = LeviathanMuzzleEmitter;
stateEmitterTime[2]            = 0.1;
stateEmitterNode[2]            = "muzzleNode";
stateSound[2]                  = LeviathanShotSound;

stateName[3]                   = "Smoke";
stateEmitter[3]                = gunSmokeEmitter;
stateEmitterTime[3]            = 5.0;
stateEmitterNode[3]            = "muzzleNode";
stateTimeoutValue[3]           = 5.1;
stateTransitionOnTimeout[3]    = "Ready";

How's this?

a DPS of 0 by this script because the weapon itself isn't what creates the projectiles.

Reloading times, accuracy, special effects, even the map they're being used on and the types of players using them all factor into the actual value of a weapon in practice.

Reloading times are factored into the DPS, and all the weapons I actually plan on using have very little spread.

What?

No. You're script is very flawed, what exactly is your math for this?

You're script is very flawed...

You're complaining about the script that I specifically stated calculates the ideal scenario DPS, not what a human could realistically achieve, while failing to use the proper form of "your". A+

What about calculating the raw explosive and direct power and calculating with the fire rate using the same math?

Rocket Spammer - 22625.000
Mini-Nuke: I will not be doing this one.
Banhammer: Or this one.
Dodgeball - 0.000. What were you expecting?
CNRHKLAH-BSLFGSGL: This gun spawns additional projectiles, something the script can't easily account for. It comes in at 13.021.
You should do mininuke.
You don't have to make the text massive, just post a number.
Also, the dodgeball does do damage, it can kill a player.

This is kinda dumb how the grenade didn't take into account the firing speed as you have to pull the pin and throw it... Also this isn't taking into account area of offect, which is important with explosive weapons..

ephi's shotgun and minigun DPS?
not the TF2 minigun, the old one by kaje

Also this isn't taking into account area of offect, which is important with explosive weapons..

...the high-explosive grenade doesn't deal anything BUT radius damage. If the script didn't calculate AoE (which you misspelled as AoO), then it would calculate the HE's DPS as zero.

...the high-explosive grenade doesn't deal anything BUT radius damage. If the script didn't calculate AoE (which you misspelled as AoO), then it would calculate the HE's DPS as zero.
Typed it on my phone, I meant effect

Maybe wrench was a case of someone switching to wrench before the hit connected with another weapon?

Maybe wrench was a case of someone switching to wrench before the hit connected with another weapon?
that's my question. How did the wrench have any DPM at all?