Go Back   EQEmulator Home > EQEmulator Forums > General > General::General Discussion

General::General Discussion General discussion about EverQuest(tm), EQEMu, and related topics.
Do not post support topics here.

Reply
 
Thread Tools Display Modes
  #136  
Old 04-20-2016, 05:54 PM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

Yep, you were dead on.

OP_WorldComplete made it all better, thanks~

Zone doesn't shut down on me anymore.
__________________
Browser based EQ project
Reply With Quote
  #137  
Old 04-22-2016, 05:56 PM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

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;
		}
__________________
Browser based EQ project
Reply With Quote
  #138  
Old 04-30-2016, 05:10 AM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

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);
		}
__________________
Browser based EQ project
Reply With Quote
  #139  
Old 05-02-2016, 05:16 AM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

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

https://youtu.be/KVbxemkOWew
__________________
Browser based EQ project
Reply With Quote
  #140  
Old 05-04-2016, 04:41 AM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

__________________
Browser based EQ project
Reply With Quote
  #141  
Old 05-07-2016, 04:44 PM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

https://youtu.be/K08vVFTWMzI
__________________
Browser based EQ project
Reply With Quote
  #142  
Old 05-09-2016, 11:27 AM
rhyotte
Hill Giant
 
Join Date: Jul 2012
Location: Oklahoma
Posts: 222
Default

Cool. One day at a time!
Reply With Quote
  #143  
Old 05-10-2016, 05:31 AM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

chat: https://youtu.be/Byi1lWNQJco
__________________
Browser based EQ project
Reply With Quote
  #144  
Old 05-15-2016, 06:05 PM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

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
__________________
Browser based EQ project
Reply With Quote
  #145  
Old 05-16-2016, 08:15 PM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

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 */
};
__________________
Browser based EQ project
Reply With Quote
  #146  
Old 05-17-2016, 06:02 PM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

Targeting in https://youtu.be/ePc4FeqV-VU
__________________
Browser based EQ project
Reply With Quote
  #147  
Old 05-18-2016, 02:33 PM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

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
__________________
Browser based EQ project
Reply With Quote
  #148  
Old 05-18-2016, 06:49 PM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

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                                                 | .
__________________
Browser based EQ project
Reply With Quote
  #149  
Old 05-21-2016, 04:56 PM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default



__________________
Browser based EQ project
Reply With Quote
  #150  
Old 05-22-2016, 04:32 AM
Tyen05
Discordant
 
Join Date: Mar 2009
Location: eqbrowser.com
Posts: 309
Default

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);
__________________
Browser based EQ project
Reply With Quote
Reply

Tags
pras eqbrowser.com, unity3d


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 05:32 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3