From: Keith F. <ven...@us...> - 2007-03-13 06:20:15
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9410/src/server Modified Files: psserverchar.cpp psserverchar.h Log Message: - Now moving an item to an equip slot now runs scripts and recalculates stats. Deequip probably still doesn't work. Index: psserverchar.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/psserverchar.cpp,v retrieving revision 1.472 retrieving revision 1.473 diff -C2 -d -r1.472 -r1.473 *** psserverchar.cpp 13 Mar 2007 04:50:27 -0000 1.472 --- psserverchar.cpp 13 Mar 2007 06:20:12 -0000 1.473 *************** *** 1890,1893 **** --- 1890,1898 ---- case CONTAINER_GEM_OBJECT: { + if (itemProposed->GetIsContainer()) + { + psserver->SendSystemError(fromClient->GetClientNum(),"You may not put a container in a container."); + return; + } psItem *parentItem=NULL; gemContainer *worldContainer=NULL; *************** *** 2020,2029 **** } printf("Ok!\n"); - - if ( msg.toContainer == CONTAINER_INVENTORY_BULK ) - psserver->GetCharManager()->SendOutEquipmentMessages( chr->GetActor(), srcSlot, itemProposed, psEquipmentMessage::DEEQUIP); - else - psserver->GetCharManager()->SendOutEquipmentMessages( chr->GetActor(), destSlot, itemProposed, psEquipmentMessage::EQUIP); - // Check for splitting stack --- 2025,2028 ---- *************** *** 2048,2051 **** --- 2047,2062 ---- } } + + // --------------------- Now equip scripts, etc. ------------------------- + // Handle the way equipment looks on the client character + if (msg.fromContainer == CONTAINER_INVENTORY_EQUIPMENT && msg.toContainer == CONTAINER_INVENTORY_BULK ) // De-equip + { + psserver->GetCharManager()->SendOutEquipmentMessages( chr->GetActor(), srcSlot, itemProposed, psEquipmentMessage::DEEQUIP); + } + else if (msg.fromContainer == CONTAINER_INVENTORY_BULK && msg.toContainer == CONTAINER_INVENTORY_EQUIPMENT) // To Equip + { + // psserver->GetCharManager()->SendOutEquipmentMessages( chr->GetActor(), destSlot, itemProposed, psEquipmentMessage::EQUIP); + PlaceItemInEquipment(chr,destSlot,itemProposed,false); + } break; } *************** *** 2335,2341 **** ! int SlotManager::PlaceItemInEquipment(psCharacter& character, INVENTORY_SLOT_NUMBER toSlot, psItem* item, bool test ) { ! Client* fromClient = character.GetActor()->GetClient(); int remainder = -1; csArray<INVENTORY_SLOT_NUMBER> fitsIn; --- 2346,2352 ---- ! int SlotManager::PlaceItemInEquipment(psCharacter *character, INVENTORY_SLOT_NUMBER toSlot, psItem* item, bool test ) { ! Client* fromClient = character->GetActor()->GetClient(); int remainder = -1; csArray<INVENTORY_SLOT_NUMBER> fitsIn; *************** *** 2359,2364 **** { // See if we're trying to drop an item into an equipped container ! if ( character.Inventory().Add(item, test, true, toSlot) ) ! return 0; // Otherwise, just push in the slot that was picked. --- 2370,2375 ---- { // See if we're trying to drop an item into an equipped container ! // if ( character.Inventory().Add(item, test, true, toSlot) ) ! // return 0; // Otherwise, just push in the slot that was picked. *************** *** 2370,2374 **** !(item->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_IS_EQUIP_STACKABLE)) { ! psserver->SendSystemError(character.GetActor()->GetClientID(),"Cannot equip %d %s's in a slot!", item->GetStackCount(), item->GetName() ); return -1; } --- 2381,2385 ---- !(item->GetBaseStats()->GetFlags() & PSITEMSTATS_FLAG_IS_EQUIP_STACKABLE)) { ! psserver->SendSystemError(character->GetActor()->GetClientID(),"Cannot equip %d %s's in a slot!", item->GetStackCount(), item->GetName() ); return -1; } *************** *** 2377,2392 **** { toSlot = fitsIn[idx]; ! psItem* toItem = character.Inventory().GetInventoryItem( 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 ( item->FitsInSlots( CacheManager::GetSingleton().slotMap[toSlot]) ) { ! if ( character.Inventory().EquipItem(item, toSlot, test) ) { if (test) return 0; psserver->GetCharManager()->SendOutEquipmentMessages( fromClient, toSlot, item, psEquipmentMessage::EQUIP); --- 2388,2404 ---- { toSlot = fitsIn[idx]; ! psItem* toItem = character->Inventory().GetInventoryItem( 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 || toItem == item) { if ( item->FitsInSlots( CacheManager::GetSingleton().slotMap[toSlot]) ) { ! if ( character->Inventory().EquipItem(item, toSlot, test) ) { if (test) return 0; + psserver->GetCharManager()->SendOutEquipmentMessages( fromClient, toSlot, item, psEquipmentMessage::EQUIP); *************** *** 2396,2400 **** if ( script.Length() > 0 ) { ! gemActor *actor = character.GetActor(); psserver->GetProgressionManager()->ProcessEvent(script, actor ); } --- 2408,2412 ---- if ( script.Length() > 0 ) { ! gemActor *actor = character->GetActor(); psserver->GetProgressionManager()->ProcessEvent(script, actor ); } *************** *** 2588,2592 **** #endif ! int SlotManager::Consume( psItem* item, psCharacter& charData, bool test ) { if ( item ) --- 2600,2604 ---- #endif ! int SlotManager::Consume( psItem* item, psCharacter *charData, bool test ) { if ( item ) *************** *** 2596,2600 **** if ( !script.IsEmpty() ) { ! gemActor *actor = charData.GetActor(); int count = item->GetStackCount(); --- 2608,2612 ---- if ( !script.IsEmpty() ) { ! gemActor *actor = charData->GetActor(); int count = item->GetStackCount(); Index: psserverchar.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/psserverchar.h,v retrieving revision 1.90 retrieving revision 1.91 diff -C2 -d -r1.90 -r1.91 *** psserverchar.h 13 Mar 2007 04:50:27 -0000 1.90 --- psserverchar.h 13 Mar 2007 06:20:12 -0000 1.91 *************** *** 62,66 **** * @param mesg The incoming message from the client for the movement. */ ! static int PlaceItemInEquipment( psCharacter& character, INVENTORY_SLOT_NUMBER toSlot, psItem* item, bool test ); /** Find a container based on id. --- 62,66 ---- * @param mesg The incoming message from the client for the movement. */ ! static int PlaceItemInEquipment( psCharacter *character, INVENTORY_SLOT_NUMBER toSlot, psItem* item, bool test ); /** Find a container based on id. *************** *** 111,115 **** * that this item has. */ ! static int Consume( psItem* item, psCharacter& charData, bool test ); }; --- 111,115 ---- * that this item has. */ ! static int Consume( psItem* item, psCharacter *charData, bool test ); }; |