Blockland Forums > Modification Help
On Brick Hit If Projectile
Destiny/Zack0Wack0:
Post your new code. (all of it)
jes00:
--- Quote from: Destiny/Zack0Wack0 on November 28, 2011, 06:53:02 PM ---Post your new code. (all of it)
--- End quote ---
Server.cs
--- Code: ---exec("./Mining.cs");
--- End code ---
Mining.cs
--- Code: ---//=========================================================================
// Skill_Mining Confirm
//=========================================================================
//This confirms to Skill_Core that you have Skill_Mining enabled.
$Skill::Mining = 1;
//=========================================================================
// Executions
//=========================================================================
// Misc
exec("./Tool_Pickaxe.cs");
// Ore
exec("./Ore/Copper.cs");
exec("./Ore/Tin.cs");
exec("./Ore/Iron.cs");
exec("./Ore/Coal.cs");
exec("./Ore/Gold.cs");
//=========================================================================
// Ore functions
//=========================================================================
function SkillPickaxeProjectile::onCollision(%this,%obj,%col,%fade,%pos,%normal)
{
if(%col.getClassName() !$= "fxDtsBrick")
return;
if(%col.getDataBlock().isOre) ///// == 1)
{
if(%col.getDatablock().Health >= 1)
{
%col.getDataBlock().Health -= getRandom(1,5);
commandToClient(%this,'centerPrint',"\c6You swing your pick at the ore.",3);
}
else if(%col.getDatablock().Health < 1)
{
%col.getDatablock().Health = %col.getDataBlock().defaultHealth;
%col.Dissapear(%col.getDatablock().regrowTime);
%this.Resources += %col.getDataBlock().oreAmount;
messageClient(%this,'',"\c3You have mined some \c6" @ %col.getDataBlock().oreName @ "\c3.");
}
}
}
--- End code ---
Copper.cs
--- Code: ---//=========================================================================
// Brick Register
//=========================================================================
datablock fxDTSBrickData(CopperOreData)
{
brickFile = "base/data/bricks/bricks/2x2.blb";
category = "Special";
subCategory = "Interactive";
uiName = "Copper";
iconName = "base/client/ui/brickicons/2x2";
oreName = "Copper";
Health = 50;
isOre = 1;
regrowTime = 10;
oreAmount = 2;
defaultHealth = 50;
};
--- End code ---
There are more ore bricks but they are all similar to copper.cs.
Tool_Pickaxe.cs
--- Code: ---//=========================================================================
// Pickaxe
//=========================================================================
datablock ExplosionData(SkillPickaxeExplosion)
{
lifeTimeMS = 400;
soundProfile = swordHitSound;
particleEmitter = swordExplosionEmitter;
particleDensity = 10;
particleRadius = 0.2;
faceViewer = true;
explosionScale = "1 1 1";
shakeCamera = true;
camShakeFreq = "10.0 11.0 10.0";
camShakeAmp = "0.5 0.5 0.5";
camShakeDuration = 0.25;
camShakeRadius = 5.0;
lightStartRadius = 1.5;
lightEndRadius = 0;
lightStartColor = "00.0 0.2 0.6";
lightEndColor = "0 0 0";
};
datablock ItemData(SkillPickaxeItem : swordItem)
{
shapeFile = "./Skill_Pickaxe.dts";
uiName = "Pickaxe";
doColorShift = true;
colorShiftColor = "0.471 0.471 0.471 1.000";
image = SkillPickaxeImage;
canDrop = true;
iconName = "./Skill_Pickaxe_Icon";
};
AddDamageType("SkillPickaxe", '<bitmap:add-ons/Skill_Mining/Skill_Pickaxe_CI> %1', '%2 <bitmap:add-ons/Skill_Mining/Skill_Pickaxe_CI> %1',0.75,1);
datablock ProjectileData(SkillPickaxeProjectile)
{
directDamage = 1;
directDamageType = $DamageType::SkillPickaxe;
radiusDamageType = $DamageType::SkillPickaxe;
explosion = SkillPickaxeExplosion;
muzzleVelocity = 50;
velInheritFactor = 1;
armingDelay = 0;
lifetime = 100;
fadeDelay = 70;
bounceElasticity = 0;
bounceFriction = 0;
isBallistic = false;
gravityMod = 0.0;
hasLight = false;
lightRadius = 3.0;
lightColor = "0 0 0.5";
uiName = "Skill Pickaxe Hit";
};
datablock ShapeBaseImageData(SkillPickaxeImage)
{
shapeFile = "./Skill_Pickaxe.dts";
emap = true;
mountPoint = 0;
offset = "0 0 0";
correctMuzzleVector = false;
className = "WeaponImage";
item = SkillPickaxeItem;
ammo = " ";
projectile = SkillPickaxeProjectile;
projectileType = Projectile;
melee = true;
doRetraction = false;
armReady = true;
doColorShift = true;
colorShiftColor = "0.471 0.471 0.471 1.000";
stateName[0] = "Activate";
stateTimeoutValue[0] = 0.5;
stateTransitionOnTimeout[0] = "Ready";
stateSound[0] = swordDrawSound;
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;
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 SkillPickaxeImage::onPreFire(%this, %obj, %slot)
{
%obj.playthread(2, armattack);
}
function SkillPickaxeImage::onStopFire(%this, %obj, %slot)
{
%obj.playthread(2, root);
}
--- End code ---
Space Guy:
%col.getDataBlock().Health -= getRandom(1,5);
This and various other statements mean you're checking/subtracting from the Health variable of the shared data of all blocks of that ore, not the specific brick you're hitting. (e.g. hit a copper ore, all copper ore loses 3 health)
%col.Dissapear(%col.getDatablock().regrowTime);
Should be "disappear" - this will just cause a console error and not make the brick actually disappear.
What messages/particle effects do you see in-game when you hit a block?
You're not calling Parent::onCollision somewhere in your modified one (the default projectile collision function) so the pickaxe e.g. won't deal damage or possibly do other neede things.
jes00:
--- Quote from: Space Guy on December 04, 2011, 04:51:42 PM ---%col.getDataBlock().Health -= getRandom(1,5);
This and various other statements mean you're checking/subtracting from the Health variable of the shared data of all blocks of that ore, not the specific brick you're hitting. (e.g. hit a copper ore, all copper ore loses 3 health)
--- End quote ---
How do I fix this?
--- Quote from: Space Guy on December 04, 2011, 04:51:42 PM ---%col.Dissapear(%col.getDatablock().regrowTime);
Should be "disappear" - this will just cause a console error and not make the brick actually disappear.
--- End quote ---
Thanks.
--- Quote from: Space Guy on December 04, 2011, 04:51:42 PM ---%col.getDataBlock().Health -= getRandom(1,5);
What messages/particle effects do you see in-game when you hit a block?
--- End quote ---
One that looks like the sword's.
--- Quote from: Space Guy on December 04, 2011, 04:51:42 PM ---You're not calling Parent::onCollision somewhere in your modified one (the default projectile collision function) so the pickaxe e.g. won't deal damage or possibly do other neede things.
--- End quote ---
Do I need to call the parent?
Superb:
--- Quote from: jes00 on December 05, 2011, 06:03:22 AM ---How do I fix this?
--- End quote ---
Use %col.health -= getRandom(1,5);
Also
--- Code: ---function SkillPickaxeProjectile::onCollision(%this,%obj,%col,%fade,%pos,%normal)
{
//*Need to call the parent*
parent::onCollision(%this,%obj,%col,%fade,%pos,%normal);
if(%col.getClassName() !$= "fxDtsBrick")
{
return;
}
if(%col.getDataBlock().isOre) ///// == 1)
{
if(%col.getDatablock().Health >= 1)
{
//**********
//%col.getDataBlock().Health -= getRandom(1,5);
%col.health -= getRandom(1,5);
//**********
commandToClient(%this,'centerPrint',"\c6You swing your pick at the ore.",3);
}
else if(%col.getDatablock().Health < 1)
{
//********
//%col.getDatablock().Health = %col.getDataBlock().defaultHealth;
%col.Health = %col.getDataBlock().defaultHealth;
//********
%col.Dissapear(%col.getDatablock().regrowTime);
%this.Resources += %col.getDataBlock().oreAmount;
messageClient(%this,'',"\c3You have mined some \c6" @ %col.getDataBlock().oreName @ "\c3.");
}
}
}
--- End code ---
Notice how the parent is called, also notice the code i fixed in the asterisks.