From: Luca P. <lpa...@us...> - 2006-04-05 07:57:35
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30895 Modified Files: actionmanager.cpp gem.cpp gem.h psserverchar.cpp Log Message: Temporary fix for action location targeting. It's just the first pass, needs more testing. Index: actionmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/actionmanager.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** actionmanager.cpp 28 Mar 2006 04:41:38 -0000 1.25 --- actionmanager.cpp 5 Apr 2006 07:57:24 -0000 1.26 *************** *** 668,671 **** --- 668,680 ---- client->SetTargetObject( action->GetGemObject() ); + // check if the object is a dummy or real + int instance_id = 0; + if (action->GetGemObject()) + instance_id = action->GetGemObject()->GetEntity()->GetID(); + + gemObject* realObject = psserver->GetEntityManager()->GetGEM()->FindObjectFromInstanceID( instance_id ); + + gemItem* realItem = dynamic_cast<gemItem*>(realObject); + psGUITargetUpdateMessage updateMessage( client->GetClientNum(), action->GetGemObject()->GetEntity()->GetID() ); updateMessage.SendMessage(); *************** *** 675,678 **** --- 684,691 ---- options |= psGUIInteractMessage::CLOSE; + if (realItem && realItem->IsContainer()) options |= psGUIInteractMessage::COMBINE; + if (realItem && realItem->IsPickable()) options |= psGUIInteractMessage::PICKUP; + if (realItem && realItem->IsLockable()) options |= psGUIInteractMessage::UNLOCK; + psGUIInteractMessage interactMsg( client->GetClientNum(), options ); interactMsg.SendMessage(); *************** *** 680,683 **** --- 693,698 ---- } + + void ActionManager::HandleScriptOperation( psActionLocation* action, Client *client ) { Index: gem.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/gem.cpp,v retrieving revision 1.336 retrieving revision 1.337 diff -C2 -d -r1.336 -r1.337 *** gem.cpp 5 Apr 2006 02:22:33 -0000 1.336 --- gem.cpp 5 Apr 2006 07:57:24 -0000 1.337 *************** *** 230,233 **** --- 230,268 ---- } + /** THIS AN HACK, USED IN psserverchar.cpp and actionmanager.cpp + * TO BE CHANGED ASAP FOR PERFORMANCE REASONS + */ + gemItem *GEMSupervisor::FindObjectFromInstanceID(PS_ID instance_id) + { + // Get all entities (gemObjects) + csHash<gemObject *>& gems = psserver->GetEntityManager()->GetGEM()->GetAllGEMS(); + + csHash<gemObject *>::GlobalIterator i(gems.GetIterator()); + gemObject* obj; + gemItem *foundgItem; + + // Iterate through each one + while ( i.HasNext() ) + { + obj = i.Next(); + if (obj) + { + gemItem *gItem = dynamic_cast<gemItem*>(obj); + if (gItem) + { + psItem *pItem = gItem->GetItem(); + + if ( pItem->GetUID() == instance_id ) + { + foundgItem = gItem; + break; + } + } + } + } + + return foundgItem; + } + PS_ID GEMSupervisor::FindItemID(psItem *item) { Index: gem.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/gem.h,v retrieving revision 1.155 retrieving revision 1.156 diff -C2 -d -r1.155 -r1.156 *** gem.h 5 Apr 2006 02:22:33 -0000 1.155 --- gem.h 5 Apr 2006 07:57:24 -0000 1.156 *************** *** 59,62 **** --- 59,63 ---- class psActionLocation; class MathScript; + class gemItem; struct psDBMoveVariant; *************** *** 114,117 **** --- 115,119 ---- gemObject *GetObjectFromEntityList(iCelEntityList *list,size_t i); gemObject *FindPlayerEntity(int player_id); + gemItem *FindObjectFromInstanceID(PS_ID instance_id); csPtr<iCelEntity> CreateEntity(gemObject *obj); Index: psserverchar.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/psserverchar.cpp,v retrieving revision 1.355 retrieving revision 1.356 diff -C2 -d -r1.355 -r1.356 *** psserverchar.cpp 8 Mar 2006 22:24:48 -0000 1.355 --- psserverchar.cpp 5 Apr 2006 07:57:24 -0000 1.356 *************** *** 158,194 **** if ( containerNode ) { ! //item = slotManager->FindItem( client, containerNode->GetAttributeValueAsInt( "ID" ), 0, 0 ); ! ! // if it's an 'Item' ! // Get psItem and check uid ! // set item = currentGem; ! ! // Get all entities (gemObjects) ! csHash<gemObject *>& gems = psserver->GetEntityManager()->GetGEM()->GetAllGEMS(); ! ! csHash<gemObject *>::GlobalIterator i(gems.GetIterator()); ! gemObject* obj; ! uint64 id = (uint64)containerNode->GetAttributeValueAsInt( "ID" ); ! ! // Iterate through each one ! while ( i.HasNext() ) ! { ! obj = i.Next(); ! if (obj) ! { ! gemItem *gItem = dynamic_cast<gemItem*>(obj); ! if (gItem) ! { ! ! psItem *pItem = gItem->GetItem(); ! if ( pItem->GetUID() == id ) ! { ! item = pItem; ! break; ! } ! } ! } ! } if ( !item ) --- 158,165 ---- if ( containerNode ) { ! gemObject* realObject = psserver->GetEntityManager()->GetGEM()->FindObjectFromInstanceID( instance_id ); ! gemItem* realItem = dynamic_cast<gemItem*>(realObject); ! psItem *pItem = realItem->GetItem(); if ( !item ) |