EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Probes.cpp
Go to the documentation of this file.
1 
11 #include "eve-server.h"
12 
13 #include "Client.h"
14 #include "PyServiceMgr.h"
15 #include "exploration/Probes.h"
16 #include "exploration/Scan.h"
18 #include "system/SystemBubble.h"
19 #include "system/SystemManager.h"
20 
21 /* SCAN__ERROR
22  * SCAN__WARNING
23  * SCAN__MESSAGE
24  * SCAN__DEBUG
25  * SCAN__INFO
26  * SCAN__TRACE
27  * SCAN__DUMP
28  * SCAN__RSPDUMP
29  */
30 
31 ProbeItem::ProbeItem(uint32 itemID, const ItemType& _type, const ItemData& _data)
32 : InventoryItem(itemID, _type, _data)
33 {
34 
35 }
36 /*
37  Scanner_Probe = 479,
38  Survey_Probe = 492,
39  Warp_Disruption_Probe = 548,
40  Obsolete_Probes = 972,
41  */
43 {
44  return InventoryItem::CreateItemID(data);
45 }
46 
48 {
49  return InventoryItem::Load<ProbeItem>(itemID );
50 }
51 
53 {
55  if (itemID == 0 )
56  return ProbeItemRef(nullptr);
57 
58  return ProbeItem::Load(itemID);
59 }
60 
62  // remove from current container's inventory.
63  // this should be SolarSystem, but just in case, run tests anyway
64  if (IsValidLocation(locationID())) {
65  InventoryItemRef iRef = sItemFactory.GetItem(locationID());
66  if (iRef.get() != nullptr) {
68  } else {
69  _log(ITEM__ERROR, "ProbeItem::Delete() - Cant find location %u containing %s.", locationID(), name());
70  }
71  } else {
72  _log(ITEM__ERROR, "ProbeItem::Delete() - Location %u containing %s is invalid.", locationID(), name());
73  }
74 
75  // remove from DB
77  // remove from factory cache
78  sItemFactory.RemoveItem(m_itemID);
79 }
80 
81 
82 // abandoned probe c'tor
84 : DynamicSystemEntity(self, services, system),
85 m_scan(nullptr),
86 m_client(nullptr),
87 m_shipRef(nullptr),
88 m_moduleRef(nullptr),
89 m_secStatus(0),
90 m_lifeTimer(0),
91 m_rangeStep(0),
92 m_scanRange(0),
93 m_stateTimer(0),
94 m_returnTimer(0),
95 m_scanStrength(0),
96 m_scanDeviation(0),
97 m_ring(false),
98 m_sphere(false),
99 m_scanShips(false)
100 {
102 
103  if (self->HasAttribute(AttrProbeCanScanShips))
104  m_scanShips = self->GetAttribute(AttrProbeCanScanShips).get_bool();
105 
106  // set probe lifetime of 5h
107  m_expiry = GetFileTimeNow() + (EvE::Time::Hour *5); // 5h abandoned lifespan
108  m_lifeTimer.Start(5*60*60*1000); // 5h to ms
109 
110  _log(SCAN__INFO, "Created Abandoned ProbeSE for %u. expiry: %li", m_self->itemID(), m_expiry);
111 }
112 
114 : DynamicSystemEntity(self, services, system),
115 m_scan(nullptr),
116 m_state(Probe::State::Idle),
117 m_client(shipRef->GetPilot()),
118 m_shipRef(shipRef),
119 m_moduleRef(moduleRef),
120 m_lifeTimer(0),
121 m_rangeStep(0),
122 m_scanRange(0),
123 m_stateTimer(0),
124 m_returnTimer(0),
125 m_rangeFactor(0),
126 m_scanStrength(0),
127 m_scanDeviation(0),
128 m_baseScanRange(0),
129 m_ring(false),
130 m_sphere(false),
131 m_scanShips(false)
132 {
137 
139 
140  if (self->HasAttribute(AttrProbeCanScanShips))
141  m_scanShips = self->GetAttribute(AttrProbeCanScanShips).get_bool();
142 
143  // set probe lifetime
144  m_expiry = GetFileTimeNow() + (self->GetAttribute(AttrExplosionDelay).get_float() *10000); // ms to filetime
145  if (m_expiry < GetFileTimeNow()) {
146  m_expiry = GetFileTimeNow() + (EvE::Time::Minute *30); // 30m default lifespan
147  m_lifeTimer.Start(30*60*1000); // 30m to ms
148  } else {
149  m_lifeTimer.Start(self->GetAttribute(AttrExplosionDelay).get_uint32());
150  }
151 
152  // set base str, deviation and range
153  m_rangeFactor = self->GetAttribute(AttrRangeFactor).get_uint32();
154  m_scanStrength = self->GetAttribute(AttrBaseSensorStrength).get_float();
155  m_scanDeviation = self->GetAttribute(AttrBaseMaxScanDeviation).get_float();
156  m_baseScanRange = self->GetAttribute(AttrBaseScanRange).get_float() * (ONE_AU_IN_METERS /100);
157 
158  // not sure about this one yet....moon survey. will need special initializers here
159  if (self->groupID() == EVEDB::invGroups::Survey_Probe) {
160  // 5% reduction to flight time? 10% for t2 ship
161  }
162 
163  // i think we may have to do probe modifiers here....they are not being done thru fx system
164  Character* pChar = m_client->GetChar().get();
165  // skills
166  m_scanStrength *= (1 + (0.1 * pChar->GetSkillLevel(EvESkill::AstrometricRangefinding))); // +10% strength per level
167  // skill bonuses unique to EVEmu
168  //m_scanStrength *= (1 + (0.01 * pChar->GetSkillLevel(EvESkill::Astrometrics))); // +1% strength per level
169  //m_scanStrength *= (1 + (0.01 * pChar->GetSkillLevel(EvESkill::SignatureAnalysis))); // +1% strength per level
170  //m_scanDeviation *= (1 - (0.01 * pChar->GetSkillLevel(EvESkill::Astrometrics))); // -1% deviation per level
171  //m_scanDeviation *= (1 - (0.01 * pChar->GetSkillLevel(EvESkill::SensorLinking))); // -1% deviation per level
172 
173  // ship
174  switch (shipRef->typeID()) {
175  //t1
176  case 29248: { /* Magnate */
177  m_scanStrength *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::AmarrFrigate)))); // +5% strength per level
178  } break;
179  case 605: { /* Heron */
180  m_scanStrength *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::CaldariFrigate)))); // +5% strength per level
181  } break;
182  case 607: { /* Imicus */
183  m_scanStrength *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::GallenteFrigate)))); // +5% strength per level
184  } break;
185  case 586: { /* Probe */
186  m_scanStrength *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::MinmatarFrigate)))); // +5% strength per level
187  } break;
188  //t2 - Anathema, Buzzard, Cheetah, Helios
189  case 11188: /* Anathema */
190  case 11192: /* Buzzard */
191  case 11172: /* Helios */
192  case 11182: { /* Cheetah */
193  m_scanStrength *= (1 + (0.1f * (pChar->GetSkillLevel(EvESkill::CovertOps)))); // +10% strength per level
194  } break;
195  //t3
196  // just test for subsystem here... typeIDs 30042, 30052, 30062, 30072
197  // use same general code as GetRigScanBonus() in MM below...
198  }
199 
200  // modules (launchers - 5 or 10)
201  if (moduleRef->HasAttribute(AttrScanStrengthBonus))
202  m_scanStrength *= (1 + (0.01f * moduleRef->GetAttribute(AttrScanStrengthBonus).get_float()));
203 
204  // rigs (10 or 15)
205  m_scanStrength *= (1 + shipRef->GetModuleManager()->GetRigScanBonus());
206 
207  // implants (virtue - 1-5, hardwire 2,6,10)
208  // skill (AstrometricRangefinding @ 10%/lvl) <-- this doesnt get set on character object - checked above...
209  // this is just a placeholder. not sure if this will be how it works yet
210  // also, the bonus will be determined by the implant fx, which would be set in attrib.
212  m_scanStrength *= (1 + (0.01f * pChar->GetAttribute(AttrScanStrengthBonus).get_float()));
213 
214  _log(SCAN__INFO, "Created ProbeSE for %u. timeNow: %.0f, expiry: %li, scan Str: %.4f, deviation: %.5f, ship: %s", \
216 }
217 
218  /*
219  AttrScanAnalyzeCount = 791, (no db data)
220  AttrScanProbeStrength = 1116, (no db data)
221  AttrScanStrengthSignatures = 1117, (no db data)
222  AttrScanStrengthDronesProbes = 1118, (no db data)
223  AttrScanStrengthScrap = 1119, (no db data)
224  AttrScanStrengthShips = 1120, (no db data)
225  AttrScanStrengthStructures = 1121, (no db data)
226  AttrMaxScanGroups = 1122, (no db data)
227  AttrScanDuration = 1123, How long this probe has to scan until it can obtain results. (no db data)
228  AttrScanFrequencyResult = 1161, (no db data)
229  AttrProbeCanScanShips = 1413, boolean
230 
231  // these are char attribs
232  AttrScanStrengthBonus = 846, in %
233  AttrMaxScanDeviationModifier = 1156,
234 
235  // for moon goo
236  AttrScanRange = 765,
237  AttrMinScanDeviation = 787,
238  AttrMaxScanDeviation = 788,
239 
240  // new shit from rhea
241  AttrScanStrengthBonusModule = 1907,
242  */
243 
245  if (m_scan != nullptr)
246  m_scan->RemoveProbe(this);
247 }
248 
250 {
251  if (m_lifeTimer.Check()) {
252  Delete();
253  delete(this);
254  // delete from entity map
255  return false;
256  }
257  if (m_returnTimer.Enabled())
258  if (m_returnTimer.Check()) {
260  _log(SCAN__INFO, "ProbeSE::Process() return timer hit for probeID %u", m_self->itemID());
262  SendWarpEnd();
263  RemoveProbe();
265  delete(this);
266  // delete from entity map
267  return false;
268  }
269  if (m_stateTimer.Enabled())
270  if (m_stateTimer.Check()) {
272  _log(SCAN__INFO, "ProbeSE::Process() state timer hit for probeID %u state: %s", \
274  if (IsMoving())
277  SendWarpEnd();
279  }
280  return true;
281 }
282 
284 {
285  switch (m_state) {
286  case Probe::State::Idle:
290  return false;
294  return true;
295  }
296  return false;
297 }
298 
300 {
301  m_scanRange = data.scanRange;
302  m_rangeStep = data.rangeStep;
303  m_destination = data.dest;
304 
305  float time(1), dist = GetPosition().distance(m_destination);
306  if (dist < 100) {
307  time = 0.5f;
308  } else if (dist > BUBBLE_RADIUS_METERS){
310  time = EvE::max(dist / wsm, 1);
312  SendWarpStart(time);
313  } else {
316  time = EvE::max(dist / mv, 1);
317  }
318 
319  m_stateTimer.Start(time *1000);
320  _log(SCAN__TRACE, "ProbeSE::UpdateProbe() id:%u, state: %s, scanRange: %.2f, step: %u, dist:%.2f, time: %.2f", \
321  GetID(), GetStateName(m_state), m_scanRange, m_rangeStep, dist, time );
322 }
323 
325 {
326  if (m_client == nullptr)
327  return;
328  m_destination = m_shipRef->position() + 250;
329  float time(1), dist = GetPosition().distance(m_destination);
330  if (dist > BUBBLE_RADIUS_METERS){
332  time = EvE::max(dist / wsm, 1);
333  //SendWarpStart(time);
334  } else {
336  time = EvE::max(dist / mv, 1);
337  }
338 
340  // add to list if still controlled by player
341  list->AddItem(new PyInt(m_self->itemID()));
342  m_returnTimer.Start(time * 1000);
344  _log(SCAN__TRACE, "ProbeSE::RecoverProbe() Probe %u returning. Return time is %.2fs", \
345  GetID(), time);
346 }
347 
349 {
350  ScanResultPos ssr_oed;
351  ssr_oed.x = GetPosition().x;
352  ssr_oed.y = GetPosition().y;
353  ssr_oed.z = GetPosition().z;
354  PyToken* token = new PyToken("foo.Vector3");
355  PyTuple* oed_tuple = new PyTuple(2);
356  oed_tuple->SetItem(0, token);
357  oed_tuple->SetItem(1, ssr_oed.Encode());
358  PyDict* newProbe = new PyDict();
359  newProbe->SetItemString("probeID", new PyLong(m_self->itemID()));
360  newProbe->SetItemString("typeID", new PyInt(m_self->typeID()));
361  newProbe->SetItemString("scanRange", new PyFloat(m_scanRange));
362  newProbe->SetItemString("expiry", new PyLong(m_expiry));
363  newProbe->SetItemString("pos", new PyObjectEx(false, oed_tuple));
364  PyTuple* ev = new PyTuple(1);
365  ev->SetItem(0, new PyObject("util.KeyVal", newProbe));
366  m_client->SendNotification("OnNewProbe", "clientID", &ev); // this is sequenced
367 }
368 
370 {
371  if (m_state == state)
372  return;
373 
374  _log(SCAN__TRACE, "ProbeSE::SendStateChange() Probe %u changing state to %s.", GetID(), GetStateName(state));
375  m_state = state;
376  if (m_client == nullptr)
377  return;
378  PyTuple* tuple = new PyTuple(2);
379  tuple->SetItem(0, new PyLong(m_self->itemID()));
380  tuple->SetItem(1, new PyInt(state));
381  m_client->SendNotification("OnProbeStateChanged", "clientID", &tuple); // this is sequenced
382 }
383 
385 {
386  // remove from scan map, but check for abandoned probes (no scan)
387  if (m_scan != nullptr) {
388  m_scan->RemoveProbe(this);
389  m_scan = nullptr;
390  }
391  // remove from system
392  m_system->RemoveEntity(this);
393  // set item loc to null
395  // remove from entity list
396  sEntityList.RemoveProbe(m_self->itemID());
397 
398  if (m_client == nullptr)
399  return;
400  PyTuple* ev = new PyTuple(1);
401  ev->SetItem(0, new PyLong(m_self->itemID()));
402  m_client->SendNotification("OnRemoveProbe", "clientID", &ev); // this is sequenced
403 }
404 
405 void ProbeSE::SendWarpStart(float travelTime/*0*/)
406 {
407  // remove from bubble
408  m_bubble->Remove(this);
409 
410  PyToken* token = new PyToken("foo.Vector3");
411  ScanResultPos posFrom;
412  posFrom.x = m_self->position().x;
413  posFrom.y = m_self->position().y;
414  posFrom.z = m_self->position().z;
415  ScanResultPos posTo;
416  posTo.x = m_destination.x;
417  posTo.y = m_destination.y;
418  posTo.z = m_destination.z;
419  PyTuple* from = new PyTuple(2);
420  from->SetItem(0, token);
421  from->SetItem(1, posFrom.Encode());
422  PyTuple* to = new PyTuple(2);
423  to->SetItem(0, token);
424  to->SetItem(1, posTo.Encode());
425  // OnProbeWarpStart(self, probeID, fromPos, toPos, startTime, duration)
426  PyTuple* tuple = new PyTuple(5);
427  tuple->SetItem(0, new PyLong(m_self->itemID())); //probeID
428  tuple->SetItem(1, new PyObjectEx(false, from)); //from
429  tuple->SetItem(2, new PyObjectEx(false, to)); //to
430  tuple->SetItem(3, new PyLong(GetFileTimeNow())); //startTime
431  tuple->SetItem(4, new PyFloat(travelTime)); //duration in ms
432  m_client->SendNotification("OnProbeWarpStart", "clientID", &tuple); // this is sequenced
433 
434  // not sure if this will work right...slimItem is removed when probe warps out
435  //SendSlimChange();
436 }
437 
439 {
441  sBubbleMgr.Add(this);
442  if (m_client == nullptr)
443  return;
444  PyTuple* tuple = new PyTuple(1);
445  tuple->SetItem(0, new PyLong(m_self->itemID()));
446  m_client->SendNotification("OnProbeWarpEnd", "clientID", &tuple); // this is sequenced
447 }
448 
450 {
451  switch(state) {
452  case Probe::State::Inactive: return "Inactive";
453  case Probe::State::Idle: return "Idle";
454  case Probe::State::Moving: return "Moving";
455  case Probe::State::Warping: return "Warping";
456  case Probe::State::Scanning: return "Scanning";
457  case Probe::State::Returning: return "Returning";
458  }
459 
460  return "Undefined";
461 }
462 
464 {
465  // % of current range based on bonuses
467 }
468 
470 {
471  // factor of range
472  return m_scanStrength /pow(2, (m_rangeStep -1));
473 }
474 
475 float ProbeSE::GetRangeModifier(float dist) {
476  // e^-((targ rang / max range)^2)
477  float tmp = pow(dist/(m_baseScanRange *m_rangeStep), m_rangeFactor);
478  return log(tmp);
479 }
480 
481 //SignatureFocusing?
485  return true;
486  return false;
487 }
488 
490 {
491  _log(SE__SLIMITEM, "MakeSlimItem for ProbeSE %s(%u)", GetName(), m_self->itemID());
492  PyDict* slim = new PyDict();
493  slim->SetItemString("itemID", new PyLong(m_self->itemID()));
494  slim->SetItemString("typeID", new PyInt(m_self->typeID()));
495  slim->SetItemString("ownerID", new PyInt(m_ownerID));
496  slim->SetItemString("corpID", IsCorp(m_corpID) ? new PyInt(m_corpID) : PyStatic.NewNone());
497  slim->SetItemString("allianceID", IsAlliance(m_allyID) ? new PyInt(m_allyID) : PyStatic.NewNone());
498  slim->SetItemString("warFactionID", IsFaction(m_warID) ? new PyInt(m_warID) : PyStatic.NewNone());
499  slim->SetItemString("numLaunchers", PyStatic.NewOne());
500  slim->SetItemString("sourceModuleID", m_moduleRef.get() != nullptr? new PyInt(m_moduleRef->itemID()): PyStatic.NewNone());
501  slim->SetItemString("securityStatus", new PyFloat(m_secStatus));
502  return slim;
503 }
504 
505 void ProbeSE::MakeDamageState(DoDestinyDamageState &into) {
506  into.shield = 1.0;
507  into.recharge = 1000000;
508  into.timestamp = GetFileTimeNow();
509  into.armor = 1.0;
510  into.structure = 1.0 - (m_self->GetAttribute(AttrDamage).get_double() / m_self->GetAttribute(AttrHP).get_double());
511 }
512 
514 {
515  PyDict* slim = new PyDict();
516  slim->SetItemString("itemID", new PyLong(m_self->itemID()));
517  slim->SetItemString("typeID", new PyInt(m_self->typeID()));
518  slim->SetItemString("categoryID", new PyInt(m_self->categoryID()));
519  slim->SetItemString("ownerID", new PyInt(m_ownerID));
520  slim->SetItemString("corpID", IsCorp(m_corpID) ? new PyInt(m_corpID) : PyStatic.NewNone());
521  slim->SetItemString("allianceID", IsAlliance(m_allyID) ? new PyInt(m_allyID) : PyStatic.NewNone());
522  slim->SetItemString("warFactionID", IsFaction(m_warID) ? new PyInt(m_warID) : PyStatic.NewNone());
523  slim->SetItemString("numLaunchers", PyStatic.NewOne());
524  slim->SetItemString("sourceModuleID", m_moduleRef.get() != nullptr? new PyInt(m_moduleRef->itemID()):PyStatic.NewNone());
525  slim->SetItemString("securityStatus", new PyFloat(m_secStatus));
526  slim->SetItemString("warpingAway", m_state == Probe::State::Returning ? PyStatic.NewFalse() : PyStatic.NewTrue()); // this is sent when probe warps
527  PyTuple* probeData = new PyTuple(2);
528  probeData->SetItem(0, new PyLong(m_self->itemID()));
529  probeData->SetItem(1, new PyObject("foo.SlimItem", slim));
530  PyTuple* updates = new PyTuple(2);
531  updates->SetItem(0, new PyString("OnSlimItemChange"));
532  updates->SetItem(1, probeData);
533  m_destiny->SendSingleDestinyUpdate(&updates, true);
534 }
535 
536 /*
537  [PyString "OnSlimItemChange"]
538  [PyTuple 2 items]
539  [PyIntegerVar 9000000000000020440]
540  [PyObjectData Name: foo.SlimItem]
541  [PyDict 10 kvp]
542  [PyString "itemID"]
543  [PyIntegerVar 9000000000000020440]
544  [PyString "typeID"]
545  [PyInt 30028]
546  [PyString "allianceID"]
547  [PyNone]
548  [PyString "sourceModuleID"]
549  [PyIntegerVar 1002331157594]
550  [PyString "corpID"]
551  [PyInt 98038978]
552  [PyString "numLaunchers"]
553  [PyInt 1]
554  [PyString "warpingAway"]
555  [PyInt 1]
556  [PyString "warFactionID"]
557  [PyNone]
558  [PyString "securityStatus"]
559  [PyFloat 3.09141417479958]
560  [PyString "ownerID"]
561  [PyInt 1661059544]
562  */
int64 m_expiry
Definition: Probes.h:165
virtual ~ProbeSE()
Definition: Probes.cpp:244
uint32 m_baseScanRange
Definition: Probes.h:163
GPoint m_destination
Definition: Probes.h:150
unsigned __int8 uint8
Definition: eve-compat.h:46
void SendNotification(const PyAddress &dest, EVENotificationStream &noti, bool seq=true)
Definition: Client.cpp:2245
void RemoveProbe()
Definition: Probes.cpp:384
#define _log(type, fmt,...)
Definition: logsys.h:124
void Disable()
Definition: timer.h:39
Python string.
Definition: PyRep.h:430
DestinyManager * m_destiny
Definition: SystemEntity.h:265
void UpdateProbe(ProbeData &data)
Definition: Probes.cpp:299
float GetSecurityRating() const
Definition: Client.h:172
Python's dictionary.
Definition: PyRep.h:719
uint32 m_ownerID
Definition: SystemEntity.h:283
bool HasAttribute(const uint16 attrID) const
ModuleManager * GetModuleManager()
Definition: Ship.h:80
virtual void Delete()
Definition: Probes.cpp:61
const GPoint & position() const
Python floating point number.
Definition: PyRep.h:292
SystemBubble * m_bubble
Definition: SystemEntity.h:262
int32 GetCharacterID() const
Definition: Client.h:113
int32 GetWarFactionID() const
Definition: Client.h:126
float m_secStatus
Definition: Probes.h:167
uint8 m_rangeFactor
Definition: Probes.h:161
RefPtr< ProbeItem > ProbeItemRef
Definition: ItemRef.h:56
int32 GetCorporationID() const
Definition: Client.h:123
float GetRangeModifier(float dist)
Definition: Probes.cpp:475
void RemoveProbe(ProbeSE *pProbe)
Definition: Scan.cpp:51
#define sEntityList
Definition: EntityList.h:208
void RemoveItem(InventoryItemRef iRef)
Definition: Inventory.cpp:243
void SetPosition(const GPoint &pos)
const char * name()
CharacterRef GetChar() const
Definition: Client.h:164
Python tuple.
Definition: PyRep.h:567
GaFloat x
Definition: GaTypes.h:207
int32 GetAllianceID() const
Definition: Client.h:125
const GPoint & GetPosition() const
Definition: SystemEntity.h:211
Timer m_returnTimer
Definition: Probes.h:144
void AddItem(PyRep *i)
Definition: PyRep.h:701
virtual void Delete()
virtual bool ProcessTic()
Definition: Probes.cpp:249
void SendNewProbe()
Definition: Probes.cpp:348
bool HasMaxSkill()
Definition: Probes.cpp:482
InventoryItemRef m_self
Definition: SystemEntity.h:269
Python extended object.
Definition: PyRep.h:861
Python object.
Definition: PyRep.h:826
uint32 m_corpID
Definition: SystemEntity.h:281
bool Enabled() const
Definition: timer.h:41
PyTuple * MakeDamageState()
void SetItem(size_t index, PyRep *object)
Stores Python object.
Definition: PyRep.h:610
static const GPoint NULL_ORIGIN(0, 0, 0)
void RemoveEntity(SystemEntity *pSE)
uint32 get_uint32()
Definition: EvilNumber.cpp:173
float GetScanStrength()
Definition: Probes.cpp:469
uint32 locationID() const
Python integer.
Definition: PyRep.h:231
virtual PyDict * MakeSlimItem()
Definition: Probes.cpp:489
SystemManager * m_system
Definition: SystemEntity.h:263
Timer m_stateTimer
Definition: Probes.h:145
uint32 GetID()
Definition: SystemEntity.h:207
bool Check(bool reset=true)
Definition: timer.cpp:62
#define PyStatic
Definition: PyRep.h:1209
X * get() const
Definition: RefPtr.h:213
ProbeSE(ProbeItemRef self, PyServiceMgr &services, SystemManager *system)
Definition: Probes.cpp:83
void SendStateChange(uint8 state)
Definition: Probes.cpp:369
uint8 m_rangeStep
Definition: Probes.h:160
Client * m_client
Definition: Probes.h:148
const char * GetName() const
Definition: SystemEntity.h:210
static ProbeItemRef Spawn(ItemData &data)
Definition: Probes.cpp:52
unsigned __int32 uint32
Definition: eve-compat.h:50
void SendSingleDestinyUpdate(PyTuple **up, bool self_only=false) const
uint8 rangeStep
#define IsCorp(itemID)
Definition: EVE_Defines.h:234
Python token (eg. class name).
Definition: PyRep.h:522
RefPtr< InventoryItem > InventoryItemRef
Definition: ItemRef.h:52
ShipItemRef m_shipRef
Definition: Probes.h:152
GaFloat y
Definition: GaTypes.h:207
bool HasSkillTrainedToLevel(uint16 skillTypeID, uint8 skillLevel) const
Definition: Character.cpp:584
double GetFileTimeNow()
Definition: utils_time.cpp:84
float m_scanStrength
Definition: Probes.h:169
float m_scanRange
Definition: Probes.h:168
InventoryItemRef m_moduleRef
Definition: Probes.h:153
int64 max(int64 x, int64 y=0)
Definition: misc.h:103
float m_scanDeviation
Definition: Probes.h:170
void Remove(SystemEntity *pSE)
static uint32 CreateItemID(ItemData &data)
static bool DeleteItem(uint32 itemID)
Definition: ItemDB.cpp:348
float GetDeviation()
Definition: Probes.cpp:463
EvilNumber GetAttribute(const uint16 attrID) const
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
#define IsFaction(itemID)
Definition: EVE_Defines.h:250
double get_double()
Definition: EvilNumber.cpp:191
const char * GetStateName(uint8 state)
Definition: Probes.cpp:449
bool m_scanShips
Definition: Probes.h:155
int8 GetSkillLevel(uint16 skillTypeID, bool zeroForNotInjected=true) const
Definition: Character.cpp:575
void RecoverProbe(PyList *list)
Definition: Probes.cpp:324
Scan * m_scan
Definition: Probes.h:147
uint8 m_state
Definition: Probes.h:159
#define sItemFactory
Definition: ItemFactory.h:165
#define IsAlliance(itemID)
Definition: EVE_Defines.h:244
float get_float()
Definition: EvilNumber.cpp:184
void SendWarpStart(float travelTime)
Definition: Probes.cpp:405
GaExpInl GaFloat distance(const GaVec3 &oth) const
Definition: GaTypes.h:158
static uint32 CreateItemID(ItemData &data)
Definition: Probes.cpp:42
#define sBubbleMgr
void SendSlimChange()
Definition: Probes.cpp:513
Inventory * GetMyInventory()
Definition: InventoryItem.h:91
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 kick all and halt server immediate command list all items in current location s gives list of cargo contents and volumes in all holds list current session values show current ship DNA show current objects in their destiny state
float scanRange
void SendWarpEnd()
Definition: Probes.cpp:438
void MergeTypesInCargo(ShipItem *pShip, EVEItemFlags flag=flagNone)
static ProbeItemRef Load(uint32 itemID)
Definition: Probes.cpp:47
uint16 typeID() const
uint8 categoryID() const
Python list.
Definition: PyRep.h:639
GaFloat z
Definition: GaTypes.h:207
float GetRigScanBonus()
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
static const int64 ONE_AU_IN_METERS
Definition: EVE_Consts.h:40
Timer m_lifeTimer
Definition: Probes.h:143
#define IsValidLocation(itemID)
Definition: EVE_Defines.h:209
ProbeItem(uint32 itemID, const ItemType &_type, const ItemData &_data)
Definition: Probes.cpp:31
Python long integer.
Definition: PyRep.h:261
Reference-counting-based smart pointer.
Definition: RefPtr.h:133
void Start(uint32 setTimerTime=0, bool changeResetTimer=true)
Definition: timer.cpp:81
bool IsMoving()
Definition: Probes.cpp:283
static const float BUBBLE_RADIUS_METERS
Definition: BubbleManager.h:32