void CraftingManager::handleCraftCustomization(Object* object,Message* message) { PlayerObject* player = dynamic_cast<PlayerObject*>(object); CraftingSession* session = player->getCraftingSession(); BString itemName; uint8 hmmm1,hmmm2; uint32 amount,color; if(!session) return; player->setCraftingStage(4); message->getStringUnicode16(itemName); itemName.convert(BSTRType_ANSI); message->getUint8(hmmm1); message->getUint32(amount); message->getUint8(hmmm2); CustomizationList* cList; cList = session->getManufacturingSchematic()->getCustomizationList(); CustomizationList::iterator custIt = cList->begin(); uint32 i = 0; while((custIt != cList->end())&&(i < hmmm2)) { message->getUint32(color); message->getUint32(color); session->getItem()->setCustomization(static_cast<uint8>((*custIt)->cutomizationIndex),(uint16)color,3); i++; ++custIt; } int8 sql[550]; sprintf(sql, "INSERT INTO item_customization VALUES (%"PRIu64", %u, %u)",session->getItem()->getId(), session->getItem()->getCustomization(1), session->getItem()->getCustomization(2)); mDatabase->executeAsyncSql(sql); session->setProductionAmount(amount); session->customize(itemName.getAnsi()); }
bool MessageLib::sendBaselinesMSCO_7(ManufacturingSchematic* manSchem,PlayerObject* playerObject) { if(!(playerObject->isConnected())) return(false); Message* message; Message* finalMessage; ManufactureSlots* manSlots = manSchem->getManufactureSlots(); ManufactureSlots::iterator manSlotIt = manSlots->begin(); //ExperimentationProperties* exProp = manSchem->getExperimentationProperties(); //ExperimentationProperties::iterator epIt = exProp->begin(); ExperimentationPropertiesStore::iterator epStoreIt = manSchem->expPropStore.begin(); CustomizationList* custList = manSchem->getCustomizationList(); CustomizationList::iterator custIt = custList->begin(); //start with the messagebody mMessageFactory->StartMessage(); //object count mMessageFactory->addUint16(21); // slot description //SlotNameList // -1- mMessageFactory->addUint32(manSlots->size()); mMessageFactory->addUint32(manSchem->mUpdateCounter[0]); manSlotIt = manSlots->begin(); while(manSlotIt != manSlots->end()) { mMessageFactory->addString((*manSlotIt)->mDraftSlot->getComponentFile()); mMessageFactory->addUint32(0); mMessageFactory->addString((*manSlotIt)->mDraftSlot->getComponentName()); ++manSlotIt; } // slots filled //SlotContentsList // -2- mMessageFactory->addUint32(manSlots->size()); mMessageFactory->addUint32(manSchem->mUpdateCounter[1]); manSlotIt = manSlots->begin(); while(manSlotIt != manSlots->end()) { mMessageFactory->addUint32(0); ++manSlotIt; } // resources filled, all lists initially 0 // IngridientList // -3- mMessageFactory->addUint32(manSlots->size()); mMessageFactory->addUint32(manSchem->mUpdateCounter[2]); manSlotIt = manSlots->begin(); while(manSlotIt != manSlots->end()) { mMessageFactory->addUint32(0); ++manSlotIt; } // resources filled amounts, all lists initially 0 // QuantityList // -4- mMessageFactory->addUint32(manSlots->size()); mMessageFactory->addUint32(manSchem->mUpdateCounter[3]); manSlotIt = manSlots->begin(); while(manSlotIt != manSlots->end()) { mMessageFactory->addUint32(0); ++manSlotIt; } // SlotQualityList // is not used!!!!!!!!!!!!!! as quality is calculated clientside! // -5- mMessageFactory->addUint32(manSlots->size()); mMessageFactory->addUint32(manSchem->mUpdateCounter[4]); manSlotIt = manSlots->begin(); while(manSlotIt != manSlots->end()) { mMessageFactory->addUint32(0); ++manSlotIt; } // CleanSlotList // // -6- mMessageFactory->addUint32(manSlots->size()); mMessageFactory->addUint32(manSchem->mUpdateCounter[5]); manSlotIt = manSlots->begin(); while(manSlotIt != manSlots->end()) { mMessageFactory->addUint32((*manSlotIt)->mUnknown2); ++manSlotIt; } // SlotIndexList // // -7- manSchem->mUpdateCounter[6] *= 2; mMessageFactory->addUint32(manSlots->size()); mMessageFactory->addUint32(manSchem->mUpdateCounter[6]); manSlotIt = manSlots->begin(); uint32 index = 0; while(manSlotIt != manSlots->end()) { mMessageFactory->addUint32(index); index++; ++manSlotIt; } // IngredientsCounter //flowcontrol - 4 times number of slots for every update manSchem->setCounter(manSlots->size() * 4); mMessageFactory->addUint8(manSlots->size() * 4); // experimentation ///8 //we need to send them so that they are shown on assembly!!! mMessageFactory->addUint32(manSchem->expPropStore.size()); mMessageFactory->addUint32(manSchem->mUpdateCounter[8]); epStoreIt = manSchem->expPropStore.begin(); while(epStoreIt != manSchem->expPropStore.end()) { mMessageFactory->addString(BString("crafting")); mMessageFactory->addUint32(0); mMessageFactory->addString((*epStoreIt).second->mExpAttributeName); ++epStoreIt; } //9 //CurrentExperimentationValueList mMessageFactory->addUint32(manSchem->expPropStore.size()); //annoyingly the craftattributeslist is still zero at this time so we need to reinitialize them !!!! manSchem->mUpdateCounter[9] = manSchem->expPropStore.size(); mMessageFactory->addUint32(manSchem->mUpdateCounter[9]); epStoreIt = manSchem->expPropStore.begin(); while(epStoreIt != manSchem->expPropStore.end()) { mMessageFactory->addFloat(0);//(*epStoreIt)->mExpAttributeValue); (*epStoreIt).second->mExpAttributeValue = 0; (*epStoreIt).second->mExpAttributeValueOld = 0; ++epStoreIt; } // 10 //exp offset leave as 0 mMessageFactory->addUint32(manSchem->expPropStore.size()); //annoyingly the craftattributeslist is still zero at this time so we need to reinitialize them !!!! manSchem->mUpdateCounter[10] = manSchem->expPropStore.size(); mMessageFactory->addUint32(manSchem->mUpdateCounter[10]); epStoreIt = manSchem->expPropStore.begin(); while(epStoreIt != manSchem->expPropStore.end()) { mMessageFactory->addUint32(0);//(*epStoreIt)->mExpUnknown); ++epStoreIt; } //11 // bluebar / exp bar value mMessageFactory->addUint32(manSchem->expPropStore.size()); //annoyingly the craftattributeslist is still zero at this time so we need to reinitialize them !!!! manSchem->mUpdateCounter[11] = manSchem->expPropStore.size(); mMessageFactory->addUint32(manSchem->mUpdateCounter[11]); epStoreIt = manSchem->expPropStore.begin(); while(epStoreIt != manSchem->expPropStore.end()) { (*epStoreIt).second->mBlueBarSizeOld = 1.0; (*epStoreIt).second->mBlueBarSize = 1.0; mMessageFactory->addFloat((*epStoreIt).second->mBlueBarSize);// ++epStoreIt; } //12 (c) // max experimentation mMessageFactory->addUint32(manSchem->expPropStore.size()); //annoyingly the craftattributeslist is still zero at this time so we need to reinitialize them !!!! manSchem->mUpdateCounter[12] = manSchem->expPropStore.size(); mMessageFactory->addUint32(manSchem->mUpdateCounter[12]); epStoreIt = manSchem->expPropStore.begin(); while(epStoreIt != manSchem->expPropStore.end()) { (*epStoreIt).second->mMaxExpValue = 0; (*epStoreIt).second->mMaxExpValueOld = 0; mMessageFactory->addFloat(0);//(*epStoreIt)->mMaxExpValue); ++epStoreIt; } // 13 customization attribute name (d) uint32 custSize = custList->size(); mMessageFactory->addUint32(custSize); mMessageFactory->addUint32(custSize); custIt = custList->begin(); while(custIt != custList->end()) { mMessageFactory->addString((*custIt)->attribute); ++custIt; } // 14 customization default color mMessageFactory->addUint32(custSize); mMessageFactory->addUint32(custSize); custIt = custList->begin(); while(custIt != custList->end()) { mMessageFactory->addUint32((*custIt)->defaultValue); ++custIt; } // 15 palette start mMessageFactory->addUint32(custSize); mMessageFactory->addUint32(custSize); custIt = custList->begin(); while(custIt != custList->end()) { mMessageFactory->addUint32(0); ++custIt; } // 16 palette end mMessageFactory->addUint32(custSize); mMessageFactory->addUint32(custSize); custIt = custList->begin(); while(custIt != custList->end()) { mMessageFactory->addUint32((*custIt)->paletteSize); ++custIt; } // 17 customization counter mMessageFactory->addUint8(static_cast<uint8>(custSize)); mMessageFactory->addUint64(0); mMessageFactory->addUint32(0); mMessageFactory->addUint8(0); mMessageFactory->addUint8(1); message = mMessageFactory->EndMessage(); mMessageFactory->StartMessage(); mMessageFactory->addUint32(opBaselinesMessage); mMessageFactory->addUint64(manSchem->getId()); mMessageFactory->addUint32(opMSCO); mMessageFactory->addUint8(7); mMessageFactory->addUint32(message->getSize()); mMessageFactory->addData(message->getData(),message->getSize()); finalMessage = mMessageFactory->EndMessage(); message->setPendingDelete(true); (playerObject->getClient())->SendChannelA(finalMessage,playerObject->getAccountId(),CR_Client,5); return(true); }