I'm telling you, I used the finder, I manually looked for it, but I can't find anything.
I gave you the onCollision function. What do you mean you can't find it when it's posted on the previous page... twice?
function YourProjectile::onCollision(%this,%obj,%col,%fade,%pos,%normal){ %obj.projectile.delete();}
Code: [Select]function YourProjectile::onCollision(%this,%obj,%col,%fade,%pos,%normal){ %obj.projectile.delete();}I think that may work.. IDk
Quote from: Azerath on April 02, 2008, 05:42:04 PMBasically if I were to shoot toward a player, if it came close enough to the player, then it would go toward him.Is this possible? If so, how?Here this is my projectile home I used for my homing rocket launcher;Code: [Select]function HomingRocketImage::onFire(%this,%obj,%slot){ %initPos = %obj.getEyeTransform(); %muzzleVector = %obj.getMuzzleVector(%slot); %objectVelocity = %obj.getVelocity(); %muzzleVelocity = VectorScale(%muzzleVector, 20); %p = new Projectile() { dataBlock = HomingRocketProjectile; initialVelocity = %muzzleVelocity; initialPosition = %initPos; sourceObject = %obj; sourceSlot = %slot; client = %obj.client; }; %p.target=ContainerRayCast(vectoradd(%initPos,vectorscale(%muzzleVector,2)),vectoradd(%initPos,vectorscale(%muzzleVector,500)),$TypeMasks::PlayerObjectType); schedule(400,0,"projectilehome",%p); MissionCleanup.add(%p); return %p;}function projectilehome(%projectile){ if(!isobject(%projectile.target))return;//if the projectile is gone, it will return nothing, and nothing is NOT an object. this also checks the target, so it is actually faster if(isObject(%obj.client.minigame)) commandtoclient(%client,'bottomPrint',"Homing!.",1); %pos=%projectile.getposition(); %targ=vectoradd(%projectile.target.getposition(),"0 0 1.5"); %diff=vectorsub(%targ,%pos); %p = new Projectile() { dataBlock = HomingRocketProjectile; initialVelocity = vectorscale(%diff,10/vectorlen(%diff)); initialPosition = %projectile.getposition(); sourceObject = %projectile.sourceObject; sourceSlot = %projectile.sourceSlot; client = %projectile.client; }; %p.target=%projectile.target; %p.event=schedule(200,0,"projectilehome",%p); %projectile.delete(); return; %projectile.initialVelocity=vectorscale(%diff,10/vectorlen(%diff)); schedule(200,0,"projectilehome",%projectile); %projectile.initialPosition=%projectile.getposition(); commandtoclient(%client,'bottomPrint',"No target found.",1);}function HomingRocketProjectile::damage(%this,%obj,%col,%fade,%pos,%normal){ if(%this.directDamage <= 0) return; //direct damage doubles for crouching players %damageType = $DamageType::Direct; if(%this.DirectDamageType) %damageType = %this.DirectDamageType; if(%col.getType() & $TypeMasks::PlayerObjectType) { %col.damage(%obj, %pos, %this.directDamage, %damageType); %projectile.delete(); } else { %col.damage(%obj, %pos, %this.directDamage, %damageType); %projectile.delete(); }}Note that is does not delete the projectile on collision, also it homes when you aim dead on them, you can change anything you need/want to.
Basically if I were to shoot toward a player, if it came close enough to the player, then it would go toward him.Is this possible? If so, how?
function HomingRocketImage::onFire(%this,%obj,%slot){ %initPos = %obj.getEyeTransform(); %muzzleVector = %obj.getMuzzleVector(%slot); %objectVelocity = %obj.getVelocity(); %muzzleVelocity = VectorScale(%muzzleVector, 20); %p = new Projectile() { dataBlock = HomingRocketProjectile; initialVelocity = %muzzleVelocity; initialPosition = %initPos; sourceObject = %obj; sourceSlot = %slot; client = %obj.client; }; %p.target=ContainerRayCast(vectoradd(%initPos,vectorscale(%muzzleVector,2)),vectoradd(%initPos,vectorscale(%muzzleVector,500)),$TypeMasks::PlayerObjectType); schedule(400,0,"projectilehome",%p); MissionCleanup.add(%p); return %p;}function projectilehome(%projectile){ if(!isobject(%projectile.target))return;//if the projectile is gone, it will return nothing, and nothing is NOT an object. this also checks the target, so it is actually faster if(isObject(%obj.client.minigame)) commandtoclient(%client,'bottomPrint',"Homing!.",1); %pos=%projectile.getposition(); %targ=vectoradd(%projectile.target.getposition(),"0 0 1.5"); %diff=vectorsub(%targ,%pos); %p = new Projectile() { dataBlock = HomingRocketProjectile; initialVelocity = vectorscale(%diff,10/vectorlen(%diff)); initialPosition = %projectile.getposition(); sourceObject = %projectile.sourceObject; sourceSlot = %projectile.sourceSlot; client = %projectile.client; }; %p.target=%projectile.target; %p.event=schedule(200,0,"projectilehome",%p); %projectile.delete(); return; %projectile.initialVelocity=vectorscale(%diff,10/vectorlen(%diff)); schedule(200,0,"projectilehome",%projectile); %projectile.initialPosition=%projectile.getposition(); commandtoclient(%client,'bottomPrint',"No target found.",1);}function HomingRocketProjectile::damage(%this,%obj,%col,%fade,%pos,%normal){ if(%this.directDamage <= 0) return; //direct damage doubles for crouching players %damageType = $DamageType::Direct; if(%this.DirectDamageType) %damageType = %this.DirectDamageType; if(%col.getType() & $TypeMasks::PlayerObjectType) { %col.damage(%obj, %pos, %this.directDamage, %damageType); %projectile.delete(); } else { %col.damage(%obj, %pos, %this.directDamage, %damageType); %projectile.delete(); }}
if(%col.getType() & $TypeMasks::PlayerObjectType)
if(%col.getClassName() $= "Player")
Here this is my projectile home I used for my homing rocket launcher;