[Server][Game][Arrows] Properly notify clients when deleting arrows on card move and transform into

Took 15 minutes
This commit is contained in:
Lukas Brübach 2026-05-24 11:16:03 +02:00
parent 98c00c55ed
commit b44f927817

View file

@ -397,6 +397,9 @@ void Server_AbstractPlayer::processMoveCard(GameEventStorage &ges,
} }
} }
for (int j : arrowsToDelete) { for (int j : arrowsToDelete) {
Event_DeleteArrow event;
event.set_arrow_id(j);
ges.enqueueGameEvent(event, player->getPlayerId());
player->deleteArrow(j); player->deleteArrow(j);
} }
} }
@ -1132,12 +1135,18 @@ Server_AbstractPlayer::cmdCreateToken(const Command_CreateToken &cmd, ResponseCo
targetItem = card; targetItem = card;
} }
if (sendGameEvent) { if (sendGameEvent) {
Event_CreateArrow _event; const int oldId = arrow->getId();
ServerInfo_Arrow *arrowInfo = _event.mutable_arrow_info(); changedArrowIds.append(oldId);
changedArrowIds.append(arrow->getId());
int id = player->newArrowId(); Event_DeleteArrow deleteEvent;
arrow->setId(id); deleteEvent.set_arrow_id(oldId);
arrowInfo->set_id(id); ges.enqueueGameEvent(deleteEvent, player->getPlayerId());
Event_CreateArrow createEvent;
ServerInfo_Arrow *arrowInfo = createEvent.mutable_arrow_info();
const int newId = player->newArrowId();
arrow->setId(newId);
arrowInfo->set_id(newId);
arrowInfo->set_start_player_id(player->getPlayerId()); arrowInfo->set_start_player_id(player->getPlayerId());
arrowInfo->set_start_zone(startCard->getZone()->getName().toStdString()); arrowInfo->set_start_zone(startCard->getZone()->getName().toStdString());
arrowInfo->set_start_card_id(startCard->getId()); arrowInfo->set_start_card_id(startCard->getId());
@ -1151,7 +1160,7 @@ Server_AbstractPlayer::cmdCreateToken(const Command_CreateToken &cmd, ResponseCo
arrowInfo->set_target_card_id(arrowTargetCard->getId()); arrowInfo->set_target_card_id(arrowTargetCard->getId());
} }
arrowInfo->mutable_arrow_color()->CopyFrom(arrow->getColor()); arrowInfo->mutable_arrow_color()->CopyFrom(arrow->getColor());
ges.enqueueGameEvent(_event, player->getPlayerId()); ges.enqueueGameEvent(createEvent, player->getPlayerId());
} }
} }
for (int id : changedArrowIds) { for (int id : changedArrowIds) {