void VendorManager::promptDestroyVendor(CreatureObject* player, TangibleObject* vendor) { DataObjectComponentReference* data = vendor->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) { error("Vendor has no data component"); return; } VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) { error("Vendor has wrong data component"); return; } if (vendorData->getOwnerId() != player->getObjectID()) return; SuiMessageBox* destroyBox = new SuiMessageBox(player, SuiWindowType::STRUCTURE_DESTROY_VENDOR_CONFIRM); destroyBox->setCallback(new DestroyVendorSuiCallback(player->getZoneServer())); destroyBox->setUsingObject(vendor); destroyBox->setPromptTitle("@player_structure:destroy_vendor_t"); //DestroyVendor? destroyBox->setPromptText("@player_structure:destroy_vendor_d"); destroyBox->setOkButton(true, "@yes"); destroyBox->setCancelButton(true, "@no"); player->getPlayerObject()->addSuiBox(destroyBox); player->sendMessage(destroyBox->generateMessage()); }
void VendorManager::handleUnregisterVendor(CreatureObject* player, TangibleObject* vendor) { Zone* zone = vendor->getZone(); if (zone == NULL) return; DataObjectComponentReference* data = vendor->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) { error("Vendor has no data component"); return; } VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) { error("Vendor has wrong data component"); return; } Locker locker(vendor); zone->unregisterObjectWithPlanetaryMap(vendor); vendorData->setRegistered(false); player->sendSystemMessage("@player_structure:unregister_vendor_not"); }
void VendorManager::destroyVendor(SceneObject* vendor) { DataObjectComponentReference* data = vendor->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) { error("Vendor has no data component"); return; } VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) { error("Vendor has wrong data component"); return; } ManagedReference<AuctionManager*> auctionManager = server->getZoneServer()->getAuctionManager(); if(auctionManager == NULL) { error("null auctionManager when deleting vendor"); return; } ManagedReference<AuctionsMap*> auctionsMap = auctionManager->getAuctionMap(); if(auctionsMap == NULL) { error("null auctionsMap"); return; } if (vendorData->isRegistered() && vendor->getZone() != NULL) { vendor->getZone()->unregisterObjectWithPlanetaryMap(vendor); } vendor->destroyObjectFromWorld(true); vendor->destroyObjectFromDatabase(true); auctionsMap->deleteTerminalItems(vendor); }
void VendorDataComponent::performVendorBark(SceneObject* target) { if (isOnStrike()) { return; } ManagedReference<CreatureObject*> vendor = cast<CreatureObject*>(parent.get().get()); if (vendor == NULL) return; ManagedReference<CreatureObject*> player = cast<CreatureObject*>(target); if (player == NULL || !player->isPlayerCreature()) return; resetLastBark(); addBarkTarget(target); EXECUTE_TASK_2(vendor, player, { Locker locker(vendor_p); VendorDataComponent* data = cast<VendorDataComponent*>(vendor_p->getDataObjectComponent()->get()); if (data == NULL) return; vendor_p->faceObject(player_p); vendor_p->updateDirection(Math::deg2rad(vendor_p->getDirectionAngle())); SpatialChat* chatMessage = NULL; String barkMessage = data->getAdPhrase(); if (barkMessage.beginsWith("@")) { StringIdChatParameter message; message.setStringId(barkMessage); message.setTT(player_p->getObjectID()); chatMessage = new SpatialChat(vendor_p->getObjectID(), player_p->getObjectID(), message, player_p->getObjectID(), Races::getMoodID(data->getAdMood()), 0); } else { UnicodeString uniMessage(barkMessage); chatMessage = new SpatialChat(vendor_p->getObjectID(), player_p->getObjectID(), uniMessage, player_p->getObjectID(), Races::getMoodID(data->getAdMood()), 0, 0); } vendor_p->broadcastMessage(chatMessage, true); vendor_p->doAnimation(data->getAdAnimation()); Reference<VendorReturnToPositionTask*> returnTask = new VendorReturnToPositionTask(vendor_p, data->getOriginalDirection()); vendor_p->addPendingTask("vendorreturn", returnTask, 3000); });
void VendorManager::handleRenameVendor(CreatureObject* player, TangibleObject* vendor, String& name) { if (vendor == NULL) return; Zone* zone = vendor->getZone(); if (zone == NULL) return; if (!isValidVendorName(name)) { player->sendSystemMessage("@player_structure:obscene"); promptRenameVendorTo(player, vendor); return; } DataObjectComponentReference* data = vendor->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) { error("Vendor has no data component"); return; } VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) { error("Vendor has wrong data component"); return; } Locker _locker(vendor); vendor->setCustomObjectName("Vendor: " + name, true); if (vendorData->isRegistered()) { vendorData->setRegistered(false); zone->unregisterObjectWithPlanetaryMap(vendor); player->sendSystemMessage("@player_structure:vendor_rename_unreg"); } else player->sendSystemMessage("@player_structure:vendor_rename"); }
void VendorManager::handleRegisterVendorCallback(CreatureObject* player, TangibleObject* vendor, const String& planetMapCategoryName) { Zone* zone = vendor->getZone(); if (zone == NULL) return; DataObjectComponentReference* data = vendor->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) { error("Vendor has no data component"); return; } VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) { error("Vendor has wrong data component"); return; } if (vendorData->isEmpty()) { player->sendSystemMessage("You cannot register an empty vendor."); return; } Reference<PlanetMapCategory*> planetMapCategory = TemplateManager::instance()->getPlanetMapCategoryByName("vendor"); Reference<PlanetMapCategory*> planetMapSubCategory = TemplateManager::instance()->getPlanetMapCategoryByName("vendor_" + planetMapCategoryName); if (planetMapCategory == NULL || planetMapSubCategory == NULL) return; Locker locker(vendor); vendor->setPlanetMapCategory(planetMapCategory); vendor->setPlanetMapSubCategory(planetMapSubCategory); vendorData->setRegistered(true); zone->registerObjectWithPlanetaryMap(vendor); player->sendSystemMessage("@player_structure:register_vendor_not"); }
void VendorManager::handleDisplayStatus(CreatureObject* player, TangibleObject* vendor) { if(vendor->getZone() == NULL) { error("NULL zone in VendorManager::handleDisplayStatus"); return; } DataObjectComponentReference* data = vendor->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) { error("Vendor has no data component"); return; } VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) { error("Vendor has wrong data component"); return; } ManagedReference<SuiListBox*> statusBox = new SuiListBox(player, SuiWindowType::STRUCTURE_VENDOR_STATUS); statusBox->setUsingObject(vendor); statusBox->setPromptTitle("@player_structure:vendor_status"); statusBox->setPromptText("Vendor Status"); ManagedReference<CreatureObject*> owner = server->getZoneServer()->getObject(vendorData->getOwnerId()).castTo<CreatureObject*>(); String ownerName; if (owner == NULL) ownerName = "NULL"; else ownerName = owner->getFirstName(); statusBox->addMenuItem("Owner: " + ownerName); int condition = (((float)vendor->getMaxCondition() - (float)vendor->getConditionDamage()) / (float)vendor->getMaxCondition()) * 100; statusBox->addMenuItem("Condition: " + String::valueOf(condition) + "%"); float secsRemaining = 0.f; if( vendorData->getMaint() > 0 ){ secsRemaining = (vendorData->getMaint() / vendorData->getMaintenanceRate())*3600; } statusBox->addMenuItem("Maintenance Pool: " + String::valueOf(vendorData->getMaint()) + "cr " + getTimeString( (uint32)secsRemaining ) ); statusBox->addMenuItem("Maintenance Rate: " + String::valueOf((int)vendorData->getMaintenanceRate()) + " cr/hr"); ManagedReference<AuctionManager*> auctionManager = server->getZoneServer()->getAuctionManager(); if(auctionManager == NULL) { error("null auction manager"); return; } ManagedReference<AuctionsMap*> auctionsMap = auctionManager->getAuctionMap(); if(auctionsMap == NULL) { error("null auctionsMap"); return; } String planet = vendor->getZone()->getZoneName(); String region = "@planet_n:" + vendor->getZone()->getZoneName(); ManagedReference<CityRegion*> regionObject = vendor->getCityRegion(); if(regionObject != NULL) region = regionObject->getRegionName(); TerminalListVector vendorList = auctionsMap->getVendorTerminalData(planet, region, vendor); uint32 itemsForSaleCount = 0; if(vendorList.size() > 0) { Reference<TerminalItemList*> list = vendorList.get(0); if (list != NULL) { for (int j = 0; j < list->size(); ++j) { ManagedReference<AuctionItem*> item = list->get(j); if (item == NULL) continue; int itemSize = item->getSize(); if (itemSize > 50) itemsForSaleCount += 50; else if (itemSize > 0) itemsForSaleCount += itemSize; else itemsForSaleCount++; } } } statusBox->addMenuItem("Number of Items For Sale: " + String::valueOf(itemsForSaleCount)); if (vendorData->isVendorSearchEnabled()) statusBox->addMenuItem("@player_structure:vendor_search_enabled"); else statusBox->addMenuItem("@player_structure:vendor_search_disabled"); statusBox->addMenuItem("\\#32CD32Vendor Operating Normally\\#."); player->getPlayerObject()->addSuiBox(statusBox); player->sendMessage(statusBox->generateMessage()); }
int CreateVendorSessionImplementation::initializeSession() { ManagedReference<CreatureObject*> player = this->player.get(); if (player == NULL) return 0; if (player->containsActiveSession(SessionFacadeType::CREATEVENDOR)) { player->sendSystemMessage("@player_structure:already_creating"); // You are already creating a vendor. return 0; } ManagedReference<PlayerObject*> ghost = player->getPlayerObject(); if (ghost == NULL) { cancelSession(); return 0; } if (ghost->getVendorCount() >= player->getSkillMod("manage_vendor")) { player->sendSystemMessage("@player_structure:full_vendors"); // You are already managing your maximum number of vendors. Fire someone or remove a terminal first! cancelSession(); return 0; } SortedVector<unsigned long long>* ownedVendors = ghost->getOwnedVendors(); for (int i = 0; i < ownedVendors->size(); i++) { ManagedReference<SceneObject*> vendor = player->getZoneServer()->getObject(ownedVendors->elementAt(i)); if (vendor == NULL) continue; DataObjectComponentReference* data = vendor->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) continue; VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) continue; if (!vendorData->isInitialized()) { player->sendSystemMessage("@player_structure:already_creating"); // You are already creating a vendor. cancelSession(); return 0; } } currentNode = VendorManager::instance()->getRootNode(); templatePath = ""; if (!currentNode->hasChildNode()) { cancelSession(); error("Vendor Root node has no children"); return 0; } int hiringMod = player->getSkillMod("hiring"); suiSelectVendor = new SuiListBox(player, SuiWindowType::STRUCTURE_CREATE_VENDOR); suiSelectVendor->setCallback(new CreateVendorSuiCallback(player->getZoneServer())); suiSelectVendor->setCancelButton(true, "@cancel"); suiSelectVendor->setPromptTitle(currentNode->getSuiDisplay() + "t"); suiSelectVendor->setPromptText(currentNode->getSuiDisplay() + "d"); currentNode->addChildrenToListBox(suiSelectVendor, hiringMod); player->getPlayerObject()->addSuiBox(suiSelectVendor); player->sendMessage(suiSelectVendor->generateMessage()); player->addActiveSession(SessionFacadeType::CREATEVENDOR, _this.getReferenceUnsafeStaticCast()); return 0; }
void CreateVendorSessionImplementation::createVendor(String& name) { ManagedReference<CreatureObject*> player = this->player.get(); Locker locker(player); if (!VendorManager::instance()->isValidVendorName(name)) { player->sendSystemMessage("@player_structure:obscene"); SuiInputBox* input = new SuiInputBox(player, SuiWindowType::STRUCTURE_NAME_VENDOR); input->setCallback(new NameVendorSuiCallback(player->getZoneServer())); input->setCancelButton(true, "@cancel"); input->setPromptTitle("@player_structure:name_t"); input->setPromptText("@player_structure:name_d"); player->sendMessage(input->generateMessage()); player->getPlayerObject()->addSuiBox(input); return; } ManagedReference<SceneObject*> inventory = player->getSlottedObject("inventory"); if (inventory == NULL) { cancelSession(); return; } ManagedReference<TangibleObject*> vendor; try { vendor = (player->getZoneServer()->createObject(templatePath.hashCode())).castTo<TangibleObject*>(); } catch (Exception& e) { error(e.getMessage()); } if (vendor == NULL) { error("could not create vendor " + templatePath); cancelSession(); return; } Locker clocker(vendor, player); if (!vendor->isVendor()) { error("could not create vendor " + templatePath); vendor->destroyObjectFromDatabase(true); cancelSession(); return; } vendor->createChildObjects(); if (inventory->isContainerFullRecursive()) { player->sendSystemMessage("@player_structure:create_failed"); vendor->destroyObjectFromDatabase(true); cancelSession(); return; } DataObjectComponentReference* data = vendor->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) { error("Invalid vendor, no data component: " + templatePath); player->sendSystemMessage("@player_structure:create_failed"); vendor->destroyObjectFromDatabase(true); cancelSession(); return; } VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) { error("Invalid vendor, no data component: " + templatePath); player->sendSystemMessage("@player_structure:create_failed"); vendor->destroyObjectFromDatabase(true); cancelSession(); return ; } vendorData->setOwnerId(player->getObjectID()); vendor->setCustomObjectName("Vendor: " + name, false); vendor->setContainerOwnerID(player->getObjectID()); vendor->setMaxCondition(1000, false); vendor->setConditionDamage(0, false); if(vendor->isCreatureObject()) { randomizeVendorLooks(cast<CreatureObject*>(vendor.get())); } if(!inventory->transferObject(vendor, -1, false)) { player->sendSystemMessage("@player_structure:create_failed"); vendor->destroyObjectFromDatabase(true); cancelSession(); return; } inventory->broadcastObject(vendor, true); player->getPlayerObject()->addVendor(vendor); player->sendSystemMessage("@player_structure:create_success"); cancelSession(); }
void VendorMenuComponent::fillObjectMenuResponse(SceneObject* sceneObject, ObjectMenuResponse* menuResponse, CreatureObject* player) { if(!sceneObject->isVendor()) return; if(sceneObject->isASubChildOf(player)) { menuResponse->addRadialMenuItem(14, 3, "@ui:destroy"); return; } PlayerObject* playerObject = player->getPlayerObject(); if (playerObject == NULL) return; DataObjectComponentReference* data = sceneObject->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) { return; } VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) { return; } bool owner = vendorData->getOwnerId() == player->getObjectID(); if(!owner && !playerObject->isPrivileged()) return; menuResponse->addRadialMenuItem(70, 3, "@player_structure:vendor_control"); if (!owner) { if (vendorData->isInitialized()) { menuResponse->addRadialMenuItemToRadialID(70, 71, 3, "@player_structure:vendor_status"); menuResponse->addRadialMenuItemToRadialID(70, 72, 3, "@player_structure:change_name"); } return; } if (!vendorData->isInitialized()) { menuResponse->addRadialMenuItemToRadialID(70, 79, 3, "@player_structure:vendor_init"); menuResponse->addRadialMenuItem(10, 3, "@ui_radial:item_pickup"); menuResponse->addRadialMenuItem(51, 1, "@ui_radial:item_rotate"); //Rotate menuResponse->addRadialMenuItemToRadialID(51, 52, 3, "@ui_radial:item_rotate_left"); //Rotate Left menuResponse->addRadialMenuItemToRadialID(51, 53, 3, "@ui_radial:item_rotate_right"); //Rotate Right } else { menuResponse->addRadialMenuItemToRadialID(70, 71, 3, "@player_structure:vendor_status"); menuResponse->addRadialMenuItemToRadialID(70, 73, 3, "@player_structure:pay_vendor_t"); menuResponse->addRadialMenuItemToRadialID(70, 74, 3, "@player_structure:withdraw_vendor_t"); if (vendorData->isVendorSearchEnabled()) menuResponse->addRadialMenuItemToRadialID(70, 75, 3, "@player_structure:disable_vendor_search"); else menuResponse->addRadialMenuItemToRadialID(70, 75, 3, "@player_structure:enable_vendor_search"); if(player->hasSkill("crafting_merchant_advertising_03")) { if (!vendorData->isRegistered()) menuResponse->addRadialMenuItemToRadialID(70, 76, 3, "@player_structure:register_vendor"); else menuResponse->addRadialMenuItemToRadialID(70, 76, 3, "@player_structure:unregister_vendor"); } if(player->hasSkill("crafting_merchant_advertising_01") && sceneObject->isCreatureObject()) { if (!vendorData->isAdBarkingEnabled()) menuResponse->addRadialMenuItemToRadialID(70, 77, 3, "@player_structure:vendor_areabarks_on"); else menuResponse->addRadialMenuItemToRadialID(70, 77, 3, "@player_structure:vendor_areabarks_off"); } } menuResponse->addRadialMenuItemToRadialID(70, 78, 3, "@player_structure:remove_vendor"); }
int VendorMenuComponent::handleObjectMenuSelect(SceneObject* sceneObject, CreatureObject* player, byte selectedID) { if (!sceneObject->isVendor()) return 0; DataObjectComponentReference* data = sceneObject->getDataObjectComponent(); if(data == NULL || data->get() == NULL || !data->get()->isVendorData()) { return 0; } VendorDataComponent* vendorData = cast<VendorDataComponent*>(data->get()); if(vendorData == NULL) { return 0; } ManagedReference<TangibleObject*> vendor = cast<TangibleObject*>(sceneObject); if(vendor == NULL) return 0; bool owner = vendorData->getOwnerId() == player->getObjectID(); if(!owner) { if (player->getPlayerObject()->isPrivileged()) { if (selectedID == 71) { VendorManager::instance()->handleDisplayStatus(player, vendor); return 0; } else if (selectedID == 72) { VendorManager::instance()->promptRenameVendorTo(player, vendor); return 0; } } return TangibleObjectMenuComponent::handleObjectMenuSelect(sceneObject, player, selectedID); } switch (selectedID) { case 71: { VendorManager::instance()->handleDisplayStatus(player, vendor); return 0; } case 73: { vendorData->payMaintanence(); return 0; } case 74: { vendorData->withdrawMaintanence(); return 0; } case 75: { if (vendorData->isVendorSearchEnabled()) { vendorData->setVendorSearchEnabled(false); player->sendSystemMessage("@player_structure:vendor_search_disabled"); } else { vendorData->setVendorSearchEnabled(true); player->sendSystemMessage("@player_structure:vendor_search_enabled"); } return 0; } case 76: { if(player->hasSkill("crafting_merchant_advertising_03")) { if (!vendorData->isRegistered()) VendorManager::instance()->sendRegisterVendorTo(player, vendor); else VendorManager::instance()->handleUnregisterVendor(player, vendor); } return 0; } case 77: { if(player->hasSkill("crafting_merchant_advertising_01") && vendor->isCreatureObject()) { if (!vendorData->isAdBarkingEnabled()) { if (player->containsActiveSession(SessionFacadeType::VENDORADBARKING)) { return 0; } ManagedReference<VendorAdBarkingSession*> session = new VendorAdBarkingSession(player, sceneObject); session->initializeSession(); } else { vendorData->setAdBarking(false); player->sendSystemMessage("@player_structure:areabarks_disabled"); } } return 0; } case 78: { VendorManager::instance()->promptDestroyVendor(player, vendor); return 0; } case 79: { if (player->getRootParent().get() != vendor->getRootParent().get()) { player->sendSystemMessage("@player_structure:vendor_not_in_same_building"); return 0; } if (vendorData->isInitialized()) { player->sendSystemMessage("@player_structure:vendor_already_initialized"); return 0; } player->sendSystemMessage("@player_structure:vendor_initialized"); vendorData->setInitialized(true); vendorData->setEmpty(); vendorData->runVendorUpdate(); return 0; } default: return 0; }; return 0; }