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

Reply via email to