PDA

View Full Version : Fixed spellbar bug and luclin faces viewed by other clients


vesuvias
02-18-2004, 06:30 PM
Ok round two. I made just two changes this time.

-Fixed luclin faces (face,beard,hair,etc) so that this information is now correctly being sent to
the other clients. Before even though (after my last change) you could set your face correctly, no one else in the world was getting the correct information sent to thier clients. These changes should fix that.

-Fixed the last remenents of the spell bug I believe (ran solid for four hours as a necro without a single bugged casting). Turns out this last bug was directly related to fizzles (I bet if fizzle was in red as opposed to dark blue we could have correlated this earlier :) ). Fizzling crashed the spellar everytime (test it now by setting your channeling to zero and cast a few times, bye bye spellbar) and since its based on channelling you really never fizzled at high levels (so it appeared intermitent). Was a simple fix once I found it.

Ok this is a big long list of diffs because fixing luclin faces required that I add a beard variable to mob.h and a few of its methods (and lots of classes call or overide those methods). I also included all of the changes I made from my previous list because these diffs are agianst the current cvs (which my last round of changes aren't a part of yet).

I know 0.5.5 is right around the corner and some of this might (likely) change when we see it. If I had access to that code base I would be making these changes agianst it. Irregardless, when 0.5.5 gets here I may have to go back and do some of this work agian.

Hope this helps if even a little... I know my son enjoys not having to log out every five minutes because his spellbar was bugged ;-)

Ves

you can get the changed files here (http://members.cox.net/zeher/021904additions.zip)

Diffs to follow *edited to include context and player_corpse.cpp*

spells.cpp
Index: spells.cpp
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/zone/spells.cpp,v
retrieving revision 1.1.1.13
diff -c -r1.1.1.13 spells.cpp
*** spells.cpp 7 Feb 2004 21:34:24 -0000 1.1.1.13
--- spells.cpp 19 Feb 2004 05:22:07 -0000
***************
*** 399,405 ****
if(slot <= 8 && !CheckFizzle(spell_id))
{
int fizzle_msg = IsBardSong(spell_id) ? MISS_NOTE : SPELL_FIZZLE;
! InterruptSpell(fizzle_msg, 0x121);

// fizzle 1/4 the mana away
if(IsClient())
--- 399,405 ----
if(slot <= 8 && !CheckFizzle(spell_id))
{
int fizzle_msg = IsBardSong(spell_id) ? MISS_NOTE : SPELL_FIZZLE;
! InterruptSpell(fizzle_msg, 0x121,spell_id);

// fizzle 1/4 the mana away
if(IsClient())

client.cpp
Index: client.cpp
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/zone/client.cpp,v
retrieving revision 1.1.1.12
diff -c -r1.1.1.12 client.cpp
*** client.cpp 6 Feb 2004 23:32:59 -0000 1.1.1.12
--- client.cpp 16 Feb 2004 18:41:44 -0000
***************
*** 116,125 ****
0, // wis
0, // cha
0xff, // Luclin Hair Colour
! 0xff, // Luclin Beard
0xff, // Luclin Eye1
0xff, // Luclin Eye2
0xff, // Luclin Hair Style
0xff, // Luclin Face
0xff, // AA Title
1, // fixedz
--- 116,126 ----
0, // wis
0, // cha
0xff, // Luclin Hair Colour
! 0xff, // Luclin Beard Color
0xff, // Luclin Eye1
0xff, // Luclin Eye2
0xff, // Luclin Hair Style
+ 0xff, // Luclin Beard
0xff, // Luclin Face
0xff, // AA Title
1, // fixedz
client_process.cpp
Index: client_process.cpp
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/zone/client_process.cpp,v
retrieving revision 1.1.1.12
diff -c -r1.1.1.12 client_process.cpp
*** client_process.cpp 7 Feb 2004 21:34:11 -0000 1.1.1.12
--- client_process.cpp 19 Feb 2004 23:56:37 -0000
***************
*** 1604,1631 ****
int8 minlevel = 0;
sint8 myerror=ZONE_ERROR_NOTREADY;
char target_zone[32] = {0};
if (zc->zoneID != 0 && dead)
{
! #ifdef GUILDWARS
! if(animation > 65 && admin<80 && CheckCheat()){
! if(cheater || cheatcount>0){
! Message(15,"Cheater log updated...yup your busted,its not nice to cheat.");
! char descript[50]={0};
! sprintf(descript,"%s: %i","Death zone cheat");
! database.logevents(this->AccountName(),this->AccountID(),admin,this->GetName(),"none","Death zone cheat",descript,15);
! if(cheater==false){
! worldserver.SendEmoteMessage(0,0,0,13,"<Cheater Locator> We have found a cheater. %s (Acct: %s) was just caught hacking, please show them what we think of hackers...",this->GetName(),this->AccountName());
! cheater=true;
}
! cheatcount=0;
}
- else
- cheatcount++;
}
- #else
- break;
#endif
! }
if (zc->zoneID == 0){
if(strlen(zonesummon_name)==0)//Player Died
strcpy(target_zone, zone->GetShortName());
--- 1604,1631 ----
int8 minlevel = 0;
sint8 myerror=ZONE_ERROR_NOTREADY;
char target_zone[32] = {0};
+
+ #ifdef GUILDWARS
if (zc->zoneID != 0 && dead)
{
! if(animation > 65 && admin<80 && CheckCheat()){
! if(cheater || cheatcount>0){
! Message(15,"Cheater log updated...yup your busted,its not nice to cheat.");
! char descript[50]={0};
! sprintf(descript,"%s: %i","Death zone cheat");
! database.logevents(this->AccountName(),this->AccountID(),admin,this->GetName(),"none","Death zone cheat",descript,15);
! if(cheater==false){
! worldserver.SendEmoteMessage(0,0,0,13,"<Cheater Locator> We have found a cheater. %s (Acct: %s) was just caught hacking, please show them what we think of hackers...",this->GetName(),this->AccountName());
! cheater=true;
! }
! cheatcount=0;
}
! else
! cheatcount++;
}
}
#endif
!
if (zc->zoneID == 0){
if(strlen(zonesummon_name)==0)//Player Died
strcpy(target_zone, zone->GetShortName());
***************
*** 1649,1658 ****
zonesummon_ignorerestrictions = 0;

ZonePoint* zone_point = zone->GetClosestZonePoint(x_pos, y_pos, z_pos, zc->zoneID);
!
! tarx=zonesummon_x;
! tary=zonesummon_y;
! tarz=zonesummon_z;

// -1, -1, -1 = code for zone safe point
if ((x_pos == -1 && y_pos == -1 && (z_pos == -1 || z_pos == -10)) ||
--- 1649,1656 ----
zonesummon_ignorerestrictions = 0;

ZonePoint* zone_point = zone->GetClosestZonePoint(x_pos, y_pos, z_pos, zc->zoneID);
! //zone debugging
! ZonePoint* zp = zone_point;

// -1, -1, -1 = code for zone safe point
if ((x_pos == -1 && y_pos == -1 && (z_pos == -1 || z_pos == -10)) ||
***************
*** 1666,1676 ****
zonesummon_z = -2;
}
// -3 -3 -3 = bind point
! else if (zonesummon_x == -3 && zonesummon_y == -3 && (zonesummon_z == -3 || zonesummon_z == -30) && database.GetZoneName(m_pp.bind_zone_id)) {
! strcpy(target_zone, database.GetZoneName(m_pp.bind_zone_id));
! tarx = m_pp.bind_x;
! tary = m_pp.bind_y;
! tarz = m_pp.bind_z;
zonesummon_x = -2;
zonesummon_y = -2;
zonesummon_z = -2;
--- 1664,1678 ----
zonesummon_z = -2;
}
// -3 -3 -3 = bind point
! else if (zonesummon_x == -3 && zonesummon_y == -3 && (zonesummon_z == -3 || zonesummon_z == -30)) {
! if (database.GetZoneName(m_pp.bind_zone_id)){
! //zoneing to bind point
! strcpy(target_zone, database.GetZoneName(m_pp.bind_zone_id));
! tarx = m_pp.bind_x;
! tary = m_pp.bind_y;
! tarz = m_pp.bind_z;
!
! } //else bind point isn't set and we will zone to the zone safe point
zonesummon_x = -2;
zonesummon_y = -2;
zonesummon_z = -2;
***************
*** 1690,1712 ****
tarz=GetZ();
else
tarz = zone_point->target_z;
! tarheading = zone_point->target_heading;
}
// if not -2 -2 -2, zone to these coords. -2, -2, -2 = not a zonesummon zonerequest
else if (!(zonesummon_x == -2 && zonesummon_y == -2 && (zonesummon_z == -2 || zonesummon_z == -20))) {
tarx = zonesummon_x;
tary = zonesummon_y;
tarz = zonesummon_z;
zonesummon_x = -2;
zonesummon_y = -2;
zonesummon_z = -2;
}
! else {
cout << "WARNING: No target coords for this zone in DB found" << endl;
cout << "Zoning to safe coords: " << target_zone << " (" << database.GetZoneID(target_zone) << ")" << ", x=" << tarx << ", y=" << tary << ", z=" << tarz << endl;
! tarx=-1;
! tary=-1;
! tarz=-1;
zonesummon_x = -2;
zonesummon_y = -2;
zonesummon_z = -2;
--- 1692,1716 ----
tarz=GetZ();
else
tarz = zone_point->target_z;
! tarheading = zone_point->target_heading;
}
// if not -2 -2 -2, zone to these coords. -2, -2, -2 = not a zonesummon zonerequest
else if (!(zonesummon_x == -2 && zonesummon_y == -2 && (zonesummon_z == -2 || zonesummon_z == -20))) {
+
tarx = zonesummon_x;
tary = zonesummon_y;
tarz = zonesummon_z;
+
zonesummon_x = -2;
zonesummon_y = -2;
zonesummon_z = -2;
}
! else {
cout << "WARNING: No target coords for this zone in DB found" << endl;
cout << "Zoning to safe coords: " << target_zone << " (" << database.GetZoneID(target_zone) << ")" << ", x=" << tarx << ", y=" << tary << ", z=" << tarz << endl;
! //tarx=-1;
! //tary=-1;
! //tarz=-1;
zonesummon_x = -2;
zonesummon_y = -2;
zonesummon_z = -2;
***************
*** 1716,1722 ****
myerror = ZONE_ERROR_NOEXPERIENCE;

APPLAYER* outapp = NULL;
! if (target_zone[0] != 0 && admin >= minstatus && GetLevel() >= minlevel) {
LogFile->write(EQEMuLog::Status, "Zoning '%s' to: %s (%i) x=%f, y=%f, z=%f",
m_pp.name, target_zone, database.GetZoneID(target_zone),
tarx, tary, tarz);
--- 1720,1726 ----
myerror = ZONE_ERROR_NOEXPERIENCE;

APPLAYER* outapp = NULL;
! if (target_zone[0] != 0 && admin >= minstatus && GetLevel() >= minlevel) {
LogFile->write(EQEMuLog::Status, "Zoning '%s' to: %s (%i) x=%f, y=%f, z=%f",
m_pp.name, target_zone, database.GetZoneID(target_zone),
tarx, tary, tarz);
***************
*** 1734,1740 ****

Save();

! if (m_pp.zone_id == zone->GetZoneID()) {
// No need to ask worldserver if we're zoning to ourselves (most
// likely to a bind point), also fixes a bug since the default response was failure
APPLAYER* outapp = new APPLAYER(OP_ZoneChange,sizeof(ZoneChange_Struct));
--- 1738,1744 ----

Save();

! if (m_pp.zone_id == zone->GetZoneID()) {
// No need to ask worldserver if we're zoning to ourselves (most
// likely to a bind point), also fixes a bug since the default response was failure
APPLAYER* outapp = new APPLAYER(OP_ZoneChange,sizeof(ZoneChange_Struct));
***************
*** 1747,1752 ****
--- 1751,1758 ----
zone->StartShutdownTimer(AUTHENTICATION_TIMEOUT * 1000);
}
else {
+ //zoneing to another zone so we need to the let the world server
+ //handle things with the client for a while
ServerPacket* pack = new ServerPacket(ServerOP_ZoneToZoneRequest, sizeof(ZoneToZone_Struct));
ZoneToZone_Struct* ztz = (ZoneToZone_Struct*) pack->pBuffer;
ztz->response = 0;
***************
*** 1760,1767 ****
safe_delete(pack);
}
}
! else {
! LogFile->write(EQEMuLog::Error, "Zone %i is not available", zc->zoneID);

outapp = new APPLAYER(OP_ZoneChange, sizeof(ZoneChange_Struct));
ZoneChange_Struct *zc2 = (ZoneChange_Struct*)outapp->pBuffer;
--- 1766,1773 ----
safe_delete(pack);
}
}
! else {
! LogFile->write(EQEMuLog::Error, "Zone %i is not available because target wasn't found or character insufficent level", zc->zoneID);

outapp = new APPLAYER(OP_ZoneChange, sizeof(ZoneChange_Struct));
ZoneChange_Struct *zc2 = (ZoneChange_Struct*)outapp->pBuffer;
***************
*** 3558,3565 ****
m_pp.eyecolor2 = fc->eyecolor2;
m_pp.hairstyle = fc->hairstyle;
m_pp.face = fc->face;
! //m_pp.beard = fc->?;
! //m_pp.? = fc->woad;

Save();
SimpleMessage_StringID(13,FACE_ACCEPTED);
--- 3564,3570 ----
m_pp.eyecolor2 = fc->eyecolor2;
m_pp.hairstyle = fc->hairstyle;
m_pp.face = fc->face;
! m_pp.beard = fc->beard;

Save();
SimpleMessage_StringID(13,FACE_ACCEPTED);
***************
*** 4821,4826 ****
--- 4826,4832 ----
eyecolor2 = m_pp.eyecolor2;
hairstyle = m_pp.hairstyle;
luclinface = m_pp.face;
+ beard = m_pp.beard;
m_pp.hunger_level = 6000;
m_pp.thirst_level = 6000;
//aa_title = m_pp.aa_title;


mob.cpp
Index: mob.cpp
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/zone/mob.cpp,v
retrieving revision 1.1.1.10
diff -c -r1.1.1.10 mob.cpp
*** mob.cpp 7 Feb 2004 21:34:05 -0000 1.1.1.10
--- mob.cpp 19 Feb 2004 05:52:01 -0000
***************
*** 84,90 ****
int8 in_eyecolor1, // the eyecolors always seem to be the same, maybe left and right eye?
int8 in_eyecolor2,
int8 in_hairstyle,
! int8 in_luclinface, // and beard
int8 in_aa_title,
float in_fixed_z,
int16 in_d_meele_texture1,
--- 84,91 ----
int8 in_eyecolor1, // the eyecolors always seem to be the same, maybe left and right eye?
int8 in_eyecolor2,
int8 in_hairstyle,
! int8 in_beard, // and beard
! int8 in_luclinface,
int8 in_aa_title,
float in_fixed_z,
int16 in_d_meele_texture1,
***************
*** 146,151 ****
--- 147,154 ----
eyecolor1 = in_eyecolor1;
eyecolor2 = in_eyecolor2;
hairstyle = in_hairstyle;
+ beard = in_beard;
+ luclinface = in_luclinface;
if(in_aa_title>0)
aa_title = in_aa_title;
else
***************
*** 533,539 ****
}

void Mob::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) {
! strcpy(ns->spawn.name, name);
if(IsClient())
strncpy(ns->spawn.last_name,lastname,32);
ns->spawn.heading = heading;
--- 536,542 ----
}

void Mob::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) {
! strcpy(ns->spawn.name, name);
if(IsClient())
strncpy(ns->spawn.last_name,lastname,32);
ns->spawn.heading = heading;
***************
*** 552,585 ****
ns->spawn.level = level;
ns->spawn.deity = deity;
ns->spawn.animation = 0;
! ns->spawn.light = light;
ns->spawn.invis = IsInvisible(ForWho);
ns->spawn.npc = IsClient() ? 0 : 1;
ns->spawn.pet_owner_id = ownerid;
! if(hairstyle>0)
ns->spawn.hairstyle = hairstyle;
else
ns->spawn.hairstyle =0xFF;
! if(haircolor>0)
ns->spawn.haircolor = haircolor;
else
ns->spawn.haircolor =0xFF;
! ns->spawn.beard = 0xFF; // where is the beard?
! if(beardcolor>0)
ns->spawn.beardcolor = beardcolor;
else
ns->spawn.beardcolor =0xFF;

! if(eyecolor1>0)
ns->spawn.eyecolor1 = eyecolor1;
else
ns->spawn.eyecolor1 = 0xFF;
! if(eyecolor2>0)
ns->spawn.eyecolor2 = eyecolor2;
else
ns->spawn.eyecolor2 = 0xFF;
! ns->spawn.hairstyle = hairstyle;
! ns->spawn.face = 0;
if(helmtexture>0 && helmtexture<255){
ns->spawn.equipment[0] = helmtexture;
ns->spawn.helm=helmtexture;
--- 555,597 ----
ns->spawn.level = level;
ns->spawn.deity = deity;
ns->spawn.animation = 0;
! // ns->spawn.light = light; //not really sure where light is now in the struct
ns->spawn.invis = IsInvisible(ForWho);
ns->spawn.npc = IsClient() ? 0 : 1;
ns->spawn.pet_owner_id = ownerid;
! if(hairstyle>0 || IsClient())//only clients can actually have a valid hairstyle
ns->spawn.hairstyle = hairstyle;
else
ns->spawn.hairstyle =0xFF;
! if(haircolor>0 || IsClient())
ns->spawn.haircolor = haircolor;
else
ns->spawn.haircolor =0xFF;
! if(beard>0 || IsClient())
! ns->spawn.beard = beard;
! else
! ns->spawn.beard =0xFF;
! if(beardcolor>0 || IsClient())
ns->spawn.beardcolor = beardcolor;
else
ns->spawn.beardcolor =0xFF;

! if(eyecolor1>0 || IsClient())
ns->spawn.eyecolor1 = eyecolor1;
else
ns->spawn.eyecolor1 = 0xFF;
! if(eyecolor2>0 || IsClient())
ns->spawn.eyecolor2 = eyecolor2;
else
ns->spawn.eyecolor2 = 0xFF;
! if (IsClient())
! ns->spawn.face = luclinface;
! else
! ns->spawn.face = 0;
! ns->spawn.unknown143[0] = 0xff;//this used to be labeled beard.. if its not FF it will turn
! //mob invis
!
!
if(helmtexture>0 && helmtexture<255){
ns->spawn.equipment[0] = helmtexture;
ns->spawn.helm=helmtexture;
***************
*** 881,887 ****
//SendPosUpdate(1);
}

! void Mob::SendIllusionPacket(int16 in_race, int8 in_gender, int16 in_texture, int16 in_helmtexture, int8 in_haircolor, int8 in_beardcolor, int8 in_eyecolor1, int8 in_eyecolor2, int8 in_hairstyle, int8 in_luclinface, int8 in_aa_title) {
if (in_race == 0) {
this->race = GetBaseRace();
if (in_gender == 0xFFFF)
--- 893,899 ----
//SendPosUpdate(1);
}

! void Mob::SendIllusionPacket(int16 in_race, int8 in_gender, int16 in_texture, int16 in_helmtexture, int8 in_haircolor, int8 in_beardcolor, int8 in_eyecolor1, int8 in_eyecolor2, int8 in_hairstyle, int8 in_luclinface, int8 in_beard,int8 in_aa_title) {
if (in_race == 0) {
this->race = GetBaseRace();
if (in_gender == 0xFFFF)
***************
*** 940,945 ****
--- 952,958 ----
this->eyecolor2 = in_eyecolor2;
this->hairstyle = in_hairstyle;
this->luclinface = in_luclinface;
+ this->beard = in_beard;
this->aa_title = in_aa_title;
}
else {
***************
*** 947,954 ****
this->beardcolor = 0xFF;
this->eyecolor1 = 0xFF;
this->eyecolor2 = 0xFF;
! this->hairstyle = 0xFF;
this->luclinface = 0xFF;
this->aa_title = 0xFF;
}
APPLAYER* outapp = new APPLAYER(OP_Illusion, sizeof(Illusion_Struct));
--- 960,968 ----
this->beardcolor = 0xFF;
this->eyecolor1 = 0xFF;
this->eyecolor2 = 0xFF;
! this->hairstyle = 0xFF;
this->luclinface = 0xFF;
+ this->beard = 0xFF;
this->aa_title = 0xFF;
}
APPLAYER* outapp = new APPLAYER(OP_Illusion, sizeof(Illusion_Struct));

mob.h
Index: mob.h
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/zone/mob.h,v
retrieving revision 1.1.1.7
diff -c -r1.1.1.7 mob.h
*** mob.h 7 Feb 2004 21:33:53 -0000 1.1.1.7
--- mob.h 19 Feb 2004 05:37:36 -0000
***************
*** 214,221 ****
int8 in_eyecolor1, // the eyecolors always seem to be the same, maybe left and right eye?
int8 in_eyecolor2,
int8 in_hairstyle,
! int8 in_title, //Face Overlay? (barbarian only)
! int8 in_luclinface, // and beard);
float in_fixedZ,
int16 in_d_meele_texture1,
int16 in_d_meele_texture2,
--- 214,222 ----
int8 in_eyecolor1, // the eyecolors always seem to be the same, maybe left and right eye?
int8 in_eyecolor2,
int8 in_hairstyle,
! int8 in_beard,
! int8 in_luclinface,
! int8 in_aa_title,
float in_fixedZ,
int16 in_d_meele_texture1,
int16 in_d_meele_texture2,
***************
*** 441,447 ****
inline bool IsCasting() { return (bool) (casting_spell_id != 0); }
int16 CastingSpellID() { return casting_spell_id; }

! void SendIllusionPacket(int16 in_race, int8 in_gender = 0xFF, int16 in_texture = 0xFFFF, int16 in_helmtexture = 0xFFFF, int8 in_haircolor = 0xFF, int8 in_beardcolor = 0xFF, int8 in_eyecolor1 = 0xFF, int8 in_eyecolor2 = 0xFF, int8 in_hairstyle = 0xFF, int8 in_luclinface = 0xFF, int8 in_title = 0xFF);
void SendAppearancePacket(int32 type, int32 value, bool WholeZone = true, bool iIgnoreSelf = false);
void SetAppearance(int8 app, bool iIgnoreSelf = true);
inline const int8& GetAppearance() { return appearance; }
--- 442,448 ----
inline bool IsCasting() { return (bool) (casting_spell_id != 0); }
int16 CastingSpellID() { return casting_spell_id; }

! void SendIllusionPacket(int16 in_race, int8 in_gender = 0xFF, int16 in_texture = 0xFFFF, int16 in_helmtexture = 0xFFFF, int8 in_haircolor = 0xFF, int8 in_beardcolor = 0xFF, int8 in_eyecolor1 = 0xFF, int8 in_eyecolor2 = 0xFF, int8 in_hairstyle = 0xFF, int8 in_luclinface = 0xFF, int8 in_beard = 0xFF, int8 in_aa_title = 0xFF);
void SendAppearancePacket(int32 type, int32 value, bool WholeZone = true, bool iIgnoreSelf = false);
void SetAppearance(int8 app, bool iIgnoreSelf = true);
inline const int8& GetAppearance() { return appearance; }
***************
*** 717,722 ****
--- 718,724 ----
int8 eyecolor2;
int8 hairstyle;
int8 luclinface; // and beard
+ int8 beard;
int8 aa_title;

int16 rune;
npc.cpp
Index: npc.cpp
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/zone/npc.cpp,v
retrieving revision 1.1.1.7
diff -c -r1.1.1.7 npc.cpp
*** npc.cpp 6 Feb 2004 23:32:55 -0000 1.1.1.7
--- npc.cpp 16 Feb 2004 18:41:45 -0000
***************
*** 93,98 ****
--- 93,99 ----
d->eyecolor1,
d->eyecolor2,
d->hairstyle,
+ d->beard,
d->luclinface,
d->aa_title,
d->fixedZ,
PlayerCorpse.cpp
Index: PlayerCorpse.cpp
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/zone/PlayerCorpse.cpp,v
retrieving revision 1.1.1.7
diff -c -r1.1.1.7 PlayerCorpse.cpp
*** PlayerCorpse.cpp 6 Feb 2004 23:33:06 -0000 1.1.1.7
--- PlayerCorpse.cpp 16 Feb 2004 18:42:08 -0000
***************
*** 99,105 ****
// Mongrel: added see_invis and see_invis_undead
Corpse::Corpse(NPC* in_npc, ItemList** in_itemlist, int32 in_npctypeid, NPCType** in_npctypedata, int32 in_decaytime)
: Mob("Unnamed_Corpse","",0,0,in_npc->GetGender(),in_npc->GetRace(),in_npc->GetClass(),0//bodytype added
! ,in_npc->GetDeity(),in_npc->GetLevel(),in_npc->GetNPCTypeID(),0,in_npc->GetSize(),0,0,in_npc->GetHeading(),in_npc->GetX(),in_npc->GetY(),in_npc->GetZ(),0,0,in_npc->GetTexture(),in_npc->GetHelmTexture(),0,0,0,0,0,0,0,0,0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,1,0,0,0,0,0)
{
pIsChanged = false;
p_PlayerCorpse = false;
--- 99,105 ----
// Mongrel: added see_invis and see_invis_undead
Corpse::Corpse(NPC* in_npc, ItemList** in_itemlist, int32 in_npctypeid, NPCType** in_npctypedata, int32 in_decaytime)
: Mob("Unnamed_Corpse","",0,0,in_npc->GetGender(),in_npc->GetRace(),in_npc->GetClass(),0//bodytype added
! ,in_npc->GetDeity(),in_npc->GetLevel(),in_npc->GetNPCTypeID(),0,in_npc->GetSize(),0,0,in_npc->GetHeading(),in_npc->GetX(),in_npc->GetY(),in_npc->GetZ(),0,0,in_npc->GetTexture(),in_npc->GetHelmTexture(),0,0,0,0,0,0,0,0,0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,1,0,0,0,0,0)
{
pIsChanged = false;
p_PlayerCorpse = false;
***************
*** 148,154 ****
// Mongrel: added see_invis and see_invis_undead
Corpse::Corpse(Client* client, PlayerProfile_Struct* pp, sint32 in_rezexp, int8 iCorpseLevel)
: Mob("Unnamed_Corpse","",0,0,client->GetGender(),client->GetRace(),client->GetClass(), 0, // bodytype added
! client->GetDeity(),client->GetLevel(),0,0, client->GetSize(), 0, 0,client->GetHeading(),client->GetX(),client->GetY(),client->GetZ(),0,0,client->GetTexture(),client->GetHelmTexture(),0,0,0,0,0,0,0,0,0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,1,0,0,0,0,0)
{
pIsChanged = true;
NPCTypedata = 0;
--- 148,154 ----
// Mongrel: added see_invis and see_invis_undead
Corpse::Corpse(Client* client, PlayerProfile_Struct* pp, sint32 in_rezexp, int8 iCorpseLevel)
: Mob("Unnamed_Corpse","",0,0,client->GetGender(),client->GetRace(),client->GetClass(), 0, // bodytype added
! client->GetDeity(),client->GetLevel(),0,0, client->GetSize(), 0, 0,client->GetHeading(),client->GetX(),client->GetY(),client->GetZ(),0,0,client->GetTexture(),client->GetHelmTexture(),0,0,0,0,0,0,0,0,0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,1,0,0,0,0,0)
{
pIsChanged = true;
NPCTypedata = 0;
***************
*** 215,221 ****
// To be called from LoadFromDBData
// Mongrel: added see_invis and see_invis_undead
Corpse::Corpse(int32 in_dbid, int32 in_charid, char* in_charname, ItemList* in_itemlist, int32 in_copper, int32 in_silver, int32 in_gold, int32 in_plat, float in_x, float in_y, float in_z, float in_heading, float in_size, int8 in_gender, int16 in_race, int8 in_class, int8 in_deity, int8 in_level, int8 in_texture, int8 in_helmtexture,int32 in_rezexp)
! : Mob("Unnamed_Corpse","",0,0,in_gender, in_race, in_class, 0, in_deity, in_level,0,0, in_size, 0, 0, in_heading, in_x, in_y, in_z,0,0,in_texture,in_helmtexture,0,0,0,0,0,0,0,0 ,0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,1,0,0,0,0,0)
{
pIsChanged = false;
NPCTypedata = 0;
--- 215,221 ----
// To be called from LoadFromDBData
// Mongrel: added see_invis and see_invis_undead
Corpse::Corpse(int32 in_dbid, int32 in_charid, char* in_charname, ItemList* in_itemlist, int32 in_copper, int32 in_silver, int32 in_gold, int32 in_plat, float in_x, float in_y, float in_z, float in_heading, float in_size, int8 in_gender, int16 in_race, int8 in_class, int8 in_deity, int8 in_level, int8 in_texture, int8 in_helmtexture,int32 in_rezexp)
! : Mob("Unnamed_Corpse","",0,0,in_gender, in_race, in_class, 0, in_deity, in_level,0,0, in_size, 0, 0, in_heading, in_x, in_y, in_z,0,0,in_texture,in_helmtexture,0,0,0,0,0,0,0,0 ,0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,1,0,0,0 ,0,0)
{
pIsChanged = false;
NPCTypedata = 0;
zonedump.h
Index: zonedump.h
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/zone/zonedump.h,v
retrieving revision 1.1.1.3
diff -c -r1.1.1.3 zonedump.h
*** zonedump.h 6 Feb 2004 23:32:30 -0000 1.1.1.3
--- zonedump.h 16 Feb 2004 13:56:30 -0000
***************
*** 79,84 ****
--- 79,85 ----
int8 eyecolor2;
int8 hairstyle;
int8 luclinface; // and beard);
+ int8 beard;
int8 aa_title;
int8 banish;
int16 min_dmg;

database.cpp
Index: database.cpp
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/common/database.cpp,v
retrieving revision 1.1.1.11
diff -c -r1.1.1.11 database.cpp
*** database.cpp 6 Feb 2004 23:33:28 -0000 1.1.1.11
--- database.cpp 15 Feb 2004 05:36:33 -0000
***************
*** 1161,1170 ****
cs->level[char_num] = pp->level;
cs->class_[char_num] = pp->class_;
cs->race[char_num] = pp->race;
! cs->gender[char_num] = pp->gender;
! cs->face[char_num] = pp->face;
cs->deity[char_num] = pp->deity;
cs->zone[char_num] = GetZoneID(row[2]);

// Character's equipped items
// @merth: Haven't done bracer01/bracer02 yet.
--- 1161,1177 ----
cs->level[char_num] = pp->level;
cs->class_[char_num] = pp->class_;
cs->race[char_num] = pp->race;
! cs->gender[char_num] = pp->gender;
cs->deity[char_num] = pp->deity;
cs->zone[char_num] = GetZoneID(row[2]);
+ cs->face[char_num] = pp->face;
+ cs->haircolor[char_num] = pp->haircolor;
+ cs->beardcolor[char_num]= pp->beardcolor;
+ cs->eyecolor2[char_num] = pp->eyecolor2;
+ cs->eyecolor1[char_num] = pp->eyecolor1;
+ cs->hair[char_num] = pp->hairstyle;
+ cs->beard[char_num] = pp->beard;
+

// Character's equipped items
// @merth: Haven't done bracer01/bracer02 yet.
***************
*** 6548,6559 ****
return true;}

bool Database::GetStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_cc){
! cout<<"Choice:"<<in_cc->start_zone<<endl;
char errbuf[MYSQL_ERRMSG_SIZE];
char *query = 0;
MYSQL_RES *result;
MYSQL_ROW row;
! if (RunQuery(query, MakeAnyLenString(&query, "SELECT x,y,z,zone_id,bind_id FROM start_zones WHERE player_choice=%i and player_class=%i and player_deity=%i and player_race=%i", in_cc->start_zone, in_cc->class_, in_cc->deity, in_cc->race), errbuf, &result)) {
safe_delete_array(query);
if (mysql_num_rows(result) != 0) {
row = mysql_fetch_row(result);
--- 6555,6567 ----
return true;}

bool Database::GetStartZone(PlayerProfile_Struct* in_pp, CharCreate_Struct* in_cc){
! //cout<<"Choice:"<<in_cc->start_zone<<" Class:"<<in_cc->class_<<" Race:"<<in_cc->race<<" Diety:"<<in_cc->deity<<endl;
char errbuf[MYSQL_ERRMSG_SIZE];
char *query = 0;
MYSQL_RES *result;
MYSQL_ROW row;
! int qLen = MakeAnyLenString(&query, "SELECT x,y,z,zone_id,bind_id,bind_x,bind_y,bind_z FROM start_zones WHERE (player_choice=%i OR player_choice=-1) and (player_class=%i OR player_class=-1) and (player_deity=%i OR player_deity=-1) and (player_race=%i OR player_race=-1) ORDER BY select_rank DESC", in_cc->start_zone, in_cc->class_, in_cc->deity, in_cc->race);
! if (RunQuery(query,qLen,errbuf,&result)) {
safe_delete_array(query);
if (mysql_num_rows(result) != 0) {
row = mysql_fetch_row(result);
***************
*** 6561,6577 ****
in_pp->x = atoi(row[1]);
in_pp->z = atoi(row[2]);
in_pp->zone_id = atoi(row[3]);
! in_pp->bind_zone_id = atoi(row[4]);
mysql_free_result(result);
return true;
}
else {
! LogFile->write(EQEMuLog::Error, "Database: could not find start_zones entry in database. Using Defaults..");
}
mysql_free_result(result);
}
else {
! LogFile->write(EQEMuLog::Error, "Database: could not find start_zones table in database. Using Defaults..");
safe_delete_array(query);
}
in_pp->x = 0; in_pp->y = 0; in_pp->z = 0;
--- 6569,6612 ----
in_pp->x = atoi(row[1]);
in_pp->z = atoi(row[2]);
in_pp->zone_id = atoi(row[3]);
! in_pp->bind_zone_id = atoi(row[4]);
! //if we haven't set a bind_zone_id lets set it to the starting zone
! if (in_pp->bind_zone_id ==0) in_pp->bind_zone_id = in_pp->zone_id;
! in_pp->bind_x = atof(row[5]);
! in_pp->bind_y = atof(row[6]);
! in_pp->bind_z = atof(row[7]);
! //if bind x,y,z are all 0 then we need as a default to use the safe point
! //for the bound zone
! if (in_pp->bind_x ==0 && in_pp->bind_y ==0 && in_pp->bind_z ==0){
! char *query2 = 0;
! MYSQL_RES *result2;
! MYSQL_ROW row2;
! if (RunQuery(query2, MakeAnyLenString(&query2, "SELECT safe_x,safe_y,safe_z FROM zone WHERE zoneidnumber=%i",in_pp->bind_zone_id), errbuf, &result2)) {
! if (mysql_num_rows(result2) != 0) {
! row2 = mysql_fetch_row(result2);
! in_pp->bind_x = atof(row[0]);
! in_pp->bind_y = atof(row[1]);
! in_pp->bind_z = atof(row[2]);
! }
! mysql_free_result(result2);
! } else {
! safe_delete_array(query2);
! LogFile->write(EQEMuLog::Error, "Database: could not find a zone entry in database for the starting bound zone.");
! }
!
! }
mysql_free_result(result);
return true;
}
else {
! LogFile->write(EQEMuLog::Error, "Database: could not find a start_zones entry in database for this choice,class,race,diety. Using Defaults..");
!
}
mysql_free_result(result);
}
else {
! LogFile->write(EQEMuLog::Error, errbuf);
! LogFile->write(EQEMuLog::Error, "Database: SQL Error. Using Defaults..");
safe_delete_array(query);
}
in_pp->x = 0; in_pp->y = 0; in_pp->z = 0;

eq_packet_structs.h
Index: eq_packet_structs.h
================================================== =================
RCS file: /cvsroot/eqemu/eqemu/eqemu/Source/common/eq_packet_structs.h,v
retrieving revision 1.1.1.10
diff -c -r1.1.1.10 eq_packet_structs.h
*** eq_packet_structs.h 7 Feb 2004 21:34:35 -0000 1.1.1.10
--- eq_packet_structs.h 19 Feb 2004 06:07:34 -0000
***************
*** 148,154 ****
/*1120*/ Color_Struct cs_colors[10][9]; // Characters Equipment Colors (RR GG BB 00)
/*1480*/ int32 deity[10]; // Characters Deity
/*1520*/ int32 melee[2][10]; // Characters primary and secondary IDFile number
! /*1600*/ int8 unknown1600[60]; // ***Placeholder
};

/*
--- 148,159 ----
/*1120*/ Color_Struct cs_colors[10][9]; // Characters Equipment Colors (RR GG BB 00)
/*1480*/ int32 deity[10]; // Characters Deity
/*1520*/ int32 melee[2][10]; // Characters primary and secondary IDFile number
! /*1600*/ int8 haircolor[10];
! /*1610*/ int8 beardcolor[10];
! /*1620*/ int8 eyecolor2[10];
! /*1630*/ int8 eyecolor1[10];
! /*1640*/ int8 hair[10];
! /*1650*/ int8 beard[10];
};

/*
***************
*** 601,609 ****
{
/*0000*/ int32 class_; //guess
/*0004*/ char name[64];
! /*0068*/ int32 haircolor; //guess
! /*0072*/ int32 eyecolor1; //guess
! /*0076*/ int32 eyecolor2; //guess
/*0080*/ sint32 gender;
/*0084*/ sint32 race;
/*0088*/ sint32 start_zone;
--- 606,614 ----
{
/*0000*/ int32 class_; //guess
/*0004*/ char name[64];
! /*0068*/ int32 haircolor;
! /*0072*/ int32 beard;
! /*0076*/ int32 beardcolor;
/*0080*/ sint32 gender;
/*0084*/ sint32 race;
/*0088*/ sint32 start_zone;
***************
*** 635,643 ****
/*0116*/ sint32 WIS;
/*0120*/ sint32 INT;
/*0124*/ sint32 CHA;
! /*0128*/ int32 beard;//guess
! /*0132*/ int32 beardcolor;//guess
! /*0136*/ int32 face;
/*0140*/
};

--- 640,648 ----
/*0116*/ sint32 WIS;
/*0120*/ sint32 INT;
/*0124*/ sint32 CHA;
! /*0128*/ int32 face;
! /*0132*/ int32 eyecolor1;//its possiable we could have these switched
! /*0136*/ int32 eyecolor2;//since setting one sets the other we really can't check
/*0140*/
};

***************
*** 824,831 ****
struct Spawn_Struct
{
/*000*/ int8 npc; // 0=player,1=npc,2=pc corpse,3=npc corpse,4=???,5=unknown spawn,10=self
! /*001*/ int8 eyecolor1; // Player left eye color
! /*002*/ int8 eyecolor2; // Player right eye color
/*003*/ int8 aa_title; // 0=none, 1=general, 2=archtype, 3=class
/*004*/ int32 dye_rgb[7]; // armor dye colors
/*032*/ int8 unknown001[11];
--- 829,836 ----
struct Spawn_Struct
{
/*000*/ int8 npc; // 0=player,1=npc,2=pc corpse,3=npc corpse,4=???,5=unknown spawn,10=self
! /*001*/ int8 beard;
! /*002*/ int8 beardcolor;
/*003*/ int8 aa_title; // 0=none, 1=general, 2=archtype, 3=class
/*004*/ int32 dye_rgb[7]; // armor dye colors
/*032*/ int8 unknown001[11];
***************
*** 840,849 ****
// horse: 0=brown, 1=white, 2=black, 3=tan
};
/*049*/ int32 race; // race
! /*053*/ int8 beard; // Player beard style
/*054*/ char name[64]; // name
! /*118*/ int8 haircolor; // hair color
! /*119*/ int8 light; // 0=visible,1=invisible
/*120*/ int8 invis;
/*121*/ int8 max_hp; // max hp
/*122*/ int8 pvp; // 0=Not pvp,1=pvp
--- 845,854 ----
// horse: 0=brown, 1=white, 2=black, 3=tan
};
/*049*/ int32 race; // race
! /*053*/ int8 eyecolor1;
/*054*/ char name[64]; // name
! /*118*/ int8 eyecolor2;
! /*119*/ int8 face; //light was replaced by face here not sure where light is now
/*120*/ int8 invis;
/*121*/ int8 max_hp; // max hp
/*122*/ int8 pvp; // 0=Not pvp,1=pvp
***************
*** 858,867 ****
sint32 deltaZ:13;
/*137*/ sint32 deltaY:13;
sint32 z:19;
! /*141*/ int8 beardcolor;
! /*142*/ int8 hairstyle;
! /*143*/ int8 face;
! /*144*/ int8 unknown141[7];
/*151*/ float size; // Size
/*155*/ int8 helm;
/*156*/ float runspeed; //
--- 863,871 ----
sint32 deltaZ:13;
/*137*/ sint32 deltaY:13;
sint32 z:19;
! /*141*/ int8 hairstyle;
! /*142*/ int8 haircolor;
! /*143*/ int8 unknown143[8];
/*151*/ float size; // Size
/*155*/ int8 helm;
/*156*/ float runspeed; //
***************
*** 1841,1848 ****
/*002*/ int8 eyecolor1; // the eyecolors always seem to be the same, maybe left and right eye?
/*003*/ int8 eyecolor2;
/*004*/ int8 hairstyle;
! /*005*/ int8 woad; //Face Overlay? (barbarian only)
! /*006*/ int8 face; // and beard
};

/*
--- 1845,1854 ----
/*002*/ int8 eyecolor1; // the eyecolors always seem to be the same, maybe left and right eye?
/*003*/ int8 eyecolor2;
/*004*/ int8 hairstyle;
! /*005*/ int8 beard; //this is beard not woad
! /*006*/ int8 face; //there are only 10 faces for barbs changing woad just
! //increase the face value by ten so if there were 8 woad
! //designs then there would be 80 barb faces
};

/*

Scorpious2k
02-19-2004, 04:13 AM
More great work!

But.. ummm... you missed the changes to PlayerCorpse.cpp:

here's what I put in:
in Corpse::Corpse (around line 100)

replace

: Mob("Unnamed_Corpse","",0,0,in_npc->GetGender(),in_npc->GetRace(),in_npc->GetClass(),0//bodytype added
,in_npc->GetDeity(),in_npc->GetLevel(),in_npc->GetNPCTypeID(),0,in_npc->GetSize(),0,0,in_npc->GetHeading(),in_npc->GetX(),in_npc->GetY(),in_npc->GetZ(),0,0,in_npc->GetTexture(),in_npc->GetHelmTexture(),0,0,0,0,0,0,0,0,0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,1,0,0,0,0,0)

with

// vesuvias - appearence fix
: Mob("Unnamed_Corpse","",0,0,in_npc->GetGender(),in_npc->GetRace(),in_npc->GetClass(),0//bodytype added
,in_npc->GetDeity(),in_npc->GetLevel(),in_npc->GetNPCTypeID(),0,in_npc->GetSize(),0,0,in_npc->GetHeading(),in_npc->GetX(),in_npc->GetY(),in_npc->GetZ(),0,0,in_npc->GetTexture(),in_npc->GetHelmTexture(),0,0,0,0,0,0,0,0,0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,1,0,0,0,0,0)

in Corpse::Corpse (around line 155)

replace

: Mob("Unnamed_Corpse","",0,0,client->GetGender(),client->GetRace(),client->GetClass(), 0, // bodytype added
client->GetDeity(),client->GetLevel(),0,0, client->GetSize(), 0, 0,client->GetHeading(),client->GetX(),client->GetY(),client->GetZ(),0,0,client->GetTexture(),client->GetHelmTexture(),0,0,0,0,0,0,0,0,0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,1,0,0,0,0,0)

with

// vesuvias - appearence fix
: Mob("Unnamed_Corpse","",0,0,client->GetGender(),client->GetRace(),client->GetClass(), 0, // bodytype added
client->GetDeity(),client->GetLevel(),0,0, client->GetSize(), 0, 0,client->GetHeading(),client->GetX(),client->GetY(),client->GetZ(),0,0,client->GetTexture(),client->GetHelmTexture(),0,0,0,0,0,0,0,0,0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,1,0,0,0,0,0)

and in Corpse::Corpse (around line 225)

replace

: Mob("Unnamed_Corpse","",0,0,in_gender, in_race, in_class, 0, in_deity, in_level,0,0, in_size, 0, 0, in_heading, in_x, in_y, in_z,0,0,in_texture,in_helmtexture,0,0,0,0,0,0,0,0 ,0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,1,0,0,0,0,0)

with

// vesuvias - appearence fix
: Mob("Unnamed_Corpse","",0,0,in_gender, in_race, in_class, 0, in_deity, in_level,0,0, in_size, 0, 0, in_heading, in_x, in_y, in_z,0,0,in_texture,in_helmtexture,0,0,0,0,0,0,0,0 ,0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,1,0,0,0 ,0,0)

vesuvias
02-19-2004, 04:20 AM
More great work!

But.. ummm... you missed the changes to PlayerCorpse.cpp:


Dooh! Thanks much. I thought I got all of the instances of the Mob constructor, thanks for keeping me straight. when I get home I will update the above post with the changes (and change the files as well).

Ves

kathgar
02-19-2004, 04:42 AM
Include context in diffs, that change in npc.h = worthless for an example

Scorpious2k
02-19-2004, 08:48 AM
I didn't see the spellbar fix . Did I miss it or were there some changes to spells.cpp not posted?

The rest is currently running on our server, and judging by the reaction - its working.

"I don't remember having white hair" LOL

animepimp
02-19-2004, 09:35 AM
Yeah, I jsut helped test this on Scorpious 2k server a few minutes ago and it worked perfectly. Faces are saved between sessions and everybody else could see the changes I made to my face.

Scorpious2k
02-19-2004, 09:39 AM
everybody else could see the changes I made to my face.

I wasn't going to mention the green and orange lines.... I'm sure they'll clear up with a little salve or something.... :-)

vesuvias
02-19-2004, 12:11 PM
Ok I redid the diffs to include context and I added spells.cpp to the ziped file I listed (forgot that one the first time). I added player_corpse.cpp to the diffs. Wheeew!!! Anything else ?? :)

Next time I think I will post a link to the diffs if I have this many that are this big.

Ves

Scorpious2k
02-20-2004, 09:32 AM
Wheeew!!! Anything else ?? :)

Merged into 5.3 ... will look at 5.5 next

Scorpious2k
02-20-2004, 11:20 AM
vesuvias: Shawn just made a pre release version of 5.5 available. If you can get the new packet positions, I'll merge it all in for you and he'll release it. :-)

http://Shawn319.eqemulator.net/cvs

vesuvias
02-20-2004, 12:48 PM
Great, thanks for the release. Compiling now. I will look at this tonight (after I get the kids in bed) :) .

Ves

Bahumut
02-21-2004, 12:35 AM
like Scorp said, it is GREAT to have another code tinkerer around here....shawn and the rest of developers have the new versions with all these patches to worry about, and server admins have the changes that will happen to their servers to worry about...it's great to see someone put a little effort into fixing stuff up instead of just complaining about stuff not working. my forte is hardware, but i think i'll take a look at the 5.5 code the next time i get a chance (ie. Monday :( ) is there anything you would like me to focus on Scorp or vesuvias?

Monrezz
02-21-2004, 12:37 AM
The bugs! :P




*Edit*
Like zone stability, common bugs that are annoying but minor...etc

Bahumut
02-21-2004, 12:43 AM
hehe, gotcha...like i said, my specialty is hardware...but i took c++ in high school, so i shouldnt be too bad off :D. on a random side note...there are other people up this early? trust me, this is far from by choice....got in late last night and couldnt sleep, hope i make up for it tonight 8)

Monrezz
02-21-2004, 12:50 AM
Early? It's 1pm here :P


Bahumut
Newbie

Joined: 24 Jul 2003
Posts: 2

Posted: 21-02-2004 12:43 PM Post subject: i'll do my best

Scorpious2k
02-21-2004, 03:17 AM
Solar was looking at the 5.3 stuff I merged in and seemed to think (at least then) that he might be able to get it into 5.5 without too much hassle...

Valcor
02-21-2004, 11:41 AM
I added it all, and compiled it. However, It doesnt save the face/hair/eyes ect when I zone. Anyone else have this problem?

vesuvias
02-22-2004, 01:59 PM
A preliminary romp through the code revieled that this isn't just a simple patch with the code. The structs changed for a great deal of things. I believe I got the create character struct working agian however Spawn_Struct changed. I didn't get as much chance to look at it as I would have liked this weekend. I should hopefully be able to fix it up this week. After that I may try to throw some effort at some of bugs caused by 5.5 (can't memorize correctly, etc).

Ves

Valcor
02-22-2004, 03:56 PM
From what Ive seen of 5.5R1 the face thing is mostly fixed... I havent tryed it with other clients looking at me yet, but on the Chr selection screen the face is saved.

In-game its a bit different, it seems to default to a base look until I do /face. At which point I can hit cancel, and then I look like I did on the chr screen. Also, on 5.5 it seems factions are broken.

Great work though vesucias, and everyone who tinkers with code to make this work better =)

samandhi
02-22-2004, 04:52 PM
In-game its a bit different, it seems to default to a base look until I do /face. At which point I can hit cancel, and then I look like I did on the chr screen. Im curious to know, did you try and zone before you did that? And if so did that NOT worK?

Shawn319
02-23-2004, 12:11 PM
In-game its a bit different, it seems to default to a base look until I do /face. At which point I can hit cancel, and then I look like I did on the chr screen. Im curious to know, did you try and zone before you did that? And if so did that NOT worK?

My ingame facial hair/hair color/style was never the same as i made it or what was at char select... when i made the character i chose a white hair/white goatee look (which appears fine on char select), but ingame i always see a brown hair and brown (different style) beard. even after re-applying the white hair/goatee with the ingame faces menu, the exact same thing happend.

vesuvias
02-23-2004, 01:48 PM
My ingame facial hair/hair color/style was never the same as i made it or what was at char select... when i made the character i chose a white hair/white goatee look (which appears fine on char select), but ingame i always see a brown hair and brown (different style) beard. even after re-applying the white hair/goatee with the ingame faces menu, the exact same thing happend.

I am going to try and fix this up tonight. I have everything working except ServerZoneEntry_Struct which is what controls what your avatar looks like to you when you zone into someplace (I don't think I had this working under 0.5.3 either though). I have everything working for that except beard and beardcolor. Hopefully I can put up the working diffs later tonight.

Ves

samandhi
02-23-2004, 03:46 PM
I am going to try and fix this up tonight. I have everything working except ServerZoneEntry_Struct which is what controls what your avatar looks like to you when you zone into someplace (I don't think I had this working under 0.5.3 either though). I have everything working for that except beard and beardcolor. Hopefully I can put up the working diffs later tonight. Will your code include both oldworld, and luclin models?

vesuvias
02-23-2004, 03:53 PM
Will your code include both oldworld, and luclin models?

If I am not mistaken old world models are jst dependant of the face position of the luclin version. So yes they should work fine if luclin faces are working.

Ves

samandhi
02-23-2004, 04:01 PM
Aaaah I did NOT know that... Ok good...

vesuvias
02-24-2004, 01:48 AM
Ok I fixed it up. Hopefully these changes will get everything working (as far as luclin apperences go) for everyone. Changes are agianst the 0.5.5.DR1 version.

diffs are here (http://members.cox.net/zeher/022404diffs.zip)

and full files are here (http://members.cox.net/zeher/022404changes.zip)

please.. please tell me if it looks like I forgot a file or something doesn't work (I was kind of running out the door this mourning so I may have missed something).

Hope this helps...

Ves

Valcor
02-24-2004, 12:49 PM
Sorry, been busy latley. To answer your question, it happened when I zoned also. I could do /face then cancel and it would be what I choose (same as chr selection screen). But I zone, and it goes to a default look. Short brown hair, and mustache I think it is. My chr sounds like Shawns kind of. Human model (luclin) with long white hair, but mine has no facial hair. But when I loggin, or zone it looks to me like its short brown hair, mustache *shrugs*.

I downloaded the new changes and compiling them soon. Ill let you know what happens.

Valcor
02-24-2004, 01:44 PM
Excellent fix =) Works fine now. I double checked it with my wife logged in on her computer, and we could see each other as the faces we picked. Then, after doing /face and picking something else, the person who changed there face needed to zone for the changes to be made to the other client(s). Which is fine =)

One hell of a job on that, kudos!

Scorpious2k
02-25-2004, 10:58 AM
Now merged into 5.5 DR1. It will be there next release

samandhi
02-25-2004, 11:50 AM
Excellent work Scorp and vesuvias....:)