int LootSchematicMenuComponent::handleObjectMenuSelect(SceneObject* sceneObject, CreatureObject* player, byte selectedID) { if (!sceneObject->isTangibleObject()) return 0; if (!player->isPlayerCreature()) return 0; if(selectedID == 50) { if (!sceneObject->isASubChildOf(player)) { player->sendSystemMessage("@loot_schematic:must_be_holding"); // You must be holding that in order to use it. return 0; } Reference<PlayerObject*> ghost = player->getSlottedObject("ghost").castTo<PlayerObject*>(); LootSchematicTemplate* schematicData = cast<LootSchematicTemplate*>(sceneObject->getObjectTemplate()); if (schematicData == NULL) { error("No LootSchematicTemplate for: " + String::valueOf(sceneObject->getServerObjectCRC())); return 0; } String skillNeeded = schematicData->getRequiredSkill(); if((!skillNeeded.isEmpty() && !player->hasSkill(skillNeeded))) { StringIdChatParameter* noSkill = NULL; noSkill = new StringIdChatParameter("@loot_schematic:not_enough_skill"); // You must have %TO skill in order to understand this. noSkill->setTO(skillNeeded); player->sendSystemMessage(*noSkill); return 0; } ManagedReference<DraftSchematic* > schematic = SchematicMap::instance()->get(schematicData->getTargetDraftSchematic().hashCode()); if (schematic == NULL) { player->sendSystemMessage("Error learning schematic, try again later"); error("Unable to create schematic: " + schematicData->getTargetDraftSchematic()); return 0; } if(ghost->addRewardedSchematic(schematic, SchematicList::LOOT, schematicData->getTargetUseCount(), true)) { TangibleObject* tano = cast<TangibleObject*>(sceneObject); if(tano != NULL) tano->decreaseUseCount(); player->sendSystemMessage("@loot_schematic:schematic_learned"); // You acquire a new crafting schematic! } return 0; } else return TangibleObjectMenuComponent::handleObjectMenuSelect(sceneObject, player, selectedID); return 0; }