Commit graph

84 commits

Author SHA1 Message Date
Kelsi
132a6ea3c9 Add /unstuckgy and 2GB terrain tile cache 2026-02-08 03:24:12 -08:00
Kelsi
6736ec328b Fix taxi flights, mounts, and movement recovery 2026-02-08 03:05:38 -08:00
Kelsi
0ce38cfb99 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
2026-02-08 00:59:40 -08:00
Kelsi
aa462fdb1f Fix buff bar updates, stair collision, and right-click aura cancel
Clear aura list on AURA_UPDATE_ALL so dismount/WMO transitions refresh
properly. Increase WMO step height thresholds to reduce stair blocking.
Change buff cancel to right-click and support dismount via buff bar.
2026-02-08 00:00:12 -08:00
Kelsi
7a2bb28dc0 Add arena/BG opcodes, fix mount speed, buff bar icons, and autorun cancel
Add 36 arena and battleground opcodes with handlers for queue status, team events, invites, and errors. Fix SMSG_FORCE_RUN_SPEED_CHANGE parsing (uint8 not uint32) and remove manual mount speed tracking. Buff bar now shows spell icons and is positioned below the minimap. Both mouse buttons cancel autorun.
2026-02-07 23:47:43 -08:00
Kelsi
394e1a3f31 Improve chat with local echo, slash shortcuts, colored input, and clickable URLs
Sent messages now appear immediately in chat log. Channel shortcuts (/s, /g, /p, /w, etc.) switch the chat type dropdown and color the input text to match. URLs in chat are clickable and open in the system browser.
2026-02-07 23:32:27 -08:00
Kelsi
6d719f2c52 Fix spirit healer resurrection with correct opcodes
Corrected death/resurrection opcode values (SMSG_SPIRIT_HEALER_CONFIRM=0x222, CMSG_SPIRIT_HEALER_ACTIVATE=0x21C, SMSG_RESURRECT_REQUEST=0x15B, CMSG_RESURRECT_RESPONSE=0x15C) and added resurrect dialog UI.
2026-02-07 23:12:24 -08:00
Kelsi
7cd7ac43a9 Refine resurrection flow 2026-02-07 21:47:14 -08:00
Kelsi
ff6155e2f3 Fix chat focus and spirit healer confirm 2026-02-07 21:12:54 -08:00
Kelsi
c9e7caa938 Improve spirit healer dialog and target UI 2026-02-07 21:00:05 -08:00
Kelsi
38c9fdad6b Improve targeting, minimap, and bridge collisions 2026-02-07 20:51:53 -08:00
Kelsi
0ebf4d1e5e Load emotes from DBC 2026-02-07 20:02:14 -08:00
Kelsi
e5c48dc9b7 Add gameobject interaction and taxi activation 2026-02-07 19:44:03 -08:00
Kelsi
866877cad0 Refine chat input focus behavior 2026-02-07 19:08:16 -08:00
Kelsi
8bdf0a2e79 Fix taxi node names and add flight path cost display
TaxiNodes.dbc name was read from field 6 (Korean locale, empty) instead
of field 5 (enUS). Add BFS-based cost computation from TaxiPath.dbc
edges and display gold/silver/copper next to each destination.
2026-02-07 19:04:15 -08:00
Kelsi
c156f3d390 Prevent jump spamming, disable face-target while mounted, remove auto-attack on right-click target 2026-02-07 18:57:27 -08:00
Kelsi
643611ee79 Add mount system and crash mouse-release handler
Render mount M2 model under player with seated animation, apply creature
skin textures, server-driven speed via SMSG_FORCE_RUN_SPEED_CHANGE, and
/dismount command. X11 XUngrabPointer on crash/hang to always release mouse.
2026-02-07 17:59:40 -08:00
Kelsi
3c2a728ec4 Add taxi system, fix WMO interior lighting, ramp collision, and /unstuck
- Implement flight path system: SMSG_SHOWTAXINODES parser, CMSG_ACTIVATETAXIEXPRESS builder, BFS multi-hop pathfinding through TaxiNodes/TaxiPath DBC, taxi destination UI, movement blocking during flight
- Fix WMO interiors too dark by boosting vertex color lighting multiplier
- Dim M2 objects inside WMO interiors (rugs, furniture) via per-instance interior detection
- Fix ramp/stair clipping by lowering wall collision normal threshold from 0.85 to 0.55
- Restore 5-sample cardinal footprint for ground detection to fix rug slipping
- Fix /unstuck command to reset player Z to WMO/terrain floor height
- Handle MSG_MOVE_TELEPORT_ACK and SMSG_TRANSFER_PENDING for hearthstone teleports
- Fix spawning under Stormwind with online-mode camera controller reset
2026-02-07 16:59:20 -08:00
Kelsi
7c9661472f Fix ramp clipping by tightening sweep steps, disable shadows by default
Sweep step size reduced from 1.0f back to 0.65f with max 3 steps (was 2)
to prevent clipping through ramps in Stormwind. All paths updated: follow,
free-fly, and swimming.

Shadows disabled by default in renderer, settings UI, and settings defaults.
2026-02-07 16:00:57 -08:00
Kelsi
751e6fdbde Fix vendor buying, improve character select, parallelize WMO culling, and optimize collision
- Fix CMSG_BUY_ITEM count field from uint8 to uint32 (server silently dropped undersized packets)
- Character select screen: remember last selected character, two-column layout with details panel, double-click to enter world, responsive window sizing
- Fix stale character data between logins by replacing static init flag with per-character GUID tracking
- Parallelize WMO visibility culling across worker threads (same pattern as M2 renderer)
- Optimize WMO collision queries with world-space group bounds early rejection in getFloorHeight, checkWallCollision, isInsideWMO, and raycastBoundingBoxes
- Reduce camera ground samples from 5 to 3 movement-aligned probes
- Add WMO interior lighting, unlit materials, vertex color multiply, and alpha blending support
2026-02-07 15:29:19 -08:00
Kelsi
05870c1f03 Only face target when in combat, not when selecting friendly NPCs 2026-02-07 13:56:58 -08:00
Kelsi
e234ac8d7a Prevent target deselection during camera rotation
Left-click targeting now fires on mouse-up with a drag threshold so
camera rotation drags no longer clear the current target.
2026-02-07 13:53:03 -08:00
kelsi davis
dfc4008ec7 Add Tier 8 commands: advanced targeting system
Targeting Commands:
- /cleartarget - Clear current target selection
- /targetenemy - Cycle to next hostile target (Tab equivalent)
- /targetfriend - Cycle to next friendly player
- /targetlasttarget, /targetlast - Switch to previous target
- /targetlastenemy - Cycle to previous hostile target
- /targetlastfriend - Cycle to previous friendly player
- /focus - Set current target as focus (client-side)
- /clearfocus - Clear focus target

Implementation:
- Added focusGuid and lastTargetGuid to GameHandler for client-side tracking
- setTarget() now automatically saves previous target to lastTargetGuid
- setFocus() and clearFocus() manage focus target with user feedback
- targetLastTarget() swaps current and previous targets
- targetEnemy() cycles through hostile entities (Units)
- targetFriend() cycles through friendly entities (Players)
- Both targetEnemy/targetFriend support reverse parameter for backwards cycling

Features:
- Focus targeting is client-side (no server opcode in 3.3.5a)
- Last target tracking happens automatically on every target change
- Enemy/friend cycling iterates through visible entities
- Provides user feedback when no targets available
- Tab-like cycling behavior with wraparound

All commands work entirely client-side for responsive targeting.
2026-02-07 13:44:36 -08:00
kelsi davis
bca3f64af6 Add Tier 7 commands: combat and trade
Combat Commands:
- /duel - Challenge target to a duel (CMSG_DUEL_PROPOSED 0x166)
- /trade - Open trade window with target (CMSG_INITIATE_TRADE 0x116)
- /startattack - Begin auto-attacking target
- /stopattack - Stop auto-attacking
- /stopcasting - Cancel current spell cast

New opcodes:
- CMSG_DUEL_PROPOSED (0x166) for initiating duels
- CMSG_INITIATE_TRADE (0x116) for starting trades

Packet builders:
- DuelProposedPacket - sends duel challenge to target GUID
- InitiateTradePacket - sends trade request to target GUID
- AttackSwingPacket, AttackStopPacket, CancelCastPacket reused from existing

Game handler methods:
- proposeDuel(targetGuid) - challenge target to duel
- initiateTrade(targetGuid) - open trade with target
- stopCasting() - cancel current spell cast (uses existing casting state)

All commands include validation for target selection and world state.
Removed duplicate packet class definitions from previous phases.
2026-02-07 13:36:50 -08:00
kelsi davis
d5b734a591 Add Tier 6 commands: party/raid management
- Uninvite/kick: /uninvite, /kick <player name> to remove player from party/raid
- Leave party: /leave, /leaveparty to leave current group
- Main tank: /maintank, /mt to set target as main tank (uses raid marker index 0)
- Main assist: /mainassist, /ma to set target as main assist (uses raid marker index 1)
- Clear markers: /clearmaintank, /clearmainassist to remove designations
- Raid info: /raidinfo to display raid lockouts and saved instances

Added opcodes:
- CMSG_REQUEST_RAID_INFO (0x2CD) for requesting raid lockout info
- SMSG_RAID_INSTANCE_INFO (0x2CC) for receiving raid info response

New packet builders:
- GroupUninvitePacket for removing players from group
- GroupDisbandPacket for leaving party (with logging)
- RaidTargetUpdatePacket for setting raid markers (main tank/assist)
- RequestRaidInfoPacket for querying raid lockouts

All commands include proper validation and user feedback.
2026-02-07 13:28:46 -08:00
kelsi davis
627c2fe0f6 Add Tier 5 commands: raid, officer, and battleground chat channels
- Raid chat: /raid, /rsay, /ra to send messages to raid
- Raid warning: /raidwarning, /rw to send raid warnings (leader/assist only)
- Officer chat: /officer, /o, /osay to send messages to officer channel
- Battleground chat: /battleground, /bg to send messages in battlegrounds
- Instance chat: /instance, /i to send messages to instance party (uses PARTY type)
- Added all new chat types to dropdown selector
- Added color coding for RAID_WARNING (red), RAID_LEADER, BATTLEGROUND, and BATTLEGROUND_LEADER
- Added chat type names for proper display in chat log
2026-02-07 13:21:15 -08:00
kelsi davis
41844ecc69 Add Tier 4 commands: AFK/DND status and whisper reply
- AFK commands: /afk, /away to toggle AFK status with optional message
- DND commands: /dnd, /busy to toggle DND (Do Not Disturb) with optional message
- Reply command: /r, /reply to respond to the last received whisper
- Track last whisper sender automatically when receiving whispers
- AFK and DND are mutually exclusive (activating one clears the other)
2026-02-07 13:17:01 -08:00
kelsi davis
85a7d66c4e Add Tier 3 commands: guild management, PvP, ready check, and duel forfeit
- Guild commands: /ginfo, /groster, /gmotd, /gpromote, /gdemote, /gquit, /ginvite
- PvP toggle: /pvp to toggle PvP flag
- Ready check system: /readycheck, /ready, /notready for group coordination
- Duel forfeit: /yield, /forfeit, /surrender to cancel active duels
2026-02-07 13:09:12 -08:00
kelsi davis
acef7ccbec Add Tier 2 utility commands: helm/cloak toggles, follow, and assist
Display Toggle Commands:
- Add /helm, /helmet, /showhelm to toggle helm visibility
- Add /cloak, /showcloak to toggle cloak visibility
- Track visibility state with helmVisible_ and cloakVisible_ flags
- Show confirmation messages: "Helm/Cloak is now visible/hidden"
- Use CMSG_SHOWING_HELM (0x2B9) and CMSG_SHOWING_CLOAK (0x2BA)

Follow Command:
- Add /follow and /f to follow current target
- Works with both players and NPCs
- Show "Now following [Name]" confirmation message
- Track follow target with followTargetGuid_ for future movement logic

Assist Command:
- Add /assist to target what your current target is targeting
- Read target's target from UNIT_FIELD_TARGET update fields (offset 6-7)
- Reconstruct 64-bit target GUID from two 32-bit field values
- Automatically switch your target to assist target
- Show helpful messages: "[Name] has no target" when appropriate
- Essential for combat coordination in groups

Implementation:
- Add ShowingHelmPacket and ShowingCloakPacket builders
- Add toggleHelm() and toggleCloak() methods with state management
- Add followTarget() for setting follow target
- Add assistTarget() with smart target field reading
- Use Entity::getFields() to access protected update fields
- Handle missing targets and invalid states gracefully
- All commands provide chat feedback
- Support multiple aliases for user convenience
2026-02-07 13:03:21 -08:00
kelsi davis
ec32286b0d Add Tier 1 utility commands: ignore, sit/stand, and logout
Ignore Commands:
- Add /ignore <name> to block messages from players
- Add /unignore <name> to unblock players
- Maintain ignoreCache for name-to-GUID lookups
- Show confirmation and error messages for ignore actions
- Use CMSG_ADD_IGNORE (0x6C) and CMSG_DEL_IGNORE (0x6D)

Sit/Stand/Kneel Commands:
- Add /sit to sit down (stand state 1)
- Add /stand to stand up (stand state 0)
- Add /kneel to kneel (stand state 8)
- Instant visual feedback with CMSG_STAND_STATE_CHANGE (0x101)
- Support for additional stand states (chair, sleep, etc.)

Logout Commands:
- Add /logout and /camp to initiate logout with countdown
- Add /cancellogout to cancel pending logout
- Show "Logging out in 20 seconds..." or "Logout complete" messages
- Track logout state with loggingOut_ flag to prevent duplicate requests
- Handle instant logout (in inn/city) vs countdown logout
- Use opcodes:
  - CMSG_LOGOUT_REQUEST (0x4B)
  - CMSG_LOGOUT_CANCEL (0x4E)
  - SMSG_LOGOUT_RESPONSE (0x4C)
  - SMSG_LOGOUT_COMPLETE (0x4D)

Implementation:
- Add LogoutRequestPacket, LogoutCancelPacket builders
- Add LogoutResponseParser to parse server logout responses
- Add StandStateChangePacket builder for stance changes
- Add AddIgnorePacket and DelIgnorePacket for ignore list management
- Add handleLogoutResponse() and handleLogoutComplete() handlers
- Add ignoreCache map and loggingOut_ state tracking
- All commands display feedback in chat window
2026-02-07 12:58:11 -08:00
kelsi davis
6f45c6ab69 Add /roll and friend management commands
Roll Command:
- Add /roll, /random, /rnd commands for random number generation
- Support multiple formats: /roll, /roll 100, /roll 1-100, /roll 10 50
- Broadcasts rolls to party/raid with "[Name] rolls X (min-max)" format
- Cap max roll at 10,000 to prevent abuse
- Use MSG_RANDOM_ROLL (0x1FB) bidirectional opcode

Friend Commands:
- Add /friend add <name>, /addfriend <name> to add friends
- Add /friend remove <name>, /removefriend <name> to remove friends
- Support aliases: /delfriend, /remfriend
- Maintain local friends cache mapping names to GUIDs for lookups
- Display status messages for all friend actions:
  - Friend added/removed confirmations
  - Friend online/offline notifications
  - Error messages (not found, already friends, list full, ignoring)

Social Opcodes:
- Add CMSG_ADD_FRIEND (0x69) and SMSG_FRIEND_STATUS (0x68)
- Add CMSG_DEL_FRIEND (0x6A) for friend removal
- Add CMSG_SET_CONTACT_NOTES (0x6B) for friend notes (future use)
- Add CMSG_ADD_IGNORE (0x6C) and CMSG_DEL_IGNORE (0x6D) (future use)

Implementation:
- Add RandomRollPacket builder and RandomRollParser for roll data
- Add AddFriendPacket and DelFriendPacket builders
- Add FriendStatusParser to handle server friend status updates
- Add friendsCache map to store friend name-to-GUID mappings
- Add handleRandomRoll() and handleFriendStatus() packet handlers
- Comprehensive slash command parsing with multiple formats and aliases
2026-02-07 12:51:30 -08:00
kelsi davis
f9c4cbddee Add server info commands: /time, /played, and /who
- Add CMSG_QUERY_TIME (0x1CE) and SMSG_QUERY_TIME_RESPONSE (0x1CF) opcodes
- Add CMSG_REQUEST_PLAYED_TIME (0x1CC) and SMSG_PLAYED_TIME (0x1CD) opcodes
- Add CMSG_WHO (0x062) and SMSG_WHO (0x063) opcodes
- Implement /time command to query and display server time
- Implement /played command to show total and level playtime statistics
- Implement /who [name] command to list online players with level and guild
- Add packet builders: QueryTimePacket, RequestPlayedTimePacket, WhoPacket
- Add response parsers for all three server info packet types
- Add handlers that format and display responses in chat as system messages
- Format played time as "X days, Y hours, Z minutes" for readability
- Format server time as "YYYY-MM-DD HH:MM:SS" for readability
2026-02-07 12:43:32 -08:00
kelsi davis
8b8e32e716 Add /inspect command to view player equipment
- Add CMSG_INSPECT (0x114) and SMSG_INSPECT_RESULTS (0x115) opcodes
- Implement InspectPacket builder for sending inspect requests
- Add inspectTarget() method to GameHandler with validation
- Add /inspect slash command in chat system
- Validate target is a player before sending inspect request
- Show helpful error messages for invalid inspect attempts
- Display confirmation message when inspect request is sent
2026-02-07 12:37:13 -08:00
kelsi davis
4da8c75af4 Add whisper support and slash command chat system
- Add WHISPER to chat type dropdown with target name field
- Implement comprehensive slash command parsing for all chat channels
- Support /w, /whisper, /tell, /t for whispers (with or without target name)
- Add /s, /y, /p, /g shortcuts for say, yell, party, guild
- Auto-fill whisper target field when switching to WHISPER with player targeted
- Allow /w <message> to whisper currently targeted player
- Add helpful error messages for invalid whisper usage
- Maintain backward compatibility with existing /logout and /invite commands
2026-02-07 12:30:36 -08:00
kelsi davis
545cfbbc0e Upgrade to C++20 and fix all compilation warnings
- Upgrade from C++17 to C++20
- Remove unused helper functions (selectSpawnPreset, parseVec3Csv, parseYawPitchCsv)
- Mark unused parameters with [[maybe_unused]] attribute
- Remove unused variables (nameColor, currentRace, steppingUp, steppingDown, awayFromWallMotion)
- Fix all -Wunused-* warnings

Build now completes with zero warnings.
2026-02-07 11:43:37 -08:00
kelsi davis
352d179aaa Fix compilation errors from single-player removal
- Rename spRace_, spGender_, spClass_ to playerRace_, playerGender_, playerClass_
- Remove swingTimer_ reference (server-side combat only)
- Remove teleporter panel UI and all references
- Remove T key binding for teleporter

Build now completes successfully with zero errors.
2026-02-07 11:26:49 -08:00
kelsi davis
180b78d106 Fix compilation errors from single-player removal
- Fixed corrupted header (removed orphaned code fragment)
- Restored NPC callbacks needed for online animations
  - NpcDeathCallback, NpcRespawnCallback, NpcSwingCallback
  - These were incorrectly removed as "SP-only" but are used for animations in online mode
- Removed calls to deleted methods:
  - getItemTemplateName, getItemTemplateQuality (used fallback in loot window)
  - notifyInventoryChanged, notifyEquipmentChanged (SP persistence markers)
- Removed hearthstone single-player handling (now uses server)

All online features preserved. Code should now compile.
2026-02-07 00:00:06 -08:00
kelsi davis
99d5f9a33a Remove single-player mode to focus on multiplayer
Removed all single-player/offline mode functionality:
- Removed ~2,200 lines of SQLite database code
- Removed 11 public SP methods from GameHandler
- Removed SP member variables and state flags
- Removed SP UI elements (auth screen button, game settings)
- Removed SQLite3 build dependency
- Deleted docs/single-player.md
- Updated documentation (README, FEATURES, CHANGELOG)

Files modified:
- src/game/game_handler.cpp: 2,852 lines (down from 4,921)
- include/game/game_handler.hpp: Removed SP API
- src/core/application.cpp/hpp: Removed startSinglePlayer()
- src/ui/*: Removed SP UI logic
- CMakeLists.txt: Removed SQLite3

All online multiplayer features preserved and tested.
2026-02-06 23:52:16 -08:00
Kelsi
5cc3d9645c Fix vendor buying and add quest turn-in flow
CMSG_BUY_ITEM was missing the trailing uint8 bag field, causing the
server to silently drop undersized packets. Add handlers for
SMSG_QUESTGIVER_REQUEST_ITEMS and SMSG_QUESTGIVER_OFFER_REWARD with
UI windows for quest completion and reward selection.
2026-02-06 21:50:15 -08:00
Kelsi
848f419ac4 Fix spell cast error messages, action bar drag-drop, and player name display
- Rewrite SpellCastResult enum to match AzerothCore 3.3.5a values (was misaligned, showing wrong error messages like "Not while trading" instead of "Unit not in front")
- Fix spellbook-to-action-bar drag-drop by using ImGuiHoveredFlags_AllowWhenBlockedByActiveItem for cross-window hover detection
- Fix player frame showing wrong character name by looking up activeCharacterGuid instead of always using characters[0]
- Clear playerNameCache on disconnect to prevent stale names across sessions
2026-02-06 21:25:35 -08:00
Kelsi
d4d5a22685 Fix spellbook drag-drop onto action bar by detecting mouse release over slot 2026-02-06 20:36:29 -08:00
Kelsi
37d6298b72 Fix action bar click-to-cast and add spellbook drag-and-drop
Left-click on action bar slots now casts spells/uses items instead of starting a drag. Right-click-drag rearranges slots. Spells can be dragged from the spellbook directly onto the action bar, replacing the old "Assign to" button row.
2026-02-06 20:27:01 -08:00
Kelsi
4e2cf0af8e Add UI opacity slider to settings window
Adds an Interface section with a UI Opacity slider (20-100%) that controls the transparency of all ImGui UI elements via the global style alpha.
2026-02-06 20:19:39 -08:00
Kelsi
e6a80c68c1 Add quest markers (! and ?) above NPCs and on minimap
Parse SMSG_QUESTGIVER_STATUS and SMSG_QUESTGIVER_STATUS_MULTIPLE packets to track per-NPC quest status, render yellow/gray ! and ? markers in 3D world space above NPC heads with distance-based scaling, and show corresponding dots on the minimap.
2026-02-06 20:10:10 -08:00
Kelsi
0a26eef154 Send CMSG_LOOT_MONEY for online gold looting and replace action bar right-click removal with drag-to-ground 2026-02-06 19:24:44 -08:00
Kelsi
affb5f4f04 Add item support for action bar with drag-from-inventory and key/click use
Allow picking up consumables from inventory and dropping them onto action bar
slots. Items display their icon or name, can be used via click or hotkey
(1-0,-,=), and cleared with right-click. Adds useItemById to find and use
items from backpack by item ID.
2026-02-06 19:17:35 -08:00
Kelsi
fdc614902b Fix online interactions, UI, and inventory sync 2026-02-06 18:34:45 -08:00
Kelsi
7436420cd1 Add player death handling, race-aware faction hostility, and all-race texture support
- Death screen with "Release Spirit" button sends CMSG_REPOP_REQUEST
- Detect player death/resurrection via health updates (VALUES and CREATE)
- Faction hostility map now built per-character race instead of hardcoded Human
- CharSections.dbc texture lookup enabled for all races (was Human-only)
- Fallback texture paths use race folder names instead of hardcoded Human
- Player name in unit frame is clickable for self-targeting
2026-02-06 17:27:20 -08:00
Kelsi
81166346ef Fix respawned corpse movement, faction hostility, and add WoW-canonical mob level colors
Reset NPC animation to idle when health goes from 0 to >0 (respawn), prevent
dead NPCs from being moved by server movement packets. Fix faction hostility
to check factionGroup Monster bit and individual enemy arrays, not just
enemyGroup. Add level-based mob coloring: grey (no XP), green (easy), yellow
(even), orange (hard), red (very hard) for target frame and selection circle.
2026-02-06 16:47:07 -08:00
Kelsi
2aa8187562 Fix camera orbit, deselect, chat formatting, loot/vendor bugs, critter hostility, and character screen
Smooth idle camera orbit without jump at loop boundary, click empty space to
deselect target, auto-target when attacked, fix critter hostility so neutral
factions aren't flagged red, add armor/stats to item templates, fix loot
iterator invalidation, show item template names as fallback, position drop
confirmation at cursor, remove [SYSTEM] chat prefix, show NPC names in monster
say/yell, and prevent auto-login on character select screen.
2026-02-06 16:40:44 -08:00