Graal Forums

Graal Forums (https://forums.graalonline.com/forums/index.php)
-   NPC Scripting (https://forums.graalonline.com/forums/forumdisplay.php?f=8)
-   -   Something as simple as a Bomb (https://forums.graalonline.com/forums/showthread.php?t=134261755)

MrOmega 01-19-2011 04:28 AM

Something as simple as a Bomb
 
Well, getting down to the nitty gritty now and I'm trying to completely recreate the bomb. I have run into a few snags and need some input/guidance. So all clientside I can get this to work flawlessly for the current player. But it looks horrible and choppy for other players and other players cant pick up the bomb after the current player has dropped it. So, I've tried interpolation with it and that has fixed the choppiness of it mostly. (except in cases of extreme lag) My issue is the whole throwing and landing part. I can through it serverside and it looks choppy but how could I go about making it smooth for all at the same time. The bomb is basically an NPC using a gani. Should I change this method or what?

Knux 01-19-2011 04:30 AM

I don't think the bomb NPC is just using a gani sir :O

MrOmega 01-19-2011 04:33 AM

Quote:

Originally Posted by Knux (Post 1623982)
I don't think the bomb NPC is just using a gani sir :O

Well theres code behind it. I mean for displaying it, it uses a gani. Gani lasts for five seconds and then thats when I do my custom explosion as well.

Knux 01-19-2011 04:39 AM

Yes but it's setting a gani like pickup or whatever the gani is. The actual bomb itself is placed with placeexplosion, or whatever isn't it? I dunno I haven't scripted since GS1 and don't remember any of it

MrOmega 01-19-2011 04:44 AM

I'm not using putbomb or any of that, I'm doing it from scratch.

Lance 01-19-2011 04:45 AM

Use a projectile (shoot command) to throw it. Have the projectile handling code place a bomb NPC of your design (with putnpc2) at the destination.

Knux 01-19-2011 04:57 AM

Quote:

Originally Posted by MrOmega (Post 1623990)
I'm not using putbomb or any of that, I'm doing it from scratch.

I understand that. But isn't bomb like predefined or whatever?

MrOmega 01-19-2011 06:05 AM

Quote:

Originally Posted by Knux (Post 1623993)
I understand that. But isn't bomb like predefined or whatever?

Yes but I don't want the predefined one. I'm going for better functionality and customization.

@Lance - how would I read what step that gani is at and how would I make it continue from that step in the shoot, as well as if the bomb needs to explode while in mid air?

MrAnonymous_P2P 01-19-2011 06:45 AM

I believe if you put the lime in the coconut, then mix it all up?


That might work.

Lance 01-19-2011 07:12 AM

Quote:

Originally Posted by MrOmega (Post 1624005)
@Lance - how would I read what step that gani is at

npc.anistep, if I recall correctly.

Quote:

and how would I make it continue from that step in the shoot,
By passing the step as a shoot parameter (see setshootparams).

Quote:

as well as if the bomb needs to explode while in mid air?
You'd have to see what options are available for accessing projectiles-in-motion. I've never dabbled with that personally so I'm not sure what the limitations are or just how inelegant it might be.

cbk1994 01-19-2011 08:02 AM

Quote:

Originally Posted by Lance (Post 1624016)
You'd have to see what options are available for accessing projectiles-in-motion. I've never dabbled with that personally so I'm not sure what the limitations are or just how inelegant it might be.

There aren't really any. If it needs to be able to explode mid-air, I would think your best bet is to use move (or script your own version that handles the NPC's Z) so it appears smooth on clientside. You could still blow it up mid-air if you destroy the NPC and then place the explosion (using another putnpc2, a showani, or however you do it).

DustyPorViva 01-19-2011 08:07 AM

You could POSSIBLY hack a method. Give the bomb projectile a power and zangle based how the time left when thrown. Make a bomb with a short fuse land faster than a bomb with a longer fuse. Then do the Z method yourself(since you'd be giving the bomb a projection based on fuse, and not the actual throw).

Switch 01-19-2011 11:02 AM

Quote:

Originally Posted by cbk1994 (Post 1624017)
There aren't really any.

Which is why I made this and never used it.

http://forums.graalonline.com/forums...hp?t=134259144

Knux 01-19-2011 01:12 PM

Quote:

Originally Posted by MrOmega (Post 1624005)
Yes but I don't want the predefined one. I'm going for better functionality and customization.

@Lance - how would I read what step that gani is at and how would I make it continue from that step in the shoot, as well as if the bomb needs to explode while in mid air?

Are you going to make a bomb for scratch, or get a walk-thru on here? :megaeek:

MrOmega 01-19-2011 03:37 PM

Quote:

Originally Posted by Knux (Post 1624054)
Are you going to make a bomb for scratch, or get a walk-thru on here? :megaeek:

I'm getting help and knowledge of the best practical way to do this. There's nothing wrong with that.

Update : So how do I go about reading the current anistep of a shoot gani? I could catch this gani step while the shoot is in mid air and put the explosion that way, but how would I as well stop a shoot gani while in mid-air? Also how would I make a gani play entirely from a certain anistep?

MrOmega 01-19-2011 05:41 PM

Ok so I got it working on the basics, now I want to make it look better. Smoother rather. Any thoughts of how to achieve this?

Here's what I got.

In my Weapon I have this

PHP Code:

public function Equip()
{

  return;

}

public function 
unEquip()
{

  return;

}

//#CLIENTSIDE

function onCreated()
{

  
this.description "<b><u>Small Bombs</u></b>\nDecent pack of power for a small bomb. Good for blasting enemies or holes in walls.";

}

function 
GraalControl.onKeyDown()
{

  if ( 
clientr.currentCharacter.weapon0] == name && params0] == 68 && client.carry == NULL)
  {
    
    
client.freeze true;
    
player.attr2] = "legends_sbombs-i.png";
    
setani"legends_lay"NULL);
    
sleep0.3);
    
player.attr2] = "";
    
temp.frontX player.dir == 1? ( player.1.5): player.dir == 3? ( player.2.5): ( player.0.5);
    
temp.frontY player.dir == 0? ( player.1.25): player.dir == 2? ( player.2.5): ( player.1.25);
    
triggerServer"gui""-system.core""dropObj"temp.frontXtemp.frontY"small_bombs"1true"Small Bombs");   
    
sleep0.1);
    
client.freeze false;

  }


in -system.core it puts an npc at the specified locations joined to what I have.

In class I have this.

PHP Code:

function onCreated()
{

  
setshape13232);
  
setCharAni"legends_smallBomb"NULL);
  
scheduleEvent5"onDestroy");

}

function 
onDestroy()
{

  if ( 
this.attr2] != "")
    
findPlayerthis.attr2]).client.carry NULL;

  
with putNPC2this.1.5this.1.5""))
    { 
this.join"explosion");}
    
  
this.destroy();

}

function 
onActionPulled()
{

  
temp.pl findPlayerparams0]);
  
temp.pl.client.carry "sObj";
  
temp.pl.client.freeze true;
  
temp.pl.setani"legends_lift"NULL);
  
sleep0.35);
  
temp.pl.client.freeze false;
  
this.attr1] = "carried";
  
this.attr2] = temp.pl.account;
  
setTimer0.3);
  
}

function 
onTimeout()
{

  if ( 
this.attr1] == "carried")
  {
  
    
temp.pl findPlayerthis.attr2]);
    
    
this.temp.pl.0.5;
    
this.temp.pl.1;
  
  }
  
  if ( 
this.landed)
  {
  
    
this.this.nx;
    
this.this.ny;
    
show();
    
this.landed false;
  
  }
  
  
setTimer0.1);

}

function 
onActionPlaced()
{

  
setTimer0);
  
temp.pl findPlayerparams0]);
  
temp.nx temp.pl.dir == 1? ( temp.pl.1.5): temp.pl.dir == 3? ( temp.pl.2.5): ( temp.pl.0.5);
  
temp.ny temp.pl.dir == 0? ( temp.pl.1.25): temp.pl.dir == 2? ( temp.pl.2.5): ( temp.pl.1.25);  
  
temp.pl.client.freeze true;
  
temp.pl.setani"legends_lay"NULL);
  
sleep0.3);
  
temp.pl.client.carry =
  
temp.pl.client.freeze false;
  
this.attr1] = this.attr2] = "";
  
this.temp.nx;
  
this.temp.ny;

}

function 
onActionThrown()
{

  
setTimer0);
  
temp.pl findPlayerparams0]);
  
this.nx temp.pl.dir == 1? ( temp.pl.5.5): temp.pl.dir == 3? ( temp.pl.6.5): ( temp.pl.0.5);
  
this.ny temp.pl.dir == 0? ( temp.pl.5.25): temp.pl.dir == 2? ( temp.pl.6.5): ( temp.pl.1.25);  
  
temp.pl.client.freeze true;
  
temp.pl.setani"legends_grab"NULL);
  
temp.angle getanglevecxtemp.pl.dir), vecytemp.pl.dir));
  
hide();
  
this.attr1] = this.attr2] = "";        
  
temp.pl.client.carry false;
  
setshootparams"Small Bomb"this.nametemp.pl.accounttimevar2);
  
shoottemp.pl.xtemp.pl.ytemp.pl.1temp.angle01"legends_smallBomb"NULL);
  
onTimeout();     
 
}

//#CLIENTSIDE

function onCreated()
{

  
setshape13232);
  
dontBlock();
  
onTimeout();

}

function 
GraalControl.onKeyDown()
{

  if ( 
this.attr1] == "carried")
  {
  
    if ( 
params0] == 68)
      
triggerActionthis.xthis.y"Placed"player.account);

    else if (
params0] == 65)
      
triggerActionthis.xthis.y"Thrown"player.account);

  }
}

function 
onTimeout()
{

  if ( 
this.attr1] == "carried")
  {

    
drawOverPlayer();
    
    if ( 
this.attr2] == player.account)
    {
    
      
this.player.0.5;
      
this.player.1;
  
    }
  }
  
  else
    
this.layer 1;
  
  
setTimer0.05);



Finally in the NPC-Control I have the onActionSProjectile to catch all projectiles.

PHP Code:

function onActionSProjectile()
{

  switch ( 
params2])
  {
  
    case 
"Small Bomb":
    
      
temp.pl findPlayerparams4]);
      
temp.n  findNPCparams3]);
      
temp.pl.client.freeze false;
      
temp.n.landed true;

    break;
  
  }


How could I improve this?

fowlplay4 01-19-2011 05:52 PM

:( @ using keycodes instead of keydown(i).

MrOmega 01-19-2011 06:05 PM

Quote:

Originally Posted by fowlplay4 (Post 1624085)
:( @ using keycodes instead of keydown(i).

Would that send the triggeraction any faster? :/

Deas_Voice 01-19-2011 08:51 PM

Quote:

Originally Posted by MrOmega (Post 1624087)
Would that send the triggeraction any faster? :/

no, but it would allow a player to use his/her key options in F3

MrOmega 01-19-2011 09:09 PM

Quote:

Originally Posted by Deas_Voice (Post 1624127)
no, but it would allow a player to use his/her key options in F3

I'm not in favor of that currently. I'll probably implement a custom key assignment system on my server sometime in the future.

fowlplay4 01-19-2011 09:09 PM

Quote:

Originally Posted by Deas_Voice (Post 1624127)
no, but it would allow a player to use his/her key options in F3

Yes, despite the small amount of controls the actions native to Graal (Grab, Attack, Use) they should be checked using the proper keydown functions.

DustyPorViva 01-19-2011 09:13 PM

Quote:

Originally Posted by MrOmega (Post 1624134)
I'm not in favor of that currently. I'll probably implement a custom key assignment system on my server sometime in the future.

Eww. GTFO. Let people use what keys they ****ing want to use.

MrOmega 01-19-2011 09:15 PM

Quote:

Originally Posted by DustyPorViva (Post 1624137)
Eww. GTFO. Let people use what keys they ****ing want to use.

hey chill out, I will implement one eventually but as for now it's classic forced ASD and arrows.

Deas_Voice 01-19-2011 09:17 PM

fair enuff' if his going to make his own key assignment system, no?

fowlplay4 01-19-2011 09:45 PM

Quote:

Originally Posted by Deas_Voice (Post 1624140)
fair enuff' if his going to make his own key assignment system, no?

Since keydown also applies to joystick support, no. There's no reason he can't add a button to open the F3 menu and set it to the Controls tab though or just modify that table altogether to include his extra features.

But we've drifted quite far off from what he actually wanted help with...

Deas_Voice 01-19-2011 09:51 PM

Quote:

Originally Posted by fowlplay4 (Post 1624144)
Since keydown also applies to joystick support, no. There's no reason he can't add a button to open the F3 menu and set it to the Controls tab though or just modify that table altogether to include his extra features.

who uses joystick these days? :oo:
also, isn't it removed in v6?

and i would like a custom one instead as it could have a nicer graphic and more/better functions.
Quote:

Originally Posted by fowlplay4 (Post 1624144)
But we've drifted quite far off from what he actually wanted help with...

true'..


as far as i know, doing it tru projectile stuff and placing the bomb with putnpc, is the best way to do it.
did something similar but with arrow's landing on walls or on the player who got hit a long time ago, but not like a GK bow where you click and it would land there, more like a classic one'

Lance 01-19-2011 11:55 PM

Only have time for a small comment right now, but please remember that triggeractions are trusted implicitly; you have just created some functions where a malicious person could make any other player pick up or throw your bombs. Don't send the account as a parameter like that.

Also I assume it was just a typo but your onActionPlaced has an unfinished line.

MrOmega 01-20-2011 12:38 AM

Ok, how would I talk to the serverside of a class script? Where do you see a typo in onActionPlaced.

Lance 01-20-2011 05:49 AM

Quote:

Originally Posted by MrOmega (Post 1624242)
Ok, how would I talk to the serverside of a class script?

The problem occurs when you are including an arbitrary account as a parameter, so a malicious player could send the wrong account to do some screwy stuff. I guess the simplest way around that would be to stick with what you're doing but use 'actionplayer' serverside to get the account of the person doing the action instead of passing it as a parameter.

Quote:

Where do you see a typo in onActionPlaced.
I was referring to:

PHP Code:

  temp.pl.client.carry =
  
temp.pl.client.freeze false

where your code implies you are trying to do

PHP Code:

  temp.pl.client.carry temp.pl.client.freeze false

while your formatting implies that these are supposed to be two distinct lines with one being unfinished. I'm not trying to do any stylistic criticism here but it just seemed a bit ambiguous to me. :)

MrOmega 01-20-2011 06:36 AM

Actionplayer it is.

Oh and that's just my styling, it can be chaotic to others but I can read it fast and good. :D

cbk1994 01-20-2011 01:16 PM

PHP Code:

temp.pl findPlayerparams0]); 

Please do not do this. There's a misconception that you have to send the player's account in triggers. It's not true and is a huge security risk. You can access the player object directly here.

LordSquirt 01-20-2011 01:42 PM

I concur with what Christopher said.

salesman 01-20-2011 07:33 PM

your styling annoys me almost as much as people who put spaces before punctuation !

Fulg0reSama 01-20-2011 07:35 PM

Quote:

Originally Posted by salesman (Post 1624398)
your styling annoys me almost as much as people who put spaces before punctuation !

zomg ! I'm doing what annoys salesman !!!

MrOmega 01-21-2011 02:33 AM

Styling is mostly a matter of preference, the way I style is the best way I can read and quickly find issues with scripts. Scripts still run and function as intended. I am the only one reading my scripts on my server, no need to conform to how other people want to read it. But, if it's such and issue I'll just use /style next time I ask a flippin scripting question. Now, quit derailing the topic of this thread.


All times are GMT +2. The time now is 09:52 PM.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.
Copyright (C) 1998-2019 Toonslab All Rights Reserved.