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"
39 #include <QRegularExpression>
41 EnginePlugin::Data::Data()
44 allowsConnectPassword =
false;
45 allowsClientSlots =
true;
46 allowsPlayerSlots =
true;
48 allowsJoinPassword =
false;
50 allowsRConPassword =
false;
53 allowsUpnpPort =
false;
54 allowsLogging =
false;
58 defaultServerPort = 10666;
59 demoExtensionAutomatic =
true;
60 demoExtension =
"lmp";
64 inGameFileDownloads =
false;
65 masterClient =
nullptr;
68 supportsRandomMapRotation =
false;
76 EnginePlugin::EnginePlugin()
85 d->abiVersion = DOOMSEEKER_ABI_VERSION;
88 EnginePlugin::~EnginePlugin()
102 return QList<DMFlagsSection>();
117 return QList<GameMode>();
122 return QList<GameCVar>();
128 d->
icon =
new QPixmap(icon);
129 d->scheme = QString(d->name).replace(
' ',
"");
135 while ((feature = va_arg(va,
int)) !=
EP_Done)
141 gLog << QString(
"%1 plugin attempted to use unknown feature.").arg(name);
146 d->author = va_arg(va,
const char *);
149 d->version = va_arg(va,
unsigned int);
156 d->allowsConnectPassword =
true;
159 d->allowsEmail =
true;
165 d->allowsJoinPassword =
true;
168 d->allowsLogging =
true;
171 d->allowsRConPassword =
true;
174 d->allowsMOTD =
true;
177 d->allowsUpnp =
true;
180 d->allowsUpnpPort =
true;
186 d->canonicalName = va_arg(va,
const char *);
189 d->clientOnly =
true;
195 d->defaultServerPort = va_arg(va,
unsigned int);
198 d->demoExtensionAutomatic = va_arg(va,
unsigned int);
199 d->demoExtension = va_arg(va,
const char *);
208 d->inGameFileDownloads =
true;
214 entity.setDescription(va_arg(va,
const char *));
215 entity.setAddress(va_arg(va,
const char *));
218 if (d->ircChannels.contains(entity))
220 IRCNetworkEntity &existingEntity = d->ircChannels[d->ircChannels.indexOf(entity)];
224 d->ircChannels << entity;
231 d->allowsClientSlots =
false;
234 d->allowsPlayerSlots =
false;
240 d->hasMapList =
false;
243 d->supportsRandomMapRotation =
true;
246 d->scheme = va_arg(va,
const char *);
249 d->refreshThreshold = va_arg(va,
unsigned int);
252 d->clientExeName = va_arg(va,
const char *);
255 d->serverExeName = va_arg(va,
const char *);
259 QString suffixes = va_arg(va,
const char *);
260 d->gameFileSearchSuffixes = suffixes.split(
";", Qt::SkipEmptyParts);
271 QString str = d->pConfig->
setting(
"Masterserver");
277 if (!d->canonicalName.isEmpty())
279 return d->canonicalName;
284 QString name = data()->name;
285 name = name.toLower();
286 name = name.replace(QRegularExpression(
"\\s"),
"_");
294 if (server !=
nullptr)
295 server->setSelf(server.toWeakRef());
314 void EnginePlugin::setGameExeFactory(QSharedPointer<GameExeFactory> factory)
319 void EnginePlugin::findGameFiles(
IniSection &ini)
321 for (
const GameFile &file : gameExe()->gameFiles().asQList())
325 QString path = PathFind::findGameFile(collectKnownPaths(ini), file);
331 QStringList EnginePlugin::collectKnownPaths(
const IniSection &ini)
const
334 for (
const GameFile &file : data()->gameExeFactory->gameFiles().asQList())