EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Colony.h
Go to the documentation of this file.
1 /*
2  * ------------------------------------------------------------------------------------
3  * LICENSE:
4  * ------------------------------------------------------------------------------------
5  * This file is part of EVEmu: EVE Online Server Emulator
6  * Copyright 2006 - 2021 The EVEmu Team
7  * For the latest information visit https://evemu.dev
8  * ------------------------------------------------------------------------------------
9  * This program is free software; you can redistribute it and/or modify it under
10  * the terms of the GNU Lesser General Public License as published by the Free Software
11  * Foundation; either version 2 of the License, or (at your option) any later
12  * version.
13  *
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License along with
19  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
20  * Place - Suite 330, Boston, MA 02111-1307, USA, or go to
21  * http://www.gnu.org/copyleft/lesser.txt.
22  * ------------------------------------------------------------------------------------
23  * Author: Cometo
24  * Updates: Allan
25  */
26 
27 #ifndef __COLONY_H_INCL__
28 #define __COLONY_H_INCL__
29 
30 #include "PyCallable.h"
31 
32 #include "planet/PlanetDB.h"
33 
34 class PlanetSE;
35 class SystemEntity;
36 class PlanetMgr;
37 
38 class Colony {
39 public:
40  Colony(PyServiceMgr* mgr, Client* pClient, SystemEntity* pSE);
41  ~Colony();
42 
43  void Init();
44  void Load();
45  void LoadPlants(); // for loading current data to pins
46  void Save();
47  void Update(bool updateTimes=false);
48  void Shutdown();
49  void UpdatePlantPins(uint32 pinID=0); // for saving current data from runtime plantPin to saved colonyPin
50  void AbandonColony();
51 
52  void Process();
53  void ProcessECUs(bool& save);
54  void ProcessPlants(bool& save);
55 
56  void RemovePin(uint32 pinID);
57  void RemoveLink(uint32 src, uint32 dest);
58  void RemoveRoute(uint16 routeID);
59 
60  void UpgradeLink(uint32 src, uint32 dest, uint8 level);
61  void UpgradeCommandCenter(uint32 pinID, int8 level);
62 
63  void CreatePin(uint32 groupID, uint32 pinID, uint32 typeID, double latitude, double longitude);
64  void CreateLink(uint32 src, uint32 dest, uint16 level);
65  void CreateRoute(uint16 routeID, uint32 typeID, uint32 qty, PyList* path);
66  void CreateCommandPin(uint32 itemID, uint32 typeID, double latitude, double longitude);
67 
68  void AddExtractorHead(uint32 ecuID, uint16 headID, double latitude, double longitude);
69  void MoveExtractorHead(uint32 ecuID, uint16 headID, double latitude, double longitude);
70  void KillExtractorHead(uint32 ecuID, uint16 headID);
71 
72  void InstallProgram(uint32 ecuID, uint16 typeID, float headRadius, PlanetMgr* pPMgr);
73  void SetSchematic(uint32 pinID, uint8 schematicID=0);
74  void SetProgramResults(uint32 ecuID, uint16 typeID, uint16 numCycles, float headRadius, float cycleTime, uint32 qtyPerCycle);
75 
76  PyRep* LaunchCommodities(uint32 pinID, std::map< uint16, uint32 >& items);
77  void PlanetXfer(uint32 spaceportID, std::map< uint32, uint16 > importItems, std::map< uint32, uint16 > exportItems, double taxRate);
78 
79  void PrioritizeRoute(uint16 routeID, uint8 priority);
80 
81  uint32 GetOwner();
82 
83  PyRep* GetColony();
84  PyTuple* GetPins();
85  PyTuple* GetLinks();
86  PyTuple* GetRoutes();
87  PyDict* TransferCommodities(uint32 srcID, uint32 destID, std::map< uint16, uint32 > items);
88 
89  bool HasColony() { return (ccPin->ccPinID ? true : false); }
90 
91  int8 GetLevel() { return ccPin->level; }
92  int64 GetSimTime() { return m_procTime; }
93 
94 private:
99 
101 
103 
104  bool m_active;
105  bool m_loaded;
106  bool m_newHead;
108 
113 
115 
116  std::vector<uint32> tempECUs;
117  std::map<uint8, uint32> tempPinIDs;
118  // pLevel, pinID
119  std::multimap<uint8, uint32> m_plantMap; // map plant's P level to pinID. to be used during Update()
120  // srcPinID, routeData
121  std::multimap<uint32, PI_Route> m_srcRoutes; // map sourcePin to routeData
122  // destPinID, routeData
123  std::multimap<uint32, PI_Route> m_destRoutes; // map destPin to routeData
124 };
125 
126 /*
127  *
128  * PlanetaryImportTax = 96, // * Planet ID
129  * PlanetaryExportTax = 97, // * Planet ID
130  * PlanetaryConstruction = 98,
131  * AttrImportTax = 1638,
132  * AttrExportTax = 1639,
133  * AttrImportTaxMultiplier = 1640,
134  * AttrExportTaxMultiplier = 1641,
135  * AttrnpcCustomsOfficeTaxRate = 1780,
136  * AttrdefaultCustomsOfficeTaxRate = 1781,
137  *
138  Command Center Properties
139  Level Capy CPU PG Upgrade Cost
140  0 500 m3 1,675 tf 6,000 MW 0 ISK
141  1 500 m3 7,057 tf 9,000 MW 580k ISK
142  2 500 m3 12,136 tf 12,000 MW 930k ISK
143  3 500 m3 17,215 tf 15,000 MW 1.2m ISK
144  4 500 m3 21,315 tf 17,000 MW 1.5m ISK
145  5 500 m3 25,415 tf 19,000 MW 2.1m ISK
146 
147  Structure Properties
148  Name CPU Power Cost
149  Extractor Control Unit 400 tf 2600 MW 45m ISK
150  Extractor Head 110 tf 550 MW 0 ISK
151  Basic Industry Facility 200 tf 800 MW 75m ISK
152  Advanced Industry Facility 500 tf 700 MW 250m ISK
153  High-Tech Industry Facility 1100 tf 400 MW 525m ISK
154  Storage Facility 500 tf 700 MW 250m ISK
155  Space Port 3600 tf 700 MW 900m ISK
156 
157 
158  *
159  * Link Requirements by Distance
160  Distance CPU Power
161  2.5 km 16 tf 11 MW
162  10 km 18 tf 12 MW
163  20 km 20 tf 14 MW
164  50 km 26 tf 18 MW
165  100 km 36 tf 26 MW
166  200 km 56 tf 41 MW
167  500 km 116 tf 86 MW
168  1000 km 215 tf 160 MW
169  2000 km 416 tf 311 MW
170  5000 km 1016 tf 761 MW
171  40000 km 8016 tf 6001 MW
172 
173 
174  Link Upgrade Costs
175 
176  Data on relative costs of upgrading the link capacity (uses a link that is 500km as a base):
177  Level Capacity CPU Power
178  0 250 m3 116 tf 86 MW
179  1 500 m3 280 tf 183 MW
180  2 1000 m3 481 tf 291 MW
181  3 2000 m3 713 tf 407 MW
182  4 4000 m3 968 tf 528 MW
183  5 8000 m3 1245 tf 655 MW
184  6 16 km3 1542 tf 786 MW
185  7 32 km3 1855 tf 921 MW
186  8 64 km3 2185 tf 1059 MW
187  9 128 km3 2530 tf 1200 MW
188  10 256 km3 2889 tf 1344 MW
189 
190  */
191 #endif
192 
193 /* {'messageKey': 'RouteFailedValidationCannotRouteCommodities', 'dataID': 17875533, 'suppressable': False, 'bodyID': 256544, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3293}
194  * {'messageKey': 'RouteFailedValidationExpeditedDestinationCannotAccept', 'dataID': 17876139, 'suppressable': False, 'bodyID': 256765, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3376}
195  * {'messageKey': 'RouteFailedValidationExpeditedSourceLacksCommodity', 'dataID': 17876179, 'suppressable': False, 'bodyID': 256779, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3322}
196  * {'messageKey': 'RouteFailedValidationExpeditedSourceLacksCommodityQty', 'dataID': 17876176, 'suppressable': False, 'bodyID': 256778, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3323}
197  * {'messageKey': 'RouteFailedValidationExpeditedSourceNotReady', 'dataID': 17875596, 'suppressable': False, 'bodyID': 256567, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3325}
198  * {'messageKey': 'RouteFailedValidationExpeditedSourceNotStorage', 'dataID': 17875590, 'suppressable': False, 'bodyID': 256565, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3321}
199  * {'messageKey': 'RouteFailedValidationLinkDoesNotExist', 'dataID': 17875530, 'suppressable': False, 'bodyID': 256543, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3292}
200  * {'messageKey': 'RouteFailedValidationNoBandwidthAvailable', 'dataID': 17875593, 'suppressable': False, 'bodyID': 256566, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3324}
201  * {'messageKey': 'RouteFailedValidationPinDoesNotExist', 'dataID': 17875524, 'suppressable': False, 'bodyID': 256541, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3290}
202  * {'messageKey': 'RouteFailedValidationPinNotYours', 'dataID': 17875527, 'suppressable': False, 'bodyID': 256542, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3291}
203  * {'messageKey': 'RouteRemoveNotFound', 'dataID': 17875539, 'suppressable': False, 'bodyID': 256546, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3295}
204  * {'messageKey': 'RouteRemoveRouteNotYours', 'dataID': 17875542, 'suppressable': False, 'bodyID': 256547, 'messageType': 'notify', 'urlAudio': '', 'urlIcon': '', 'titleID': None, 'messageID': 3296}
205  * {'messageKey': 'RunProcessCycle', 'dataID': 17881150, 'suppressable': False, 'bodyID': 258668, 'messageType': 'info', 'urlAudio': '', 'urlIcon': '', 'titleID': 258667, 'messageID': 1969}
206  */
Base Python wire object.
Definition: PyRep.h:66
unsigned __int8 uint8
Definition: eve-compat.h:46
bool m_loaded
Definition: Colony.h:105
void PlanetXfer(uint32 spaceportID, std::map< uint32, uint16 > importItems, std::map< uint32, uint16 > exportItems, double taxRate)
Definition: Colony.cpp:1048
int64 GetSimTime()
Definition: Colony.h:92
void Save()
Definition: Colony.cpp:190
void KillExtractorHead(uint32 ecuID, uint16 headID)
Definition: Colony.cpp:743
Python's dictionary.
Definition: PyRep.h:719
uint8 level
Definition: EVE_Planet.h:231
void Process()
Definition: Colony.cpp:203
int8 GetLevel()
Definition: Colony.h:91
Client * m_client
Definition: Colony.h:98
void ProcessPlants(bool &save)
Definition: Colony.cpp:1500
void CreatePin(uint32 groupID, uint32 pinID, uint32 typeID, double latitude, double longitude)
Definition: Colony.cpp:373
uint32 GetOwner()
Definition: Colony.cpp:249
void RemoveRoute(uint16 routeID)
Definition: Colony.cpp:697
void AddExtractorHead(uint32 ecuID, uint16 headID, double latitude, double longitude)
Definition: Colony.cpp:707
Python tuple.
Definition: PyRep.h:567
signed __int8 int8
Definition: eve-compat.h:45
void Shutdown()
Definition: Colony.cpp:157
bool m_newHead
Definition: Colony.h:106
PyTuple * GetLinks()
Definition: Colony.cpp:1277
Definition: Colony.h:38
bool HasColony()
Definition: Colony.h:89
void Update(bool updateTimes=false)
Definition: Colony.cpp:1349
void UpdatePlantPins(uint32 pinID=0)
Definition: Colony.cpp:304
int64 m_procTime
Definition: Colony.h:114
uint16 m_pg
Definition: Colony.h:110
PyRep * LaunchCommodities(uint32 pinID, std::map< uint16, uint32 > &items)
Definition: Colony.cpp:927
PyTuple * GetRoutes()
Definition: Colony.cpp:1293
void RemoveLink(uint32 src, uint32 dest)
Definition: Colony.cpp:684
std::map< uint8, uint32 > tempPinIDs
Definition: Colony.h:117
void Init()
Definition: Colony.cpp:142
std::multimap< uint32, PI_Route > m_destRoutes
Definition: Colony.h:123
void CreateRoute(uint16 routeID, uint32 typeID, uint32 qty, PyList *path)
Definition: Colony.cpp:505
void CreateLink(uint32 src, uint32 dest, uint16 level)
Definition: Colony.cpp:477
PlanetSE * m_pSE
Definition: Colony.h:96
void InstallProgram(uint32 ecuID, uint16 typeID, float headRadius, PlanetMgr *pPMgr)
Definition: Colony.cpp:794
PyDict * TransferCommodities(uint32 srcID, uint32 destID, std::map< uint16, uint32 > items)
Definition: Colony.cpp:864
void CreateCommandPin(uint32 itemID, uint32 typeID, double latitude, double longitude)
Definition: Colony.cpp:362
bool m_toUpdate
Definition: Colony.h:107
PlanetDB m_db
Definition: Colony.h:102
uint16 m_cpu
Definition: Colony.h:111
Timer m_colonyTimer
Definition: Colony.h:100
Definition: Client.h:66
uint32 ccPinID
Definition: EVE_Planet.h:232
std::vector< uint32 > tempECUs
Definition: Colony.h:116
unsigned __int32 uint32
Definition: eve-compat.h:50
PI_CCPin * ccPin
Definition: Colony.h:97
bool m_active
Definition: Colony.h:104
void Load()
Definition: Colony.cpp:164
void AbandonColony()
Definition: Colony.cpp:341
PyTuple * GetPins()
Definition: Colony.cpp:1206
void ProcessECUs(bool &save)
Definition: Colony.cpp:1385
signed __int64 int64
Definition: eve-compat.h:51
void MoveExtractorHead(uint32 ecuID, uint16 headID, double latitude, double longitude)
Definition: Colony.cpp:724
void UpgradeCommandCenter(uint32 pinID, int8 level)
Definition: Colony.cpp:591
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
void SetSchematic(uint32 pinID, uint8 schematicID=0)
Definition: Colony.cpp:753
uint32 m_colonyID
Definition: Colony.h:112
PyServiceMgr * m_svcMgr
Definition: Colony.h:95
std::multimap< uint32, PI_Route > m_srcRoutes
Definition: Colony.h:121
Definition: timer.h:30
~Colony()
Definition: Colony.cpp:131
Colony(PyServiceMgr *mgr, Client *pClient, SystemEntity *pSE)
Definition: Colony.cpp:109
void PrioritizeRoute(uint16 routeID, uint8 priority)
Definition: Colony.cpp:1195
PyRep * GetColony()
Definition: Colony.cpp:1313
std::multimap< uint8, uint32 > m_plantMap
Definition: Colony.h:119
void RemovePin(uint32 pinID)
Definition: Colony.cpp:615
unsigned __int16 uint16
Definition: eve-compat.h:48
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
Python list.
Definition: PyRep.h:639
void UpgradeLink(uint32 src, uint32 dest, uint8 level)
Definition: Colony.cpp:603
void SetProgramResults(uint32 ecuID, uint16 typeID, uint16 numCycles, float headRadius, float cycleTime, uint32 qtyPerCycle)
Definition: Colony.cpp:832
uint8 m_pLevel
Definition: Colony.h:109
void LoadPlants()
Definition: Colony.cpp:254