int CraftingSessionImplementation::startSession() { // crafter and craftingTool locked already in initializeSession ManagedReference<CraftingTool*> craftingTool = this->craftingTool.get(); ManagedReference<CreatureObject*> crafter = this->crafter.get(); ManagedReference<PlayerObject*> crafterGhost = this->crafterGhost.get(); ManagedReference<CraftingStation*> craftingStation = this->craftingStation.get(); if(crafter == NULL || craftingTool == NULL || crafterGhost == NULL) { cancelSession(); return false; } /// Get current allowed complexity ManagedReference<PlayerObject*> playerObject = crafter->getPlayerObject(); int complexityLevel = craftingTool->getComplexityLevel(); if (craftingStation != NULL) complexityLevel = craftingStation->getComplexityLevel(); /// Get filtered schematic list based on tool type and complexity currentSchematicList.removeAll(); currentSchematicList = playerObject->filterSchematicList(crafter, craftingTool->getToolTabs(), complexityLevel); /// DPlay9 *********************************** PlayerObjectDeltaMessage9* dplay9 = new PlayerObjectDeltaMessage9(playerObject); dplay9->setExperimentationEnabled(craftingStation != NULL); dplay9->setCraftingState(1); if (craftingStation != NULL) dplay9->setClosestCraftingStation(craftingStation->getObjectID()); else dplay9->setClosestCraftingStation(0); dplay9->setExperimentationPoints(experimentationPointsTotal); dplay9->close(); crafter->sendMessage(dplay9); // End dplay9*********************************** /// Object Controller Message 102 - Schematic List ObjectControllerMessage* ocm = new ObjectControllerMessage( crafter->getObjectID(), 0x0B, 0x102); ocm->insertLong(craftingTool->getObjectID()); if (craftingStation != NULL) ocm->insertLong(craftingStation->getObjectID()); else ocm->insertLong(0); ocm->insertInt(currentSchematicList.size()); for (int i = 0; i < currentSchematicList.size(); ++i) { DraftSchematic* draftSchematic = currentSchematicList.get(i).get(); ocm->insertInt(draftSchematic->getClientObjectCRC()); ocm->insertInt(draftSchematic->getClientObjectCRC()); ocm->insertInt(draftSchematic->getToolTab()); // this number decides what tab the schematic goes in (ex: 4 = food tab in crafting window) } crafter->sendMessage(ocm); /// *********************************************** /// Reset session state state = 1; if(crafterGhost != NULL && crafterGhost->getDebug()) { crafter->sendSystemMessage("*** Starting new crafting session ***"); } return true; }