From: <eva...@us...> - 2007-01-20 19:52:22
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29763/src/server Modified Files: psserverchar.cpp adminmanager.cpp Log Message: Added 'NPCOWNED' flag for item instances. Index: psserverchar.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/psserverchar.cpp,v retrieving revision 1.436 retrieving revision 1.437 diff -C2 -d -r1.436 -r1.437 *** psserverchar.cpp 17 Jan 2007 21:47:42 -0000 1.436 --- psserverchar.cpp 20 Jan 2007 19:52:21 -0000 1.437 *************** *** 1400,1404 **** // No owner... Add item visible to everybody. ! if ( child->GetOwningCharacterID() == 0 ) { outgoing.AddContents( child->GetName(), child->GetImageName(), child->GetPurifyStatus(), child->GetLocInParent(), child->GetStackCount()); --- 1400,1404 ---- // No owner... Add item visible to everybody. ! if ( child->GetOwningCharacterID() == 0 && !item->GetIsNpcOwned()) { outgoing.AddContents( child->GetName(), child->GetImageName(), child->GetPurifyStatus(), child->GetLocInParent(), child->GetStackCount()); *************** *** 1406,1410 **** // The owner of the item is the player. ! else if ( child->GetOwningCharacterID() == client->GetCharacterData()->characterid ) { --- 1406,1411 ---- // The owner of the item is the player. ! else if ( child->GetOwningCharacterID() == client->GetCharacterData()->characterid && ! !item->GetIsNpcOwned()) { *************** *** 1421,1426 **** else { ! const char *icon = "/this/art/gui/slottaken_icon.png" ; ! outgoing.AddContents( child->GetName(), icon, child->GetPurifyStatus(), child->GetLocInParent(), -1); } } --- 1422,1427 ---- else { ! //const char *icon = "/this/art/gui/slottaken_icon.png" ; ! outgoing.AddContents( child->GetName(), child->GetImageName(), child->GetPurifyStatus(), child->GetLocInParent(), -1); } } *************** *** 2060,2063 **** --- 2061,2074 ---- else */ { + + // Verify the original container. Clients shouldn't be able to remove items from npc owned + // containers, but the check is only on the client side. + if (mesg.fromContainer >= 0) + { + psItem *fromContainer = FindContainer(fromClient, mesg.fromContainer, mesg.fromParentContainer); + if (fromContainer && fromContainer->GetIsNpcOwned() && fromClient->GetSecurityLevel() <= 29) + return; + } + switch ( mesg.toContainer ) { *************** *** 2121,2124 **** --- 2132,2140 ---- if ( toContainer ) { + // Verify the owner of the target container. Players are not allowed to put + // items into NPC owned containers like bookshelfs. + if (toContainer->GetIsNpcOwned() && fromClient->GetSecurityLevel() <= 29) + break; + // Check range ignoring Y co-ordinate if ( toContainer->GetGemObject() && Index: adminmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/adminmanager.cpp,v retrieving revision 1.357 retrieving revision 1.358 diff -C2 -d -r1.357 -r1.358 *** adminmanager.cpp 20 Jan 2007 13:38:25 -0000 1.357 --- adminmanager.cpp 20 Jan 2007 19:52:21 -0000 1.358 *************** *** 4241,4244 **** --- 4241,4250 ---- psserver->SendSystemInfo(me->clientnum,"%s is now %s",item->GetName(),(onoff)?"transient":"non-transient"); } + else if (msg.action == "npcowned") + { + item->SetIsNpcOwned(onoff); + psserver->SendSystemInfo(me->clientnum, "%s is now %s", + item->GetName(), onoff ? "npc owned" : "not npc owned"); + } // TODO: Add more flags else |