mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-02 19:43:55 -07:00
[Game] [Arrows] Use arrowData/registry and generate unique server-side ids (#6973)
* [Game] [Arrows] Track creatorId, use arrowData in arrowItem, use registry, generate unique arrow id's on server side and delete-on-exist inserts. Took 2 minutes Took 1 minute * Fix emitting slot instead of signal. Took 15 minutes * Clear arrows locally in special circumstances i.e. teardown. Took 28 minutes --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
b6adc3cf69
commit
37945c1a72
19 changed files with 264 additions and 152 deletions
|
|
@ -92,26 +92,24 @@ void PlayerEventHandler::eventRollDie(const Event_RollDie &event)
|
|||
|
||||
void PlayerEventHandler::eventCreateArrow(const Event_CreateArrow &event)
|
||||
{
|
||||
const ArrowData data = ArrowData::fromProto(event.arrow_info());
|
||||
auto data = QSharedPointer<ArrowData>::create(ArrowData::fromProto(
|
||||
event.arrow_info(), player->getPlayerInfo()->getId(), player->getPlayerInfo()->getLocal()));
|
||||
|
||||
// Resolve names for logging
|
||||
const auto &playerList = player->getGame()->getPlayerManager()->getPlayers();
|
||||
PlayerLogic *startPlayer = playerList.value(data.startPlayerId);
|
||||
PlayerLogic *targetPlayer = playerList.value(data.targetPlayerId);
|
||||
PlayerLogic *startPlayer = playerList.value(data->startPlayerId);
|
||||
PlayerLogic *targetPlayer = playerList.value(data->targetPlayerId);
|
||||
|
||||
QString startCardName, targetCardName;
|
||||
if (startPlayer) {
|
||||
auto *zone = startPlayer->getZones().value(data.startZone);
|
||||
if (zone) {
|
||||
if (auto *card = zone->getCard(data.startCardId)) {
|
||||
if (auto *zone = startPlayer->getZones().value(data->startZone)) {
|
||||
if (auto *card = zone->getCard(data->startCardId)) {
|
||||
startCardName = card->getName();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!data.isPlayerTargeted() && targetPlayer) {
|
||||
auto *zone = targetPlayer->getZones().value(data.targetZone);
|
||||
if (zone) {
|
||||
if (auto *card = zone->getCard(data.targetCardId)) {
|
||||
if (!data->isPlayerTargeted() && targetPlayer) {
|
||||
if (auto *zone = targetPlayer->getZones().value(data->targetZone)) {
|
||||
if (auto *card = zone->getCard(data->targetCardId)) {
|
||||
targetCardName = card->getName();
|
||||
}
|
||||
}
|
||||
|
|
@ -119,16 +117,15 @@ void PlayerEventHandler::eventCreateArrow(const Event_CreateArrow &event)
|
|||
|
||||
emit player->arrowCreateRequested(data);
|
||||
|
||||
const bool validForLogging = !startCardName.isEmpty() && (data.isPlayerTargeted() || !targetCardName.isEmpty());
|
||||
|
||||
if (startPlayer && targetPlayer && validForLogging) {
|
||||
emit logCreateArrow(player, startPlayer, startCardName, targetPlayer, targetCardName, data.isPlayerTargeted());
|
||||
if (startPlayer && targetPlayer && !startCardName.isEmpty() &&
|
||||
(data->isPlayerTargeted() || !targetCardName.isEmpty())) {
|
||||
emit logCreateArrow(player, startPlayer, startCardName, targetPlayer, targetCardName, data->isPlayerTargeted());
|
||||
}
|
||||
}
|
||||
|
||||
void PlayerEventHandler::eventDeleteArrow(const Event_DeleteArrow &event)
|
||||
{
|
||||
emit player->arrowDeleted(event.arrow_id());
|
||||
emit player->arrowDeleted(player->getPlayerInfo()->getId(), event.arrow_id());
|
||||
}
|
||||
|
||||
void PlayerEventHandler::eventCreateToken(const Event_CreateToken &event)
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ PlayerLogic::~PlayerLogic()
|
|||
|
||||
void PlayerLogic::clear()
|
||||
{
|
||||
emit arrowsCleared();
|
||||
emit arrowsClearedLocally();
|
||||
|
||||
QMapIterator<QString, CardZoneLogic *> i(zones);
|
||||
while (i.hasNext()) {
|
||||
|
|
@ -116,7 +116,7 @@ void PlayerLogic::processPlayerInfo(const ServerInfo_Player &info)
|
|||
/* HandZone */
|
||||
ZoneNames::HAND};
|
||||
clearCounters();
|
||||
emit arrowsCleared();
|
||||
emit arrowsClearedLocally();
|
||||
|
||||
QMutableMapIterator<QString, CardZoneLogic *> zoneIt(zones);
|
||||
while (zoneIt.hasNext()) {
|
||||
|
|
@ -232,7 +232,8 @@ void PlayerLogic::processCardAttachment(const ServerInfo_Player &info)
|
|||
|
||||
const int arrowListSize = info.arrow_list_size();
|
||||
for (int i = 0; i < arrowListSize; ++i) {
|
||||
emit arrowCreateRequested(ArrowData::fromProto(info.arrow_list(i)));
|
||||
emit arrowCreateRequested(QSharedPointer<ArrowData>::create(
|
||||
ArrowData::fromProto(info.arrow_list(i), getPlayerInfo()->getId(), getPlayerInfo()->getLocal())));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -78,10 +78,10 @@ signals:
|
|||
void clearCustomZonesMenu();
|
||||
void addViewCustomZoneActionToCustomZoneMenu(QString zoneName);
|
||||
void resetTopCardMenuActions();
|
||||
void arrowCreateRequested(ArrowData data);
|
||||
void arrowDeleteRequested(int arrowId);
|
||||
void arrowDeleted(int arrowId);
|
||||
void arrowsCleared(); // fires on clear() and processPlayerInfo
|
||||
void arrowCreateRequested(QSharedPointer<ArrowData> data);
|
||||
void arrowDeleteRequested(int creatorId, int arrowId);
|
||||
void arrowDeleted(int creatorId, int arrowId);
|
||||
void arrowsClearedLocally(); // fires on clear() and processPlayerInfo
|
||||
|
||||
public slots:
|
||||
void setActive(bool _active);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue