EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Drone.cpp
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: Aknor Jaden
24  Rewrite: Allan
25 */
26 
27 #include "eve-server.h"
28 
29 #include "EVEServerConfig.h"
30 #include "EntityList.h"
32 #include "npc/Drone.h"
33 #include "system/Container.h"
34 #include "system/Damage.h"
35 #include "system/DestinyManager.h"
36 #include "system/SystemManager.h"
37 #include "system/SystemBubble.h"
39 
41 : DynamicSystemEntity(drone, services, pSystem),
42  m_AI(new DroneAIMgr(this)),
43  m_system(pSystem)
44  {
45  assert (m_AI != nullptr);
46  assert (m_system != nullptr);
47 
48  m_online = false;
49 
50  m_warID = data.factionID;
51  m_allyID = data.allianceID;
52  m_corpID = data.corporationID;
53  m_ownerID = data.ownerID;
54  m_pClient = sEntityList.FindClientByCharID(data.ownerID);
55  m_targetID = 0;
56  m_controllerID = 0;
58 
60  if (m_orbitRange < 1) {
63  } else {
65  }
66  }
67 
68  // Create default dynamic attributes in the AttributeMap:
72  m_self->SetAttribute(AttrWarpCapacitorNeed, 0.00001, false);
74  m_self->SetAttribute(AttrMass, m_self->type().mass(), false);
80 
84 
85  SetResists();
86 
87  /* Gets the value from the Drone and put on our own vars */
96 
97  _log(DRONE__TRACE, "Created Drone object for %s (%u)", drone.get()->name(), drone.get()->itemID());
98 }
99 
101  SafeDelete(m_AI);
102 }
103 
104 void DroneSE::SetOwner(Client* pClient) {
105  m_self->ChangeOwner(pClient->GetCharacterID());
106  m_pClient = pClient;
107  m_ownerID = pClient->GetCharacterID();
108  m_corpID = pClient->GetCorporationID();
109  m_allyID = pClient->GetAllianceID();
110  m_warID = pClient->GetWarFactionID();
111  m_pShipSE = pClient->GetShipSE();
112  m_controllerID = pClient->GetShipID();
114 }
115 
117  if (m_killed)
118  return;
119  double profileStartTime = GetTimeUSeconds();
120 
121  /* Enable base call to Process Targeting and Movement */
123 
125  if (m_online)
126  m_AI->Process();
127 
128  if (sConfig.debug.UseProfiling)
129  sProfiler.AddTime(Profile::drone, GetTimeUSeconds() - profileStartTime);
130 }
131 
133  m_self->SaveItem();
134 }
135 
137  // this seems to work properly
138  m_self->Delete();
139  delete this;
140 }
141 
142 void DroneSE::Launch(ShipSE* pShipSE) {
143  m_pShipSE = pShipSE;
144 
145  m_controllerID = pShipSE->GetID();
146  m_controllerOwnerID = pShipSE->GetOwnerID();
147 
148  m_system->AddEntity(this);
149 
150  assert (m_bubble != nullptr);
151 }
152 
153 void DroneSE::Online(ShipSE* pShipSE/*nullptr*/) {
154  m_online = true;
155  StateChange();
156 
157  if (pShipSE == nullptr)
158  pShipSE = m_pShipSE;
159 
160  m_AI->AssignShip(pShipSE);
161 }
162 
164  // this is called by abandon also
165  m_destiny->Stop();
166  m_AI->AssignShip(nullptr);
167  m_online = false;
168  StateChange();
169 }
170 
171 void DroneSE::IdleOrbit(ShipSE* pShipSE/*nullptr*/) {
172  if (pShipSE == nullptr)
173  pShipSE = m_pShipSE;
174 
175  if (!m_online)
176  return; // error here?
177 
178  // TODO: fix these speeds
179  // set speed and begin orbit
182  m_destiny->Orbit(pShipSE, m_orbitRange);
183 }
184 
187  Offline();
188 }
189 
190 /* when drone is scooped up....
191  *
192  * [PyTuple 2 items]
193  * [PyString "OnDroneStateChange"]
194  * [PyList 7 items]
195  * [PyIntegerVar 1540263056]
196  * [PyNone]
197  * [PyNone]
198  * [PyNone]
199  * [PyNone]
200  * [PyNone]
201  * [PyNone]
202  */
203 
205  //OnDroneStateChange(droneID, ownerID, controllerID, activityState, droneTypeID, controllerOwnerID, targetID)
206  if (m_online) {
207  OnDroneStateChange du;
208  du.droneID = m_self->itemID();
209  du.ownerID = m_ownerID;
210  du.droneTypeID = m_self->typeID();
211  du.controllerID = m_controllerID;
212  du.controllerOwnerID = m_controllerOwnerID;
213  du.activityState = m_AI->GetState();
214  du.targetID = m_targetID;
215  PyTuple* up = du.Encode();
216  // bubblecast is faster than destiny::update
217  m_bubble->BubblecastDestinyUpdate(&up, "destiny");
218  //pShipSE->DestinyMgr()->SendSingleDestinyUpdate(&up);
219  } else {
220  PyList* list = new PyList();
221  list->AddItemInt(m_self->itemID());
222  list->AddItem(PyStatic.NewNone());
223  list->AddItem(PyStatic.NewNone());
224  list->AddItem(PyStatic.NewNone());
225  list->AddItem(PyStatic.NewNone());
226  list->AddItem(PyStatic.NewNone());
227  list->AddItem(PyStatic.NewNone());
228  PyTuple* tuple = new PyTuple(2);
229  tuple->SetItem(0, new PyString("OnDroneStateChange"));
230  tuple->SetItem(1, list);
231  m_bubble->BubblecastDestinyUpdate(&tuple, "destiny");
232  }
233 }
234 
237 }
238 
240  m_AI->TargetLost(who);
241 }
242 
244  m_AI->Targeted(who);
245 }
246 
249 }
250 
252  _log(SE__SLIMITEM, "MakeSlimItem for Drone %u ", m_self->itemID());
253  PyDict *slim = new PyDict();
254  slim->SetItemString("itemID", new PyLong(m_self->itemID()));
255  slim->SetItemString("typeID", new PyInt(m_self->typeID()));
256  slim->SetItemString("categoryID", new PyInt(m_self->categoryID()));
257  slim->SetItemString("groupID", new PyInt(m_self->groupID()));
258  slim->SetItemString("name", new PyString(m_self->itemName()));
259  slim->SetItemString("ownerID", new PyInt(m_ownerID));
260  slim->SetItemString("corpID", IsCorp(m_corpID) ? new PyInt(m_corpID) : PyStatic.NewNone());
261  slim->SetItemString("allianceID", IsAlliance(m_allyID) ? new PyInt(m_allyID) : PyStatic.NewNone());
262  slim->SetItemString("warFactionID", IsFaction(m_warID) ? new PyInt(m_warID) : PyStatic.NewNone());
263  slim->SetItemString("bounty", new PyFloat(GetBounty()));
264  slim->SetItemString("securityStatus", new PyFloat(GetSecurityRating()));
265  return slim;
266 }
267 
269 {
270  using namespace Destiny;
271 
272  uint8 mode = m_destiny->GetState(); //Ball::Mode::STOP;
273 
274  // drone id's begin at 500m
275  BallHeader head = BallHeader();
276  head.entityID = GetID();
277  head.mode = mode;
278  head.radius = GetRadius();
279  head.posX = x();
280  head.posY = y();
281  head.posZ = z();
282  head.flags = Ball::Flag::IsFree;
283  into.Append( head );
284  MassSector mass = MassSector();
285  mass.mass = m_destiny->GetMass();
286  mass.cloak = 0;
287  mass.harmonic = m_harmonic;
288  mass.corporationID = m_corpID;
289  mass.allianceID = (IsAlliance(m_allyID) ? m_allyID : -1);
290  into.Append( mass );
291  DataSector data = DataSector();
293  data.velX = m_destiny->GetVelocity().x;
294  data.velY = m_destiny->GetVelocity().y;
295  data.velZ = m_destiny->GetVelocity().z;
296  data.inertia = m_destiny->GetInertia();
298  into.Append( data );
299  switch (mode) {
300  case Ball::Mode::WARP: {
301  GPoint target = m_destiny->GetTargetPoint();
302  WARP_Struct warp;
303  warp.formationID = 0xFF;
304  warp.targX = target.x;
305  warp.targY = target.y;
306  warp.targZ = target.z;
307  warp.speed = m_destiny->GetWarpSpeed(); //ship warp speed x10 (dont ask...this is what it is...more dumb ccp shit)
308  // warp timing. see Ship::EncodeDestiny() for notes/updates
309  warp.effectStamp = -1; //m_destiny->GetStateStamp(); //timestamp when warp started
310  warp.followRange = 0; //this isnt right
311  warp.followID = 0; //this isnt right
312  into.Append( warp );
313  } break;
314  case Ball::Mode::FOLLOW: {
315  FOLLOW_Struct follow;
316  follow.followID = m_destiny->GetTargetID();
318  follow.formationID = 0xFF;
319  into.Append( follow );
320  } break;
321  case Ball::Mode::ORBIT: {
322  ORBIT_Struct orbit;
323  orbit.targetID = m_destiny->GetTargetID();
325  orbit.formationID = 0xFF;
326  into.Append( orbit );
327  } break;
328  case Ball::Mode::GOTO: {
329  GPoint target = m_destiny->GetTargetPoint();
330  GOTO_Struct go;
331  go.formationID = 0xFF;
332  go.x = target.x;
333  go.y = target.y;
334  go.z = target.z;
335  into.Append( go );
336  } break;
337  default: {
339  main.formationID = 0xFF;
340  into.Append( main );
341  } break;
342  }
343  _log(SE__DESTINY, "DroneSE::EncodeDestiny(): %s - id:%li, mode:%u, flags:0x%X", GetName(), head.entityID, head.mode, head.flags);
344 }
345 
346 void DroneSE::MakeDamageState(DoDestinyDamageState &into)
347 {
349  into.recharge = m_self->GetAttribute(AttrShieldRechargeRate).get_float() + 5;
350  into.timestamp = GetFileTimeNow();
352  into.structure = 1.0 - (m_self->GetAttribute(AttrDamage).get_float() / m_self->GetAttribute(AttrHP).get_float());
353 }
354 
356  /* fix for missing resist attribs -allan 18April16 */
369 }
370 
371 void DroneSE::Killed(Damage &fatal_blow) {
372  if ((m_bubble == nullptr) or (m_destiny == nullptr) or (m_system == nullptr))
373  return; // make error here?
374 
375  uint32 killerID = 0;
376  Client* pClient(nullptr);
377  SystemEntity *killer(fatal_blow.srcSE);
378 
379  if (killer->HasPilot()) {
380  pClient = killer->GetPilot();
381  killerID = pClient->GetCharacterID();
382  } else if (killer->IsDroneSE()) {
383  pClient = sEntityList.FindClientByCharID( killer->GetSelf()->ownerID() );
384  if (pClient == nullptr) {
385  sLog.Error("DroneSE::Killed()", "killer == IsDrone and pPlayer == nullptr");
386  } else {
387  killerID = pClient->GetCharacterID();
388  }
389  } else {
390  killerID = killer->GetID();
391  }
392 
393  if (pClient != nullptr) {
394  //award kill bounty.
395  AwardBounty( pClient );
397  AwardSecurityStatus(m_self, pClient->GetChar().get()); // this awards secStatusChange for npcs in empire space
398  }
399 
400  GPoint wreckPosition = m_destiny->GetPosition();
401  if (wreckPosition.isNaN()) {
402  sLog.Error("DroneSE::Killed()", "Wreck Position is NaN");
403  return;
404  }
405 
406  uint32 wreckTypeID = 26972; //Faction Drone Wreck -- best i can find.
407 
408  std::string wreck_name = m_self->itemName();
409  wreck_name += " Wreck";
410  ItemData wreckItemData(wreckTypeID, killerID, m_system->GetID(), flagNone, wreck_name.c_str(), wreckPosition, itoa(m_allyID));
411  WreckContainerRef wreckItemRef = sItemFactory.SpawnWreckContainer( wreckItemData );
412  if (wreckItemRef.get() == nullptr) {
413  sLog.Error("DroneSE::Killed()", "Creating Wreck Item Failed for %s of type %u", wreck_name.c_str(), wreckTypeID);
414  return;
415  }
416 
417  if (is_log_enabled(PHYSICS__TRACE))
418  _log(PHYSICS__TRACE, "DroneSE::Killed() - Drone %s(%u) Position: %.2f,%.2f,%.2f. Wreck %s(%u) Position: %.2f,%.2f,%.2f.", \
419  GetName(), GetID(), x(), y(), z(), wreckItemRef->name(), wreckItemRef->itemID(), wreckPosition.x, wreckPosition.y, wreckPosition.z);
420 
422  wreckEntity.allianceID = (killer->GetAllianceID() == 0 ? m_allyID : killer->GetAllianceID());
424  wreckEntity.corporationID = killer->GetCorporationID();
425  wreckEntity.factionID = (killer->GetWarFactionID() == 0 ? m_warID : killer->GetWarFactionID());
426  wreckEntity.groupID = EVEDB::invGroups::Wreck;
427  wreckEntity.itemID = wreckItemRef->itemID();
428  wreckEntity.itemName = wreck_name;
429  wreckEntity.ownerID = killerID;
430  wreckEntity.typeID = wreckTypeID;
431  wreckEntity.position = wreckPosition;
432 
433  if (!m_system->BuildDynamicEntity(wreckEntity, m_self->itemID())) {
434  sLog.Error("DroneSE::Killed()", "Spawning Wreck Failed for typeID %u", wreckTypeID);
435  wreckItemRef->Delete();
436  return;
437  }
439 }
440 
441 /*
442  [PyObjectData Name: macho.MachoAddress]
443  [PyTuple 3 items]
444  [PyInt 8]
445  [PyString "entity"]
446  [PyNone]
447  [PyInt 5654387]
448  [PyTuple 1 items]
449  [PyTuple 2 items]
450  [PyInt 0]
451  [PySubStream 40 bytes]
452  [PyTuple 4 items]
453  [PyInt 1]
454  [PyString "MachoResolveObject"]
455  [PyTuple 2 items]
456  [PyInt 30000302]
457  [PyInt 0]
458  [PyDict 1 kvp]
459  [PyString "machoVersion"]
460  [PyInt 1]
461 
462 
463  [PyObjectData Name: macho.MachoAddress]
464  [PyTuple 4 items]
465  [PyInt 1]
466  [PyInt 790408]
467  [PyString "entity"]
468  [PyNone]
469  [PyInt 5654387]
470  [PyTuple 1 items]
471  [PyTuple 2 items]
472  [PyInt 0]
473  [PySubStream 88 bytes]
474  [PyTuple 4 items]
475  [PyInt 1]
476  [PyString "MachoBindObject"]
477  [PyTuple 2 items]
478  [PyInt 30000302]
479  [PyTuple 3 items]
480  [PyString "CmdEngage"]
481  [PyTuple 2 items]
482  [PyList 3 items]
483  [PyIntegerVar 1005909240632]
484  [PyIntegerVar 1005909240642]
485  [PyIntegerVar 1005902745093]
486  [PyIntegerVar 9000000000001190094]
487  [PyDict 0 kvp]
488  [PyDict 1 kvp]
489  [PyString "machoVersion"]
490  [PyInt 1]
491 
492  [PyObjectData Name: macho.MachoAddress]
493  [PyTuple 4 items]
494  [PyInt 1]
495  [PyInt 790408]
496  [PyString "entity"]
497  [PyNone]
498  [PyInt 5654387]
499  [PyTuple 1 items]
500  [PyTuple 2 items]
501  [PyInt 0]
502  [PySubStream 81 bytes]
503  [PyTuple 4 items]
504  [PyInt 1]
505  [PyString "MachoBindObject"]
506  [PyTuple 2 items]
507  [PyInt 30000302]
508  [PyTuple 3 items]
509  [PyString "CmdReturnBay"]
510  [PyTuple 1 items]
511  [PyList 3 items]
512  [PyIntegerVar 1005909240632]
513  [PyIntegerVar 1005909240642]
514  [PyIntegerVar 1005902745093]
515  [PyDict 0 kvp]
516  [PyDict 1 kvp]
517  [PyString "machoVersion"]
518  [PyInt 1]
519  */
uint32 GetShipID() const
Definition: Client.h:150
DroneSE(InventoryItemRef drone, PyServiceMgr &services, SystemManager *pSystem, const FactionData &data)
Definition: Drone.cpp:40
void Append(const T &value)
Appends a single value to buffer.
Definition: Buffer.h:437
void AssignShip(ShipSE *pSE)
Definition: DroneAI.h:62
#define sConfig
A macro for easier access to the singleton.
unsigned __int8 uint8
Definition: eve-compat.h:46
uint32 m_controllerOwnerID
Definition: Drone.h:125
virtual void Process()
virtual void TargetedAdd(SystemEntity *who)
Definition: Drone.cpp:243
void AddEntity(SystemEntity *pSE, bool addSignal=true)
double GetFollowDistance()
void Online(ShipSE *pShipSE=nullptr)
Definition: Drone.cpp:153
#define _log(type, fmt,...)
Definition: logsys.h:124
Python string.
Definition: PyRep.h:430
DestinyManager * m_destiny
Definition: SystemEntity.h:265
double GetRadius()
Definition: SystemEntity.h:208
double m_orbitRange
Definition: Drone.h:127
Python's dictionary.
Definition: PyRep.h:719
uint32 m_ownerID
Definition: SystemEntity.h:283
bool HasAttribute(const uint16 attrID) const
uint32 ownerID() const
Definition: InventoryItem.h:99
void SendJettisonPacket() const
int8 GetState()
Definition: DroneAI.cpp:121
double m_expDamage
Definition: Drone.h:129
double y()
Definition: SystemEntity.h:214
uint32 GetOwnerID()
Definition: SystemEntity.h:219
virtual bool HasPilot()
Definition: SystemEntity.h:258
GaExpInl bool isNaN() const
Definition: GaTypes.h:194
#define sProfiler
Definition: dbcore.cpp:39
virtual Client * GetPilot()
Definition: SystemEntity.h:259
Python floating point number.
Definition: PyRep.h:292
const GVector & GetVelocity() const
SystemBubble * m_bubble
Definition: SystemEntity.h:262
int32 GetCharacterID() const
Definition: Client.h:113
int32 GetWarFactionID() const
Definition: Client.h:126
void StateChange()
Definition: Drone.cpp:204
void SetMaxVelocity(float maxVelocity)
int32 GetCorporationID() const
Definition: Client.h:123
SystemEntity * srcSE
Definition: Damage.h:84
virtual void TargetedLost(SystemEntity *who)
Definition: Drone.cpp:247
#define sEntityList
Definition: EntityList.h:208
const float GetSystemSecurityRating()
Definition: SystemManager.h:86
uint32 GetID() const
Definition: SystemManager.h:80
bool m_online
Definition: Drone.h:122
const char * name()
CharacterRef GetChar() const
Definition: Client.h:164
float GetSecurityRating() const
Definition: Drone.h:95
Python tuple.
Definition: PyRep.h:567
void SetOwner(Client *pClient)
Definition: Drone.cpp:104
GaFloat x
Definition: GaTypes.h:207
bool BuildDynamicEntity(const DBSystemDynamicEntity &entity, uint32 launcherID=0)
Definition: Ship.h:301
int32 m_harmonic
Definition: SystemEntity.h:276
void Offline()
Definition: Drone.cpp:163
float capacity() const
Definition: ItemType.h:71
uint32 GetTargetID()
int32 GetAllianceID() const
Definition: Client.h:125
EvilNumber EvilZero
Definition: EvilNumber.cpp:32
void AddItem(PyRep *i)
Definition: PyRep.h:701
void SafeDelete(T *&p)
Deletes and nullifies a pointer.
Definition: SafeMem.h:83
uint16 groupID() const
const ItemType & type() const
float GetSpeedFraction()
#define is_log_enabled(type)
Definition: logsys.h:78
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
SystemManager * m_system
Definition: Drone.h:119
Definition: gpoint.h:33
InventoryItemRef m_self
Definition: SystemEntity.h:269
double GetTimeUSeconds()
Definition: utils_time.cpp:116
Generic class for buffers.
Definition: Buffer.h:40
InventoryItemRef GetSelf()
Definition: SystemEntity.h:202
int32 GetWarpSpeed()
uint32 m_corpID
Definition: SystemEntity.h:281
PyTuple * MakeDamageState()
void SetItem(size_t index, PyRep *object)
Stores Python object.
Definition: PyRep.h:610
Definition: Damage.h:33
double m_shieldCapacity
Definition: Drone.h:135
float mass() const
Definition: ItemType.h:69
Python integer.
Definition: PyRep.h:231
double GetMaxVelocity()
void SaveDrone()
Definition: Drone.cpp:132
virtual void TargetLost(SystemEntity *who)
Definition: Drone.cpp:239
double GetInertia()
double z()
Definition: SystemEntity.h:215
void Targeted(SystemEntity *by_who)
Definition: DroneAI.cpp:231
void SetSpeedFraction(float fraction=1.0f, bool startMovement=false)
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
void AddItemInt(int32 intval)
Definition: PyRep.h:702
void ChangeOwner(uint32 new_owner, bool notify=false)
const char * GetName() const
Definition: SystemEntity.h:210
virtual void EncodeDestiny(Buffer &into)
Definition: Drone.cpp:268
double x()
Definition: SystemEntity.h:213
Definition: Client.h:66
unsigned __int32 uint32
Definition: eve-compat.h:50
virtual void Process()
Definition: Drone.cpp:116
Client * m_pClient
Definition: Drone.h:116
virtual void Killed(Damage &fatal_blow)
Definition: Drone.cpp:371
uint32 corporationID
#define IsCorp(itemID)
Definition: EVE_Defines.h:234
uint32 m_controllerID
Definition: Drone.h:124
double m_shieldCharge
Definition: Drone.h:134
void Launch(ShipSE *pShipSE)
Definition: Drone.cpp:142
void TargetLost(SystemEntity *by_who)
Definition: DroneAI.cpp:266
void AwardBounty(Client *pClient)
GaFloat y
Definition: GaTypes.h:207
double GetFileTimeNow()
Definition: utils_time.cpp:84
double m_armorDamage
Definition: Drone.h:133
GPoint GetTargetPoint()
ShipSE * GetShipSE()
Definition: Client.h:168
uint32 GetCorporationID()
Definition: SystemEntity.h:218
const std::string & itemName() const
int main(int argc, char *argv[])
double m_emDamage
Definition: Drone.h:128
virtual ~DroneSE()
Definition: Drone.cpp:100
void Orbit(SystemEntity *pSE, uint32 distance=0)
EvilNumber GetAttribute(const uint16 attrID) const
ShipSE * m_pShipSE
Definition: Drone.h:118
#define IsFaction(itemID)
Definition: EVE_Defines.h:250
virtual PyDict * MakeSlimItem()
Definition: Drone.cpp:251
void AwardSecurityStatus(InventoryItemRef iRef, Character *pChar)
DroneAIMgr * m_AI
Definition: Drone.h:117
double m_hullDamage
Definition: Drone.h:132
const GPoint & GetPosition() const
void SetResists()
Definition: Drone.cpp:355
float radius() const
Definition: ItemType.h:68
float volume() const
Definition: ItemType.h:70
virtual void Delete()
#define sItemFactory
Definition: ItemFactory.h:165
EvilNumber EvilOne
Definition: EvilNumber.cpp:34
void BubblecastDestinyUpdate(std::vector< PyTuple * > &updates, const char *desc) const
#define IsAlliance(itemID)
Definition: EVE_Defines.h:244
uint32 GetBounty() const
Definition: Drone.h:89
float get_float()
Definition: EvilNumber.cpp:184
uint32 m_targetID
Definition: Drone.h:123
virtual void Abandon()
Definition: Drone.cpp:185
virtual bool IsDroneSE()
Definition: SystemEntity.h:187
virtual void Abandon()
void Process()
Definition: DroneAI.cpp:48
virtual void TargetAdded(SystemEntity *who)
Definition: Drone.cpp:235
uint16 typeID() const
uint8 categoryID() const
Python list.
Definition: PyRep.h:639
GaFloat z
Definition: GaTypes.h:207
void RemoveDrone()
Definition: Drone.cpp:136
const char * itoa(int64 num)
Convers num to string.
uint32 itemID() const
Definition: InventoryItem.h:98
void IdleOrbit(ShipSE *pShipSE=nullptr)
Definition: Drone.cpp:171
int32 GetWarFactionID()
Definition: SystemEntity.h:217
double m_kinDamage
Definition: Drone.h:130
Python long integer.
Definition: PyRep.h:261
double m_therDamage
Definition: Drone.h:131