View Single Post
  #14  
Old 10-11-2007, 04:14 AM
Angel_Light Angel_Light is offline
Varia Developer
Angel_Light's Avatar
Join Date: Nov 2005
Location: Knoxville, TN
Posts: 1,684
Angel_Light is on a distinguished road
Send a message via AIM to Angel_Light Send a message via MSN to Angel_Light
PHP Code:
shootxyzanglezanglepowerganisgani params...); 
x,y and z - specify the starting position

angle - shoot angle (when looking from the top): east is 0,
north 3.14/2, west is 3.14, south 3.14*3/2)

zangle - the angle in vertical direction, 0 means the
projectile is shoot horizontal, 3.14/2 means straight to the
sun

power - the shoot power which is used to shoot the projectile;
if it's 0 then the projectile is shoot like an old arrow
(doesn't fall down, moves 20 tiles each second)

gani - the animation that is used for the projectile; the
animation can be multidirectional, the engine automatically
selects the best direction for the flying direction; the
animation can have 1 step (not animated) or 7 steps, then the
engine is automatically choosing the good animation step for
the projectile flying angle - when its raising then step 1 is
taken, when flying horizontal it is step 4, when it is short before
the impact then the engine displays step 7

When the projectile is landing or hitting an object then some actions
are triggered. With the command 'setshootparams <params>;' you can set
the parameters that the called scripts get, call 'setshootparams' before
shooting the projectile.

Client-side events:

* actionprojectile2:
is triggered when a projectile lands on the player/npc,
in params[0], params[1] etc. you have the parameters set with the
command setshootparams()

Server-side events:
* actionprojectile:
is triggered when a client has used the 'shoot' command to shoot a
projectile and the projectile is landed; in params[0] and params[1] you have
the x and y position of the impact in case you want to place an explosion
or similar things on the ground (the control-npc is automatically warped
to the level where the impact happened); params[2], params[3] etc. contain the
params set with 'setshootparams()' (before shooting the projectile)

* actionsprojectile:
is triggered when a server-side script has shot a projectile and the projectile
is landed; in params[0] and params[1] you have the x and y position of the impact
(the control-npc is automatically warped to the level where the impact
happened); params[2], params[3] etc. contain the params set with 'setshootparams()'
(before shooting the projectile)

Projectiles are easy to use and don't take a lot of bandwidth because only
the shooting of the projectile needs to be sent, the movement is calculated on
the different computers. The projectile is flying like a heavy object thrown
through the air: the horizontal movement speed keeps the same (moves
horzspeed=cos(zangle)*speed tiles all 0.05 seconds), the vertical speed is
initialized as vertspeed=sin(zangle)*speed and is decreased by 0.1 all 0.05 seconds;
then the new position (calculated all 0.05 seconds) is
newx = x + cos(angle)*horzspeed, newy = y - sin(angle)*horzspeed,
newz = z + vertspeed

Example :

PHP Code:
function onKeyPressedcodechar
{

  if ( 
char == "d") {
    
setShootParamsthis.xthis.y);
 
    
this.pangle getanglevecxplayer.dir), vecyplayer.y));
    
shootplayer.xplayer.yplayer.zthis.pangle00"idle"NULL);
  }
}

function 
onActionProjectile2lxly
{

  
putExplosion1lxly);

__________________
Deep into the Darkness peering...

Last edited by Angel_Light; 10-11-2007 at 04:27 AM..
Reply With Quote