From: Ondrej H. <tan...@us...> - 2004-07-10 01:47:13
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26743/src/server Modified Files: psserverdr.cpp Log Message: - Reverted Khaki's change of psclientdr.cpp from Jun 28 that made fall damage calculations very inaccurate. - Fixed that if you made a few arc movements in mid-air, fall damage was calculated as if you fell from top of the first arc, not the last one. - When server receives DR message with sector name that is cannots resolve, it refuses it and teleports the player to his spawn, instead of crashing on NULL sector later. Index: psserverdr.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/psserverdr.cpp,v retrieving revision 1.60 retrieving revision 1.61 diff -C2 -d -r1.60 -r1.61 *** psserverdr.cpp 7 Jul 2004 16:01:58 -0000 1.60 --- psserverdr.cpp 10 Jul 2004 01:47:01 -0000 1.61 *************** *** 147,150 **** --- 147,158 ---- return; } + if (drmsg->sector == NULL) + { + Error2("Client sent the server DR message with unknown sector \"%s\" !", drmsg->sectorName.GetData()); + psserver->SendSystemInfo(me->clientnum, "Invalid sector sent to server - I am moving you to your spawning position."); + client->GetActor()->MoveToSpawnPos(); + return; + } + client->SetReady(true); *************** *** 156,180 **** actor->SetDRData(*drmsg); ! // fall damage: ! if (actor->IsFalling() && actor->pcmove->IsOnGround()) { ! HandleFallDamage(actor,me->clientnum, drmsg->pos.y); } ! if (drmsg->vel.y < -100) ! printf("drmsg->vel.y %f\n", drmsg->vel.y); ! ! ! // Starting to fall: ! if (!actor->IsFalling() && drmsg->vel.y < 0) { ! actor->FallBegan(drmsg->pos.y); } ! if (drmsg->pos.y < -500) { actor->Resurrect(); - //Client fell off the end of the world psserver->SendSystemInfo(me->clientnum, "You fell off the end of the world and died."); } --- 164,188 ---- actor->SetDRData(*drmsg); ! if (actor->IsFalling() && actor->pcmove->IsOnGround()) { ! HandleFallDamage(actor,me->clientnum, drmsg->pos.y); } ! // Update falling status ! if (drmsg->vel.y >= 0) { ! if (actor->IsFalling()) ! actor->FallEnded(); ! } ! else ! { ! if (!actor->IsFalling()) ! actor->FallBegan(drmsg->pos.y); } ! //Check if client fell off the end of the world if (drmsg->pos.y < -500) { actor->Resurrect(); psserver->SendSystemInfo(me->clientnum, "You fell off the end of the world and died."); } |