Assembla home | Assembla project page
 
Show
Ignore:
Timestamp:
11/08/08 00:16:10 (1 year ago)
Author:
McMahon
Message:

SQL Update
StructureManager? - new interface for creating+updating player structures (houses + harvesters)
Updated harvester remove harv data
[Buildings] thanks to Farmer John its now (0,0,1,0) instead of (0,0,0,1) - rejoice player housing works! (sorta)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • core3/trunk/MMOCoreORB/src/server/zone/objects/installation/harvester/HarvesterObjectImplementation.cpp

    r851 r912  
    2929 
    3030 
    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 
     39void 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        } 
    3776} 
    3877 
     
    4988        // Init to Zero 
    5089        hopperResourceUpdateCounter = 0; 
    51         hopperSizeMax = 59000.0f; 
    52         specRate = 10.0f; 
     90        setHopperSizeMax(59000.0f); 
     91        setExtractionRate(10.0f); 
     92        setOperating(false); 
    5393        harvesterType = 0; 
    54  
    55         operating = 0; 
    5694 
    5795} 
     
    74112*/ 
    75113 
    76 void HarvesterObjectImplementation::updateOperatorsAddBlankActiveRescource() { 
     114void HarvesterObjectImplementation::verifyOperators() { 
    77115        if(operatorList.size() <= 0) 
    78116                return; 
     
    87125                } 
    88126        } 
     127 
     128} 
     129 
     130void HarvesterObjectImplementation::updateOperatorsAddBlankActiveRescource() { 
     131        if(operatorList.size() <= 0) 
     132                return; 
     133 
     134        verifyOperators(); 
    89135 
    90136        for(int i = 0; i < operatorList.size(); i++) 
     
    106152                dinso7->close(); 
    107153                play->sendMessage(dinso7); 
    108  
    109  
    110         } 
     154        } 
     155
     156 
     157void 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 
    111183} 
    112184 
     
    115187                return; 
    116188 
    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(); 
    126190 
    127191        for(int i = 0; i < operatorList.size(); i++) 
     
    158222        if (spawnExpireTimestamp.compareTo(resourceHopperTimestamp) > 0) 
    159223        { // 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; 
    161225                return; 
    162226        } 
     
    168232        float elapsedTime = (harvestUntil.getTime() - resourceHopperTimestamp.getTime()); 
    169233 
    170         float harvestAmount = (elapsedTime / 60.0) * ( (spawnDensity * 1.0 / 100.0) * specRate); 
     234        float harvestAmount = (elapsedTime / 60.0) * ( (spawnDensity * 1.0 / 100.0) * getExtractionRate()); 
    171235 
    172236        int availableCapacity = (int)(getHopperSizeMax() - getHopperSize()); 
     
    181245        } 
    182246 
     247        serializeResourceHopper(); // update attribute 
    183248        // Update Timestamp 
    184249        resourceHopperTimestamp = currentTime; 
     
    189254// If hopper size is zero for the resource + is operating, send a packet to the operators to add a zero element for delta packets 
    190255 
    191 void HarvesterObjectImplementation::setActiveResourceID(uint64 rid) { 
     256void HarvesterObjectImplementation::changeActiveResourceID(uint64 rid) { 
    192257 
    193258        // Logic: 
     
    202267 
    203268        Time currentTime; 
    204         activeResourceID = rid
    205         resourceHopperTimestamp = currentTime; // ReInit 
     269        setActiveResourceID(rid)
     270        setResourceHopperTimestamp(currentTime.getTime()); // ReInit 
    206271 
    207272        ResourceManager* resourceManager = getZone()->getZoneServer()->getResourceManager(); 
    208273        if(resourceManager == NULL) 
    209274        { 
    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); 
    213279                return; 
    214280        } 
     
    220286                if(ri->getObjectID() == rid) 
    221287                { 
    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()); 
    227291                } 
    228292        } 
    229293 
    230         if(getHopperItemQuantity(getActiveResourceID() == 0)
     294        if(getHopperItemQuantity(getActiveResourceID()) == 0
    231295                updateOperatorsAddBlankActiveRescource(); 
    232296} 
     
    245309                ResourceItem *ri = list->get(x); 
    246310                if(ri->getObjectID() == getActiveResourceID()) 
    247                         return getSpecRate() * ((ri->getDensity() * 1.0f) / 100.0f); 
     311                        return getExtractionRate() * ((ri->getDensity() * 1.0f) / 100.0f); 
    248312        } 
    249313 
    250314        return 0.0f; 
     315} 
     316 
     317 
     318void 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 
     330void 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        } 
    251355} 
    252356