1: do not pick up the items to death and rebirth, will not disconnect the server.2: pick up items, death and rebirth, will disconnect the server.
Is there anyone who can help me?
Printable View
1: do not pick up the items to death and rebirth, will not disconnect the server.2: pick up items, death and rebirth, will disconnect the server.
Is there anyone who can help me?
The system is not completete ,
Respawn fast is not destroy player entity after respawn fast ( 2 same player is same game... ) ( You can see nametag same place after first dead player ) after player leave the server , disconeted all player in proximity
I think it should be the server side with the client's item data is not synchronized caused by disconnect.
But I do not know how to fix it
Want to get help
- - - Updated - - -
Do not pick up items, Respawn fast is normal.If you just pick up the items, Respawn fast, after a few seconds will automatically disconnect the server
hmm, check in sql log name DBG_SrvLogInfo this have cause disconnect.
The probleme is respawnfast , is not complete in server side
SQL log no error
- - - Updated - - -
Can you give me the complete "respawnfast"? Thank
- - - Updated - - -
- - - Updated - - -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; } } } }}
Respawnfast can work, but after a few seconds after the resurrection will disconnect
I think ur problem disconnect req. Remove dead player disconnect req.
However, if I do not pick up the item, the server will not be disconnected。
Only I picked up the project and was disconnected from the server after the resurrection
Look at logss. Kicked player's log.
Has been resolved, thank you