|
From: <cn...@us...> - 2021-02-18 17:45:40
|
Revision: 1145
http://sourceforge.net/p/seq/svn/1145
Author: cn187
Date: 2021-02-18 17:45:35 +0000 (Thu, 18 Feb 2021)
Log Message:
-----------
Fix guild tag display
* Adds OP_NewGuildInZone and OP_GuildsInZoneList opcodes.
* Persist guild tag info between sessions via guilds3.dat file
* Use previously-unknown guildServerID field in spawn and profile structs
to differentiate between the same guildID used on different servers.
Modified Paths:
--------------
showeq/branches/cn187_devel/conf/seqdef.xml
showeq/branches/cn187_devel/conf/zoneopcodes.xml
showeq/branches/cn187_devel/src/everquest.h
showeq/branches/cn187_devel/src/guild.cpp
showeq/branches/cn187_devel/src/guild.h
showeq/branches/cn187_devel/src/interface.cpp
showeq/branches/cn187_devel/src/map.cpp
showeq/branches/cn187_devel/src/player.cpp
showeq/branches/cn187_devel/src/s_everquest.h
showeq/branches/cn187_devel/src/spawn.cpp
showeq/branches/cn187_devel/src/spawn.h
showeq/branches/cn187_devel/src/spawnlistcommon.cpp
showeq/branches/cn187_devel/src/spawnshell.cpp
showeq/branches/cn187_devel/src/spawnshell.h
showeq/branches/cn187_devel/src/zonemgr.cpp
Modified: showeq/branches/cn187_devel/conf/seqdef.xml
===================================================================
--- showeq/branches/cn187_devel/conf/seqdef.xml 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/conf/seqdef.xml 2021-02-18 17:45:35 UTC (rev 1145)
@@ -2500,7 +2500,7 @@
" />
</property>
<property name="GuildsFile" >
- <string value="guilds2.dat" />
+ <string value="guilds3.dat" />
<comment>Location of file containing guild strings</comment>
</property>
<property name="GuildsDumpFile" >
Modified: showeq/branches/cn187_devel/conf/zoneopcodes.xml
===================================================================
--- showeq/branches/cn187_devel/conf/zoneopcodes.xml 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/conf/zoneopcodes.xml 2021-02-18 17:45:35 UTC (rev 1145)
@@ -535,6 +535,14 @@
<comment>Listing of all guilds. Can be triggered by /lfg search?</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
+ <opcode id="248a" name="OP_GuildsInZoneList" updated="01/20/21">
+ <comment>Listing of guild names present in the current zone. Generally seen on zoning</comment>
+ <payload dir="server" typename="guildsInZoneListStruct" sizechecktype="none"/>
+ </opcode>
+ <opcode id="14a2" name="OP_NewGuildInZone" updated="01/20/21">
+ <comment>An additional guild name has appeared in the current zone. Seen when a guilded player enters the current zone</comment>
+ <payload dir="server" typename="newGuildInZoneStruct" sizechecktype="none"/>
+ </opcode>
<opcode id="ffff" name="OP_LFGGetMatchesRequest" updated="11/28/12">
<comment>LFG/LFP client request - 16 bytes</comment>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
Modified: showeq/branches/cn187_devel/src/everquest.h
===================================================================
--- showeq/branches/cn187_devel/src/everquest.h 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/everquest.h 2021-02-18 17:45:35 UTC (rev 1145)
@@ -122,7 +122,7 @@
#define MAX_SPELLBOOK_SLOTS 800
#define MAX_GROUP_MEMBERS 6
#define MAX_BUFFS 42
-#define MAX_GUILDS 8192
+#define MAX_GUILDS 32768
#define MAX_AA 300
#define MAX_BANDOLIERS 20
#define MAX_POTIONS_IN_BELT 5
@@ -797,6 +797,7 @@
/*20210*/ uint8_t gm; // 0=no, 1=yes (guessing!)
/*20211*/ int8_t guildstatus; // 0=member, 1=officer, 2=guildleader
/*20212*/ uint8_t unknown20212[16]; // *** Placeholder
+/*20224*/ uint32_t guildServerID;
/*20228*/ uint32_t exp; // Current Experience
/*20232*/ uint8_t unknown20232[12]; // *** Placeholder
/*20244*/ uint8_t languages[MAX_KNOWN_LANGS]; // List of languages
@@ -1100,6 +1101,7 @@
/*0000*/ uint8_t holding;
/*0000*/ uint32_t deity;
/*0000*/ uint32_t guildID;
+/*0000*/ uint32_t guildServerID;
/*0000*/ uint32_t guildstatus; // 0=member, 1=officer, 2=leader, -1=not guilded
/*0000*/ uint8_t class_;
/*0000*/ uint8_t state; // stand state
@@ -2506,11 +2508,22 @@
struct newGuildInZoneStruct
{
-/*0000*/ uint8_t unknown0000[8]; // ***Placeholder
-/*0008*/ char guildname[56]; // Guildname
-/*0064*/
+/*0000*/ uint32_t guildId; // Guild ID
+/*0004*/ uint32_t serverID; // ***Placeholder
+/*0008*/ char guildname[0]; // Guild name, null terminated
+/*xxxx*/
};
+struct guildsInZoneListStruct
+{
+/*0000*/ uint32_t name_len; // length of player name
+/*0004*/ char name[16]; // player name of length name_len,
+ // no null terminator, max 16
+/*xxxx*/ uint32_t num_guilds; // number of guild names in this struct
+/*xxxx*/ newGuildInZoneStruct guilds[0];
+/*xxxx*/
+};
+
struct moneyUpdateStruct
{
/*0000*/ uint32_t spawnid; // ***Placeholder
Modified: showeq/branches/cn187_devel/src/guild.cpp
===================================================================
--- showeq/branches/cn187_devel/src/guild.cpp 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/guild.cpp 2021-02-18 17:45:35 UTC (rev 1145)
@@ -47,21 +47,102 @@
{
}
-QString GuildMgr::guildIdToName(uint16_t guildID)
+QString GuildMgr::guildIdToName(uint16_t guildID, uint16_t guildServerID)
{
- if (guildID >= m_guildMap.size())
- return "";
- return m_guildMap[guildID];
+ uint32_t key = guildServerID << 16 | guildID;
+ //unguilded PCs have a guild ID of 0
+ if (!guildID || !guildServerID | !m_guildList.count(key))
+ return "";
+ return m_guildList[key];
}
-void GuildMgr::worldGuildList(const uint8_t* data, size_t len)
+
+void GuildMgr::newGuildInZone(const uint8_t* data, size_t len)
{
- writeGuildList(data, len);
- readGuildList();
+ NetStream netStream(data, len);
+ QString guildName;
+ uint32_t size = 0; // to keep track of how much we're reading from the packet
+ uint32_t guildId = 0;
+ uint32_t guildServerId = 0;
+
+ guildId = netStream.readUInt32NC();
+ size += 4;
+
+ guildServerId = netStream.readUInt32NC();
+ size += 4;
+
+ uint32_t key = guildServerId << 16 | guildId;
+
+ guildName = netStream.readText();
+ if (guildName.length() && !m_guildList.count(key))
+ {
+ m_guildList[key] = guildName;
+ writeGuildList();
+ emit guildTagUpdated(guildId);
+ }
+ size += guildName.length() + 1; // include null in count
+
+ if (size != len)
+ seqWarn("newGuildInZone packet is not the expected length: %u != %u", size, len);
}
-void GuildMgr::writeGuildList(const uint8_t* data, size_t len)
+void GuildMgr::guildsInZoneList(const uint8_t* data, size_t len)
{
+ NetStream netStream(data, len);
+ QString guildName;
+ QString emptyName = "";
+ uint32_t size = 0; // to keep track of how much we're reading from the packet
+ uint32_t guildId = 0;
+ uint32_t guildServerId = 0;
+ uint32_t numGuilds = 0;
+
+ uint32_t nameLen = netStream.readUInt32NC();
+ size += 4;
+
+ // skip the player name to get to the guilds
+ netStream.skipBytes(nameLen);
+ size += nameLen;
+
+ numGuilds = netStream.readUInt32NC();
+ size += 4;
+
+ bool need_save = false;
+
+ while(!netStream.end())
+ {
+ guildId = netStream.readUInt32NC();
+ size += 4;
+
+ guildServerId = netStream.readUInt32NC();
+ size += 4;
+
+ uint32_t key = guildServerId << 16 | guildId;
+
+ guildName = netStream.readText();
+ if (guildName.length() && !m_guildList.count(key))
+ {
+ m_guildList[key] = guildName;
+ need_save = true;
+ emit guildTagUpdated(guildId);
+ }
+
+ size += guildName.length() + 1; // include null in count
+
+ if (size >= len)
+ break;
+ }
+
+ if (size != len)
+ seqWarn("guildsInZoneList packet is not the expected length: %u != %u", size, len);
+
+ if (need_save)
+ writeGuildList();
+
+}
+
+
+void GuildMgr::writeGuildList()
+{
QFile guildsfile(guildsFileName);
if (guildsfile.exists()) {
@@ -76,58 +157,16 @@
seqWarn("GuildMgr: Could not open %s for writing, unable to replace with server data!",
guildsFileName.toLatin1().data());
- QDataStream guildDataStream(&guildsfile);
+ QTextStream guildDataStream(&guildsfile);
- NetStream netStream(data,len);
- QString guildName;
- QString emptyName = "";
- uint32_t size = 0; // to keep track of how much we're reading from the packet
- uint32_t guildId = 0;
-
- for (guildId = 0; guildId < 20000; guildId++)
- m_guildList[guildId] = emptyName;
- guildId = 0;
-
- /*
- 0x48 in the packet starts the serialized list. See guildListStruct
- and worldGuildListStruct in everquest.h
- */
-
- // skip to the first guild in the list
- netStream.skipBytes(0x44);
- size += 0x44;
-
- while(!netStream.end())
+ for (auto itr = m_guildList.begin(); itr != m_guildList.end(); ++itr)
{
- guildId = netStream.readUInt32NC();
- size += 4; // four bytes for the guild ID
- netStream.skipBytes(4);
- size += 4; // four bytes added 11/16/2016
- guildName = netStream.readText();
-
- if(guildName.length())
- {
- m_guildList[guildId] = guildName;
-
- // add guild name length, plus one for the null character
- size += guildName.length() + 1;
- }
-
- if(size + 1 == len)
- break; // the end
+ if (itr->first == 0)
+ continue;
+ QString line = QString::number(itr->first) + "|" + itr->second.toLatin1();
+ guildDataStream << line.trimmed() << "\n";
}
- std::map<uint32_t, QString>::iterator it;
-
- for(it = m_guildList.begin(); it != m_guildList.end(); it++)
- {
- char szGuildName[64] = {0};
-
- strcpy(szGuildName, it->second.toLatin1().data());
- //seqDebug("GuildMgr::writeGuildList - add guild '%s' (%d)", szGuildName, it->first);
- guildDataStream.writeRawData(szGuildName, sizeof(szGuildName));
- }
-
guildsfile.close();
seqInfo("GuildMgr: New guildsfile written");
}
@@ -135,17 +174,23 @@
void GuildMgr::readGuildList()
{
QFile guildsfile(guildsFileName);
+ m_guildList.clear();
- m_guildMap.clear();
if (guildsfile.open(QIODevice::ReadOnly))
{
while (!guildsfile.atEnd())
{
- char szGuildName[64] = {0};
-
- guildsfile.read(szGuildName, sizeof(szGuildName));
- //seqDebug("GuildMgr::readGuildList - read guild '%s'", szGuildName);
- m_guildMap.push_back(QString::fromUtf8(szGuildName));
+ QByteArray line = guildsfile.readLine();
+ QList<QByteArray> line_parts = line.split('|');
+ if (line_parts.size() != 2)
+ {
+ seqWarn("GuildMgr::readGuildList - skipping malformed line");
+ continue;
+ }
+ uint32_t key = line_parts.at(0).toULong();
+ QString guildName = line_parts.at(1).trimmed();
+ m_guildList[key] = guildName;
+ emit guildTagUpdated(key & 0x0000ffff);
}
guildsfile.close();
@@ -174,10 +219,11 @@
return;
}
- for (unsigned int i =0 ; i < m_guildMap.size(); i++)
+ for (auto itr = m_guildList.begin(); itr != m_guildList.end(); ++itr)
{
- if (!m_guildMap[i].isNull())
- guildtext << i << "\t" << m_guildMap[i] << endl;
+ if (itr->first == 0)
+ continue;
+ guildtext << itr->first << "\t" << itr->second << endl;
}
guildsfile.close();
@@ -188,10 +234,10 @@
void GuildMgr::listGuildInfo()
{
- for (unsigned int i = 0; i < m_guildMap.size(); i++)
+ for (auto itr = m_guildList.begin(); itr != m_guildList.end(); ++itr)
{
- if (!m_guildMap[i].isNull())
- seqInfo("%d\t%s", i, m_guildMap[i].toAscii().data());
+ if (!itr->second.isNull())
+ seqInfo("%d\t%s", itr->first, itr->second.toAscii().data());
}
}
Modified: showeq/branches/cn187_devel/src/guild.h
===================================================================
--- showeq/branches/cn187_devel/src/guild.h 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/guild.h 2021-02-18 17:45:35 UTC (rev 1145)
@@ -47,19 +47,21 @@
~GuildMgr();
- QString guildIdToName(uint16_t);
+ QString guildIdToName(uint16_t, uint16_t);
public slots:
- void worldGuildList(const uint8_t*, size_t);
+ void newGuildInZone(const uint8_t* data, size_t len);
+ void guildsInZoneList(const uint8_t * data, size_t len);
void readGuildList();
void guildList2text(QString);
void listGuildInfo();
+ void writeGuildList();
+ signals:
+ void guildTagUpdated(uint32_t);
+
private:
- std::vector<QString> m_guildMap;
std::map<uint32_t, QString> m_guildList;
-
- void writeGuildList(const uint8_t*, size_t);
QString guildsFileName;
Modified: showeq/branches/cn187_devel/src/interface.cpp
===================================================================
--- showeq/branches/cn187_devel/src/interface.cpp 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/interface.cpp 2021-02-18 17:45:35 UTC (rev 1145)
@@ -525,6 +525,7 @@
pFileMenu->addAction("Sa&ve Map", m_mapMgr, SLOT(saveMap()), Qt::Key_F2);
pFileMenu->addAction("Save SOE Map", m_mapMgr, SLOT(saveSOEMap()));
pFileMenu->addAction("Reload Guilds File", m_guildmgr, SLOT(readGuildList()));
+ pFileMenu->addAction("Save Guilds File", m_guildmgr, SLOT(writeGuildList()));
pFileMenu->addAction("Add Spawn Category", this, SLOT(addCategory()),
Qt::ALT+Qt::Key_C);
pFileMenu->addAction("Rebuild SpawnList", this, SLOT(rebuildSpawnList()),
@@ -2010,13 +2011,24 @@
if (m_guildmgr)
{
+ /*
m_packet->connect2("OP_GuildList", SP_World, DIR_Server,
"worldGuildListStruct", SZC_None,
m_guildmgr,
SLOT(worldGuildList(const uint8_t*, size_t)));
+ */
+ m_packet->connect2("OP_GuildsInZoneList", SP_Zone, DIR_Server,
+ "guildsInZoneListStruct", SZC_None, m_guildmgr,
+ SLOT(guildsInZoneList(const uint8_t*, size_t)));
+
+ m_packet->connect2("OP_NewGuildInZone", SP_Zone, DIR_Server,
+ "newGuildInZoneStruct", SZC_None, m_guildmgr,
+ SLOT(newGuildInZone(const uint8_t*, size_t)));
+
connect(this, SIGNAL(guildList2text(QString)),
m_guildmgr, SLOT(guildList2text(QString)));
+
}
if (m_guildShell)
@@ -2579,6 +2591,9 @@
if (m_guildShell != 0)
delete m_guildShell;
+ if (m_guildmgr != 0)
+ delete m_guildmgr;
+
if (m_zoneMgr != 0)
delete m_zoneMgr;
Modified: showeq/branches/cn187_devel/src/map.cpp
===================================================================
--- showeq/branches/cn187_devel/src/map.cpp 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/map.cpp 2021-02-18 17:45:35 UTC (rev 1145)
@@ -4258,18 +4258,15 @@
if (spawn)
{
QString guild;
- if (spawn->guildID() < MAX_GUILDS)
- {
- if (!spawn->guildTag().isEmpty())
+ if (!spawn->guildTag().isEmpty())
guild.sprintf("<%s>", spawn->guildTag().toAscii().data());
- else
+ else if (spawn->guildID())
guild = QString::number(spawn->guildID());
- }
else
guild = " ";
QString hp;
-
+
if (spawn->HP() <= 0)
hp = "<= 0";
else
Modified: showeq/branches/cn187_devel/src/player.cpp
===================================================================
--- showeq/branches/cn187_devel/src/player.cpp 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/player.cpp 2021-02-18 17:45:35 UTC (rev 1145)
@@ -375,7 +375,8 @@
// Guild
setGuildID(player->guildID);
- setGuildTag(m_guildMgr->guildIdToName(guildID()));
+ setGuildServerID(player->guildServerID);
+ setGuildTag(m_guildMgr->guildIdToName(guildID(), guildServerID()));
emit guildChanged();
// Position
Modified: showeq/branches/cn187_devel/src/s_everquest.h
===================================================================
--- showeq/branches/cn187_devel/src/s_everquest.h 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/s_everquest.h 2021-02-18 17:45:35 UTC (rev 1145)
@@ -110,6 +110,7 @@
AddStruct(attack1Struct);
AddStruct(attack2Struct);
AddStruct(newGuildInZoneStruct);
+AddStruct(guildsInZoneListStruct);
AddStruct(moneyUpdateStruct);
AddStruct(memorizeSlotStruct);
AddStruct(cRunToggleStruct);
Modified: showeq/branches/cn187_devel/src/spawn.cpp
===================================================================
--- showeq/branches/cn187_devel/src/spawn.cpp 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/spawn.cpp 2021-02-18 17:45:35 UTC (rev 1145)
@@ -399,6 +399,7 @@
setHP(s->HP());
setMaxHP(s->maxHP());
setGuildID(s->guildID());
+ setGuildServerID(s->guildServerID());
setLevel(s->level());
for (int i = 0; i <= tLastCoreWearSlot; i++)
setEquipment(i, s->equipment(i));
@@ -433,6 +434,7 @@
setHP(s->curHp);
setMaxHP(100); //the client sets this to 100
setGuildID(s->guildID);
+ setGuildServerID(s->guildServerID);
setLevel(s->level);
for (int i = 0; i <= tLastCoreWearSlot; i++)
setEquipment(i, s->equipment[i]);
@@ -541,8 +543,11 @@
// set guildID
if (s->NPC == SPAWN_PLAYER || s->NPC == SPAWN_SELF)
+ {
setGuildID(s->guildID);
- else
+ setGuildServerID(s->guildServerID);
+ }
+ else
setGuildID(0xffff);
}
Modified: showeq/branches/cn187_devel/src/spawn.h
===================================================================
--- showeq/branches/cn187_devel/src/spawn.h 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/spawn.h 2021-02-18 17:45:35 UTC (rev 1145)
@@ -239,6 +239,7 @@
int32_t HP() const { return m_curHP; }
int32_t maxHP() const { return m_maxHP; }
uint16_t guildID() const { return m_guildID; }
+ uint16_t guildServerID() const { return m_guildServerID; }
QString guildTag() const { return m_guildTag; }
uint16_t petOwnerID() const { return m_petOwnerID; }
uint8_t light() const { return m_light; }
@@ -338,6 +339,7 @@
void setHP(int32_t HP) { m_curHP = HP; }
void setMaxHP(int32_t maxHP) { m_maxHP = maxHP; }
void setGuildID(uint16_t GuildID) { m_guildID = GuildID; }
+ void setGuildServerID(uint16_t GuildServerID) { m_guildServerID = GuildServerID; }
void setGuildTag(QString GuildTag) { m_guildTag = GuildTag; }
void setLevel(int level) { m_level = level; }
void setEquipment(uint8_t wearSlot, EquipStruct item)
@@ -378,6 +380,7 @@
int32_t m_curHP;
int32_t m_maxHP;
uint16_t m_guildID;
+ uint16_t m_guildServerID;
uint16_t m_deity;
int16_t m_deityTeam;
EquipStruct m_equipment[tNumWearSlots];
Modified: showeq/branches/cn187_devel/src/spawnlistcommon.cpp
===================================================================
--- showeq/branches/cn187_devel/src/spawnlistcommon.cpp 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/spawnlistcommon.cpp 2021-02-18 17:45:35 UTC (rev 1145)
@@ -209,13 +209,12 @@
{
setText(tSpawnColDeity, spawn->deityName());
setText(tSpawnColBodyType, spawn->typeString());
- if (spawn->guildID() < MAX_GUILDS)
- {
- if(!spawn->guildTag().isEmpty())
+ if (!spawn->guildTag().isEmpty())
setText(tSpawnColGuildID, spawn->guildTag());
- else
+ else if (spawn->guildID())
setText(tSpawnColGuildID, QString::number(spawn->guildID()));
- }
+ else
+ setText(tSpawnColGuildID, " ");
}
}
else if (changeType == tSpawnChangedALL)
Modified: showeq/branches/cn187_devel/src/spawnshell.cpp
===================================================================
--- showeq/branches/cn187_devel/src/spawnshell.cpp 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/spawnshell.cpp 2021-02-18 17:45:35 UTC (rev 1145)
@@ -142,6 +142,10 @@
connect(m_player, SIGNAL(changedID(uint16_t)),
this, SLOT(playerChangedID(uint16_t)));
+ // connect to guildmgr to receive notifications of guild tag updates
+ connect(m_guildMgr, SIGNAL(guildTagUpdated(uint32_t)),
+ this, SLOT(updateGuildTag(uint32_t)));
+
// restore the spawn list if necessary
if (showeq_params->restoreSpawns)
restoreSpawns();
@@ -248,6 +252,47 @@
return closest;
}
+void SpawnShell::updateGuildTag(uint32_t guildId)
+{
+ ItemIterator it(m_spawns);
+ Spawn* spawn;
+
+ while (it.hasNext())
+ {
+ it.next();
+
+ spawn = (Spawn*)it.value();
+ if (!spawn)
+ break;
+
+ if (guildId == spawn->guildID())
+ {
+ spawn->setGuildTag(m_guildMgr->guildIdToName(spawn->guildID(), spawn->guildServerID()));
+ spawn->updateLastChanged();
+ emit changeItem(spawn, tSpawnChangedALL);
+ }
+ }
+
+ ItemIterator pl(m_players);
+
+ while (pl.hasNext())
+ {
+ pl.next();
+
+ spawn = (Spawn*)pl.value();
+ if (!spawn)
+ break;
+
+ if (guildId == spawn->guildID())
+ {
+ spawn->setGuildTag(m_guildMgr->guildIdToName(spawn->guildID(), spawn->guildServerID()));
+ spawn->updateLastChanged();
+ emit changeItem(spawn, tSpawnChangedALL);
+ }
+ }
+}
+
+
Spawn* SpawnShell::findSpawnByName(const QString& name)
{
ItemIterator it(m_spawns);
@@ -686,7 +731,7 @@
spawn->holding = netStream.readUInt8();
spawn->deity = netStream.readUInt32NC();
spawn->guildID = netStream.readUInt32NC();
- netStream.skipBytes(4); /* new data in 11/16/2016 patch */
+ spawn->guildServerID = netStream.readUInt32NC();
/* spawn->guildstatus = netStream.readUInt32NC(); disappeared 11/14/2018 */
spawn->guildstatus = 0;
spawn->class_ = netStream.readUInt32NC();
@@ -879,10 +924,8 @@
updateRuntimeFilterFlags(spawn);
item->updateLastChanged();
- if (spawn->guildID() < MAX_GUILDS)
- spawn->setGuildTag(m_guildMgr->guildIdToName(spawn->guildID()));
- else
- spawn->setGuildTag("");
+ spawn->setGuildTag(m_guildMgr->guildIdToName(spawn->guildID(), spawn->guildServerID()));
+
if (!showeq_params->fast_machine)
item->setDistanceToPlayer(m_player->calcDist2DInt(*item));
else
@@ -898,10 +941,8 @@
updateRuntimeFilterFlags(spawn);
m_spawns.insert(s.spawnId, item);
- if (spawn->guildID() < MAX_GUILDS)
- spawn->setGuildTag(m_guildMgr->guildIdToName(spawn->guildID()));
- else
- spawn->setGuildTag("");
+ spawn->setGuildTag(m_guildMgr->guildIdToName(spawn->guildID(), spawn->guildServerID()));
+
if (!showeq_params->fast_machine)
item->setDistanceToPlayer(m_player->calcDist2DInt(*item));
else
@@ -1577,14 +1618,7 @@
updateRuntimeFilterFlags(corpse);
m_spawns.insert(corpse->id(), corpse);
- if (corpse->guildID() < MAX_GUILDS)
- {
- corpse->setGuildTag(m_guildMgr->guildIdToName(corpse->guildID()));
- }
- else
- {
- corpse->setGuildTag("");
- }
+ corpse->setGuildTag(m_guildMgr->guildIdToName(corpse->guildID(), corpse->guildServerID()));
emit addItem(corpse);
Modified: showeq/branches/cn187_devel/src/spawnshell.h
===================================================================
--- showeq/branches/cn187_devel/src/spawnshell.h 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/spawnshell.h 2021-02-18 17:45:35 UTC (rev 1145)
@@ -150,6 +150,8 @@
void saveSpawns(void);
void restoreSpawns(void);
+ void updateGuildTag(uint32_t guildId);
+
protected:
void refilterSpawns(spawnItemType type);
void refilterSpawnsRuntime(spawnItemType type);
Modified: showeq/branches/cn187_devel/src/zonemgr.cpp
===================================================================
--- showeq/branches/cn187_devel/src/zonemgr.cpp 2021-02-18 17:28:56 UTC (rev 1144)
+++ showeq/branches/cn187_devel/src/zonemgr.cpp 2021-02-18 17:45:35 UTC (rev 1145)
@@ -475,9 +475,10 @@
player->standState = netStream.readUInt16();
player->anon = netStream.readUInt16();
player->guildID = netStream.readUInt32NC();
+ player->guildServerID = netStream.readUInt32NC();
// Unknown
- netStream.skipBytes(14);
+ netStream.skipBytes(10);
player->platinum_bank = netStream.readUInt32NC();
player->gold_bank = netStream.readUInt32NC();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|