PDA

View Full Version : Scripted ani+show ani destroy itself..


JkWhoSaysNi
02-08-2007, 10:31 PM
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:

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

Then in the ani:
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

if (this.count == 100) {

to:

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
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

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

Chompy
02-09-2007, 10:43 PM
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
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
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
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!


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
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!


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
Hmm, can you explain what it does?
Still not getting the player.attr[] stuff :[

Got any easier examples?

Sure

//#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.


//#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
Sure

//#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.


//#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
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
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
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
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