From: DaveG <da...@us...> - 2005-10-23 12:57:37
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15037/src/server Modified Files: adminmanager.cpp adminmanager.h gem.cpp gem.h Log Message: Created /morph command Index: adminmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/adminmanager.cpp,v retrieving revision 1.209 retrieving revision 1.210 diff -C2 -d -r1.209 -r1.210 *** adminmanager.cpp 21 Oct 2005 11:34:44 -0000 1.209 --- adminmanager.cpp 23 Oct 2005 12:57:24 -0000 1.210 *************** *** 452,455 **** --- 452,459 ---- Modify(me,msg,client); } + else if (msg.command == "/morph") + { + Morph(me,msg,client,targetclient); + } else if (msg.command == "/setskill") { *************** *** 1417,1420 **** --- 1421,1425 ---- commandList.Append( "<command name='/setskill' />" ); commandList.Append( "<command name='/setattribute' />" ); + commandList.Append( "<command name='/morph' />" ); case GM_LEVEL_2: commandList.Append( "<command name='/impersonate' />" ); *************** *** 3337,3340 **** --- 3342,3374 ---- } + void AdminManager::Morph(MsgEntry* me, psAdminCmdMessage& msg, Client *client, Client *target) + { + // Check to see if this client has admin level access + if ( client->GetSecurityLevel() < GM_LEVEL_3 ) + { + psserver->SendSystemError(me->clientnum, "Access denied. Only a GM level 3 can morph players."); + return; + } + + if (!target) + return; + + if (msg.mesh == "reset") + { + if ( target->GetActor()->ResetMesh() ) + psserver->SendSystemInfo(me->clientnum,"Resetting mesh for %s", target->GetActor()->GetName() ); + else + psserver->SendSystemError(me->clientnum,"Error resetting mesh for %s!", target->GetActor()->GetName() ); + + } + else + { + if ( target->GetActor()->SetMesh(msg.mesh) ) + psserver->SendSystemInfo(me->clientnum,"Setting mesh for %s to %s", target->GetActor()->GetName(), msg.mesh.GetData() ); + else + psserver->SendSystemError(me->clientnum,"Error setting mesh %s!", msg.mesh.GetData() ); + } + } + void AdminManager::ViewAllObjects(MsgEntry* me, psAdminCmdMessage& msg, Client* client) { *************** *** 3358,3360 **** client->GetActor()->UpdateProxList( true ); ! } \ No newline at end of file --- 3392,3394 ---- client->GetActor()->UpdateProxList( true ); ! } Index: adminmanager.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/adminmanager.h,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -d -r1.65 -r1.66 *** adminmanager.h 21 Oct 2005 11:34:44 -0000 1.65 --- adminmanager.h 23 Oct 2005 12:57:24 -0000 1.66 *************** *** 135,139 **** void Thunder(MsgEntry* me, psAdminCmdMessage& msg, Client *client); void Fog(MsgEntry* me, psAdminCmdMessage& msg, Client *client); ! /** Deletes a character from the database. Should be used with caution. * This function will also send out reasons why a delete failed. Possible --- 135,139 ---- void Thunder(MsgEntry* me, psAdminCmdMessage& msg, Client *client); void Fog(MsgEntry* me, psAdminCmdMessage& msg, Client *client); ! /** Deletes a character from the database. Should be used with caution. * This function will also send out reasons why a delete failed. Possible *************** *** 190,193 **** --- 190,196 ---- void Modify(MsgEntry* me, psAdminCmdMessage& msg, Client* client); + /// Temporarily changes the mesh for a player + void Morph(MsgEntry* me, psAdminCmdMessage& msg, Client* client, Client *target); + void ViewAllObjects( MsgEntry* me, psAdminCmdMessage& msg, Client* client ); Index: gem.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/gem.cpp,v retrieving revision 1.265 retrieving revision 1.266 diff -C2 -d -r1.265 -r1.266 *** gem.cpp 23 Oct 2005 06:13:31 -0000 1.265 --- gem.cpp 23 Oct 2005 12:57:25 -0000 1.266 *************** *** 534,538 **** this->filename = filename; this->yRot = rotangle; ! proxlist = NULL; is_alive = false; --- 534,538 ---- this->filename = filename; this->yRot = rotangle; ! proxlist = NULL; is_alive = false; *************** *** 721,725 **** } ! int gemObject::FindAnimIndex(const char *name) { return psserver->cachemanager.GetMsgStrings()->Request(name); --- 721,725 ---- } ! int gemObject::FindAnimIndex(const char *name) { return psserver->cachemanager.GetMsgStrings()->Request(name); *************** *** 728,732 **** bool gemObject::InitProximityList(float radius,int clientnum) ! { proxlist = new ProximityList(cel->object_reg,this); --- 728,732 ---- bool gemObject::InitProximityList(float radius,int clientnum) ! { proxlist = new ProximityList(cel->object_reg,this); *************** *** 1393,1396 **** --- 1393,1398 ---- visible = true; + meshcache = factname; + last_sent_superclient_pos.Set(0,0,0); *************** *** 2849,2852 **** --- 2851,2875 ---- } + + bool gemActor::SetMesh(const char* meshname) + { + csString newmesh; + newmesh.Format("/planeshift/models/%s/%s.cal3d", meshname, meshname ); + + if ( psserver->vfs->Exists(newmesh) ) + { + factname = meshname; + filename = newmesh; + + if ( InitMesh(name,factname,filename,pos,yRot,sector,NULL) ) + { + UpdateProxList(true); + return true; + } + } + + return false; + } + //-------------------------------------------------------------------------------------- *************** *** 3176,3180 **** guildName, factname, ! filename, psChar->GetRaceInfo()->name, top, bottom,offset, --- 3199,3203 ---- guildName, factname, ! filename, psChar->GetRaceInfo()->name, top, bottom,offset, Index: gem.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/gem.h,v retrieving revision 1.126 retrieving revision 1.127 diff -C2 -d -r1.126 -r1.127 *** gem.h 18 Oct 2005 20:50:41 -0000 1.126 --- gem.h 23 Oct 2005 12:57:25 -0000 1.127 *************** *** 256,260 **** void GetPosition(csVector3& pos, iSector*& sector); int FindAnimIndex(const char *name); ! csArray< gemObject *> *GetObjectsInRange( float range ); --- 256,260 ---- void GetPosition(csVector3& pos, iSector*& sector); int FindAnimIndex(const char *name); ! csArray< gemObject *> *GetObjectsInRange( float range ); *************** *** 274,281 **** return (pos-oldPos).SquaredNorm() >= DEF_UPDATE_DIST*DEF_UPDATE_DIST; } ! /* * This value indicates the range that this entity would become visible ! * to other entities if no other modifiers were taken into consideration. ! * */ virtual float GetBaseAdvertiseRange() { return DEF_PROX_DIST; }; --- 274,280 ---- return (pos-oldPos).SquaredNorm() >= DEF_UPDATE_DIST*DEF_UPDATE_DIST; } ! /** * This value indicates the range that this entity would become visible ! * to other entities if no other modifiers were taken into consideration. */ virtual float GetBaseAdvertiseRange() { return DEF_PROX_DIST; }; *************** *** 458,461 **** --- 457,462 ---- bool visible; // is visible to clients ? + csString meshcache; + csArray<DamageHistory> dmgHistory; *************** *** 637,640 **** --- 638,644 ---- bool safefall; // no fall damage bool questtester; // no quest lockouts + + bool SetMesh(const char* meshname); + bool ResetMesh() { return SetMesh(meshcache); } }; |