Blockland Forums > Modification Help
My projectile keeps turning black.
Lørd Tøny:
The sword spawn is grey, when I hold it the sword is grey but when I throw the sword the projectile is black. I have no idea how to fix it, yes I am editing off Tezuni's black knife script but it feels like it's missing something.
--- Code: ---//BlackKnifeKnife.cs
datablock AudioProfile(BlackKnifeBrickSound)
{
filename = "./KnifeBrick.wav";
description = AudioClosest3d;
preload = true;
};
datablock AudioProfile(BlackKnifePlayerSound)
{
filename = "./KnifePlayer.wav";
description = AudioClosest3d;
preload = true;
};
datablock AudioProfile(BlackKnifeSwingSound)
{
filename = "./KnifeSwing.wav";
description = AudioClosest3d;
preload = true;
};
datablock ParticleData(BlackKnifeExplosionParticle)
{
dragCoefficient = 2;
gravityCoefficient = 1.0;
inheritedVelFactor = 0.2;
constantAcceleration = 0.0;
spinRandomMin = -90;
spinRandomMax = 90;
lifetimeMS = 500;
lifetimeVarianceMS = 300;
textureName = "base/data/shapes/blank";
colors[0] = "0.7 0.7 0.9 0.9";
colors[1] = "0.9 0.9 0.9 0.0";
sizes[0] = 0.5;
sizes[1] = 0.25;
};
datablock ParticleEmitterData(BlackKnifeExplosionEmitter)
{
ejectionPeriodMS = 7;
periodVarianceMS = 0;
ejectionVelocity = 8;
velocityVariance = 1.0;
ejectionOffset = 0.0;
thetaMin = 0;
thetaMax = 60;
phiReferenceVel = 0;
phiVariance = 360;
overrideAdvance = false;
particles = "BlackKnifeExplosionParticle";
uiName = "BlackKnife Hit";
};
datablock ExplosionData(BlackKnifeExplosion)
{
//explosionShape = "";
lifeTimeMS = 500;
soundProfile = BlackKnifeBrickSound;
particleEmitter = BlackKnifeExplosionEmitter;
particleDensity = 10;
particleRadius = 0.2;
faceViewer = true;
explosionScale = "1 1 1";
shakeCamera = true;
camShakeFreq = "20.0 22.0 20.0";
camShakeAmp = "1.0 1.0 1.0";
camShakeDuration = 0.5;
camShakeRadius = 10.0;
// Dynamic light
lightStartRadius = 3;
lightEndRadius = 0;
lightStartColor = "00.0 0.0 0.0";
lightEndColor = "0 0 0";
};
//Stab Projectile
AddDamageType("BlackKnife", '<bitmap:add-ons/Weapon_Black_Knife/CI_BlackKnife> %1', '%2 <bitmap:add-ons/Weapon_Black_Knife/CI_BlackKnife> %1',0.75,1);
datablock ProjectileData(BlackKnifeStabProjectile)
{
shapeFile = "base/data/shapes/empty.dts";
directDamage = 30;
directDamageType = $DamageType::BlackKnife;
radiusDamageType = $DamageType::BlackKnife;
brickExplosionRadius = 0;
brickExplosionImpact = true;
brickExplosionForce = 0;
brickExplosionMaxVolume = 1;
brickExplosionMaxVolumeFloating = 2;
explosion = BlackKnifeExplosion;
muzzleVelocity = 50;
velInheritFactor = 1;
armingDelay = 0;
lifetime = 100;
fadeDelay = 70;
bounceElasticity = 0;
bounceFriction = 0;
isBallistic = true;
gravityMod = 0.50;
hasLight = false;
lightRadius = 3.0;
lightColor = "0 0 0.5";
uiName = "Black Knife Stab";
};
//Thrown projectile
datablock ProjectileData(BlackKnifeThrowProjectile)
{
projectileShapeName = "./BlackKnifeProjectile.dts";
directDamage = 100;
directDamageType = $DamageType::BlackKnife;
radiusDamageType = $DamageType::BlackKnife;
particleEmitter = spearTrailEmitter;
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;
doColorShift = true;
colorShiftColor = "0.471 0.471 0.471 1.000";
hasLight = false;
lightRadius = 3.0;
lightColor = "0 0 0.5";
muzzleVelocity = 65;
velInheritFactor = 1;
lightColor = "0 0 0.5";
uiName = "Black Knife Throw";
};
datablock ParticleEmitterData(spearTrailEmitter)
{
ejectionPeriodMS = 5;
periodVarianceMS = 0;
ejectionVelocity = 0; //0.25;
velocityVariance = 0; //0.10;
ejectionOffset = 0;
thetaMin = 0.0;
thetaMax = 90.0;
particles = spearTrailParticle;
useEmitterColors = true;
uiName = "Spear Trail";
};
//////////
// item //
//////////
datablock ItemData(BlackKnifeItem)
{
category = "Weapon"; // Mission editor category
className = "Weapon"; // For inventory system
// Basic Item Properties
shapeFile = "./BlackKnife.dts";
mass = 1;
density = 0.2;
elasticity = 0.2;
friction = 0.6;
emap = true;
//gui stuff
uiName = "Black Knife";
iconName = "./icon_BlackKnife";
doColorShift = true;
colorShiftColor = "0.471 0.471 0.471 1.000";
// Dynamic properties defined by the scripts
image = BlackKnifeImage;
canDrop = true;
};
////////////////
//weapon image//
////////////////
datablock ShapeBaseImageData(BlackKnifeImage)
{
// Basic Item properties
shapeFile = "./BlackKnife.dts";
emap = true;
// Specify mount point & offset for 3rd person, and eye offset
// for first person rendering.
mountPoint = 0;
offset = "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 = false;
eyeOffset = "0 0 0";
// Add the WeaponImage namespace as a parent, WeaponImage namespace
// provides some hooks into the inventory system.
className = "WeaponImage";
// Projectile && Ammo.
item = BlackKnifeItem;
ammo = " ";
projectile = BlackKnifeStabProjectile;
projectileType = Projectile;
//melee particles shoot from eye node for consistancy
melee = true;
doRetraction = false;
//raise your arm up or not
armReady = true;
//casing = " ";
doColorShift = true;
colorShiftColor = "0.471 0.471 0.471 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.5;
stateTransitionOnTimeout[0] = "Ready";
stateSound[0] = false;
stateName[1] = "Ready";
stateTransitionOnTriggerDown[1] = "PreFire";
stateAllowImageChange[1] = true;
stateName[2] = "PreFire";
stateScript[2] = "onPreFire";
stateAllowImageChange[2] = false;
stateTimeoutValue[2] = 0.1;
stateTransitionOnTimeout[2] = "Fire";
stateName[3] = "Fire";
stateTransitionOnTimeout[3] = "CheckFire";
stateTimeoutValue[3] = 0.2;
stateFire[3] = true;
stateAllowImageChange[3] = false;
stateSequence[3] = "Fire";
stateScript[3] = "onFire";
stateWaitForTimeout[3] = true;
stateSound[3] = BlackKnifeSwingSound;
stateName[4] = "CheckFire";
stateTransitionOnTriggerUp[4] = "StopFire";
stateTransitionOnTriggerDown[4] = "Fire";
stateName[5] = "StopFire";
stateTransitionOnTimeout[5] = "Ready";
stateTimeoutValue[5] = 0.2;
stateAllowImageChange[5] = false;
stateWaitForTimeout[5] = true;
stateSequence[5] = "StopFire";
stateScript[5] = "onStopFire";
};
function BlackKnifeImage::onPreFire(%this, %obj, %slot)
{
%obj.playthread(2, armattack);
}
function BlackKnifeImage::onStopFire(%this, %obj, %slot)
{
%obj.playthread(2, root);
}
$BlackKnifeStabLimit = 2;
if(isFile("Add-Ons/System_ReturnToBlockland/server.cs"))
{
if(!$RTB::RTBR_ServerControl_Hook)
exec("Add-Ons/System_ReturnToBlockland/RTBR_ServerControl_Hook.cs");
RTB_registerPref("Stab Limit", "Black Knife", "$BlackKnifeStabLimit","list Once 1 Unlimited 2","Weapon_Black_Knife", 0, 0, 1);
}
package BlackKnifePackage
{
function BlackKnifeStabProjectile::onCollision(%this, %obj, %col, %fade, %pos, %normal, %client)
{
%currSlot = %obj.currTool;
%client = %obj.sourceObject.client;
if(isObject(%col.client.minigame))
{
if(%obj.client.minigame $= %col.client.minigame)
{
if(%col.getClassName() $= "Player")
{
if($BlackKnifeStabLimit==1)
{
%obj.sourceObject.tool[%currSlot] = 0;
%obj.sourceObject.weaponCount--;
messageClient(%obj.client,'MsgItemPickup',"",%currSlot,0);
serverCmdUnUseTool(%obj.client);
}
serverPlay3D(BlackKnifePlayerSound, %pos);
return Parent::onCollision(%this, %obj, %col, %fade, %pos, %normal, %client);
}
}
}
if((%col.getType() && $TypeMasks::FxBrickObjectType))
{
serverPlay3D(BlackKnifeBrickSound, %pos);
return Parent::onCollision(%this, %obj, %col, %fade, %pos, %normal, %client);
}
else
{
return Parent::onCollision(%this, %obj, %col, %fade, %pos, %normal, %client);
}
}
function BlackKnifeThrowProjectile::onCollision(%this, %obj, %col, %fade, %pos, %normal, %client)
{
if((%col.getType() & $TypeMasks::PlayerObjectType) && isObject(%col.client))
{
serverPlay3D(BlackKnifePlayerSound, %pos);
return Parent::onCollision(%this, %obj, %col, %fade, %pos, %normal, %client);
}
if((%col.getType() && $TypeMasks::FxBrickObjectType))
{
serverPlay3D(BlackKnifeBrickSound, %pos);
return Parent::onCollision(%this, %obj, %col, %fade, %pos, %normal, %client);
}
else
{
return Parent::onCollision(%this, %obj, %col, %fade, %pos, %normal, %client);
}
}
function Armor::onTrigger(%this, %player, %slot, %val)
{
if(%player.getMountedImage(0) $= BlackKnifeImage.getID() && %slot $= 4 && %val)
{
%currSlot = %player.currTool;
%player.tool[%currSlot] = 0;
%player.weaponCount--;
messageClient(%player.client,'MsgItemPickup','',%currSlot,0);
serverCmdUnUseTool(%player.client);
%projectile = BlackKnifeThrowProjectile;
%vector = %player.getMuzzleVector(0);
%objectVelocity = %player.getVelocity();
%vector1 = VectorScale(%vector, %projectile.muzzleVelocity);
%vector2 = VectorScale(%objectVelocity, %projectile.velInheritFactor);
%velocity = VectorAdd(%vector1,%vector2);
%p = new Projectile()
{
dataBlock = %projectile;
initialVelocity = %velocity;
initialPosition = %player.getMuzzlePoint(0);
sourceObject = %player;
sourceSlot = 0;
client = %player.client;
};
serverPlay3D(BlackKnifeSwingSound,%player.getPosition());
%player.playthread("3","Activate");
MissionCleanup.add(%p);
return %p;
}
Parent::onTrigger(%this, %player, %slot, %val);
}
};
activatePackage(BlackKnifePackage);
--- End code ---
Amade:
The sword model uses textures that are designed to work with colorshifting, which only applies to images and items and a few other things. Using the sword model as a projectile will cause weird things to happen, just as with almost any other default model.
Lørd Tøny:
--- Quote from: Amade on October 10, 2011, 11:40:04 PM ---Using the sword model as a projectile will cause weird things to happen, just as with almost any other default model.
--- End quote ---
But I'm not using a sword model as a projectile, I'm using a special projectile model for it.
If you noticed that isn't the default sword.
Lørd Tøny:
Well I changed the model from knife to spear and the spear is black so I know it's the script now.
RedGajin:
Is the script color shifting the item.
Also, sticking items suck because they float in the air if the brick or person moves.