Current source code now resides at https://github.com/emagi/eq2emu/
Changelog is based originally on Open Source Code Base for EQ2Emu at https://git.eq2emu.com/devn00b/EQ2EMu/ (to be defunct)
Capricorn stage, which was started in late December 2020 is included in the 2021 page as it bleeds into January 2021.
1. AddMasterTitle(titleName, isPrefix) -- adds a new title all characters can use, isPrefix is 0 or 1, 1 for prefix, 0 for suffix
- returns master title id (sint32) -- if the title already exists, then it re-uses that id
2. AddCharacterTitle(Spawn, titleName) -- adds a character title to a spawn if not already present
- returns character title index id (sint32)
3. SetCharacterTitleSuffix(Spawn, titleName) -- sets the players suffix name, must have title already, otherwise AddCharacterTitle needs to be called first
4. SetCharacterTitlePrefix(Spawn, titleName) -- sets the players suffix name, must have title already, otherwise AddCharacterTitle needs to be called first
5. ResetCharacterTitleSuffix(Spawn) - empties title suffix
6. ResetCharacterTitlePrefix(Spawn) - empties title prefix
- Crash Fix also included: RemoveSpawn better controlled outside spawn
- Crash Fix for harvesting
- /waypoint command now can have a target for GM's (100+ status)
Same update above also included:
Multi-Version Map/Region Support:
- DoF has specific maps loaded that are different than AoM in some zones, same with regions
- We distinguish clients by version and send them the appropriate grid ids
- This also creates multi-zone cache of map/regions shared between multiple instances/zones of the same filename
New commands:
- /reload regionscripts - purges cached region scripts, lua re-fetches as called
- /spawn details regions - tests if player is in any regions and gives details about regions (location, name, script to use, etc.)
- /spawn details inlava - extends to 'lava' and 'death' regions, pretty much anything that is not normal water
- /gm regiondebug [on/off] - gives debug information as player moves in game world about their interaction with regions
LUA Functions:
- Update: SetCurrentHP(Spawn,value) now supports value of 0
New:
- InLava(Spawn) returns true/false
- DamageSpawn(Attacker,Victim,type,dmg_type,low_damage,high_damage,spell_name,crit_mod,is_tick,no_calcs,ignore_attacker)
- IsInvulnerable(Spawn) returns true/false
- Glow paths / waypoints support - includes "/waypoint x y z" command
- Food/Drink in DoF client now functioning
- Spell error message fixes for DoF client
- Items now allow archetypes to use an item if all classes in the archetype are allowed
- Class skills increase with level
- Various number of bug fixes
- LUA Functions Added/Modified
SetVisualFlag(Spawn)
SetInfoFlag(Spawn)
HasQuestRewardItem(Quest,ItemID)
HasSpell(Spawn,SpellID,Tier) - player only
SendWaypoints(Spawn) - player only
AddWaypoint(Spawn, name, type) - add a waypoint to player (Spawn) by the spawns name
RemoveWaypoint(Spawn, name, type) - remove a waypoint to player (Spawn) by the spawns name
HasSkill(Spawn, SkillID) - player only
AddSkill(Spawn, SkillID, CurrentVal, MaxVal, more_to_add)
RemoveSkill(Spawn, SkillID, more_to_remove)
IncreaseSkillCapsByType(Spawn, SkillType, Amount, more_to_increase)
expanded lua functions:
AddSpellBookEntry(Spawn,SpellID,Tier, add_silently(bool), add_to_hotbar(bool))
- InWater(spawn)
- HasControlEffect(spawn, type)
- GetBaseAggroRadius(spawn)
- GetAggroRadius(spawn)
- SetAggroRadius(spawn, distance, override) - override true sets base to this, otherwise its temporary and doesn't impact GetBaseAggroRadius * SetDeity(spawn, value)
- New/Updated slash commands
- “/flag" command default can now be triggered on self by any player to refresh admin_status changes in DB, no longer log out and log back in!
- "/spawn details inwater" can tell if your target is in water or not
- LUA SetAlignment(Spawn,value)/GetAlignment(Spawn) added.
- CastSpell LUA function 5th argument cast_time optional, allows overriding cast time.
- GetSpell(spellid,tier) - GetSpellData(Spell,"fieldnamestring") - SetSpellData(Spell,"fieldnamestring",value) - CastCustomSpell(Spell,Caster,Target)
- Spell "remove" function now provides a string based reason for the removal, canceled, purged, expired, pet_death, dead
- SpawnSet and SpawnHeal arguments added SpawnSet(NPC, "skin_color", "255 0 0", false, true) - SpellHeal(Spawn, "heal", min, max, NPC, 0, 0, "New Spell Name")
- /pet command crash fix
- Memory leak / buffer overflow fix for Packet structure re-use
- Stability fixes related to making/sending/removing spawns
- Watchdog behavior to monitor zones and if zone process is in a stuck state attempt force shutdown in zone, linux will also attempt to cancel threads as a last effort (which may fail and crash, but this is intentional to allow a forced restart since the world server would be in a bad state and refusing players into that zone)
- Multiple stability fixes related to spells, preventing deadlocks and hard crashes + additional change 1 + additional changelog 2
- Unexpected resizing of NPCs while in combat should no longer occur
- Crash fix on threat transfer abilities
- ModelViewer / MapEditor updated to resolve coordinate/rotational issues with certain objects
- Fixed WorldServer crashing when clients zone while in group, rejoining group after zoning also functional, lastly protection in group code to prevent other reload/unexpected behavior when clients are in different zones.
- New starting skills / abilities can be added on the fly versus requiring new characters to be created
- Fixed examine spells not working, also spell examine display popups won't occur when hovering over knowledge book
- Camera Shake works on Classic/DoF clients, identified direction (0 = up/down, 1 = all direction shake) PerformCameraShake(Player, 0.5, 1) - second argument intensity is 0.01 - 1.0
- Disabled risky relay code in Login Server
- LUA SendMessage now supports integer based channel numbers, by default it only hardcoded red/yellow text strings for the color argument eg. SendMessage(Spawn, "this is the message", 3) - where 3 would be RED text
- /spawn remove command syntax updated to by default remove the spawn instead of requiring /spawn remove 1
- Login Server updated to allow older clients to login .. this is on-going and not complete ('classic' CD release client and DoF January 2006 client)
- LUA Function player only function added: AddItem(Spawn, ItemID, Quantity=1) - gives access to quantity option to give stacks of an item
- Updated LUA player function to include quantity option (default 1) RemoveItem(Spawn,ItemID) -> RemoveItem(Spawn,ItemID,Quantity=1)
- Model Viewer: Disabled more flora features in the ModelViewer, should generate cleaner maps/navpaths as a result
- Model Viewer: Fixed certain zones not loading in ModelViewer
- Login Server now disconnects on bad password/version (this allows subsequent login attempts a chance to succeed, like a correct password, versus trying to connect to LS..)
- Login Server Cleanup (Bad logging, pointless old keystroke commands, welcome banner, etc.)
- Transporters now supports 'Flight' transport type, aka flying mounts within the same map system used for bells.
- LUA Functions SendTransporters(NPC, Spawn, TransportID) SetTemporaryTransportID(Spawn,ID) and GetTemporaryTransportID(Spawn) added
- Merchants now have a min level and max level requirement that can be set
- Transporters now have expansion_flag, min_client_version and max_client_version to restrict the transporter usage on these properties
-- This means all zones but lavastorm sport the old release Luclin moon that is shards broken apart versus the fused together one.
function prespawn(NPC)
AddSpawnProximity(NPC,2530015,0,15,"InRange","OutRange")
end
AddSpawnProximity(NPC,locationid,1,15,"InRange","OutRange")
AddSpawnProximity(NPC,spawnid,0,15,"InRange","OutRange")
- Fix encounter AE spells to work against the entire encounter
- Fix for LUA crashes when out of order StartConversation (first) and AddConversation (second). Also fixed potential memory leak on CreateConversation.
- GroundSpawns now inherit grid ids from the map if available
- LUA functions added CheckLOS(spawn,target) and CheckLOSByCoordinates(spawn,x,y,z)
- Line of Sight will only be valid if a map is loaded for the zone. This means los functions will return 'true' if map is not loaded.
- Player Position Crash Fix
- Combined Packets, Processing incoming packets, encryption logic now sharing the combined mutex to prevent desync/client crash/etc
- Proper locking on spawn list before sending new spawn data to client or spawn updates to client (caused a lot of corrupt data over the wire conflicting with spawn removal/other async activity).
- 'DatabaseNew' was not properly pinging MySQL server (this is different than async calls, this is a main thread DB instance). This eventually triggered the wait_timeout and crashed the WorldServer, DatabaseNew is now pinged beside the 'old' Database class in net.cpp
- LUA SetFollowTarget now supports a distance parameter SetFollowTarget(NPC, spawn, 5) will set a distance of 5 vs the default 6 combat range.
- Sequencing/Acking/Packet Writing netcode updated to try to resolve additional client communication issues.
- Playtest Server released
- Server deadlock fix with removing a spawn
- Async Database now has ping support on 10 second interval (same as normal db) -- avoid disconnections/reconnect requirements and weird connection errors (which were mapped)
- Chests can now be looted even after you /camped and logged back in. Tracked by character id instead of entity id.
- Linux re-integration with new map/navigation support
- Various 'silence'/desync crashes with the client
- NPCs now aggro on spells of any negative effect, not just damage (TODO: need hate values from spells specifically, not a base value)
- NPC speed settings introduced to allow proper runspeed / basespeed / snarespeed (needs further consolidation later)
- Fear implemented with navpath support (LUA scripts must properly set ControlEffect)
- Various netcode changes for stability with client, disabling overloading of packets for >255 size, removing restrictions on certain packet combination counts, etc.
- Various client crash fixes related to spawn info/visual/position packets
- Default spawn script applied to spawns who do not have one set, but one exists in the filesystem, warning logged
- Model Viewer mesh rotation fixes (fixes extend better navpath generation and map line of sight support)
- Groundspawns adhere to ground with mapping 'Z' technique
- Flying mobs designated with InitialState 49156, will not follow normal navpath rules unless line of sight lost to target
- The /itemsearch broker now allows searching by item ID
- Multiple position update changes to prevent 'skipping' behavior (roughly still one remaining)
- Various fixes to running back home after a NPC loses aggro, evading additional aggro until runback is complete.
- Fixed when a mob is killed/dead it stops its movement forward (was repeatedly moving in the same two positions)
- LUA 'aggro' function now called when mob initially aggroed to a player/other npc
- Model Viewer (EQ2 map exporter) fixes
- MovementLoop (normal mob pathing) vs aggro pathing conflict fixed
- Bulk Spawn Updates
- Client OutOfSession is now kicked straight to LoginServer (doesn't linger in worldserver)
- Fear spells now use navpath if available in the zone
- Root/Snare spells fixed on code side, Todo: LUA scripts to properly set/remove the ControlEffects
- Fixed logging to be properly started on world/login server (formatting/timestamp was not displayed on some initial log messages due to starting it later on)
- Server crash fix due to out of order 'prep' stage taking place after sending spawns
- Fixed encounter spells to impact entire encounter
- Fixed a bug with LoginServer account creation attempting to make a new account when existing account present
- Fixed /spawn combine save
- Disarm traps impact group members nearby
- Disarm traps rules added
- Map support and navigation pathing
- Character save moved to asynchronous (no longer hangs zoning)
- LUA logging improved to identify the script erroring out
- Reduced spell interruption rate
- Better sanity checks/logging for login_db.ini and world_db.ini
- Various deadlock (server hang/crash) fixes
- Added itemid in the results of /itemsearch broker
- /castspell [spellname] - search by spell name for id/tier. /castspell [spellid] (tier) - to cast a spell id, tier is optional (default 1)
- Fix to sustain NPC target when opening a door with 'use' command
- Fix client /loot command depops alive NPC
- Cross zone character properties (eg. GM abiltiies, flymode, speed x-zone)
- Fix crash of WorldServer on player /camp
- Indefinite loop in netcode fix (Crash of WorldServer)
- Merge with EQ2EMu main changes
- Fix Player Trade
- Porting of "Classic" Login Server to VS2019 from VS2010.
- Disabling of various expensive log messages to console.