PHP Code:
void obj_ServerPlayer::OnNetPacket(const PKT_C2S_ReviveFast_s& n)// Respawnfast{ if (loadout_->Alive == 0) { //r3dOutToLog("########## n.SpawnSelect %i\n", n.SpawnSelect); if (n.SpawnSelect == 0)// Respawn on Safezone { float minDst = 100000000000000.0f; r3dPoint3D ResPawnFastPos = r3dPoint3D(0,0,0); bool FoundSafezone = false; obj_ServerPostBox* PostBox = NULL; for( GameObject* obj = GameWorld().GetFirstObject(); obj; obj = GameWorld().GetNextObject(obj) ) { if(obj->Class->Name == "obj_PostBox") { float dst = (GetPosition() - obj->GetPosition()).Length(); if (dst < minDst) { FoundSafezone = true; minDst = dst; PostBox = (obj_ServerPostBox*)obj; ResPawnFastPos = obj->GetPosition(); } } } if (FoundSafezone == true) { r3dOutToLog("Respawn fast for %s\n", userName); if( !IsSwimming() && killedBy != obj_ServerGravestone::KilledBy_Unknown) { // Create the gravestone. obj_ServerGravestone* gravestone = (obj_ServerGravestone*)srv_CreateGameObject("obj_ServerGravestone", "obj_ServerGravestone", GetPosition()); gravestone->Init(this); } ReviveFast(); SetLatePacketsBarrier("teleport"); PKT_C2S_ReviveFast_s Revive; Revive.PlayerID = toP2pNetId(GetNetworkID()); gServerLogic.p2pBroadcastToAll(&Revive, sizeof(Revive), true); if (PostBox!=NULL) gServerLogic.admin_TeleportPlayer(this,u_GetRandom(ResPawnFastPos.x+30.0f,ResPawnFastPos.x-30.0f),u_GetRandom(ResPawnFastPos.z+30.0f,ResPawnFastPos.z-30.0f)); else gServerLogic.admin_TeleportPlayer(this,ResPawnFastPos.x,ResPawnFastPos.z); packetBarrierReason = ""; } else { AntiAbuseclickNSZ++; if (AntiAbuseclickNSZ >=7) { PKT_C2S_DisconnectReq_s n2; gServerLogic.p2pSendToPeer(peerId_, this, &n2, sizeof(n2)); gServerLogic.DisconnectPeer(peerId_, false, false, 0, "Abusive clicks on respawn button"); return; } PKT_C2S_ReviveFast_s nsfz; // no safezonez in map nsfz.SpawnSelect = 99; nsfz.PlayerID = toP2pNetId(GetNetworkID()); gServerLogic.p2pSendToPeer(peerId_, this, &nsfz, sizeof(nsfz)); /*PKT_C2S_DisconnectReq_s n2; gServerLogic.p2pSendToPeer(peerId_, this, &n2, sizeof(n2)); gServerLogic.DisconnectPeer(peerId_, false, "SafeZone not found, Disconnecting why the player is Death");*/ } } else if (n.SpawnSelect == 1) // respawn Proximity { float minDst = 100000000000000.0f; r3dPoint3D ResPawnFastPos = r3dPoint3D(0,0,0); obj_ServerPlayerSpawnPoint* SpawnPoint = NULL; for( GameObject* obj = GameWorld().GetFirstObject(); obj; obj = GameWorld().GetNextObject(obj) ) { if(obj->Class->Name == "obj_PlayerSpawnPoint") { float dst = (GetPosition() - obj->GetPosition()).Length(); if (dst < minDst && ((obj_ServerPlayerSpawnPoint*)obj)->m_NumSpawnPoints>0) { minDst = dst; SpawnPoint = (obj_ServerPlayerSpawnPoint*)obj; //ResPawnFastPos = obj->GetPosition(); } } } r3dOutToLog("Respawn fast for %s\n", userName); if( !IsSwimming() && killedBy != obj_ServerGravestone::KilledBy_Unknown) { // Create the gravestone. obj_ServerGravestone* gravestone = (obj_ServerGravestone*)srv_CreateGameObject("obj_ServerGravestone", "obj_ServerGravestone", GetPosition()); gravestone->Init(this); } ReviveFast(); SetLatePacketsBarrier("teleport"); PKT_C2S_ReviveFast_s Revive; Revive.PlayerID = toP2pNetId(GetNetworkID()); gServerLogic.p2pBroadcastToAll(&Revive, sizeof(Revive), true); if (SpawnPoint) { minDst = 100000000000000.0f; for (int i = 0; i < SpawnPoint->m_NumSpawnPoints; ++i) { r3dBoundBox spawnPtBB = SpawnPoint->m_SpawnPoints[i].GetDebugBBox(); float dst = (GetPosition() - spawnPtBB.Center()).Length(); if (dst < minDst) { minDst = dst; ResPawnFastPos = spawnPtBB.Center(); } } gServerLogic.admin_TeleportPlayer(this,ResPawnFastPos.x,ResPawnFastPos.z); } else { gServerLogic.admin_TeleportPlayer(this,GetPosition().x,GetPosition().z); } packetBarrierReason = ""; } else if (n.SpawnSelect == 2) // respawn group { if (groupID == 0) { AntiAbuseclickNSG++; if (AntiAbuseclickNSG >=7) { PKT_C2S_DisconnectReq_s n2; gServerLogic.p2pSendToPeer(peerId_, this, &n2, sizeof(n2)); gServerLogic.DisconnectPeer(peerId_, false,false,0, "Abusive clicks on respawn button"); return; } PKT_C2S_ReviveFast_s ngp; // no safezonez in map ngp.SpawnSelect = 98; ngp.PlayerID = toP2pNetId(GetNetworkID()); gServerLogic.p2pSendToPeer(peerId_, this, &ngp, sizeof(ngp)); packetBarrierReason = ""; return; } if (isGroupLeader == true) { r3dOutToLog("Respawn fast for %s\n", userName); if( !IsSwimming() && killedBy != obj_ServerGravestone::KilledBy_Unknown) { // Create the gravestone. obj_ServerGravestone* gravestone = (obj_ServerGravestone*)srv_CreateGameObject("obj_ServerGravestone", "obj_ServerGravestone", GetPosition()); gravestone->Init(this); } ReviveFast(); SetLatePacketsBarrier("teleport"); PKT_C2S_ReviveFast_s Revive; Revive.PlayerID = toP2pNetId(GetNetworkID()); gServerLogic.p2pBroadcastToAll(&Revive, sizeof(Revive), true); gServerLogic.admin_TeleportPlayer(this,u_GetRandom(GetPosition().x+60.0f,GetPosition().x-60.0f),u_GetRandom(GetPosition().z+60.0f,GetPosition().z-60.0f)); packetBarrierReason = ""; return; } /////////// for(int i=0; i<gServerLogic.curPlayers_; ++i) { obj_ServerPlayer* pl = gServerLogic.plrList_[i]; if(pl->groupID == groupID && pl->isGroupLeader == true) { r3dOutToLog("Respawn fast for %s\n", userName); if( !IsSwimming() && killedBy != obj_ServerGravestone::KilledBy_Unknown) { // Create the gravestone. obj_ServerGravestone* gravestone = (obj_ServerGravestone*)srv_CreateGameObject("obj_ServerGravestone", "obj_ServerGravestone", GetPosition()); gravestone->Init(this); } ReviveFast(); SetLatePacketsBarrier("teleport"); PKT_C2S_ReviveFast_s Revive; Revive.PlayerID = toP2pNetId(GetNetworkID()); gServerLogic.p2pBroadcastToAll(&Revive, sizeof(Revive), true); gServerLogic.admin_TeleportPlayer(this,u_GetRandom(pl->GetPosition().x+10.0f,pl->GetPosition().x-10.0f),u_GetRandom(pl->GetPosition().z+10.0f,pl->GetPosition().z-10.0f)); packetBarrierReason = ""; return; } } } }}