Hotfix to stop crashing the server.

This will need to be fixed properly; probably while we implement
chunking.
This commit is contained in:
dongresource 2020-09-17 21:22:31 +02:00
parent e79f179628
commit 001564a257
3 changed files with 14 additions and 9 deletions

View File

@ -210,5 +210,5 @@ public:
static void printPacket(CNPacketData *data, int type); static void printPacket(CNPacketData *data, int type);
virtual void newConnection(CNSocket* cns); virtual void newConnection(CNSocket* cns);
virtual void killConnection(CNSocket* cns); virtual void killConnection(CNSocket* cns);
virtual void onStep(); // called every 2 seconds virtual void onStep();
}; };

View File

@ -59,8 +59,6 @@ void MobManager::pcAttackNpcs(CNSocket *sock, CNPacketData *data) {
mob->appearanceData.iHP -= 100; mob->appearanceData.iHP -= 100;
std::cout << "mob health is now " << mob->appearanceData.iHP << std::endl;
if (mob->appearanceData.iHP <= 0) if (mob->appearanceData.iHP <= 0)
killMob(sock, mob); killMob(sock, mob);

View File

@ -57,22 +57,29 @@ void PlayerManager::removePlayer(CNSocket* key) {
PlayerView cachedView = players[key]; PlayerView cachedView = players[key];
// if players have them in their viewable lists, remove it // if players have them in their viewable lists, remove it
for (CNSocket* otherSock : players[key].viewable) { for (auto& pair : players) {
players[otherSock].viewable.remove(key); // gone if (pair.first == key)
continue;
PlayerView& otherPlayer = pair.second;
otherPlayer.viewable.remove(key); // gone
std::cout << "PlayerId = " << otherPlayer.plr->iID << " removed from " << otherPlayer.plr->iID << "'s viewable list" << std::endl;
// now send PC_EXIT packet // now send PC_EXIT packet
sP_FE2CL_PC_EXIT exitPacket; INITSTRUCT(sP_FE2CL_PC_EXIT, exitPacket);
exitPacket.iID = players[key].plr->iID; exitPacket.iID = players[key].plr->iID;
otherSock->sendPacket((void*)&exitPacket, P_FE2CL_PC_EXIT, sizeof(sP_FE2CL_PC_EXIT)); pair.first->sendPacket((void*)&exitPacket, P_FE2CL_PC_EXIT, sizeof(sP_FE2CL_PC_EXIT));
} }
std::cout << U16toU8(cachedView.plr->PCStyle.szFirstName) << " " << U16toU8(cachedView.plr->PCStyle.szLastName) << " has left!" << std::endl; std::cout << U16toU8(cachedView.plr->PCStyle.szFirstName) << " " << U16toU8(cachedView.plr->PCStyle.szLastName) << " (PlayerId = " << key->plr->iID << ") has left!" << std::endl;
std::cout << players.size() << " players" << std::endl;
key->plr = nullptr; key->plr = nullptr;
delete cachedView.plr; delete cachedView.plr;
players.erase(key); players.erase(key);
std::cout << players.size() << " players" << std::endl;
} }
void PlayerManager::updatePlayerPosition(CNSocket* sock, int X, int Y, int Z, int angle) { void PlayerManager::updatePlayerPosition(CNSocket* sock, int X, int Y, int Z, int angle) {