mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2025-12-24 04:40:05 +00:00
Fix #205 - if a player times out a race, warp them back to the start
This commit is contained in:
@@ -371,21 +371,6 @@ static void exitGame(CNSocket* sock, CNPacketData* data) {
|
||||
sock->sendPacket(response, P_FE2CL_REP_PC_EXIT_SUCC);
|
||||
}
|
||||
|
||||
static WarpLocation* getRespawnPoint(Player *plr) {
|
||||
WarpLocation* best = nullptr;
|
||||
uint32_t curDist, bestDist = UINT32_MAX;
|
||||
|
||||
for (auto& targ : NPCManager::RespawnPoints) {
|
||||
curDist = sqrt(pow(plr->x - targ.x, 2) + pow(plr->y - targ.y, 2));
|
||||
if (curDist < bestDist && targ.instanceID == MAPNUM(plr->instanceID)) { // only mapNum needs to match
|
||||
best = &targ;
|
||||
bestDist = curDist;
|
||||
}
|
||||
}
|
||||
|
||||
return best;
|
||||
}
|
||||
|
||||
static void revivePlayer(CNSocket* sock, CNPacketData* data) {
|
||||
Player *plr = getPlayer(sock);
|
||||
WarpLocation* target = getRespawnPoint(plr);
|
||||
@@ -673,6 +658,21 @@ CNSocket *PlayerManager::getSockFromAny(int by, int id, int uid, std::string fir
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
WarpLocation *PlayerManager::getRespawnPoint(Player *plr) {
|
||||
WarpLocation* best = nullptr;
|
||||
uint32_t curDist, bestDist = UINT32_MAX;
|
||||
|
||||
for (auto& targ : NPCManager::RespawnPoints) {
|
||||
curDist = sqrt(pow(plr->x - targ.x, 2) + pow(plr->y - targ.y, 2));
|
||||
if (curDist < bestDist && targ.instanceID == MAPNUM(plr->instanceID)) { // only mapNum needs to match
|
||||
best = &targ;
|
||||
bestDist = curDist;
|
||||
}
|
||||
}
|
||||
|
||||
return best;
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
void PlayerManager::init() {
|
||||
|
||||
Reference in New Issue
Block a user