Go Back   EQEmulator Home > EQEmulator Forums > Support > Support::Windows Servers

Support::Windows Servers Support forum for Windows EQEMu users.

Reply
 
Thread Tools Display Modes
  #1  
Old 04-17-2011, 08:29 AM
Zothen
Hill Giant
 
Join Date: Apr 2011
Location: Germany
Posts: 163
Question 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
Reply With Quote
  #2  
Old 04-18-2011, 08:10 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

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.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #3  
Old 04-18-2011, 09:14 AM
Zothen
Hill Giant
 
Join Date: Apr 2011
Location: Germany
Posts: 163
Default

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.
Reply With Quote
  #4  
Old 04-18-2011, 10:33 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

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.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #5  
Old 04-18-2011, 11:21 AM
revloc02c's Avatar
revloc02c
Hill Giant
 
Join Date: Aug 2010
Location: UT
Posts: 215
Default

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.
Reply With Quote
  #6  
Old 04-18-2011, 11:21 AM
Zothen
Hill Giant
 
Join Date: Apr 2011
Location: Germany
Posts: 163
Default

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.
Reply With Quote
  #7  
Old 04-19-2011, 03:41 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

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
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #8  
Old 04-19-2011, 04:18 AM
Zothen
Hill Giant
 
Join Date: Apr 2011
Location: Germany
Posts: 163
Default

Thanks alot Trevius, will check it out.
Reply With Quote
  #9  
Old 04-19-2011, 05:53 AM
Zothen
Hill Giant
 
Join Date: Apr 2011
Location: Germany
Posts: 163
Thumbs up

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
Reply With Quote
  #10  
Old 04-19-2011, 06:38 AM
joligario's Avatar
joligario
Developer
 
Join Date: Mar 2003
Posts: 1,498
Default

It was mentioned that SoF+ were good on beards. Do they not use the same character create struct?
Reply With Quote
  #11  
Old 04-19-2011, 07:05 AM
Secrets's Avatar
Secrets
Demi-God
 
Join Date: May 2007
Location: b
Posts: 1,449
Default

Quote:
Originally Posted by joligario View Post
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.
Reply With Quote
  #12  
Old 04-19-2011, 07:20 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

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*/
};
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #13  
Old 04-19-2011, 07:33 AM
Secrets's Avatar
Secrets
Demi-God
 
Join Date: May 2007
Location: b
Posts: 1,449
Default

Quote:
Originally Posted by trevius View Post
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
Reply With Quote
  #14  
Old 04-19-2011, 08:40 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

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.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
Reply


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 08:09 AM.


 

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 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3