void DroidStimpackModuleDataComponent::sendLoadUI(CreatureObject* player) { ManagedReference<SceneObject* > inventory = player->getSlottedObject("inventory"); if (inventory == NULL) return; ManagedReference<SuiListBox*> loader = new SuiListBox(player, SuiWindowType::DROID_LOAD_STIMPACK, SuiListBox::HANDLETWOBUTTON); loader->setPromptTitle("@pet/droid_modules:load_stimpack"); loader->setPromptText("@group:set_loot_type_text"); loader->setOkButton(true, "@ok"); loader->setCancelButton(true, "@cancel"); for (int i = 0; i < inventory->getContainerObjectsSize(); ++i) { SceneObject* item = inventory->getContainerObject(i); if (!item->isPharmaceuticalObject()) continue; // check it they have atleast 1 stim pack PharmaceuticalObject* pharma = cast<PharmaceuticalObject*>(item); if (pharma->isStimPack()) { StimPack* stim = cast<StimPack*>(pharma); if (stim->isClassA()) { String name; if (stim->getCustomObjectName().isEmpty()) { name = "@" + stim->getObjectNameStringIdFile() + ":" + stim->getObjectNameStringIdName(); } else { name = stim->getCustomObjectName().toString(); } loader->addMenuItem(name, stim->getObjectID()); } } } loader->setCallback(new LoadStimpackSuiCallback(getParent()->getZoneServer())); loader->setUsingObject(getDroidObject()); player->getPlayerObject()->addSuiBox(loader); player->sendMessage(loader->generateMessage()); }
int DroidStimpackModuleDataComponent::handleObjectMenuSelect(CreatureObject* player, byte selectedID, PetControlDevice* controller) { ManagedReference<DroidObject*> droid = getDroidObject(); DroidComponent* droidComponent = cast<DroidComponent*>(getParent()); if (droid == NULL || droidComponent == NULL) { player->sendSystemMessage("@pet/droid_modules:stimpack_error"); return 0; } if (selectedID == LOAD_STIMPACK) { Locker crossLoker(droid, player); ManagedReference<SceneObject*> inventory = player->getSlottedObject("inventory"); if (inventory == NULL) { player->sendSystemMessage("@pet/droid_modules:no_stimpacks"); return 0; } int foundStims = 0; for (int i = 0; i < inventory->getContainerObjectsSize(); ++i) { ManagedReference<SceneObject*> item = inventory->getContainerObject(i); if (!item->isPharmaceuticalObject()) continue; // check it they have atleast 1 stim pack PharmaceuticalObject* pharma = item.castTo<PharmaceuticalObject*>(); if (pharma->isStimPack()) { StimPack* stim = cast<StimPack*>(pharma); if (stim->isClassA()) { foundStims += 1; } } } if (foundStims == 0) { player->sendSystemMessage("@pet/droid_modules:no_stimpacks"); return 0; } else { sendLoadUI(player); return 0; } } else if (selectedID == REQUEST_STIMPACK) { // we need to check cooldown on droid if (droid->isDead() || droid->isIncapacitated() || player->isDead()) { return 0; } // Droid must have power if (!droid->hasPower()) { droid->showFlyText("npc_reaction/flytext","low_power", 204, 0, 0); // "*Low Power*" return 0; } if (droid->getPendingTask("droid_request_stimpack") != NULL) { player->sendSystemMessage("@pet/droid_modules:stimpack_not_ready"); return 0; } // Submit stimpack task Reference<Task*> task = new DroidStimpackTask( droid,player,controller->getCustomObjectName().toString() ); droid->addPendingTask("droid_request_stimpack", task, 1); // rte determines when it will fire it } return 0; }