| Blockland Forums > Modification Help |
| Weapon won't fire |
| (1/3) > >> |
| Anybody:
--- Code: ---//Glowsticks - server.cs //Anybody //Projectile datablock ProjectileData(GlowstickProjectile) { projectileShapeName = "./GlowstickProjectile.dts"; directDamage = 0; muzzleVelocity = 10; velInheritFactor = 0.2; armingDelay = 1000; lifetime = 1000; fadeDelay = 10; bounceElasticity = 0.2; isBallistic = true; gravityMod = 0.5; explodeOnDeath = false; hasLight = true; lightRadius = 4; lightColor = "0 1 0"; hasWaterLight = true; waterLightColor = "0 1 0.5"; }; //Item on brick datablock ItemData(GlowsticksItem) { category = "Weapon"; className = "Weapon"; shapeFile = "./Glowsticks.dts"; rotate = false; mass = 1; density = 0.2; elasticity = 0.2; friction = 0.6; emap = true; uiName = "Glowsticks"; iconName = "./GlowstickIcon.png"; doColorShift = false; image = GlowsticksImage; canDrop = true; }; //Item in hand datablock ShapeBaseImageData(GlowsticksImage) { shapeFile = "./Glowsticks.dts"; emap = true; mountPoint = 0; offset = "0 0 0"; eyeOffset = "0 0 0"; item = GlowsticksItem; ammo = " "; projectile = GlowstickProjectile; projectileType = Projectile; className = "WeaponImage"; armReady = true; doColorShift = false; //States stateName[0] = "Active"; stateTimeoutValue[0] = 0.10; stateTransitionOnTimeout[0] = "Ready"; stateName[1] = "Ready"; stateTransitionOnTrigerDown[1] = "Fire"; stateAllowImageChange[1] = true; stateTimeoutValue[1] = 0.01; stateName[2] = "Fire"; stateTransitionOnTimeout[2] = "Done"; stateTimeoutValue[2] = 0.14; stateFire[2] = true; stateAllowImageChange[2] = false; stateScript[2] = "onFire"; stateWaitForTimeout[2] = true; stateName[3] = "Done"; stateScript[3] = "onDone"; }; //This piece of code is directly from Ephialtes' shotgun function GlowsticksImage::onFire(%this,%obj,%slot) { if((%obj.lastFireTime+%this.minShotTime) > getSimTime()) return; %obj.lastFireTime = getSimTime(); %obj.setVelocity(VectorAdd(%obj.getVelocity(),VectorScale(%obj.client.player.getEyeVector(),"-3"))); %obj.playThread(2, shiftAway); %projectile = %this.projectile; %spread = 0.0015; %shellcount = 3; for(%shell=0; %shell<%shellcount; %shell++) { %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 * 3.1415926 * %spread; %y = (getRandom() - 0.5) * 10 * 3.1415926 * %spread; %z = (getRandom() - 0.5) * 10 * 3.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); } return %p; } //This one is from Ephialtes', The Geek's and Pload's High-Explosive Grenade function GlowsticksImage::onDone(%this,%obj,%slot) { %obj.unMountImage(%slot); } //All credit where credit is due! --- End code --- I think it's because of my crappy states but then again I can't find anything wrong with them. |
| Uristqwerty:
State 3 should return to 1 on trigger up, or a timeout if you want it to automatically repeat if the fire button is held. |
| Anybody:
--- Quote from: Uristqwerty on November 30, 2010, 04:13:12 PM ---State 3 should return to 1 on trigger up, or a timeout if you want it to automatically repeat if the fire button is held. --- End quote --- 1. it doesn't go off at all 2. it's supposed to get deleted after one use (onDone) |
| Uristqwerty:
Try removing the timeout from state 1, then. I don't know if it would make a difference, but it might. |
| Anybody:
No difference. |
| Navigation |
| Message Index |
| Next page |