Changelog is based on Open Source Code Base for EQ2Emu at https://git.eq2emu.com/devn00b/EQ2EMu/
Capricorn Stage started in late Dec 2020 but falls into January 2021 as to keep the stage together it is included on this page.
Jan 19th 2021: Extended Capricorn Stage 2.0 to Jan 31st. Then a new monthly system will be used for versioning.
- Additional ghost map fixing with relation to SpawnState changes #2, changes #3
- Added SpawnState for sending/updating/removal of spawns, this is to prevent ghost map from occurring due to the multi-threaded nature of the WorldServer
- FaceTarget pausing and handling added, hard-coded 30s delay.
- HP reset only on runback, not for interactions with players
- Removal of unnecessary zone level spawn heading code (use case was fixing crashing world with a pet)
- Bad ‘slash’ ‘/’ command handling prevented with status restriction.
- House item placement updated to prevent sending move spawn packet too early, causing client to become the object/crash
- Crash fix on DeleteSpawns (called on zone shutdown, reload of spawns) assure spawn is removed from spawn_list completely
- Fixed a bug (SPGrid 0) with the grid retrieval against an X/Z coordinate. This was causing unclickable/hidden/flickering ground spawns, objects, spawns, etc and other strange behavior with the world.
- Objects no longer fixed to ground
- Crash fix on item destroy for item that did not exist
- Crash fix on maintained effects
- Fixed naming of “persist_through_death” also attached to crash fix below with casters removal
- Crash fix, Casters removed from spell when the player/client is not available
- Better handling of SpawnScriptTimers so as to not interfere with the memory space
- Fixed low level network issue accepting a undersized or 0 byte buffer
- LUA StopTimer(Spawn, “timer_name”) added, LUA fixes continue regarding stack cleanup
- SpellProcess stability fixes (watchdog/crash prevention), Crash fix on LUA SetSpeed call
- Quest crash fix on defective quest design
- Added a Deleted Spawn state so as to remove certain spawns from being sent out to clients zoning in/entering an area when we haven't completely removed the spawn from world (it is essentially hidden from players)
- resolved spells with duration until cancel blinking after zoning
- hard coded activity status to solid/transport flags on lifts/boats resolves falling through lifts when moving on them
- stats clearing when calculating bonuses on entity
- Player equipment mutex lock protection (watchdog/crash prevention)
- Fix GetFactionAmount to be Signed Integer
- Crash fix spell removal on zone shutdown when player already left
- PlayerItems mutex fixes (watchdog/crash prevention)
- Movement Location mutex fixes (watchdog/crash prevention)
- Can use /reload luasystem and /reload spells without causing a crash
- Log messages at spell/warning level for NPC casting when it doesn't have enough mana/concentration/etc
- Fixed a set of ASan crashes: #370, #371, #372, #373
- - healthchanged function for SpawnScripts can now return a modified health. healthchanged also now receives a third argument, Damage eg function healthchanged(Spawn, Attacker, Damage)
-1 = immune (hit damage is set to 0).
0 (or no return) = default
damage 1 or higher = new damage (before wards/procs take place)
2. Fixed locking issues with player quests when calling /reload quests
3. AddQuestStep now supports spawn ids as arguments 9+ (after the usableitemid) -- this will also set the quest flag icon that you would similarily see in a QuestStepKill noting a Spawn is involved with the quest
4. Fixed ruleset error message to only display if we don't get a ruleset id
5. Fixed a ASam crash in spawn_update_packet, didn't like our null_byte use. Changed it to not bother since we memset the data, it is already a 0x00 byte no reason to memcpy it in.
- loot_global enhancement, loot_tier added
- Additional 700 range item_stats supported
#define ITEM_STAT_SPELL_DAMAGE 700
#define ITEM_STAT_HEAL_AMOUNT 701
#define ITEM_STAT_SPELL_AND_HEAL 702
#define ITEM_STAT_COMBAT_ART_DAMAGE 703
#define ITEM_STAT_SPELL_AND_COMBAT_ART_DAMAGE 704
#define ITEM_STAT_TAUNT_AMOUNT 705
#define ITEM_STAT_TAUNT_AND_COMBAT_ART_DAMAGE 706
#define ITEM_STAT_ABILITY_MODIFIER 707
3. Added check for default_ruleset_id entry in the variables table, otherwise rules are hardcoded
- Fix #367 - Put additional protection to rest of player_quests calls, using read/write locks now also
- Fix #363 - Added rule R_Loot, SkipLootGrayMob, default is on "1". Set to "0" to allow chests and 'non body' or 'non quest' drops from gray mobs
- Fix #362 - Removed charge based items when charges depleted
- Fix #255 - Added World Time LUA Functions GetWorldTimeYear(), GetWorldTimeMonth(), GetWorldTimeHour(), GetWorldTimeMinute(), SetWorldTime(int16 years, sint32 months, sint32 hours, sint32 minutes), SendTimeUpdate()
- Additionally fixed camping and logging back in immediately, there was a 30 second delay. That is no longer the case.
- Fixed effective level updating on level changes, this prevents the unexpected purple inventory and mentor level display
- Fix #364 - Linkdead caused instability to world server and also the process of reconnecting a formerly connected player was not setup correctly (need to clear xor packets and other variables, visual states, player states)
- Fixed a crash issue with toggling client offline in database
- Encounter spells NPC->Player now properly handled
- Fix #360, appearance types cheek_type, chin_type, ear_type, eye_brow_type, eye_type, lip_type, nose_type, body_age, body_size supported in SpawnSet.
- Fix #359, better handling of movement locations and assure its protected multi-threaded
- Fix #353, merchant sales will properly reflect your inventory
- “obtained” lua function now triggers for ItemScripts when looted, not just added to the player through other means
- Fix #342, lock down fuel components
- Fix #361, expansion holiday flag logging to warning instead of default error adding spawn.
- Deadlock fix on spawn removal / delete of spawns (spawn list vs the spawn pointer handling)
- no_drop_quest_completed added to lootdrop table, allows specifying a Quest ID (int32) which will be checked against player and/or their group, if one person does not have the quest completed item will drop, otherwise will not drop.
- Zone Instancing Type added to a cache to avoid consistent database polling on the instance type
- Mentor now removes spells when mentoring down or unmentoring.
- Added LUA function GetZoneLockoutTimer(Player, ZoneID, displayClient=false) - returns string with the lockout timer length (or empty string if no lockout). DisplayClient = true will display the result to the player if there is a lockout.
- Can no longer Hail dead spawns
- Crash fix in TempRemoveGroup if group id is a non-existent group pointer.
Fix display level to match when you level up (or down) when not grouped or mentoring
Items now display purple when mentored due to level requirement of item
- secondary targets working for casting heal spells, recast is more or not working correctly now..
- overrides existing spell when there is a duration of time or trigger count to the spell
- doesnt prematurely show the icons available (eg. you cancel a spell then it pops up and you cant reuse or it starts a recast timer when it shouldnt)
- doesnt reset the recast timer (sometimes giving double the time to cast)
- unlocking a spell when all spells locked, no longer occurs
- GroupTarget spell_type designation to allow “cast” function to trigger for each spawn vs a single call to “cast” on the target (and relying on group functions to make impact on the group). This is used in scenarios such as summoning an item (Divine Awakening)
- Fix Login Server not accepting a new connection after a previously rejected one
- Broker fixes, 1h/2h equip fixes, swapping equip works, additional spell fixes (group spells, targetted AE), more crash fixes
- Disabling buy item on a merchant supported, ptr checks / crash fixes
- Item/Merchant/Scribing/Inventory Updates: item_description function which returns a string added to ItemScripts, new rule RULE_INIT(R_Spells, RequirePreviousTierScribe, "0"); - when enabled requires tiering up spell apprentice→journeyman→adept→etc
- Login Server Updates: DoF/Classic auto-login on character creation instead of getting stuck, soga/standard model color displayed for character, fixed disabled flag for world servers, added ban by ip list
- Albireo Update #2
- Appearance equipment now supported and saved in database
- Added rule to disable alignment check for house purchasing - RULE_INIT(R_Player, DisableHouseAlignmentRequirement, "1");
- loot_criteria functions in ZoneScripts added for global loot
- item_difficulty function created in ItemScripts to allow overriding the merchant difficulty setting
RULE_INIT(R_Spells, EnableCrossZoneGroupBuffs, "0"); // enables/disables allowing cross zone group buffs
RULE_INIT(R_Spells, EnableCrossZoneTargetBuffs, "0"); // enables/disables allowing cross zone target buffs
RULE_INIT(R_Spells, PlayerSpellSaveStateWaitInterval, "100"); // time in milliseconds we wait before performing a save when the spell save trigger is activated, allows additional actions to take place until the cap is hit
RULE_INIT(R_Spells, PlayerSpellSaveStateCap, "1000"); // sets a maximum wait time before we queue a spell state save to the DB, given a lot can go on in a short period with players especially in combat, maybe good to have this at a higher interval.
RULE_INIT(R_Spells, EnableFizzleSpells, "1"); // enables/disables the 'fizzling' of spells based on can_fizzle in the spells table. This also enables increasing specialized skills for classes based on spells/abilities.
RULE_INIT(R_Spells, DefaultFizzleChance, "10.0"); // default percentage x / 100, eg 10% is 10.0
RULE_INIT(R_Spells, FizzleMaxSkill, "1.2"); // 1.0 is 100%, 1.2 is 120%, so you get 120% your max skill against a spell, no fizzle
RULE_INIT(R_Spells, FizzleDefaultSkill, ".2"); // offset against MaxSkill to average out to 100%, default of .2f so we don't go over the threshold if no skill
- Fixed chests opening/closing added new process of one off visual state using SendStateCommand
- Integrated GiveQuestItem into the Client::DisplayQuestComplete / Client::AcceptQuestReward process. There is support for temp rewards/status/coin. SetStatusTmpReward(quest, status) and SetCoinTmpReward(quest, coin)
- Addressed quests not updating properly in the journal where sub tasks would completely disappear
- AoM client Addressed hot swapping a bagged item to equipment slots poofing the item. Note: DoF client seems to have inventory issues of its own, those are not addressed here
- Chests have new rules for exposure times RULE_INIT(R_Loot, ChestUnlockedTimeDrop, "1200"); - RULE_INIT(R_Loot, AllowChestUnlockByDropTime, "1"); - RULE_INIT(R_Loot, ChestUnlockedTimeTrap, "600"); - RULE_INIT(R_Loot, AllowChestUnlockByTrapTime, "1");
- Prevent stacking of food / drink effects. Also added spell_type Food and Drink to enumeration. When these are set it tells the server these are unique effects to food/drink and cannot stack with other consumed items. spells DB needs updates for spell_type to properly reflect Food/Drink value.
- Auto consume is implemented (while in zone). Flips the auto consume on/off option as well as 'yellow tints' the background behind the auto consume options when 'on'. Todo not complete: maintained effects / effects need cross zone support, this would include consumed food/drink.
- if you remove an item from inventory and there is a dialog screen, you can now close it (see last parchment in Taint quest before main boss mob, it wasnt letting you put the parchment away).
- Equipment serialized to the player now always includes the player pointer, this was causing menu item information for food/drink to be omitted on zone-in
- Few crash fixes, Deleting spells on players from lua_interface when zoning, protection on QuestStep instantiation, we recreate all the ids and locations so as to not be dependent on the prior step should it be deleted
- Cleanup of LUASpell on a entity when it is deconstructed, so as to not leave dead pointers around (esp on camp of player)
- Disabled Paperdoll packet, was corrupting memory
- Spell stacking restrictions implemented, DD and DoT are the only exempt. Spell types however are not configured correctly and need DB work.
- LUA Function Added: AddToSpawnGroup(spawn, group_id), AddLanguage now also updates client correctly
- Fixed another crash on water scenario
- LUA Function SpawnSet “faction” fixed
- Status is supported for housing, purchase of, upkeep and escrow
- LUA Function Updated: GiveQuestItem(Quest, Player, Description, ItemID1, ItemID2) - now supports multiple items
- Spell Concentration now works, no_interrupt added to SetInfoStructUInt with value of 1 entity cannot be interrupted casting spells
- SpawnSet given color options via function SpawnSet(Spawn, "fieldname", "R G B") - SpawnSet also temporary by default now
hair_color1, hair_color2, hair_type_color, hair_face_color, hair_type_highlight_color, face_hairlight_color, hair_highlight, model_color, eye_color soga_skin_color, soga_hair_color1, soga_hair_color2, soga_hair_type_color, soga_hair_face_color, soga_hair_type_highlight_color, soga_face_hairlight_color, soga_hair_highlight, soga_model_color, soga_eye_color
- Fixed pets not following
- LUA Function expanded: FaceTarget(Originator, Target, disable_action_state) - disable_action_state defaults to true
- Pause on hail options - RULE_INIT(R_Spawn, HailMovementPause, "5000"); and RULE_INIT(R_Spawn, HailDistance, "5");
- LUA Function Added: PauseMovement(Spawn, time_in_ms)
- spawn_npcs added water_type and flying_type
- HP / Power Regen rewrite, consolidated calculations and support in and out of combat settings.
- Rule RSpawn, ClassicRegen added to allow circa 2004-2005 regen (out of combat did not include in combat regen). Set to "1" to enable.
- HatedBy was incorrectly tracking mobs a spawn/player was aggroed by. Fixed the 'counter'.
- Parry/Riposte/Block/Dodge implemented more in line with known resources, some formulas like block need more details to properly calculate.
- GetInfoStruct/SetInfoStruct cur_avoidance, parry, parry_base, deflection, block are now floats
- GetInfoStruct/SetInfoStruct sint16 power_regen and hp_regen, lastly power_regen_override and hp_regen_override are int8 -- both added in relation to HP / power regen rewrite
- Item skill support added for Crushing, Defense, Deflection, Disruption, Fishing, Focus, Foresting, Gathering, Mining, Parry, Piercing, Safe Fall, Slashing and Trapping
- /waypoint can now be cleared with no target and issuing just /waypoint command
- /spawn details [x] now supports behind, infront, flank to get your relationship to the targetted mob
- EmemJr: /craftitem added
INSERT INTO commands SET TYPE=1,command='craftitem',subcommand='',HANDLER=526,required_status=100;
- /add_aa crash fix
- LUA Functions Added: RemoveSpawnSpellBonus(spawn), AddIconValue(spawn, value), RemoveIconValue(spawn, value)
- LUA Function updated: GetSpell(spell_id, tier, custom_lua_script) - third argument added to setup custom script file
- Evac now correctly allows you to reload the zone (fast reload skips a lot of loading process) and you do not see a duplicate of your spawn, combat is not 'silent' (you can see damage to and from spawns)
- Player / Spawn index mapping simplified (less wasted memory/cpu/tracking)
- region_map_v1 code updated to match unsigned values (signed vs unsigned was causing compile issues)
- /bot follow id and /bot stopfollow id added
- Fixed bot camp crashing when in group
- Fixed SpawnSet LUA crashes
- Heroic Opportunity starter stage fix
- GetSpellSlot deadlock fix
- Heroic Opportunity crash fix when DB not in sync
- LUA Function Added: MakeRandomInt(min,max) and MakeRandomFloat(min,max)
- LUA Equipment commands SetEquippedItemByID(Entity, slot, itemid) SetEquippedItem(Entity, slot, item) both return false if unable to equip. UnequipSlot(Entity, slot, nodeleteitem), SetEquipment(Entity, slot, type, r , g , b , hr , hg, hb)
- Quest leaf flag update will now correctly display (eg. for quest npcs) when in-range of mob upon the update
- ModelViewer / MapEditor updated with latest code (Region updates for lava/death regions, etc)
- Better Quest class memory management
- New GM command /movecharacter [charname] [zoneshortname]
- /castspell now also includes a new argument /castspell [spellid] [selfcast] - if selfcast is 0 this means the target will cast on themselves, not YOU casting on them.