Changeset 912 for core3/trunk/MMOCoreORB/src/server/zone/objects/installation/harvester/HarvesterObjectImplementation.cpp
- Timestamp:
- 11/08/08 00:16:10 (1 year ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
core3/trunk/MMOCoreORB/src/server/zone/objects/installation/harvester/HarvesterObjectImplementation.cpp
r851 r912 29 29 30 30 31 maintenance = deed->getSurplusMaintenance(); 32 maintenanceRate = deed->getMaintenanceRate(); 33 energy = deed->getSurplusPower(); 34 energyRate = maintenanceRate; 35 hopperSizeMax = deed->getHopperSize(); 36 specRate = deed->getExtractionRate(); 31 setSurplusMaintenance(deed->getSurplusMaintenance()); 32 setMaintenanceRate(deed->getMaintenanceRate()); 33 setSurplusPower(deed->getSurplusPower()); 34 setPowerRate(getMaintenanceRate()); 35 setHopperSizeMax(deed->getHopperSize()); 36 setExtractionRate(deed->getExtractionRate()); 37 } 38 39 void HarvesterObjectImplementation::parseItemAttributes() { 40 41 try { 42 InstallationObjectImplementation::parseItemAttributes(); 43 44 string attr = "hopperSizeMax"; 45 setHopperSizeMax(itemAttributes->getFloatAttribute(attr)); 46 47 attr = "extractionRate"; 48 setExtractionRate(itemAttributes->getFloatAttribute(attr)); 49 50 attr = "activeResourceID"; 51 setActiveResourceID(itemAttributes->getUnsignedLongAttribute(attr)); 52 53 attr = "activeSpawnID"; 54 setActiveSpawnID(itemAttributes->getUnsignedLongAttribute(attr)); 55 56 attr = "spawnExpireTimestamp"; 57 setSpawnExpireTimestamp(itemAttributes->getUnsignedLongAttribute(attr)); 58 59 attr = "resourceHopperTimestamp"; 60 setResourceHopperTimestamp(itemAttributes->getUnsignedLongAttribute(attr)); 61 62 attr = "spawnDensity"; 63 setSpawnDensity(itemAttributes->getIntAttribute(attr)); 64 65 66 attr = "resourceHopper"; 67 string hopper = itemAttributes->getStringAttribute(attr); 68 unserializeResourceHopper(hopper); 69 70 71 } catch (Exception& e) { 72 cout << "HarvesterObjectImplementation::parseItemAttributes(): " << e.getMessage() << endl; 73 e.printStackTrace(); 74 throw("HarvesterObjectImplementation::parseItemAttributes()!!!"); 75 } 37 76 } 38 77 … … 49 88 // Init to Zero 50 89 hopperResourceUpdateCounter = 0; 51 hopperSizeMax = 59000.0f; 52 specRate = 10.0f; 90 setHopperSizeMax(59000.0f); 91 setExtractionRate(10.0f); 92 setOperating(false); 53 93 harvesterType = 0; 54 55 operating = 0;56 94 57 95 } … … 74 112 */ 75 113 76 void HarvesterObjectImplementation:: updateOperatorsAddBlankActiveRescource() {114 void HarvesterObjectImplementation::verifyOperators() { 77 115 if(operatorList.size() <= 0) 78 116 return; … … 87 125 } 88 126 } 127 128 } 129 130 void HarvesterObjectImplementation::updateOperatorsAddBlankActiveRescource() { 131 if(operatorList.size() <= 0) 132 return; 133 134 verifyOperators(); 89 135 90 136 for(int i = 0; i < operatorList.size(); i++) … … 106 152 dinso7->close(); 107 153 play->sendMessage(dinso7); 108 109 110 } 154 } 155 } 156 157 void HarvesterObjectImplementation::updateOperatorsEmptyHopper() { 158 159 if(operatorList.size() <= 0) 160 return; 161 162 verifyOperators(); 163 164 for(int i = 0; i < operatorList.size(); i++) 165 { 166 SceneObject *obj = operatorList.get(i); 167 168 // Will get cleaned up next event 169 if(!obj->isPlayer()) 170 continue; 171 Player *play = (Player*)obj; 172 173 InstallationObjectDeltaMessage7* dinso7 = new InstallationObjectDeltaMessage7((InstallationObject*)_this); 174 dinso7->updateHopper(); 175 dinso7->addHopperItem(getActiveResourceID()); 176 dinso7->updateHopperSize(); 177 dinso7->close(); 178 play->sendMessage(dinso7); 179 180 181 } 182 111 183 } 112 184 … … 115 187 return; 116 188 117 // won't fully clean up at once because indexes would change once you remove one - but should clean up 118 for(int i = 0; i < operatorList.size(); i++) 119 { 120 SceneObject *obj = operatorList.get(i); 121 if(!obj->isPlayer() || (obj->isPlayer() && !((Player*)obj)->isOnline())) { 122 operatorList.remove(i); 123 124 } 125 } 189 verifyOperators(); 126 190 127 191 for(int i = 0; i < operatorList.size(); i++) … … 158 222 if (spawnExpireTimestamp.compareTo(resourceHopperTimestamp) > 0) 159 223 { // if (t1 < t2) return 1; 160 cout << " InstallationObjectImplementation::updateHopper() resource expired!!spawnExpireTimestamp: " << dec << spawnExpireTimestamp.getTime() << " resourceHopperTimestamp: " << resourceHopperTimestamp.getTime() << endl;224 cout << "HarvesterObjectImplementation::updateHopper(" << hex << activeResourceID << dec << ") resource expired!! (why do we have expired resources in the list?) spawnExpireTimestamp: " << dec << spawnExpireTimestamp.getTime() << " resourceHopperTimestamp: " << resourceHopperTimestamp.getTime() << endl; 161 225 return; 162 226 } … … 168 232 float elapsedTime = (harvestUntil.getTime() - resourceHopperTimestamp.getTime()); 169 233 170 float harvestAmount = (elapsedTime / 60.0) * ( (spawnDensity * 1.0 / 100.0) * specRate);234 float harvestAmount = (elapsedTime / 60.0) * ( (spawnDensity * 1.0 / 100.0) * getExtractionRate()); 171 235 172 236 int availableCapacity = (int)(getHopperSizeMax() - getHopperSize()); … … 181 245 } 182 246 247 serializeResourceHopper(); // update attribute 183 248 // Update Timestamp 184 249 resourceHopperTimestamp = currentTime; … … 189 254 // If hopper size is zero for the resource + is operating, send a packet to the operators to add a zero element for delta packets 190 255 191 void HarvesterObjectImplementation:: setActiveResourceID(uint64 rid) {256 void HarvesterObjectImplementation::changeActiveResourceID(uint64 rid) { 192 257 193 258 // Logic: … … 202 267 203 268 Time currentTime; 204 activeResourceID = rid;205 resourceHopperTimestamp = currentTime; // ReInit269 setActiveResourceID(rid); 270 setResourceHopperTimestamp(currentTime.getTime()); // ReInit 206 271 207 272 ResourceManager* resourceManager = getZone()->getZoneServer()->getResourceManager(); 208 273 if(resourceManager == NULL) 209 274 { 210 activeSpawnID = 0; 211 spawnExpireTimestamp = resourceHopperTimestamp; 212 spawnDensity = 0; 275 cout << "resourceManager was NULL OMFG!" << endl; 276 setActiveSpawnID(0); 277 setSpawnExpireTimestamp(getResourceHopperTimestamp()); 278 setSpawnDensity(0); 213 279 return; 214 280 } … … 220 286 if(ri->getObjectID() == rid) 221 287 { 222 223 activeSpawnID = ri->getSpawnID(); 224 Time stamp((uint32)ri->getSpawnExpireTimestamp()); 225 spawnExpireTimestamp = stamp; 226 spawnDensity = ri->getDensity(); 288 setActiveSpawnID(ri->getSpawnID()); 289 setSpawnExpireTimestamp((uint32)ri->getSpawnExpireTimestamp()); 290 setSpawnDensity(ri->getDensity()); 227 291 } 228 292 } 229 293 230 if(getHopperItemQuantity(getActiveResourceID() == 0))294 if(getHopperItemQuantity(getActiveResourceID()) == 0) 231 295 updateOperatorsAddBlankActiveRescource(); 232 296 } … … 245 309 ResourceItem *ri = list->get(x); 246 310 if(ri->getObjectID() == getActiveResourceID()) 247 return get SpecRate() * ((ri->getDensity() * 1.0f) / 100.0f);311 return getExtractionRate() * ((ri->getDensity() * 1.0f) / 100.0f); 248 312 } 249 313 250 314 return 0.0f; 315 } 316 317 318 void HarvesterObjectImplementation::serializeResourceHopper() { 319 stringstream hopperstr; 320 321 for (int i = 0; i < getHopperItemCount(); i++) { 322 hopperstr << getHopperItemID(i) << "|" << getHopperItemQuantity(i) << ";"; 323 } 324 325 string attr("resourceHopper"); 326 string val = hopperstr.str(); 327 itemAttributes->setStringAttribute(attr, val); 328 } 329 330 void HarvesterObjectImplementation::unserializeResourceHopper(const string& hopper) { 331 332 if(hopper.empty()) 333 return; 334 335 StringTokenizer resources(hopper); 336 resources.setDelimeter(";"); 337 338 while(resources.hasMoreTokens()) { 339 string item(""); 340 resources.getStringToken(item); 341 if(item.empty()) 342 continue; 343 344 StringTokenizer pieces(item); 345 pieces.setDelimeter("|"); 346 347 uint64 oid = pieces.getLongToken(); 348 float quantity = pieces.getFloatToken(); 349 350 if(!resourceHopper.contains(oid)) { 351 resourceHopper.put((uint64)oid, quantity); 352 } 353 354 } 251 355 } 252 356