Quote:
Originally Posted by iBeatz
Ah, thanks for that death alternative.
I'm not great with projectiles, so I'll need a few pointers as to how to recreate the path taken by a thrown bush.
|
This is what I used, it's not exact but it was close enough for me:
shoot(player.x,player.y,2,dir*(pi/2)+(pi/2),.25,1.1,"ce_thrownobj",player.attr[3]);
Also read up on:
PHP Code:
- new script command 'shoot' for shooting projectiles:
shoot x,y,z,angle,zangle,power,gani,ganiparams;
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:
- actionprojectile:
is triggered when a projectile lands on the player/npc,
in #p(0), #p(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 #p(0) and #p(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); #p(2),#p(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 #p(0) and #p(1) you have the x and y position of the impact
(the control-npc is automatically warped to the level where the impact
happened); #p(2),#p(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