From: Andrew C. <ac...@us...> - 2004-06-17 00:39:51
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22326/src/server Modified Files: psserverchar.cpp Log Message: Update drag/drop to inventory doll to place item in any available slot from it's list of possible slots. Index: psserverchar.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/psserverchar.cpp,v retrieving revision 1.181 retrieving revision 1.182 diff -C2 -d -r1.181 -r1.182 *** psserverchar.cpp 10 Jun 2004 00:53:21 -0000 1.181 --- psserverchar.cpp 17 Jun 2004 00:39:34 -0000 1.182 *************** *** 246,291 **** } - /* - case psGUIInventoryMessage::DROP_ITEM: - { - psCharacter * charData=client->GetCharacterData(); - if ( !charData ) - return false; - - int slot = incomming.items[0].slot; - int count = incomming.items[0].stackcount; - - bool sendEquipmentMessage; - - csString slotName; - psItem* item = charData->DropItem( slotName, count, sendEquipmentMessage ); - - if ( item ) - { - psserver->GetEntityManager()->CreateItem(item); - - // Save the item's state as in the world (and not on the player) - item->Save(); - - if ( sendEquipmentMessage ) - { - //SendOutEquipmentMessages( client, - // slotName, - // item, - // psEquipmentMessage::DEEQUIP ); - } - - // play the 'item to ground' sound - csString itemSound( item->GetSound() ); - itemSound.Append(".drop"); - SendOutPlaySoundMessage( fromClient, itemSound ); - - // Update all client views - UpdateItemViews(fromClientNumber); - } - - break; - } - */ } --- 246,249 ---- *************** *** 1865,1897 **** case CONTAINER_INVENTORY_EQUIPMENT: { ! psItem* toItem = charData->GetItemInSlot( mesg.toSlot ); ! // If there is an item already here then this is not allowed for equipment. ! // The better thing would be to do a swap but that is more complex and ! // will be a future item. ! if ( toItem ) { ! ReplaceHolding(); } else ! { ! if ( holdingItem->FitsInSlots(psServer::cachemanager.slotMap[mesg.toSlot]) ) { ! charData->EquipItemInSlot(mesg.toSlot, holdingItem); ! psserver->GetCharManager()->SendOutEquipmentMessages( fromClient, mesg.toSlot, holdingItem, psEquipmentMessage::EQUIP); ! if ( mesg.toSlot == PSCHARACTER_SLOT_MIND ) ! psserver->SendSystemInfo(fromClient->GetClientNum(), "You are now envisioning %s.",(const char*)holdingItem->GetName()); ! ! csString itemSound( holdingItem->GetSound() ); ! itemSound.Append(".equip"); ! psserver->GetCharManager()->SendOutPlaySoundMessage(fromClient, itemSound); ! } ! else ! { ! ReplaceHolding(); } } break; } --- 1823,1866 ---- case CONTAINER_INVENTORY_EQUIPMENT: { ! ! csArray<int> fitsIn; ! ! if ( mesg.toSlot == -1 ) { ! fitsIn = holdingItem->GetBaseStats()->GetSlots(); } else ! fitsIn.Push( mesg.toSlot ); ! ! int toSlot = 0; ! bool placeFound = false; ! for ( int idx = 0; idx < fitsIn.Length(); idx++ ) ! { ! toSlot = fitsIn[idx]; ! psItem* toItem = charData->GetItemInSlot( toSlot ); ! // If there is an item already here then this is not allowed for equipment. ! // The better thing would be to do a swap but that is more complex and ! // will be a future item. ! if ( !toItem ) { ! if ( holdingItem->FitsInSlots( psServer::cachemanager.slotMap[toSlot]) ) ! { ! charData->EquipItemInSlot(toSlot, holdingItem); ! psserver->GetCharManager()->SendOutEquipmentMessages( fromClient, toSlot, holdingItem, psEquipmentMessage::EQUIP); ! if ( mesg.toSlot == PSCHARACTER_SLOT_MIND ) ! psserver->SendSystemInfo(fromClient->GetClientNum(), "You are now envisioning %s.",(const char*)holdingItem->GetName()); ! csString itemSound( holdingItem->GetSound() ); ! itemSound.Append(".equip"); ! psserver->GetCharManager()->SendOutPlaySoundMessage(fromClient, itemSound); ! return; ! } } } + + // if not spot was available then return item to where it came from. + ReplaceHolding(); break; } |