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 InstallationObjectImplementation::updateResourceContainerQuantity(ResourceContainer* container, int newQuantity, bool notifyClient) { Time timeToWorkTill; container->setQuantity(newQuantity, false, true); for (int i = 0; i < resourceHopper.size(); ++i) { ResourceContainer* cont = resourceHopper.get(i); if (cont == container) { InstallationObjectDeltaMessage7* inso7 = new InstallationObjectDeltaMessage7( _this.get()); inso7->updateHopper(); inso7->startUpdate(0x0D); if(container->getQuantity() == 0 && (!isOperating() || (isOperating() && i != 0))) resourceHopper.remove(i, inso7, 1); else resourceHopper.set(i, container, inso7, 1); inso7->updateHopperSize(getHopperSize()); inso7->updateExtractionRate(getActualRate()); inso7->close(); if (notifyClient) broadcastToOperators(inso7); else delete inso7; } } if(resourceHopper.size() == 0) setOperating(false); //broadcastToOperators(new InstallationObjectDeltaMessage7(_this.get())); }
void InstallationObjectImplementation::addResourceToHopper(ResourceContainer* container) { if (resourceHopper.contains(container)) return; Time timeToWorkTill; InstallationObjectDeltaMessage7* inso7 = new InstallationObjectDeltaMessage7( _this.get()); inso7->updateHopper(); inso7->startUpdate(0x0D); resourceHopper.add(container, inso7, 1); inso7->close(); broadcastToOperators(inso7); }
void InstallationObjectImplementation::setActiveResource(ResourceContainer* container) { Time timeToWorkTill; if (resourceHopper.size() == 0) { addResourceToHopper(container); currentSpawn = container->getSpawnObject(); spawnDensity = currentSpawn->getDensityAt(getZone()->getZoneName(), getPositionX(), getPositionY()); return; } updateInstallationWork(); int i = 0; for (; i < resourceHopper.size(); ++i) { ResourceContainer* entry = resourceHopper.get(i); if (entry == container) { if (i == 0) return; ManagedReference<ResourceContainer*> oldEntry = resourceHopper.get(0); InstallationObjectDeltaMessage7* inso7 = new InstallationObjectDeltaMessage7( _this.get()); inso7->updateHopper(); inso7->startUpdate(0x0D); resourceHopper.set(0, container, inso7, 2); if(oldEntry->getQuantity() > 0) resourceHopper.set(i, oldEntry, inso7, 0); else resourceHopper.remove(i, inso7, 0); currentSpawn = container->getSpawnObject(); spawnDensity = currentSpawn->getDensityAt(getZone()->getZoneName(), getPositionX(), getPositionY()); inso7->updateHopperSize(getHopperSize()); inso7->updateExtractionRate(getActualRate()); inso7->close(); broadcastToOperators(inso7); } } }
void InstallationObjectImplementation::changeActiveResourceID(uint64 spawnID) { // Logic: // 1) If operating, and already has an active resource ID - make sure the hopper gets updated // 2) Get the spawn information & set the active resource id // 3) If hopper size is zero for the resource + is operating, send a packet to the operators to add a zero element for delta packets info("updating active "); if (isOperating()) { updateInstallationWork(); } currentSpawn = getZoneServer()->getObject(spawnID).castTo<ResourceSpawn*>(); if (currentSpawn == NULL) { error("new spawn null"); return; } Time timeToWorkTill; Time currentTime; resourceHopperTimestamp.updateToCurrentTime(); ManagedReference<ResourceContainer*> container = getContainerFromHopper(currentSpawn); if (container == NULL) { Locker locker(currentSpawn); container = currentSpawn->createResource(0); addResourceToHopper(container); setActiveResource(container); } else { setActiveResource(container); } InstallationObjectDeltaMessage7* inso7 = new InstallationObjectDeltaMessage7( _this.get()); inso7->updateExtractionRate(getActualRate()); inso7->updateActiveResourceSpawn(getActiveResourceSpawnID()); inso7->close(); broadcastToOperators(inso7); }
void InstallationObjectImplementation::setOperating(bool value, bool notifyClient) { //updateInstallationWork(); if (operating == value) return; if (value) { if(currentSpawn == NULL) return; spawnDensity = currentSpawn->getDensityAt(getZone()->getZoneName(), getPositionX(), getPositionY()); if(spawnDensity < .10) { return; } if (basePowerRate != 0 && surplusPower <= 0) { StringIdChatParameter stringId("player_structure", "power_deposit_incomplete"); ChatSystemMessage* msg = new ChatSystemMessage(stringId); broadcastToOperators(msg); return; } if (getMaintenanceRate() != 0 && surplusMaintenance <= 0) { StringIdChatParameter stringId("shared", "harvester_no_maint_4"); ChatSystemMessage* msg = new ChatSystemMessage(stringId); broadcastToOperators(msg); return; } } Time timeToWorkTill; operating = value; extractionRemainder = 0; if (operating) { setOptionBit(OptionBitmask::ACTIVATED, false); lastStartTime.updateToCurrentTime(); } else { clearOptionBit(OptionBitmask::ACTIVATED, false); lastStopTime.updateToCurrentTime(); } InstallationObjectDeltaMessage3* delta = new InstallationObjectDeltaMessage3(_this.get()); delta->updateOperating(value); delta->updateOptionsBitmask(); delta->close(); InstallationObjectDeltaMessage7* delta7 = new InstallationObjectDeltaMessage7(_this.get()); delta7->updateOperating(value); delta7->close(); Vector<BasePacket*> messages; messages.add(delta); messages.add(delta7); broadcastMessages(&messages, true); if (value) { resourceHopperTimestamp.updateToCurrentTime(); } InstallationObjectDeltaMessage7* inso7 = new InstallationObjectDeltaMessage7( _this.get()); inso7->updateExtractionRate(getActualRate()); inso7->close(); broadcastToOperators(inso7); }
void HarvesterObjectImplementation::updateOperators() { HarvesterObjectMessage7* msg = new HarvesterObjectMessage7(_this.getReferenceUnsafeStaticCast()); broadcastToOperators(msg); }