fix(Core/Vehicle): no longer eject and overwrite an existing passenger#25591
fix(Core/Vehicle): no longer eject and overwrite an existing passenger#25591sogladev wants to merge 1 commit intoazerothcore:masterfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adjusts vehicle boarding logic to avoid forcibly ejecting an existing passenger when attempting to add a new passenger to an occupied seat.
Changes:
- When the requested seat is occupied, search for the next empty seat instead of ejecting the current occupant.
- If no empty seat exists (or the computed seat cannot be found), fail the add operation.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| int8 nextSeatId = GetNextEmptySeat(seatId, true); | ||
| if (nextSeatId == -1) | ||
| return false; | ||
|
|
There was a problem hiding this comment.
The code switches the seat iterator to nextSeatId, but does not update seatId. If later logic in AddPassenger uses the seatId parameter (e.g., for packets, bookkeeping, or aura/vehicle state), this can desync the selected seat from the recorded seat id. Fix by updating seatId = nextSeatId; (or consistently using seat->first from this point onward) so the chosen seat id and iterator remain aligned.
| seatId = nextSeatId; |
| if (nextSeatId == -1) | ||
| return false; |
There was a problem hiding this comment.
Using a raw -1 sentinel for an invalid seat id makes the intent harder to read and duplicates knowledge about GetNextEmptySeat’s contract. Prefer a named constant (e.g., INVALID_SEAT_ID) or an std::optional<int8>-style pattern (if feasible in this codebase) to make the failure condition self-documenting.
| int8 nextSeatId = GetNextEmptySeat(seatId, true); | ||
| if (nextSeatId == -1) | ||
| return false; |
There was a problem hiding this comment.
The PR description says it's more sensible to eject a passenger before overwriting their seat, which implies preserving a force-eject flow but fixing ordering. The code change instead removes ejection entirely and fails when no empty seats remain. Please update the PR description to match the implemented behavior (or adjust the implementation if the intended behavior is still to allow boarding by ejecting under some conditions).
Changes Proposed:
This PR proposes changes to:
followup on:
Current vehicle logic allows a player to board a vehicle by ejecting an existing passenger. It's more sensible to eject a passenger before overwriting their seat.
Unsure which core logic or scripts rely on this force-eject behavior.
AI-assisted Pull Requests
Important
While the use of AI tools when preparing pull requests is not prohibited, contributors must clearly disclose when such tools have been used and specify the model involved.
Contributors are also expected to fully understand the changes they are submitting and must be able to explain and justify those changes when requested by maintainers.
GPT-5.4 to triage
Issues Addressed:
SOURCE:
The changes have been validated through:
Tests Performed:
This PR has been:
How to Test the Changes:
Known Issues and TODO List:
How to Test AzerothCore PRs
When a PR is ready to be tested, it will be marked as [WAITING TO BE TESTED].
You can help by testing PRs and writing your feedback here on the PR's page on GitHub. Follow the instructions here:
http://www.azerothcore.org/wiki/How-to-test-a-PR
REMEMBER: when testing a PR that changes something generic (i.e. a part of code that handles more than one specific thing), the tester should not only check that the PR does its job (e.g. fixing spell XXX) but especially check that the PR does not cause any regression (i.e. introducing new bugs).
For example: if a PR fixes spell X by changing a part of code that handles spells X, Y, and Z, we should not only test X, but we should test Y and Z as well.