Add transport support, gameobject queries, and fix item use

- Add setInstancePosition() to M2Renderer and WMORenderer for moving
  transport instances at runtime
- Detect UPDATEFLAG_TRANSPORT on gameobjects and track transport GUIDs
- Parse player-on-transport state from movement blocks
- Wire transport move callback in Application to update render positions
- Implement CMSG_GAMEOBJECT_QUERY / SMSG_GAMEOBJECT_QUERY_RESPONSE so
  gameobjects display proper names instead of "Unknown"
- Add name/entry fields to GameObject entity class
- Fix CMSG_USE_ITEM packet: remove extra uint8 that shifted the item
  GUID by one byte, breaking hearthstone and all item usage
- Remove redundant CMSG_LOOT after CMSG_GAMEOBJECT_USE for chests
- Show PvP enabled/disabled state in toggle message
- Relax WMO ramp wall-collision step-up check to allow walking on
  gentle ramps where floor rise per step is under 0.1 units
- Add M2 fallback when WMO group files fail to load for gameobjects
- Handle re-creation of existing gameobject render instances by
  updating position instead of silently ignoring
This commit is contained in:
Kelsi 2026-02-08 00:59:40 -08:00
parent 5610faa958
commit 0ce38cfb99
12 changed files with 391 additions and 65 deletions

View file

@ -453,16 +453,16 @@ void CameraController::update(float deltaTime) {
if (wmoRenderer) {
glm::vec3 adjusted;
if (wmoRenderer->checkWallCollision(stepPos, candidate, adjusted)) {
// Before blocking, check if there's a floor at the
// destination above current feet (stair step-up).
// Before blocking, check if there's a walkable floor at the
// destination (stair step-up or ramp continuation).
float feetZ = stepPos.z;
float probeZ = feetZ + 2.5f;
auto floorH = wmoRenderer->getFloorHeight(
candidate.x, candidate.y, probeZ);
bool isStair = floorH &&
*floorH > feetZ + 0.1f &&
*floorH <= feetZ + 1.6f;
if (!isStair) {
bool walkable = floorH &&
*floorH >= feetZ - 0.5f &&
*floorH <= feetZ + 1.6f;
if (!walkable) {
candidate.x = adjusted.x;
candidate.y = adjusted.y;
}