EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   General::General Discussion (https://www.eqemulator.org/forums/forumdisplay.php?f=586)
-   -   EverQuest in Unity Engine project (https://www.eqemulator.org/forums/showthread.php?t=35658)

Tyen05 04-20-2016 05:54 PM

Yep, you were dead on.

OP_WorldComplete made it all better, thanks~

Zone doesn't shut down on me anymore.

Tyen05 04-22-2016 05:56 PM

OP_ChannelMessage (Client->Server), work in progress.

Main Bottleneck is at the very bottom.
//TODO: Reading ChannelMessage string is suppose to be variable sized and not a 64 FixedLengthString.


Client->Server Packet logs
Quote:

[04-22-2016 :: 15:07:44] [Packet :: Client -> Server] [OP_ChannelMessage - 0x0045] [Size: 286]
[04-22-2016 :: 15:07:44] [Packet :: Client -> Server (Dump)] [OP_ChannelMessage - 0x0045] [Size: 286]
0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
32: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
48: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
64: 4A 6F 6E 64 73 00 00 00 - 00 00 00 00 00 00 00 00 | Jonds...........
80: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
96: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
112: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
128: 00 00 00 00 05 00 00 00 - 00 00 00 00 46 46 46 46 | ............FFFF
144: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
160: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
176: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
192: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
208: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
224: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
240: 46 46 46 46 78 00 00 00 - 00 00 00 00 00 00 00 00 | FFFFx...........
256: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
272: 00 00 00 00 00 00 00 00 - 00 00 00 00 | ............

[04-22-2016 :: 15:07:44] [Zone Server] Client::ChannelMessageReceived() Channel:5 message:'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFx'
Server->Client Packet logs
Quote:

[04-22-2016 :: 15:07:44] [Packet :: Server -> Client] [OP_ChannelMessage - 0x0045] [Size: 248]
[04-22-2016 :: 15:07:44] [Packet :: Server -> Client (Dump)] [OP_ChannelMessage - 0x0045] [Size: 248]
0: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
32: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
48: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
64: 4A 6F 6E 64 73 00 00 00 - 00 00 00 00 00 00 00 00 | Jonds...........
80: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
96: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
112: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
128: 00 00 00 00 05 00 00 00 - 64 00 00 00 46 46 46 46 | ........d...FFFF
144: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
160: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
176: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
192: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
208: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
224: 46 46 46 46 46 46 46 46 - 46 46 46 46 46 46 46 46 | FFFFFFFFFFFFFFFF
240: 46 46 46 46 78 00 | FFFFx.

Client Send Chat message
Code:

                public void DoChannelMessage()
                {
                       
//                        /*000*/        char        targetname[64];                // Tell recipient
//                        /*064*/        char        sender[64];                        // The senders name (len might be wrong)
//                        /*128*/        uint32        language;                        // Language
//                        /*132*/        uint32        chan_num;                        // Channel
//                        /*144*/        uint32        skill_in_language;        // The players skill in this language? might be wrong
//                        /*148*/        char        message[0];                        // Variable length message
               
                string TestMessage = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFx";
                int TestMessageLength = TestMessage.Length * 2;
                int RequestSize = 74 + TestMessageLength;
                byte[] ChannelMessageRequest = new byte[RequestSize];
                int position = 0;
               
                               
                WriteFixedLengthString("", ref ChannelMessageRequest, ref position, 64);
                WriteFixedLengthString("Jonds", ref ChannelMessageRequest, ref position, 64);
                WriteInt32(0, ref ChannelMessageRequest, ref position);
                WriteInt32(5, ref ChannelMessageRequest, ref position);
                WriteInt32(0, ref ChannelMessageRequest, ref position);
                WriteFixedLengthString(TestMessage, ref ChannelMessageRequest, ref position, TestMessageLength);
                GenerateAndSendWorldPacket (ChannelMessageRequest.Length, 69 /* OP_ChannelMessage */, curZoneId, curInstanceId, ChannelMessageRequest);                               
                }




Client Read Chat message
Code:

                public void HandleWorldMessage_ChannelMessage(byte[] data, int datasize)
                {
                       
//                        /*000*/        char        targetname[64];                // Tell recipient
//                        /*064*/        char        sender[64];                        // The senders name (len might be wrong)
//                        /*128*/        uint32        language;                        // Language
//                        /*132*/        uint32        chan_num;                        // Channel
//                        /*144*/        uint32        skill_in_language;        // The players skill in this language? might be wrong
//                        /*148*/        char        message[0];                        // Variable length message
       
                int position = 0;
               
                string ChannelTargetName = ReadFixedLengthString(data, ref position, 64);
                string ChannelSender = ReadFixedLengthString(data, ref position, 64);
                Int32 ChannelLanguage = ReadInt32(data, ref position);
                Int32 ChannelNumber = ReadInt32(data, ref position);
                Int32 ChannelSkill = ReadInt32(data, ref position);

                //TODO: ChannelMessage is suppose to be variable sized and not a 64 FixedLengthString
                string ChannelMessage = ReadFixedLengthString(data, ref position, 64);


                }


Fixed Length String reference
Code:

                public string ReadFixedLengthString(byte[] data, ref Int32 position, Int32 count)
                {
                        string retval = System.Text.Encoding.Default.GetString(data, position, count);
                        position += count;
                        return retval;
                }


Tyen05 04-30-2016 05:10 AM

Easy fix, this advice solved it.

Quote:

[05:37] <image> I would just subtract the rest of the packet
lines in green

Code:

                public void HandleWorldMessage_ChannelMessage(byte[] data, int datasize)
                {
                int position = 0;
                string ChannelTargetName = ReadFixedLengthString(data, ref position, 64);
                string ChannelSender = ReadFixedLengthString(data, ref position, 64);
                Int32 ChannelLanguage = ReadInt32(data, ref position);
                Int32 ChannelNumber = ReadInt32(data, ref position);
                Int32 ChannelSkill = ReadInt32(data, ref position);
                Int32 ChannelVarLength = datasize - position;
                string ChannelMessage = ReadFixedLengthString(data, ref position, ChannelVarLength);

                }


Tyen05 05-02-2016 05:16 AM

Revamping inputs with system below, working on chat stuffs, and also spawns.

https://youtu.be/KVbxemkOWew

Tyen05 05-04-2016 04:41 AM

http://i.imgur.com/o6m4eQd.png

Tyen05 05-07-2016 04:44 PM

https://youtu.be/K08vVFTWMzI

rhyotte 05-09-2016 11:27 AM

Cool. One day at a time!

Tyen05 05-10-2016 05:31 AM

chat: https://youtu.be/Byi1lWNQJco

Tyen05 05-15-2016 06:05 PM

Changed how spawns work. Instead of creating (instantiating) mobs as they pop (runtime), i instantiate prefabs to an object pool on start and then activate/deactivate individual prefabs from the pool as i need.

This increases performance by a huge margin. Right now the pool is global but the pools will eventually be zone specific at some point. I tossed in beetle prefab only just for testing purposes.

http://youtu.be/KnS1MeQ9VkA

Tyen05 05-16-2016 08:15 PM

PunchQuest. Stuff below for my reference

Code:

478-OP_TargetMouse
ClientTarget_Struct {
/*000*/        uint32        new_target;                        // Target ID
};

43-op_autoattack

44-op_autoattack2

109-op_damage
struct CombatDamage_Struct
{
/* 00 */        uint16        target;
/* 02 */        uint16        source;
/* 04 */        uint8        type; //slashing, etc. 231 (0xE7) for spells
/* 05 */        uint16        spellid;
/* 07 */        uint32        damage;
/* 11 */        float force;
/* 15 */        float meleepush_xy;        // see above notes in Action_Struct
/* 19 */        float meleepush_z;
/* 23 */        uint32 special; // 2 = Rampage, 1 = Wild Rampage
};

8-op_action
// this is what causes the caster to animate and the target to
// get the particle effects around them when a spell is cast
// also causes a buff icon
struct Action_Struct
{
 /* 00 */        uint16 target;        // id of target
 /* 02 */        uint16 source;        // id of caster
 /* 04 */        uint16 level; // level of caster
 /* 06 */        uint16 instrument_mod;
 /* 08 */        uint32 bard_focus_id;
// some kind of sequence that's the same in both actions
// as well as the combat damage, to tie em together?
 /* 14 */        uint32 sequence;
 /* 22 */        uint8 type;                // 231 (0xE7) for spells
 /* 27 */        uint16 spell;        // spell id being cast
 /* 31 */
};


Tyen05 05-17-2016 06:02 PM

Targeting in https://youtu.be/ePc4FeqV-VU

Tyen05 05-18-2016 02:33 PM

hardcoded x,y,z,h to the /loc infront of priest of discord in nqeynos, but my packet doesnt seem right

Client:
Code:

                public void DoClientUpdate()
                {
                        GameObject us = EqemuConnectObject;
                        float x = -us.transform.position.x;
                        float y = us.transform.position.z;
                        float z = us.transform.position.y;
                        float h = us.transform.rotation.y;
                                               
                        byte[] PositionUpdateRequest = new byte[38];
                        Int32 position = 0;
                               
                        WriteInt16((short)OurEntityID, ref PositionUpdateRequest, ref position);
                        WriteInt32(BitConverter.ToInt32(BitConverter.GetBytes(x), 0), ref PositionUpdateRequest, ref position);
                        WriteInt32(BitConverter.ToInt32(BitConverter.GetBytes(y), 0), ref PositionUpdateRequest, ref position);
                        WriteInt32(BitConverter.ToInt32(BitConverter.GetBytes(z), 0), ref PositionUpdateRequest, ref position);
                        WriteInt32(0, ref PositionUpdateRequest, ref position);
                        WriteInt32(0, ref PositionUpdateRequest, ref position);
                        WriteInt32(0, ref PositionUpdateRequest, ref position);
                        WriteInt32(0, ref PositionUpdateRequest, ref position);
                        WriteInt32(0, ref PositionUpdateRequest, ref position);
                        WriteInt32(122, ref PositionUpdateRequest, ref position);

                        GenerateAndSendWorldPacket (PositionUpdateRequest.Length, 87 /* OP_ClientUpdate */, 2, curInstanceId, PositionUpdateRequest);
                }

Server:
Code:

struct PlayerPositionUpdateClient_Struct
{
/*0000*/ uint16        spawn_id;
/*0004*/ float        x_pos;                                // x coord
/*0004*/ float        y_pos;                                // y coord
/*0004*/ float        z_pos;                                // z coord
/*0008*/ float        delta_x;                        // Change in z
/*0012*/ float        delta_y;                        // Change in x
/*0016*/ float        delta_z;                        // Change in y
/*0016*/ float        delta_heading;                        // Change in y
/*0020*/ int32        animationspeed;                // animation
/*0032*/ float        rotation;                        // Directional heading
/*0036*/
};

UnityPacket:
Code:

[05-18-2016 :: 15:15:22] [Packet :: Client -> Server (Dump)] [OP_ClientUpdate - 0x0057] [Size: 40]
  0: EB 00 EA 00 00 00 0B 00 - 00 00 02 00 00 00 00 00  | ................
  16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
  32: 00 7A 00 00 00 00                                  | .z....

TitaniumPacket:
Code:

[05-18-2016 :: 02:37:22] [Packet :: Client -> Server] [OP_ClientUpdate - 0x0057] [Size: 38]
[05-18-2016 :: 02:37:22] [Packet :: Client -> Server (Dump)] [OP_ClientUpdate - 0x0057] [Size: 38]
  0: E9 00 2F 36 00 00 30 41 - 00 00 00 00 00 00 00 00  | ../6..0A........
  16: 00 00 00 00 00 00 20 00 - 00 00 6A 43 64 10 08 40  | ...... ...jCd..@
  32: D0 03 00 00


Tyen05 05-18-2016 06:49 PM

solved. Died to priest of discord. Pras

Code:

[05-18-2016 :: 15:44:47] [Packet :: Client -> Server (Dump)] [OP_ClientUpdate - 0x0057] [Size: 40]
  0: ED 00 00 00 6A 43 00 00 - 30 41 00 00 00 40 00 00  | ....jC..0A...@..
  16: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
  32: 00 00 00 00 F4 42                                  | .....B

[05-18-2016 :: 15:44:52] [Zone Server] Got 0x5007 from world:
[05-18-2016 :: 15:44:52] [Packet :: Client -> Server] [OP_TargetMouse - 0x01de] [Size: 6]
[05-18-2016 :: 15:44:52] [Packet :: Client -> Server (Dump)] [OP_TargetMouse - 0x01de] [Size: 6]
  0: 56 00 00 00                                        | V...

[05-18-2016 :: 15:44:52] [Packet :: Server -> Client] [OP_TargetHoTT - 0x01dd] [Size: 6]
[05-18-2016 :: 15:44:52] [Packet :: Server -> Client (Dump)] [OP_TargetHoTT - 0x01dd] [Size: 6]
  0: 00 00 00 00                                        | ....

 [05-18-2016 :: 15:44:54] [Zone Server] Got 0x5007 from world:
[05-18-2016 :: 15:44:54] [Packet :: Client -> Server] [OP_AutoAttack - 0x002b] [Size: 6]
[05-18-2016 :: 15:44:54] [Packet :: Client -> Server (Dump)] [OP_AutoAttack - 0x002b] [Size: 6]
  0: 01 00 00 00                                        | ....

[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_Animation - 0x0021] [Size: 6]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_Animation - 0x0021] [Size: 6]
  0: ED 00 0A 05                                        | ....

[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_Damage - 0x006d] [Size: 29]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_Damage - 0x006d] [Size: 29]
  0: 56 00 ED 00 01 FF FF 00 - 00 00 00 00 00 00 00 00  | V...............
  16: 00 74 43 00 00 00 00 00 - 00 00 00                | .tC........

[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_CancelTrade - 0x0042] [Size: 10]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_CancelTrade - 0x0042] [Size: 10]
  0: ED 00 00 00 07 00 00 00                            | ........

[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_PreLogoutReply - 0x0178] [Size: 2]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_PreLogoutReply - 0x0178] [Size: 2]

[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_BecomeCorpse - 0x0034] [Size: 18]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_BecomeCorpse - 0x0034] [Size: 18]
  0: ED 00 00 00 00 00 30 41 - 00 00 6A 43 00 00 00 40  | ......0A..jC...@

[05-18-2016 :: 15:44:54] [Packet :: Server -> Client] [OP_Death - 0x006e] [Size: 34]
[05-18-2016 :: 15:44:54] [Packet :: Server -> Client (Dump)] [OP_Death - 0x006e] [Size: 34]
  0: ED 00 00 00 56 00 00 00 - ED 00 00 00 02 00 00 00  | ....V...........
  16: FF FF FF FF 1C 00 00 00 - 59 01 00 00 00 00 00 00  | ........Y.......

[05-18-2016 :: 15:44:55] [Packet :: Server -> Client] [OP_ZonePlayerToBind - 0x0220] [Size: 35]
[05-18-2016 :: 15:44:55] [Packet :: Server -> Client (Dump)] [OP_ZonePlayerToBind - 0x0220] [Size: 35]
  0: 02 00 00 00 00 00 FF C3 - 00 00 64 42 00 00 F8 41  | ..........dB...A
  16: 00 00 00 00 4E 6F 72 74 - 68 20 51 65 79 6E 6F 73  | ....North Qeynos
  32: 00                                                | .


Tyen05 05-21-2016 04:56 PM

http://i.imgur.com/1xd9cvw.png

http://i.imgur.com/Fl5EljG.jpg

Tyen05 05-22-2016 04:32 AM

Rotation good now, mob pathing is not very good at all. Had a tough rotation problem, posting mafs incase someone else needs to do the same type of mafs.

In Eqemu:
Rotation is counter clockwise.
A full rotation is 255 (not 360).

//calculate server->client heading for client
float h = Mathf.Lerp(360,0,[heading-from-op_zonespawns]/255f);

//calculate client->server heading for server
float h = Mathf.Lerp(255,0,[player-current-heading]/360f);


All times are GMT -4. The time now is 05:22 AM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.