112 m_pSE(pSE->GetPlanetSE()),
179 m_srcRoutes.emplace(cur.second.srcPinID, cur.second);
215 if (
sConfig.debug.UseProfiling)
222 std::map<uint32, PI_Pin>::iterator itr;
224 if (cur.second.update) {
227 cur.second.update =
false;
228 if (cur.second.isProcess) {
231 itr->second.state = cur.second.state;
232 itr->second.cycleTime = cur.second.cycleTime;
233 itr->second.installTime = cur.second.installTime;
234 itr->second.lastRunTime = cur.second.lastRunTime;
235 itr->second.schematicID = cur.second.schematicID;
236 itr->second.qtyPerCycle = cur.second.qtyPerCycle;
237 itr->second.hasReceivedInputs = cur.second.hasReceivedInputs;
238 itr->second.receivedInputsLastCycle = cur.second.receivedInputsLastCycle;
259 if (cur.second.isCommandCenter) {
266 if (cur.second.isProcess) {
269 plant.
state = cur.second.state;
283 if (cur.second.lastRunTime == 0) {
306 std::map<uint32, PI_Pin>::iterator itr;
307 std::map<uint32, PI_Plant>::iterator itr2;
313 itr->second.state = itr2->second.state;
314 itr->second.cycleTime = itr2->second.cycleTime;
315 itr->second.installTime = itr2->second.installTime;
316 itr->second.lastRunTime = itr2->second.lastRunTime;
317 itr->second.schematicID = itr2->second.schematicID;
318 itr->second.qtyPerCycle = itr2->second.qtyPerCycle;
319 itr->second.hasReceivedInputs = itr2->second.hasReceivedInputs;
320 itr->second.receivedInputsLastCycle = itr2->second.receivedInputsLastCycle;
327 itr->second.state = cur.second.state;
328 itr->second.cycleTime = cur.second.cycleTime;
329 itr->second.installTime = cur.second.installTime;
330 itr->second.lastRunTime = cur.second.lastRunTime;
331 itr->second.schematicID = cur.second.schematicID;
332 itr->second.qtyPerCycle = cur.second.qtyPerCycle;
333 itr->second.hasReceivedInputs = cur.second.hasReceivedInputs;
334 itr->second.receivedInputsLastCycle = cur.second.receivedInputsLastCycle;
474 _log(COLONY__INFO,
"Colony::CreatePin() - Created pin for %s(%u)", iRef->
name(), iRef->
itemID());
479 std::map<uint8, uint32>::iterator itr =
tempPinIDs.find(src);
484 std::map<uint8, uint32>::iterator itr =
tempPinIDs.find(dest);
502 _log(COLONY__INFO,
"Colony::CreateLink() - Created link - id:%u, src:%u, dest:%u, level:%u", iRef->itemID(), src, dest, level);
507 std::list<uint32> list1;
509 for (
size_t i = 0; i < path->
size(); ++i) {
515 _log(COLONY__ERROR,
"Colony::CreateRoute() - List item type unrecognized: %s", path->
GetItem(1)->
TypeString());
520 std::list<uint32> list2;
522 std::map<uint8, uint32>::iterator itr;
523 for (
auto cur : list1) {
527 list2.push_back(itr->second);
529 list2.push_back(cur);
551 _log(COLONY__INFO,
"Colony::CreateRoute() - Created route id %u for %u of typeID %u, making %u hops.", routeID, qty, typeID, (
uint32)path->
size() -1);
560 std::map<uint16, uint32>::iterator itr = srcPin->second.contents.find(route.
commodityTypeID);
561 if (itr == srcPin->second.contents.end())
566 if (itr->second > amount) {
567 itr->second -= amount;
569 amount = itr->second;
570 srcPin->second.contents.erase(itr);
572 srcPin->second.update =
true;
576 if (itr != destPin->second.contents.end()) {
577 itr->second += amount;
581 destPin->second.update =
true;
583 if (destPin->second.isProcess) {
584 std::map<uint32, PI_Plant>::iterator plantPin =
ccPin->
plants.find(destPin->first);
586 plantPin->second.hasReceivedInputs =
true;
593 std::map<uint32, PI_Pin>::iterator itr =
ccPin->
pins.find(pinID);
595 itr->second.level = level;
597 _log(COLONY__INFO,
"Colony::UpgradeCommandCenter() - Upgraded Command Center %u to level:%u", pinID, level);
599 _log(COLONY__ERROR,
"Colony::UpgradeCommandCenter() - pinID %u not found in ccPin.pins map", pinID);
605 std::map<uint32, PI_Link>::iterator itr =
ccPin->
links.begin();
607 if (itr->second.endpoint1 == src)
608 if (itr->second.endpoint2 == dest) {
609 itr->second.level = level;
617 uint8 linkCount = 0, routeCount = 0, pathCount = 0;
619 std::map<uint32, PI_Link>::iterator itr =
ccPin->
links.begin();
621 if (itr->second.endpoint1 == pinID) {
627 if (itr->second.endpoint2 == pinID) {
637 std::map<uint16, PI_Route>::iterator rItr =
ccPin->
routes.begin();
644 if (rItr->second.srcPinID == pinID) {
650 if (rItr->second.destPinID == pinID) {
657 std::list<uint32>::iterator pItr = rItr->second.path.begin();
658 while (pItr != rItr->second.path.end()) {
660 if (*pItr == pinID) {
662 pItr = rItr->second.path.erase(pItr);
680 _log(COLONY__INFO,
"Colony::RemovePin() - Removed pin %u with %u routes and %u links. Upset %u routes by removing this pin", \
681 pinID, routeCount, linkCount, pathCount);
686 std::map<uint32, PI_Link>::iterator itr =
ccPin->
links.begin();
688 if (itr->second.endpoint1 == src)
689 if (itr->second.endpoint2 == dest) {
690 _log(COLONY__INFO,
"Colony::RemoveLink() - Removing linkID %u - src: %u, dest: %u", itr->first, src, dest);
699 std::map<uint16, PI_Route>::iterator routeItr =
ccPin->
routes.find(routeID);
704 _log(COLONY__INFO,
"Colony::RemoveRoute() - Removed route: %u", routeID);
709 std::map<uint32, PI_Pin>::iterator itr =
ccPin->
pins.find(ecuID);
714 head.
typeID = itr->second.schematicID;
718 itr->second.heads[headID] = head;
720 _log(COLONY__ERROR,
"Colony::AddExtractorHead() - ecuID %u not found in ccPin.pins map", ecuID);
726 std::map<uint32, PI_Pin>::iterator itr =
ccPin->
pins.find(ecuID);
728 std::map<uint16, PI_Heads>::iterator head = itr->second.heads.find(headID);
729 if (head != itr->second.heads.end()) {
733 head->second.latitude = latitude;
734 head->second.longitude = longitude;
736 _log(COLONY__ERROR,
"Colony::MoveExtractorHead() - headID %u not found in pin.heads map", headID);
739 _log(COLONY__ERROR,
"Colony::MoveExtractorHead() - ecuID %u not found in ccPin.pins map", ecuID);
745 std::map<uint32, PI_Pin>::iterator itr =
ccPin->
pins.find(ecuID);
747 itr->second.heads.erase(headID);
749 _log(COLONY__ERROR,
"Colony::KillExtractorHead() - ecuID %u not found in ccPin.pins map", ecuID);
756 std::map<uint8, uint32>::iterator itr =
tempPinIDs.find(pinID);
761 std::map<uint32, PI_Plant>::iterator itr =
ccPin->
plants.find(pinID);
763 _log(COLONY__ERROR,
"Colony::SetSchematic() - plantID %u not found in ccPin.plants map", pinID);
767 sPIDataMgr.GetSchematicData(schematicID, itr->second.data);
769 itr->second.pLevel =
sPIDataMgr.GetProductLevel(itr->second.data.outputType);
772 itr->second.qtyPerCycle = itr->second.data.outputQty;
773 itr->second.schematicID = schematicID;
774 itr->second.lastRunTime = 0;
775 itr->second.hasReceivedInputs =
false;
776 itr->second.receivedInputsLastCycle =
false;
783 _log(COLONY__INFO,
"Colony::SetSchematic() - Set Schematic %u in plantID %u", schematicID, pinID);
788 _log(COLONY__INFO,
"Colony::SetSchematic() - Cleared Schematic from plantID %u", pinID);
802 std::map<uint32, PI_Pin>::iterator itr =
ccPin->
pins.find(ecuID);
804 _log(COLONY__ERROR,
"Colony::InstallProgram() - ecuPinID %u not found in ccPin.pins map", ecuID);
814 if (itr->second.programType != typeID) {
816 _log(COLONY__ERROR,
"Colony::InstallProgram() - typeID %u does not match previously saved program. *edit* not sure wtf that means now.", typeID);
821 itr->second.headRadius = headRadius;
826 for (
auto cur : itr->second.heads)
829 sPIDataMgr.GetProgramResultInfo(
this, ecuID, typeID, list, headRadius);
834 std::map<uint32, PI_Pin>::iterator itr =
ccPin->
pins.find(ecuID);
836 _log(COLONY__ERROR,
"Colony::SetProgramResults() - ecuPinID %u not found in ccPin.pins map", ecuID);
841 itr->second.programType = typeID;
842 itr->second.expiryTime = (cycleTime * numCycles) * EvE::Time::Hour +
GetFileTimeNow();
843 itr->second.headRadius = headRadius;
844 itr->second.qtyPerCycle = qtyPerCycle;
866 std::map<uint32, PI_Pin>::iterator src =
ccPin->
pins.find(srcID);
868 _log(COLONY__ERROR,
"Colony::TransferCommodities() - srcPin %u not found in ccPin.pins map", srcID);
873 std::map<uint32, PI_Pin>::iterator dest =
ccPin->
pins.find(destID);
875 _log(COLONY__ERROR,
"Colony::TransferCommodities() - destPin %u not found in ccPin.pins map", destID);
889 for (
auto cur : items) {
890 std::map<uint16, uint32>::iterator srcItr = src->second.contents.find(cur.first), destItr = dest->second.contents.find(cur.first);
891 if (srcItr != src->second.contents.end()) {
892 if (srcItr->second > cur.second) {
893 srcItr->second -= cur.second;
895 src->second.contents.erase(srcItr);
898 if (destItr != dest->second.contents.end()) {
899 destItr->second += cur.second;
901 dest->second.contents[cur.first] = cur.second;
916 src->second.lastRunTime = 0;
931 std::map<uint32, PI_Pin>::iterator pin =
ccPin->
pins.find(pinID);
933 _log(COLONY__ERROR,
"Colony::LaunchCommodities() - pinID %u not found in ccPin.pins map", pinID);
947 "PI Commodities Container",
951 if (contRef.get() ==
nullptr) {
964 contRef->SetMySE(cSE);
966 pSysMgr->AddEntity(cSE);
976 for (
auto cur : items) {
977 std::map<uint16, uint32>::iterator cont = pin->second.contents.find(cur.first);
978 if (cont != pin->second.contents.end()) {
979 if (cont->second > cur.second) {
980 cont->second -= cur.second;
982 pin->second.contents.erase(cont);
985 _log(COLONY__WARNING,
"Colony::LaunchCommodities() - item %u not found in command center", cur.first);
989 switch (
sPIDataMgr.GetProductLevel(cur.first)) {
990 case 0: cost += ( 0.15 * cur.second);
break;
991 case 1: cost += ( 1.14 * cur.second);
break;
992 case 2: cost += ( 13.50 * cur.second);
break;
993 case 3: cost += ( 900.00 * cur.second);
break;
994 case 4: cost += (75000.00 * cur.second);
break;
998 if (iRef.get() ==
nullptr)
1001 if (contRef->GetMyInventory()->HasAvailableSpace(flagNone, iRef)) {
1002 iRef->Move(cSE->
GetID());
1006 _log(COLONY__WARNING,
"%s: PI Commodity Container %u is full.",
m_client->
GetName(), contRef->itemID());
1014 _log(COLONY__TRACE,
"Colony::LaunchCommodities() - Launched %u items from command center %u to %s (%u)", \
1015 count,
m_colonyID, contRef->name(), contRef->itemID() );
1017 contRef->SaveItem();
1033 std::string reason =
"DESC: Launching PI items from ";
1045 return new PyLong(pin->second.lastLaunchTime);
1048 void Colony::PlanetXfer(
uint32 spaceportID, std::map< uint32, uint16 > importItems, std::map< uint32, uint16 > exportItems,
double taxRate)
1053 std::map<uint32, PI_Pin>::iterator pin =
ccPin->
pins.find(spaceportID);
1055 _log(COLONY__ERROR,
"Colony::PlanetXfer() - pinID %u not found in ccPin.pins map", spaceportID);
1069 uint8 toColony = 0, fromColony = 0;
1072 std::map<uint16, uint32>::iterator itr;
1074 for (
auto cur : importItems) {
1077 if (iRef.
get() ==
nullptr) {
1078 _log(COLONY__ERROR,
"Colony::PlanetXfer():import - itemRef for id %u not found in ItemFactory", cur.first);
1082 itr = pin->second.contents.find(iRef->
typeID());
1086 if (itr != pin->second.contents.end()) {
1087 itr->second += cur.second;
1089 pin->second.contents[iRef->
typeID()] = cur.second;
1093 case 0: cost += ( 0.05 * cur.second);
break;
1094 case 1: cost += ( 0.38 * cur.second);
break;
1095 case 2: cost += ( 4.50 * cur.second);
break;
1096 case 3: cost += ( 300.00 * cur.second);
break;
1097 case 4: cost += (25000.00 * cur.second);
break;
1105 _log(COLONY__TRACE,
"Colony::PlanetXfer() - Imported %u items from customs office %u to spaceport %u", \
1110 std::string reason =
"DESC: Importing items to ";
1125 for (
auto cur : exportItems) {
1126 std::map<uint16, uint32>::iterator cont = pin->second.contents.find(cur.first);
1127 if (cont != pin->second.contents.end()) {
1128 if (cont->second > cur.second) {
1129 cont->second -= cur.second;
1132 cur.second = cont->second;
1133 pin->second.contents.erase(cont);
1136 _log(COLONY__WARNING,
"Colony::PlanetXfer():export - item %u not found in spaceport", cur.first);
1140 switch (
sPIDataMgr.GetProductLevel(cur.first)) {
1141 case 0: cost += ( 0.10 * cur.second);
break;
1142 case 1: cost += ( 0.76 * cur.second);
break;
1143 case 2: cost += ( 9.00 * cur.second);
break;
1144 case 3: cost += ( 600.00 * cur.second);
break;
1145 case 4: cost += (50000.00 * cur.second);
break;
1156 _log(COLONY__TRACE,
"Colony::PlanetXfer() - Exported %u items from spaceport %u to customs office %u", \
1161 std::string reason =
"DESC: Exporting items from ";
1198 std::map<uint16, PI_Route>::iterator itr =
ccPin->
routes.find(routeID);
1200 itr->second.priority = priority;
1215 dict->
SetItem(
"ownerID",
new PyInt(cur.second.ownerID));
1218 dict->
SetItem(
"lastRunTime", (cur.second.lastRunTime > 0 ?
new PyLong(cur.second.lastRunTime) :
PyStatic.NewNone()));
1224 if (cur.second.isStorage)
1225 for (
auto cur2 : cur.second.contents)
1227 dict->
SetItem(
"contents", contents);
1229 if (cur.second.isLaunchable)
1230 dict->
SetItem(
"lastLaunchTime", (cur.second.lastLaunchTime > 0 ?
new PyLong(cur.second.lastLaunchTime) :
PyStatic.NewNone()));
1232 if (cur.second.isProcess)
1233 if (cur.second.schematicID) {
1234 dict->
SetItem(
"schematicID",
new PyInt(cur.second.schematicID));
1235 std::map<uint32, PI_Plant>::iterator plantPin =
ccPin->
plants.find(cur.first);
1237 dict->
SetItem(
"cycleTime",
new PyLong(plantPin->second.cycleTime));
1238 dict->
SetItem(
"hasReceivedInputs",
new PyBool(plantPin->second.hasReceivedInputs));
1239 dict->
SetItem(
"receivedInputsLastCycle",
new PyBool(plantPin->second.receivedInputsLastCycle));
1251 if (cur.second.isECU) {
1252 if (cur.second.installTime > 0) {
1254 dict->
SetItem(
"expiryTime",
new PyLong(cur.second.expiryTime));
1256 dict->
SetItem(
"installTime",
new PyLong(cur.second.installTime));
1257 dict->
SetItem(
"programType",
new PyInt(cur.second.programType));
1258 dict->
SetItem(
"qtyPerCycle",
new PyInt(cur.second.qtyPerCycle));
1262 for (
auto head : cur.second.heads) {
1284 dict->
SetItem(
"endpoint1",
new PyInt(cur.second.endpoint1));
1285 dict->
SetItem(
"endpoint2",
new PyInt(cur.second.endpoint2));
1301 dict->
SetItem(
"commodityTypeID",
new PyInt(cur.second.commodityTypeID));
1302 dict->
SetItem(
"commodityQuantity",
new PyInt(cur.second.commodityQuantity));
1305 for (
auto cur2 : cur.second.path)
1317 std::map<uint32, PI_Pin>::iterator itr =
ccPin->
pins.find(cur);
1321 _log(COLONY__ERROR,
"Colony::GetColony()::SaveHeads() - headID %u not found in ccPin.pins map", cur);
1339 _log(COLONY__GC_DUMP,
"Colony::GetColony() Dump");
1340 res->
Dump(COLONY__GC_DUMP,
" ");
1380 _log(COLONY__INFO,
"Colony::Update() - Update completed in %.3fus with %u links, %u pins, %u plants, and %u routes (s:%u, d:%u) ", \
1388 uint16 cycles = 0, quantity = 0, amount = 0, count = 0;
1389 std::map<uint16, uint32>::iterator itemItr;
1390 std::map<uint32, PI_Pin>::iterator destPin;
1391 std::map<uint32, PI_Plant>::iterator plant;
1393 if (!ecu.second.isECU)
1398 _log(COLONY__DEBUG,
"Colony::ProcessECUs() - expiryTime (%li) > m_procTime (%li).", \
1402 if (ecu.second.cycleTime < 0.0f) {
1404 _log(COLONY__DEBUG,
"Colony::ProcessECUs() - cycleTime < 0.");
1409 ecu.second.lastRunTime = ecu.second.expiryTime - ecu.second.cycleTime;
1431 _log(COLONY__DEBUG,
"Colony::ProcessECUs() - ECU pin %u - begin processing with %u cycles (%0.2f / %0.2f)", \
1433 auto destRouteItr =
m_destRoutes.equal_range(plant->first);
1434 for (
auto it = destRouteItr.first; it != destRouteItr.second; ++it) {
1443 _log(COLONY__ERROR,
"Colony::ProcessECUs() - Dest pinID %u not found in ccPin.pins map", it->first);
1448 quantity = it->second.commodityQuantity;
1455 itemItr = destPin->second.contents.find(it->second.commodityTypeID);
1459 if (itemItr != destPin->second.contents.end()) {
1460 itemItr->second += amount;
1462 destPin->second.contents[it->second.commodityTypeID] = amount;
1465 _log(COLONY__DEBUG,
"Colony::ProcessECUs() - Dest pinID %u updated with %u %s (%u).", \
1466 it->second.destPinID, amount,
sPIDataMgr.GetProductName(it->second.commodityTypeID), it->second.commodityTypeID);
1470 destPin->second.update =
true;
1473 if (destPin->second.isProcess) {
1477 _log(COLONY__ERROR,
"Colony::ProcessECUs() - Plant pinID %u not found in ccPin.plants map", destPin->first);
1481 plant->second.hasReceivedInputs =
true;
1483 _log(COLONY__DEBUG,
"Colony::ProcessECUs() - Dest pinID %u isPlant.", it->second.destPinID);
1489 ecu.second.expiryTime = ecu.second.lastRunTime + ecu.second.cycleTime * cycles;
1491 ecu.second.lastRunTime = ecu.second.expiryTime;
1495 _log(COLONY__DEBUG,
"Colony::ProcessECUs() - Processing complete. timeNow %li, expiryTime %li, lastRunTime %li", \
1496 GetFileTimeNow(), ecu.second.expiryTime, ecu.second.lastRunTime);
1524 int32 cycles = 0, cycles2 = 0, amount = 0, divisor = 0, delta = 0;
1525 std::map<uint32, PI_Pin>::iterator srcPin;
1526 std::map<uint32, PI_Pin>::iterator destPin;
1527 std::map<uint16, uint32>::iterator itemItr;
1528 std::map<uint32, PI_Plant>::iterator destPlant;
1529 _log(COLONY__INFO,
"Colony::ProcessPlants() - Begin Plant Processing. m_procTime: %li",
m_procTime);
1530 while (curCycle < 5) {
1532 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Begin Process loop for pLevel %u.", curCycle);
1536 auto cycleItr =
m_plantMap.equal_range(curCycle);
1537 for (
auto it = cycleItr.first; it != cycleItr.second; ++it) {
1538 _log(COLONY__INFO,
"Colony::ProcessPlants() - Begin Processing for Plant %u", it->second);
1541 std::map<uint32, PI_Plant>::iterator plant =
ccPin->
plants.find(it->second);
1543 _log(COLONY__ERROR,
"Colony::ProcessPlants() - Plant %u not found in ccPin.pins map", it->second);
1550 if (plant->second.schematicID == 0) {
1551 _log(COLONY__WARNING,
"Colony::ProcessPlants() - No schematic installed in plant %u.", it->second);
1552 plant->second.hasReceivedInputs =
false;
1553 plant->second.receivedInputsLastCycle =
false;
1574 if (plant->second.lastRunTime >=
m_procTime) {
1576 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - lastRunTime (%li) >= m_procTime (%li).", \
1582 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - last run time %li.", plant->second.lastRunTime);
1585 delta = (
m_procTime - plant->second.lastRunTime) / EvE::Time::Second;
1588 if (delta < divisor) {
1591 plant->second.lastRunTime -= plant->second.cycleTime;
1594 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - cycle incomplete (%i < %i).", delta, divisor);
1600 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - divisor < 0 (%i).", divisor);
1604 cycles = delta / divisor;
1606 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - current cycle count is %i (%i / %i).", \
1607 cycles, delta, divisor);
1610 _log(COLONY__WARNING,
"Colony::ProcessPlants() - Cycle count < 1");
1616 _log(COLONY__INFO,
"Colony::ProcessPlants() - Begin Input Route loop for Plant %u.", plant->first);
1617 auto destRouteItr =
m_destRoutes.equal_range(plant->first);
1618 for (
auto it = destRouteItr.first; it != destRouteItr.second; ++it) {
1636 srcPin =
ccPin->
pins.find(it->second.srcPinID);
1638 _log(COLONY__ERROR,
"Colony::ProcessPlants() - Source %u not found in ccPin.pins map", it->second.srcPinID);
1640 plant->second.hasReceivedInputs =
false;
1641 plant->second.receivedInputsLastCycle =
false;
1646 if (!srcPin->second.isStorage)
1649 itemItr = srcPin->second.contents.find(it->second.commodityTypeID);
1650 if (itemItr == srcPin->second.contents.end()) {
1652 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Routed Commodity %s (%u) not found in Source Inventory.", \
1653 sPIDataMgr.GetProductName(it->second.commodityTypeID), it->second.commodityTypeID);
1658 amount = it->second.commodityQuantity * cycles;
1659 if (itemItr->second > amount) {
1660 itemItr->second -= amount;
1662 amount = itemItr->second;
1663 srcPin->second.contents.erase(itemItr);
1666 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Removed %i %s (%u) from src %u.", \
1667 amount,
sPIDataMgr.GetProductName(it->second.commodityTypeID), it->second.commodityTypeID, srcPin->first);
1670 srcPin->second.update =
true;
1673 destPin =
ccPin->
pins.find(plant->first);
1675 _log(COLONY__ERROR,
"Colony::ProcessPlants() - Pin %u not found in ccPin.pins map for this plant.", plant->first);
1677 plant->second.hasReceivedInputs =
false;
1678 plant->second.receivedInputsLastCycle =
false;
1682 itemItr = destPin->second.contents.find(it->second.commodityTypeID);
1683 if (itemItr != destPin->second.contents.end()) {
1684 itemItr->second += amount;
1686 destPin->second.contents[it->second.commodityTypeID] = amount;
1688 destPin->second.update =
true;
1691 plant->second.hasReceivedInputs =
true;
1694 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Added %i %s (%u) to Plant Inventory.", \
1695 amount,
sPIDataMgr.GetProductName(it->second.commodityTypeID), it->second.commodityTypeID);
1701 _log(COLONY__INFO,
"Colony::ProcessPlants() - %s Input Check loop for Plant %u.", plant->second.hasReceivedInputs ?
"Begin" :
"Skipping", plant->first);
1703 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Plant %u processing inputs.", plant->first);
1705 destPin =
ccPin->
pins.find(plant->first);
1707 _log(COLONY__ERROR,
"Colony::ProcessPlants() - Dest %u not found in ccPin.pins map", plant->first);
1711 plant->second.receivedInputsLastCycle =
false;
1713 if (plant->second.hasReceivedInputs) {
1724 if (plant->second.data.inputs.empty()) {
1725 _log(COLONY__WARNING,
"Colony::ProcessPlants() - Empty input map");
1726 plant->second.hasReceivedInputs =
false;
1731 uint16 tempCycles = cycles;
1732 for (
auto mats : plant->second.data.inputs) {
1734 itemItr = destPin->second.contents.find(mats.first);
1735 if (itemItr == destPin->second.contents.end()) {
1737 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - %s (%u) not found in Plant Inventory.", \
1738 sPIDataMgr.GetProductName(mats.first), mats.first);
1745 if (itemItr->second >= mats.second * cycles) {
1746 itemItr->second -= mats.second * cycles;
1747 plant->second.receivedInputsLastCycle =
true;
1752 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Not enough %s (%u) for %i cycles. Need %u, Have %u", \
1753 sPIDataMgr.GetProductName(mats.first), mats.first, cycles, mats.second * cycles, itemItr->second);
1754 cycles2 = itemItr->second / mats.second;
1756 itemItr->second -= mats.second * cycles2;
1757 plant->second.receivedInputsLastCycle =
true;
1759 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Have enough material for %i cycles.", cycles2);
1768 if (tempCycles > cycles2)
1769 tempCycles = cycles2;
1773 if (cycles > tempCycles)
1774 cycles = tempCycles;
1783 _log(COLONY__INFO,
"Colony::ProcessPlants() - %s manufacturing loop for Plant %u.", plant->second.receivedInputsLastCycle ?
"Begin" :
"Skipping", plant->first);
1784 if (plant->second.receivedInputsLastCycle and (cycles > 0)) {
1790 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Updating timers for %i cycles using current inventory.", cycles);
1796 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Received Inputs. timeNow %li, lastRunTime %li", \
1803 _log(COLONY__INFO,
"Colony::ProcessPlants() - %s Output Routing loop for Plant %u.", cycles > 0 ?
"Begin" :
"Skipping", plant->first);
1806 destPin->second.update =
true;
1807 auto srcRouteItr =
m_srcRoutes.equal_range(plant->first);
1808 for (
auto it = srcRouteItr.first; it != srcRouteItr.second; ++it) {
1813 destPin=
ccPin->
pins.find(it->second.destPinID);
1815 _log(COLONY__ERROR,
"Colony::ProcessPlants() - Dest %u not found in ccPin.pins map", it->second.destPinID);
1820 amount = it->second.commodityQuantity * cycles;
1821 itemItr = destPin->second.contents.find(it->second.commodityTypeID);
1822 if (itemItr != destPin->second.contents.end()) {
1823 itemItr->second += amount;
1825 destPin->second.contents[it->second.commodityTypeID] = amount;
1828 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Added %u %s (%u) to Dest %u.", \
1829 amount,
sPIDataMgr.GetProductName(it->second.commodityTypeID), it->second.commodityTypeID, it->second.destPinID);
1831 if (destPin->second.isStorage) {
1834 }
else if (destPin->second.isProcess) {
1839 _log(COLONY__ERROR,
"Colony::ProcessPlants() - Dest %u not found in ccPin.plants map", destPin->first);
1843 destPlant->second.hasReceivedInputs =
true;
1846 destPin->second.update =
true;
1847 plant->second.hasReceivedInputs =
false;
1850 plant->second.lastRunTime += plant->second.cycleTime * cycles;
1854 plant->second.hasReceivedInputs =
false;
1855 plant->second.receivedInputsLastCycle =
false;
1859 _log(COLONY__DEBUG,
"Colony::ProcessPlants() - Process loop complete for pLevel %u.", curCycle);
bool SetQuantity(int32 qty, bool notify=false, bool deleteOnZero=true)
std::map< uint32, PI_Pin > pins
std::map< uint16, PI_Route > routes
#define sConfig
A macro for easier access to the singleton.
void UpdatePlanetPins(uint32 ccPinID, uint8 pins=1)
void SavePins(PI_CCPin *ccPin)
void UpdatePins(uint32 pinID, PI_CCPin *ccPin)
void SendErrorMsg(const char *fmt,...)
void PlanetXfer(uint32 spaceportID, std::map< uint32, uint16 > importItems, std::map< uint32, uint16 > exportItems, double taxRate)
#define _log(type, fmt,...)
void SaveCommandCenter(uint32 pinID, uint32 charID, uint32 planetID, uint32 typeID, double latitude, double longitude)
PyRep * GetItem(size_t index) const
Returns Python object.
void KillExtractorHead(uint32 ecuID, uint16 headID)
void SaveLaunch(uint32 contID, uint32 charID, uint32 systemID, uint32 planetID, GPoint &pos)
void SaveHeads(uint32 ccPinID, uint32 ownerID, uint32 ecuID, std::map< uint16, PI_Heads > &heads)
double min(double x, double y)
void ProcessPlants(bool &save)
#define IsTempPinID(pinID)
void CreatePin(uint32 groupID, uint32 pinID, uint32 typeID, double latitude, double longitude)
CustomsSE * GetCustomsOffice()
uint16 SaveRoute(uint32 ccPinID, PI_Route &route)
Python floating point number.
int32 GetCharacterID() const
int32 GetWarFactionID() const
void UpdateECUPin(uint32 pinID, PI_CCPin *ccPin)
int32 GetCorporationID() const
void RemoveRoute(uint16 routeID)
void AddExtractorHead(uint32 ecuID, uint16 headID, double latitude, double longitude)
Advanced version of UserError that allows to send a full custom message.
bool LoadColony(uint32 charID, uint32 planetID, PI_CCPin *ccPin)
void Dump(FILE *into, const char *pfx) const
Dumps object to file.
void RemoveContents(uint32 pinID)
int32 GetAllianceID() const
void Move(uint32 new_location=locTemp, EVEItemFlags flag=flagNone, bool notify=false)
void LoadRoutes(uint32 ccPinID, std::map< uint16, PI_Route > &routes)
void SafeDelete(T *&p)
Deletes and nullifies a pointer.
PyRep * GetItem(size_t index) const
Returns Python object.
std::map< uint32, PI_Plant > plants
void Update(bool updateTimes=false)
void UpdatePlantPins(uint32 pinID=0)
#define is_log_enabled(type)
SystemManager * SystemMgr()
PyRep * LaunchCommodities(uint32 pinID, std::map< uint16, uint32 > &items)
void RemoveLink(uint32 src, uint32 dest)
std::map< uint8, uint32 > tempPinIDs
void SaveRoutes(PI_CCPin *ccPin)
void SetItem(size_t index, PyRep *object)
Stores Python object.
std::multimap< uint32, PI_Route > m_destRoutes
void CreateRoute(uint16 routeID, uint32 typeID, uint32 qty, PyList *path)
static void TranserFunds(uint32 fromID, uint32 toID, double amount, std::string reason="", uint8 entryTypeID=Journal::EntryType::Undefined, uint32 referenceID=0, uint16 fromKey=Account::KeyType::Cash, uint16 toKey=Account::KeyType::Cash, Client *pClient=nullptr)
void CreateLink(uint32 src, uint32 dest, uint16 level)
void InstallProgram(uint32 ecuID, uint16 typeID, float headRadius, PlanetMgr *pPMgr)
PyDict * TransferCommodities(uint32 srcID, uint32 destID, std::map< uint16, uint32 > items)
void CreateCommandPin(uint32 itemID, uint32 typeID, double latitude, double longitude)
void LoadPins(uint32 ccPinID, std::map< uint32, PI_Pin > &pins)
bool Check(bool reset=true)
ShipItemRef GetShip() const
const char * GetName() const
const char * GetName() const
void SaveContents(PI_CCPin *ccPin)
void SaveLinks(PI_CCPin *ccPin)
bool ChangeSingleton(bool singleton, bool notify=false)
std::map< uint32, PI_Link > links
std::vector< uint32 > tempECUs
void RemovePin(uint32 pinID)
void DeleteColony(uint32 ccPinID, uint32 planetID, uint32 charID)
void RemoveRoute(uint16 routeID)
void ProcessECUs(bool &save)
void MoveExtractorHead(uint32 ecuID, uint16 headID, double latitude, double longitude)
void UpgradeCommandCenter(uint32 pinID, int8 level)
EvilNumber GetAttribute(const uint16 attrID) const
void AddPlanetForChar(uint32 solarSystemID, uint32 planetID, uint32 charID, uint32 ccPinID, uint16 typeID)
typeID Spawn an NPC with the specified type text Search for items matching the specified query() type()() itemID() copy() materialLevel()() itemID(attributeID)-Retrieves attribute value." ) COMMAND( setattr
virtual void RemoveItem(InventoryItemRef iRef)
void SetSchematic(uint32 pinID, uint8 schematicID=0)
void RemoveLink(uint32 linkID)
void SavePinContents(uint32 ccPinID, uint32 pinID, std::map< uint16, uint32 > &contents)
bool receivedInputsLastCycle
void SaveCCLevel(uint32 pinID, uint8 level)
std::multimap< uint32, PI_Route > m_srcRoutes
static int64 IntegerValue(PyRep *pRep)
Colony(PyServiceMgr *mgr, Client *pClient, SystemEntity *pSE)
void PrioritizeRoute(uint16 routeID, uint8 priority)
void MakeRandomPointOnSphere(double radius)
std::multimap< uint8, uint32 > m_plantMap
void RemovePin(uint32 pinID)
entityID heal the character with the entityID note giving you detailed ship status information gives a list of all dynamic entities and players and their destinyState in this bubble shows some current destiny variables save all items
void SetItem(PyRep *key, PyRep *value)
SetItem adds or sets a database entry.
const char * TypeString() const
void ToVirtual(uint32 locationID)
void SetItemString(const char *key, PyRep *value)
SetItemString adds or sets a database entry.
void UpgradeLink(uint32 src, uint32 dest, uint8 level)
void LoadLinks(uint32 ccPinID, std::map< uint32, PI_Link > &links)
void SetProgramResults(uint32 ecuID, uint16 typeID, uint16 numCycles, float headRadius, float cycleTime, uint32 qtyPerCycle)
void Start(uint32 setTimerTime=0, bool changeResetTimer=true)