PDA

View Full Version : Bow design decision.


maximus_asinus
08-21-2017, 04:57 AM
This time I'm not looking for script help, just a question in regards to design. On G2K1 they use a custom bow NPC. Anyways to check and see if the arrows hits an NPC you have to check if the arrow passes by the NPC's coordinates. To me that seems like an odd design choice. Why not invoke a trigger when the projectile is onwall (I assuming NPCs with setshape return blocking when I say this). Or why make the bow so complicated at all? Isn't there shoot() and onActionProjectile()?

MysticalDragon
08-26-2017, 07:30 PM
That's more then likely because when the custom bow on Gk1 was made the shoot function was pretty horrible, it was always better to make your own. Now or when it was improved it feels more responsive although its still very limited to what you should be able to do with projectiles. But for a simple bow shoot would probably be better anyways since its native to the client.


onActionSProjectile <- if a projectile hits on serverside
onActionProjectile <- if a projectile hits on clientside Used the same as above
onPlayerShoots(obj, obj) ; <-If the player shot a projectile

example:
function onActionSProjectile(temp.pl, temp.dmg) {
temp.source = isObject(temp.pl) ? makevar(temp.pl) : findplayer(temp.pl);//Player or Npc
doDamage(temp.source, temp.dmg); <-Call your Damage function
}

shoot(float, float, float, float, float, float, str, str) - shoots a projectile with x,y,z,angle,zangle,strength,ani,aniparams)

//Projectile Attributes
setshootparams(params);

example:
//This is to adjust the projectile to shoot at the right location
temp.arrowani = "idle";
temp.arrowpos = {
"0.25,0.5", //Dir 0
1.0, //Dir 1
"-0.5,-1" //Dir 2
,"-1.5,0" //Dir 3
};
//setshootparams are like attributes saved within the projectile
setshootparams(
player,
temp.damage
);
shoot(
player.x - temp.arrowpos[player.dir][0],player.y - temp.arrowpos[player.dir][1], player.z,
getangle(vecx(player.dir), vecy(player.dir)), pi / 32, 1,
temp.arrowani, NULL
);
//x position of projectile = player.x - temp.arrowpos[player.dir][0]
//y position of projectile = player.y - temp.arrowpos[player.dir][1]
//player.z = current z Position of projectile
//temp.arrowani = the arrow gani that's being fired
//NULL = Gani Params (If your gani has any special attributes) e.g changing the arrow image depending on what bow your using.
//pi*/*32 = Strength of projectile
//1 = speed of Projectile

maximus_asinus
05-17-2019, 03:06 AM
while searching this forum for something else I noticed I didn't say thank you for this.

Thanks.