void SlicingSessionImplementation::handleUseClamp() { ManagedReference<CreatureObject*> player = this->player.get(); ManagedReference<TangibleObject*> tangibleObject = this->tangibleObject.get(); if (player == NULL || tangibleObject == NULL) return; ManagedReference<SceneObject*> inventory = player->getSlottedObject("inventory"); Locker inventoryLocker(inventory); for (int i = 0; i < inventory->getContainerObjectsSize(); ++i) { ManagedReference<SceneObject*> sceno = inventory->getContainerObject(i); uint32 objType = sceno->getGameObjectType(); if (objType == SceneObjectType::MOLECULARCLAMP) { Locker locker(sceno); sceno->destroyObjectFromWorld(true); sceno->destroyObjectFromDatabase(true); player->sendSystemMessage("@slicing/slicing:used_clamp"); usedClamp = true; return; } } player->sendSystemMessage("@slicing/slicing:no_clamp"); }
bool SlicingSessionImplementation::hasPrecisionLaserKnife(bool removeItem) { ManagedReference<CreatureObject*> player = this->player.get(); ManagedReference<TangibleObject*> tangibleObject = this->tangibleObject.get(); if (player == NULL) return 0; ManagedReference<SceneObject*> inventory = player->getSlottedObject("inventory"); if (inventory == NULL) return false; Locker inventoryLocker(inventory); for (int i = 0; i < inventory->getContainerObjectsSize(); ++i) { ManagedReference<SceneObject*> sceno = inventory->getContainerObject(i); uint32 objType = sceno->getGameObjectType(); if (objType == SceneObjectType::LASERKNIFE) { PrecisionLaserKnife* knife = cast<PrecisionLaserKnife*>( sceno.get()); if (removeItem) { Locker locker(knife); knife->useCharge(player); } return 1; } } return 0; }
SceneObject* CraftingStationImplementation::findCraftingTool(CreatureObject* player) { ManagedReference<SceneObject*> inventory = player->getSlottedObject( "inventory"); Locker inventoryLocker(inventory); SceneObject* craftingTool = NULL; for (int i = 0; i < inventory->getContainerObjectsSize(); ++i) { SceneObject* object = inventory->getContainerObject(i); if (object != NULL && object->isCraftingTool()) { CraftingTool* tool = cast<CraftingTool*>( object); if(!tool->isReady()) continue; int toolType = tool->getToolType(); if (toolType == type) { return object; } if (toolType == CraftingTool::JEDI && type == CraftingTool::WEAPON) { craftingTool = object; } } } return craftingTool; }
void SlicingSessionImplementation::useClampFromInventory(SlicingTool* clamp) { ManagedReference<CreatureObject*> player = this->player.get(); ManagedReference<TangibleObject*> tangibleObject = this->tangibleObject.get(); if (clamp == NULL || clamp->getGameObjectType() != SceneObjectType::MOLECULARCLAMP) return; ManagedReference<SceneObject*> inventory = player->getSlottedObject("inventory"); Locker inventoryLocker(inventory); //inventory->removeObject(clamp, true); clamp->destroyObjectFromWorld(true); player->sendSystemMessage("@slicing/slicing:used_clamp"); usedClamp = true; //if (player->hasSuiBox(slicingSuiBox->getBoxID())) // player->closeSuiWindowType(SuiWindowType::SLICING_MENU); }
void SlicingSessionImplementation::handleUseFlowAnalyzer() { ManagedReference<CreatureObject*> player = this->player.get(); ManagedReference<TangibleObject*> tangibleObject = this->tangibleObject.get(); if (player == NULL || tangibleObject == NULL) return; ManagedReference<SceneObject*> inventory = player->getSlottedObject("inventory"); Locker inventoryLocker(inventory); for (int i = 0; i < inventory->getContainerObjectsSize(); ++i) { ManagedReference<SceneObject*> sceno = inventory->getContainerObject(i); uint32 objType = sceno->getGameObjectType(); if (objType == SceneObjectType::FLOWANALYZER) { SlicingTool* node = cast<SlicingTool*>( sceno.get()); nodeCable = node->calculateSuccessRate(); if (nodeCable) // PASSED nodeCable = firstCable; else if (nodeCable == firstCable) { // Failed but the cables are Correct if (firstCable) nodeCable = 0; // Failed - Make the Cable incorrect } Locker locker(sceno); sceno->destroyObjectFromWorld(true); sceno->destroyObjectFromDatabase(true); player->sendSystemMessage("@slicing/slicing:used_node"); usedNode = true; return; } } player->sendSystemMessage("@slicing/slicing:no_node"); }
void SlicingSessionImplementation::handleContainerSlice() { ManagedReference<CreatureObject*> player = this->player.get(); ManagedReference<TangibleObject*> tangibleObject = this->tangibleObject.get(); if (tangibleObject == NULL || player == NULL) return; ManagedReference<SceneObject*> inventory = player->getSlottedObject("inventory"); if (inventory == NULL) return; Locker inventoryLocker(inventory); LootManager* lootManager = player->getZoneServer()->getLootManager(); if (tangibleObject->getGameObjectType() == SceneObjectType::PLAYERLOOTCRATE) { Reference<SceneObject*> containerSceno = player->getZoneServer()->createObject(STRING_HASHCODE("object/tangible/container/loot/loot_crate.iff"), 1); if (containerSceno == NULL) return; Locker clocker(containerSceno, player); Container* container = dynamic_cast<Container*>(containerSceno.get()); if (container == NULL) { containerSceno->destroyObjectFromDatabase(true); return; } if (System::random(10) != 4) lootManager->createLoot(container, "looted_container"); inventory->transferObject(container, -1); container->sendTo(player, true); if (inventory->hasObjectInContainer(tangibleObject->getObjectID())) { //inventory->removeObject(tangibleObject, true); tangibleObject->destroyObjectFromWorld(true); } tangibleObject->destroyObjectFromDatabase(true); } else if (tangibleObject->isContainerObject()) { Container* container = dynamic_cast<Container*>(tangibleObject.get()); if (container == NULL) return; container->setSliced(true); container->setLockedStatus(false); if(!container->isRelocking()) { relockEvent = new RelockLootContainerEvent(container); relockEvent->schedule(container->getLockTime()); } } else return; player->sendSystemMessage("@slicing/slicing:container_success"); }