| 
   | 
   | 
  
 
    | 
    | 
    | 
  
 
    | 
   | 
    | 
  
 
    | 
   | 
    | 
  
 
    | 
   | 
    | 
  
 
   | 
  
	
		
   
   
      | Support::Windows Servers Support forum for Windows EQEMu users. | 
    
    
   
   
   
   
   
   
   
   
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-17-2011, 08:29 AM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Hill Giant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Apr 2011 
					Location: Germany 
					
					
						Posts: 163
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				Beards?
			 
			 
			
		
		
		
		Hail EQEmu Community! 
 
First, thanks for all the effort on the project, its simply awesome and being a true nostalgic, I really appreciate it 
 
Now to my problem: 
 
I managed to set up a server and its working pretty well so far. But strangely, whenever I create a character with a beard, the beard doesnt seem to be saved. Is there a fix or am I doing something wrong (or both) ? 
 
I compiled the latest source codes, sourced in the latest sql updates. 
 
Thanks in advance, 
Nils 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-18-2011, 08:10 AM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Developer 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2006 
					Location: USA 
					
					
						Posts: 5,946
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		Hmm, maybe there is an issue with the structure between the character select creation part and the in game beard fields.  Which client are you on?  Also, have you tried using the face button while in game to see if it saves the correct beard or not?  You will need to zone after changing it to be sure. 
		
	
		
		
		
		
		
		
			
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-18-2011, 09:14 AM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Hill Giant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Apr 2011 
					Location: Germany 
					
					
						Posts: 163
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		Using the Titanium client. 
 
Changing the face ingame works like a charm. Havent zoned after the change, but back in char selection, the changes are displayed correctly. 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-18-2011, 10:33 AM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Developer 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2006 
					Location: USA 
					
					
						Posts: 5,946
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		I am not sure if the Titanium char select structs are 100% or not.  The newer SoF+ clients should be though, I think.  If it shows correctly at char select now, maybe there is some issue with the char creation portion on Titanium.  I don't have much urge to work on older client structs like that anymore, but if someone else figures it out, I am sure it can be corrected on the SVN. 
		
	
		
		
		
		
		
		
			
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-18-2011, 11:21 AM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Hill Giant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2010 
					Location: UT 
					
					
						Posts: 215
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		I can confirm that the beard does not save correctly on the Titanium char select screen but changing it in game works fine. 
 
I don't blame you for not wanting to work on older clients, but it's no biggie. The work around is just making the adjustment in game--not a big deal. 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-18-2011, 11:21 AM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Hill Giant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Apr 2011 
					Location: Germany 
					
					
						Posts: 163
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		I am a programmer myself, so if you could give me a hint which cpp-files I should have a look at, I would do so. 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
 
    | 
   | 
    | 
  
 
	
		
		
		
			
			 
			
				04-19-2011, 03:41 AM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Developer 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2006 
					Location: USA 
					
					
						Posts: 5,946
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				
			 
			 
			
		
		
		
		Here are the 3 main files related to structs and Titanium: 
http://code.google.com/p/projecteqem...s/Titanium.cpp
Here is what you would look at there:
 
	Code: 
	DECODE(OP_CharacterCreate) {
        DECODE_LENGTH_EXACT(structs::CharCreate_Struct);
        SETUP_DIRECT_DECODE(CharCreate_Struct, structs::CharCreate_Struct);
        IN(class_);
        IN(beardcolor);
        IN(beard);
        IN(haircolor);
        IN(gender);
        IN(race);
        IN(start_zone);
        IN(hairstyle);
        IN(deity);
        IN(STR);
        IN(STA);
        IN(AGI);
        IN(DEX);
        IN(WIS);
        IN(INT);
        IN(CHA);
        IN(face);
        IN(eyecolor1);
        IN(eyecolor2);
        FINISH_DIRECT_DECODE();
}
 
http://code.google.com/p/projecteqem...nium_structs.h
Here is the struct Titanium uses (this should be the only thing you would need to modify):
 
	Code: 
	/*
** Character Creation struct
** Length: 140 Bytes
** OpCode: 0x0113
*/
struct CharCreate_Struct
{
/*0000*/	int32	class_;
/*0004*/	int32	haircolor;	// Might be hairstyle
/*0008*/	int32	beardcolor;	// Might be beard
/*0012*/	int32	beard;		// Might be beardcolor
/*0016*/	int32	gender;
/*0020*/	int32	race;
/*0024*/	int32	start_zone;
	// 0 = odus
	// 1 = qeynos
	// 2 = halas
	// 3 = rivervale
	// 4 = freeport
	// 5 = neriak
	// 6 = gukta/grobb
	// 7 = ogguk
	// 8 = kaladim
	// 9 = gfay
	// 10 = felwithe
	// 11 = akanon
	// 12 = cabalis
	// 13 = shar vahl
/*0028*/	int32	hairstyle;	// Might be haircolor
/*0032*/	int32	deity;
/*0036*/	int32	STR;
/*0040*/	int32	STA;
/*0044*/	int32	AGI;
/*0048*/	int32	DEX;
/*0052*/	int32	WIS;
/*0056*/	int32	INT;
/*0060*/	int32	CHA;
/*0064*/	int32	face;		// Could be unknown0076
/*0068*/	int32	eyecolor1;	//its possiable we could have these switched
/*0073*/	int32	eyecolor2;	//since setting one sets the other we really can't check
/*0076*/	int32	unknown0076;	// Could be face
/*0080*/
};
 http://code.google.com/p/projecteqem...cket_structs.h
Here is the main struct for the emu that Titanium uses to decode to:
 
	Code: 
	/*
** Character Creation struct
** Length: 140 Bytes
** OpCode: 0x0113
*/
struct CharCreate_Struct
{
/*0000*/	int32	class_;
/*0004*/	int32	haircolor;	// Might be hairstyle
/*0008*/	int32	beardcolor;	// Might be beard
/*0012*/	int32	beard;		// Might be beardcolor
/*0016*/	int32	gender;
/*0020*/	int32	race;
/*0024*/	int32	start_zone;
	// 0 = odus
	// 1 = qeynos
	// 2 = halas
	// 3 = rivervale
	// 4 = freeport
	// 5 = neriak
	// 6 = gukta/grobb
	// 7 = ogguk
	// 8 = kaladim
	// 9 = gfay
	// 10 = felwithe
	// 11 = akanon
	// 12 = cabalis
	// 13 = shar vahl
/*0028*/	int32	hairstyle;	// Might be haircolor
/*0032*/	int32	deity;
/*0036*/	int32	STR;
/*0040*/	int32	STA;
/*0044*/	int32	AGI;
/*0048*/	int32	DEX;
/*0052*/	int32	WIS;
/*0056*/	int32	INT;
/*0060*/	int32	CHA;
/*0064*/	int32	face;		// Could be unknown0076
/*0068*/	int32	eyecolor1;	//its possiable we could have these switched
/*0073*/	int32	eyecolor2;	//since setting one sets the other we really can't check
/*0076*/	int32	drakkin_heritage;	// added for SoF
/*0080*/	int32	drakkin_tattoo;		// added for SoF
/*0084*/	int32	drakkin_details;	// added for SoF
/*0088*/
};
 As you can see, there are some comments about hair and beard and colors related to them that might be in the wrong spots.  It probably wouldn't be too hard to test each out and correct it.  Since all clients have to decode this, you would only need to adjust the Titanium struct, not the eq_structs.h file.If you do get the corrections made, feel free to share them so they can be corrected on the SVN.  We always welcome new programmers to help out around here    
		
	
		
		
		
		
		
		
			
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
 
    | 
   | 
    | 
  
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-19-2011, 04:18 AM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Hill Giant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Apr 2011 
					Location: Germany 
					
					
						Posts: 163
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		Thanks alot Trevius, will check it out. 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
 
    | 
   | 
    | 
  
 
	
		
		
		
			
			 
			
				04-19-2011, 05:53 AM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Hill Giant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Apr 2011 
					Location: Germany 
					
					
						Posts: 163
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				
			 
			 
			
		
		
		
		Your hint was absolutely correct. To make creating chars with beards work properly using the Titanium client, you need to change the following file to: 
	Code: 
	struct CharCreate_Struct
{
/*0000*/	int32	class_;
/*0004*/	int32	haircolor;	// Its REALLY the hairstyle (confirmed)
/*0008*/	int32	beard;		// THIS is the beard!
/*0012*/	int32	beardcolor;	// And THIS is the beardcolor
/*0016*/	int32	gender;
/*0020*/	int32	race;
/*0024*/	int32	start_zone;
	// 0 = odus
	// 1 = qeynos
	// 2 = halas
	// 3 = rivervale
	// 4 = freeport
	// 5 = neriak
	// 6 = gukta/grobb
	// 7 = ogguk
	// 8 = kaladim
	// 9 = gfay
	// 10 = felwithe
	// 11 = akanon
	// 12 = cabalis
	// 13 = shar vahl
/*0028*/	int32	hairstyle;	// This IS the haircolor. (confirmed)
/*0032*/	int32	deity;
/*0036*/	int32	STR;
/*0040*/	int32	STA;
/*0044*/	int32	AGI;
/*0048*/	int32	DEX;
/*0052*/	int32	WIS;
/*0056*/	int32	INT;
/*0060*/	int32	CHA;
/*0064*/	int32	face;		// Could be unknown0076
/*0068*/	int32	eyecolor1;	//its possiable we could have these switched
/*0073*/	int32	eyecolor2;	//since setting one sets the other we really can't check
/*0076*/	int32	unknown0076;	// Could be face
/*0080*/
};
 Thanks again for the help!   
EDIT: Wait! Theres an issue with the hair color now...dont know if its old or new. Stand by, checking...
 
EDIT2: False alarm it seems. I think the Titanium character editor got some strange issues itself. Tested a dwarf and browsing through the beards rightward I wasnt able to choose a shaved model. It works browsing leftward. Then there seem to be 2 black colors, while chosing the 2nd black results in a different color after the creation process. However, nothing to be done about that, at least not by me    
		
	
		
		
		
		
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
 
    | 
   | 
    | 
  
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-19-2011, 06:38 AM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Developer 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Mar 2003 
					
					
					
						Posts: 1,500
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		It was mentioned that SoF+ were good on beards. Do they not use the same character create struct? 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-19-2011, 07:05 AM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Demi-God 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: May 2007 
					Location: b 
					
					
						Posts: 1,449
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  joligario
					 
				 
				It was mentioned that SoF+ were good on beards. Do they not use the same character create struct? 
			
		 | 
	 
	 
 They don't. Not sure why either. I will confirm this with IDA then commit it.  
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
 
    | 
   | 
    | 
  
 
	
		
		
		
			
			 
			
				04-19-2011, 07:20 AM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Developer 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2006 
					Location: USA 
					
					
						Posts: 5,946
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				
			 
			 
			
		
		
		
		SoF+ had a lot of struct changes.  The main difference here would be the addition of Drakkin.  Other than that, they are basically the same.  The SoF struct is below and confirms the swap of beard and beardcolor that Zothen confirmed.  It makes sense for them to match up for that portion.  Derision, KLS, myself and a few others did a ton of work on the SoF+ structures to make sure they were as accurate as possible.  Some of the Titanium structs were updated at that time as well (like the illusion struct), but not very many of them. 
SoF Struct:
 
	Code: 
	/*
** Character Creation struct
** Length: 140 Bytes
** OpCode: 0x009b
*/
struct CharCreate_Struct
{
/*0000*/	int32	class_;
/*0004*/	int32	haircolor;
/*0008*/	int32	beard;	
/*0012*/	int32	beardcolor;
/*0016*/	int32	gender;
/*0020*/	int32	race;
/*0024*/	int32	start_zone;
/*0028*/	int32	hairstyle;
/*0032*/	int32	deity;
/*0036*/	int32	STR;
/*0040*/	int32	STA;
/*0044*/	int32	AGI;
/*0048*/	int32	DEX;
/*0052*/	int32	WIS;
/*0056*/	int32	INT;
/*0060*/	int32	CHA;
/*0064*/	int32	face;		// Could be unknown0076
/*0068*/	int32	eyecolor1;	//its possiable we could have these switched
/*0073*/	int32	eyecolor2;	//since setting one sets the other we really can't check
/*0076*/	int32	tutorial;
/*0080*/	int32	drakkin_heritage;
/*0084*/	int32	drakkin_tattoo;
/*0088*/	int32	drakkin_details;
/*0092*/
};
  
		
	
		
		
		
		
		
		
			
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
 
    | 
   | 
    | 
  
 
	 
	
		 
	 
 
	
	
		
	
	
 
    | 
   | 
    | 
  
 
	
		
		
		
			
			 
			
				04-19-2011, 07:33 AM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Demi-God 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: May 2007 
					Location: b 
					
					
						Posts: 1,449
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				
			 
			 
			
		
		
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  trevius
					 
				 
				SoF+ had a lot of struct changes.  The main difference here would be the addition of Drakkin.  Other than that, they are basically the same.  The SoF struct is below and confirms the swap of beard and beardcolor that Zothen confirmed.  It makes sense for them to match up for that portion.  Derision, KLS, myself and a few others did a ton of work on the SoF+ structures to make sure they were as accurate as possible.  Some of the Titanium structs were updated at that time as well (like the illusion struct), but not very many of them. 
SoF Struct:
 
	Code: 
	/*
** Character Creation struct
** Length: 140 Bytes
** OpCode: 0x009b
*/
struct CharCreate_Struct
{
/*0000*/	int32	class_;
/*0004*/	int32	haircolor;
/*0008*/	int32	beard;	
/*0012*/	int32	beardcolor;
/*0016*/	int32	gender;
/*0020*/	int32	race;
/*0024*/	int32	start_zone;
/*0028*/	int32	hairstyle;
/*0032*/	int32	deity;
/*0036*/	int32	STR;
/*0040*/	int32	STA;
/*0044*/	int32	AGI;
/*0048*/	int32	DEX;
/*0052*/	int32	WIS;
/*0056*/	int32	INT;
/*0060*/	int32	CHA;
/*0064*/	int32	face;		// Could be unknown0076
/*0068*/	int32	eyecolor1;	//its possiable we could have these switched
/*0073*/	int32	eyecolor2;	//since setting one sets the other we really can't check
/*0076*/	int32	tutorial;
/*0080*/	int32	drakkin_heritage;
/*0084*/	int32	drakkin_tattoo;
/*0088*/	int32	drakkin_details;
/*0092*/
};
  
			
		 | 
	 
	 
 It's very possible that is the correct version of the char creation struct. Maybe the unknown in titanium is the tutorial flag? I didn't look that far into it besides assembly :P  
		
	
		
		
		
		
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
 
    | 
   | 
    | 
  
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-19-2011, 08:40 AM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Developer 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2006 
					Location: USA 
					
					
						Posts: 5,946
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		Yeah, I would think it probably is the Tutorial field.  Though, I thought tutorial already worked properly at character creation on Titanium.  It would definitely make sense and could be tested easy enough. 
		
	
		
		
		
		
		
		
			
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
 
	
		
	
	
	
	
	
		
	
		 
		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 01:41 AM. 
 
		 
	 
 
 
     | 
     | 
    
   
      | 
     | 
      | 
    
   
     | 
      | 
     | 
    
   
       | 
      | 
       | 
     
    
    
  | 
   |