mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Removed old in-launcher lobby
This commit is contained in:
parent
ffa58152ac
commit
c4db99a60d
@ -15,10 +15,6 @@ set(launcher_SRCS
|
||||
launcherdirs.cpp
|
||||
jsonutils.cpp
|
||||
updatedialog_moc.cpp
|
||||
lobby/lobby.cpp
|
||||
lobby/lobby_moc.cpp
|
||||
lobby/lobbyroomrequest_moc.cpp
|
||||
lobby/chat_moc.cpp
|
||||
)
|
||||
|
||||
set(launcher_HEADERS
|
||||
@ -37,10 +33,6 @@ set(launcher_HEADERS
|
||||
launcherdirs.h
|
||||
jsonutils.h
|
||||
updatedialog_moc.h
|
||||
lobby/lobby.h
|
||||
lobby/lobby_moc.h
|
||||
lobby/lobbyroomrequest_moc.h
|
||||
lobby/chat_moc.h
|
||||
main.h
|
||||
)
|
||||
|
||||
@ -52,9 +44,6 @@ set(launcher_FORMS
|
||||
firstLaunch/firstlaunch_moc.ui
|
||||
mainwindow_moc.ui
|
||||
updatedialog_moc.ui
|
||||
lobby/lobby_moc.ui
|
||||
lobby/lobbyroomrequest_moc.ui
|
||||
lobby/chat_moc.ui
|
||||
)
|
||||
|
||||
set(launcher_TS
|
||||
|
@ -1,173 +0,0 @@
|
||||
/*
|
||||
* chat_moc.cpp, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
#include "StdInc.h"
|
||||
#include "chat_moc.h"
|
||||
#include "ui_chat_moc.h"
|
||||
|
||||
Chat::Chat(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::Chat)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
namesCompleter.setModel(ui->listUsers->model());
|
||||
namesCompleter.setCompletionMode(QCompleter::InlineCompletion);
|
||||
|
||||
ui->messageEdit->setCompleter(&namesCompleter);
|
||||
|
||||
for([[maybe_unused]] auto i : {GLOBAL, ROOM})
|
||||
chatDocuments.push_back(new QTextDocument(this));
|
||||
|
||||
setChatId(GLOBAL);
|
||||
}
|
||||
|
||||
Chat::~Chat()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void Chat::setUsername(const QString & user)
|
||||
{
|
||||
username = user;
|
||||
}
|
||||
|
||||
void Chat::setSession(const QString & s)
|
||||
{
|
||||
session = s;
|
||||
|
||||
on_chatSwitch_clicked();
|
||||
}
|
||||
|
||||
void Chat::setChannel(const QString & channel)
|
||||
{
|
||||
static const QMap<QString, ChatId> chatNames{{"global", GLOBAL}, {"room", ROOM}};
|
||||
|
||||
setChatId(chatNames.value(channel));
|
||||
}
|
||||
|
||||
void Chat::addUser(const QString & user)
|
||||
{
|
||||
ui->listUsers->addItem(new QListWidgetItem("@" + user));
|
||||
}
|
||||
|
||||
void Chat::clearUsers()
|
||||
{
|
||||
ui->listUsers->clear();
|
||||
}
|
||||
|
||||
void Chat::chatMessage(const QString & title, const QString & channel, QString body, bool isSystem)
|
||||
{
|
||||
const QTextCharFormat regularFormat;
|
||||
const QString boldHtml = "<b>%1</b>";
|
||||
const QString colorHtml = "<font color=\"%1\">%2</font>";
|
||||
bool meMentioned = false;
|
||||
bool isScrollBarBottom = (ui->chat->verticalScrollBar()->maximum() - ui->chat->verticalScrollBar()->value() < 24);
|
||||
|
||||
static const QMap<QString, ChatId> chatNames{{"global", GLOBAL}, {"room", ROOM}};
|
||||
QTextDocument * doc = ui->chat->document();
|
||||
if(chatNames.contains(channel))
|
||||
doc = chatDocuments[chatNames.value(channel)];
|
||||
|
||||
QTextCursor curs(doc);
|
||||
curs.movePosition(QTextCursor::End);
|
||||
|
||||
QString titleColor = "Olive";
|
||||
if(isSystem || title == "System")
|
||||
titleColor = "ForestGreen";
|
||||
if(title == username)
|
||||
titleColor = "Gold";
|
||||
|
||||
curs.insertHtml(boldHtml.arg(colorHtml.arg(titleColor, title + ": ")));
|
||||
|
||||
QRegularExpression mentionRe("@[\\w\\d]+");
|
||||
auto subBody = body;
|
||||
int mem = 0;
|
||||
for(auto match = mentionRe.match(subBody); match.hasMatch(); match = mentionRe.match(subBody))
|
||||
{
|
||||
body.insert(mem + match.capturedEnd(), QChar(-1));
|
||||
body.insert(mem + match.capturedStart(), QChar(-1));
|
||||
mem += match.capturedEnd() + 2;
|
||||
subBody = body.right(body.size() - mem);
|
||||
}
|
||||
auto pieces = body.split(QChar(-1));
|
||||
for(auto & block : pieces)
|
||||
{
|
||||
if(block.startsWith("@"))
|
||||
{
|
||||
if(block == "@" + username)
|
||||
{
|
||||
meMentioned = true;
|
||||
curs.insertHtml(boldHtml.arg(colorHtml.arg("IndianRed", block)));
|
||||
}
|
||||
else
|
||||
curs.insertHtml(colorHtml.arg("DeepSkyBlue", block));
|
||||
}
|
||||
else
|
||||
{
|
||||
if(isSystem)
|
||||
curs.insertHtml(colorHtml.arg("ForestGreen", block));
|
||||
else
|
||||
curs.insertText(block, regularFormat);
|
||||
}
|
||||
}
|
||||
curs.insertText("\n", regularFormat);
|
||||
|
||||
if(doc == ui->chat->document() && (meMentioned || isScrollBarBottom))
|
||||
{
|
||||
ui->chat->ensureCursorVisible();
|
||||
ui->chat->verticalScrollBar()->setValue(ui->chat->verticalScrollBar()->maximum());
|
||||
}
|
||||
}
|
||||
|
||||
void Chat::chatMessage(const QString & title, QString body, bool isSystem)
|
||||
{
|
||||
chatMessage(title, "", body, isSystem);
|
||||
}
|
||||
|
||||
void Chat::sysMessage(QString body)
|
||||
{
|
||||
chatMessage("System", body, true);
|
||||
}
|
||||
|
||||
void Chat::sendMessage()
|
||||
{
|
||||
QString msg(ui->messageEdit->text());
|
||||
ui->messageEdit->clear();
|
||||
emit messageSent(msg);
|
||||
}
|
||||
|
||||
void Chat::on_messageEdit_returnPressed()
|
||||
{
|
||||
sendMessage();
|
||||
}
|
||||
|
||||
void Chat::on_sendButton_clicked()
|
||||
{
|
||||
sendMessage();
|
||||
}
|
||||
|
||||
void Chat::on_chatSwitch_clicked()
|
||||
{
|
||||
static const QMap<ChatId, QString> chatNames{{GLOBAL, "global"}, {ROOM, "room"}};
|
||||
|
||||
if(chatId == GLOBAL && !session.isEmpty())
|
||||
emit channelSwitch(chatNames[ROOM]);
|
||||
else
|
||||
emit channelSwitch(chatNames[GLOBAL]);
|
||||
}
|
||||
|
||||
void Chat::setChatId(ChatId _chatId)
|
||||
{
|
||||
static const QMap<ChatId, QString> chatNames{{GLOBAL, "Global"}, {ROOM, "Room"}};
|
||||
|
||||
chatId = _chatId;
|
||||
ui->chatSwitch->setText(chatNames[chatId] + " chat");
|
||||
ui->chat->setDocument(chatDocuments[chatId]);
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
/*
|
||||
* chat_moc.h, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <QWidget>
|
||||
#include <QCompleter>
|
||||
|
||||
namespace Ui {
|
||||
class Chat;
|
||||
}
|
||||
|
||||
class Chat : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
enum ChatId
|
||||
{
|
||||
GLOBAL = 0,
|
||||
ROOM
|
||||
};
|
||||
|
||||
QCompleter namesCompleter;
|
||||
QString username;
|
||||
QString session;
|
||||
ChatId chatId = GLOBAL;
|
||||
|
||||
QVector<QTextDocument*> chatDocuments;
|
||||
|
||||
private:
|
||||
void setChatId(ChatId);
|
||||
void sendMessage();
|
||||
|
||||
public:
|
||||
explicit Chat(QWidget *parent = nullptr);
|
||||
~Chat();
|
||||
|
||||
void setUsername(const QString &);
|
||||
void setSession(const QString &);
|
||||
void setChannel(const QString &);
|
||||
|
||||
void clearUsers();
|
||||
void addUser(const QString & user);
|
||||
|
||||
void chatMessage(const QString & title, const QString & channel, QString body, bool isSystem = false);
|
||||
void chatMessage(const QString & title, QString body, bool isSystem = false);
|
||||
|
||||
signals:
|
||||
void messageSent(QString);
|
||||
void channelSwitch(QString);
|
||||
|
||||
public slots:
|
||||
void sysMessage(QString body);
|
||||
|
||||
private slots:
|
||||
void on_messageEdit_returnPressed();
|
||||
|
||||
void on_sendButton_clicked();
|
||||
|
||||
void on_chatSwitch_clicked();
|
||||
|
||||
private:
|
||||
Ui::Chat *ui;
|
||||
};
|
@ -1,121 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Chat</class>
|
||||
<widget class="QWidget" name="Chat">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>465</width>
|
||||
<height>413</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout2">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Users in lobby</string>
|
||||
</property>
|
||||
<property name="indent">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="chatSwitch">
|
||||
<property name="text">
|
||||
<string>Global chat</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="listUsers">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>96</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="midLineWidth">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
<property name="isWrapping" stdset="0">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="layoutMode">
|
||||
<enum>QListView::SinglePass</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTextBrowser" name="chat"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="spacing">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="messageEdit">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>type you message</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="sendButton">
|
||||
<property name="text">
|
||||
<string>send</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -1,123 +0,0 @@
|
||||
/*
|
||||
* lobby.cpp, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
#include "StdInc.h"
|
||||
#include "lobby.h"
|
||||
#include "../lib/GameConstants.h"
|
||||
|
||||
SocketLobby::SocketLobby(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
socket = new QTcpSocket(this);
|
||||
connect(socket, SIGNAL(connected()), this, SLOT(connected()));
|
||||
connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
|
||||
connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
|
||||
connect(socket, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWritten(qint64)));
|
||||
}
|
||||
|
||||
void SocketLobby::connectServer(const QString & host, int port, const QString & usr, int timeout)
|
||||
{
|
||||
username = usr;
|
||||
|
||||
socket->connectToHost(host, port);
|
||||
|
||||
if(!socket->waitForDisconnected(timeout) && !isConnected)
|
||||
{
|
||||
emit text("Error: " + socket->errorString());
|
||||
emit disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
void SocketLobby::disconnectServer()
|
||||
{
|
||||
socket->disconnectFromHost();
|
||||
}
|
||||
|
||||
void SocketLobby::requestNewSession(const QString & session, int totalPlayers, const QString & pswd, const QMap<QString, QString> & mods)
|
||||
{
|
||||
const QString sessionMessage = ProtocolStrings[CREATE].arg(session, pswd, QString::number(totalPlayers), prepareModsClientString(mods));
|
||||
send(sessionMessage);
|
||||
}
|
||||
|
||||
void SocketLobby::requestJoinSession(const QString & session, const QString & pswd, const QMap<QString, QString> & mods)
|
||||
{
|
||||
const QString sessionMessage = ProtocolStrings[JOIN].arg(session, pswd, prepareModsClientString(mods));
|
||||
send(sessionMessage);
|
||||
}
|
||||
|
||||
void SocketLobby::requestLeaveSession(const QString & session)
|
||||
{
|
||||
const QString sessionMessage = ProtocolStrings[LEAVE].arg(session);
|
||||
send(sessionMessage);
|
||||
}
|
||||
|
||||
void SocketLobby::requestReadySession(const QString & session)
|
||||
{
|
||||
const QString sessionMessage = ProtocolStrings[READY].arg(session);
|
||||
send(sessionMessage);
|
||||
}
|
||||
|
||||
void SocketLobby::send(const QString & msg)
|
||||
{
|
||||
QByteArray str = msg.toUtf8();
|
||||
int sz = str.size();
|
||||
QByteArray pack((const char *)&sz, sizeof(sz));
|
||||
pack.append(str);
|
||||
socket->write(pack);
|
||||
}
|
||||
|
||||
void SocketLobby::connected()
|
||||
{
|
||||
isConnected = true;
|
||||
emit text("Connected!");
|
||||
|
||||
QByteArray greetingBytes;
|
||||
greetingBytes.append(ProtocolVersion);
|
||||
greetingBytes.append(ProtocolEncoding.size());
|
||||
const QString greetingConst = QString(greetingBytes)
|
||||
+ ProtocolStrings[GREETING].arg(QString::fromStdString(ProtocolEncoding),
|
||||
username,
|
||||
QString::fromStdString(GameConstants::VCMI_VERSION));
|
||||
send(greetingConst);
|
||||
}
|
||||
|
||||
void SocketLobby::disconnected()
|
||||
{
|
||||
isConnected = false;
|
||||
emit disconnect();
|
||||
emit text("Disconnected!");
|
||||
}
|
||||
|
||||
void SocketLobby::bytesWritten(qint64 bytes)
|
||||
{
|
||||
qDebug() << "We wrote: " << bytes;
|
||||
}
|
||||
|
||||
void SocketLobby::readyRead()
|
||||
{
|
||||
qDebug() << "Reading...";
|
||||
emit receive(socket->readAll());
|
||||
}
|
||||
|
||||
|
||||
ServerCommand::ServerCommand(ProtocolConsts cmd, const QStringList & args):
|
||||
command(cmd),
|
||||
arguments(args)
|
||||
{
|
||||
}
|
||||
|
||||
QString prepareModsClientString(const QMap<QString, QString> & mods)
|
||||
{
|
||||
QStringList result;
|
||||
for(auto & mod : mods.keys())
|
||||
{
|
||||
result << mod + "&" + mods[mod];
|
||||
}
|
||||
return result.join(";");
|
||||
}
|
@ -1,226 +0,0 @@
|
||||
/*
|
||||
* lobby.h, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <QTcpSocket>
|
||||
#include <QAbstractSocket>
|
||||
|
||||
const unsigned int ProtocolVersion = 5;
|
||||
const std::string ProtocolEncoding = "utf8";
|
||||
|
||||
class ProtocolError: public std::runtime_error
|
||||
{
|
||||
public:
|
||||
ProtocolError(const char * w): std::runtime_error(w) {}
|
||||
};
|
||||
|
||||
enum ProtocolConsts
|
||||
{
|
||||
//client consts
|
||||
GREETING, USERNAME, MESSAGE, VERSION, CREATE, JOIN, LEAVE, KICK, READY, FORCESTART, HERE, ALIVE, HOSTMODE, SETCHANNEL,
|
||||
|
||||
//server consts
|
||||
SESSIONS, CREATED, JOINED, KICKED, SRVERROR, CHAT, CHATCHANNEL, START, STATUS, HOST, MODS, CLIENTMODS, USERS, HEALTH, GAMEMODE, CHANNEL
|
||||
};
|
||||
|
||||
const QMap<ProtocolConsts, QString> ProtocolStrings
|
||||
{
|
||||
//=== client commands ===
|
||||
|
||||
//handshaking with server
|
||||
//%1: first byte is protocol_version, then size of encoding string in bytes, then encoding string
|
||||
//%2: client name
|
||||
//%3: VCMI version
|
||||
{GREETING, "%1<GREETINGS>%2<VER>%3"},
|
||||
|
||||
//[unsupported] autorization with username
|
||||
//%1: username
|
||||
{USERNAME, "<USER>%1"},
|
||||
|
||||
//sending message to the chat
|
||||
//%1: message text
|
||||
{MESSAGE, "<MSG>%1"},
|
||||
|
||||
//create new room
|
||||
//%1: room name
|
||||
//%2: password for the room
|
||||
//%3: max number of players
|
||||
//%4: mods used by host
|
||||
// each mod has a format modname&modversion, mods should be separated by ; symbol
|
||||
{CREATE, "<NEW>%1<PSWD>%2<COUNT>%3<MODS>%4"},
|
||||
|
||||
//join to the room
|
||||
//%1: room name
|
||||
//%2: password for the room
|
||||
//%3: list of mods used by player
|
||||
// each mod has a format modname&modversion, mods should be separated by ; symbol
|
||||
{JOIN, "<JOIN>%1<PSWD>%2<MODS>%3"},
|
||||
|
||||
//leave the room
|
||||
//%1: room name
|
||||
{LEAVE, "<LEAVE>%1"},
|
||||
|
||||
//kick user from the current room
|
||||
//%1: player username
|
||||
{KICK, "<KICK>%1"},
|
||||
|
||||
//signal that player is ready for game
|
||||
//%1: room name
|
||||
{READY, "<READY>%1"},
|
||||
|
||||
//[unsupported] start session immediately
|
||||
//%1: room name
|
||||
{FORCESTART, "<FORCESTART>%1"},
|
||||
|
||||
//request user list
|
||||
{HERE, "<HERE>"},
|
||||
|
||||
//used as reponse to healcheck
|
||||
{ALIVE, "<ALIVE>"},
|
||||
|
||||
//host sets game mode (new game or load game)
|
||||
//%1: game mode - 0 for new game, 1 for load game
|
||||
{HOSTMODE, "<HOSTMODE>%1"},
|
||||
|
||||
//set new chat channel
|
||||
//%1: channel name
|
||||
{SETCHANNEL, "<CHANNEL>%1"},
|
||||
|
||||
//=== server commands ===
|
||||
//server commands are started from :>>, arguments are enumerated by : symbol
|
||||
|
||||
//new session was created
|
||||
//arg[0]: room name
|
||||
{CREATED, "CREATED"},
|
||||
|
||||
//list of existing sessions
|
||||
//arg[0]: amount of sessions, following arguments depending on it
|
||||
//arg[x]: session name
|
||||
//arg[x+1]: amount of players in the session
|
||||
//arg[x+2]: total amount of players allowed
|
||||
//arg[x+3]: True if session is protected by password
|
||||
{SESSIONS, "SESSIONS"},
|
||||
|
||||
//user has joined to the session
|
||||
//arg[0]: session name
|
||||
//arg[1]: username (who was joined)
|
||||
{JOINED, "JOIN"},
|
||||
|
||||
//user has left the session
|
||||
//arg[0]: session name
|
||||
//arg[1]: username (who has left)
|
||||
{KICKED, "KICK"},
|
||||
|
||||
//session has been started
|
||||
//arg[0]: session name
|
||||
//arg[1]: uuid to be used for connection
|
||||
{START, "START"},
|
||||
|
||||
//host ownership for the game session
|
||||
//arg[0]: uuid to be used by vcmiserver
|
||||
//arg[1]: amount of players (clients) to be connected
|
||||
{HOST, "HOST"},
|
||||
|
||||
//room status
|
||||
//arg[0]: amount of players, following arguments depending on it
|
||||
//arg[x]: player username
|
||||
//arg[x+1]: True if player is ready
|
||||
{STATUS, "STATUS"}, //joined_players:player_name:is_ready
|
||||
|
||||
//server error
|
||||
//arg[0]: error message
|
||||
{SRVERROR, "ERROR"},
|
||||
|
||||
//mods used in the session by host player
|
||||
//arg[0]: amount of mods, following arguments depending on it
|
||||
//arg[x]: mod name
|
||||
//arg[x+1]: mod version
|
||||
{MODS, "MODS"},
|
||||
|
||||
//mods used by user
|
||||
//arg[0]: username
|
||||
//arg[1]: amount of mods, following arguments depending on it
|
||||
//arg[x]: mod name
|
||||
//arg[x+1]: mod version
|
||||
{CLIENTMODS, "MODSOTHER"},
|
||||
|
||||
//received chat message
|
||||
//arg[0]: sender username
|
||||
//arg[1]: channel
|
||||
//arg[2]: message text
|
||||
{CHAT, "MSG"},
|
||||
|
||||
//received chat message to specific channel
|
||||
//arg[0]: sender username
|
||||
//arg[1]: channel
|
||||
//arg[2]: message text
|
||||
{CHATCHANNEL, "MSGCH"},
|
||||
|
||||
//list of users currently in lobby
|
||||
//arg[0]: amount of players, following arguments depend on it
|
||||
//arg[x]: username
|
||||
//arg[x+1]: room (empty if not in the room)
|
||||
{USERS, "USERS"},
|
||||
|
||||
//healthcheck from server
|
||||
{HEALTH, "HEALTH"},
|
||||
|
||||
//game mode (new game or load game) set by host
|
||||
//arg[0]: game mode
|
||||
{GAMEMODE, "GAMEMODE"},
|
||||
|
||||
//chat channel changed
|
||||
//arg[0]: channel name
|
||||
{CHANNEL, "CHANNEL"},
|
||||
};
|
||||
|
||||
class ServerCommand
|
||||
{
|
||||
public:
|
||||
ServerCommand(ProtocolConsts, const QStringList & arguments);
|
||||
|
||||
const ProtocolConsts command;
|
||||
const QStringList arguments;
|
||||
};
|
||||
|
||||
class SocketLobby : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SocketLobby(QObject *parent = nullptr);
|
||||
void connectServer(const QString & host, int port, const QString & username, int timeout);
|
||||
void disconnectServer();
|
||||
void requestNewSession(const QString & session, int totalPlayers, const QString & pswd, const QMap<QString, QString> & mods);
|
||||
void requestJoinSession(const QString & session, const QString & pswd, const QMap<QString, QString> & mods);
|
||||
void requestLeaveSession(const QString & session);
|
||||
void requestReadySession(const QString & session);
|
||||
|
||||
void send(const QString &);
|
||||
|
||||
signals:
|
||||
|
||||
void text(QString);
|
||||
void receive(QString);
|
||||
void disconnect();
|
||||
|
||||
public slots:
|
||||
|
||||
void connected();
|
||||
void disconnected();
|
||||
void bytesWritten(qint64 bytes);
|
||||
void readyRead();
|
||||
|
||||
private:
|
||||
QTcpSocket *socket;
|
||||
bool isConnected = false;
|
||||
QString username;
|
||||
};
|
||||
|
||||
QString prepareModsClientString(const QMap<QString, QString> & mods);
|
@ -1,585 +0,0 @@
|
||||
/*
|
||||
* lobby_moc.cpp, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
#include "StdInc.h"
|
||||
#include "main.h"
|
||||
#include "lobby_moc.h"
|
||||
#include "ui_lobby_moc.h"
|
||||
#include "lobbyroomrequest_moc.h"
|
||||
#include "../mainwindow_moc.h"
|
||||
#include "../modManager/cmodlist.h"
|
||||
#include "../../lib/CConfigHandler.h"
|
||||
|
||||
enum GameMode
|
||||
{
|
||||
NEW_GAME = 0, LOAD_GAME = 1
|
||||
};
|
||||
|
||||
enum ModResolutionRoles
|
||||
{
|
||||
ModNameRole = Qt::UserRole + 1,
|
||||
ModEnableRole,
|
||||
ModResolvableRole
|
||||
};
|
||||
|
||||
Lobby::Lobby(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::Lobby)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
connect(&socketLobby, SIGNAL(text(QString)), ui->chatWidget, SLOT(sysMessage(QString)));
|
||||
connect(&socketLobby, SIGNAL(receive(QString)), this, SLOT(dispatchMessage(QString)));
|
||||
connect(&socketLobby, SIGNAL(disconnect()), this, SLOT(onDisconnected()));
|
||||
connect(ui->chatWidget, SIGNAL(messageSent(QString)), this, SLOT(onMessageSent(QString)));
|
||||
connect(ui->chatWidget, SIGNAL(channelSwitch(QString)), this, SLOT(onChannelSwitch(QString)));
|
||||
|
||||
QString hostString("%1:%2");
|
||||
hostString = hostString.arg(QString::fromStdString(settings["launcher"]["lobbyUrl"].String()));
|
||||
hostString = hostString.arg(settings["launcher"]["lobbyPort"].Integer());
|
||||
|
||||
ui->serverEdit->setText(hostString);
|
||||
ui->userEdit->setText(QString::fromStdString(settings["launcher"]["lobbyUsername"].String()));
|
||||
ui->kickButton->setVisible(false);
|
||||
}
|
||||
|
||||
void Lobby::changeEvent(QEvent *event)
|
||||
{
|
||||
if(event->type() == QEvent::LanguageChange)
|
||||
{
|
||||
ui->retranslateUi(this);
|
||||
}
|
||||
QWidget::changeEvent(event);
|
||||
}
|
||||
|
||||
Lobby::~Lobby()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
QMap<QString, QString> Lobby::buildModsMap() const
|
||||
{
|
||||
QMap<QString, QString> result;
|
||||
QObject * mainWindow = qApp->activeWindow();
|
||||
if(!mainWindow)
|
||||
mainWindow = parent();
|
||||
if(!mainWindow)
|
||||
return result; //probably something is really wrong here
|
||||
|
||||
while(mainWindow->parent())
|
||||
mainWindow = mainWindow->parent();
|
||||
const auto & modlist = qobject_cast<MainWindow*>(mainWindow)->getModList();
|
||||
|
||||
for(auto & modname : modlist.getModList())
|
||||
{
|
||||
auto mod = modlist.getMod(modname);
|
||||
if(mod.isEnabled())
|
||||
{
|
||||
result[modname] = mod.getValue("version").toString();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool Lobby::isModAvailable(const QString & modName, const QString & modVersion) const
|
||||
{
|
||||
QObject * mainWindow = qApp->activeWindow();
|
||||
while(mainWindow->parent())
|
||||
mainWindow = mainWindow->parent();
|
||||
const auto & modlist = qobject_cast<MainWindow*>(mainWindow)->getModList();
|
||||
|
||||
if(!modlist.hasMod(modName))
|
||||
return false;
|
||||
|
||||
auto mod = modlist.getMod(modName);
|
||||
return (mod.isInstalled () || mod.isAvailable()) && (mod.getValue("version") == modVersion);
|
||||
}
|
||||
|
||||
void Lobby::serverCommand(const ServerCommand & command) try
|
||||
{
|
||||
//initialize variables outside of switch block
|
||||
const QString statusPlaceholder("%1 %2\n");
|
||||
const auto & args = command.arguments;
|
||||
int amount;
|
||||
int tagPoint;
|
||||
QString joinStr;
|
||||
switch(command.command)
|
||||
{
|
||||
case SRVERROR:
|
||||
protocolAssert(args.size());
|
||||
ui->chatWidget->chatMessage("System error", args[0], true);
|
||||
if(authentificationStatus == AuthStatus::AUTH_NONE)
|
||||
authentificationStatus = AuthStatus::AUTH_ERROR;
|
||||
break;
|
||||
|
||||
case CREATED:
|
||||
protocolAssert(args.size());
|
||||
hostSession = args[0];
|
||||
session = args[0];
|
||||
ui->chatWidget->setSession(session);
|
||||
break;
|
||||
|
||||
case SESSIONS:
|
||||
protocolAssert(args.size());
|
||||
amount = args[0].toInt();
|
||||
protocolAssert(amount * 4 == (args.size() - 1));
|
||||
ui->sessionsTable->setRowCount(amount);
|
||||
|
||||
tagPoint = 1;
|
||||
for(int i = 0; i < amount; ++i)
|
||||
{
|
||||
QTableWidgetItem * sessionNameItem = new QTableWidgetItem(args[tagPoint++]);
|
||||
ui->sessionsTable->setItem(i, 0, sessionNameItem);
|
||||
|
||||
int playersJoined = args[tagPoint++].toInt();
|
||||
int playersTotal = args[tagPoint++].toInt();
|
||||
auto * sessionPlayerItem = new QTableWidgetItem(QString("%1/%2").arg(playersJoined).arg(playersTotal));
|
||||
ui->sessionsTable->setItem(i, 1, sessionPlayerItem);
|
||||
|
||||
auto * sessionProtectedItem = new QTableWidgetItem();
|
||||
bool isPrivate = (args[tagPoint++] == "True");
|
||||
sessionProtectedItem->setData(Qt::UserRole, isPrivate);
|
||||
if(isPrivate)
|
||||
sessionProtectedItem->setIcon(QIcon("icons:room-private.png"));
|
||||
ui->sessionsTable->setItem(i, 2, sessionProtectedItem);
|
||||
}
|
||||
break;
|
||||
|
||||
case JOINED:
|
||||
case KICKED:
|
||||
protocolAssert(args.size() == 2);
|
||||
if(args[1] == username)
|
||||
{
|
||||
hostModsMap.clear();
|
||||
session = "";
|
||||
ui->chatWidget->setSession(session);
|
||||
ui->buttonReady->setText("Ready");
|
||||
ui->optNewGame->setChecked(true);
|
||||
session = args[0];
|
||||
ui->chatWidget->setSession(session);
|
||||
bool isHost = command.command == JOINED && hostSession == session;
|
||||
ui->optNewGame->setEnabled(isHost);
|
||||
ui->optLoadGame->setEnabled(isHost);
|
||||
ui->stackedWidget->setCurrentWidget(command.command == JOINED ? ui->roomPage : ui->sessionsPage);
|
||||
}
|
||||
else
|
||||
{
|
||||
joinStr = (command.command == JOINED ? "%1 joined to the session %2" : "%1 left session %2");
|
||||
ui->chatWidget->sysMessage(joinStr.arg(args[1], args[0]));
|
||||
}
|
||||
break;
|
||||
|
||||
case MODS: {
|
||||
protocolAssert(args.size() > 0);
|
||||
amount = args[0].toInt();
|
||||
protocolAssert(amount * 2 == (args.size() - 1));
|
||||
|
||||
tagPoint = 1;
|
||||
for(int i = 0; i < amount; ++i, tagPoint += 2)
|
||||
hostModsMap[args[tagPoint]] = args[tagPoint + 1];
|
||||
|
||||
updateMods();
|
||||
break;
|
||||
}
|
||||
|
||||
case CLIENTMODS: {
|
||||
protocolAssert(args.size() >= 1);
|
||||
auto & clientModsMap = clientsModsMap[args[0]];
|
||||
amount = args[1].toInt();
|
||||
protocolAssert(amount * 2 == (args.size() - 2));
|
||||
|
||||
tagPoint = 2;
|
||||
for(int i = 0; i < amount; ++i, tagPoint += 2)
|
||||
clientModsMap[args[tagPoint]] = args[tagPoint + 1];
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case STATUS:
|
||||
protocolAssert(args.size() > 0);
|
||||
amount = args[0].toInt();
|
||||
protocolAssert(amount * 2 == (args.size() - 1));
|
||||
|
||||
tagPoint = 1;
|
||||
ui->playersList->clear();
|
||||
for(int i = 0; i < amount; ++i, tagPoint += 2)
|
||||
{
|
||||
if(args[tagPoint + 1] == "True")
|
||||
ui->playersList->addItem(new QListWidgetItem(QIcon("icons:mod-enabled.png"), args[tagPoint]));
|
||||
else
|
||||
ui->playersList->addItem(new QListWidgetItem(QIcon("icons:mod-disabled.png"), args[tagPoint]));
|
||||
|
||||
if(args[tagPoint] == username)
|
||||
{
|
||||
if(args[tagPoint + 1] == "True")
|
||||
ui->buttonReady->setText("Not ready");
|
||||
else
|
||||
ui->buttonReady->setText("Ready");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case START: {
|
||||
protocolAssert(args.size() == 1);
|
||||
//actually start game
|
||||
gameArgs << "--lobby";
|
||||
gameArgs << "--lobby-address" << serverUrl;
|
||||
gameArgs << "--lobby-port" << QString::number(serverPort);
|
||||
gameArgs << "--lobby-username" << username;
|
||||
gameArgs << "--lobby-gamemode" << QString::number(isLoadGameMode);
|
||||
gameArgs << "--uuid" << args[0];
|
||||
startGame(gameArgs);
|
||||
break;
|
||||
}
|
||||
|
||||
case HOST: {
|
||||
protocolAssert(args.size() == 2);
|
||||
gameArgs << "--lobby-host";
|
||||
gameArgs << "--lobby-uuid" << args[0];
|
||||
gameArgs << "--lobby-connections" << args[1];
|
||||
break;
|
||||
}
|
||||
|
||||
case CHAT: {
|
||||
protocolAssert(args.size() > 1);
|
||||
QString msg;
|
||||
for(int i = 1; i < args.size(); ++i)
|
||||
msg += args[i];
|
||||
ui->chatWidget->chatMessage(args[0], msg);
|
||||
break;
|
||||
}
|
||||
|
||||
case CHATCHANNEL: {
|
||||
protocolAssert(args.size() > 2);
|
||||
QString msg;
|
||||
for(int i = 2; i < args.size(); ++i)
|
||||
msg += args[i];
|
||||
ui->chatWidget->chatMessage(args[0], args[1], msg);
|
||||
break;
|
||||
}
|
||||
|
||||
case CHANNEL: {
|
||||
protocolAssert(args.size() == 1);
|
||||
ui->chatWidget->setChannel(args[0]);
|
||||
break;
|
||||
}
|
||||
|
||||
case HEALTH: {
|
||||
socketLobby.send(ProtocolStrings[ALIVE]);
|
||||
break;
|
||||
}
|
||||
|
||||
case USERS: {
|
||||
protocolAssert(args.size() > 0);
|
||||
amount = args[0].toInt();
|
||||
|
||||
protocolAssert(amount == (args.size() - 1));
|
||||
ui->chatWidget->clearUsers();
|
||||
for(int i = 0; i < amount; ++i)
|
||||
{
|
||||
ui->chatWidget->addUser(args[i + 1]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case GAMEMODE: {
|
||||
protocolAssert(args.size() == 1);
|
||||
isLoadGameMode = args[0].toInt();
|
||||
if(isLoadGameMode)
|
||||
ui->optLoadGame->setChecked(true);
|
||||
else
|
||||
ui->optNewGame->setChecked(true);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
ui->chatWidget->sysMessage("Unknown server command");
|
||||
}
|
||||
|
||||
if(authentificationStatus == AuthStatus::AUTH_ERROR)
|
||||
{
|
||||
socketLobby.disconnectServer();
|
||||
}
|
||||
else
|
||||
{
|
||||
authentificationStatus = AuthStatus::AUTH_OK;
|
||||
ui->newButton->setEnabled(true);
|
||||
}
|
||||
}
|
||||
catch(const ProtocolError & e)
|
||||
{
|
||||
ui->chatWidget->chatMessage("System error", e.what(), true);
|
||||
}
|
||||
|
||||
void Lobby::dispatchMessage(QString txt) try
|
||||
{
|
||||
if(txt.isEmpty())
|
||||
return;
|
||||
|
||||
QStringList parseTags = txt.split(":>>");
|
||||
protocolAssert(parseTags.size() > 1 && parseTags[0].isEmpty() && !parseTags[1].isEmpty());
|
||||
|
||||
for(int c = 1; c < parseTags.size(); ++c)
|
||||
{
|
||||
QStringList parseArgs = parseTags[c].split(":");
|
||||
protocolAssert(parseArgs.size() > 1);
|
||||
|
||||
auto ctype = ProtocolStrings.key(parseArgs[0]);
|
||||
parseArgs.pop_front();
|
||||
ServerCommand cmd(ctype, parseArgs);
|
||||
serverCommand(cmd);
|
||||
}
|
||||
}
|
||||
catch(const ProtocolError & e)
|
||||
{
|
||||
ui->chatWidget->chatMessage("System error", e.what(), true);
|
||||
}
|
||||
|
||||
void Lobby::onDisconnected()
|
||||
{
|
||||
authentificationStatus = AuthStatus::AUTH_NONE;
|
||||
session = "";
|
||||
ui->chatWidget->setSession(session);
|
||||
ui->chatWidget->setChannel("global");
|
||||
ui->stackedWidget->setCurrentWidget(ui->sessionsPage);
|
||||
ui->connectButton->setChecked(false);
|
||||
ui->serverEdit->setEnabled(true);
|
||||
ui->userEdit->setEnabled(true);
|
||||
ui->newButton->setEnabled(false);
|
||||
ui->joinButton->setEnabled(false);
|
||||
ui->sessionsTable->setRowCount(0);
|
||||
}
|
||||
|
||||
void Lobby::protocolAssert(bool expr)
|
||||
{
|
||||
if(!expr)
|
||||
throw ProtocolError("Protocol error");
|
||||
}
|
||||
|
||||
void Lobby::on_connectButton_toggled(bool checked)
|
||||
{
|
||||
if(checked)
|
||||
{
|
||||
ui->connectButton->setText(tr("Disconnect"));
|
||||
authentificationStatus = AuthStatus::AUTH_NONE;
|
||||
username = ui->userEdit->text();
|
||||
ui->chatWidget->setUsername(username);
|
||||
const int connectionTimeout = settings["launcher"]["connectionTimeout"].Integer();
|
||||
|
||||
auto serverStrings = ui->serverEdit->text().split(":");
|
||||
if(serverStrings.size() != 2)
|
||||
{
|
||||
QMessageBox::critical(this, "Connection error", "Server address must have the format URL:port");
|
||||
return;
|
||||
}
|
||||
|
||||
serverUrl = serverStrings[0];
|
||||
serverPort = serverStrings[1].toInt();
|
||||
|
||||
Settings node = settings.write["launcher"];
|
||||
node["lobbyUrl"].String() = serverUrl.toStdString();
|
||||
node["lobbyPort"].Integer() = serverPort;
|
||||
node["lobbyUsername"].String() = username.toStdString();
|
||||
|
||||
ui->serverEdit->setEnabled(false);
|
||||
ui->userEdit->setEnabled(false);
|
||||
|
||||
ui->chatWidget->sysMessage("Connecting to " + serverUrl + ":" + QString::number(serverPort));
|
||||
//show text immediately
|
||||
ui->chatWidget->repaint();
|
||||
qApp->processEvents();
|
||||
|
||||
socketLobby.connectServer(serverUrl, serverPort, username, connectionTimeout);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->connectButton->setText(tr("Connect"));
|
||||
ui->serverEdit->setEnabled(true);
|
||||
ui->userEdit->setEnabled(true);
|
||||
ui->chatWidget->clearUsers();
|
||||
hostModsMap.clear();
|
||||
updateMods();
|
||||
socketLobby.disconnectServer();
|
||||
}
|
||||
}
|
||||
|
||||
void Lobby::updateMods()
|
||||
{
|
||||
ui->modsList->clear();
|
||||
if(hostModsMap.empty())
|
||||
return;
|
||||
|
||||
auto createModListWidget = [](const QIcon & icon, const QString & label, const QString & name, bool enableFlag, bool resolveFlag)
|
||||
{
|
||||
auto * lw = new QListWidgetItem(icon, label);
|
||||
lw->setData(ModResolutionRoles::ModNameRole, name);
|
||||
lw->setData(ModResolutionRoles::ModEnableRole, enableFlag);
|
||||
lw->setData(ModResolutionRoles::ModResolvableRole, resolveFlag);
|
||||
return lw;
|
||||
};
|
||||
|
||||
auto enabledMods = buildModsMap();
|
||||
for(const auto & mod : hostModsMap.keys())
|
||||
{
|
||||
auto & modValue = hostModsMap[mod];
|
||||
auto modName = QString("%1 (v%2)").arg(mod, modValue);
|
||||
if(enabledMods.contains(mod))
|
||||
{
|
||||
if(enabledMods[mod] == modValue)
|
||||
enabledMods.remove(mod); //mod fully matches, remove from list
|
||||
else
|
||||
{
|
||||
//mod version mismatch
|
||||
ui->modsList->addItem(createModListWidget(QIcon("icons:mod-update.png"), modName, mod, true, false));
|
||||
}
|
||||
}
|
||||
else if(isModAvailable(mod, modValue))
|
||||
{
|
||||
//mod is available and needs to be enabled
|
||||
ui->modsList->addItem(createModListWidget(QIcon("icons:mod-enabled.png"), modName, mod, true, true));
|
||||
}
|
||||
else
|
||||
{
|
||||
//mod is not available and needs to be installed
|
||||
ui->modsList->addItem(createModListWidget(QIcon("icons:mod-delete.png"), modName, mod, true, false));
|
||||
}
|
||||
}
|
||||
for(const auto & remainMod : enabledMods.keys())
|
||||
{
|
||||
auto modName = QString("%1 (v%2)").arg(remainMod, enabledMods[remainMod]);
|
||||
//mod needs to be disabled
|
||||
ui->modsList->addItem(createModListWidget(QIcon("icons:mod-disabled.png"), modName, remainMod, false, true));
|
||||
}
|
||||
if(!ui->modsList->count())
|
||||
{
|
||||
ui->buttonResolve->setEnabled(false);
|
||||
ui->modsList->addItem(tr("No issues detected"));
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->buttonResolve->setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
void Lobby::on_newButton_clicked()
|
||||
{
|
||||
new LobbyRoomRequest(socketLobby, "", buildModsMap(), this);
|
||||
}
|
||||
|
||||
void Lobby::on_joinButton_clicked()
|
||||
{
|
||||
auto * item = ui->sessionsTable->item(ui->sessionsTable->currentRow(), 0);
|
||||
if(item)
|
||||
{
|
||||
auto isPrivate = ui->sessionsTable->item(ui->sessionsTable->currentRow(), 2)->data(Qt::UserRole).toBool();
|
||||
if(isPrivate)
|
||||
new LobbyRoomRequest(socketLobby, item->text(), buildModsMap(), this);
|
||||
else
|
||||
socketLobby.requestJoinSession(item->text(), "", buildModsMap());
|
||||
}
|
||||
}
|
||||
|
||||
void Lobby::on_buttonLeave_clicked()
|
||||
{
|
||||
socketLobby.requestLeaveSession(session);
|
||||
}
|
||||
|
||||
void Lobby::on_buttonReady_clicked()
|
||||
{
|
||||
if(ui->buttonReady->text() == "Ready")
|
||||
ui->buttonReady->setText("Not ready");
|
||||
else
|
||||
ui->buttonReady->setText("Ready");
|
||||
socketLobby.requestReadySession(session);
|
||||
}
|
||||
|
||||
void Lobby::on_sessionsTable_itemSelectionChanged()
|
||||
{
|
||||
auto selection = ui->sessionsTable->selectedItems();
|
||||
ui->joinButton->setEnabled(!selection.empty());
|
||||
}
|
||||
|
||||
void Lobby::on_playersList_currentRowChanged(int currentRow)
|
||||
{
|
||||
ui->kickButton->setVisible(ui->playersList->currentItem()
|
||||
&& currentRow > 0
|
||||
&& ui->playersList->currentItem()->text() != username);
|
||||
}
|
||||
|
||||
void Lobby::on_kickButton_clicked()
|
||||
{
|
||||
if(ui->playersList->currentItem() && ui->playersList->currentItem()->text() != username)
|
||||
socketLobby.send(ProtocolStrings[KICK].arg(ui->playersList->currentItem()->text()));
|
||||
}
|
||||
|
||||
|
||||
void Lobby::on_buttonResolve_clicked()
|
||||
{
|
||||
QStringList toEnableList;
|
||||
QStringList toDisableList;
|
||||
auto items = ui->modsList->selectedItems();
|
||||
if(items.empty())
|
||||
{
|
||||
for(int i = 0; i < ui->modsList->count(); ++i)
|
||||
items.push_back(ui->modsList->item(i));
|
||||
}
|
||||
|
||||
for(auto * item : items)
|
||||
{
|
||||
auto modName = item->data(ModResolutionRoles::ModNameRole);
|
||||
if(modName.isNull())
|
||||
continue;
|
||||
|
||||
bool modToEnable = item->data(ModResolutionRoles::ModEnableRole).toBool();
|
||||
bool modToResolve = item->data(ModResolutionRoles::ModResolvableRole).toBool();
|
||||
|
||||
if(!modToResolve)
|
||||
continue;
|
||||
|
||||
if(modToEnable)
|
||||
toEnableList << modName.toString();
|
||||
else
|
||||
toDisableList << modName.toString();
|
||||
}
|
||||
|
||||
//disabling first, then enabling
|
||||
for(auto & mod : toDisableList)
|
||||
emit disableMod(mod);
|
||||
for(auto & mod : toEnableList)
|
||||
emit enableMod(mod);
|
||||
}
|
||||
|
||||
void Lobby::on_optNewGame_toggled(bool checked)
|
||||
{
|
||||
if(checked)
|
||||
{
|
||||
if(isLoadGameMode)
|
||||
socketLobby.send(ProtocolStrings[HOSTMODE].arg(GameMode::NEW_GAME));
|
||||
}
|
||||
}
|
||||
|
||||
void Lobby::on_optLoadGame_toggled(bool checked)
|
||||
{
|
||||
if(checked)
|
||||
{
|
||||
if(!isLoadGameMode)
|
||||
socketLobby.send(ProtocolStrings[HOSTMODE].arg(GameMode::LOAD_GAME));
|
||||
}
|
||||
}
|
||||
|
||||
void Lobby::onMessageSent(QString message)
|
||||
{
|
||||
socketLobby.send(ProtocolStrings[MESSAGE].arg(message));
|
||||
}
|
||||
|
||||
void Lobby::onChannelSwitch(QString channel)
|
||||
{
|
||||
socketLobby.send(ProtocolStrings[SETCHANNEL].arg(channel));
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
/*
|
||||
* lobby_moc.h, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
#include <QWidget>
|
||||
#include "lobby.h"
|
||||
|
||||
namespace Ui {
|
||||
class Lobby;
|
||||
}
|
||||
|
||||
class Lobby : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
void changeEvent(QEvent *event) override;
|
||||
public:
|
||||
explicit Lobby(QWidget *parent = nullptr);
|
||||
~Lobby();
|
||||
|
||||
signals:
|
||||
|
||||
void enableMod(QString mod);
|
||||
void disableMod(QString mod);
|
||||
|
||||
public slots:
|
||||
void updateMods();
|
||||
|
||||
private slots:
|
||||
void dispatchMessage(QString);
|
||||
void serverCommand(const ServerCommand &);
|
||||
void onMessageSent(QString message);
|
||||
void onChannelSwitch(QString channel);
|
||||
|
||||
void on_connectButton_toggled(bool checked);
|
||||
|
||||
void on_newButton_clicked();
|
||||
|
||||
void on_joinButton_clicked();
|
||||
|
||||
void on_buttonLeave_clicked();
|
||||
|
||||
void on_buttonReady_clicked();
|
||||
|
||||
void onDisconnected();
|
||||
|
||||
void on_sessionsTable_itemSelectionChanged();
|
||||
|
||||
void on_playersList_currentRowChanged(int currentRow);
|
||||
|
||||
void on_kickButton_clicked();
|
||||
|
||||
void on_buttonResolve_clicked();
|
||||
|
||||
void on_optNewGame_toggled(bool checked);
|
||||
|
||||
void on_optLoadGame_toggled(bool checked);
|
||||
|
||||
private:
|
||||
QString serverUrl;
|
||||
int serverPort;
|
||||
bool isLoadGameMode = false;
|
||||
|
||||
Ui::Lobby *ui;
|
||||
SocketLobby socketLobby;
|
||||
QString hostSession;
|
||||
QString session;
|
||||
QString username;
|
||||
QStringList gameArgs;
|
||||
QMap<QString, QString> hostModsMap;
|
||||
QMap<QString, QMap<QString, QString>> clientsModsMap;
|
||||
|
||||
enum AuthStatus
|
||||
{
|
||||
AUTH_NONE, AUTH_OK, AUTH_ERROR
|
||||
};
|
||||
|
||||
AuthStatus authentificationStatus = AUTH_NONE;
|
||||
|
||||
private:
|
||||
QMap<QString, QString> buildModsMap() const;
|
||||
bool isModAvailable(const QString & modName, const QString & modVersion) const;
|
||||
|
||||
|
||||
void protocolAssert(bool);
|
||||
};
|
@ -1,311 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Lobby</class>
|
||||
<widget class="QWidget" name="Lobby">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>652</width>
|
||||
<height>383</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Username</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<widget class="QPushButton" name="connectButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Connect</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="serverEdit">
|
||||
<property name="text">
|
||||
<string notr="true">127.0.0.1:5002</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Server</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<widget class="QLineEdit" name="userEdit"/>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="6">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="spacing">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="Chat" name="chatWidget" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QStackedWidget" name="stackedWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="sessionsPage">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="1" column="0">
|
||||
<widget class="QPushButton" name="newButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>New room</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="joinButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Join room</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QTableWidget" name="sessionsTable">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderCascadingSectionResizes">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderDefaultSectionSize">
|
||||
<number>80</number>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderMinimumSectionSize">
|
||||
<number>20</number>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderDefaultSectionSize">
|
||||
<number>20</number>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Session</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Players</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="roomPage">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="verticalSpacing">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="kickButton">
|
||||
<property name="text">
|
||||
<string>Kick player</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QListWidget" name="playersList">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Players in the room</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QPushButton" name="buttonLeave">
|
||||
<property name="text">
|
||||
<string>Leave</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Mods mismatch</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="QListWidget" name="modsList">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::MultiSelection</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QPushButton" name="buttonReady">
|
||||
<property name="text">
|
||||
<string>Ready</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QPushButton" name="buttonResolve">
|
||||
<property name="text">
|
||||
<string>Resolve</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="optNewGame">
|
||||
<property name="text">
|
||||
<string>New game</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="optLoadGame">
|
||||
<property name="text">
|
||||
<string>Load game</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>Chat</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>lobby/chat_moc.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -1,59 +0,0 @@
|
||||
/*
|
||||
* lobbyroomrequest_moc.cpp, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
#include "lobbyroomrequest_moc.h"
|
||||
#include "ui_lobbyroomrequest_moc.h"
|
||||
|
||||
LobbyRoomRequest::LobbyRoomRequest(SocketLobby & socket, const QString & room, const QMap<QString, QString> & mods, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::LobbyRoomRequest),
|
||||
socketLobby(socket),
|
||||
mods(mods)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->nameEdit->setText(room);
|
||||
if(!room.isEmpty())
|
||||
{
|
||||
ui->nameEdit->setReadOnly(true);
|
||||
ui->totalPlayers->setEnabled(false);
|
||||
}
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
void LobbyRoomRequest::changeEvent(QEvent *event)
|
||||
{
|
||||
if(event->type() == QEvent::LanguageChange)
|
||||
{
|
||||
ui->retranslateUi(this);
|
||||
}
|
||||
QDialog::changeEvent(event);
|
||||
}
|
||||
|
||||
LobbyRoomRequest::~LobbyRoomRequest()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void LobbyRoomRequest::on_buttonBox_accepted()
|
||||
{
|
||||
if(ui->nameEdit->isReadOnly())
|
||||
{
|
||||
socketLobby.requestJoinSession(ui->nameEdit->text(), ui->passwordEdit->text(), mods);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!ui->nameEdit->text().isEmpty())
|
||||
{
|
||||
int totalPlayers = ui->totalPlayers->currentIndex() + 2; //where 2 is a minimum amount of players
|
||||
socketLobby.requestNewSession(ui->nameEdit->text(), totalPlayers, ui->passwordEdit->text(), mods);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,38 +0,0 @@
|
||||
/*
|
||||
* lobbyroomrequest_moc.h, part of VCMI engine
|
||||
*
|
||||
* Authors: listed in file AUTHORS in main folder
|
||||
*
|
||||
* License: GNU General Public License v2.0 or later
|
||||
* Full text of license available in license.txt file, in main folder
|
||||
*
|
||||
*/
|
||||
#ifndef LOBBYROOMREQUEST_MOC_H
|
||||
#define LOBBYROOMREQUEST_MOC_H
|
||||
|
||||
#include <QDialog>
|
||||
#include "lobby.h"
|
||||
|
||||
namespace Ui {
|
||||
class LobbyRoomRequest;
|
||||
}
|
||||
|
||||
class LobbyRoomRequest : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
void changeEvent(QEvent *event) override;
|
||||
public:
|
||||
explicit LobbyRoomRequest(SocketLobby & socket, const QString & room, const QMap<QString, QString> & mods, QWidget *parent = nullptr);
|
||||
~LobbyRoomRequest();
|
||||
|
||||
private slots:
|
||||
void on_buttonBox_accepted();
|
||||
|
||||
private:
|
||||
Ui::LobbyRoomRequest *ui;
|
||||
SocketLobby & socketLobby;
|
||||
QMap<QString, QString> mods;
|
||||
};
|
||||
|
||||
#endif // LOBBYROOMREQUEST_MOC_H
|
@ -1,151 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>LobbyRoomRequest</class>
|
||||
<widget class="QDialog" name="LobbyRoomRequest">
|
||||
<property name="windowModality">
|
||||
<enum>Qt::WindowModal</enum>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>227</width>
|
||||
<height>188</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Room settings</string>
|
||||
</property>
|
||||
<property name="locale">
|
||||
<locale language="English" country="UnitedStates"/>
|
||||
</property>
|
||||
<property name="sizeGripEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="modal">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Room name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QLineEdit" name="nameEdit"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Maximum players</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="totalPlayers">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentText">
|
||||
<string notr="true">2</string>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">2</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">3</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">4</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">5</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">6</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">7</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string notr="true">8</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Password (optional)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="QLineEdit" name="passwordEdit"/>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>LobbyRoomRequest</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>LobbyRoomRequest</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
@ -53,7 +53,6 @@ void MainWindow::computeSidePanelSizes()
|
||||
QVector<QToolButton*> widgets = {
|
||||
ui->modslistButton,
|
||||
ui->settingsButton,
|
||||
ui->lobbyButton,
|
||||
ui->aboutButton,
|
||||
ui->startEditorButton,
|
||||
ui->startGameButton
|
||||
@ -86,10 +85,6 @@ MainWindow::MainWindow(QWidget * parent)
|
||||
|
||||
ui->setupUi(this);
|
||||
|
||||
connect(ui->lobbyView, &Lobby::enableMod, ui->modlistView, &CModListView::enableModByName);
|
||||
connect(ui->lobbyView, &Lobby::disableMod, ui->modlistView, &CModListView::disableModByName);
|
||||
connect(ui->modlistView, &CModListView::modsChanged, ui->lobbyView, &Lobby::updateMods);
|
||||
|
||||
//load window settings
|
||||
QSettings s(Ui::teamName, Ui::appName);
|
||||
|
||||
@ -151,7 +146,6 @@ void MainWindow::enterSetup()
|
||||
{
|
||||
ui->startGameButton->setEnabled(false);
|
||||
ui->startEditorButton->setEnabled(false);
|
||||
ui->lobbyButton->setEnabled(false);
|
||||
ui->settingsButton->setEnabled(false);
|
||||
ui->aboutButton->setEnabled(false);
|
||||
ui->modslistButton->setEnabled(false);
|
||||
@ -165,7 +159,6 @@ void MainWindow::exitSetup()
|
||||
|
||||
ui->startGameButton->setEnabled(true);
|
||||
ui->startEditorButton->setEnabled(true);
|
||||
ui->lobbyButton->setEnabled(true);
|
||||
ui->settingsButton->setEnabled(true);
|
||||
ui->aboutButton->setEnabled(true);
|
||||
ui->modslistButton->setEnabled(true);
|
||||
@ -228,12 +221,6 @@ void MainWindow::on_settingsButton_clicked()
|
||||
ui->tabListWidget->setCurrentIndex(TabRows::SETTINGS);
|
||||
}
|
||||
|
||||
void MainWindow::on_lobbyButton_clicked()
|
||||
{
|
||||
ui->startGameButton->setEnabled(false);
|
||||
ui->tabListWidget->setCurrentIndex(TabRows::LOBBY);
|
||||
}
|
||||
|
||||
void MainWindow::on_aboutButton_clicked()
|
||||
{
|
||||
ui->startGameButton->setEnabled(true);
|
||||
|
@ -38,9 +38,8 @@ private:
|
||||
{
|
||||
MODS = 0,
|
||||
SETTINGS = 1,
|
||||
LOBBY = 2,
|
||||
SETUP = 3,
|
||||
ABOUT = 4,
|
||||
SETUP = 2,
|
||||
ABOUT = 3,
|
||||
};
|
||||
|
||||
void changeEvent(QEvent *event) override;
|
||||
@ -65,7 +64,6 @@ public slots:
|
||||
private slots:
|
||||
void on_modslistButton_clicked();
|
||||
void on_settingsButton_clicked();
|
||||
void on_lobbyButton_clicked();
|
||||
void on_startEditorButton_clicked();
|
||||
void on_aboutButton_clicked();
|
||||
};
|
||||
|
@ -133,56 +133,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="lobbyButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>1</horstretch>
|
||||
<verstretch>10</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Lobby</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>icons:menu-lobby.png</normaloff>icons:menu-lobby.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>64</width>
|
||||
<height>64</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="autoExclusive">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="aboutButton">
|
||||
<property name="sizePolicy">
|
||||
@ -370,7 +320,6 @@
|
||||
</property>
|
||||
<widget class="CModListView" name="modlistView"/>
|
||||
<widget class="CSettingsView" name="settingsView"/>
|
||||
<widget class="Lobby" name="lobbyView"/>
|
||||
<widget class="FirstLaunchView" name="setupView"/>
|
||||
<widget class="AboutProjectView" name="aboutView"/>
|
||||
</widget>
|
||||
@ -392,12 +341,6 @@
|
||||
<header>settingsView/csettingsview_moc.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>Lobby</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>lobby/lobby_moc.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>FirstLaunchView</class>
|
||||
<extends>QWidget</extends>
|
||||
|
@ -687,59 +687,31 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
|
||||
<translation>显示开场动画</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation>激活</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation>禁用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation>启用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation>未安装</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation>安装</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>窗体</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation>大厅内用户</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation>全局聊天</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation>输入你的消息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation>发送</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1055,119 +1027,7 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation>连接</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation>用户名</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation>服务器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation>会话</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation>玩家</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation>解析</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation>新游戏</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation>加载游戏</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation>新房间</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation>加入房间</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation>准备</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translatorcomment>Mod统一翻译为模组</translatorcomment>
|
||||
<translation>模组不匹配</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation>离开</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation>踢出玩家</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation>房间内的玩家</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation>断开</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation>没有发现问题</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation>房间设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation>房间名称</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation>最大玩家数</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation>密码(可选)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="20"/>
|
||||
@ -1180,25 +1040,20 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
|
||||
<translation>设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Help</source>
|
||||
<translation>帮助</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation>地图编辑器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation>开始游戏</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation>大厅</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="57"/>
|
||||
<source>Mods</source>
|
||||
|
@ -681,59 +681,31 @@ Exkluzivní celá obrazovka - hra zakryje vaši celou obrazovku a použije vybra
|
||||
<translation>Zobrazit intro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation>Aktivní</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation type="unfinished">Povolit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation type="unfinished">Instalovat</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Formulář</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation>Uživatelé v předsíni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation>Obecná konverzace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation>zadejte vaši zprávu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation>poslat</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1047,118 +1019,6 @@ Heroes® of Might and Magic® III HD není v současnosti podporovaný!</transla
|
||||
<translation>Automaticky (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation>Připojit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation>Uživatelské jméno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation>Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation>Relace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation>Hráči</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation>Vyřešit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation>Nová hra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation>Načíst hru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation>Nová místnost</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation>Připojit se do místnosti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation>Připraven</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translation>Nesoulad modifikací</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation>Odejít</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation>Vyhodit hráče</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation>Hráči v místnosti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation>Odpojit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation>Bez problémů</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation>Nastavení místnosti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation>Název místnosti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation>Maximum hráčů</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation>Heslo (volitelné)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
@ -1172,25 +1032,20 @@ Heroes® of Might and Magic® III HD není v současnosti podporovaný!</transla
|
||||
<translation>Nastavení</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Help</source>
|
||||
<translation>Nápověda</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation>Editor map</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation>Spustit hru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation>Předsíň</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="57"/>
|
||||
<source>Mods</source>
|
||||
|
@ -668,59 +668,31 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1028,118 +1000,6 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
@ -1153,25 +1013,20 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="57"/>
|
||||
<source>Mods</source>
|
||||
|
@ -679,59 +679,31 @@ Mode exclusif plein écran - le jeu couvrira l"intégralité de votre écra
|
||||
<translation>Montrer l'intro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation>Actif</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation>Désactivé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation>Activé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation>Pas Installé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation>Installer</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1045,118 +1017,6 @@ Heroes® of Might and Magic® III HD n"est actuellement pas pris en charge
|
||||
<translation>Auto (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation>Nom d'utilisateur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation>Connecter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation>Serveur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation>Nouveau salon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation>Rejoindre le salon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation>Session</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation>Joueurs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation>Jeter le joueur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation>Joueurs dans le salon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation>Quitter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translation>Incohérence de mods</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation>Prêt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation>Résoudre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation>Nouvelle partie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation>Charger une partie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation>Déconnecter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation>Pas de problème détecté</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation>Paramètres de salon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation>Nom de salon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation>Maximum de joueurs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation>Mot de passe (optionnel)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
@ -1176,21 +1036,16 @@ Heroes® of Might and Magic® III HD n"est actuellement pas pris en charge
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation>Salle d'attente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<source>Help</source>
|
||||
<translation>Aide</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation>Éditeur de carte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation>Démarrer une partie</translation>
|
||||
</message>
|
||||
|
@ -681,59 +681,31 @@ Exklusiver Vollbildmodus - das Spiel bedeckt den gesamten Bildschirm und verwend
|
||||
<translation>Intro anzeigen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation>Aktiv</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation>Deaktiviert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation>Aktivieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation>Nicht installiert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation>Installieren</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Formular</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation>Benutzer in der Lobby</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation>Globaler Chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation>Nachricht eingeben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation>senden</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1047,118 +1019,6 @@ Heroes III: HD Edition wird derzeit nicht unterstützt!</translation>
|
||||
<translation>Auto (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation>Verbinden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation>Benutzername</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation>Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation>Sitzung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation>Spieler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation>Auflösen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation>Neues Spiel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation>Spiel laden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation>Neuer Raum</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation>Raum beitreten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation>Bereit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translation>Mods stimmen nicht überein</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation>Verlassen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation>Spieler kicken</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation>Spieler im Raum</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation>Verbindung trennen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation>Keine Probleme festgestellt</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation>Raumeinstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation>Raumname</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation>Maximale Spieler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation>Passwort (optional)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
@ -1178,21 +1038,16 @@ Heroes III: HD Edition wird derzeit nicht unterstützt!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation>Lobby</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<source>Help</source>
|
||||
<translation>Hilfe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation>Karteneditor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation>Spiel starten</translation>
|
||||
</message>
|
||||
|
@ -681,59 +681,31 @@ Pełny ekran klasyczny - gra przysłoni cały ekran uruchamiając się w wybrane
|
||||
<translation>Pokaż intro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation>Aktywny</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation>Wyłączone</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation>Włącz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation>Nie zainstalowano</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation>Zainstaluj</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation>Okno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation>Gracze w lobby</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation>Globalny czat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation>napisz wiadomość</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation>wyślij</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1047,118 +1019,6 @@ Heroes III: HD Edition nie jest obecnie wspierane!</translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation>Połącz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation>Nazwa użytkownika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation>Serwer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation>Sesja</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation>Gracze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation>Rozwiąż</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation>Nowa gra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation>Wczytaj grę</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation>Nowy pokój</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation>Dołącz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation>Zgłoś gotowość</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translation>Niezgodność modów</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation>Wyjdź</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation>Wyrzuć gracza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation>Gracze w pokoju</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation>Rozłącz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation>Nie znaleziono problemów</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation>Ustawienia pokoju</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation>Nazwa pokoju</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation>Maks. ilość graczy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation>Hasło (opcjonalnie)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
@ -1172,25 +1032,20 @@ Heroes III: HD Edition nie jest obecnie wspierane!</translation>
|
||||
<translation>Ustawienia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Help</source>
|
||||
<translation>Pomoc</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation>Edytor map</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation>Uruchom grę</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation>Lobby</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="57"/>
|
||||
<source>Mods</source>
|
||||
|
@ -668,59 +668,31 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
|
||||
<translation>Вступление</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation>Активен</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation>Отключен</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation>Включить</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation>Не установлен</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation>Установить</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1034,118 +1006,6 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
|
||||
<translation>Авто (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation>Подключиться</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation>Имя пользователя</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation>Сервер</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation>Сессия</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation>Игроки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation>Скорректировать</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation>Новая игра</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation>Загрузить игру</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation>Создать комнату</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation>Присоединиться к комнате</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation>Готово</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translation>Моды не совпадают</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation>Выйти</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation>Выгнать игрока</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation>Игроки в комнате</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation>Отключиться</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation>Проблем не обнаружено</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation>Настройки комнаты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation>Название</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation>Максимум игроков</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation>Пароль (не обязательно)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
@ -1159,25 +1019,20 @@ Heroes® of Might and Magic® III HD is currently not supported!</source>
|
||||
<translation>Параметры</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation>Редактор карт</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation>Играть</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation>Лобби</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="57"/>
|
||||
<source>Mods</source>
|
||||
|
@ -668,59 +668,31 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
|
||||
<translation>Idioma de los datos de Heroes III.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation>Activado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation>Desactivado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation>Activar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation>No Instalado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation>Instalar</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1034,118 +1006,6 @@ Ten en cuenta que para usar VCMI debes ser dueño de los archivos de datos origi
|
||||
<translation>Automático (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation>Conectar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation>Nombre de usuario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation>Servidor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation>Sesión</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation>Jugadores</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation>Resolver</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation>Nueva partida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation>Cargar partida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation>Nueva sala</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation>Unirse a la sala</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation>Listo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translation>No coinciden los mods</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation>Salir</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation>Expulsar jugador</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation>Jugadores en la sala</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation>Desconectar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation>No se han detectado problemas</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation>Configuración de la sala</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation>Nombre de la sala</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation>Jugadores máximos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation>Contraseña (opcional)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
@ -1159,25 +1019,20 @@ Ten en cuenta que para usar VCMI debes ser dueño de los archivos de datos origi
|
||||
<translation>Configuración</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation>Editor de Mapas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation>Iniciar juego</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation>Sala de Espera</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="57"/>
|
||||
<source>Mods</source>
|
||||
|
@ -681,59 +681,31 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
|
||||
<translation>Вступні відео</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation>Активні</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation>Деактивований</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation>Активувати</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation>Не встановлено</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation>Встановити</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation>Гравців у лобі</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation>Загальний чат</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation>введіть повідомлення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation>Відправити</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1047,118 +1019,6 @@ Heroes® of Might and Magic® III HD наразі не підтримуєтьс
|
||||
<translation>Авто (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation>Підключитися</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation>Ім'я користувача</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation>Сервер</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation>Сесія</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation>Гравці</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation>Розв'язати</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation>Нова гра</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation>Завантажити гру</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation>Створити кімнату</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation>Приєднатися до кімнати</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation>Готовність</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translation>Модифікації, що не збігаються</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation>Вийти з кімнати</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation>Виключити гравця</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation>Гравці у кімнаті</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation>Від'єднатися</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation>Проблем не виявлено</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation>Налаштування кімнати</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation>Назва кімнати</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation>Максимум гравців</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation>Пароль (за бажанням)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
@ -1178,21 +1038,16 @@ Heroes® of Might and Magic® III HD наразі не підтримуєтьс
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation>Лобі</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<source>Help</source>
|
||||
<translation>Допомога</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation>Редактор мап</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation>Грати</translation>
|
||||
</message>
|
||||
|
@ -674,59 +674,31 @@ Toàn màn hình riêng biệt - Trò chơi chạy toàn màn hình và dùng đ
|
||||
<translation>Hiện thị giới thiệu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="450"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="448"/>
|
||||
<source>Active</source>
|
||||
<translation>Bật</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="455"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="453"/>
|
||||
<source>Disabled</source>
|
||||
<translation>Tắt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="456"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="454"/>
|
||||
<source>Enable</source>
|
||||
<translation>Bật</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="461"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="459"/>
|
||||
<source>Not Installed</source>
|
||||
<translation>Chưa cài đặt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="462"/>
|
||||
<location filename="../settingsView/csettingsview_moc.cpp" line="460"/>
|
||||
<source>Install</source>
|
||||
<translation>Cài đặt</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Chat</name>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="14"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="40"/>
|
||||
<source>Users in lobby</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="50"/>
|
||||
<source>Global chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="104"/>
|
||||
<source>type you message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/chat_moc.ui" line="111"/>
|
||||
<source>send</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>FirstLaunchView</name>
|
||||
<message>
|
||||
@ -1040,118 +1012,6 @@ Hiện tại chưa hỗ trợ Heroes® of Might and Magic® III HD!</translation
|
||||
<translation>Tự động (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Lobby</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="42"/>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="403"/>
|
||||
<source>Connect</source>
|
||||
<translation>Kết nối</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="29"/>
|
||||
<source>Username</source>
|
||||
<translation>Tên đăng nhập</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="59"/>
|
||||
<source>Server</source>
|
||||
<translation>Máy chủ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="173"/>
|
||||
<source>Session</source>
|
||||
<translation>Phiên</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="178"/>
|
||||
<source>Players</source>
|
||||
<translation>Người chơi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="268"/>
|
||||
<source>Resolve</source>
|
||||
<translation>Phân tích</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="280"/>
|
||||
<source>New game</source>
|
||||
<translation>Tạo mới</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="287"/>
|
||||
<source>Load game</source>
|
||||
<translation>Tải lại</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="128"/>
|
||||
<source>New room</source>
|
||||
<translation>Tạo phòng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="138"/>
|
||||
<source>Join room</source>
|
||||
<translation>Vào phòng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="261"/>
|
||||
<source>Ready</source>
|
||||
<translation>Sẵn sàng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="244"/>
|
||||
<source>Mods mismatch</source>
|
||||
<translation>Bản sửa đổi chưa giống</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="237"/>
|
||||
<source>Leave</source>
|
||||
<translation>Rời khỏi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="210"/>
|
||||
<source>Kick player</source>
|
||||
<translation>Mời ra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.ui" line="230"/>
|
||||
<source>Players in the room</source>
|
||||
<translation>Người chơi trong phòng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="370"/>
|
||||
<source>Disconnect</source>
|
||||
<translation>Thoát</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobby_moc.cpp" line="463"/>
|
||||
<source>No issues detected</source>
|
||||
<translation>Không có vấn đề</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LobbyRoomRequest</name>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="17"/>
|
||||
<source>Room settings</source>
|
||||
<translation>Cài đặt phòng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="32"/>
|
||||
<source>Room name</source>
|
||||
<translation>Tên phòng</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="42"/>
|
||||
<source>Maximum players</source>
|
||||
<translation>Số người chơi tối đa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../lobby/lobbyroomrequest_moc.ui" line="97"/>
|
||||
<source>Password (optional)</source>
|
||||
<translation>Mật khẩu (tùy chọn)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
@ -1165,25 +1025,20 @@ Hiện tại chưa hỗ trợ Heroes® of Might and Magic® III HD!</translation
|
||||
<translation>Cài đặt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="207"/>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="276"/>
|
||||
<location filename="../mainwindow_moc.ui" line="226"/>
|
||||
<source>Map Editor</source>
|
||||
<translation>Tạo bản đồ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="329"/>
|
||||
<location filename="../mainwindow_moc.ui" line="279"/>
|
||||
<source>Start game</source>
|
||||
<translation>Chơi ngay</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="157"/>
|
||||
<source>Lobby</source>
|
||||
<translation>Sảnh</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow_moc.ui" line="57"/>
|
||||
<source>Mods</source>
|
||||
|
Loading…
Reference in New Issue
Block a user