void ResourceManagerImplementation::givePlayerResource(CreatureObject* playerCreature, const String& restype, const int quantity) { ManagedReference<ResourceSpawn* > spawn = getResourceSpawn(restype); if(spawn == NULL) { playerCreature->sendSystemMessage("Selected spawn does not exist."); return; } ManagedReference<SceneObject*> inventory = playerCreature->getSlottedObject("inventory"); if(inventory != NULL && !inventory->hasFullContainerObjects()) { Locker locker(spawn); ResourceContainer* newResource = spawn->createResource(quantity); if(newResource != NULL) { spawn->extractResource("", quantity); Locker rlocker(newResource); if (inventory->transferObject(newResource, -1, true)) { inventory->broadcastObject(newResource, true); } else { newResource->destroyObjectFromDatabase(true); } } } }
void InstallationObjectImplementation::clearResourceHopper() { Time timeToWorkTill; if (resourceHopper.size() == 0) return; setOperating(false); //lets delete the containers from db for (int i = 0; i < resourceHopper.size(); ++i) { ResourceContainer* container = resourceHopper.get(i); if (container != NULL) { Locker locker(container); container->destroyObjectFromDatabase(true); } } InstallationObjectDeltaMessage7* inso7 = new InstallationObjectDeltaMessage7( _this.get()); inso7->updateHopper(); inso7->startUpdate(0x0D); resourceHopper.removeAll(inso7); inso7->updateActiveResourceSpawn(getActiveResourceSpawnID()); inso7->updateHopperSize(getHopperSize()); inso7->updateExtractionRate(getActualRate()); inso7->close(); broadcastToOperators(inso7); }
void ResourceManagerImplementation::removePowerFromPlayer(CreatureObject* player, uint32 power) { if (power == 0) return; SceneObject* inventory = player->getSlottedObject("inventory"); uint32 containerPower = 0; for (int i = 0; i < inventory->getContainerObjectsSize() && power > 0; ++i) { ManagedReference<SceneObject*> obj = inventory->getContainerObject(i); if (obj == NULL || !obj->isResourceContainer()) continue; ResourceContainer* rcno = cast<ResourceContainer*>( obj.get()); Locker locker(rcno); ManagedReference<ResourceSpawn*> spawn = rcno->getSpawnObject(); if (spawn == NULL || !spawn->isEnergy()) continue; int quantity = rcno->getQuantity(); int pe = spawn->getValueOf(CraftingManager::PE); // potential energy float modifier = MAX(1.0f, pe / 500.0f); containerPower = modifier * quantity; if (containerPower > power) { uint32 consumedUnits = (uint64) power / modifier; rcno->setQuantity(quantity - consumedUnits); ResourceContainerObjectDeltaMessage3* drcno3 = new ResourceContainerObjectDeltaMessage3(rcno); drcno3->updateQuantity(); drcno3->close(); player->sendMessage(drcno3); return; } else { rcno->destroyObjectFromWorld(true); rcno->destroyObjectFromDatabase(true); } power -= containerPower; } }
void InstallationObjectImplementation::destroyObjectFromDatabase(bool destroyContainedObjects) { StructureObjectImplementation::destroyObjectFromDatabase(destroyContainedObjects); if (!destroyContainedObjects) return; ManagedReference<SceneObject*> deed = getZoneServer()->getObject(deedObjectID); if (deed != NULL) { Locker locker(deed); deed->destroyObjectFromDatabase(true); } for (int i = 0; i < resourceHopper.size(); ++i) { ResourceContainer* container = resourceHopper.get(i); Locker locker(container); container->destroyObjectFromDatabase(true); } }