EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
ModuleFactory.h
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: Luck
24  Updates: Allan 13 March 2017 Implemented TRUE effects class and code that processess and applies all item effect using ccp's effects data
25 */
26 
27 
28 #ifndef __MODULEFACTORY_H__
29 #define __MODULEFACTORY_H__
30 
34 #include "ship/modules/RigModule.h"
40 
42 {
43  if ((mRef->categoryID() != EVEDB::invCategories::Module) and (mRef->categoryID() != EVEDB::invCategories::Subsystem)) {
44  sLog.Error("ModuleFactory","Cannot create module from non module type item");
45  assert(false);
46  } else {
47  switch(mRef->groupID()) {
48  // Weapon Modules:
49  case EVEDB::invGroups::Energy_Weapon: return (new TurretModule(mRef, sRef)); // Active - external
50  case EVEDB::invGroups::Projectile_Weapon: return (new TurretModule(mRef, sRef)); // Active - external
51  case EVEDB::invGroups::Gyrostabilizer: return (new PassiveModule(mRef, sRef));
52  case EVEDB::invGroups::Energy_Vampire: return (new ActiveModule(mRef, sRef)); // Active - external
53  case EVEDB::invGroups::Energy_Destabilizer: return (new ActiveModule(mRef, sRef)); // Active - external
54  case EVEDB::invGroups::Smart_Bomb: return (new ActiveModule(mRef, sRef)); // Active - external
55  case EVEDB::invGroups::Hybrid_Weapon: return (new TurretModule(mRef, sRef)); // Active - external
56  case EVEDB::invGroups::Heat_Sink: return (new PassiveModule(mRef, sRef));
57  case EVEDB::invGroups::Magnetic_Field_Stabilizer: return (new PassiveModule(mRef, sRef));
58  case EVEDB::invGroups::Ballistic_Control_system: return (new PassiveModule(mRef, sRef));
59  case EVEDB::invGroups::Super_Weapon: return (new ActiveModule(mRef, sRef)); // Active - external
60  case EVEDB::invGroups::Interdiction_Sphere_Launcher: return (new ActiveModule(mRef, sRef)); // Active - external
61  case EVEDB::invGroups::Warp_Disrupt_Field_Generator: return (new ActiveModule(mRef, sRef)); // Active - external
62  case EVEDB::invGroups::Missile_Launcher_Snowball: return (new ActiveModule(mRef, sRef)); // Active - external
63  case EVEDB::invGroups::Missile_Launcher_Cruise: return (new ActiveModule(mRef, sRef)); // Active - external
64  case EVEDB::invGroups::Missile_Launcher_Rocket: return (new ActiveModule(mRef, sRef)); // Active - external
65  case EVEDB::invGroups::Missile_Launcher_Siege: return (new ActiveModule(mRef, sRef)); // Active - external
66  case EVEDB::invGroups::Missile_Launcher_Standard: return (new ActiveModule(mRef, sRef)); // Active - external
67  case EVEDB::invGroups::Missile_Launcher_Heavy: return (new ActiveModule(mRef, sRef)); // Active - external
68  case EVEDB::invGroups::Missile_Launcher_Assault: return (new ActiveModule(mRef, sRef)); // Active - external
69  case EVEDB::invGroups::Missile_Launcher_Defender: return (new ActiveModule(mRef, sRef)); // Active - external
70  case EVEDB::invGroups::Missile_Launcher_Citadel: return (new ActiveModule(mRef, sRef)); // Active - external
71  case EVEDB::invGroups::Missile_Launcher_Heavy_Assault: return (new ActiveModule(mRef, sRef)); // Active - external
72  case EVEDB::invGroups::Missile_Launcher_Bomb: return (new ActiveModule(mRef, sRef)); // Active - external
73 
74  // Armor Modules:
75  case EVEDB::invGroups::Damage_Control: return (new ActiveModule(mRef, sRef)); // Active - SELF
76  case EVEDB::invGroups::Armor_Repair_Unit: return (new ActiveModule(mRef, sRef)); // Active - SELF
77  case EVEDB::invGroups::Hull_Repair_Unit: return (new ActiveModule(mRef, sRef)); // Active - SELF
78  case EVEDB::invGroups::Reinforced_Bulkheads: return (new PassiveModule(mRef, sRef));
79  case EVEDB::invGroups::Armor_Coating: return (new PassiveModule(mRef, sRef));
80  case EVEDB::invGroups::Armor_Repair_Projector: return (new ActiveModule(mRef, sRef)); // Active - external
81  case EVEDB::invGroups::Armor_Plating_Energized: return (new PassiveModule(mRef, sRef));
82  case EVEDB::invGroups::Armor_Hardener: return (new ActiveModule(mRef, sRef)); // Active - SELF
83  case EVEDB::invGroups::Armor_Reinforcer: return (new PassiveModule(mRef, sRef));
84  case EVEDB::invGroups::Remote_Hull_Repairer: return (new ActiveModule(mRef, sRef)); // Active - external
85  case EVEDB::invGroups::Expanded_Cargohold: return (new PassiveModule(mRef, sRef));
86 
87  // Shield Modules:
88  case EVEDB::invGroups::Shield_Extender: return (new PassiveModule(mRef, sRef));
89  case EVEDB::invGroups::Shield_Recharger: return (new PassiveModule(mRef, sRef));
90  case EVEDB::invGroups::Shield_Booster: return (new ActiveModule(mRef, sRef)); // Active - SELF
91  case EVEDB::invGroups::Shield_Transporter: return (new ActiveModule(mRef, sRef)); // Active - external
92  case EVEDB::invGroups::Shield_Power_Relay: return (new PassiveModule(mRef, sRef));
93  case EVEDB::invGroups::Shield_Hardener: return (new ActiveModule(mRef, sRef)); // Active - SELF
94  case EVEDB::invGroups::Shield_Amplifier: return (new PassiveModule(mRef, sRef));
95  case EVEDB::invGroups::Shield_Boost_Amplifier: return (new PassiveModule(mRef, sRef));
96  case EVEDB::invGroups::Shield_Disruptor: return (new ActiveModule(mRef, sRef)); // Active - external
97 
98  // Scanner Modules
99  case EVEDB::invGroups::Cargo_Scanner: return (new ActiveModule(mRef, sRef)); // Active - external
100  case EVEDB::invGroups::Ship_Scanner: return (new ActiveModule(mRef, sRef)); // Active - external
101  case EVEDB::invGroups::Survey_Scanner: return (new ActiveModule(mRef, sRef)); // Active - external
102  case EVEDB::invGroups::System_Scanner: return (new ActiveModule(mRef, sRef)); // Active - external
103 
104  // Electronics Modules:
105  case EVEDB::invGroups::Cloaking_Device: return (new ActiveModule(mRef, sRef)); // Active - SELF
106  case EVEDB::invGroups::Target_Painter: return (new ActiveModule(mRef, sRef)); // Active - external
107  case EVEDB::invGroups::Drone_Control_Unit: return (new PassiveModule(mRef, sRef));
108  case EVEDB::invGroups::Scan_Probe_Launcher: return (new ActiveModule(mRef, sRef)); // Active - external
109  case EVEDB::invGroups::Drone_Navigation_Computer: return (new PassiveModule(mRef, sRef));
110  case EVEDB::invGroups::Drone_Tracking_Modules: return (new PassiveModule(mRef, sRef));
111  case EVEDB::invGroups::Drone_Control_Range_Module: return (new PassiveModule(mRef, sRef));
112  case EVEDB::invGroups::Tractor_Beam: return (new ActiveModule(mRef, sRef)); // Active - external
113 
114  // Prospecting Modules
115  case EVEDB::invGroups::Salvager: return (new Prospector(mRef, sRef)); // Active - external
116  case EVEDB::invGroups::Data_Miner: return (new Prospector(mRef, sRef)); // Active - external
117 
118  // Engineering Modules:
119  case EVEDB::invGroups::Capacitor_Recharger: return (new PassiveModule(mRef, sRef));
120  case EVEDB::invGroups::Capacitor_Battery: return (new PassiveModule(mRef, sRef));
121  case EVEDB::invGroups::Energy_Transfer_Array: return (new ActiveModule(mRef, sRef)); // Active - external
122  case EVEDB::invGroups::Capacitor_Booster: return (new ActiveModule(mRef, sRef)); // Active - SELF
123  case EVEDB::invGroups::Auxiliary_Power_Core: return (new PassiveModule(mRef, sRef));
124  case EVEDB::invGroups::Power_Diagnostic_System: return (new PassiveModule(mRef, sRef));
125  case EVEDB::invGroups::Capacitor_Power_Relay: return (new PassiveModule(mRef, sRef));
126  case EVEDB::invGroups::Capacitor_Flux_Coil: return (new PassiveModule(mRef, sRef));
127  case EVEDB::invGroups::Reactor_Control_Unit: return (new PassiveModule(mRef, sRef));
128  case EVEDB::invGroups::Shield_Flux_Coil: return (new PassiveModule(mRef, sRef));
129 
130  // EWAR Modules:
131  case EVEDB::invGroups::Warp_Scrambler: return (new ActiveModule(mRef, sRef)); // Active - external
132  case EVEDB::invGroups::Stasis_Web: return (new ActiveModule(mRef, sRef)); // Active - external
133  case EVEDB::invGroups::ECM_Burst: return (new ActiveModule(mRef, sRef)); // Active - external
134  case EVEDB::invGroups::Passive_Targeting_System: return (new ActiveModule(mRef, sRef)); // Active - external
135  case EVEDB::invGroups::Automated_Targeting_System: return (new ActiveModule(mRef, sRef)); // Active - external
136  case EVEDB::invGroups::ECM: return (new ActiveModule(mRef, sRef)); // Active - external
137  case EVEDB::invGroups::ECCM: return (new ActiveModule(mRef, sRef)); // Active - SELF
138  case EVEDB::invGroups::Sensor_Backup_Array: return (new PassiveModule(mRef, sRef));
139  case EVEDB::invGroups::Remote_Sensor_Damper: return (new ActiveModule(mRef, sRef)); // Active - external
140  case EVEDB::invGroups::Tracking_Link: return (new ActiveModule(mRef, sRef)); // Active - SELF
141  case EVEDB::invGroups::Signal_Amplifier: return (new PassiveModule(mRef, sRef));
142  case EVEDB::invGroups::Tracking_Enhancer: return (new PassiveModule(mRef, sRef));
143  case EVEDB::invGroups::Sensor_Booster: return (new ActiveModule(mRef, sRef)); // Active - SELF
144  case EVEDB::invGroups::Tracking_Computer: return (new ActiveModule(mRef, sRef)); // Active - SELF
145  case EVEDB::invGroups::CPU_Enhancer: return (new PassiveModule(mRef, sRef));
146  case EVEDB::invGroups::Projected_ECCM: return (new ActiveModule(mRef, sRef)); // Active - external
147  case EVEDB::invGroups::Remote_Sensor_Booster: return (new ActiveModule(mRef, sRef)); // Active - external
148  case EVEDB::invGroups::Tracking_Disruptor: return (new ActiveModule(mRef, sRef)); // Active - external
149  case EVEDB::invGroups::ECM_Stabilizer: return (new PassiveModule(mRef, sRef));
150  case EVEDB::invGroups::Remote_ECM_Burst: return (new ActiveModule(mRef, sRef)); // Active - external
151 
152  // Gang Assist Modules:
153  case EVEDB::invGroups::Gang_Coordinator: return (new ActiveModule(mRef, sRef)); // Active - external
154  case EVEDB::invGroups::Siege_Module: return (new ActiveModule(mRef, sRef)); // Active - external
155  case EVEDB::invGroups::Jump_Portal_Generator: return (new ActiveModule(mRef, sRef)); // Active - external
156  case EVEDB::invGroups::Cynosural_Field_Generator: return (new CynoModule(mRef, sRef));
157  case EVEDB::invGroups::Clone_Vat_Bay: return (new PassiveModule(mRef, sRef));
158 
159  // Mining Modules:
160  case EVEDB::invGroups::Mining_Laser: return (new MiningLaser(mRef, sRef)); // Active - external
161  case EVEDB::invGroups::Strip_Miner: return (new MiningLaser(mRef, sRef)); // Active - external
162  case EVEDB::invGroups::Frequency_Mining_Laser: return (new MiningLaser(mRef, sRef)); // Active - external
163  case EVEDB::invGroups::Mining_Upgrade: return (new PassiveModule(mRef, sRef));
164  case EVEDB::invGroups::Gas_Cloud_Harvester: return (new MiningLaser(mRef, sRef)); // Active - external
165 
166  // Propulsion Modules:
167  case EVEDB::invGroups::Afterburner: return (new ActiveModule(mRef, sRef)); // Active
168  case EVEDB::invGroups::Microwarpdrive: return (new ActiveModule(mRef, sRef)); // Active
169  case EVEDB::invGroups::Warp_Core_Stabilizer: return (new PassiveModule(mRef, sRef));
170  case EVEDB::invGroups::Inertial_Stabilizer: return (new PassiveModule(mRef, sRef));
171  case EVEDB::invGroups::Nanofiber_Internal_Structure: return (new PassiveModule(mRef, sRef));
172  case EVEDB::invGroups::Overdrive_Injector_System: return (new PassiveModule(mRef, sRef));
173 
174  // Rigs
175  case EVEDB::invGroups::Rig_Armor: return (new RigModule(mRef, sRef));
176  case EVEDB::invGroups::Rig_Shield: return (new RigModule(mRef, sRef));
177  case EVEDB::invGroups::Rig_Energy_Weapon: return (new RigModule(mRef, sRef));
178  case EVEDB::invGroups::Rig_Hybrid_Weapon: return (new RigModule(mRef, sRef));
179  case EVEDB::invGroups::Rig_Projectile_Weapon: return (new RigModule(mRef, sRef));
180  case EVEDB::invGroups::Rig_Drones: return (new RigModule(mRef, sRef));
181  case EVEDB::invGroups::Rig_Launcher: return (new RigModule(mRef, sRef));
182  case EVEDB::invGroups::Rig_Electronics: return (new RigModule(mRef, sRef));
183  case EVEDB::invGroups::Rig_Energy_Grid: return (new RigModule(mRef, sRef));
184  case EVEDB::invGroups::Rig_Astronautic: return (new RigModule(mRef, sRef));
185  case EVEDB::invGroups::Rig_Electronics_Superiority: return (new RigModule(mRef, sRef));
186  case EVEDB::invGroups::Rig_Mining: return (new RigModule(mRef, sRef));
187  case EVEDB::invGroups::Rig_Security_Transponder: return (new RigModule(mRef, sRef));
188 
189  // SubSystems
190  case EVEDB::invGroups::Defensive_Systems: return (new SubSystemModule(mRef, sRef));
191  case EVEDB::invGroups::Electronic_Systems: return (new SubSystemModule(mRef, sRef));
192  case EVEDB::invGroups::Offensive_Systems: return (new SubSystemModule(mRef, sRef));
193  case EVEDB::invGroups::Propulsion_Systems: return (new SubSystemModule(mRef, sRef));
194  case EVEDB::invGroups::Engineering_Systems: return (new SubSystemModule(mRef, sRef));
195 
196  // may need specific code for these gm modules
197  //case EVEDB::invGroups::GM_Modules:
198  case EVEDB::invGroups::Cheat_Module_Group: return (new ActiveModule(mRef, sRef));
199 
200  // Uncategorized and Unknown Modules Groups (some of these groups contain NO REAL typeIDs in the 'invTypes' table:
225  }
226  }
227 
228  _log(MODULE__ERROR, "ModuleFactory - Module Group not found for %s - groupID: %u, typeID: %u", mRef->name(), mRef->groupID(), mRef->typeID());
229  return nullptr;
230 }
231 
232 #endif /* __MODULEFACTORY_H__ */
#define _log(type, fmt,...)
Definition: logsys.h:124
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
static GenericModule * ModuleFactory(ModuleItemRef mRef, ShipItemRef sRef)
Definition: ModuleFactory.h:41
Reference-counting-based smart pointer.
Definition: RefPtr.h:133