EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
CustomsOffice.cpp
Go to the documentation of this file.
1 
10 /*
11  * POS__ERROR
12  * POS__WARNING
13  * POS__MESSAGE
14  * POS__DUMP
15  * POS__DEBUG
16  * POS__DESTINY
17  * POS__SLIMITEM
18  * POS__TRACE
19  */
20 
21 
22 #include "Client.h"
23 #include "EntityList.h"
24 #include "EVEServerConfig.h"
25 #include "StaticDataMgr.h"
27 #include "packets/Planet.h"
28 #include "planet/CustomsOffice.h"
29 #include "planet/Planet.h"
30 #include "pos/Structure.h"
31 #include "system/Container.h"
32 #include "system/Damage.h"
33 #include "system/SystemBubble.h"
34 #include "system/SystemManager.h"
36 
37 
39 : ObjectSystemEntity(sRef, services, system),
40 m_system(system)
41 {
42  m_warID = data.factionID;
43  m_allyID = data.allianceID;
44  m_corpID = data.corporationID;
45  m_ownerID = data.ownerID;
46 
47  // zero-init data
50 
51  m_oData.planetID = atoi(m_self->customInfo().c_str());
53 
54  sRef->SetMySE(this);
55 
56  _log(SE__DEBUG, "Created CustomsSE for item %s (%u).", sRef->name(), sRef->itemID());
57 }
58 
60 {
61  // load data.
63 
64  // pull saved data from db
66  _log(POS__MESSAGE, "CustomsSE::Init() - %s(%u) has no saved data. Initializing default set.", m_self->name(), m_cData.itemID);
67  InitData();
69  }
70 
72 
73  // this should be based on state/status
75 }
76 
78 {
79  // init all data.
80  m_cData.state = EVEPOS::EntityState::Anchored; // allow corp settings menu
81  m_cData.timestamp = 0;
83  m_cData.allowAlliance = false;
84  m_cData.allowStandings = false;
88  m_oData.level = 1; //{1-CUSTOMSOFFICE_SPACEPORT, 2-CUSTOMSOFFICE_SPACEELEVATOR} this is for display model
90 
91  std::map<uint8, float> taxRateValues;
92  taxRateValues[EVEPOS::TaxValues::Corp] = 0.05f;
93  taxRateValues[EVEPOS::TaxValues::Alliance] = 0.07f;
94  taxRateValues[EVEPOS::TaxValues::StandingHorrible] = 0.20f;
95  taxRateValues[EVEPOS::TaxValues::StandingBad] = 0.10f;
96  taxRateValues[EVEPOS::TaxValues::StandingNeutral] = 0.08f;
97  taxRateValues[EVEPOS::TaxValues::StandingGood] = 0.05f;
98  taxRateValues[EVEPOS::TaxValues::StandingHigh] = 0.02f;
99  m_cData.taxRateValues = taxRateValues;
100 /*positionRowHeader = blue.DBRowDescriptor((('itemID', const.DBTYPE_I8),
101  ('x', const.DBTYPE_R5),
102  ('y', const.DBTYPE_R5),
103  ('z', const.DBTYPE_R5),
104  ('yaw', const.DBTYPE_R4),
105  ('pitch', const.DBTYPE_R4),
106  ('roll', const.DBTYPE_R4)))
107  */
108  // yaw, pitch, roll = dunRotation
109  /* yaw is rotation on y axis [-180/180]
110  * +yaw is counterclockwise (+x starting at z 0)
111  * pitch is rotation on x axis [-90/90]
112  * +pitch is downward (-y from 0)
113  * roll is rotation on z axis [-180/180]
114  * +roll is counterclockwise from y 0
115  */
116  GPoint pos(m_self->position());
117  GPoint targ(m_planetSE->GetPosition());
118  float z = targ.z - pos.z; // rise on z axis
119  float x = targ.x - pos.x; // run on x axis
120  float y = targ.y - pos.y; // rise on y axis
121  float yaw = atan2(x, z); // rad from position to target on xz plane
122  float hyp = sqrt(pow(z, 2) + pow(x, 2)); // run on y plane
123  float pitch = atan2(y, hyp); // rad from position to target on hy plane
124 
125  // verify quadrant and set rotation accordingly
126  /* quadrant signs and corrections
127  * I = -x,+z x-90
128  * II = +x,+z 90-x
129  * III = +x,-z x+90
130  * IV = -x,-z x+180
131  */
132 /*
133  if (z < 0) {
134  if (x < 0)
135  yaw += EvE::Trig::Deg2Rad(180);
136  else
137  yaw += EvE::Trig::Deg2Rad(90);
138  } else {
139  if (x < 0)
140  yaw -= EvE::Trig::Deg2Rad(90);
141  else
142  yaw = EvE::Trig::Deg2Rad(90) - yaw;
143  }
144 */
145  if (y > 0)
146  pitch *= -1;
147 
148  /*
149  *
150  * Real: 15.280822
151  *
152  *
153  *
154  *
155  *
156  */
157 
158  // convert from radians to degrees
161  m_oData.rotation.z = 0;
162  //m_oData.rotation = m_self->position().rotationTo(m_planetSE->GetPosition());
163 
164  _log(POS__MESSAGE, "CustomsSE::InitData() - Yaw: rise: %0.5f, run: %0.5f, angle: %0.5f (%0.3f)", z, x, yaw, m_oData.rotation.x);
165  _log(POS__MESSAGE, "CustomsSE::InitData() - Pitch: rise: %0.5f, run: %0.5f, angle: %0.5f (%0.3f)", y, hyp, pitch, m_oData.rotation.y);
166 }
167 
169  /* called by EntityList::Process on every loop */
170  /* Enable base call to Process Targeting and Movement */
172 }
173 
175 { //self.selectedHour, self.taxRateValues, self.standingValue, self.allowAlliance, self.allowStandings = self.orbitalData
176  /*
177  self.taxRates = [util.KeyVal(key='corporation'),
178  util.KeyVal(key='alliance'),
179  util.KeyVal(key='standingHorrible', standing=const.contactHorribleStanding),
180  util.KeyVal(key='standingBad', standing=const.contactBadStanding),
181  util.KeyVal(key='standingNeutral', standing=const.contactNeutralStanding),
182  util.KeyVal(key='standingGood', standing=const.contactGoodStanding),
183  util.KeyVal(key='standingHigh', standing=const.contactHighStanding)]
184  */
185  PyDict* dict = new PyDict();
193  PyTuple* tuple = new PyTuple(5);
194  tuple->SetItem(0, new PyInt(m_cData.selectedHour));
195  tuple->SetItem(1, new PyObject("util.KeyVal", dict));
196  tuple->SetItem(2, new PyInt(m_cData.standingValue)); //const.contactHorribleStanding
197  tuple->SetItem(3, new PyBool(m_cData.allowAlliance));
198  tuple->SetItem(4, new PyBool(m_cData.allowStandings));
199  return tuple;
200 }
201 
202 void CustomsSE::UpdateSettings(int8 selectedHour, int8 standingValue, bool ally, bool standings, Call_TaxRateValuesDict& taxRateValues)
203 {
204  m_cData.allowAlliance = ally;
205  m_cData.allowStandings = standings;
206  m_cData.selectedHour = selectedHour;
207  m_cData.standingValue = standingValue;
208 
209  using namespace EVEPOS;
210  m_cData.taxRateValues[TaxValues::Corp] = taxRateValues.corporation;
211  m_cData.taxRateValues[TaxValues::Alliance] = taxRateValues.alliance;
212  m_cData.taxRateValues[TaxValues::StandingHorrible] = taxRateValues.standingHorrible;
213  m_cData.taxRateValues[TaxValues::StandingBad] = taxRateValues.standingBad;
214  m_cData.taxRateValues[TaxValues::StandingNeutral] = taxRateValues.standingNeutral;
215  m_cData.taxRateValues[TaxValues::StandingGood] = taxRateValues.standingGood;
216  m_cData.taxRateValues[TaxValues::StandingHigh] = taxRateValues.standingHigh;
217 
218  // save updates to db
220 }
221 
223 {
224  // get current tax rate based on set values by owning corp
225 
227 }
228 
230 {
231  // test for planetary resources here
234  throw CustomError ("You cannot put %s in a %s", iRef->name(), m_self->name());
235 }
236 
238 {
239 
240 }
241 
242 void CustomsSE::SendEffectUpdate(int16 effectID, bool active)
243 {
244  GodmaEnvironment ge;
245  ge.selfID = m_cData.itemID;
246  ge.charID = m_ownerID;
247  ge.shipID = m_cData.itemID;
248  ge.target = PyStatic.NewNone();
249  ge.subLoc = PyStatic.NewNone();
250  ge.area = new PyList();
251  ge.effectID = effectID;
252  Notify_OnGodmaShipEffect shipEff;
253  shipEff.itemID = ge.selfID;
254  shipEff.effectID = effectID;
255  shipEff.timeNow = GetFileTimeNow();
256  shipEff.start = (active ? 1 : 0);
257  shipEff.active = (active ? 1 : 0);
258  shipEff.environment = ge.Encode();
259  shipEff.startTime = shipEff.timeNow; // do we need to adjust this?
260  shipEff.duration = (active ? 0 : -1);
261  shipEff.repeat = (active ? 1 : 0);
262  shipEff.error = PyStatic.NewNone();
263  PyList* events = new PyList();
264  events->AddItem(shipEff.Encode());
265  PyTuple* event = new PyTuple(1);
266  event->SetItem(0, events);
267  m_destiny->SendSingleDestinyEvent(&event); // consumed
268 }
269 
271 {
272  PyDict *slim = new PyDict();
273  slim->SetItemString("name", new PyString(m_self->itemName()));
274  slim->SetItemString("itemID", new PyLong(m_cData.itemID));
275  slim->SetItemString("typeID", new PyInt(m_self->typeID()));
276  slim->SetItemString("ownerID", new PyInt(m_ownerID));
277  slim->SetItemString("corpID", IsCorp(m_corpID) ? new PyInt(m_corpID) : PyStatic.NewNone());
278  slim->SetItemString("allianceID", IsAlliance(m_allyID) ? new PyInt(m_allyID) : PyStatic.NewNone());
279  slim->SetItemString("warFactionID", IsFaction(m_warID) ? new PyInt(m_warID) : PyStatic.NewNone());
280  slim->SetItemString("posTimestamp", new PyLong(m_cData.timestamp));
281  slim->SetItemString("posState", new PyInt(m_cData.state));
282  slim->SetItemString("incapacitated", PyStatic.NewZero());
283  slim->SetItemString("posDelayTime", PyStatic.NewZero()); // fix this
284  PyTuple* shipData = new PyTuple(2);
285  shipData->SetItem(0, new PyLong(m_cData.itemID));
286  shipData->SetItem(1, new PyObject("foo.SlimItem", slim));
287  PyTuple* sItem = new PyTuple(2);
288  sItem->SetItem(0, new PyString("OnSlimItemChange"));
289  sItem->SetItem(1, shipData);
290  m_destiny->SendSingleDestinyUpdate(&sItem); // consumed
291 }
292 
293 
294 void CustomsSE::SetAnchor(Client* pClient, GPoint& pos)
295 {
297  pClient->SendErrorMsg("The %s is already anchored", m_self->name());
298  return; // make error here?
299  }
300 
301  m_destiny->SetPosition(pos);
302  sBubbleMgr.Add(this);
303 
304  if (is_log_enabled(POS__TRACE))
305  _log(POS__TRACE, "CustomsSE::Anchor() - TowerSE %s(%u) new position %.2f, %.2f, %.2f", GetName(), m_cData.itemID, pos.x, pos.y, pos.z);
306 
307  m_destiny->SetPosition(pos);
308  m_self->SaveItem();
309 
312  //m_delayTime = m_self->GetAttribute(AttrAnchoringDelay).get_int();
313  //m_procTimer.SetTimer(m_delayTime);
315 
316  SendSlimUpdate();
317 
318  std::vector<PyTuple*> updates;
319  SetBallFree sbf;
320  sbf.entityID = m_self->itemID();
321  sbf.is_free = false;
322  updates.push_back(sbf.Encode());
323  SetBallRadius sbr;
324  sbr.entityID = m_self->itemID();
325  sbr.radius = m_self->radius();
326  updates.push_back(sbr.Encode());
327  m_destiny->SendDestinyUpdate(updates); //consumed
328 
329  //SendEffectUpdate(anchorDropForOrbitals, true);
330  m_destiny->SendSpecialEffect(m_cData.itemID, m_cData.itemID, m_self->typeID(),0,0,"effects.AnchorDrop",0,1,1,-1,0);
331 }
332 
334 {
336  return; // make error here?
337 
340  //m_delayTime = m_self->GetAttribute(AttrUnanchoringDelay).get_int();
341  //m_procTimer.SetTimer(m_delayTime);
343 
344  SendSlimUpdate();
345 
346  //SendEffectUpdate(anchorLiftForOrbitals, true);
347  m_destiny->SendSpecialEffect(m_cData.itemID, m_cData.itemID, m_self->typeID(),0,0,"effects.AnchorLift",0,1,1,-1,0);
348 }
349 
351 {
352  using namespace Destiny;
353  //const uint16 miniballsCount = GetMiniBalls();
354  BallHeader head = BallHeader();
355  head.entityID = m_cData.itemID;
356  head.radius = GetRadius();
357  head.posX = x();
358  head.posY = y();
359  head.posZ = z();
360  head.mode = Ball::Mode::RIGID;
361  head.flags = Ball::Flag::IsGlobal /*| Ball::Flag::IsMassive | HasMiniBalls*/;
362  into.Append( head );
363 
365  main.formationID = 0xFF;
366  into.Append( main );
367 
368  /* TODO query and configure miniballs for entity
369  * NOTE MiniBalls are BROKEN!!! DO NOT USE!
370  * into.Append( miniballsCount );
371  * MiniBall miniball;
372  * for (int16 i; i<miniballsCount; i++) {
373  * miniball.x = -7701.181;
374  * miniball.y = 8060.06;
375  * miniball.z = 27878.900;
376  * miniball.radius = 1639.241;
377  * into.Append( miniball );
378  * miniball.clear();
379  * }
380 [MiniBall]
381 [Radius: 963.8593]
382 [Offset: (0, -2302, 1)]
383 [MiniBall]
384 [Radius: 1166.27]
385 [Offset: (0, 1298, 1)]
386 [MiniBall]
387 [Radius: 876.2357]
388 [Offset: (0, -502, 1)]
389 [MiniBall]
390 [Radius: 796.5781]
391 [Offset: (0, 2598, 1)]
392 */
393 
394  _log(SE__DESTINY, "CustomsSE::EncodeDestiny(): %s - id:%li, mode:%u, flags:0x%X", GetName(), head.entityID, head.mode, head.flags);
395 }
396 
398  _log(SE__SLIMITEM, "MakeSlimItem for CustomsSE %u", m_cData.itemID);
399  _log(POS__SLIMITEM, "MakeSlimItem for CustomsSE %u", m_cData.itemID);
401  PyDict *slim = new PyDict();
402  slim->SetItemString("name", new PyString(m_self->itemName()));
403  slim->SetItemString("nameID", PyStatic.NewNone());
404  slim->SetItemString("itemID", new PyLong(m_cData.itemID));
405  slim->SetItemString("typeID", new PyInt(m_self->typeID()));
406  slim->SetItemString("ownerID", new PyInt(m_ownerID)); //1000148 for interbus customs office (to be done on creation)
407  slim->SetItemString("corpID", IsCorp(m_corpID) ? new PyInt(m_corpID) : PyStatic.NewNone());
408  slim->SetItemString("allianceID", IsAlliance(m_allyID) ? new PyInt(m_allyID) : PyStatic.NewNone());
409  slim->SetItemString("warFactionID", IsFaction(m_warID) ? new PyInt(m_warID) : PyStatic.NewNone());
410  slim->SetItemString("level", new PyInt(m_oData.level));
411  slim->SetItemString("orbitalTimestamp", new PyLong(m_cData.timestamp));
412  slim->SetItemString("planetID", new PyInt(m_oData.planetID)); // planetID for this orbital
413  slim->SetItemString("orbitalState", new PyInt(m_cData.state)); // this needs to be ORBITAL state...not structure state
414  PyTuple* tuple = new PyTuple(3); // yaw, pitch, roll = getattr(slimItem, 'dunRotation', None)
415  tuple->SetItem(0, new PyFloat(m_oData.rotation.x));
416  tuple->SetItem(1, new PyFloat(m_oData.rotation.y));
417  tuple->SetItem(2, new PyFloat(m_oData.rotation.z)); //MakeRandomFloat(-180, 180)
418  slim->SetItemString("dunRotation", tuple); // direction to planet
419  // dunno what these are...
420  slim->SetItemString("orbitalHackerProgress", m_oData.orbitalHackerProgress > 0 ? new PyFloat(m_oData.orbitalHackerProgress) : PyStatic.NewNone()); // packets show this as none if not value
421  slim->SetItemString("orbitalHackerID", m_oData.orbitalHackerID > 0 ? new PyInt(m_oData.orbitalHackerID) : PyStatic.NewNone()); // packets show this as none if not value
422 
423  if (is_log_enabled(POS__SLIMITEM)) {
424  _log( POS__SLIMITEM, "CustomsSE::MakeSlimItem() - %s(%u)", GetName(), m_cData.itemID);
425  slim->Dump(POS__SLIMITEM, " ");
426  }
427  return slim;
428 }
429 
430 void CustomsSE::Killed(Damage &fatal_blow) {
431  if ((m_bubble == nullptr) or (m_destiny == nullptr) or (m_system == nullptr))
432  return; // make error here?
433 
434  uint32 killerID = 0;
435  Client* pClient(nullptr);
436  SystemEntity* killer = fatal_blow.srcSE;
437 
438  if (killer->HasPilot()) {
439  pClient = killer->GetPilot();
440  killerID = pClient->GetCharacterID();
441  } else if (killer->IsDroneSE()) {
442  pClient = sEntityList.FindClientByCharID( killer->GetSelf()->ownerID() );
443  if (pClient == nullptr) {
444  sLog.Error("CustomsSE::Killed()", "killer == IsDrone and pPlayer == nullptr");
445  } else {
446  killerID = pClient->GetCharacterID();
447  }
448  } else {
449  killerID = killer->GetID();
450  }
451 
452  std::stringstream blob;
453  blob << "<items>";
454  std::vector<InventoryItemRef> survivedItems;
455  std::map<uint32, InventoryItemRef> deadShipInventory;
456  deadShipInventory.clear();
457  m_self->GetMyInventory()->GetInventoryMap(deadShipInventory);
458  if (!deadShipInventory.empty()) {
459  uint32 s = 0, d = 0, x = 0;
460  for (auto cur : deadShipInventory) {
461  d = 0;
462  x = cur.second->quantity();
463  s = (cur.second->isSingleton() ? 1 : 0);
464  if (cur.second->categoryID() == EVEDB::invCategories::Blueprint) {
465  // singleton for bpo = 1, bpc = 2.
466  BlueprintRef bpRef = BlueprintRef::StaticCast(cur.second);
467  s = (bpRef->copy() ? 2 : s);
468  }
469  blob << "<i t=" << cur.second->typeID() << " f=" << cur.second->flag() << " s=" << s ;
470  // all items have 50% chance of drop, even from popped ship
471  if (IsEven(MakeRandomInt(0, 100))) {
472  // item survived. check qty for drop
473  if (x > 1) {
474  d = MakeRandomInt(0, x);
475  x -= d;
476  }
477  // move item to vector for insertion into wreck later on
478  survivedItems.push_back(cur.second);
479  }
480  blob << " d=" << d << " x=" << x << "/>";
481  }
482  }
483  blob << "</items>";
484 
485  /* populate kill data for killMail and save to db -allan 01May16 --updated 13July17 */
488  CharKillData data = CharKillData();
489  data.solarSystemID = m_system->GetID();
490  data.victimCharacterID = 0; // charID = 0 means strucuture/item
492  data.victimAllianceID = m_allyID;
493  data.victimFactionID = m_warID;
494  data.victimShipTypeID = GetTypeID();
495 
496  data.finalCharacterID = killerID;
497  data.finalCorporationID = killer->GetCorporationID();
498  data.finalAllianceID = killer->GetAllianceID();
499  data.finalFactionID = killer->GetWarFactionID();
500  data.finalShipTypeID = killer->GetTypeID();
501  data.finalWeaponTypeID = fatal_blow.weaponRef->typeID();
502  data.finalSecurityStatus = 0; /* fix this */
503  data.finalDamageDone = fatal_blow.GetTotal();
504 
505  uint32 totalHP = m_self->GetAttribute(AttrHP).get_int();
506  totalHP += m_self->GetAttribute(AttrArmorHP).get_int();
508  data.victimDamageTaken = totalHP;
509 
510  data.killBlob = blob.str().c_str();
511  data.killTime = GetFileTimeNow();
512  data.moonID = m_oData.planetID; /* denotes moonID for POS/Structure kills */
513 
515 
516  uint32 locationID = GetLocationID();
517  // log faction kill in dynamic data -allan
518  MapDB::AddKill(locationID);
519  MapDB::AddFactionKill(locationID);
520 
521  if (pClient != nullptr) {
522  //award kill bounty.
523  //AwardBounty( pClient );
525  AwardSecurityStatus(m_self, pClient->GetChar().get()); // this awards secStatusChange for npcs in empire space
526  }
527 
528  GPoint wreckPosition = m_destiny->GetPosition();
529  std::string wreck_name = m_self->itemName();
530  wreck_name += " Wreck";
531  ItemData wreckItemData(3962/*CO gantry*/, killerID, locationID, flagNone, wreck_name.c_str(), wreckPosition, itoa(m_allyID));
532  WreckContainerRef wreckItemRef = sItemFactory.SpawnWreckContainer( wreckItemData );
533  if (wreckItemRef.get() == nullptr) {
534  sLog.Error("CustomsSE::Killed()", "Creating Wreck Item Failed for %s of type %u", wreck_name.c_str(), 3962);
535  return;
536  }
537 
538  if (is_log_enabled(PHYSICS__TRACE))
539  _log(PHYSICS__TRACE, "Ship::Killed() - Ship %s(%u) Position: %.2f,%.2f,%.2f. Wreck %s(%u) Position: %.2f,%.2f,%.2f.", \
540  GetName(), GetID(), x(), y(), z(), wreckItemRef->name(), wreckItemRef->itemID(), wreckPosition.x, wreckPosition.y, wreckPosition.z);
541 
543  wreckEntity.allianceID = killer->GetAllianceID();
545  wreckEntity.corporationID = killer->GetCorporationID();
546  wreckEntity.factionID = m_warID;
547  wreckEntity.groupID = EVEDB::invGroups::Wreck;
548  wreckEntity.itemID = wreckItemRef->itemID();
549  wreckEntity.itemName = wreck_name;
550  wreckEntity.ownerID = killerID;
551  wreckEntity.typeID = 3962;
552  wreckEntity.position = wreckPosition;
553 
554  if (!m_system->BuildDynamicEntity(wreckEntity, m_self->itemID())) {
555  sLog.Error("CustomsSE::Killed()", "Spawning Wreck Failed: typeID or typeName not supported: '%u'", 3962);
556  wreckItemRef->Delete();
557  return;
558  }
560 
561  DropLoot(wreckItemRef, m_self->groupID(), killerID);
562 
563  for (auto cur: survivedItems)
564  cur->Move(wreckItemRef->itemID(), flagNone); // populate wreck with items that survived
565 }
void Append(const T &value)
Appends a single value to buffer.
Definition: Buffer.h:437
Base Python wire object.
Definition: PyRep.h:66
float orbitalHackerProgress
Definition: EVE_POS.h:78
void GetEffectState(PyList &into)
CustomsSE(StructureItemRef sRef, PyServiceMgr &services, SystemManager *system, const FactionData &data)
virtual void Process()
uint32 finalDamageDone
double radius() const
uint32 finalCorporationID
uint32 victimDamageTaken
void SendErrorMsg(const char *fmt,...)
Definition: Client.cpp:2719
bool GetCustomsData(EVEPOS::CustomsData &cData, EVEPOS::OrbitalData &oData)
Definition: PosMgrDB.cpp:289
#define _log(type, fmt,...)
Definition: logsys.h:124
float GetTaxRate(Client *pClient)
uint32 orbitalHackerID
Definition: EVE_POS.h:76
Python string.
Definition: PyRep.h:430
DestinyManager * m_destiny
Definition: SystemEntity.h:265
double GetRadius()
Definition: SystemEntity.h:208
uint32 finalCharacterID
GVector rotation
Definition: EVE_POS.h:79
Python's dictionary.
Definition: PyRep.h:719
uint32 m_ownerID
Definition: SystemEntity.h:283
void SaveCustomsData(EVEPOS::CustomsData &cData, EVEPOS::OrbitalData &oData)
Definition: PosMgrDB.cpp:334
bool SetFlag(EVEItemFlags flag, bool notify=false)
uint32 ownerID() const
Definition: InventoryItem.h:99
virtual PlanetSE * GetPlanetSE()
Definition: SystemEntity.h:101
void UpdateCustomsData(EVEPOS::CustomsData &cData, EVEPOS::OrbitalData &oData)
Definition: PosMgrDB.cpp:350
const GPoint & position() const
void SendJettisonPacket() const
SystemManager * m_system
Definition: CustomsOffice.h:83
const std::string & customInfo() const
double Rad2Deg(double rad)
Definition: Trig.h:26
double y()
Definition: SystemEntity.h:214
virtual bool HasPilot()
Definition: SystemEntity.h:258
static void AddKill(uint32 sysID)
Definition: MapDB.cpp:250
virtual Client * GetPilot()
Definition: SystemEntity.h:259
virtual void Init()
Python floating point number.
Definition: PyRep.h:292
SystemBubble * m_bubble
Definition: SystemEntity.h:262
int32 GetCharacterID() const
Definition: Client.h:113
void SendDestinyUpdate(std::vector< PyTuple * > &updates, bool self_only=false) const
void UpdateSettings(int8 selectedHour, int8 standingValue, bool ally, bool standings, Call_TaxRateValuesDict &taxRateValues)
static void AddFactionKill(uint32 sysID)
Definition: MapDB.cpp:256
SystemEntity * srcSE
Definition: Damage.h:84
#define sEntityList
Definition: EntityList.h:208
const float GetSystemSecurityRating()
Definition: SystemManager.h:86
uint32 GetID() const
Definition: SystemManager.h:80
SystemEntity * GetPlanet(uint32 planetID)
static void SaveKillOrLoss(CharKillData &data)
Definition: ServiceDB.cpp:212
int32 victimFactionID
const char * name()
CharacterRef GetChar() const
Definition: Client.h:164
virtual void InitData()
Python tuple.
Definition: PyRep.h:567
GaFloat x
Definition: GaTypes.h:207
bool BuildDynamicEntity(const DBSystemDynamicEntity &entity, uint32 launcherID=0)
Advanced version of UserError that allows to send a full custom message.
Definition: PyExceptions.h:453
void Dump(FILE *into, const char *pfx) const
Dumps object to file.
Definition: PyRep.cpp:84
signed __int8 int8
Definition: eve-compat.h:45
const GPoint & GetPosition() const
Definition: SystemEntity.h:211
void SetAnchor(Client *pClient, GPoint &pos)
EVEPOS::CustomsData m_cData
Definition: CustomsOffice.h:80
void AddItem(PyRep *i)
Definition: PyRep.h:701
uint16 groupID() const
Python boolean.
Definition: PyRep.h:323
#define is_log_enabled(type)
Definition: logsys.h:78
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
void VerifyAddItem(InventoryItemRef iRef)
void SendSpecialEffect(uint32 entityID, uint32 moduleID, uint32 moduleTypeID, uint32 targetID, uint32 chargeTypeID, std::string guid, bool isOffensive, bool start, bool isActive, int32 duration, uint32 repeat, int32 graphicInfo=0) const
Definition: gpoint.h:33
InventoryItemRef m_self
Definition: SystemEntity.h:269
void SendSlimUpdate()
bool IsEven(int64 number)
Definition: misc.h:88
Generic class for buffers.
Definition: Buffer.h:40
InventoryItemRef GetSelf()
Definition: SystemEntity.h:202
Python object.
Definition: PyRep.h:826
uint32 m_corpID
Definition: SystemEntity.h:281
virtual void Process()
uint32 GetLocationID()
Definition: SystemEntity.h:209
int64 get_int()
Definition: EvilNumber.cpp:166
PyRep * GetSettingsInfo()
uint32 solarSystemID
void SetItem(size_t index, PyRep *object)
Stores Python object.
Definition: PyRep.h:610
Definition: Damage.h:33
uint32 victimCorporationID
Python integer.
Definition: PyRep.h:231
uint16 finalShipTypeID
double z()
Definition: SystemEntity.h:215
int32 GetAllianceID()
Definition: SystemEntity.h:216
void SetAttribute(uint16 attrID, int num, bool notify=true)
uint32 GetID()
Definition: SystemEntity.h:207
#define PyStatic
Definition: PyRep.h:1209
X * get() const
Definition: RefPtr.h:213
uint32 standingOwnerID
Definition: EVE_POS.h:77
void PullAnchor()
std::map< uint8, float > taxRateValues
Definition: EVE_POS.h:25
uint32 victimCharacterID
int32 finalFactionID
const char * GetName() const
Definition: SystemEntity.h:210
double x()
Definition: SystemEntity.h:213
Definition: Client.h:66
void SendEffectUpdate(int16 effectID, bool active)
double finalSecurityStatus
static RefPtr StaticCast(const RefPtr< Y > &oth)
Acts as static_cast from one RefPtr to another.
Definition: RefPtr.h:238
unsigned __int32 uint32
Definition: eve-compat.h:50
void SetPosition(const GPoint &pt, bool update=false)
void SendSingleDestinyUpdate(PyTuple **up, bool self_only=false) const
uint32 corporationID
#define IsCorp(itemID)
Definition: EVE_Defines.h:234
void GetInventoryMap(std::map< uint32, InventoryItemRef > &invMap)
Definition: Inventory.cpp:453
GaFloat y
Definition: GaTypes.h:207
double GetFileTimeNow()
Definition: utils_time.cpp:84
int64 MakeRandomInt(int64 low, int64 high)
Generates random integer from interval [low; high].
Definition: misc.cpp:109
uint32 GetCorporationID()
Definition: SystemEntity.h:218
const std::string & itemName() const
int main(int argc, char *argv[])
float GetTotal() const
Definition: Damage.h:48
void DropLoot(WreckContainerRef wreckRef, uint32 groupID, uint32 owner)
EvilNumber GetAttribute(const uint16 attrID) const
void SendSingleDestinyEvent(PyTuple **ev, bool self_only=false) const
uint16 finalWeaponTypeID
#define IsFaction(itemID)
Definition: EVE_Defines.h:250
uint16 victimShipTypeID
void AwardSecurityStatus(InventoryItemRef iRef, Character *pChar)
signed __int16 int16
Definition: eve-compat.h:47
const GPoint & GetPosition() const
#define sItemFactory
Definition: ItemFactory.h:165
EvilNumber EvilOne
Definition: EvilNumber.cpp:34
#define IsAlliance(itemID)
Definition: EVE_Defines.h:244
virtual void Killed(Damage &fatal_blow)
uint16 GetTypeID()
Definition: SystemEntity.h:203
#define sBubbleMgr
int32 finalAllianceID
Inventory * GetMyInventory()
Definition: InventoryItem.h:91
InventoryItemRef weaponRef
Definition: Damage.h:86
int32 victimAllianceID
std::string killBlob
virtual bool IsDroneSE()
Definition: SystemEntity.h:187
uint16 typeID() const
virtual void EncodeDestiny(Buffer &into)
uint8 categoryID() const
EVEPOS::OrbitalData m_oData
Definition: CustomsOffice.h:81
Definition: EVE_POS.h:14
virtual PyDict * MakeSlimItem()
Python list.
Definition: PyRep.h:639
GaFloat z
Definition: GaTypes.h:207
const char * itoa(int64 num)
Convers num to string.
uint32 itemID() const
Definition: InventoryItem.h:98
void SetItemString(const char *key, PyRep *value)
SetItemString adds or sets a database entry.
Definition: PyRep.h:812
PosMgrDB m_db
Definition: CustomsOffice.h:78
int32 GetWarFactionID()
Definition: SystemEntity.h:217
Python long integer.
Definition: PyRep.h:261
Reference-counting-based smart pointer.
Definition: RefPtr.h:133
PlanetSE * m_planetSE
Definition: CustomsOffice.h:84