EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
MapData Class Reference

#include "MapData.h"

Inheritance diagram for MapData:
Collaboration diagram for MapData:

Public Member Functions

PyTupleGetStationExtraInfo ()
 
PyObjectGetPseudoSecurities ()
 
- Public Member Functions inherited from Singleton< MapData >
 Singleton ()
 Primary constructor. More...
 

Private Attributes

PyTuplem_stationExtraInfo
 
PyObjectm_pseudoSecurities
 
std::multimap< uint32, uint32m_regionJumps
 
std::multimap< uint32, uint32m_constJumps
 
std::multimap< uint32, uint32m_systemJumps
 

MapData.cpp

a group of methods and functions to get map info. this is mostly used for getting random points in system, system jumps, and misc mission destination info

  • added static data for StationExtraInfo (from mapservice) : Allan
    Date
    : 13 November 2018
 MapData ()
 
 ~MapData ()
 
int Initialize ()
 
void Clear ()
 
void Close ()
 
void GetInfo ()
 
void GetMissionDestination (Agent *pAgent, uint8 misionType, MissionOffer &offer)
 
void Populate ()
 

Additional Inherited Members

- Static Public Member Functions inherited from Singleton< MapData >
static MapDataget ()
 
- Static Protected Attributes inherited from Singleton< MapData >
static std::shared_ptr< MapDatamInstance
 

Detailed Description

Definition at line 20 of file MapData.h.

Constructor & Destructor Documentation

MapData::MapData ( )

Definition at line 20 of file MapData.cpp.

References m_constJumps, m_regionJumps, and m_systemJumps.

21 : m_stationExtraInfo(nullptr),
22 m_pseudoSecurities(nullptr)
23 {
24  m_regionJumps.clear();
25  m_constJumps.clear();
26  m_systemJumps.clear();
27 }
std::multimap< uint32, uint32 > m_constJumps
Definition: MapData.h:48
PyTuple * m_stationExtraInfo
Definition: MapData.h:44
std::multimap< uint32, uint32 > m_regionJumps
Definition: MapData.h:47
PyObject * m_pseudoSecurities
Definition: MapData.h:45
std::multimap< uint32, uint32 > m_systemJumps
Definition: MapData.h:49
MapData::~MapData ( )

Definition at line 29 of file MapData.cpp.

30 {
31 }

Member Function Documentation

void MapData::Clear ( )

Definition at line 46 of file MapData.cpp.

References m_constJumps, m_regionJumps, and m_systemJumps.

47 {
48  m_regionJumps.clear();
49  m_constJumps.clear();
50  m_systemJumps.clear();
51 }
std::multimap< uint32, uint32 > m_constJumps
Definition: MapData.h:48
std::multimap< uint32, uint32 > m_regionJumps
Definition: MapData.h:47
std::multimap< uint32, uint32 > m_systemJumps
Definition: MapData.h:49
void MapData::Close ( )

Definition at line 33 of file MapData.cpp.

References m_pseudoSecurities, m_stationExtraInfo, and PySafeDecRef.

34 {
37 }
PyTuple * m_stationExtraInfo
Definition: MapData.h:44
PyObject * m_pseudoSecurities
Definition: MapData.h:45
#define PySafeDecRef(op)
Definition: PyRep.h:61
void MapData::GetInfo ( )

Definition at line 53 of file MapData.cpp.

54 {
55  // print out list of bad jumps
56  // m_badJumps
57 }
void MapData::GetMissionDestination ( Agent pAgent,
uint8  misionType,
MissionOffer offer 
)
Todo:
not sure why this is empty, but have segfaults from empty vector.
Todo:
make function to find route from origin to constellation/region jump point.

Definition at line 95 of file MapData.cpp.

References _log, Mission::Type::Anomic, Mission::Type::Arc, Mission::Type::Burner, StationData::corporationID, Mission::Type::Cosmos, Mission::Type::Courier, Mission::Type::Data, MissionOffer::destinationID, MissionOffer::destinationOwnerID, MissionOffer::destinationSystemID, MissionOffer::destinationTypeID, MissionOffer::dungeonLocationID, MissionOffer::dungeonSolarSystemID, Mission::Type::Encounter, Agent::GetLevel(), Agent::GetStationID(), Agent::GetSystemID(), IsEven(), m_systemJumps, MakeRandomInt(), Corp::ActivityType::Mining, Agents::Range::NearestCareerHub, Agents::Range::NearestEnemyCombatZone, Agents::Range::NeighboringConstellation, Agents::Range::NeighboringConstellationSameRegion, Agents::Range::NeighboringSystem, Agents::Range::NeighboringSystemSameConstellation, MissionOffer::range, Agents::Type::Research, Agents::Range::SameConstellation, Agents::Range::SameOrNeighboringConstellation, Agents::Range::SameOrNeighboringConstellationSameRegion, Agents::Range::SameOrNeighboringSystem, Agents::Range::SameOrNeighboringSystemSameConstellation, Agents::Range::SameSystem, sDataMgr, ship, stDataMgr, Mission::Type::Storyline, StationData::systemID, Mission::Type::Trade, Agents::Type::Tutorial, and StationData::typeID.

96 {
97  using namespace Mission::Type;
98  using namespace Agents::Range;
99 
100  uint8 destRange = offer.range;
101  bool station = true, ship = false; // will have to tweak this later for particular mission events
102 
103  // determine distance based on preset range from db or in some cases, mission type and agent level
104  switch(misionType) {
105  case Tutorial: {
106  // always same system?
107  destRange = SameSystem;
108  } break;
109  case Data:
110  case Trade:
111  case Courier:
112  case Research: {
113  //destRange += m_data.level *2;
114  } break;
115  case Arc:
116  case Anomic:
117  case Burner:
118  case Cosmos: {
119  station = false;
120  destRange += pAgent->GetLevel();
121  } break;
122  case Mining:
123  case Encounter:
124  case Storyline: {
125  station = false;
126  //destRange = offer.range;
127  } break;
128  }
129 
130  switch(destRange) {
131  case 0:
132  case SameSystem: //1
135  case SameConstellation: { //6
136  uint32 systemID = pAgent->GetSystemID();
137  if (station)
138  if (sDataMgr.GetStationCount(systemID) < 2)
139  ++destRange;
140 
141  if ((destRange > 1) or (IsEven(MakeRandomInt(0, 100)))) {
142  // neighboring system
143  bool run = true;
144  uint8 count = 0;
145  std::vector<uint32> sysList;
146  auto itr = m_systemJumps.equal_range(systemID);
147  for (auto it = itr.first; it != itr.second; ++it)
148  sysList.push_back(it->second);
150  if (sysList.empty()) {
151  StationData data = StationData();
152  stDataMgr.GetStationData(pAgent->GetStationID(), data);
153  offer.destinationOwnerID = data.corporationID;
154  offer.destinationSystemID = data.systemID;
155  offer.destinationTypeID = data.typeID;
156  return;
157  }
158 
159  while (run) {
160  run = false;
161  systemID = sysList.at(MakeRandomInt(0, (sysList.size() -1)));
162  if (station and (sDataMgr.GetStationCount(systemID) < 1)) {
163  run = true;
164  ++count;
165  }
166  if (run and (count > sysList.size())) {
167  // problem....no station found within one jump
168  offer.destinationID = 0;
169  _log(AGENT__ERROR, "Agent::GetMissionDestination() - no station found within 1 jump." );
170  return;
171  }
172  }
173  }
174  if (station) {
175  std::vector<uint32> list;
176  sDataMgr.GetStationList(systemID, list);
177  if (list.size() < 2) {
178  offer.destinationID = list.at(0);
179  } else {
180  bool run = true;
181  while (run) {
182  offer.destinationID = list.at(MakeRandomInt(0, (list.size() -1)));
183  if (offer.destinationID != pAgent->GetStationID())
184  run = false;
185  }
186  }
187  } else if (ship) {
188  ; // code here for agent in ship
189  }
190  } break;
191 
192  //may have to create data objects based on constellation to do ranges in neighboring constellation
193  // could use data from mapSolarSystemJumps - fromRegionID, fromConstellationID, fromSolarSystemID, toSolarSystemID, toConstellationID, toRegionID
194 
196  case SameOrNeighboringSystem: //3
197  case NeighboringSystem: { //5
198  uint32 systemID = pAgent->GetSystemID();
199  if (IsEven(MakeRandomInt(0, 100))) {
200  // same constellation
201  } else {
202  // neighboring constellation
203  systemID = 0;
204  }
205  if (ship) {
206  ; // code here for agent in ship
207  }
208  } break;
211  if (station)
212  sDataMgr.GetStationConstellation(pAgent->GetStationID());
213  } break;
215  case NeighboringConstellation: { //10
216  if (station)
217  sDataMgr.GetStationRegion(pAgent->GetStationID());
218  } break;
219  // not sure how to do these two yet....
220  case NearestEnemyCombatZone: { //11
221  } break;
222  case NearestCareerHub: { //12
223  } break;
224  }
225 
226  if (sDataMgr.IsStation(offer.destinationID)) {
227  StationData data = StationData();
228  stDataMgr.GetStationData(offer.destinationID, data);
229  offer.destinationOwnerID = data.corporationID;
230  offer.destinationSystemID = data.systemID;
231  offer.destinationTypeID = data.typeID;
232  } else if (ship) {
233  offer.destinationSystemID = offer.destinationID;
234  offer.destinationTypeID = sDataMgr.GetStaticType(offer.destinationID);
235  offer.dungeonLocationID = offer.destinationID;
236  offer.dungeonSolarSystemID = offer.destinationID;
237  } else {
238  offer.destinationSystemID = offer.destinationID;
239  offer.destinationTypeID = sDataMgr.GetStaticType(offer.destinationID);
240  offer.dungeonLocationID = offer.destinationID;
241  offer.dungeonSolarSystemID = offer.destinationID;
242  }
243 }
unsigned __int8 uint8
Definition: eve-compat.h:46
uint32 corporationID
#define _log(type, fmt,...)
Definition: logsys.h:124
#define stDataMgr
uint32 GetSystemID()
Definition: Agent.h:39
uint16 destinationTypeID
Definition: EVE_Missions.h:40
uint32 GetStationID()
Definition: Agent.h:40
uint32 destinationSystemID
Definition: EVE_Missions.h:53
uint32 dungeonLocationID
Definition: EVE_Missions.h:54
bool IsEven(int64 number)
Definition: misc.h:88
itemID[count] Create count or of the specified() x() entityID Translocate to the specified entity Immediately stops ship
unsigned __int32 uint32
Definition: eve-compat.h:50
uint32 destinationOwnerID
Definition: EVE_Missions.h:52
int64 MakeRandomInt(int64 low, int64 high)
Generates random integer from interval [low; high].
Definition: misc.cpp:109
std::multimap< uint32, uint32 > m_systemJumps
Definition: MapData.h:49
uint32 dungeonSolarSystemID
Definition: EVE_Missions.h:55
uint8 GetLevel()
Definition: Agent.h:34
uint32 destinationID
Definition: EVE_Missions.h:51
#define sDataMgr

Here is the call graph for this function:

PyObject* MapData::GetPseudoSecurities ( )
inline

Definition at line 35 of file MapData.h.

References m_pseudoSecurities, and PyIncRef.

PyObject * m_pseudoSecurities
Definition: MapData.h:45
#define PyIncRef(op)
Definition: PyRep.h:56
PyTuple* MapData::GetStationExtraInfo ( )
inline

Definition at line 34 of file MapData.h.

References m_stationExtraInfo, and PyIncRef.

PyTuple * m_stationExtraInfo
Definition: MapData.h:44
#define PyIncRef(op)
Definition: PyRep.h:56
int MapData::Initialize ( )

Definition at line 39 of file MapData.cpp.

References Populate(), and sLog.

40 {
41  Populate();
42  sLog.Blue(" MapData", "Map Data Manager Initialized.");
43  return 1;
44 }
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
void Populate()
Definition: MapData.cpp:59

Here is the call graph for this function:

void MapData::Populate ( )
protected

Definition at line 59 of file MapData.cpp.

References Map::Jumptype::Constellation, DBResultRow::GetInt(), MapDB::GetPseudoSecurities(), DBQueryResult::GetRow(), MapDB::GetStationExtraInfo(), MapDB::GetStationOpServices(), MapDB::GetStationServiceInfo(), MapDB::GetSystemJumps(), GetTimeMSeconds(), PyTuple::items, m_constJumps, m_pseudoSecurities, m_regionJumps, m_stationExtraInfo, m_systemJumps, Map::Jumptype::Region, SafeDelete(), and sLog.

Referenced by Initialize().

60 {
62 
63  double start = GetTimeMSeconds();
64 
65  m_stationExtraInfo = new PyTuple(3);
69  sLog.Cyan(" MapData", "StationExtraInfo loaded in %.3fms.",(GetTimeMSeconds() - start));
70 
71  start = GetTimeMSeconds();
72  DBQueryResult* res = new DBQueryResult();
74  DBResultRow row;
75  while (res->GetRow(row)) {
76  //SELECT ctype, fromsol, tosol FROM mapConnections
77  if (row.GetInt(0) == Map::Jumptype::Region) {
78  m_regionJumps.emplace(row.GetInt(1), row.GetInt(2));
79  } else if (row.GetInt(0) == Map::Jumptype::Constellation) {
80  m_constJumps.emplace(row.GetInt(1), row.GetInt(2));
81  } else {
82  m_systemJumps.emplace(row.GetInt(1), row.GetInt(2));
83  }
84  }
85 
86  sLog.Cyan(" MapData", "%u Region jumps, %u Constellation jumps and %u System jumps loaded in %.3fms.", //
87  m_regionJumps.size(), m_constJumps.size(), m_systemJumps.size(), (GetTimeMSeconds() - start));
88 
89  // cleanup
90  SafeDelete(res);
91 }
std::multimap< uint32, uint32 > m_constJumps
Definition: MapData.h:48
int32 GetInt(uint32 index) const
Definition: dbcore.cpp:635
PyTuple * m_stationExtraInfo
Definition: MapData.h:44
static void GetSystemJumps(DBQueryResult &res)
Definition: MapDB.cpp:194
static PyObject * GetStationOpServices()
Definition: MapDB.cpp:60
std::multimap< uint32, uint32 > m_regionJumps
Definition: MapData.h:47
Python tuple.
Definition: PyRep.h:567
void SafeDelete(T *&p)
Deletes and nullifies a pointer.
Definition: SafeMem.h:83
bool GetRow(DBResultRow &into)
Definition: dbcore.cpp:552
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
static PyObject * GetPseudoSecurities()
Definition: MapDB.cpp:31
double GetTimeMSeconds()
Definition: utils_time.cpp:104
static PyObject * GetStationExtraInfo()
Definition: MapDB.cpp:42
PyObject * m_pseudoSecurities
Definition: MapData.h:45
std::multimap< uint32, uint32 > m_systemJumps
Definition: MapData.h:49
storage_type items
Definition: PyRep.h:628
static PyObject * GetStationServiceInfo()
Definition: MapDB.cpp:72

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

std::multimap<uint32, uint32> MapData::m_constJumps
private

Definition at line 48 of file MapData.h.

Referenced by Clear(), MapData(), and Populate().

PyObject* MapData::m_pseudoSecurities
private

Definition at line 45 of file MapData.h.

Referenced by Close(), GetPseudoSecurities(), and Populate().

std::multimap<uint32, uint32> MapData::m_regionJumps
private

Definition at line 47 of file MapData.h.

Referenced by Clear(), MapData(), and Populate().

PyTuple* MapData::m_stationExtraInfo
private

Definition at line 44 of file MapData.h.

Referenced by Close(), GetStationExtraInfo(), and Populate().

std::multimap<uint32, uint32> MapData::m_systemJumps
private

Definition at line 49 of file MapData.h.

Referenced by Clear(), GetMissionDestination(), MapData(), and Populate().


The documentation for this class was generated from the following files: