Graal Forums

Graal Forums (https://forums.graalonline.com/forums/index.php)
-   NPC Scripting (https://forums.graalonline.com/forums/forumdisplay.php?f=8)
-   -   Scripted ani+show ani destroy itself.. (https://forums.graalonline.com/forums/showthread.php?t=72063)

JkWhoSaysNi 02-08-2007 10:31 PM

Scripted ani+show ani destroy itself..
 
I have a scripted ani being shown by a weapon NPC.

I want that ani to hide itself after it's finished (i tried destroy() in the ani but it didn't work) so I thought I could do something like:

PHP Code:

showani(i,x,y,0,"ani",i); 

Then in the ani:
PHP Code:

SCRIPT
function onPlayerEnters() {
    
this.indexnum params[0];
    
setTimer(0.05);

}
function 
onTimeout() {
    
this.count++;
...
    if (
this.count == 100) {
         
with(findweapon("weapon")) {
             
hideimg(this.indexnum);
         }
    }
setTimer(0.05);

}
SCRIPTEND 

This causes an access violation... but as far as I can tell the logic is correct.


Is what I want to do possible?

Chandler 02-08-2007 10:44 PM

I'm not too sure if that would work. However, to be sure I'd make the
HTML Code:

if (this.count == 100) {
to:
HTML Code:

if (this.count => 100) {
Unfortanetly, I can't debug anything as of late. V$:C is down!

JkWhoSaysNi 02-08-2007 10:47 PM

I actually had that, but I thought that might have been the cause of the access violation, if it looped round again it will try to hide the image again. It doesn't make any difference, still gives access violation :(

Chandler 02-08-2007 10:49 PM

Is the object to follow a player? What's the objects purpose?

JkWhoSaysNi 02-08-2007 10:52 PM

It stays exactly where it's placed.

It's a fire ani I scripted, it 'burns out' after 100 timeouts. I can hide the stuff created by the ani but not the actual ani placed by the weapon/

It's displayed serverside using ids <200.

Chandler 02-08-2007 10:55 PM

Ah, why're you displaying it serverside? Some kind of damage effect I assume.

I would've thought that destroy inside the gani would have done it, but you've already tried that. Weird.

Tolnaftate2004 02-08-2007 11:00 PM

Make sure "weapon" isn't trying to modify the image/gani in any way after hiding.

Also, I think this.indexnum should be thiso.- ?

JkWhoSaysNi 02-08-2007 11:05 PM

You're right, it should be thiso I changed that and it still causes an access violation when hideimg is called. All the weapon NPC does is show the ani, it doesnt do anything else with it.

Admins 02-09-2007 10:46 AM

It should not hide itself, that's not working right now, and doesn't make a lot of sense in gani scripts anyway since it's running on each client and you only want to hide it on the client/server that controls the object. Just let the gani script stop displaying something and let a weapon or npc control the showing/hiding of the gani script attr[] (or showimg).

Chompy 02-09-2007 04:06 PM

Hmm, I've had this problem before (Float text), where when the player is hurt, it places a gani at the players location with showani( ... );
but sometimes they randomly appear around inside levels or gmaps, like they
have just been temporaly hided or something.. anyone know how to destroy them (removing them from the level or something)?

Inverness 02-09-2007 05:41 PM

Well I'm at school now so I can't test this for now.
You could get the object of the gani and join it to a class that destroys itself after a time limit.

JkWhoSaysNi 02-09-2007 06:02 PM

Yes, I had that but it caused major server lag.

I made a flamethrower weapon which sets light to places it touches :P making the fires putnpc2 caused huge lag even though they destroyed after 3 seconds.

Weirdly, it wasn't just when they were on screen. Even if they'd all been destroyed, the lag would grow every time a new fire was started.

Admins 02-09-2007 09:20 PM

Eventually the npc was only hidden and not really destroyed ? Normally putnpc2 should not lag a lot

JkWhoSaysNi 02-09-2007 09:47 PM

It seems like the NPC is not actually being destroyed. I'm calling destroy() on it and eventually after the weapon has been used a lot it causes lag.

If i /clearnpcs overworld.gmap the lag stops until the weapon has been used a lot and it causes lag again.

xXziroXx 02-09-2007 09:58 PM

Quote:

Originally Posted by JkWhoSaysNi (Post 1275548)
It seems like the NPC is not actually being destroyed. I'm calling destroy() on it and eventually after the weapon has been used a lot it causes lag.

If i /clearnpcs overworld.gmap the lag stops until the weapon has been used a lot and it causes lag again.

Are you calling it on serverside?

JkWhoSaysNi 02-09-2007 10:08 PM

ah! You're right. It's being created serverside but destroyed clientside. I'll try destroying it serverside and see if it fixes it. :)

Edit: Thanks! That seems to have been my problem :D

Chandler 02-09-2007 10:38 PM

I'd recommend something like
HTML Code:

function onCreated()
{
  setTimer(5);
}
function onTimeout()
{
  this.destroy();
}
//#CLIENTSIDE
function onCreated()
{
  Yourclientsidepart...
}


Chompy 02-09-2007 10:43 PM

Quote:

Originally Posted by Chompy (Post 1275415)
Hmm, I've had this problem before (Float text), when the player is hurt, it places a gani at the players location with showani();
but sometimes they randomly appear around inside levels or on gmaps, like they
have just been hided or something.. anyone know how to destroy them (removing them from the level or something)?

Anyone can help me? :(
(Trying to destroy them from the gani)

Chandler 02-09-2007 10:51 PM

Quote:

Originally Posted by Chompy (Post 1275586)
Anyone can help me? :(
(Trying to destroy them from the gani)


Make the damage display a player.attribute. Remove the attribute once it's been used.

Chompy 02-09-2007 11:17 PM

Quote:

Originally Posted by Chandler (Post 1275594)
Make the damage display a player.attribute. Remove the attribute once it's been used.

Hmm, could you explain? :] I usually don't use player.attr for showing ganises :o
No experience at that area, the ganises with player.attrs :]

Chandler 02-09-2007 11:32 PM

Quote:

Originally Posted by Chompy (Post 1275604)
Hmm, could you explain? :] I usually don't use player.attr for showing ganises :o
No experience at that area, the ganises with player.attrs :]

Sorry for the long reply. I had to chase six youths who have just thrown a snowball at my house. I did it back to theirs!

HTML Code:

function onActionclientside(curOption, curMessage)
{
  if (temp.curOption == "addAttr")
  {
    this.attrSize.add(temp.curMessage);
    this.onTimeout();
  }
}
function onTimeout()
{
  if (this.doCount > 0)
  {
    this.doCount -= 0.05;
    if (this.doCount <= 0)
    {
      this.attrSize.delete(0);
      this.doCount = 0;
    }
    setTimer(0.05);
    return true;
  }
  if (this.attrSize.size() >
0)
  {
    player.attr[3] = "myGani," @ this.attrSize[0];
    this.doCount = 5; //Alter this to how long the display lasts
    setTimer(0.05);
  }
}

Maybe something like this?

Chompy 02-09-2007 11:38 PM

Quote:

Originally Posted by Chandler (Post 1275610)
Sorry for the long reply. I had to chase six youths who have just thrown a snowball at my house. I did it back to theirs!

HTML Code:

function onActionclientside(curOption, curMessage)
{
  if (temp.curOption == "addAttr")
  {
    this.attrSize.add(temp.curMessage);
    this.onTimeout();
  }
}
function onTimeout()
{
  if (this.doCount > 0)
  {
    this.doCount -= 0.05;
    if (this.doCount <= 0)
    {
      this.attrSize.delete(0);
      this.doCount = 0;
    }
    setTimer(0.05);
    return true;
  }
  if (this.attrSize.size() >
0)
  {
    player.attr[3] = "myGani," @ this.attrSize[0];
    this.doCount = 5; //Alter this to how long the display lasts
    setTimer(0.05);
  }
}

Maybe something like this?

Hmm, can you explain what it does?
Still not getting the player.attr[] stuff :[

Got any easier examples?

Chandler 02-09-2007 11:44 PM

Quote:

Originally Posted by Chompy (Post 1275617)
Hmm, can you explain what it does?
Still not getting the player.attr[] stuff :[

Got any easier examples?

Sure
HTML Code:

//#CLIENTSIDE
function onCreated()
{
  player.attr[3] = "bombermad_bomb.gani";
}

Would make the bombermad gani display over your graal character. Well, if you were to have that gani that is.

HTML Code:

//#CLIENTSIDE
function onPlayerChats()
{
  if (player.chat == ":setAttr")
  {
    temp.curAttr = player.chat.substring(8, 1);
    temp.curGani = player.chat.substring(9).trim();
    player.( @ "attr[" @ temp.curAttr @ "]") = (temp.curGani.ends(".gani")? temp.curGani: temp.curGani @ ".gani");
  }
}

:setAttr 3 myGani.gani
choose a gani from inside of your graal folder, which is a solid object for example.

Edit: I'll write a few documents explaining the advantages to using player attributes. :)

Chompy 02-10-2007 12:06 AM

Quote:

Originally Posted by Chandler (Post 1275620)
Sure
HTML Code:

//#CLIENTSIDE
function onCreated()
{
  player.attr[3] = "bombermad_bomb.gani";
}

Would make the bombermad gani display over your graal character. Well, if you were to have that gani that is.

HTML Code:

//#CLIENTSIDE
function onPlayerChats()
{
  if (player.chat == ":setAttr")
  {
    temp.curAttr = player.chat.substring(8, 1);
    temp.curGani = player.chat.substring(9).trim();
    player.( @ "attr[" @ temp.curAttr @ "]") = (temp.curGani.ends(".gani")? temp.curGani: temp.curGani @ ".gani");
  }
}

:setAttr 3 myGani.gani
choose a gani from inside of your graal folder, which is a solid object for example.

Edit: I'll write a few documents explaining the advantages to using player attributes. :)

Got it to work :D Thanks (btw, the :setattr stuff didn't work, made it into tokenize and had obj.starts(), but didn't work, but first example did, thanks!)

hmm, just one more thing.. on my server some weapons are faster, so alot of flaot texts will come..
so must I use a new player.attr for each flaot text, or can I use an existing attr more ganises?

Admins 02-10-2007 12:57 AM

Hmmm on Kingdoms we do it so that on serverside we set some player.attr[] to the gani script which displays the hp loss / damage taken. In the gani script onPlayerEnters() it emits a particle with "emitter.continueafterdestroy = true;" so the particle is continuing to move even if the gani script is deleted or restarted. To get several effects using the same gani script there are probably two says:
1. make the gani script being restarted, this can be done by setting the attr[] to "" and then setting the value again (it should be sent again and restart the script if it's not a CONTINUOUS gani, although I have not tested this fully yet)
2. store the actual data that should be displayed into another attr[] and in the gani script check if that data is changed and display another text or effect, let the gani script check for new data until it is removed (by using a 0.05 seconds timeout or so)

xXziroXx 02-10-2007 03:28 PM

Quote:

Originally Posted by JkWhoSaysNi (Post 1275555)
ah! You're right. It's being created serverside but destroyed clientside. I'll try destroying it serverside and see if it fixes it. :)

Edit: Thanks! That seems to have been my problem :D

You're welcome. :)

Chompy 02-10-2007 06:21 PM

Quote:

Originally Posted by Stefan (Post 1275653)
Hmmm on Kingdoms we do it so that on serverside we set some player.attr[] to the gani script which displays the hp loss / damage taken. In the gani script onPlayerEnters() it emits a particle with "emitter.continueafterdestroy = true;" so the particle is continuing to move even if the gani script is deleted or restarted. To get several effects using the same gani script there are probably two says:
1. make the gani script being restarted, this can be done by setting the attr[] to "" and then setting the value again (it should be sent again and restart the script if it's not a CONTINUOUS gani, although I have not tested this fully yet)
2. store the actual data that should be displayed into another attr[] and in the gani script check if that data is changed and display another text or effect, let the gani script check for new data until it is removed (by using a 0.05 seconds timeout or so)

Can you display text with emitters? If so, how then? >_<

cbk1994 02-12-2007 03:27 AM

Quote:

Originally Posted by Chompy (Post 1275840)
Can you display text with emitters? If so, how then? >_<

No ... that'd be weird.
Why would you want to do that?

Chompy 02-12-2007 04:12 PM

Quote:

Originally Posted by cbkbud (Post 1276440)
No ... that'd be weird.
Why would you want to do that?

I actualy you can display text with emitters .. :p

emitter.particle.text or emitter.particle.code


All times are GMT +2. The time now is 03:54 AM.

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