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

#include "Missile.h"

Inheritance diagram for Missile:
Collaboration diagram for Missile:

Public Member Functions

 Missile (InventoryItemRef self, PyServiceMgr &services, SystemManager *pSystem, InventoryItemRef modRef, SystemEntity *tSE, SystemEntity *pSE, GenericModule *pMod=nullptr)
 
virtual ~Missile ()
 
virtual MissileGetMissileSE ()
 
virtual bool IsMissileSE ()
 
virtual void Delete ()
 
virtual void Process ()
 
virtual void EncodeDestiny (Buffer &into)
 
virtual void MakeDamageState (DoDestinyDamageState &into)
 
virtual PyDictMakeSlimItem ()
 
uint32 GetLauncherID ()
 
SystemEntityGetTargetSE ()
 
void SetHitTimer (uint32 setTime)
 
void SetSpeed (double speed)
 
bool IsAlive ()
 
bool IsOverloaded ()
 
double GetSpeed ()
 
- Public Member Functions inherited from DynamicSystemEntity
 DynamicSystemEntity (InventoryItemRef self, PyServiceMgr &services, SystemManager *system)
 
virtual ~DynamicSystemEntity ()
 
virtual DynamicSystemEntityGetDynamicSE ()
 
virtual bool IsDynamicEntity ()
 
virtual void UpdateDamage ()
 
virtual bool Load ()
 
virtual bool IsInvul ()
 
virtual bool IsFrozen ()
 
void AwardBounty (Client *pClient)
 
void SetInvul (bool invul=false)
 
void SetFrozen (bool frozen=false)
 
- Public Member Functions inherited from SystemEntity
 SystemEntity (InventoryItemRef self, PyServiceMgr &services, SystemManager *system)
 
virtual ~SystemEntity ()
 
virtual bool ProcessTic ()
 
virtual SystemEntityGetSE ()
 
virtual StaticSystemEntityGetStaticSE ()
 
virtual StationSEGetStationSE ()
 
virtual PlanetSEGetPlanetSE ()
 
virtual MoonSEGetMoonSE ()
 
virtual StargateSEGetGateSE ()
 
virtual BeltSEGetBeltSE ()
 
virtual ItemSystemEntityGetItemSE ()
 
virtual ContainerSEGetContSE ()
 
virtual WreckSEGetWreckSE ()
 
virtual AnomalySEGetAnomalySE ()
 
virtual WormholeSEGetWormholeSE ()
 
virtual FieldSEGetFieldSE ()
 
virtual ProbeSEGetProbeSE ()
 
virtual ObjectSystemEntityGetObjectSE ()
 
virtual AsteroidSEGetAsteroidSE ()
 
virtual StructureSEGetPOSSE ()
 
virtual StructureSEGetJammerSE ()
 
virtual JumpBridgeSEGetJumpBridgeSE ()
 
virtual StructureSEGetOutpostSE ()
 
virtual TowerSEGetTowerSE ()
 
virtual ArraySEGetArraySE ()
 
virtual WeaponSEGetWeaponSE ()
 
virtual BatterySEGetBatterySE ()
 
virtual DeployableSEGetDeployableSE ()
 
virtual SentryGetSentrySE ()
 
virtual ModuleSEGetModuleSE ()
 
virtual ReactorSEGetReactorSE ()
 
virtual CustomsSEGetCOSE ()
 
virtual TCUSEGetTCUSE ()
 
virtual SBUSEGetSBUSE ()
 
virtual IHubSEGetIHubSE ()
 
virtual NPCGetNPCSE ()
 
virtual DroneSEGetDroneSE ()
 
virtual ShipSEGetShipSE ()
 
virtual ConcordGetConcordSE ()
 
virtual bool isGlobal ()
 
virtual bool IsSystemEntity ()
 
virtual bool IsInanimateSE ()
 
virtual bool IsStaticEntity ()
 
virtual bool IsBeltSE ()
 
virtual bool IsGateSE ()
 
virtual bool IsPlanetSE ()
 
virtual bool IsMoonSE ()
 
virtual bool IsStationSE ()
 
virtual bool IsItemEntity ()
 
virtual bool IsAnomalySE ()
 
virtual bool IsWormholeSE ()
 
virtual bool IsCelestialSE ()
 
virtual bool IsContainerSE ()
 
virtual bool IsFieldSE ()
 
virtual bool IsProbeSE ()
 
virtual bool IsObjectEntity ()
 
virtual bool IsSentrySE ()
 
virtual bool IsPOSSE ()
 
virtual bool IsCOSE ()
 
virtual bool IsTCUSE ()
 
virtual bool IsSBUSE ()
 
virtual bool IsIHubSE ()
 
virtual bool IsTowerSE ()
 
virtual bool IsArraySE ()
 
virtual bool IsJammerSE ()
 
virtual bool IsWeaponSE ()
 
virtual bool IsBatterySE ()
 
virtual bool IsModuleSE ()
 
virtual bool IsMoonMiner ()
 
virtual bool IsOutpostSE ()
 
virtual bool IsAsteroidSE ()
 
virtual bool IsDeployableSE ()
 
virtual bool IsJumpBridgeSE ()
 
virtual bool IsReactorSE ()
 
virtual bool IsOperSE ()
 
virtual bool IsLogin ()
 
virtual bool IsNPCSE ()
 
virtual bool IsDroneSE ()
 
virtual bool IsWreckSE ()
 
virtual bool IsShipSE ()
 
virtual bool IsConcord ()
 
PyServiceMgrGetServices ()
 
SystemBubbleSysBubble ()
 
SystemManagerSystemMgr ()
 
TargetManagerTargetMgr ()
 
DestinyManagerDestinyMgr ()
 
InventoryItemRef GetSelf ()
 
uint16 GetTypeID ()
 
uint32 GetGroupID ()
 
uint8 GetCategoryID ()
 
EVEItemFlags GetFlag ()
 
uint32 GetID ()
 
double GetRadius ()
 
uint32 GetLocationID ()
 
const char * GetName () const
 
const GPointGetPosition () const
 
void SetPosition (const GPoint &pos)
 
double x ()
 
double y ()
 
double z ()
 
int32 GetAllianceID ()
 
int32 GetWarFactionID ()
 
uint32 GetCorporationID ()
 
uint32 GetOwnerID ()
 
uint32 GetFleetID ()
 
void SetFleetID (uint32 set)
 
int8 GetHarmonic ()
 
void SetHarmonic (int8 set)
 
void DropLoot (WreckContainerRef wreckRef, uint32 groupID, uint32 owner)
 
void AwardSecurityStatus (InventoryItemRef iRef, Character *pChar)
 
void SendDamageStateChanged ()
 
bool ApplyDamage (Damage &d)
 
double DistanceTo2 (const SystemEntity *other)
 
PyTupleMakeDamageState ()
 
virtual void Abandon ()
 
const bool IsDead ()
 
const GVectorGetVelocity ()
 
virtual void Killed (Damage &fatal_blow)
 
virtual void MissileLaunched (Missile *pMissile)
 
virtual bool LoadExtras ()
 
virtual void SetPilot (Client *pClient)
 
virtual bool HasPilot ()
 
virtual ClientGetPilot ()
 

Protected Member Functions

void HitTarget ()
 
void EndOfLife ()
 

Protected Attributes

SystemEntitym_targetSE
 
SystemEntitym_fromSE
 
InventoryItemRef m_modRef
 
Timer m_hitTimer
 
Timer m_lifeTimer
 
bool m_alive
 
uint32 m_orbitingID
 
float m_damageMod
 
double m_speed
 
double m_hullHP
 
- Protected Attributes inherited from SystemEntity
SystemBubblem_bubble
 
SystemManagerm_system
 
TargetManagerm_targMgr
 
DestinyManagerm_destiny
 
PyServiceMgrm_services
 
InventoryItemRef m_self
 
bool m_killed
 
double m_radius
 
int32 m_harmonic
 
int32 m_warID
 
int32 m_allyID
 
uint32 m_corpID
 
uint32 m_fleetID
 
uint32 m_ownerID
 

Detailed Description

Definition at line 38 of file Missile.h.

Constructor & Destructor Documentation

Missile::Missile ( InventoryItemRef  self,
PyServiceMgr services,
SystemManager pSystem,
InventoryItemRef  modRef,
SystemEntity tSE,
SystemEntity pSE,
GenericModule pMod = nullptr 
)
Todo:
update this when rack overloading is implemented...

Definition at line 39 of file Missile.cpp.

References EVEDB::invGroups::Advanced_Assault_Missile, EVEDB::invGroups::Advanced_Cruise_Missile, EVEDB::invGroups::Advanced_Heavy_Missile, EVEDB::invGroups::Advanced_Light_Missile, EVEDB::invGroups::Advanced_Rocket, EVEDB::invGroups::Advanced_Torpedo, EVEDB::invGroups::Assault_Missile, AttrAoeCloudSize, AttrAoeVelocity, AttrExplosionDelay, AttrMaxVelocity, AttrOverloadDamageModifier, EVEDB::invGroups::Citadel_Cruise, EVEDB::invGroups::Citadel_Torpedo, EvESkill::CitadelCruiseMissiles, EvESkill::CitadelTorpedoes, EVEDB::invGroups::Cruise_Missile, EvESkill::CruiseMissiles, EvESkill::CruiseMissileSpecialization, EVEDB::invGroups::Defender_Missile, EvESkill::DefenderMissiles, EVEDB::invGroups::FoF_Cruise_Missile, EVEDB::invGroups::FoF_Heavy_Missile, EVEDB::invGroups::FoF_Light_Missile, RefPtr< X >::get(), SystemEntity::GetAllianceID(), Client::GetChar(), SystemEntity::GetCorporationID(), ShipItem::GetLinkedCount(), SystemEntity::GetPilot(), ShipSE::GetShipItemRef(), SystemEntity::GetShipSE(), Character::GetSkillLevel(), SystemEntity::GetWarFactionID(), InventoryItem::groupID(), EvESkill::GuidedMissilePrecision, SystemEntity::HasPilot(), EVEDB::invGroups::Heavy_Missile, EvESkill::HeavyAssaultMissiles, EvESkill::HeavyAssaultMissileSpecialization, EvESkill::HeavyMissiles, EvESkill::HeavyMissileSpecialization, GenericModule::IsLinked(), IsOverloaded(), InventoryItem::itemID(), EVEDB::invGroups::Light_Missile, EvESkill::LightMissiles, EvESkill::LightMissileSpecialization, SystemEntity::m_allyID, SystemEntity::m_corpID, m_damageMod, m_fromSE, m_hullHP, m_lifeTimer, SystemEntity::m_ownerID, SystemEntity::m_self, SystemEntity::m_warID, EvESkill::MissileBombardment, EvESkill::MissileProjection, InventoryItem::MultiplyAttribute(), EVEDB::invGroups::Rocket, EvESkill::Rockets, EvESkill::RocketSpecialization, sConfig, Timer::Start(), EvESkill::TargetNavigationPrediction, EVEDB::invGroups::Torpedo, EvESkill::Torpedoes, EvESkill::TorpedoSpecialization, and EvESkill::WarheadUpgrades.

40 : DynamicSystemEntity(self, services, pSystem),
41  m_modRef(modRef),
42  m_targetSE(tSE),
43  m_fromSE(pSE),
44  m_hitTimer(0),
45  m_lifeTimer(0),
46  m_damageMod(1),
47  m_alive(true),
48  m_orbitingID(0),
49  m_speed(0),
51 {
52  if (pSE->HasPilot()) {
53  m_ownerID = pSE->GetPilot()->GetChar()->itemID();
54  } else {
55  m_ownerID = self->ownerID();
56  }
57 
58  m_warID = pSE->GetWarFactionID();
59  m_allyID = pSE->GetAllianceID();
60  m_corpID = pSE->GetCorporationID();
61 
62  double flightTime = self->GetAttribute(AttrExplosionDelay).get_float();
63 
64  // missile skills do not apply correctly in fx processor. not sure why yet.
65  if (pSE->HasPilot()) {
66  Character* pChar = pSE->GetPilot()->GetChar().get();
67  flightTime *= (1 + (0.1f * (pChar->GetSkillLevel(EvESkill::MissileBombardment, true)))); // 10% increase in flightTime
68 
69  self->MultiplyAttribute(AttrMaxVelocity, (1 + (0.1f * (pChar->GetSkillLevel(EvESkill::MissileProjection, true))))); // 10% increase in velocity
70  self->MultiplyAttribute(AttrAoeCloudSize, (1 - (0.05f * (pChar->GetSkillLevel(EvESkill::GuidedMissilePrecision, true))))); // 5% decrease in exp radius
71  self->MultiplyAttribute(AttrAoeVelocity, (1 + (0.1f * (pChar->GetSkillLevel(EvESkill::TargetNavigationPrediction, true))))); // 10% increase in exp velocity
72 
73  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::WarheadUpgrades, true)))); // 5% increase in damage (upped from 2%)
74  switch (m_self->groupID()) {
78  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::LightMissiles, true)))); // 5% increase in damage
80  m_damageMod *= (1 + (0.03f * (pChar->GetSkillLevel(EvESkill::LightMissileSpecialization, true)))); // 3% increase in damage
81  } break;
85  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::HeavyMissiles, true)))); // 5% increase in damage
87  m_damageMod *= (1 + (0.03f * (pChar->GetSkillLevel(EvESkill::HeavyMissileSpecialization, true)))); // 3% increase in damage
88  } break;
92  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::CruiseMissiles, true)))); // 5% increase in
94  m_damageMod *= (1 + (0.03f * (pChar->GetSkillLevel(EvESkill::CruiseMissileSpecialization, true)))); // 3% increase in damage
95  } break;
98  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::Torpedoes, true)))); // 5% increase in damage
100  m_damageMod *= (1 + (0.03f * (pChar->GetSkillLevel(EvESkill::TorpedoSpecialization, true)))); // 3% increase in damage
101  } break;
104  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::Rockets, true)))); // 5% increase in damage
106  m_damageMod *= (1 + (0.03f * (pChar->GetSkillLevel(EvESkill::RocketSpecialization, true)))); // 3% increase in damage
107  } break;
109  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::DefenderMissiles, true)))); // 5% increase in damage
110  } break;
113  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::HeavyAssaultMissiles, true)))); // 5% increase in damage
115  m_damageMod *= (1 + (0.03f * (pChar->GetSkillLevel(EvESkill::HeavyAssaultMissileSpecialization, true)))); // 3% increase in damage
116  } break;
118  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::CitadelCruiseMissiles, true)))); // 5% increase in damage
119  } break;
121  m_damageMod *= (1 + (0.05f * (pChar->GetSkillLevel(EvESkill::CitadelTorpedoes, true)))); // 5% increase in damage
122  } break;
123  }
124  }
125 
127  if (IsOverloaded())
129 
130  flightTime *= sConfig.rates.missileTime;
131 
132  // if linked, update appropriate attributes
133  if (pMod != nullptr)
134  if (pMod->IsLinked()) {
136  m_damageMod *= mod;
137  flightTime *= mod;
138  m_hullHP *= mod;
139  }
140 
141  m_lifeTimer.Start(flightTime);
142 
143  //_log(DAMAGE__MESSAGE, "Created Missile object for %s (%u)", self.get()->name(), self.get()->itemID());
144 }
#define sConfig
A macro for easier access to the singleton.
SystemEntity * m_fromSE
Definition: Missile.h:70
unsigned __int8 uint8
Definition: eve-compat.h:46
uint32 m_ownerID
Definition: SystemEntity.h:283
virtual ShipSE * GetShipSE()
Definition: SystemEntity.h:137
ShipItemRef GetShipItemRef()
Definition: Ship.h:362
virtual bool HasPilot()
Definition: SystemEntity.h:258
virtual Client * GetPilot()
Definition: SystemEntity.h:259
double m_speed
Definition: Missile.h:85
InventoryItemRef m_modRef
Definition: Missile.h:71
double m_hullHP
Definition: Missile.h:86
CharacterRef GetChar() const
Definition: Client.h:164
uint16 groupID() const
InventoryItemRef m_self
Definition: SystemEntity.h:269
uint32 m_corpID
Definition: SystemEntity.h:281
int64 get_int()
Definition: EvilNumber.cpp:166
int32 GetAllianceID()
Definition: SystemEntity.h:216
X * get() const
Definition: RefPtr.h:213
bool m_alive
Definition: Missile.h:79
void MultiplyAttribute(uint16 attrID, EvilNumber num, bool notify=false)
Timer m_lifeTimer
Definition: Missile.h:77
uint32 GetCorporationID()
Definition: SystemEntity.h:218
EvilNumber GetAttribute(const uint16 attrID) const
uint32 m_orbitingID
Definition: Missile.h:81
int8 GetSkillLevel(uint16 skillTypeID, bool zeroForNotInjected=true) const
Definition: Character.cpp:575
SystemEntity * m_targetSE
Definition: Missile.h:69
float get_float()
Definition: EvilNumber.cpp:184
DynamicSystemEntity(InventoryItemRef self, PyServiceMgr &services, SystemManager *system)
bool IsOverloaded()
Definition: Missile.h:64
float m_damageMod
Definition: Missile.h:83
uint32 itemID() const
Definition: InventoryItem.h:98
int32 GetWarFactionID()
Definition: SystemEntity.h:217
Timer m_hitTimer
Definition: Missile.h:76
void Start(uint32 setTimerTime=0, bool changeResetTimer=true)
Definition: timer.cpp:81
uint8 GetLinkedCount(GenericModule *pMod)
Definition: Ship.cpp:1668

Here is the call graph for this function:

Missile::~Missile ( )
virtual

Definition at line 146 of file Missile.cpp.

147 {
148 
149 }

Member Function Documentation

void Missile::Delete ( )
virtual

Reimplemented from SystemEntity.

Definition at line 285 of file Missile.cpp.

References SystemEntity::Delete(), and m_alive.

Referenced by EndOfLife(), and Process().

285  {
286  // cleanup here
287  if (m_alive)
288  return;
289  // do we need to do anything else here?
291 }
virtual void Delete()
bool m_alive
Definition: Missile.h:79

Here is the call graph for this function:

Here is the caller graph for this function:

void Missile::EncodeDestiny ( Buffer into)
virtual

Reimplemented from DynamicSystemEntity.

Definition at line 172 of file Missile.cpp.

References _log, Destiny::MassSector::allianceID, Buffer::Append(), Destiny::MassSector::cloak, Destiny::MassSector::corporationID, Destiny::MISSILE_Struct::effectStamp, Destiny::BallHeader::entityID, Destiny::BallHeader::flags, Destiny::MISSILE_Struct::followRange, Destiny::MISSILE_Struct::formationID, DestinyManager::GetFollowDistance(), SystemEntity::GetID(), DestinyManager::GetInertia(), DestinyManager::GetMass(), SystemEntity::GetName(), SystemEntity::GetRadius(), DestinyManager::GetSpeedFraction(), DestinyManager::GetStateStamp(), DestinyManager::GetTargetID(), DestinyManager::GetVelocity(), Destiny::MassSector::harmonic, Destiny::DataSector::inertia, IsAlliance, Destiny::Ball::Flag::IsFree, SystemEntity::m_allyID, SystemEntity::m_corpID, SystemEntity::m_destiny, SystemEntity::m_harmonic, SystemEntity::m_ownerID, m_speed, Destiny::MassSector::mass, Destiny::DataSector::maxSpeed, Destiny::Ball::Mode::MISSILE, Destiny::BallHeader::mode, Destiny::MISSILE_Struct::ownerID, Destiny::BallHeader::posX, Destiny::BallHeader::posY, Destiny::BallHeader::posZ, Destiny::BallHeader::radius, Destiny::DataSector::speedfraction, Destiny::MISSILE_Struct::targetID, Destiny::DataSector::velX, Destiny::DataSector::velY, Destiny::DataSector::velZ, Destiny::MISSILE_Struct::x, Ga::GaVec3::x, SystemEntity::x(), Destiny::MISSILE_Struct::y, Ga::GaVec3::y, SystemEntity::y(), Destiny::MISSILE_Struct::z, Ga::GaVec3::z, and SystemEntity::z().

173 {
174  using namespace Destiny;
175  BallHeader head = BallHeader();
176  head.entityID = GetID();
177  head.mode = Ball::Mode::MISSILE;
178  head.radius = GetRadius();
179  head.posX = x();
180  head.posY = y();
181  head.posZ = z();
182  head.flags = Ball::Flag::IsFree;
183  into.Append( head );
184  MassSector mass = MassSector();
185  mass.mass = m_destiny->GetMass();
186  mass.cloak = 0;
187  mass.harmonic = m_harmonic;
188  mass.corporationID = m_corpID;
189  mass.allianceID = (IsAlliance(m_allyID) ? m_allyID : -1);
190  into.Append( mass );
191  DataSector data = DataSector();
192  data.maxSpeed = m_speed;
193  data.velX = m_destiny->GetVelocity().x;
194  data.velY = m_destiny->GetVelocity().y;
195  data.velZ = m_destiny->GetVelocity().z;
196  data.inertia = m_destiny->GetInertia();
198  into.Append( data );
199  MISSILE_Struct miss;
200  miss.ownerID = m_ownerID;
201  miss.formationID = 0xFF;
203  miss.targetID = m_destiny->GetTargetID();
204  miss.followRange = (float)m_destiny->GetFollowDistance();
205  miss.x = x();
206  miss.y = y();
207  miss.z = z();
208  into.Append(miss);
209 
210  _log(SE__DESTINY, "Missile::EncodeDestiny(): %s - id:%li, mode:%u, flags:0x%X", GetName(), head.entityID, head.mode, head.flags);
211 }
void Append(const T &value)
Appends a single value to buffer.
Definition: Buffer.h:437
double GetFollowDistance()
#define _log(type, fmt,...)
Definition: logsys.h:124
DestinyManager * m_destiny
Definition: SystemEntity.h:265
double GetRadius()
Definition: SystemEntity.h:208
uint32 m_ownerID
Definition: SystemEntity.h:283
double y()
Definition: SystemEntity.h:214
uint32 GetStateStamp()
const GVector & GetVelocity() const
double m_speed
Definition: Missile.h:85
GaFloat x
Definition: GaTypes.h:207
int32 m_harmonic
Definition: SystemEntity.h:276
uint32 GetTargetID()
float GetSpeedFraction()
uint32 m_corpID
Definition: SystemEntity.h:281
double GetInertia()
double z()
Definition: SystemEntity.h:215
uint32 GetID()
Definition: SystemEntity.h:207
const char * GetName() const
Definition: SystemEntity.h:210
double x()
Definition: SystemEntity.h:213
GaFloat y
Definition: GaTypes.h:207
#define IsAlliance(itemID)
Definition: EVE_Defines.h:244
GaFloat z
Definition: GaTypes.h:207

Here is the call graph for this function:

void Missile::EndOfLife ( )
protected

Definition at line 280 of file Missile.cpp.

References Delete(), and m_alive.

Referenced by Process().

280  {
281  m_alive = false;
282  Delete();
283 }
virtual void Delete()
Definition: Missile.cpp:285
bool m_alive
Definition: Missile.h:79

Here is the call graph for this function:

Here is the caller graph for this function:

uint32 Missile::GetLauncherID ( )
inline

Definition at line 57 of file Missile.h.

References SystemEntity::GetID(), and m_fromSE.

Referenced by DestinyManager::MakeMissile().

57 { return m_fromSE->GetID(); }
SystemEntity * m_fromSE
Definition: Missile.h:70
uint32 GetID()
Definition: SystemEntity.h:207

Here is the call graph for this function:

Here is the caller graph for this function:

virtual Missile* Missile::GetMissileSE ( )
inlinevirtual

Reimplemented from SystemEntity.

Definition at line 45 of file Missile.h.

45 { return this; }
double Missile::GetSpeed ( )
inline

Definition at line 66 of file Missile.h.

References m_speed.

Referenced by DestinyManager::MakeMissile().

66 { return m_speed; }
double m_speed
Definition: Missile.h:85

Here is the caller graph for this function:

SystemEntity* Missile::GetTargetSE ( )
inline

Definition at line 58 of file Missile.h.

References m_targetSE.

Referenced by DestinyManager::MakeMissile().

58 { return m_targetSE; }
SystemEntity * m_targetSE
Definition: Missile.h:69

Here is the caller graph for this function:

void Missile::HitTarget ( )
protected

Definition at line 240 of file Missile.cpp.

References SystemEntity::ApplyDamage(), AttrAoeCloudSize, AttrAoeDamageReductionFactor, AttrAoeDamageReductionSensitivity, AttrAoeVelocity, AttrSignatureRadius, EvilNumber::get_float(), InventoryItem::GetAttribute(), SystemEntity::GetSelf(), SystemEntity::GetVelocity(), Ga::GaVec3::length(), m_alive, m_damageMod, m_fromSE, m_modRef, SystemEntity::m_self, m_targetSE, EvE::min1(), and missileLaunching.

Referenced by Process().

240  {
241  // Create Damage object:
243 
244  /* this is damage formula for missiles
245  * Damage = D * MIN(1, Sr/Er, (Ev/V * Sr/Er)^(ln(DRF) / ln(DRS)) )
246  *
247  * D = base damage of the missile,
248  * Sr = signature radius of the target,
249  * Er = Explosion radius of the missile,
250  * Ev = Explosion Velocity of the missile,
251  * V = velocity of the target ship,
252  * DRF = damage reduction factor of the missile.
253  * DRS = damage reduction sensitivity of the missile.
254  * MIN being a function that chooses the lower of the given vaules,
255  * ln is natural logarithm.
256  */
257  double Sr = m_targetSE->GetSelf()->GetAttribute(AttrSignatureRadius).get_float(); // this is a default number, based on itemtype
258  double Er = m_self->GetAttribute(AttrAoeCloudSize).get_float(); // Explosion Radius
259  double Ev = m_self->GetAttribute(AttrAoeVelocity).get_float(); // Explosion Velocity
260  double DRF = m_self->GetAttribute(AttrAoeDamageReductionFactor).get_float(); // Damage Reduction Factor
261  double DRS = m_self->GetAttribute(AttrAoeDamageReductionSensitivity).get_float(); // Damage Reduction Sensitivity
262 
263  GPoint Vel = m_targetSE->GetVelocity();
264  double V = Vel.length();
265  if (V <= 0)
266  V = 1;
267 
268  double v1 = Sr/Er;
269  double v2 = pow(((Ev/V) * v1), (log(DRF) / log(DRS)));
270 
271  // apply damage modifier from char skills, if applicable
272  d *= m_damageMod;
273  // apply missile damage formula to computed total damage
274  d *= EvE::min1(v1, v2);
275 
277  m_alive = false;
278 }
SystemEntity * m_fromSE
Definition: Missile.h:70
GaExpInl GaFloat length() const
Definition: GaTypes.h:156
InventoryItemRef m_modRef
Definition: Missile.h:71
const GVector & GetVelocity()
Definition: SystemEntity.h:240
Definition: gpoint.h:33
InventoryItemRef m_self
Definition: SystemEntity.h:269
InventoryItemRef GetSelf()
Definition: SystemEntity.h:202
Definition: Damage.h:33
bool m_alive
Definition: Missile.h:79
double min1(double x, double y)
Definition: misc.cpp:150
EvilNumber GetAttribute(const uint16 attrID) const
SystemEntity * m_targetSE
Definition: Missile.h:69
float get_float()
Definition: EvilNumber.cpp:184
bool ApplyDamage(Damage &d)
Definition: Damage.cpp:108
float m_damageMod
Definition: Missile.h:83

Here is the call graph for this function:

Here is the caller graph for this function:

bool Missile::IsAlive ( )
inline

Definition at line 63 of file Missile.h.

References m_alive.

63 { return m_alive; }
bool m_alive
Definition: Missile.h:79
virtual bool Missile::IsMissileSE ( )
inlinevirtual

Reimplemented from SystemEntity.

Definition at line 47 of file Missile.h.

47 { return true; }
bool Missile::IsOverloaded ( )
inline

Definition at line 64 of file Missile.h.

Referenced by Missile().

64 { return false; }

Here is the caller graph for this function:

void Missile::MakeDamageState ( DoDestinyDamageState &  into)
virtual

Reimplemented from DynamicSystemEntity.

Definition at line 232 of file Missile.cpp.

References AttrDamage, AttrHP, EvilNumber::get_float(), InventoryItem::GetAttribute(), GetFileTimeNow(), and SystemEntity::m_self.

232  {
233  into.shield = 1;
234  into.recharge = 10000;
235  into.timestamp = GetFileTimeNow();
236  into.armor = 1;
237  into.structure = 1.0f - (m_self->GetAttribute(AttrDamage).get_float() / m_self->GetAttribute(AttrHP).get_float());
238 }
InventoryItemRef m_self
Definition: SystemEntity.h:269
double GetFileTimeNow()
Definition: utils_time.cpp:84
EvilNumber GetAttribute(const uint16 attrID) const
float get_float()
Definition: EvilNumber.cpp:184

Here is the call graph for this function:

PyDict * Missile::MakeSlimItem ( )
virtual
Todo:
(allan) fix this
Todo:
(allan) fix this
Todo:
(allan) fix this

Reimplemented from DynamicSystemEntity.

Definition at line 213 of file Missile.cpp.

References _log, InventoryItem::categoryID(), InventoryItem::groupID(), IsAlliance, IsCorp, IsFaction, InventoryItem::itemID(), InventoryItem::itemName(), SystemEntity::m_allyID, SystemEntity::m_corpID, m_modRef, SystemEntity::m_ownerID, SystemEntity::m_self, SystemEntity::m_warID, PyStatic, and InventoryItem::typeID().

213  {
214  _log(SE__SLIMITEM, "MakeSlimItem for Missile %u", m_self->itemID());
215  PyDict *slim = new PyDict();
216  slim->SetItemString("itemID", new PyLong(m_self->itemID()));
217  slim->SetItemString("typeID", new PyInt(m_self->typeID()));
218  slim->SetItemString("groupID", new PyInt(m_self->groupID()));
219  slim->SetItemString("categoryID", new PyInt(m_self->categoryID()));
220  slim->SetItemString("name", new PyString(m_self->itemName()));
221  slim->SetItemString("sourceModuleID", new PyInt(m_modRef->itemID()));
222  slim->SetItemString("corpID", IsCorp(m_corpID) ? new PyInt(m_corpID) : PyStatic.NewNone());
223  slim->SetItemString("allianceID", IsAlliance(m_allyID) ? new PyInt(m_allyID) : PyStatic.NewNone());
224  slim->SetItemString("warFactionID", IsFaction(m_warID) ? new PyInt(m_warID) : PyStatic.NewNone());
225  slim->SetItemString("securityStatus", new PyFloat(0/*pChar->GetSecurityRating()*/));
226  slim->SetItemString("ownerID", new PyInt(m_ownerID)); // this is corp ID??
227  slim->SetItemString("numLaunchers", PyStatic.NewOne());
228  slim->SetItemString("nameID", new PyInt(0));
229  return(slim);
230 }
#define _log(type, fmt,...)
Definition: logsys.h:124
Python string.
Definition: PyRep.h:430
Python's dictionary.
Definition: PyRep.h:719
uint32 m_ownerID
Definition: SystemEntity.h:283
Python floating point number.
Definition: PyRep.h:292
InventoryItemRef m_modRef
Definition: Missile.h:71
uint16 groupID() const
InventoryItemRef m_self
Definition: SystemEntity.h:269
uint32 m_corpID
Definition: SystemEntity.h:281
Python integer.
Definition: PyRep.h:231
#define PyStatic
Definition: PyRep.h:1209
#define IsCorp(itemID)
Definition: EVE_Defines.h:234
const std::string & itemName() const
#define IsFaction(itemID)
Definition: EVE_Defines.h:250
#define IsAlliance(itemID)
Definition: EVE_Defines.h:244
uint16 typeID() const
uint8 categoryID() const
uint32 itemID() const
Definition: InventoryItem.h:98
Python long integer.
Definition: PyRep.h:261

Here is the call graph for this function:

void Missile::Process ( )
virtual

Reimplemented from SystemEntity.

Definition at line 151 of file Missile.cpp.

References Timer::Check(), Delete(), Timer::Disable(), EndOfLife(), GetTimeUSeconds(), HitTarget(), m_alive, m_hitTimer, m_lifeTimer, Profile::missile, SystemEntity::Process(), sConfig, and sProfiler.

151  {
152  if (!m_alive) {
153  Delete();
154  return;
155  }
156  if (m_lifeTimer.Check(false)) {
157  EndOfLife();
158  return;
159  }
160  double profileStartTime = GetTimeUSeconds();
161  /* Enable base call to Process Targeting and Movement */
163 
164  if (m_hitTimer.Check(false)) {
166  HitTarget();
167  }
168  if (sConfig.debug.UseProfiling)
169  sProfiler.AddTime(Profile::missile, GetTimeUSeconds() - profileStartTime);
170 }
#define sConfig
A macro for easier access to the singleton.
virtual void Process()
virtual void Delete()
Definition: Missile.cpp:285
void Disable()
Definition: timer.h:39
#define sProfiler
Definition: dbcore.cpp:39
double GetTimeUSeconds()
Definition: utils_time.cpp:116
void HitTarget()
Definition: Missile.cpp:240
bool Check(bool reset=true)
Definition: timer.cpp:62
bool m_alive
Definition: Missile.h:79
Timer m_lifeTimer
Definition: Missile.h:77
void EndOfLife()
Definition: Missile.cpp:280
Timer m_hitTimer
Definition: Missile.h:76

Here is the call graph for this function:

void Missile::SetHitTimer ( uint32  setTime)
inline

Definition at line 60 of file Missile.h.

References m_hitTimer, and Timer::Start().

Referenced by ActiveModule::LaunchMissile(), and NPCAIMgr::LaunchMissile().

60 { m_hitTimer.Start(setTime); }
Timer m_hitTimer
Definition: Missile.h:76
void Start(uint32 setTimerTime=0, bool changeResetTimer=true)
Definition: timer.cpp:81

Here is the call graph for this function:

Here is the caller graph for this function:

void Missile::SetSpeed ( double  speed)
inline

Definition at line 61 of file Missile.h.

References m_speed.

Referenced by ActiveModule::LaunchMissile(), and NPCAIMgr::LaunchMissile().

61 { m_speed = speed; }
double m_speed
Definition: Missile.h:85

Here is the caller graph for this function:

Member Data Documentation

bool Missile::m_alive
protected

Definition at line 79 of file Missile.h.

Referenced by Delete(), EndOfLife(), HitTarget(), IsAlive(), and Process().

float Missile::m_damageMod
protected

Definition at line 83 of file Missile.h.

Referenced by HitTarget(), and Missile().

SystemEntity* Missile::m_fromSE
protected

Definition at line 70 of file Missile.h.

Referenced by GetLauncherID(), HitTarget(), and Missile().

Timer Missile::m_hitTimer
protected

Definition at line 76 of file Missile.h.

Referenced by Process(), and SetHitTimer().

double Missile::m_hullHP
protected

Definition at line 86 of file Missile.h.

Referenced by Missile().

Timer Missile::m_lifeTimer
protected

Definition at line 77 of file Missile.h.

Referenced by Missile(), and Process().

InventoryItemRef Missile::m_modRef
protected

Definition at line 71 of file Missile.h.

Referenced by HitTarget(), and MakeSlimItem().

uint32 Missile::m_orbitingID
protected

Definition at line 81 of file Missile.h.

double Missile::m_speed
protected

Definition at line 85 of file Missile.h.

Referenced by EncodeDestiny(), GetSpeed(), and SetSpeed().

SystemEntity* Missile::m_targetSE
protected

Definition at line 69 of file Missile.h.

Referenced by GetTargetSE(), and HitTarget().


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