From 648f028a6365ee75b6bce96386e2b2bb68964f78 Mon Sep 17 00:00:00 2001 From: ebbit1q Date: Wed, 12 Nov 2025 04:48:26 +0100 Subject: [PATCH] fix use of wrong parent when removing arrows for a player (#6308) --- .../network/server/remote/game/server_game.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.cpp b/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.cpp index 1479e04a2..647d1d078 100644 --- a/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.cpp +++ b/libcockatrice_network/libcockatrice/network/server/remote/game/server_game.cpp @@ -587,27 +587,26 @@ void Server_Game::removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_Abst // Also remove all arrows starting at one of his cards. This is necessary since players can create // arrows that start at another person's cards. for (Server_AbstractPlayer *anyPlayer : getPlayers().values()) { - QList arrows = anyPlayer->getArrows().values(); QList toDelete; - for (int i = 0; i < arrows.size(); ++i) { - Server_Arrow *arrow = arrows[i]; + for (auto *arrow : anyPlayer->getArrows().values()) { Server_Card *targetCard = qobject_cast(arrow->getTargetItem()); if (targetCard) { if (targetCard->getZone() != nullptr && targetCard->getZone()->getPlayer() == player) toDelete.append(arrow); - } else if (static_cast(arrow->getTargetItem()) == player) + } else if (arrow->getTargetItem() == player) { toDelete.append(arrow); + } // Don't use else here! It has to happen regardless of whether targetCard == 0. if (arrow->getStartCard()->getZone() != nullptr && arrow->getStartCard()->getZone()->getPlayer() == player) toDelete.append(arrow); } - for (int i = 0; i < toDelete.size(); ++i) { + for (auto *arrow : toDelete) { Event_DeleteArrow event; - event.set_arrow_id(toDelete[i]->getId()); - ges.enqueueGameEvent(event, player->getPlayerId()); + event.set_arrow_id(arrow->getId()); + ges.enqueueGameEvent(event, anyPlayer->getPlayerId()); - player->deleteArrow(toDelete[i]->getId()); + anyPlayer->deleteArrow(arrow->getId()); } } }