47 , mLuaInterpreter(this, id)
48 , commandLineMinimumHeight(30)
49 , mAlertOnNewData(true)
50 , mAllowToSendCommand(true)
51 , mAutoClearCommandLineAfterSend(
false)
52 , mBlockScriptCompile(true)
53 , mEchoLuaErrors(
false)
54 , mBorderBottomHeight(0)
56 , mBorderRightWidth(0)
58 , mCommandLineFont(QFont(
"Bitstream Vera Sans Mono", 10, QFont::Normal))
59 , mCommandSeparator(QLatin1String(
";"))
60 , mDisplayFont(QFont(
"Bitstream Vera Sans Mono", 10, QFont::Normal))
63 , mFORCE_GA_OFF(
false)
64 , mFORCE_NO_COMPRESSION(
false)
65 , mFORCE_SAVE_ON_EXIT(
false)
66 , mInsertedMissingLF(
false)
68 , mIsProfileLoadingSequence(
false)
71 , mpEditorDialog(nullptr)
72 , mpMap(new
TMap(this))
75 , mIsCurrentLogFileInHtmlFormat(
false)
76 , mIsNextLogFileInHtmlFormat(
false)
77 , mIsLoggingTimestamps(
false)
80 , mLogFileNameFormat(QLatin1String(
"yyyy-MM-dd#HH-mm-ss"))
81 , mResetProfile(
false)
85 , mUSE_FORCE_LF_AFTER_PROMPT(
false)
86 , mUSE_IRE_DRIVER_BUGFIX(true)
87 , mUSE_UNIX_EOL(
false)
90 , mEditorTheme(QLatin1String(
"Mudlet"))
91 , mEditorThemeFile(QLatin1String(
"Mudlet.tmTheme"))
92 , mThemePreviewItemID(-1)
95 , mLightBlack(Qt::darkGray)
98 , mLightGreen(Qt::green)
99 , mGreen(Qt::darkGreen)
100 , mLightBlue(Qt::blue)
101 , mBlue(Qt::darkBlue)
102 , mLightYellow(Qt::yellow)
103 , mYellow(Qt::darkYellow)
104 , mLightCyan(Qt::cyan)
105 , mCyan(Qt::darkCyan)
106 , mLightMagenta(Qt::magenta)
107 , mMagenta(Qt::darkMagenta)
108 , mLightWhite(Qt::white)
109 , mWhite(Qt::lightGray)
110 , mFgColor(Qt::lightGray)
111 , mBgColor(Qt::black)
112 , mCommandBgColor(Qt::black)
113 , mCommandFgColor(QColor(113, 113, 0))
114 , mBlack_2(Qt::black)
115 , mLightBlack_2(Qt::darkGray)
116 , mRed_2(Qt::darkRed)
117 , mLightRed_2(Qt::red)
118 , mLightGreen_2(Qt::green)
119 , mGreen_2(Qt::darkGreen)
120 , mLightBlue_2(Qt::blue)
121 , mBlue_2(Qt::darkBlue)
122 , mLightYellow_2(Qt::yellow)
123 , mYellow_2(Qt::darkYellow)
124 , mLightCyan_2(Qt::cyan)
125 , mCyan_2(Qt::darkCyan)
126 , mLightMagenta_2(Qt::magenta)
127 , mMagenta_2(Qt::darkMagenta)
128 , mLightWhite_2(Qt::white)
129 , mWhite_2(Qt::lightGray)
130 , mFgColor_2(Qt::lightGray)
131 , mBgColor_2(Qt::black)
132 , mMapStrongHighlight(
false)
133 , mSpellDic(QLatin1String(
"en_US"))
135 , mEnableSpellCheck(true)
136 , mDiscordDisableServerSide(true)
137 , mDiscordAccessFlags(DiscordLuaAccessEnabled | DiscordSetSubMask)
144 , mServerGUI_Package_version(-1)
145 , mServerGUI_Package_name(QLatin1String(
"nothing"))
146 , mAcceptServerGUI(true)
147 , mCommandLineFgColor(Qt::darkGray)
148 , mCommandLineBgColor(Qt::black)
149 , mMapperUseAntiAlias(true)
150 , mFORCE_MXP_NEGOTIATION_OFF(
false)
151 , mpDockableMapWidget()
152 , mTimerDebugOutputSuppressionInterval(QTime())
159 , mCodeCompletion(true)
160 , mDisableAutoCompletion(
false)
162 , mHostName(hostname)
163 , mIsClosingDown(
false)
168 , mSaveProfileOnExit(
false)
169 , mHaveMapperScript(
false)
170 , mAutoAmbigousWidthGlyphsSetting(true)
171 , mWideAmbigousWidthGlyphs(
false)
176 QString logFileName = QStringLiteral(
"%1/errors.txt").arg(directoryLogFile);
178 if (!dirLogFile.exists(directoryLogFile)) {
179 dirLogFile.mkpath(directoryLogFile);
187 QTimer::singleShot(0,
this, [
this]() {
188 qDebug() <<
"Host::Host() - restore map case 4 {QTimer::singleShot(0)} lambda.";
191 if (
mpMap->mpMapper) {
192 mpMap->mpMapper->mp2dMap->init();
193 mpMap->mpMapper->updateAreaComboBox();
194 mpMap->mpMapper->resetAreaComboBoxToPlayerRoomArea();
195 mpMap->mpMapper->show();
207 {
"Bing",
"https://www.bing.com/search?q="},
208 {
"DuckDuckGo",
"https://duckduckgo.com/?q="},
209 {
"Google",
"https://www.google.com/search?q="}
213 if (!optin.isEmpty()) {
235 auto savePathDir = QDir(savePath);
236 if (!savePathDir.exists()) {
237 savePathDir.mkpath(savePath);
239 while (it.hasNext()) {
241 QStringList entry = it.value();
243 QString filename_xml = entry[0];
247 QString time = QDateTime::currentDateTime().toString(
"dd-MM-yyyy#hh-mm-ss");
248 savePathDir.rename(filename_xml, savePath + moduleName + time);
252 writers.insert(filename_xml, writer);
253 writer->writeModuleXML(moduleName, filename_xml);
255 if (entry[1].toInt()) {
273 QMapIterator<Host*, TConsole*> sessionIterator(activeSessions);
274 while (sessionIterator.hasNext()) {
275 sessionIterator.next();
276 Host* otherHost = sessionIterator.key();
281 QMap<int, QStringList> moduleOrder;
283 auto modulePrioritiesIt = modulePri.constBegin();
284 while (modulePrioritiesIt != modulePri.constEnd()) {
285 moduleOrder[modulePrioritiesIt.value()].append(modulePrioritiesIt.key());
286 ++modulePrioritiesIt;
289 QMapIterator<int, QStringList> it(moduleOrder);
290 while (it.hasNext()) {
293 for (
int i = 0, total = moduleList.size(); i < total; ++i) {
294 QString moduleName = moduleList[i];
310 while (it.hasNext()) {
312 QStringList entry = it.value();
314 QString filename_xml = entry[0];
317 zip* zipFile =
nullptr;
318 if (filename_xml.endsWith(QStringLiteral(
"mpackage"), Qt::CaseInsensitive) || filename_xml.endsWith(QStringLiteral(
"zip"), Qt::CaseInsensitive)) {
322 zipFile =
zip_open(entry[0].toStdString().c_str(), ZIP_CREATE, &err);
323 zipName = filename_xml;
324 QDir packageDir = QDir(packagePathName);
325 if (!packageDir.exists()) {
326 packageDir.mkpath(packagePathName);
329 struct zip_source* s = zip_source_file(zipFile, filename_xml.toStdString().c_str(), 0, 0);
330 err = zip_add(zipFile,
QString(moduleName +
".xml").toStdString().c_str(), s);
344 QMapIterator<QString, QStringList> moduleIterator(installedModules);
345 while (moduleIterator.hasNext()) {
346 moduleIterator.next();
347 const auto& moduleName = moduleIterator.key();
348 const auto& moduleLocation = moduleIterator.value()[0];
350 if (moduleName == reloadModuleName) {
357 moduleIterator.toFront();
358 while (moduleIterator.hasNext()) {
359 moduleIterator.next();
360 QStringList entry = installedModules[moduleIterator.key()];
400 qDebug() <<
"resetProfile() DONE";
410 qApp->processEvents();
413 if (saveFolder.isEmpty()) {
416 directory_xml = saveFolder;
421 if (saveName.isEmpty()) {
422 filename_xml = QStringLiteral(
"%1/%2.xml").arg(directory_xml, QDateTime::currentDateTime().toString(QStringLiteral(
"dd-MM-yyyy#hh-mm-ss")));
424 filename_xml = QStringLiteral(
"%1/%2.xml").arg(directory_xml, saveName);
428 if (!dir_xml.exists(directory_xml)) {
429 dir_xml.mkpath(directory_xml);
433 return std::make_tuple(
false,
QString(), QStringLiteral(
"a save is already in progress"));
437 writers.insert(QStringLiteral(
"profile"), writer);
438 writer->exportHost(filename_xml);
439 saveModules(syncModules ? 1 : 0, saveName == QStringLiteral(
"autosave") ?
false :
true);
440 return std::make_tuple(
true, filename_xml,
QString());
447 qApp->processEvents();
450 return std::make_tuple(
false,
QString(), QStringLiteral(
"a save is already in progress"));
454 writers.insert(QStringLiteral(
"profile"), writer);
455 writer->exportProfile(file);
456 return std::make_tuple(
true, file,
QString());
461 qDebug() <<
"saved" << xmlName;
462 if (
writers.contains(xmlName)) {
463 auto writer =
writers.take(xmlName);
480 for (
auto& future: writer->saveFutures) {
481 future.waitForFinished();
488 auto document = QJsonDocument::fromJson(data.toUtf8());
489 if (!document.isObject()) {
492 auto json = document.object();
493 if (json.isEmpty()) {
497 auto urlValue = json.value(QStringLiteral(
"url"));
498 if (urlValue == QJsonValue::Undefined) {
501 auto url = QUrl(urlValue.toString());
502 if (!url.isValid()) {
506 mpMap->setMmpMapLocation(urlValue.toString());
511 return mpMap->getMmpMapLocation();
517 unsigned int totalWeight = 0;
518 QStringList pathList;
519 for (
int i :
mpMap->mPathList) {
520 QString n = QString::number(i);
523 QStringList directionList =
mpMap->mDirList;
524 QStringList weightList;
525 for (
int stepWeight :
mpMap->mWeightList) {
526 totalWeight += stepWeight;
527 QString n = QString::number(stepWeight);
528 weightList.append(n);
530 QString tableName = QStringLiteral(
"speedWalkPath");
532 tableName = QStringLiteral(
"speedWalkDir");
534 tableName = QStringLiteral(
"speedWalkWeight");
552 Q_UNUSED(totalWeight);
553 QString f = QStringLiteral(
"doSpeedWalk");
584 return qMakePair(QStringLiteral(
"Google"),
mSearchEngineData.value(QStringLiteral(
"Google")));
600 QStringList commandList;
608 if (!dontExpandAliases) {
610 if (commandList.empty()) {
611 QString payload(QChar::LineFeed);
617 for (
int i = 0, total = commandList.size(); i < total; ++i) {
618 if (commandList.at(i).isEmpty()) {
621 QString command = commandList.at(i);
622 command.remove(QChar::LineFeed);
623 if (dontExpandAliases) {
644 return static_cast<double>(
mStopWatchMap[watchID].elapsed()) / 1000;
663 return static_cast<double>(
mStopWatchMap[watchID].elapsed()) / 1000;
696 QList<TScript*> scriptList;
697 scriptList.append(pScript);
729 for (
auto& script : scriptList) {
730 script->callEventHandler(pE);
736 for (
int i = 0, total = functionsList.size(); i < total; ++i) {
746 event.mArgumentList << a << b << c;
800 QMutexLocker locker(&
mLock);
806 QMutexLocker locker(&
mLock);
815 QDialog* pUnzipDialog = Q_NULLPTR;
824 if (fileName.isEmpty()) {
828 QFile file(fileName);
829 if (!file.open(QFile::ReadOnly | QFile::Text)) {
833 QString packageName = fileName.section(QStringLiteral(
"/"), -1);
834 packageName.remove(QStringLiteral(
".trigger"), Qt::CaseInsensitive);
835 packageName.remove(QStringLiteral(
".xml"), Qt::CaseInsensitive);
836 packageName.remove(QStringLiteral(
".zip"), Qt::CaseInsensitive);
837 packageName.remove(QStringLiteral(
".mpackage"), Qt::CaseInsensitive);
838 packageName.remove(QLatin1Char(
'\\'));
839 packageName.remove(QLatin1Char(
'.'));
843 }
else if ((module == 3) && (
mActiveModules.contains(packageName))) {
856 if (fileName.endsWith(QStringLiteral(
".zip"), Qt::CaseInsensitive) || fileName.endsWith(QStringLiteral(
".mpackage"), Qt::CaseInsensitive)) {
862 _tmpDir.mkpath(_dest);
866 QUiLoader loader(
this);
867 QFile uiFile(QStringLiteral(
":/ui/package_manager_unpack.ui"));
868 uiFile.open(QFile::ReadOnly);
869 pUnzipDialog =
dynamic_cast<QDialog*
>(loader.load(&uiFile,
nullptr));
875 auto * pLabel = pUnzipDialog->findChild<
QLabel*>(QStringLiteral(
"label"));
878 pLabel->setText(tr(
"Unpacking module:\n\"%1\"\nplease wait...").arg(packageName));
880 pLabel->setText(tr(
"Unpacking package:\n\"%1\"\nplease wait...").arg(packageName));
883 pUnzipDialog->hide();
884 pUnzipDialog->setWindowTitle(tr(
"Unpacking"));
885 pUnzipDialog->setWindowModality(Qt::ApplicationModal);
886 pUnzipDialog->show();
887 qApp->processEvents();
888 pUnzipDialog->raise();
889 pUnzipDialog->repaint();
890 qApp->processEvents();
893 pUnzipDialog->deleteLater();
894 pUnzipDialog = Q_NULLPTR;
908 if (_dir.exists(QStringLiteral(
"config.lua"))) {
910 readPackageConfig(_dir.absoluteFilePath(QStringLiteral(
"config.lua")), packageName);
919 removeDir(_dir.absolutePath(), _dir.absolutePath());
924 QString newpath(QStringLiteral(
"%1/%2/").arg(_home, packageName));
925 _dir.rename(_dir.absolutePath(), newpath);
926 _dir = QDir(newpath);
928 QStringList _filterList;
929 _filterList << QStringLiteral(
"*.xml") << QStringLiteral(
"*.trigger");
930 QFileInfoList entries = _dir.entryInfoList(_filterList, QDir::Files);
931 for (
auto& entry : entries) {
932 file2.setFileName(entry.absoluteFilePath());
933 file2.open(QFile::ReadOnly | QFile::Text);
939 QStringList moduleEntry;
940 moduleEntry << fileName;
941 moduleEntry << QStringLiteral(
"0");
954 file2.setFileName(fileName);
955 file2.open(QFile::ReadOnly | QFile::Text);
962 QStringList moduleEntry;
963 moduleEntry << fileName;
964 moduleEntry << QStringLiteral(
"0");
993 TEvent genericInstallEvent;
994 genericInstallEvent.
mArgumentList.append(QLatin1String(
"sysInstall"));
1000 TEvent detailedInstallEvent;
1003 detailedInstallEvent.
mArgumentList.append(QLatin1String(
"sysInstallPackage"));
1006 detailedInstallEvent.
mArgumentList.append(QLatin1String(
"sysInstallModule"));
1009 detailedInstallEvent.
mArgumentList.append(QLatin1String(
"sysSyncInstallModule"));
1012 detailedInstallEvent.
mArgumentList.append(QLatin1String(
"sysLuaInstallModule"));
1032 if (dir.exists(dirName)) {
1033 Q_FOREACH (QFileInfo info, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {
1035 if (info.isDir() && info.absoluteFilePath().startsWith(originalPath)) {
1036 result =
removeDir(info.absoluteFilePath(), originalPath);
1038 result = QFile::remove(info.absoluteFilePath());
1045 result = dir.rmdir(dirName);
1073 TEvent genericUninstallEvent;
1074 genericUninstallEvent.
mArgumentList.append(QLatin1String(
"sysUninstall"));
1080 TEvent detailedUninstallEvent;
1083 detailedUninstallEvent.
mArgumentList.append(QLatin1String(
"sysUninstallPackage"));
1086 detailedUninstallEvent.
mArgumentList.append(QLatin1String(
"sysUninstallModule"));
1089 detailedUninstallEvent.
mArgumentList.append(QLatin1String(
"sysSyncUninstallModule"));
1092 detailedUninstallEvent.
mArgumentList.append(QLatin1String(
"sysLuaUninstallModule"));
1102 int dualInstallations = 0;
1104 dualInstallations = 1;
1127 if (dualInstallations) {
1135 if (dualInstallations) {
1160 QFile configFile(luaConfig);
1161 QStringList strings;
1162 if (configFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
1163 QTextStream in(&configFile);
1164 while (!in.atEnd()) {
1165 strings += in.readLine();
1169 lua_State* L = luaL_newstate();
1172 int error = luaL_loadstring(L, strings.join(
"\n").toUtf8().constData());
1175 error = lua_pcall(L, 0, 0, 0);
1181 lua_getglobal(L,
"mpackage");
1182 if (lua_isstring(L, -1)) {
1183 packageName =
QString(lua_tostring(L, -1));
1190 std::string e =
"no error message available from Lua";
1191 e = lua_tostring(L, -1);
1195 reason =
"Out of memory";
1198 reason =
"Syntax error";
1201 reason =
"Runtime error";
1204 reason =
"Yield error";
1207 reason =
"Unknown error";
1212 qDebug() << reason.c_str() <<
" in config.lua:" << e.c_str();
1215 QString msg =
QString(
"%1 in config.lua: %2\n").arg(reason.c_str(), e.c_str());
1229 if (file.open(QIODevice::WriteOnly | QIODevice::Unbuffered)) {
1230 QDataStream ofs(&file);
1235 if (file.error() == QFile::NoError) {
1236 return qMakePair(
true,
QString());
1238 return qMakePair(
false, file.errorString());
1246 bool success = file.open(QIODevice::ReadOnly);
1249 QDataStream ifs(&file);
1263 QDirIterator it(packagePath, QDirIterator::Subdirectories);
1264 while (it.hasNext()) {
1265 auto filePath = it.next();
1267 if (filePath.endsWith(QLatin1String(
".otf"), Qt::CaseInsensitive) || filePath.endsWith(QLatin1String(
".ttf"), Qt::CaseInsensitive) ||
1268 filePath.endsWith(QLatin1String(
".ttc"), Qt::CaseInsensitive) || filePath.endsWith(QLatin1String(
".otc"), Qt::CaseInsensitive)) {
1285 bool localState =
false;
1286 bool needToEmit =
false;
1289 QMutexLocker locker(&
mLock);
1290 if (state == Qt::PartiallyChecked) {
1294 if ( encoding == QLatin1String(
"GBK")
1295 || encoding == QLatin1String(
"GB18030")
1296 || encoding == QLatin1String(
"Big5")) {
1324 localState = (state == Qt::Checked);
1346 auto document = QJsonDocument::fromJson(data.toUtf8());
1347 if (!document.isObject()) {
1351 auto json = document.object();
1352 if (json.isEmpty()) {
1356 if (packageMessage == QLatin1String(
"External.Discord.Status")) {
1358 }
else if (packageMessage == QLatin1String(
"External.Discord.Info")) {
1366 bool hasInvite =
false;
1367 auto inviteUrl = discordInfo.value(QStringLiteral(
"inviteurl"));
1369 if (inviteUrl != QJsonValue::Undefined) {
1373 bool hasApplicationId =
false;
1374 bool hasCustomAppID =
false;
1375 auto appID = discordInfo.value(QStringLiteral(
"applicationid"));
1376 if (appID != QJsonValue::Undefined) {
1377 hasApplicationId =
true;
1381 hasCustomAppID =
true;
1385 if (image.isEmpty() || image == QLatin1String(
"mudlet")) {
1392 if (hasCustomAppID) {
1393 qDebug() <<
"Game using a custom Discord server. Invite URL: " << inviteUrl.toString();
1394 }
else if (hasApplicationId) {
1395 qDebug() <<
"Game using Mudlets Discord server. Invite URL: " << inviteUrl.toString();
1397 qDebug() <<
"Discord invite URL: " << inviteUrl.toString();
1400 if (hasCustomAppID) {
1401 qDebug() <<
"Game is using custom server Discord application ID";
1402 }
else if (hasApplicationId) {
1403 qDebug() <<
"Game is using Mudlets Discord application ID";
1411 auto gameName = discordInfo.value(QStringLiteral(
"game"));
1412 if (gameName != QJsonValue::Undefined) {
1413 QPair<bool, QString> richPresenceSupported = pMudlet->mDiscord.gameIntegrationSupported(
getUrl());
1414 if (richPresenceSupported.first && pMudlet->mDiscord.usingMudletsDiscordID(
this)) {
1415 pMudlet->mDiscord.setDetailText(
this, tr(
"Playing %1").arg(richPresenceSupported.second));
1416 pMudlet->mDiscord.setLargeImage(
this, richPresenceSupported.second);
1417 pMudlet->mDiscord.setLargeImageText(
this, tr(
"%1 at %2:%3",
"%1 is the game name and %2:%3 is game server address like: mudlet.org:23").arg(gameName.toString(),
getUrl(), QString::number(
getPort())));
1421 if (richPresenceSupported.first) {
1422 pMudlet->mDiscord.setDetailText(
this,
QString());
1423 pMudlet->mDiscord.setLargeImageText(
this, tr(
"%1 at %2:%3",
"%1 is the game name and %2:%3 is game server address like: mudlet.org:23").arg(gameName.toString(),
getUrl(), QString::number(
getPort())));
1424 pMudlet->mDiscord.setLargeImage(
this, QStringLiteral(
"server-icon"));
1429 auto details = discordInfo.value(QStringLiteral(
"details"));
1430 if (details != QJsonValue::Undefined) {
1431 pMudlet->mDiscord.setDetailText(
this, details.toString());
1434 auto state = discordInfo.value(QStringLiteral(
"state"));
1435 if (state != QJsonValue::Undefined) {
1436 pMudlet->mDiscord.setStateText(
this, state.toString());
1439 auto largeImages = discordInfo.value(QStringLiteral(
"largeimage"));
1440 if (largeImages != QJsonValue::Undefined) {
1441 auto largeImage = largeImages.toArray().first();
1442 if (largeImage != QJsonValue::Undefined) {
1443 pMudlet->mDiscord.setSmallImage(
this, largeImage.toString());
1447 auto largeImageText = discordInfo.value(QStringLiteral(
"largeimagetext"));
1448 if (largeImageText != QJsonValue::Undefined) {
1449 pMudlet->mDiscord.setSmallImageText(
this, largeImageText.toString());
1452 auto smallImages = discordInfo.value(QStringLiteral(
"smallimage"));
1453 if (smallImages != QJsonValue::Undefined) {
1454 auto smallImage = smallImages.toArray().first();
1455 if (smallImage != QJsonValue::Undefined) {
1456 pMudlet->mDiscord.setSmallImage(
this, smallImage.toString());
1460 auto smallImageText = discordInfo.value(QStringLiteral(
"smallimagetext"));
1461 if ((smallImageText != QJsonValue::Undefined)) {
1462 pMudlet->mDiscord.setSmallImageText(
this, smallImageText.toString());
1467 int64_t timeStamp = -1;
1468 auto endTimeStamp = discordInfo.value(QStringLiteral(
"endtime"));
1469 if (endTimeStamp.isDouble()) {
1477 timeStamp =
static_cast<int64_t
>(endTimeStamp.toDouble());
1478 pMudlet->mDiscord.setEndTimeStamp(
this, timeStamp);
1479 }
else if (endTimeStamp.isString()) {
1480 timeStamp = endTimeStamp.toString().toLongLong();
1481 pMudlet->mDiscord.setEndTimeStamp(
this, timeStamp);
1483 auto startTimeStamp = discordInfo.value(QStringLiteral(
"starttime"));
1484 if (startTimeStamp.isDouble()) {
1485 timeStamp =
static_cast<int64_t
>(startTimeStamp.toDouble());
1486 pMudlet->mDiscord.setStartTimeStamp(
this, timeStamp);
1487 }
else if (endTimeStamp.isString()) {
1488 timeStamp = endTimeStamp.toString().toLongLong();
1489 pMudlet->mDiscord.setStartTimeStamp(
this, timeStamp);
1495 int partySizeValue = -1;
1496 int partyMaxValue = -1;
1497 auto partyMax = discordInfo.value(QStringLiteral(
"partymax"));
1498 auto partySize = discordInfo.value(QStringLiteral(
"partysize"));
1499 if (partyMax.isDouble()) {
1500 partyMaxValue =
static_cast<int>(partyMax.toDouble());
1501 if (partyMaxValue > 0 && partySize.isDouble()) {
1502 partySizeValue =
static_cast<int>(partySize.toDouble());
1503 pMudlet->mDiscord.setParty(
this, partySizeValue, partyMaxValue);
1506 pMudlet->mDiscord.setParty(
this, 0, 0);
1509 if (partySize.isDouble()) {
1510 partySizeValue =
static_cast<int>(partySize.toDouble());
1511 pMudlet->mDiscord.setParty(
this, partySizeValue);
1513 pMudlet->mDiscord.setParty(
this, 0, 0);
1564 QMutexLocker locker(&
mLock);
1573 QMutexLocker locker(&
mLock);
Host(int port, const QString &mHostName, const QString &login, const QString &pass, int host_id)
QTextStream mErrorLogStream
void setDetailText(Host *, const QString &)
QHash< QString, XMLexport * > writers
void disableKey(const QString &)
ActionUnit * getActionUnit()
const QString & getEncoding() const
QString mRequiredDiscordUserDiscriminator
bool killTimer(const QString &)
QMap< QString, QStringList > modulesToWrite
dlgTriggerEditor * mpEditorDialog
QScopedPointer< LuaInterface > mLuaInterface
void setStateText(Host *, const QString &)
bool mUSE_IRE_DRIVER_BUGFIX
void incomingStreamProcessor(const QString ¶graph, int line)
QStringList mActiveModules
void registerEventHandler(const QString &, TScript *)
bool currentlySavingProfile()
void enableTimer(const QString &)
void processDiscordMSDP(const QString &variable, QString value)
void slot_reloadModules()
void setPass(const QString &s)
QString readProfileData(const QString &)
void reenableAllTriggers()
void send(QString cmd, bool wantPrint=true, bool dontExpandAliases=false)
QStringList mModulesToSync
bool sendData(QString &data)
double stopStopWatch(int)
void enableTrigger(const QString &)
void reenableAllTriggers()
bool call(const QString &function, const QString &mName, const bool muteDebugOutput=false)
QMap< QString, QStringList > mAnonymousEventHandlerFunctions
QList< int > mArgumentTypeList
void uninstall(const QString &)
QStringList mGMCP_merge_table_keys
void uninstall(const QString &)
const QString & getDiscordApplicationID()
#define ARGUMENT_TYPE_STRING
void reenableAllTriggers()
void setDisplayDimensions()
bool callEventHandler(const QString &function, const TEvent &pE, const QEvent *qE=nullptr)
void reenableAllTriggers()
QString mCommandSeparator
bool mWideAmbigousWidthGlyphs
static QString userName(const QString &name, const QStringList &prefixes)
bool uninstallPackage(const QString &, int)
QMap< QString, int > mModulePriorities
void setSmallImage(Host *, const QString &)
void processDataStream(const QString &, int)
ScriptUnit * getScriptUnit()
bool mDiscordDisableServerSide
QString getMmpMapLocation() const
void reloadModule(const QString &reloadModuleName)
void registerAnonymousEventHandler(const QString &name, const QString &fun)
AliasUnit * getAliasUnit()
static QString getMudletPath(mudletPathType, const QString &extra1=QString(), const QString &extra2=QString())
void setLargeImageText(Host *, const QString &)
static int zip_close(lua_State *L)
std::tuple< bool, QString, QString > saveProfile(const QString &saveLocation=QString(), const QString &saveName=QString(), bool syncModules=false)
QString getLargeImage(Host *pHost) const
void xmlSaved(const QString &xmlName)
void initIndenterGlobals()
TLuaInterpreter mLuaInterpreter
void installPackageFonts(const QString &packageName)
bool disableTrigger(const QString &)
QSet< QChar > mDoubleClickIgnore
static bool unzip(const QString &archivePath, const QString &destination, const QDir &tmpDir)
QMap< Host *, TConsole * > mConsoleMap
bool setApplicationID(Host *, const QString &)
bool killTrigger(const QString &name)
QMap< QString, QString > mSearchEngineData
void removeAllTempTimers()
void connectIt(const QString &address, int port)
bool installPackage(const QString &, int)
bool disableKey(const QString &name)
static const QString mMudletApplicationId
bool enableTrigger(const QString &)
void setSmallImageText(Host *, const QString &)
void raiseEvent(const TEvent &event)
bool mAutoAmbigousWidthGlyphsSetting
void setName(const QString &s)
void unregisterEventHandler(const QString &, TScript *)
void refreshPackageFonts()
void reorderTriggersAfterPackageImport()
QString mDiscordApplicationID
void enableKey(const QString &)
QMap< QString, QList< TScript * > > mEventHandlerMap
Q_DECLARE_TR_FUNCTIONS(XMLimport) public bool importPackage(QFile *, QString packageName=QString(), int moduleFlag=0, QString *pVersionString=Q_NULLPTR)
void profileSaveFinished()
void processGMCPDiscordInfo(const QJsonObject &discordInfo)
void signal_changeIsAmbigousWidthGlyphsToBeWide(bool)
bool killTrigger(const QString &)
const bool checkForMappingScript()
void saveModules(int sync, bool backup=true)
void setWideAmbiguousEAsianGlyphs(Qt::CheckState state)
std::tuple< bool, QString, QString > saveProfileAs(const QString &fileName)
int check_for_mappingscript()
const unsigned int assemblePath()
QScopedPointer< TMap > mpMap
bool disableTimer(const QString &)
void setStartTimeStamp(Host *, int64_t)
void set_lua_table(const QString &tableName, QStringList &variableList)
QMap< int, QTime > mStopWatchMap
bool removeDir(const QString &, const QString &)
void disableTimer(const QString &)
bool processDataStream(const QString &)
void postIrcMessage(const QString &, const QString &, const QString &)
double getStopWatchTime(int)
QStringList mInstalledPackages
void uninstall(const QString &)
void removeAllTempTriggers()
QPointer< TConsole > mpConsole
QMap< QTimer *, TTimer * > mTimerMap
QMap< QString, TEvent * > mEventMap
QStringList mArgumentList
void waitForProfileSave()
void processGMCPDiscordStatus(const QJsonObject &discordInfo)
void setLogin(const QString &s)
QPair< QString, QString > getSearchEngine()
bool killTimer(const QString &name)
void reenableAllTriggers()
QMap< QString, QStringList > mInstalledModules
void updateModuleZips() const
QPair< bool, QString > writeProfileData(const QString &, const QString &)
QString mSearchEngineName
QString mRequiredDiscordUserName
bool mUSE_FORCE_LF_AFTER_PROMPT
void setDiscordApplicationID(const QString &s)
TimerUnit * getTimerUnit()
void loadFont(const QString &filePath)
QPointer< QDockWidget > mpDockableMapWidget
TriggerUnit * getTriggerUnit()
bool enableKey(const QString &name)
void disableTrigger(const QString &)
bool enableTimer(const QString &)
void setLargeImage(Host *, const QString &)
bool discordUserIdMatch(const QString &userName, const QString &userDiscriminator) const
void profileSaveStarted()
void processDiscordGMCP(const QString &packageMessage, const QString &data)
static int zip_open(lua_State *L)
void readPackageConfig(const QString &, QString &)
void setParty(Host *, int)
void setMmpMapLocation(const QString &data)
void uninstall(const QString &)