|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
General::General Discussion General discussion about EverQuest(tm), EQEMu, and related topics. Do not post support topics here. |
04-20-2016, 05:54 PM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
Yep, you were dead on.
OP_WorldComplete made it all better, thanks~
Zone doesn't shut down on me anymore.
|
|
|
|
04-22-2016, 05:56 PM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
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;
}
|
|
|
|
04-30-2016, 05:10 AM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
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);
}
|
05-02-2016, 05:16 AM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
Revamping inputs with system below, working on chat stuffs, and also spawns.
https://youtu.be/KVbxemkOWew
|
05-04-2016, 04:41 AM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
|
05-07-2016, 04:44 PM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
|
05-09-2016, 11:27 AM
|
Hill Giant
|
|
Join Date: Jul 2012
Location: Oklahoma
Posts: 222
|
|
Cool. One day at a time!
|
05-10-2016, 05:31 AM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
|
05-15-2016, 06:05 PM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
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
|
|
|
|
05-16-2016, 08:15 PM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
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 */
};
|
|
|
|
05-17-2016, 06:02 PM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
|
|
|
|
05-18-2016, 02:33 PM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
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
|
|
|
|
|
|
|
05-18-2016, 06:49 PM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
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 | .
|
|
|
|
05-21-2016, 04:56 PM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
|
05-22-2016, 04:32 AM
|
Discordant
|
|
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
|
|
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);
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 10:16 PM.
|
|
|
|
|
|
|
|
|
|
|
|
|