John, thank you so much for going over the packet flow in Analyst.  You really 
looked into this.  I'm sorry for not getting back to you this weekend, I got 
buried in a database project.  
 
But just to make sure I undersatnd what you've found, the AgentAnimation 
packet( true ) is what I send out to the server, and then it sends back 
AvitarAnimation packets until I send another AgentAnimation packet( false ) 
telling the animation to stop?  
 
If this is so, I am still wondering why my previous attempt to start an 
animation did not work successfully.  Even though I did not inject a packet 
with the STOP command, it should have kept animating indefinitely.  But I was 
using the /wave as an example, which probably has an invalid ID if it is in 
fact a gesture.  My animations list was empty( which is why I used a gesture ), 
maybe I should grab a real animation and then try it with that ID.
 
By the way, is Analyst something you guys wrote or is it a third party tool?  
And if so, where can I grab it?  It sounds like that is the best way to get a 
look at the packets coming to and fro, based on what you've shown me.
 
Thanks very much,
Mike

________________________________

From: [EMAIL PROTECTED] on behalf of John Hurliman
Sent: Sat 7/29/2006 5:17 PM
To: Development list for libsecondlife
Subject: Re: [libsecondlife-dev] Animations and packets...



Michael Kron (RIT Student) wrote:
> Hmm.  Yes, I think figuring out what the exactly packet flow of a gesture 
> being performed is gonna be pretty crucial.  Registering for Outgoing sounds 
> like a good idea, thanks much.  Maybe I'll just spit em all out to a file, 
> and see what it looks like when I /wave. 
> 
> Speaking of which though... if I'm just trying to inject a packet to the 
> server with the animation I'd like to perform, I wonder if I would ever 
> actually see that on my client?  I mean, suppose the usual sequence is, play 
> the animation on the client, send out a message to the server to play the 
> animation on all nearby clients.  If I just inject that packet, maybe it 
> doesn't bother sending me the trigger you're referring to, because it assumed 
> I already performed it.
> 
> Maybe I need to watch incoming too... but I imagine that gets pretty nuts.
>
> ________________________________

-->   69.25.105.216:13002  3270 [        Rel    ]
---- AgentAnimation ----
-- Sender --
ID: f6ec1e24fd294f4cb21e23b42841c8c7
-- AnimationList --
AnimID: d1913562a1bdc1208517c3c921cc63f0
StartAnim: True

That's my avatar (Eddy Stryker, f6ec1e24...) playing a jump gesture out
of my inventory. The gesture itself has a different asset id that I
could only find in a packet grep when activating or deactivating the
gesture. Gestures and their activated status may be used to propagate
animations to other clients with different priorities, where animations
in active gestures of nearby avatars are sent to clients before
unactivated ones of avatars further away. I believe gestures are
converted in to a series of animations clientside though and sent to the
server at proper timings. The packet above was quickly followed by the
one below:

-->   69.25.105.216:13002  3284 [        Rel    ]
---- AgentAnimation ----
-- Sender --
ID: f6ec1e24fd294f4cb21e23b42841c8c7
-- AnimationList --
AnimID: d1913562a1bdc1208517c3c921cc63f0
StartAnim: False

But even more interesting was what happened in between those two packets:

<--   69.25.105.216:13002  4429 [        Rel    ]
---- AvatarAnimation ----
-- AnimationSourceList --
ObjectID: 00000000000000000000000000000000
-- AnimationSourceList --
ObjectID: f6ec1e24fd294f4cb21e23b42841c8c7
-- Sender --
ID: f6ec1e24fd294f4cb21e23b42841c8c7
-- AnimationList --
AnimID: 2408fe9edf1d1d7df4ff1384fa7b350f
AnimSequenceID: 140540
-- AnimationList --
AnimID: d1913562a1bdc1208517c3c921cc63f0
AnimSequenceID: 140729

The server is sending us back a packet that tells us to play some
animation (2408fe9e... not sure) followed by our jump animation. So even
if these packets were injected in the upstream the client should still
play the animation. Lets test that out. I have another animation called
Jumpkick (8dd75ed...), so I tell Analyst to modify packets like so:

/set AgentAnimation AnimationList AnimID 8dd75ed7ac14835f6d7b576ced55fa84

Only problem is you are constantly sending AgentAnimation packets over
the wire. When you walk, stop walking, type or stop typing, when you are
standing there doing nothing and your avatar leans back and forth or
does whatever, so the signal is getting lost in the noise here, with
every AnimID now changed to the new one and StartAnim: True and
StartAnim: False packets being sent constantly. Here's a successful
sequence though which showed my avatar playing the new Jumpkick animation:

-->   69.25.105.216:13002     0 [        Rel    ]
---- AgentAnimation ----
-- Sender --
ID: f6ec1e24fd294f4cb21e23b42841c8c7
-- AnimationList --
AnimID: 8dd75ed7ac14835f6d7b576ced55fa84
StartAnim: True

<--   69.25.105.216:13002 13314 [        Rel    ]
---- AvatarAnimation ----
-- AnimationSourceList --
ObjectID: 00000000000000000000000000000000
-- AnimationSourceList --
ObjectID: f6ec1e24fd294f4cb21e23b42841c8c7
-- AnimationSourceList --
ObjectID: f6ec1e24fd294f4cb21e23b42841c8c7
-- AnimationSourceList --
ObjectID: f6ec1e24fd294f4cb21e23b42841c8c7
-- Sender --
ID: f6ec1e24fd294f4cb21e23b42841c8c7
-- AnimationList --
AnimID: 2408fe9edf1d1d7df4ff1384fa7b350f
AnimSequenceID: 140540
-- AnimationList --
AnimID: 5c682a956da4a4630bf60f5b7be129d1
AnimSequenceID: 141446
-- AnimationList --
AnimID: 8dd75ed7ac14835f6d7b576ced55fa84
AnimSequenceID: 141536
-- AnimationList --
AnimID: f22fed8ba5ed2c9364d5bdd8b93c889f
AnimSequenceID: 141442

-->   69.25.105.216:13002     0 [        Rel    ]
---- AgentAnimation ----
-- Sender --
ID: f6ec1e24fd294f4cb21e23b42841c8c7
-- AnimationList --
AnimID: 8dd75ed7ac14835f6d7b576ced55fa84
StartAnim: False

So we can assume that the client plays the animation based on the
incoming AvatarAnimation packets. I would skip gestures for now and get
the asset uuids of some animations and construct AgentAnimation packets
where ID is your AgentID, AnimID is the animation uuid you want to play,
and send one with StartAnim: True, sleep for a short bit then send
StartAnim: False. If you need help I'll write a proof of concept this
weekend.

John

_______________________________________________
libsecondlife-dev mailing list
libsecondlife-dev@gna.org
https://mail.gna.org/listinfo/libsecondlife-dev


<<winmail.dat>>

_______________________________________________
libsecondlife-dev mailing list
libsecondlife-dev@gna.org
https://mail.gna.org/listinfo/libsecondlife-dev

Reply via email to