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.
PHP Code:
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