24 #include "gui/configuration/engineconfigpage.h"
26 #include "irc/entities/ircnetworkentity.h"
28 #include "pathfinder/pathfind.h"
29 #include "plugins/enginedefaults.h"
30 #include "plugins/engineplugin.h"
31 #include "serverapi/gameexefactory.h"
32 #include "serverapi/gamefile.h"
33 #include "serverapi/gamehost.h"
34 #include "serverapi/server.h"
35 #include "strings.hpp"
40 EnginePlugin::Data::Data()
43 allowsConnectPassword =
false;
44 allowsClientSlots =
true;
45 allowsPlayerSlots =
true;
47 allowsJoinPassword =
false;
49 allowsRConPassword =
false;
52 allowsUpnpPort =
false;
53 allowsLogging =
false;
57 defaultServerPort = 10666;
58 demoExtensionAutomatic =
true;
59 demoExtension =
"lmp";
63 inGameFileDownloads =
false;
64 masterClient =
nullptr;
67 supportsRandomMapRotation =
false;
75 EnginePlugin::EnginePlugin()
84 d->abiVersion = DOOMSEEKER_ABI_VERSION;
87 EnginePlugin::~EnginePlugin()
101 return QList<DMFlagsSection>();
116 return QList<GameMode>();
121 return QList<GameCVar>();
127 d->
icon =
new QPixmap(icon);
128 d->scheme = QString(d->name).replace(
' ',
"");
134 while ((feature = va_arg(va,
int)) !=
EP_Done)
140 gLog << QString(
"%1 plugin attempted to use unknown feature.").arg(name);
145 d->author = va_arg(va,
const char *);
148 d->version = va_arg(va,
unsigned int);
155 d->allowsConnectPassword =
true;
158 d->allowsEmail =
true;
164 d->allowsJoinPassword =
true;
167 d->allowsLogging =
true;
170 d->allowsRConPassword =
true;
173 d->allowsMOTD =
true;
176 d->allowsUpnp =
true;
179 d->allowsUpnpPort =
true;
185 d->canonicalName = va_arg(va,
const char *);
188 d->clientOnly =
true;
194 d->defaultServerPort = va_arg(va,
unsigned int);
197 d->demoExtensionAutomatic = va_arg(va,
unsigned int);
198 d->demoExtension = va_arg(va,
const char *);
207 d->inGameFileDownloads =
true;
213 entity.setDescription(va_arg(va,
const char *));
214 entity.setAddress(va_arg(va,
const char *));
217 if (d->ircChannels.contains(entity))
219 IRCNetworkEntity &existingEntity = d->ircChannels[d->ircChannels.indexOf(entity)];
223 d->ircChannels << entity;
230 d->allowsClientSlots =
false;
233 d->allowsPlayerSlots =
false;
239 d->hasMapList =
false;
242 d->supportsRandomMapRotation =
true;
245 d->scheme = va_arg(va,
const char *);
248 d->refreshThreshold = va_arg(va,
unsigned int);
251 d->clientExeName = va_arg(va,
const char *);
254 d->serverExeName = va_arg(va,
const char *);
258 QString suffixes = va_arg(va,
const char *);
259 d->gameFileSearchSuffixes = suffixes.split(
";", QString::SkipEmptyParts);
270 QString str = d->pConfig->
setting(
"Masterserver");
276 if (!d->canonicalName.isEmpty())
278 return d->canonicalName;
283 QString name = data()->name;
284 name = name.toLower();
285 name = name.replace(QRegExp(
"\\s"),
"_");
293 if (server !=
nullptr)
294 server->setSelf(server.toWeakRef());
313 void EnginePlugin::setGameExeFactory(QSharedPointer<GameExeFactory> factory)
318 void EnginePlugin::findGameFiles(
IniSection &ini)
320 for (
const GameFile &file : gameExe()->gameFiles().asQList())
324 QString path = PathFind::findGameFile(collectKnownPaths(ini), file);
330 QStringList EnginePlugin::collectKnownPaths(
const IniSection &ini)
const
333 for (
const GameFile &file : data()->gameExeFactory->gameFiles().asQList())