|
From: Chad M. <cmm...@us...> - 2006-02-27 23:16:55
|
Update of /cvsroot/seq/showeq/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31571/src Modified Files: everquest.h group.cpp group.h guildlist.cpp guildlist.h guildshell.cpp guildshell.h interface.cpp messageshell.cpp messageshell.h player.cpp player.h races.h spawnshell.cpp spells.cpp staticspells.h zonemgr.cpp zonemgr.h zones.h Log Message: Live compatibility for PoR. Index: player.h =================================================================== RCS file: /cvsroot/seq/showeq/src/player.h,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- player.h 10 Dec 2005 23:27:15 -0000 1.23 +++ player.h 27 Feb 2006 23:16:47 -0000 1.24 @@ -58,7 +58,7 @@ void setDefaultClass(uint8_t); void setDefaultDeity(uint16_t); - void player(const uint8_t* player); + void player(const charProfileStruct* player); void loadProfile(const playerProfileStruct& player); void increaseSkill(const uint8_t* skilli); void manaChange(const uint8_t* mana); @@ -70,7 +70,6 @@ void updateStamina(const uint8_t* stam); void setLastKill(const QString& name, uint8_t level); void zoneChanged(void); - void zoneBegin(const ServerZoneEntryStruct* zsentry); void playerUpdateSelf(const uint8_t* pupdate, size_t, uint8_t); void consMessage(const uint8_t* con, size_t, uint8_t dir); void tradeSpellBookSlots(const uint8_t*, size_t, uint8_t); Index: staticspells.h =================================================================== RCS file: /cvsroot/seq/showeq/src/staticspells.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- staticspells.h 14 Sep 2005 04:15:03 -0000 1.3 +++ staticspells.h 27 Feb 2006 23:16:47 -0000 1.4 @@ -31,7 +31,7 @@ /* 0x0013 - 19 */ { "Armor of Faith" }, /* 0x0014 - 20 */ { "Shield of Words" }, /* 0x0015 - 21 */ { "Berserker Strength" }, -/* 0x0016 - 22 */ { "Dagger Frost" }, +/* 0x0016 - 22 */ { "Force Snap" }, /* 0x0017 - 23 */ { "Force Strike" }, /* 0x0018 - 24 */ { "Strip Enchantment" }, /* 0x0019 - 25 */ { "Pillage Enchantment" }, @@ -2101,7 +2101,7 @@ /* 0x0829 - 2089 */ { "Mana Surge " }, /* 0x082a - 2090 */ { "Greater Mana Surge" }, [...1146 lines suppressed...] +/* 0x2335 - 9013 */ { "Circle of Life III Effect" }, +/* 0x2336 - 9014 */ { "Circle of Mana III" }, +/* 0x2337 - 9015 */ { "Circle of Mana III Effect" }, +/* 0x2338 - 9016 */ { "Aura of Protection" }, +/* 0x2339 - 9017 */ { "Aura of Regeneration" }, +/* 0x233a - 9018 */ { "Aura of Ferocity" }, +/* 0x233b - 9019 */ { "Backlash of Rage" }, +/* 0x233c - 9020 */ { "Haze of Rage" }, +/* 0x233d - 9021 */ { "Haze of Mana" }, +/* 0x233e - 9022 */ { "Haze of Life" }, +/* 0x233f - 9023 */ { "Aura of Life Cure" }, +/* 0x2340 - 9024 */ { "Aura of the Grove Cure" }, +/* 0x2341 - 9025 */ { "Snowtail's Rage Strike" }, // -// Max SpellId: 0x20d8 = 8408 -// Number of Spells: 7833 -// Empty Entries: 575 +// Max SpellId: 0x2342 = 9026 +// Number of Spells: 8506 +// Empty Entries: 520 Index: spells.cpp =================================================================== RCS file: /cvsroot/seq/showeq/src/spells.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- spells.cpp 13 Sep 2005 15:23:14 -0000 1.6 +++ spells.cpp 27 Feb 2006 23:16:47 -0000 1.7 @@ -202,11 +202,13 @@ return min(level * 3 + 10, m_buffDurationArgument); case 50: return 65535; // as close to permanent as I can get + case 51: + return m_buffDurationArgument; // auras? What to do? case 3600: return 3600; default: - seqInfo("Spell::calcDuration(): Unknown formula for spell %.04x", - m_spell); + seqInfo("Spell::calcDuration(): Unknown formula for spell %.04x (%d)", + m_spell, m_buffDurationArgument); return m_buffDurationArgument; } } Index: group.h =================================================================== RCS file: /cvsroot/seq/showeq/src/group.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- group.h 13 Sep 2005 15:23:11 -0000 1.5 +++ group.h 27 Feb 2006 23:16:46 -0000 1.6 @@ -43,7 +43,7 @@ unsigned long totalLevels(); public slots: - void player(const uint8_t* player); + void player(const charProfileStruct* player); void groupUpdate(const uint8_t* data, size_t size); void addItem(const Item* item); void delItem(const Item* item); Index: guildlist.h =================================================================== RCS file: /cvsroot/seq/showeq/src/guildlist.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- guildlist.h 13 Sep 2005 15:23:11 -0000 1.2 +++ guildlist.h 27 Feb 2006 23:16:47 -0000 1.3 @@ -41,10 +41,12 @@ const int tGuildListColLevel = 1; const int tGuildListColClass = 2; const int tGuildListColRank = 3; -const int tGuildListColLastOn = 4; -const int tGuildListColZone = 5; -const int tGuildListColPublicNote = 6; -const int tGuildListColMaxCols = 7; +const int tGuildListColBank = 4; +const int tGuildListColAlt = 5; +const int tGuildListColLastOn = 6; +const int tGuildListColZone = 7; +const int tGuildListColPublicNote = 8; +const int tGuildListColMaxCols = 9; //---------------------------------------------------------------------- // GuildListItem @@ -95,7 +97,8 @@ void init_Menu(void); void toggle_showOffline(int id); void toggle_keepSorted(int id); - void toggle_guildListCol( int id ); + void toggle_showAlts(int id); + void toggle_guildListCol(int id); void set_font(int id); void set_caption(int id); @@ -116,6 +119,7 @@ uint32_t m_membersOn; bool m_showOffline; + bool m_showAlts; bool m_keepSorted; }; Index: zonemgr.h =================================================================== RCS file: /cvsroot/seq/showeq/src/zonemgr.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- zonemgr.h 13 Sep 2005 15:23:14 -0000 1.6 +++ zonemgr.h 27 Feb 2006 23:16:48 -0000 1.7 @@ -24,6 +24,7 @@ // forward declarations struct ClientZoneEntryStruct; struct ServerZoneEntryStruct; +struct charProfileStruct; struct zoneChangeStruct; struct newZoneStruct; struct zonePointsStruct; @@ -53,7 +54,6 @@ protected slots: void zoneEntryClient(const uint8_t* zsentry, size_t, uint8_t); void zonePlayer(const uint8_t* zsentry); - void zoneEntryServer(const uint8_t* zsentry, size_t, uint8_t); void zoneChange(const uint8_t* zoneChange, size_t, uint8_t); void zoneNew(const uint8_t* zoneNew, size_t, uint8_t); void zonePoints(const uint8_t* zp, size_t, uint8_t); @@ -62,7 +62,7 @@ void zoneBegin(); void zoneBegin(const QString& shortZoneName); void zoneBegin(const ClientZoneEntryStruct* zsentry, size_t len, uint8_t dir); - void zoneBegin(const ServerZoneEntryStruct* zsentry, size_t len, uint8_t dir); + void playerProfile(const charProfileStruct* player); void zoneChanged(const QString& shortZoneName); void zoneChanged(const zoneChangeStruct*, size_t, uint8_t); void zoneEnd(const QString& shortZoneName, const QString& longZoneName); Index: messageshell.cpp =================================================================== RCS file: /cvsroot/seq/showeq/src/messageshell.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- messageshell.cpp 10 Dec 2005 23:27:15 -0000 1.5 +++ messageshell.cpp 27 Feb 2006 23:16:47 -0000 1.6 @@ -364,14 +364,6 @@ m_messages->addMessage(MT_Zone, "EntryCode: Client"); } -void MessageShell::zoneEntryServer(const ServerZoneEntryStruct* zsentry) -{ - QString tempStr; - - tempStr = "EntryCode: Server"; - m_messages->addMessage(MT_Zone, tempStr); -} - void MessageShell::zoneChanged(const zoneChangeStruct* zoneChange, size_t, uint8_t dir) { QString tempStr; @@ -560,10 +552,12 @@ const spellFadedStruct *sf = (const spellFadedStruct *)data; QString tempStr; - tempStr.sprintf( "Faded: %s", - sf->message); + if (strlen(sf->message) > 0) + { + tempStr.sprintf( "Faded: %s", sf->message); - m_messages->addMessage(MT_Spell, tempStr); + m_messages->addMessage(MT_Spell, tempStr); + } } void MessageShell::interruptSpellCast(const uint8_t* data) @@ -684,9 +678,8 @@ m_messages->addMessage(MT_Group, tempStr); } -void MessageShell::player(const uint8_t* data) +void MessageShell::player(const charProfileStruct* player) { - const charProfileStruct* player = (const charProfileStruct*)data; QString message; message.sprintf("Name: '%s' Last: '%s'", Index: group.cpp =================================================================== RCS file: /cvsroot/seq/showeq/src/group.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- group.cpp 13 Sep 2005 15:23:11 -0000 1.7 +++ group.cpp 27 Feb 2006 23:16:46 -0000 1.8 @@ -39,10 +39,8 @@ } } -void GroupMgr::player(const uint8_t* data) +void GroupMgr::player(const charProfileStruct* player) { - const charProfileStruct* player = (const charProfileStruct*)data; - // reset counters m_memberCount = 0; m_membersInZoneCount = 0; Index: guildlist.cpp =================================================================== RCS file: /cvsroot/seq/showeq/src/guildlist.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- guildlist.cpp 13 Sep 2005 15:23:11 -0000 1.2 +++ guildlist.cpp 27 Feb 2006 23:16:47 -0000 1.3 @@ -69,12 +69,23 @@ return 0; else return m_member->level() > otherMember->level() ? 1 : -1; - case 3: // Rank + case 3: // Guild Rank if (m_member->guildRank() == otherMember->guildRank()) return 0; else return m_member->guildRank() > otherMember->guildRank() ? 1 : -1; - case 4: // Last On + case 4: // Banker Rank + if (m_member->bankRank() == otherMember->bankRank()) + return 0; + else + return m_member->bankRank() > otherMember->bankRank() ? 1 : -1; + + case 5: // Alt rank + if (m_member->altRank() == otherMember->altRank()) + return 0; + else + return m_member->altRank() > otherMember->altRank() ? 1 : -1; + case 6: // Last On if (m_member->lastOn() == otherMember->lastOn()) return 0; else @@ -95,6 +106,8 @@ setText(tGuildListColLevel, QString::number(m_member->level())); setText(tGuildListColClass, m_member->classString()); setText(tGuildListColRank, m_member->guildRankString()); + setText(tGuildListColBank, m_member->bankRankString()); + setText(tGuildListColAlt, m_member->altRankString()); QDateTime dt; dt.setTime_t(m_member->lastOn()); setText(tGuildListColLastOn, dt.toString(dateFormat)); @@ -136,6 +149,8 @@ // get whether to keep the list sorted or not m_keepSorted = pSEQPrefs->getPrefBool("KeepSorted", preferenceName(), false); + m_showAlts = pSEQPrefs->getPrefBool("ShowAlts", preferenceName(), true); + QBoxLayout* vLayout = new QVBoxLayout(boxLayout()); QHBoxLayout* hLayout= new QHBoxLayout(vLayout); @@ -168,6 +183,8 @@ m_guildList->addColumn("Level"); m_guildList->addColumn("Class"); m_guildList->addColumn("Rank"); + m_guildList->addColumn("Banker"); + m_guildList->addColumn("Alt"); m_guildList->addColumn("Last On", "LastOn"); m_guildList->addColumn("Zone"); m_guildList->addColumn("Public Note", "PublicNote"); @@ -218,6 +235,14 @@ guildListColMenu->insertItem("&Rank"); guildListColMenu->setItemParameter(m_id_guildList_Cols[tGuildListColRank], tGuildListColRank); + m_id_guildList_Cols[tGuildListColBank] = + guildListColMenu->insertItem("&Banker"); + guildListColMenu->setItemParameter(m_id_guildList_Cols[tGuildListColBank], + tGuildListColBank); + m_id_guildList_Cols[tGuildListColAlt] = + guildListColMenu->insertItem("&Alt"); + guildListColMenu->setItemParameter(m_id_guildList_Cols[tGuildListColAlt], + tGuildListColAlt); m_id_guildList_Cols[tGuildListColLastOn] = guildListColMenu->insertItem("Last &On"); guildListColMenu->setItemParameter(m_id_guildList_Cols[tGuildListColLastOn], @@ -239,6 +264,9 @@ x = m_menu->insertItem("Show Offline", this, SLOT(toggle_showOffline(int))); m_menu->setItemChecked(x, m_showOffline); + x = m_menu->insertItem("Show Alts", + this, SLOT(toggle_showAlts(int))); + m_menu->setItemChecked(x, m_showAlts); x = m_menu->insertItem("Keep Sorted", this, SLOT(toggle_keepSorted(int))); m_menu->setItemChecked(x, m_keepSorted); @@ -267,40 +295,76 @@ { GuildListItem* memberItem = m_guildListItemDict.find((void*)member); - // what to do if their is a member already if (memberItem) { + // We have them in our list already. Need to update. + bool bRemove = false; + + if (! m_showAlts && member->altRank()) + { + // This is an alt and we're not showing alts + bRemove = true; + } + // if not-showing offline users and this user has become offline, // then remove it - if (!member->zoneId()) + if (! m_showOffline && ! member->zoneId()) { - // decrement members on count - m_membersOn--; + // This dude is offline and we're not showing offline. + bRemove = true; + } - if (!m_showOffline) - { - // remove the item from the item dictionary - m_guildListItemDict.remove((void*)member); + // If we got an update for someone we had, but now they are offline, + // make them offline + if (! member->zoneId()) + { + m_membersOn--; + } + + if (bRemove) + { + // remove the item from the item dictionary + m_guildListItemDict.remove((void*)member); - // delete the item - delete memberItem; - } + // delete the item + delete memberItem; } else - memberItem->update(m_guildShell); - } // + { + memberItem->update(m_guildShell); + } + } else { + // Not in list yet. if (member->zoneId()) - m_membersOn++; + { + // Online. + m_membersOn++; + } - if (m_showOffline || (!m_showOffline && member->zoneId())) + // Assume we should add them. + bool bAdd = true; + + // Don't add ignored offliners. + if (! m_showOffline && ! member->zoneId()) { - // add the new guild member item - memberItem = new GuildListItem(m_guildList, member, m_guildShell); + bAdd = false; + } + + // Don't add ignored alts. + if (! m_showAlts && member->altRank()) + { + bAdd = false; + } + + if (bAdd) + { + // add the new guild member item + memberItem = new GuildListItem(m_guildList, member, m_guildShell); - // insert it into the dictionary - m_guildListItemDict.insert((void*)member, memberItem); + // insert it into the dictionary + m_guildListItemDict.insert((void*)member, memberItem); } } @@ -339,6 +403,18 @@ populate(); } +void GuildListWindow::toggle_showAlts(int id) +{ + // toggle immediate update value + m_showAlts = !m_showAlts; + m_menu->setItemChecked(id, m_showAlts); + pSEQPrefs->setPrefBool("ShowAlts", preferenceName(), + m_showAlts); + + // re-populate the window + populate(); +} + void GuildListWindow::toggle_keepSorted(int id) { // toggle immediate update value @@ -419,46 +495,37 @@ // iterate over the members GuildMemberDictIterator it(m_guildShell->members()); - // if showing offline members just insert them all - if (m_showOffline) - { // iterate over all the members while ((member = it.current())) { - // increment members on count for each member on - if (member->zoneId()) - m_membersOn++; + // increment members on count for each member on + if (member->zoneId()) + { + m_membersOn++; + } - // add the new guild member item - memberItem = new GuildListItem(m_guildList, member, m_guildShell); - - // insert it into the dictionary - m_guildListItemDict.insert((void*)member, memberItem); + bool bAdd = true; - ++it; - } - } - else - { - // iterate over all the members - while ((member = it.current())) - { - // all online members will have a non-zero zone id. - if (member->zoneId()) - { - // increment members on count for each member on - m_membersOn++; + if (member->altRank() && ! m_showAlts) + { + bAdd = false; + } - // add the new guild member item - memberItem = new GuildListItem(m_guildList, member, m_guildShell); - - // insert it into the dictionary - m_guildListItemDict.insert((void*)member, memberItem); - } + if (! member->zoneId() && ! m_showOffline) + { + bAdd = false; + } - ++it; + if (bAdd) + { + memberItem = new GuildListItem(m_guildList, member, m_guildShell); + + // insert it into the dictionary + m_guildListItemDict.insert((void*)member, memberItem); + } + + ++it; } - } // make sure the guild list is sorted m_guildList->sort(); Index: races.h =================================================================== RCS file: /cvsroot/seq/showeq/src/races.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- races.h 9 Dec 2005 00:45:24 -0000 1.15 +++ races.h 27 Feb 2006 23:16:47 -0000 1.16 @@ -482,14 +482,48 @@ "Fairy", // 473 "Witheran", // 474 "Air Elemental", // 475 - "Alligator", // 476 - "Bear", // 477 - "Earth Elemental", // 478 - "Fire Elemental", // 479 - "Scaled Wolf", // 480 - "Skeleton", // 481 - "Spectre", // 482 + "Earth Elemental", // 476 + "Fire Elemental", // 477 + "Water Elemental", // 478 + "Alligator", // 479 + "Bear", // 480 + "Scaled Wolf", // 481 + "Wolf", // 482 "Spirit Wolf", // 483 - "Water Elemental", // 484 - "Wolf", // 485 + "Skeleton", // 484 + "Spectre", // 485 + "Bolvirk", // 486 + "Banshee", // 487 + "Banshee", // 488 + "Elddar", // 489 + "Forest Giant", // 490 + "Bone Golem", // 491 + "Horse", // 492 + "Pegasus", // 493 + "Shambling Mound", // 494 + "Scrykin", // 495 + "Treant", // 496 + "Vampire", // 497 + "Ayonae Ro", // 498 + "Sullon Zek", // 499 + "Banner", // 500 + "Flag", // 501 + "Rowboat", // 502 + "Bear Trap", // 503 + "Clockwork Bomb", // 504 + "Dynamite Keg", // 505 + "Pressure Plate", // 506 + "Puffer Spore", // 507 + "Stone Ring", // 508 + "Root Tentacle", // 509 + "Runic Symbol", // 510 + "Saltpetter Bomb", // 511 + "Floating Skull", // 512 + "Spike Trap", // 513 + "Totem", // 514 + "Web", // 515 + "Wicker Basket", // 516 + "Nightmare/Unicorn", // 517 + "Horse", // 518 + "Nightmare/Unicorn", // 519 #endif Index: guildshell.cpp =================================================================== RCS file: /cvsroot/seq/showeq/src/guildshell.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- guildshell.cpp 29 Oct 2005 23:15:32 -0000 1.3 +++ guildshell.cpp 27 Feb 2006 23:16:47 -0000 1.4 @@ -22,8 +22,10 @@ // #define GUILDSHELL_DIAG 1 //---------------------------------------------------------------------- -// constants -static const QString guildRanks[] = { "M", "O", "L", "?", "MB", "OB", "LB", "?B" }; +static const QString guildRanks[] = { "M", "O", "L", "?" }; +static const QString bankRanks[] = { " ", "B" }; +static const QString altRanks[] = { " ", "A" }; +static const QString memberRanks[] = { "P", " " }; //---------------------------------------------------------------------- // GuildMember implementation @@ -35,8 +37,17 @@ // 4 byte level m_level = uint8_t(netStream.readUInt32()); - // 4 byte banker flag (0 = no, 1 = banker) + // 4 byte banker flag (0 = no, 1 = banker, 2 = alt, 3 = alt banker) m_banker = uint8_t(netStream.readUInt32()); + if (m_banker > 1) + { + m_alt = 1; + } + else + { + m_alt = 0; + } + m_banker = m_banker % 2; // 4 byte class m_class = uint8_t(netStream.readUInt32()); @@ -56,9 +67,8 @@ // 4 byte guild tribute last donation timestamp m_guildTributeLastDonation = time_t(netStream.readUInt32()); - // 4 byte unknown. Maybe this will be a full member/prospect flag instead - // of using guild rank? - m_unknown1 = netStream.readUInt32(); + // 4 byte prospective member? flag (0=prospective, 1=full member) ?? + m_fullmember = netStream.readUInt32(); // Null-terminated public note m_publicNote = netStream.readText(); @@ -99,9 +109,45 @@ const QString& GuildMember::guildRankString() const { if (m_guildRank <= 2) - return guildRanks[m_guildRank + 4*m_banker]; + return guildRanks[m_guildRank]; else - return guildRanks[3 + 4*m_banker]; // return the unknown rank character + return guildRanks[3]; // return the unknown rank character +} + +const QString& GuildMember::bankRankString() const +{ + if (m_banker > 0) + { + return bankRanks[1]; + } + else + { + return bankRanks[0]; + } +} + +const QString& GuildMember::altRankString() const +{ + if (m_alt > 0) + { + return altRanks[1]; + } + else + { + return altRanks[0]; + } +} + +const QString& GuildMember::memberRankString() const +{ + if (m_fullmember > 0) + { + return memberRanks[1]; + } + else + { + return memberRanks[0]; + } } //---------------------------------------------------------------------- @@ -134,7 +180,7 @@ GuildMemberDictIterator it(m_members); GuildMember* member; - QString format("%1 %2 %3 %4 %5 %6"); + QString format("%1 %2 %3 %4%5%6%7 %8 %9"); QString dateFormat("ddd MMM dd hh:mm:ss yyyy"); // calculate the maximum class name width @@ -151,6 +197,9 @@ out << format.arg("Members", nameFieldWidth) .arg("Lv", 2).arg("Class", classFieldWidth) .arg("R", 1) + .arg("B", 1) + .arg("A", 1) + .arg("P", 1) .arg("Last On", -24) .arg("Zone", -18); out << " Public Note" << endl; @@ -165,6 +214,9 @@ out << format.arg(member->name(), nameFieldWidth) .arg(member->level(), 2).arg(member->classString(), classFieldWidth) .arg(member->guildRankString(), 1) + .arg(member->bankRankString(), 1) + .arg(member->altRankString(), 1) + .arg(member->memberRankString(), 1) .arg(dt.toString(dateFormat), -24) .arg(zone, -18); Index: interface.cpp =================================================================== RCS file: /cvsroot/seq/showeq/src/interface.cpp,v retrieving revision 1.73 retrieving revision 1.74 diff -u -d -r1.73 -r1.74 --- interface.cpp 10 Dec 2005 23:27:14 -0000 1.73 +++ interface.cpp 27 Feb 2006 23:16:47 -0000 1.74 @@ -1669,6 +1669,25 @@ connect(this, SIGNAL(saveAllPrefs(void)), m_categoryMgr, SLOT(savePrefs(void))); + if (m_zoneMgr) + { + m_packet->connect2("OP_ZoneEntry", SP_Zone, DIR_Client, + "ClientZoneEntryStruct", SZC_Match, + m_zoneMgr, SLOT(zoneEntryClient(const uint8_t*, size_t, uint8_t))); + m_packet->connect2("OP_PlayerProfile", SP_Zone, DIR_Server, + "charProfileStruct", SZC_Match, + m_zoneMgr, SLOT(zonePlayer(const uint8_t*))); + m_packet->connect2("OP_ZoneChange", SP_Zone, DIR_Client|DIR_Server, + "zoneChangeStruct", SZC_Match, + m_zoneMgr, SLOT(zoneChange(const uint8_t*, size_t, uint8_t))); + m_packet->connect2("OP_NewZone", SP_Zone, DIR_Server, + "newZoneStruct", SZC_Match, + m_zoneMgr, SLOT(zoneNew(const uint8_t*, size_t, uint8_t))); + m_packet->connect2("OP_SendZonePoints", SP_Zone, DIR_Server, + "zonePointsStruct", SZC_None, + m_zoneMgr, SLOT(zonePoints(const uint8_t*, size_t, uint8_t))); + } + if (m_itemDB != 0) { // connect ItemDB slots to EQPacket signals @@ -1688,9 +1707,8 @@ if (m_groupMgr != 0) { - m_packet->connect2("OP_PlayerProfile", SP_Zone, DIR_Server, - "charProfileStruct", SZC_Match, - m_groupMgr, SLOT(player(const uint8_t*))); + connect(m_zoneMgr, SIGNAL(playerProfile(const charProfileStruct*)), + m_groupMgr, SLOT(player(const charProfileStruct*))); m_packet->connect2("OP_GroupUpdate", SP_Zone, DIR_Server, "groupUpdateStruct", SZC_Match, m_groupMgr, SLOT(groupUpdate(const uint8_t*, size_t))); @@ -1723,28 +1741,6 @@ this, SLOT(syncDateTime(const QDateTime&))); } - if (m_zoneMgr) - { - m_packet->connect2("OP_ZoneEntry", SP_Zone, DIR_Client, - "ClientZoneEntryStruct", SZC_Match, - m_zoneMgr, SLOT(zoneEntryClient(const uint8_t*, size_t, uint8_t))); - m_packet->connect2("OP_ZoneEntry", SP_Zone, DIR_Server, - "ServerZoneEntryStruct", SZC_Match, - m_zoneMgr, SLOT(zoneEntryServer(const uint8_t*, size_t, uint8_t))); - m_packet->connect2("OP_PlayerProfile", SP_Zone, DIR_Server, - "charProfileStruct", SZC_Match, - m_zoneMgr, SLOT(zonePlayer(const uint8_t*))); - m_packet->connect2("OP_ZoneChange", SP_Zone, DIR_Client|DIR_Server, - "zoneChangeStruct", SZC_Match, - m_zoneMgr, SLOT(zoneChange(const uint8_t*, size_t, uint8_t))); - m_packet->connect2("OP_NewZone", SP_Zone, DIR_Server, - "newZoneStruct", SZC_Match, - m_zoneMgr, SLOT(zoneNew(const uint8_t*, size_t, uint8_t))); - m_packet->connect2("OP_SendZonePoints", SP_Zone, DIR_Server, - "zonePointsStruct", SZC_None, - m_zoneMgr, SLOT(zonePoints(const uint8_t*, size_t, uint8_t))); - } - if (m_filterMgr) { connect(m_zoneMgr, SIGNAL(zoneBegin(const QString&)), @@ -1829,8 +1825,6 @@ m_messageShell, SLOT(zoneNew(const uint8_t*, size_t, uint8_t))); connect(m_zoneMgr, SIGNAL(zoneBegin(const ClientZoneEntryStruct*, size_t, uint8_t)), m_messageShell, SLOT(zoneEntryClient(const ClientZoneEntryStruct*))); - connect(m_zoneMgr, SIGNAL(zoneBegin(const ServerZoneEntryStruct*, size_t, uint8_t)), - m_messageShell, SLOT(zoneEntryServer(const ServerZoneEntryStruct*))); connect(m_zoneMgr, SIGNAL(zoneChanged(const zoneChangeStruct*, size_t, uint8_t)), m_messageShell, SLOT(zoneChanged(const zoneChangeStruct*, size_t, uint8_t))); connect(m_zoneMgr, SIGNAL(zoneBegin(const QString&)), @@ -1855,9 +1849,8 @@ m_packet->connect2("OP_CastSpell", SP_Zone, DIR_Server|DIR_Client, "startCastStruct", SZC_Match, m_messageShell, SLOT(startCast(const uint8_t*))); - m_packet->connect2("OP_PlayerProfile", SP_Zone, DIR_Server, - "charProfileStruct", SZC_Match, - m_messageShell, SLOT(player(const uint8_t*))); + connect(m_zoneMgr, SIGNAL(playerProfile(const charProfileStruct*)), + m_messageShell, SLOT(player(const charProfileStruct*))); m_packet->connect2("OP_SkillUpdate", SP_Zone, DIR_Server, "skillIncStruct", SZC_Match, m_messageShell, SLOT(increaseSkill(const uint8_t*))); @@ -1991,6 +1984,9 @@ m_packet->connect2("OP_NewSpawn", SP_Zone, DIR_Server, "spawnStruct", SZC_Match, m_spawnShell, SLOT(newSpawn(const uint8_t*))); +// m_packet->connect2("OP_ZoneEntry", SP_Zone, DIR_Server, +// "ServerZoneEntryStruct", SZC_Match, +// m_spawnShell, SLOT(newSpawn(const uint8_t*))); m_packet->connect2("OP_MobUpdate", SP_Zone, DIR_Server|DIR_Client, "spawnPositionUpdate", SZC_Match, m_spawnShell, SLOT(updateSpawns(const uint8_t*))); @@ -2066,9 +2062,8 @@ // connect Player slots to EQPacket signals - m_packet->connect2("OP_PlayerProfile", SP_Zone, DIR_Server, - "charProfileStruct", SZC_Match, - m_player, SLOT(player(const uint8_t*))); + connect(m_zoneMgr, SIGNAL(playerProfile(const charProfileStruct*)), + m_player, SLOT(player(const charProfileStruct*))); m_packet->connect2("OP_SkillUpdate", SP_Zone, DIR_Server, "skillIncStruct", SZC_Match, m_player, SLOT(increaseSkill(const uint8_t*))); Index: player.cpp =================================================================== RCS file: /cvsroot/seq/showeq/src/player.cpp,v retrieving revision 1.49 retrieving revision 1.50 diff -u -d -r1.49 -r1.50 --- player.cpp 11 Dec 2005 01:24:43 -0000 1.49 +++ player.cpp 27 Feb 2006 23:16:47 -0000 1.50 @@ -53,8 +53,6 @@ debug("Player()"); #endif - connect(m_zoneMgr, SIGNAL(zoneBegin(const ServerZoneEntryStruct*, size_t, uint8_t)), - this, SLOT(zoneBegin(const ServerZoneEntryStruct*))); connect(m_zoneMgr, SIGNAL(zoneChanged(const QString&)), this, SLOT(zoneChanged())); @@ -236,24 +234,19 @@ void Player::loadProfile(const playerProfileStruct& player) { + setUseDefaults(false); + setGender(player.gender); setRace(player.race); setClassVal(player.class_); - setLevel(player.level); + setDeity(player.deity); m_curHP = player.curHp; - - // set the player level setLevel(player.level); - // update the con table + // Update con table fillConTable(); - emit levelChanged(level()); - // Stats hanling - setUseDefaults(false); - setDeity(player.deity); - // Due to the delayed decode, we must reset // maxplayer on zone and accumulate all totals. m_maxSTR += player.STR; @@ -291,7 +284,6 @@ player.binds[0].x, player.binds[0].y, player.binds[0].z, player.binds[0].heading); - // Exp handling m_minExp = calc_exp(m_level-1, m_race, m_class); m_maxExp = calc_exp(m_level, m_race, m_class); @@ -323,9 +315,8 @@ } } -void Player::player(const uint8_t* data) +void Player::player(const charProfileStruct* player) { - const charProfileStruct* player = (const charProfileStruct*)data; QString messag; if (m_name != player->name) @@ -389,8 +380,6 @@ if (showeq_params->savePlayerState) savePlayerState(); - updateLastChanged(); - emit changeItem(this, tSpawnChangedALL); } @@ -800,45 +789,6 @@ clear(); } -void Player::zoneBegin(const ServerZoneEntryStruct* zsentry) -{ - Spawn::setName(zsentry->name); - Spawn::setLastName(zsentry->lastName); - setDeity(zsentry->deity); - setLevel(zsentry->level); - setClassVal(zsentry->class_); - setRace(zsentry->race); - setGender(zsentry->gender); - setGuildID(zsentry->guildID); - setGuildTag(m_guildMgr->guildIdToName(guildID())); - emit guildChanged(); - setPos(zsentry->x >> 3, - zsentry->y >> 3, - zsentry->z >> 3, - showeq_params->walkpathrecord, - showeq_params->walkpathlength); - seqDebug("Player::zoneBegin(): Pos (%f/%f/%f) Heading %f", - float(zsentry->x)/8.0, float(zsentry->y)/8.0, float(zsentry->z)/8.0, - float(zsentry->heading)); - setHeading(zsentry->heading, 0); - m_validPos = true; - - m_headingDegrees = 360 - ((((int8_t)lrintf(zsentry->heading)) * 360) >> 11); - emit headingChanged(m_headingDegrees); - emit posChanged(x(), y(), z(), - deltaX(), deltaY(), deltaZ(), m_headingDegrees); - - setUseDefaults(false); - - if (showeq_params->savePlayerState) - savePlayerState(); - - // update the con table - fillConTable(); - - emit changeItem(this, tSpawnChangedALL); -} - void Player::playerUpdateSelf(const uint8_t* data, size_t, uint8_t dir) { const playerSelfPosStruct *pupdate = (const playerSelfPosStruct*)data; @@ -869,7 +819,9 @@ { printf(" "); } + } + printf("\n"); #endif #if 0 @@ -879,18 +831,18 @@ { /*0000*/ uint16_t spawnId; // Player's spawn id /*0002*/ uint8_t unknown0002[2]; // ***Placeholder (update time counter?) -/*0004*/ float y; // y coord +/*0004*/ signed deltaHeading:10; // change in heading + signed padding0004:6; // ***Placeholder (mostly 1) +/*0006*/ uint8_t unknown0006[2]; // ***Placeholder /*0008*/ float deltaZ; // Change in z -/*0016*/ float deltaX; // Change in x -/*0012*/ float deltaY; // Change in y -/*0020*/ signed animation:10; // animation - signed deltaHeading:10; // change in heading - signed padding0020:12; // ***Placeholder (mostly 1) -/*0024*/ float x; // x coord -/*0028*/ float z; // z coord -/*0034*/ unsigned heading:12; // Directional heading - unsigned padding0004:4; // ***Placeholder -/*0032*/ uint8_t unknown0006[2]; // ***Placeholder +/*0012*/ float y; // y coord +/*0016*/ signed animation:10; // animation + unsigned heading:12; // Directional heading + unsigned padding0016:10; // ***Placeholder +/*0020*/ float x; // x coord +/*0024*/ float deltaX; // Change in x +/*0028*/ float deltaY; // Change in y +/*0032*/ float z; // z coord /*0036*/ }; #pragma pack(0) @@ -899,8 +851,8 @@ p->spawnId, p->x, p->y, p->z, p->deltaX, p->deltaY, p->deltaZ, float(p->heading), float(p->deltaHeading), - p->animation, *(uint16_t*) p->unknown0002, p->padding0020, - p->padding0004, *(uint16_t*) p->unknown0006); + p->animation, *(uint16_t*) p->unknown0002, p->padding0004, + p->padding0016, *(uint16_t*) p->unknown0006); #endif setPos(px, py, pz, showeq_params->walkpathrecord, showeq_params->walkpathlength); Index: messageshell.h =================================================================== RCS file: /cvsroot/seq/showeq/src/messageshell.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- messageshell.h 13 Sep 2005 15:23:12 -0000 1.2 +++ messageshell.h 27 Feb 2006 23:16:47 -0000 1.3 @@ -31,6 +31,7 @@ struct ClientZoneEntryStruct; struct ServerZoneEntryStruct; +struct charProfileStruct; struct zoneChangeStruct; //---------------------------------------------------------------------- @@ -61,7 +62,6 @@ void logOut(const uint8_t*, size_t, uint8_t); void zoneEntryClient(const ClientZoneEntryStruct* zsentry); - void zoneEntryServer(const ServerZoneEntryStruct* zsentry); void zoneNew(const uint8_t* zoneNew, size_t, uint8_t); void zoneChanged(const zoneChangeStruct*, size_t, uint8_t); void zoneBegin(const QString& shortZoneName); @@ -84,7 +84,7 @@ void syncDateTime(const QDateTime&); - void player(const uint8_t* data); + void player(const charProfileStruct* player); void increaseSkill(const uint8_t* data); void updateLevel(const uint8_t* data); void consMessage(const uint8_t* data, size_t, uint8_t dir); Index: spawnshell.cpp =================================================================== RCS file: /cvsroot/seq/showeq/src/spawnshell.cpp,v retrieving revision 1.45 retrieving revision 1.46 diff -u -d -r1.45 -r1.46 --- spawnshell.cpp 11 Dec 2005 01:24:43 -0000 1.45 +++ spawnshell.cpp 27 Feb 2006 23:16:47 -0000 1.46 @@ -605,19 +605,19 @@ struct pos { /*0000*/ uint16_t spawnId; // spawn id of the thing moving -/*0002*/ signed deltaHeading:10; // change in heading - signed x:19; // x coord - signed padding0002:3; // ***Placeholder -/*0006*/ signed y:19; // y coord - signed animation:10; // ***Placeholder (seems like speed) - signed padding0006:3; // animation -/*0010*/ signed z:19; // z coord - signed deltaY:13; // change in y -/*0014*/ signed deltaX:13; // change in x - unsigned heading:12; // heading - signed padding0014:7; // ***Placeholder -/*0018*/ signed deltaZ:13; // change in z - signed padding0018:19; // ***Placeholder +/*0002*/ signed deltaY:13; // change in y + signed x:19; // x coord +/*0006*/ signed deltaHeading:10;// change in heading + signed z:19; // z coord + signed padding0054:3; // ***Placeholder +/*0010*/ signed deltaZ:13; // change in z + signed deltaX:13; // change in x + signed padding0070:6; // ***Placeholder +/*0014*/ signed animation:10; // animation + signed y:19; // y coord + signed padding0058:3; // ***Placeholder +/*0018*/ unsigned heading:12; // heading + signed padding0066:20; // ***Placeholder /*0022*/ }; #pragma pack(0) @@ -627,8 +627,8 @@ float(p->deltaX)/4.0, float(p->deltaY)/4.0, float(p->deltaZ)/4.0, float(p->heading), float(p->deltaHeading), - p->animation, p->padding0002, p->padding0006, - p->padding0014, p->padding0018); + p->animation, p->padding0054, p->padding0070, + p->padding0058, p->padding0066); #endif updateSpawn(pupdate->spawnId, x, y, z, dx, dy, dz, @@ -826,7 +826,6 @@ seqInfo("Shrouding %s (id=%d)", shroud->spawn.name, shroud->spawn.spawnId); - m_player->zoneBegin((const ServerZoneEntryStruct*) &shroud->spawn); m_player->loadProfile(shroud->profile); // We just updated a lot of stuff. Index: everquest.h =================================================================== RCS file: /cvsroot/seq/showeq/src/everquest.h,v retrieving revision 1.88 retrieving revision 1.89 diff -u -d -r1.88 -r1.89 --- everquest.h 18 Jan 2006 22:48:21 -0000 1.88 +++ everquest.h 27 Feb 2006 23:16:46 -0000 1.89 @@ -552,7 +552,7 @@ /* ** New Zone Code -** Length: 796 Octets +** Length: 800 Octets ** OpCode: NewZoneCode */ struct newZoneStruct @@ -579,7 +579,8 @@ /*0616*/ uint8_t unknown0616[172]; // *** Placeholder /*0788*/ uint8_t unknown0788[4]; // *** Placeholder (06/29/2005) /*0792*/ uint8_t unknown0792[4]; // *** Placeholder (09/13/2005) -}; /*0796*/ +/*0796*/ uint8_t unknown0796[4]; // *** Placeholder (02/21/2006) +}; /*0800*/ /** @@ -683,8 +684,8 @@ /*13080*/ uint8_t unknown13080[12]; /*13092*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages /*13117*/ uint8_t unknown13117[7]; // All 0x00 (language buffer?) -/*13124*/ float x; // Players x position /*13128*/ float y; // Players y position +/*13124*/ float x; // Players x position /*13132*/ float z; // Players z position /*13136*/ float heading; // Players heading /*13140*/ uint8_t unknown13140[4]; // ***Placeholder @@ -918,7 +919,7 @@ /* ** Generic Spawn Struct -** Length: 582 Octets +** Length: 773 Octets ** Used in: ** spawnZoneStruct ** dbSpawnStruct @@ -927,113 +928,124 @@ */ struct spawnStruct { -/*0000*/ uint8_t invis; // Invis (0=not, 1=invis) -/*0001*/ uint8_t unknown0001[4]; -/*0005*/ uint8_t helm; // Helm texture -/*0006*/ char lastName[32]; // Player's Lastname -/*0038*/ uint8_t hairstyle; // Hair style -/*0039*/ uint32_t spawnId; // Spawn Id -/*0043*/ uint8_t light; // Spawn's lightsource -/*0044*/ uint8_t eyecolor2; // Left eye color -/*0045*/ uint8_t unknown0045[5]; -/*0050*/ uint8_t afk; // 0=no, 1=afk -/*0051*/ uint32_t petOwnerId; // If this is a pet, the spawn id of owner -/*0055*/ uint8_t unknown0055; -/*0056*/ uint8_t set_to_0xFF[8]; // ***Placeholder (all ff) -/*0064*/ uint8_t is_npc; // 0=no, 1=yes -/*0065*/ uint8_t face; // Face id for players -/*0066*/ int8_t aa_title; // 0=none, 1=general, 2=archtype, 3=class -/*0067*/ uint8_t beardcolor; // Beard color -/*0068*/ uint8_t is_pet; // 0=no, 1=yes -/*0069*/ char suffix[32]; // Player's suffix (of Veeshan, etc.) -/*0101*/ uint8_t curHp; // Current hp -/*0102*/ uint8_t unknown0102[72]; -/*0174*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse,a -/*0175*/ uint8_t level; // Spawn Level -/*0176*/ uint32_t race; // Spawn race -/*0180*/ uint8_t class_; // Player's class -/*0181*/ char title[32]; // Title -/*0213*/ uint8_t beard; // Beard style (not totally, sure but maybe!) -/*0214*/ int8_t guildrank; // 0=normal, 1=officer, 2=leader -/*0215*/ uint8_t unknown0215[3]; -/*0218*/ union +/*0000*/ char title[32]; // Title +/*0032*/ uint8_t max_hp; // (name prolly wrong)takes on the value 100 for players, 100 or 110 for NPCs and 120 for PC corpses... +/*0033*/ uint8_t unknown0033; +/*0034*/ float runspeed; // Speed when running +/*0038*/ float walkspeed; // Speed when walking +/*0042*/ uint8_t is_npc; // 0=no, 1=yes +/*0043*/ uint8_t unknown0043[31]; +/*0074*/ uint8_t invis; // Invis (0=not, 1=invis) +/*0075*/ uint8_t unknown0075[41]; +/*0116*/ int8_t aa_title; // 0=none, 1=general, 2=archtype, 3=class +/*0117*/ uint8_t lfg; // 0=off, 1=lfg on +/*0118*/ uint8_t unknown0118[9]; +/*0127*/ char name[64]; // Player's Name +/*0191*/ uint8_t unknown0191[5]; +/*0196*/ uint8_t afk; // 0=no, 1=afk +/*0197*/ uint32_t spawnId; // Spawn Id +/*0201*/ uint8_t unknown0201; +/*0202*/ uint32_t guildID; // Current guild +/*0206*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse,a +/*0207*/ int8_t guildrank; // 0=normal, 1=officer, 2=leader +/*0208*/ uint8_t unknown0208[4]; +/*0212*/ uint8_t beard; // Beard style (not totally, sure but maybe!) +/*0213*/ uint8_t face; // Face id for players +/*0214*/ uint8_t unknown0214; +/*0215*/ char lastName[32]; // Player's Lastname +/*0247*/ uint8_t is_pet; // 0=no, 1=yes +/*0248*/ union { struct { - /*0218*/ uint32_t equip_helmet; // Equipment: Helmet Visual - /*0222*/ uint32_t equip_chest; // Equipment: Chest Visual - /*0226*/ uint32_t equip_arms; // Equipment: Arms Visual - /*0230*/ uint32_t equip_bracers; // Equipment: Bracers Visual - /*0234*/ uint32_t equip_hands; // Equipment: Hands Visual - /*0238*/ uint32_t equip_legs; // Equipment: Legs Visual - /*0242*/ uint32_t equip_feet; // Equipment: Feet Visual - /*0246*/ uint32_t equip_primary; // Equipment: Primary Visual - /*0250*/ uint32_t equip_secondary; // Equipment: Secondary Visual + /*0248*/ uint32_t equip_helmet; // Equipment: Helmet Visual + /*0252*/ uint32_t equip_chest; // Equipment: Chest Visual + /*0256*/ uint32_t equip_arms; // Equipment: Arms Visual + /*0260*/ uint32_t equip_bracers; // Equipment: Bracers Visual + /*0264*/ uint32_t equip_hands; // Equipment: Hands Visual + /*0268*/ uint32_t equip_legs; // Equipment: Legs Visual + /*0272*/ uint32_t equip_feet; // Equipment: Feet Visual + /*0276*/ uint32_t equip_primary; // Equipment: Primary Visual + /*0280*/ uint32_t equip_secondary; // Equipment: Secondary Visual } equip; - /*0218*/ uint32_t equipment[9]; // Array elements correspond to struct equipment above + /*0248*/ uint32_t equipment[9]; // Array elements correspond to struct equipment above }; -/*0254*/ uint8_t gm; // 0=no, 1=gm -/*0255*/ uint8_t eyecolor1; // Player's left eye color -/*0256*/ uint8_t unknown0254[28]; -/*0284*/ float size; // Model size -/*0288*/ signed deltaHeading:10;// change in heading +/*0284*/ uint8_t beardcolor; // Beard color +/*0285*/ uint8_t unknown0285[64]; +/*0349*/ signed deltaX:13; // change in x signed x:19; // x coord +/*0353*/ signed deltaHeading:10;// change in heading + signed z:19; // z coord signed padding0054:3; // ***Placeholder -/*0292*/ signed y:19; // y coord - signed animation:10; // animation +/*0357*/ signed deltaY:13; // change in y + signed padding0070:19; // ***Placeholder +/*0361*/ signed animation:10; // animation + signed y:19; // y coord signed padding0058:3; // ***Placeholder -/*0296*/ signed z:19; // z coord - signed deltaY:13; // change in y -/*0300*/ signed deltaX:13; // change in x - unsigned heading:12; // heading +/*0365*/ unsigned heading:12; // heading + signed deltaZ:13; // change in z signed padding0066:7; // ***Placeholder -/*0304*/ signed deltaZ:13; // change in z - signed padding0070:19; // ***Placeholder -/*0308*/ uint8_t unknown0259[4]; // ***Placeholder -/*0312*/ uint8_t haircolor; // Hair color -/*0313*/ union - { - struct - { - /*0313*/ Color_Struct color_helmet; // Color of helmet item - /*0317*/ Color_Struct color_chest; // Color of chest item - /*0321*/ Color_Struct color_arms; // Color of arms item - /*0325*/ Color_Struct color_bracers; // Color of bracers item - /*0329*/ Color_Struct color_hands; // Color of hands item - /*0333*/ Color_Struct color_legs; // Color of legs item - /*0337*/ Color_Struct color_feet; // Color of feet item - /*0341*/ Color_Struct color_primary; // Color of primary item - /*0345*/ Color_Struct color_secondary; // Color of secondary item - } equipment_colors; - /*0313*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above - }; -/*0349*/ uint32_t guildID; // Current guild -/*0353*/ uint8_t max_hp; // (name prolly wrong)takes on the value 100 for players, 100 or 110 for NPCs and 120 for PC corpses... -/*0354*/ uint8_t unknown0354[6]; -/*0360*/ char name[64]; // Player's Name -/*0424*/ uint8_t unknown0424[128]; -/*0552*/ uint8_t findable; // 0=can't be found, 1=can be found +/*0369*/ uint8_t unknown0369[129]; union { -/*0553*/ int8_t equip_chest2; // Second place in packet for chest texture (usually 0xFF in live packets) +/*0498*/ int8_t equip_chest2; // Second place in packet for chest texture (usually 0xFF in live packets) // Not sure why there are 2 of them, but it effects chest texture! -/*0553*/ int8_t mount_color; // drogmor: 0=white, 1=black, 2=green, 3=red +/*0498*/ int8_t mount_color; // drogmor: 0=white, 1=black, 2=green, 3=red // horse: 0=brown, 1=white, 2=black, 3=tan }; -/*0554*/ uint8_t anon; // 0=normal, 1=anon, 2=roleplay -/*0555*/ uint8_t unknown0555; -/*0556*/ uint8_t bodytype; // Bodytype -/*0557*/ uint8_t unknown0557[9]; -/*0566*/ int16_t deity; // Player's Deity -/*0568*/ uint8_t unknown0568[2]; -/*0570*/ uint8_t gender; // Gender (0=male, 1=female) -/*0571*/ uint8_t showhelm; // 0=no, 1=yes -/*0572*/ uint8_t lfg; // 0=off, 1=lfg on -/*0573*/ uint8_t unknown0573; -/*0574*/ float walkspeed; // Speed when walking -/*0578*/ float runspeed; // Speed when running -/*0582*/ +/*0499*/ uint8_t gender; // Gender (0=male, 1=female) +/*0500*/ uint8_t showhelm; // 0=no, 1=yes +/*0501*/ uint8_t helm; // Helm texture +/*0502*/ uint8_t unknown0502[135]; +/*0637*/ uint8_t eyecolor1; // Player's left eye color +/*0638*/ float size; // Model size +/*0642*/ uint8_t unknown0642[4]; +/*0646*/ uint8_t level; // Spawn Level +/*0647*/ uint8_t set_to_0xFF[8]; // ***Placeholder (all ff) +/*0655*/ uint8_t unknown0655[5]; +/*0660*/ uint8_t hairstyle; // Hair style +/*0661*/ uint32_t race; // Spawn race +/*0665*/ int16_t deity; // Player's Deity +/*0667*/ uint8_t unknown0667[3]; +/*0670*/ uint8_t findable; // 0=can't be found, 1=can be found +/*0671*/ uint8_t anon; // 0=normal, 1=anon, 2=roleplay +/*0672*/ uint8_t unknown0672[4]; +/*0676*/ char suffix[32]; // Player's suffix (of Veeshan, etc.) +/*0708*/ uint8_t curHp; // Current hp + +//wrong but compile +/*0709*/ uint8_t light; // Spawn's lightsource +/*0710*/ uint8_t gm; // 0=no, 1=gm +//end wrong +// + +/*0711*/ uint8_t unknown0711[2]; +/*0713*/ uint32_t petOwnerId; // If this is a pet, the spawn id of owner +/*0717*/ uint8_t bodytype; // Bodytype +/*0718*/ uint8_t unknown0718[8]; +/*0726*/ uint8_t haircolor; // Hair color +/*0727*/ uint8_t eyecolor2; // Left eye color +/*0728*/ uint8_t unknown0728[4]; +/*0732*/ uint8_t class_; // Player's class +/*0733*/ uint8_t unknown0733[4]; +/*0737*/ union + { + struct + { + /*0737*/ Color_Struct color_helmet; // Color of helmet item + /*0741*/ Color_Struct color_chest; // Color of chest item + /*0745*/ Color_Struct color_arms; // Color of arms item + /*0749*/ Color_Struct color_bracers; // Color of bracers item + /*0753*/ Color_Struct color_hands; // Color of hands item + /*0757*/ Color_Struct color_legs; // Color of legs item + /*0761*/ Color_Struct color_feet; // Color of feet item + /*0765*/ Color_Struct color_primary; // Color of primary item + /*0769*/ Color_Struct color_secondary; // Color of secondary item + } equipment_colors; + /*0737*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above + }; }; +/*0773*/ #if 0 /*122*/ uint8_t pvp; // 0=Not pvp,1=pvp @@ -1675,6 +1687,24 @@ /*0031*/ }; +// Starting with 2/21/2006, OP_Actions seem to come in pairs, duplicating +// themselves, with the second one with slightly more information. Maybe this +// has to do with buff blocking?? +struct actionAltStruct +{ +/*0000*/ uint16_t target; // Target ID +/*0002*/ uint16_t source; // SourceID +/*0004*/ uint8_t level; // Caster level +/*0005*/ uint8_t unknown0005[17]; // ***Placeholder +/*0022*/ uint8_t type; // Casts, Falls, Bashes, etc... +/*0023*/ int32_t damage; // Amount of Damage +/*0027*/ int16_t spell; // SpellID +/*0029*/ uint8_t unknown0029[2]; // ***Placeholder +/*0031*/ uint32_t unknown0031; +/*0035*/ uint8_t unknown0035[21]; +/*0056*/ +}; + /* ** client changes target struct ** Length: 4 Octets @@ -1978,19 +2008,19 @@ struct playerSpawnPosStruct { /*0000*/ uint16_t spawnId; // spawn id of the thing moving -/*0002*/ signed deltaHeading:10; // change in heading - signed x:19; // x coord - signed padding0002:3; // ***Placeholder -/*0006*/ signed y:19; // y coord - signed animation:10; // animation - signed padding0006:3; // ***Placeholder -/*0010*/ signed z:19; // z coord - signed deltaY:13; // change in y -/*0014*/ signed deltaX:13; // change in x - unsigned heading:12; // heading - signed padding0014:7; // ***Placeholder -/*0018*/ signed deltaZ:13; // change in z - signed padding0018:19; // ***Placeholder +/*0002*/ signed deltaY:13; // change in x + signed x:19; // x coord +/*0006*/ signed deltaHeading:10;// change in heading + signed z:19; // z coord + signed padding0006:3; // ***Placeholder +/*0010*/ signed deltaZ:13; // change in z + signed deltaX:13; // change in y + signed padding0010:6; // ***Placeholder +/*0014*/ signed animation:10; // animation + signed y:19; // y coord + signed padding0014:3; // ***Placeholder +/*0018*/ unsigned heading:12; // heading + signed padding0018:20; // ***Placeholder /*0022*/ }; @@ -2004,18 +2034,18 @@ { /*0000*/ uint16_t spawnId; // Player's spawn id /*0002*/ uint8_t unknown0002[2]; // ***Placeholder (update time counter?) -/*0004*/ float y; // y coord +/*0004*/ signed deltaHeading:10; // change in heading + signed padding0004:6; // ***Placeholder (mostly 1) +/*0006*/ uint8_t unknown0006[2]; // ***Placeholder /*0008*/ float deltaZ; // Change in z -/*0016*/ float deltaX; // Change in x -/*0012*/ float deltaY; // Change in y -/*0020*/ signed animation:10; // animation - signed deltaHeading:10; // change in heading - signed padding0020:12; // ***Placeholder (mostly 1) -/*0024*/ float x; // x coord -/*0028*/ float z; // z coord -/*0034*/ unsigned heading:12; // Directional heading - unsigned padding0004:4; // ***Placeholder -/*0032*/ uint8_t unknown0006[2]; // ***Placeholder +/*0012*/ float y; // y coord +/*0016*/ signed animation:10; // animation + unsigned heading:12; // Directional heading + unsigned padding0016:10; // ***Placeholder +/*0020*/ float x; // x coord +/*0024*/ float deltaX; // Change in x +/*0028*/ float deltaY; // Change in y +/*0032*/ float z; // z coord /*0036*/ }; Index: zones.h =================================================================== RCS file: /cvsroot/seq/showeq/src/zones.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- zones.h 14 Sep 2005 04:15:03 -0000 1.10 +++ zones.h 27 Feb 2006 23:16:48 -0000 1.11 @@ -376,31 +376,31 @@ { "corathusa", "Sporali Caverns" }, // 366 { "corathusb", "Corathus Lair" }, // 367 { "nektulosa", "Shadowed Grove" }, // 368 -{ NULL, NULL }, // 369 -{ NULL, NULL }, // 370 -{ NULL, NULL }, // 371 -{ NULL, NULL }, // 372 -{ NULL, NULL }, // 373 -{ NULL, NULL }, // 374 -{ NULL, NULL }, // 375 -{ NULL, NULL }, // 376 -{ NULL, NULL }, // 377 -{ NULL, NULL }, // 378 -{ NULL, NULL }, // 379 -{ NULL, NULL }, // 380 -{ NULL, NULL }, // 381 -{ NULL, NULL }, // 382 -{ NULL, NULL }, // 383 -{ NULL, NULL }, // 384 -{ NULL, NULL }, // 385 -{ NULL, NULL }, // 386 -{ NULL, NULL }, // 387 -{ NULL, NULL }, // 388 -{ NULL, NULL }, // 389 -{ NULL, NULL }, // 390 -{ NULL, NULL }, // 391 -{ NULL, NULL }, // 392 -{ NULL, NULL }, // 393 +{ "arcstone", "Arcstone"}, // 369 +{ "relic", "Relic"}, // 370 +{ "skylance", "Skylance"}, // 371 +{ "devastation", "The Devastation"}, // 372 +{ "devastationa", "The Seething Wall"}, // 373 +{ "rage", "Sverag, Stronghold of Rage"}, // 374 +{ "ragea", "Razorthorn, Tower of Sullon Zek"}, // 375 +{ "takishruins", "Ruins of Takish-Hiz"}, // 376 +{ "takishruinsa", "The Root of Ro"}, // 377 +{ "elddar", "The Elddar Forest"}, // 378 +{ "elddara", "Tunare's Shrine"}, // 379 +{ "theater", "Theater of Blood"}, // 380 +{ "theatera", "Deathknell, Tower of Dissonance"}, // 381 +{ "freeporteast", "Freeport East"}, // 382 +{ "freeportwest", "Freeport West"}, // 383 +{ "freeportsewers", "Freeport Sewers"}, // 384 +{ "freeportacademy", "Academy of Arcane Sciences"}, // 385 +{ "freeporttemple", "Temple of Marr"}, // 386 +{ "freeportmilitia", "Freeport Militia House"}, // 387 +{ "freeportarena", "Arena"}, // 388 +{ "freeportcityhall", "City Hall"}, // 389 +{ "freeporttheater", "Theater"}, // 390 +{ "freeporthall", "Hall of Truth"}, // 391 +{ "northro", "North Ro"}, // 392 +{ "southro", "South Ro"}, // 393 { NULL, NULL }, // 394 { NULL, NULL }, // 395 { NULL, NULL }, // 396 Index: zonemgr.cpp =================================================================== RCS file: /cvsroot/seq/showeq/src/zonemgr.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- zonemgr.cpp 13 Sep 2005 15:23:14 -0000 1.10 +++ zonemgr.cpp 27 Feb 2006 23:16:48 -0000 1.11 @@ -34,7 +34,7 @@ // EQPacket ZoneMgr isZoning // ---------- ------- -------- // zoneEntry(ClientZoneEntryStruct) zoneBegin() true -// zoneEntry(ServerZoneEntryStruct) zoneBegin(shortName) false +// PlayerProfile(charProfileStruct) zoneBegin(shortName) false // zoneNew(newZoneStruct) zoneEnd(shortName, longName) false // // Sequence of signals on when zoning from zone A to zone B @@ -43,7 +43,7 @@ // zoneChange(zoneChangeStruct, client) true // zoneChange(zoneChangeStruct, server) zoneChanged(shortName) true // zoneEntry(ClientZoneEntryStruct) zoneBegin() false -// zoneEntry(ServerZoneEntryStruct) zoneBegin(shortName) false +// PlayerProfile(charProfileStruct) zoneBegin(shortName) false // zoneNew(newZoneStruct) zoneEnd(shortName, longName) false // ZoneMgr::ZoneMgr(QObject* parent, const char* name) @@ -189,19 +189,9 @@ m_longZoneName = zoneLongNameFromID(player->zoneId); m_zone_exp_multiplier = defaultZoneExperienceMultiplier; m_zoning = false; - emit zoneBegin(m_shortZoneName); - - if (showeq_params->saveZoneState) - saveZoneState(); -} -void ZoneMgr::zoneEntryServer(const uint8_t* data, size_t len, uint8_t dir) -{ - const ServerZoneEntryStruct* zsentry = (const ServerZoneEntryStruct*)data; - m_zone_exp_multiplier = defaultZoneExperienceMultiplier; - m_zoning = false; emit zoneBegin(m_shortZoneName); - emit zoneBegin(zsentry, len, dir); + emit playerProfile(player); if (showeq_params->saveZoneState) saveZoneState(); Index: guildshell.h =================================================================== RCS file: /cvsroot/seq/showeq/src/guildshell.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- guildshell.h 29 Oct 2005 23:15:32 -0000 1.3 +++ guildshell.h 27 Feb 2006 23:16:47 -0000 1.4 @@ -43,6 +43,12 @@ QString classString() const; uint32_t guildRank() const { return m_guildRank; } const QString& guildRankString() const; + uint32_t bankRank() const { return m_banker; } + const QString& bankRankString() const; + uint32_t altRank() const { return m_alt; } + const QString& altRankString() const; + uint32_t memberRank() const { return m_fullmember; } + const QString& memberRankString() const; time_t lastOn() const { return m_lastOn; } const QString& publicNote() const { return m_publicNote; } uint16_t zoneId() const { return m_zoneId; } @@ -58,7 +64,8 @@ uint8_t m_guildTributeOn; // 0 = off, 1 = on uint8_t m_guildTributeDonated; time_t m_guildTributeLastDonation; - uint32_t m_unknown1; + uint32_t m_alt; // 0 = no, 1 = alt + uint32_t m_fullmember; // 0 = prospect, 1 = fullmember QString m_publicNote; uint16_t m_zoneId; uint16_t m_zoneInstance; |