Merge remote-tracking branch 'refs/remotes/Cockatrice/master' into mod_notify_onbanwarn
This commit is contained in:
commit
00afe74a3b
164 changed files with 165 additions and 249 deletions
48
README.md
48
README.md
|
@ -2,10 +2,16 @@
|
|||
|
||||
---
|
||||
|
||||
**Table of Contents** [Cockatrice](#cockatrice) | [Get Involved] (#get-involved-) | [Community](#community-resources) | [Translation](#translation-status-) | [Building](#building--) | [Running](#running) | [License](#license-)
|
||||
**Table of Contents** [Cockatrice](#cockatrice) | [Downloads](#downloads) | [Get Involved] (#get-involved-) | [Community](#community-resources) | [Translation](#translation-status-) | [Building](#building--) | [Running](#running) | [License](#license-)
|
||||
|
||||
---
|
||||
|
||||
<br><pre>
|
||||
<b>If you're getting started ⇢ [view our webpage](https://cockatrice.github.io/)</b><br>
|
||||
<b>If you're trying to get support or suggest changes ⇢ [file an issue](https://github.com/Cockatrice/Cockatrice/issues/new)</b>
|
||||
</pre><br>
|
||||
|
||||
|
||||
# Cockatrice
|
||||
|
||||
Cockatrice is an open-source multiplatform software for playing card games,
|
||||
|
@ -13,12 +19,15 @@ such as Magic: The Gathering, over a network. It is fully client-server based
|
|||
to prevent any kind of cheating, though it supports single-player games without
|
||||
a network interface as well. Both client and server are written in Qt, supporting both Qt4 and Qt5.<br>
|
||||
|
||||
# Downloads
|
||||
We offer a download for both the last stable version (recommended for users) and the last development version. The development version contains the last implemented features, but can be unstable and unsuitable for gaming.
|
||||
Downloads are hosted on [BinTray](https://bintray.com/).
|
||||
|
||||
- Latest stable version download: [  ](https://bintray.com/cockatrice/Cockatrice/Cockatrice/_latestVersion)
|
||||
- Latest development (unstable) version download: [  ](https://bintray.com/cockatrice/Cockatrice/Cockatrice-git/_latestVersion)
|
||||
# Downloads
|
||||
|
||||
We offer a download for all full releases and the latest development version (recommended). Full releases are checkpoints with major feature or UI enhancements between them, but are infrequently updated. The development version contains the most recently added features and bugfixes, but can be more unstable. Downloads for development versions are updated automatically with every change.
|
||||
Downloads are hosted on [BinTray](https://bintray.com/cockatrice/Cockatrice).
|
||||
|
||||
- Latest development version (recommended): [  ](https://bintray.com/cockatrice/Cockatrice/Cockatrice-git/_latestVersion#files)
|
||||
- Latest full release: [  ](https://bintray.com/cockatrice/Cockatrice/Cockatrice/_latestVersion#files)
|
||||
|
||||
|
||||
# Get Involved [](https://gitter.im/Cockatrice/Cockatrice)
|
||||
|
||||
|
@ -26,21 +35,20 @@ Chat with the Cockatrice developers on Gitter. Come here to talk about the appli
|
|||
|
||||
|
||||
# Community Resources
|
||||
- [Cockatrice Official Site](https://cockatrice.github.io)
|
||||
- [Cockatrice Official Wiki](https://github.com/Cockatrice/Cockatrice/wiki)
|
||||
- [reddit r/Cockatrice](http://reddit.com/r/cockatrice)
|
||||
- [Woogerworks](http://www.woogerworks.com) / [Chickatrice] (http://www.chickatrice.net/) / [Poixen](http://www.poixen.com/) (incomplete Serverlist)<br>
|
||||
- [reddit r/Cockatrice](https://reddit.com/r/cockatrice)
|
||||
|
||||
|
||||
# Translation Status [](https://www.transifex.com/projects/p/cockatrice/)
|
||||
|
||||
Cockatrice uses Transifex for translations. You can help us bring Cockatrice/Oracle to your language or edit single wordings by clicking on the associated charts below.<br>
|
||||
Our [project page](https://www.transifex.com/projects/p/cockatrice/) offers a detailed overview for contributors.
|
||||
Cockatrice uses Transifex for translations. You can help us bring Cockatrice and Oracle to your language or just edit single wordings right from within your browser by simply visiting our [Transifex project page](https://www.transifex.com/projects/p/cockatrice/).<br>
|
||||
|
||||
Language statistics for `Cockatrice` *(on the left)* and `Oracle` *(on the right)*:
|
||||
| Cockatrice | Oracle |
|
||||
|:-:|:-:|
|
||||
| [](https://www.transifex.com/projects/p/cockatrice/) | [](https://www.transifex.com/projects/p/cockatrice/) |
|
||||
|
||||
[](https://www.transifex.com/projects/p/cockatrice/resource/cockatrice/) [](https://www.transifex.com/projects/p/cockatrice/resource/oracle/)
|
||||
|
||||
Check out our [Translator FAQ](https://github.com/Cockatrice/Cockatrice/wiki/Translation-FAQ) for more information!<br>
|
||||
Check out our [Translator FAQ](https://github.com/Cockatrice/Cockatrice/wiki/Translation-FAQ) for more information about contributing!<br>
|
||||
|
||||
|
||||
# Building [](https://travis-ci.org/Cockatrice/Cockatrice) [](https://ci.appveyor.com/project/Daenyth/cockatrice/branch/master)
|
||||
|
@ -48,15 +56,15 @@ Check out our [Translator FAQ](https://github.com/Cockatrice/Cockatrice/wiki/Tra
|
|||
**Detailed compiling instructions are on the Cockatrice wiki under [Compiling Cockatrice](https://github.com/Cockatrice/Cockatrice/wiki/Compiling-Cockatrice)**
|
||||
|
||||
Dependencies:
|
||||
- [Qt](http://qt-project.org/)
|
||||
- [protobuf](http://code.google.com/p/protobuf/)
|
||||
- [CMake](http://www.cmake.org/)
|
||||
- [Qt](https://www.qt.io/developers/)
|
||||
- [protobuf](https://github.com/google/protobuf)
|
||||
- [CMake](https://www.cmake.org/)
|
||||
|
||||
Oracle can optionally use zlib to load zipped files:
|
||||
- [zlib](http://www.zlib.net/)
|
||||
- [zlib](http://www.zlib.net/) (no https!)
|
||||
|
||||
The server requires an additional dependency when compiled under Qt4:
|
||||
- [libgcrypt](http://www.gnu.org/software/libgcrypt/)
|
||||
- [libgcrypt](https://www.gnu.org/software/libgcrypt/)
|
||||
|
||||
|
||||
To compile:
|
||||
|
@ -99,7 +107,7 @@ The following flags can be passed to `cmake`:
|
|||
`servatrice` is the server<br>
|
||||
|
||||
|
||||
# License [](https://github.com/Cockatrice/Cockatrice/blob/master/COPYING)
|
||||
# License [](https://github.com/Cockatrice/Cockatrice/blob/master/COPYING)
|
||||
|
||||
Cockatrice is free software, licensed under the [GPLv2](https://github.com/Cockatrice/Cockatrice/blob/master/COPYING).
|
||||
|
||||
|
|
|
@ -157,8 +157,7 @@ void SetList::guessSortKeys()
|
|||
}
|
||||
}
|
||||
|
||||
CardInfo::CardInfo(CardDatabase *_db,
|
||||
const QString &_name,
|
||||
CardInfo::CardInfo(const QString &_name,
|
||||
bool _isToken,
|
||||
const QString &_manacost,
|
||||
const QString &_cmc,
|
||||
|
@ -176,8 +175,7 @@ CardInfo::CardInfo(CardDatabase *_db,
|
|||
const QStringMap &_customPicURLs,
|
||||
MuidMap _muIds
|
||||
)
|
||||
: db(_db),
|
||||
name(_name),
|
||||
: name(_name),
|
||||
isToken(_isToken),
|
||||
sets(_sets),
|
||||
manacost(_manacost),
|
||||
|
@ -188,6 +186,7 @@ CardInfo::CardInfo(CardDatabase *_db,
|
|||
colors(_colors),
|
||||
relatedCards(_relatedCards),
|
||||
reverseRelatedCards(_reverseRelatedCards),
|
||||
setsNames(),
|
||||
upsideDownArt(_upsideDownArt),
|
||||
loyalty(_loyalty),
|
||||
customPicURLs(_customPicURLs),
|
||||
|
@ -200,6 +199,8 @@ CardInfo::CardInfo(CardDatabase *_db,
|
|||
|
||||
for (int i = 0; i < sets.size(); i++)
|
||||
sets[i]->append(this);
|
||||
|
||||
refreshCachedSetNames();
|
||||
}
|
||||
|
||||
CardInfo::~CardInfo()
|
||||
|
@ -249,6 +250,21 @@ void CardInfo::addToSet(CardSet *set)
|
|||
{
|
||||
set->append(this);
|
||||
sets << set;
|
||||
|
||||
refreshCachedSetNames();
|
||||
}
|
||||
|
||||
void CardInfo::refreshCachedSetNames()
|
||||
{
|
||||
// update the cached list of set names
|
||||
QStringList setList;
|
||||
for (int i = 0; i < sets.size(); i++)
|
||||
{
|
||||
if(sets[i]->getEnabled())
|
||||
setList << sets[i]->getShortName();
|
||||
}
|
||||
setsNames = setList.join(", ");
|
||||
|
||||
}
|
||||
|
||||
QString CardInfo::simplifyName(const QString &name) {
|
||||
|
@ -330,10 +346,7 @@ CardDatabase::CardDatabase(QObject *parent)
|
|||
connect(settingsCache, SIGNAL(cardDatabasePathChanged()), this, SLOT(loadCardDatabase()));
|
||||
connect(settingsCache, SIGNAL(tokenDatabasePathChanged()), this, SLOT(loadTokenDatabase()));
|
||||
|
||||
loadCardDatabase();
|
||||
loadTokenDatabase();
|
||||
|
||||
noCard = new CardInfo(this);
|
||||
noCard = new CardInfo();
|
||||
}
|
||||
|
||||
CardDatabase::~CardDatabase()
|
||||
|
@ -506,7 +519,7 @@ void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml, bool tokens)
|
|||
}
|
||||
|
||||
if (isToken == tokens) {
|
||||
addCard(new CardInfo(this, name, isToken, manacost, cmc, type, pt, text, colors, relatedCards, reverseRelatedCards, upsideDown, loyalty, cipt, tableRow, sets, customPicURLs, muids));
|
||||
addCard(new CardInfo(name, isToken, manacost, cmc, type, pt, text, colors, relatedCards, reverseRelatedCards, upsideDown, loyalty, cipt, tableRow, sets, customPicURLs, muids));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -517,7 +530,7 @@ CardInfo *CardDatabase::getCardFromMap(CardNameMap &cardMap, const QString &card
|
|||
return cardMap.value(cardName);
|
||||
|
||||
if (createIfNotFound) {
|
||||
CardInfo *newCard = new CardInfo(this, cardName, true);
|
||||
CardInfo *newCard = new CardInfo(cardName, true);
|
||||
newCard->addToSet(getSet(CardDatabase::TOKENS_SETNAME));
|
||||
cardMap.insert(cardName, newCard);
|
||||
return newCard;
|
||||
|
@ -619,23 +632,22 @@ LoadStatus CardDatabase::loadCardDatabase(const QString &path, bool tokens)
|
|||
emit cardListChanged();
|
||||
}
|
||||
|
||||
if (!tokens) {
|
||||
if (!tokens)
|
||||
loadStatus = tempLoadStatus;
|
||||
qDebug() << "loadCardDatabase(): Path = " << path << " Status = " << loadStatus;
|
||||
}
|
||||
|
||||
qDebug() << "loadCardDatabase(): Path =" << path << "Tokens =" << tokens << "Status =" << loadStatus;
|
||||
|
||||
return tempLoadStatus;
|
||||
}
|
||||
|
||||
void CardDatabase::loadCardDatabase()
|
||||
LoadStatus CardDatabase::loadCardDatabase()
|
||||
{
|
||||
loadCardDatabase(settingsCache->getCardDatabasePath(), false);
|
||||
return loadCardDatabase(settingsCache->getCardDatabasePath(), false);
|
||||
}
|
||||
|
||||
void CardDatabase::loadTokenDatabase()
|
||||
LoadStatus CardDatabase::loadTokenDatabase()
|
||||
{
|
||||
loadCardDatabase(settingsCache->getTokenDatabasePath(), true);
|
||||
return loadCardDatabase(settingsCache->getTokenDatabasePath(), true);
|
||||
}
|
||||
|
||||
void CardDatabase::loadCustomCardDatabases(const QString &path)
|
||||
|
|
|
@ -60,8 +60,6 @@ public:
|
|||
class CardInfo : public QObject {
|
||||
Q_OBJECT
|
||||
private:
|
||||
CardDatabase *db;
|
||||
|
||||
QString name;
|
||||
|
||||
/*
|
||||
|
@ -84,6 +82,7 @@ private:
|
|||
QStringList reverseRelatedCards;
|
||||
// the cards thare are reverse-related to me
|
||||
QStringList reverseRelatedCardsToMe;
|
||||
QString setsNames;
|
||||
bool upsideDownArt;
|
||||
int loyalty;
|
||||
QStringMap customPicURLs;
|
||||
|
@ -92,9 +91,9 @@ private:
|
|||
int tableRow;
|
||||
QString pixmapCacheKey;
|
||||
|
||||
void refreshCachedSetNames();
|
||||
public:
|
||||
CardInfo(CardDatabase *_db,
|
||||
const QString &_name = QString(),
|
||||
CardInfo(const QString &_name = QString(),
|
||||
bool _isToken = false,
|
||||
const QString &_manacost = QString(),
|
||||
const QString &_cmc = QString(),
|
||||
|
@ -113,14 +112,15 @@ public:
|
|||
MuidMap muids = MuidMap()
|
||||
);
|
||||
~CardInfo();
|
||||
const QString &getName() const { return name; }
|
||||
inline const QString &getName() const { return name; }
|
||||
inline const QString &getSetsNames() const { return setsNames; }
|
||||
const QString &getSimpleName() const { return simpleName; }
|
||||
bool getIsToken() const { return isToken; }
|
||||
const SetList &getSets() const { return sets; }
|
||||
const QString &getManaCost() const { return manacost; }
|
||||
const QString &getCmc() const { return cmc; }
|
||||
const QString &getCardType() const { return cardtype; }
|
||||
const QString &getPowTough() const { return powtough; }
|
||||
inline const QString &getManaCost() const { return manacost; }
|
||||
inline const QString &getCmc() const { return cmc; }
|
||||
inline const QString &getCardType() const { return cardtype; }
|
||||
inline const QString &getPowTough() const { return powtough; }
|
||||
const QString &getText() const { return text; }
|
||||
const QString &getPixmapCacheKey() const { return pixmapCacheKey; }
|
||||
const int &getLoyalty() const { return loyalty; }
|
||||
|
@ -229,12 +229,12 @@ public:
|
|||
bool hasDetectedFirstRun();
|
||||
void refreshCachedReverseRelatedCards();
|
||||
public slots:
|
||||
LoadStatus loadCardDatabase(const QString &path, bool tokens = false);
|
||||
LoadStatus loadCardDatabase();
|
||||
LoadStatus loadTokenDatabase();
|
||||
void loadCustomCardDatabases(const QString &path);
|
||||
void emitCardListChanged();
|
||||
private slots:
|
||||
void loadCardDatabase();
|
||||
void loadTokenDatabase();
|
||||
LoadStatus loadCardDatabase(const QString &path, bool tokens = false);
|
||||
signals:
|
||||
void cardListChanged();
|
||||
void cardAdded(CardInfo *card);
|
||||
|
|
|
@ -28,26 +28,16 @@ int CardDatabaseModel::columnCount(const QModelIndex &/*parent*/) const
|
|||
|
||||
QVariant CardDatabaseModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
return QVariant();
|
||||
if ((index.row() >= cardList.size()) || (index.column() >= CARDDBMODEL_COLUMNS))
|
||||
return QVariant();
|
||||
if (role != Qt::DisplayRole && role != SortRole)
|
||||
if (!index.isValid() ||
|
||||
index.row() >= cardList.size() ||
|
||||
index.column() >= CARDDBMODEL_COLUMNS ||
|
||||
(role != Qt::DisplayRole && role != SortRole))
|
||||
return QVariant();
|
||||
|
||||
CardInfo *card = cardList.at(index.row());
|
||||
switch (index.column()){
|
||||
case NameColumn: return card->getName();
|
||||
case SetListColumn: {
|
||||
QStringList setList;
|
||||
const QList<CardSet *> &sets = card->getSets();
|
||||
for (int i = 0; i < sets.size(); i++)
|
||||
{
|
||||
if(sets[i]->getEnabled())
|
||||
setList << sets[i]->getShortName();
|
||||
}
|
||||
return setList.join(", ");
|
||||
}
|
||||
case SetListColumn: return card->getSetsNames();
|
||||
case ManaCostColumn: return role == SortRole ?
|
||||
QString("%1%2").arg(card->getCmc(), 4, QChar('0')).arg(card->getManaCost()) :
|
||||
card->getManaCost();
|
||||
|
@ -139,8 +129,30 @@ CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent)
|
|||
filterTree = NULL;
|
||||
setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||
setSortCaseSensitivity(Qt::CaseInsensitive);
|
||||
|
||||
loadedRowCount = 0;
|
||||
}
|
||||
|
||||
bool CardDatabaseDisplayModel::canFetchMore(const QModelIndex & index) const
|
||||
{
|
||||
return loadedRowCount < sourceModel()->rowCount(index);
|
||||
}
|
||||
|
||||
void CardDatabaseDisplayModel::fetchMore(const QModelIndex & index)
|
||||
{
|
||||
int remainder = sourceModel()->rowCount(index) - loadedRowCount;
|
||||
int itemsToFetch = qMin(100, remainder);
|
||||
|
||||
beginInsertRows(QModelIndex(), loadedRowCount, loadedRowCount+itemsToFetch-1);
|
||||
|
||||
loadedRowCount += itemsToFetch;
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
int CardDatabaseDisplayModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
return qMin(QSortFilterProxyModel::rowCount(parent), loadedRowCount);
|
||||
}
|
||||
|
||||
bool CardDatabaseDisplayModel::lessThan(const QModelIndex &left, const QModelIndex &right) const {
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ private:
|
|||
QString searchTerm;
|
||||
QSet<QString> cardNameSet, cardTypes, cardColors;
|
||||
FilterTree *filterTree;
|
||||
int loadedRowCount;
|
||||
public:
|
||||
CardDatabaseDisplayModel(QObject *parent = 0);
|
||||
void setFilterTree(FilterTree *filterTree);
|
||||
|
@ -54,9 +55,13 @@ public:
|
|||
void setCardTypes(const QSet<QString> &_cardTypes) { cardTypes = _cardTypes; invalidate(); }
|
||||
void setCardColors(const QSet<QString> &_cardColors) { cardColors = _cardColors; invalidate(); }
|
||||
void clearFilterAll();
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
protected:
|
||||
bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
|
||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
|
||||
|
||||
bool canFetchMore(const QModelIndex &parent) const;
|
||||
void fetchMore(const QModelIndex &parent);
|
||||
private slots:
|
||||
void filterTreeChanged();
|
||||
};
|
||||
|
|
|
@ -145,7 +145,7 @@ void DlgEditTokens::actAddToken()
|
|||
if (name.isEmpty())
|
||||
return;
|
||||
|
||||
CardInfo *card = new CardInfo(cardDatabaseModel->getDatabase(), name, true);
|
||||
CardInfo *card = new CardInfo(name, true);
|
||||
card->addToSet(cardDatabaseModel->getDatabase()->getSet(CardDatabase::TOKENS_SETNAME));
|
||||
card->setCardType("Token");
|
||||
cardDatabaseModel->getDatabase()->addCard(card);
|
||||
|
|
|
@ -163,12 +163,15 @@ int main(int argc, char *argv[])
|
|||
#else
|
||||
const QString dataDir = QStandardPaths::standardLocations(QStandardPaths::DataLocation).first();
|
||||
#endif
|
||||
|
||||
if (!db->getLoadSuccess())
|
||||
if (!db->loadCardDatabase(dataDir + "/cards.xml"))
|
||||
settingsCache->setCardDatabasePath(dataDir + "/cards.xml");
|
||||
if (settingsCache->getTokenDatabasePath().isEmpty())
|
||||
|
||||
if (settingsCache->getCardDatabasePath().isEmpty() ||
|
||||
db->loadCardDatabase() != Ok)
|
||||
settingsCache->setCardDatabasePath(dataDir + "/cards.xml");
|
||||
|
||||
if (settingsCache->getTokenDatabasePath().isEmpty() ||
|
||||
db->loadTokenDatabase() != Ok)
|
||||
settingsCache->setTokenDatabasePath(dataDir + "/tokens.xml");
|
||||
|
||||
if (!QDir(settingsCache->getDeckPath()).exists() || settingsCache->getDeckPath().isEmpty()) {
|
||||
QDir().mkpath(dataDir + "/decks");
|
||||
settingsCache->setDeckPath(dataDir + "/decks");
|
||||
|
|
|
@ -58,7 +58,8 @@ void ReplayTimelineWidget::paintEvent(QPaintEvent * /* event */)
|
|||
painter.fillPath(path, Qt::black);
|
||||
|
||||
const QColor barColor = QColor::fromHsv(120, 255, 255, 100);
|
||||
painter.fillRect(0, 0, (width() - 1) * currentTime / maxTime, height() - 1, barColor);
|
||||
quint64 w = (quint64)(width() - 1) * (quint64) currentTime / maxTime;
|
||||
painter.fillRect(0, 0, w, height() - 1, barColor);
|
||||
}
|
||||
|
||||
QSize ReplayTimelineWidget::sizeHint() const
|
||||
|
|
|
@ -367,17 +367,16 @@ void TabDeckEditor::createCentralFrame()
|
|||
databaseDisplayModel = new CardDatabaseDisplayModel(this);
|
||||
databaseDisplayModel->setSourceModel(databaseModel);
|
||||
databaseDisplayModel->setFilterKeyColumn(0);
|
||||
databaseDisplayModel->sort(0, Qt::AscendingOrder);
|
||||
|
||||
databaseView = new QTreeView();
|
||||
databaseView->setObjectName("databaseView");
|
||||
databaseView->setFocusProxy(searchEdit);
|
||||
databaseView->setModel(databaseDisplayModel);
|
||||
databaseView->setUniformRowHeights(true);
|
||||
databaseView->setRootIsDecorated(false);
|
||||
databaseView->setAlternatingRowColors(true);
|
||||
databaseView->setSortingEnabled(true);
|
||||
databaseView->sortByColumn(0, Qt::AscendingOrder);
|
||||
databaseView->setModel(databaseDisplayModel);
|
||||
databaseView->resizeColumnToContents(0);
|
||||
connect(databaseView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoLeft(const QModelIndex &, const QModelIndex &)));
|
||||
connect(databaseView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actAddCard()));
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
message AdminCommand {
|
||||
enum AdminCommandType {
|
||||
UPDATE_SERVER_MESSAGE = 1000;
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
enum CardAttribute {
|
||||
AttrTapped = 1;
|
||||
AttrAttacking = 2;
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
syntax = "proto2";
|
||||
message color {
|
||||
optional uint32 r = 1;
|
||||
optional uint32 g = 2;
|
||||
optional uint32 b = 3;
|
||||
optional uint32 a = 4;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_AttachCard {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
|
||||
message Command_ChangeZoneProperties {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_Concede {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
import "color.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
import "color.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_CreateToken {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_DeckDel {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_DeckDelDir {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_DeckDownload {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_DeckList {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_DeckNewDir {
|
||||
|
@ -8,4 +7,4 @@ message Command_DeckNewDir {
|
|||
optional string path = 1;
|
||||
optional string dir_name = 2;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_DeckSelect {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_DeckUpload {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_DelCounter {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_DeleteArrow {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_DrawCards {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_DumpZone {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_FlipCard {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_GameSay {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_IncCardCounter {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_IncCounter {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_KickFromGame {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_LeaveGame {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message CardToMove {
|
||||
optional sint32 card_id = 1 [default = -1];
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_Mulligan {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_NextTurn {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_ReadyStart {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_ReplayDeleteMatch {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_ReplayDownload {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_ReplayList {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
|
||||
message Command_ReplayModifyMatch {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_RevealCards {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_RollDie {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_SetActivePhase {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
import "card_attributes.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_SetCardCounter {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_SetCounter {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_SetSideboardLock {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
import "move_card_to_zone.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_Shuffle {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_StopDumpZone {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_commands.proto";
|
||||
message Command_UndoDraw {
|
||||
extend GameCommand {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_commands.proto";
|
||||
import "game_commands.proto";
|
||||
import "room_commands.proto";
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event_context.proto";
|
||||
|
||||
message Context_Concede {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event_context.proto";
|
||||
|
||||
message Context_ConnectionStateChanged {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event_context.proto";
|
||||
|
||||
message Context_DeckSelect {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event_context.proto";
|
||||
|
||||
message Context_MoveCard {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event_context.proto";
|
||||
|
||||
message Context_Mulligan {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event_context.proto";
|
||||
|
||||
message Context_PingChanged {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event_context.proto";
|
||||
|
||||
message Context_ReadyStart {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event_context.proto";
|
||||
|
||||
message Context_SetSideboardLock {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event_context.proto";
|
||||
|
||||
message Context_UndoDraw {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
import "serverinfo_user.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_AttachCard {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_ChangeZoneProperties {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
|
||||
message Event_ConnectionClosed {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
import "serverinfo_arrow.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
import "serverinfo_counter.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_CreateToken {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_DelCounter {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_DeleteArrow {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_DestroyCard {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
import "serverinfo_card.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_DumpZone {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_FlipCard {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_GameClosed {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_GameHostChanged {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
import "serverinfo_game.proto";
|
||||
import "serverinfo_gametype.proto";
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_GameSay {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
import "serverinfo_player.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
import "serverinfo_playerproperties.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "room_event.proto";
|
||||
import "serverinfo_user.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_Kicked {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_Leave {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "room_event.proto";
|
||||
|
||||
message Event_LeaveRoom {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "room_event.proto";
|
||||
import "serverinfo_game.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
import "serverinfo_room.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_MoveCard {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
|
||||
message Event_NotifyUser {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
import "serverinfo_playerproperties.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
|
||||
message Event_RemoveFromList {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
import "serverinfo_replay_match.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
import "serverinfo_card.proto";
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "game_event.proto";
|
||||
|
||||
message Event_RollDie {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "room_event.proto";
|
||||
|
||||
message Event_RoomSay {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
import "serverinfo_user.proto";
|
||||
import "serverinfo_room.proto";
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
|
||||
message Event_ServerIdentification {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
syntax = "proto2";
|
||||
import "session_event.proto";
|
||||
|
||||
message Event_ServerMessage {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue