Fetching contributors…
Cannot retrieve contributors at this time
10726 lines (8700 sloc) 601 KB
EQEMu Changelog (Started on Sept 24, 2003 15:50)
== 07/10/2018 ==
Akkadius: Adjusted DataBuckets to use other acceptable time formats
Example: quest::set_data('key', 'value', '1d');
- Acceptable inputs:
- 15s = 15 seconds
- s15 = 15 seconds
- 60m = 60 minutes
- 7d = 7 days
- 1y = 1 year
- 600 = 600 seconds
== 07/09/2018 ==
mackal: Rework of Task System, Shared Tasks still unsupported
- The tables now have better named columns, which hopefully won't need to be explained
- Text1 is now target_name, Text2 is now item_list, Text3 is now description_override
- Tasks can now reward faction hits, this is just normal NPC Faction ID entries because I was lazy
- The "Task" type tasks are now supported, a player can only be doing one of these at a time
- Activity IDs for use spell on and use skill on have been identified but not implemented
- Identified "duration code" for unlimited duration tasks (None = 0, Short = 1, Medium = 2, Long = 3)
- Activities can now have multiple zones separated by ';'
- tasks.startzone removed since it actually just uses first activity
- skill_list and spell_list are both IDs that can be separated by ';' (still unimplemented though)
== 07/07/2018 ==
Akkadius: Implemented a much better replacement for qglobals called 'DataBuckets'
- A much more detailed example can be found at:
== 07/05/2018 ==
Uleat: Reintegration of inventory-based EQDictionary references
- Standardized 'CONSTANT_DECLARATION' and 'enumerationValue' tokens for most of the affected references
- Added 'BEGIN' and 'END' constants to many inventory-based ranges to help eliminate '< SIZE'-type comparisons
- Eliminated multiple, duplicated reference points of the same value context (bye, bye namespace legacy!)
- Most server values are now linked to the implementation client directly through a 'using ##' directive
== 05/28/2018 ==
Akkadius: Fixed an issue where size 0 NPC's hop in and out of the ground at idle
Akkadius: NPC's now open doors within proximity given the door doesn't have locked requirements
Akkadius: #reloadallrules will now display zones that have had their rules reloaded to GM's
Akkadius: Zones should now respect "shutdowndelay" in the zones table at all times
Akkadius: Fixed an issue where boats would snap to the bed of the body of water
Akkadius: Added rule Aggro:NPCAggroMaxDistanceEnabled - defaults to true
Akkadius: Changed map directory load structure
- maps/base/*.map
- maps/nav/*.nav
- maps/water/*.wtr
- maps/path/*.path
KLS: Implemented navigation mesh
- All up to date maps and navs can be found
- To update maps either check out the maps found in the above repository or use the maintenance command:
perl maps
== 03/28/2018 ==
Kayen: SE_CastOnFadeEffect, SE_CastOnFadeEffectNPC, SE_CastOnFadeEffectAlway triggered spell will now hit
the correct targets.
== 03/07/2018 ==
Uleat: Added command '#ucs' to force a reconnect to UCS server.
- Works in place of client auto-reconnect packet in zones where feature is unsupported
- Currently, you will need to manually re-join channels
== 03/04/2018 ==
Uleat: Updated UCS versioning
- SoF and higher clients have a new opcode identified (update your *.conf files)
- Rework of previous ucs connectivity code
- Unrelated: Zone::weatherSend() now takes an optional parameter for singular updates (as in client entering zone)
-- prior to this, every client already in-zone received a weather update packet whenever a new client zoned in
== 02/18/2018 ==
Uleat: Bug reporting fix and overhaul.
- Fixed bug reporting for SoD+ clients
- Added ability to disable bug reporting (set rule 'Bugs:ReportingSystemActive' to 'false')
- Implemented a more detailed reporting system (set rule 'Bugs:UseOldReportingMethod' to 'false')
-- New system is not currently compatible with script-based monitoring
- Soft-removal of defunct 'Petition Bug' system
== 02/14/2018 ==
mackal: Fix Heading -- Quests broken
Please report any other issues with heading, most things were tested and worked
You can use to run a conversion to fix your headings in quests.
Some may need manual review.
== 02/10/2018 ==
mackal: Add Global Loot system
This will allow us to implement global loot similarly to how it works on live
This system reuses our current loottable tables which the global_loot table references.
The limits for the rules to govern if a table should be rolled are min level, max level, rare,
raid, race, class, bodytype, and zone
race, class, bodytype, and zone are a pipe | separated list of IDs.
== 01/31/2018 ==
Uleat: Re-work of Bot::AI_Process(). Overall behavior is much improved.
- Removed a 'ton' of unneeded packet updates
- Added a 'leash' to the distance a bot can travel
- Added a 'main assist' feature to target control (set using group roles)
- Added combat 'jitter' movement to complement the existing rogue movement
- Attack can now be aborted if target contains no leash owner nor bot hate and leash owner turns off auto-attack
- Please report any issues with the bot AI code
Added a work-around for heal rotations crashing the server - under certain conditions.
== 01/28/2018 ==
Mackal: Spell AI tweaks
AI spells are treated as "innate" spells (devs use this term, and I think this is what they mean by it)
These spells are spammed by the NPC, lots of encounters on live work like this and this will greatly reduce
the need to do quest scripting on these types of encounters.
You can safely run update npc_spells_entries set priority = priority + 1 where priority >= 0; if you want to disable this new behavior
== 10/08/2017 ==
Mackal: Rework regens
Regen will now match whats reported by modern clients, besides where they lie due to known bugs
HP and END regens are now based on the BaseData.txt values allowing easy customization
Those cases:
- The client always applies hunger penalties, it appears they don't exist anymore on live you can turn them on with a rule
- The way the client gets buff mana/end regen benefits incorrectly applies the bard mod making these values lie sometimes
== 9/17/2017 ==
Akkadius: Add model/race offset to FixZ calc (KLS)
Akkadius: Fix 95% of food/water consumption issues, if there are additional modifiers for race/class combos - those will need to be applied
Stages should be put in place if not already:
Values stored in the database are 0-6000, previously we capped it at 6000 but previous math would have normal values in the 60k+ range in order for food to be consumed at a reasonable rate. We are now using more native logic where 1 = 1 minute, following logic:
0 - 5 - This is a snack.
6 - 20 - This is a meal.
21 - 30 - This is a hearty meal.
31 - 40 - This is a banquet size meal.
41 - 50 - This meal is a feast!
51 - 60 - This is an enduring meal!
61 - X - This is a miraculous meal!
== 7/14/2017 ==
Akkadius: HP Update tuning - HP Updates are now forced when a client is targeted
Akkadius: Client position updates should be smoother (granted the client has a good connection)
- Clients should also no longer randomly disappear
== 7/11/2017 ==
Akkadius: Raid/Group/XTarget HP/Mana/Endurance updates now only send when percentage changes
Akkadius: Raid/Group Mana/Endurance updates should now update real-time once again
Akkadius: Fixed an issue with clients looking like they are 'skipping' when they are moving in view of another client
Akkadius: Fixed an issue with NPC's who are ghosted in plain view of a client when they are not really there
== 7/9/2017 ==
Akkadius: Fix HP update issues, rework logic for more accurate HP updates
Akkadius: Massive reductions in unnecessary network traffic especially during high spam combat fights
- HP Updates now only send to others when HP percentage changes (0-100%)
- HP Updates were sending excessively even during idle zones when HP wasn't changing at all
- Attack animations now only send once per second versus up to a hundred times a second per Mob/Client
- 17,000 OP_ClientUpdate packets per second have been observed in combat scenarios, some of the major culprits have been
throttled without affecting what the client should see
- Before and After packet differences under similar load/tests (Packets per second)
- 7,000 - 8,000 OP_Animation pps After: 600-800 pps
- 13,0000 - 17,000 OP_MobHealth pps After: 1-10 pps
- 15,0000 - 20,000 OP_ClientUpdate pps After: 500-1,000 pps
- Packet reports from a 46 client test here:
- Servers who use Marquee HP updates will also recieve far less packet spam as they will only be sent when HP changes
== 7/1/2017 ==
Akkadius: Resolve issues with NPC's hopping to the ceiling in small corridors
Akkadius: Improved grounding issues with NPC's during combat
Akkadius: Improved scenarios where NPC's need to be dragged out of the ground - they should correct themselves far more consistently
- Scenarios where an NPC is coming up from the bottom floor, or from the top floor, they will correct much better
- A video of these tests can be found here:
== 6/28/2017 ==
Akkadius: Fixed issues with Z correctness when NPCs are pathing on normal grids
Akkadius: Fixed issues with Z correctness when NPCs are engaged with players following
Akkadius: NPC corpses should fall into the ground far less
== 6/25/2017 ==
Akkadius: New rules made by developers are now automatically created when world boots up, this keeps
from having to issue schema SQL updates every time rules are added.
- Whenever a rule isn't present in the database, it will be automatically created
Akkadius: Sped up saylink retrieval x1000 helpful for dialogues, plugins with many saylinks
== 4/16/2017 ==
KLS: Merge eqstream branch
- UDP client stack completely rewritten should both have better throughput and recover better (peq has had far fewer reports of desyncs).
- TCP Server to Server connection stack completely rewritten.
- Server connections reconnect much more reliably and quickly now.
- Now supports optional packet encryption via libsodium (
- Protocol behind the tcp connections has changed (see breaking changes section).
- API significantly changed and should be easier to write new servers or handlers for.
- Telnet console connection has been separated out from the current port (see breaking changes section).
- Because of changes to the TCP stack, lsreconnect and echo have been disabled.
- The server tic rate has been changed to be approx 30 fps from 500+ fps.
- Changed how missiles and movement were calculated slightly to account for this (Missiles in particular are not perfect but close enough).
- Breaking changes:
- Users who use the cmake install feature should be aware that the install directory is now %cmake_install_dir%/bin instead of just %cmake_install_dir%/
- To support new features such as encryption the underlying protocol had to change... however some servers such as the public login server will be slow to change so we've included a compatibility layer for legacy login connections:
- You should add <legacy>1</legacy> to the login section of your configuration file when connecting to a server that is using the old protocol.
- The central eqemu login server uses the old protocol and probably will for the forseeable future so if your server is connecting to it be sure to add that tag to your configuration file in that section.
- Telnet no longer uses the same port as the Server to Server connection and because of this the tcp tag no longer has any effect on telnet connections.
- To enable telnet you need to add a telnet tag in the world section of configuration such as:
<telnet ip="" port="9001" enabled="true"/>
== 4/1/2017 ==
Akkadius: Cleaned up some of the NPC to NPC aggro code, only do aggro checks to other NPC's when the NPC is flagged for it
Akkadius: [Performance] Reworked how all log calls are made in the source
- Before we used Log.Out, we will now use a macro Log(
- Before: Log.Out(Logs::General, Logs::Status, "Importing Spells...");
- After: Log(Logs::General, Logs::Status, "Importing Spells...");
- The difference is
1) It's 200-300x faster especially when log statements are inside very hot code paths. We already
had most hot paths checked before we logged them, but this blankets all existing logging calls now and not just the
select few we had picked out in the source.
2) Strings don't get copied to the stack, popped and pushed constantly even when we hit a log statement that
actually isn't going to log anything.
- We do an 'if (LogSys.log_settings[log_category].is_category_enabled == 1)' before we call a log function
in the log macro so the log function doesn't get called at all if we're not logging the category
- This has increased binary executables roughly 15KB
- The old extern for EQEmuLogSys is now named LogSys appropriately instead of Log (Ex: LogSys.StartFileLogs())
- The result keeps logging footprint non-existent for when we're not logging that category
== 03/30/2017 ==
Akkadius: [Performance] Fixed an overhead issue where many hot paths would trigger quest subroutines and beneath that the code would
try to see if a quest existed perpetually (checking if file exists) even though it should have determined the quest
didn't exist the first time.
- This caused a lot of overhead in an instance where an entire zone of NPC's is pathing, triggering EVENT_WAYPOINT_ARRIVE
and EVENT_WAYPOINT_DEPART when there is no, or all NPC's pathing don't have a quest assigned, similar
behavior would occur. This goes for any other type of quests: spells, items, encounters etc.
== 03/28/2017 ==
Akkadius: [Performance] Fixed a large overhead issue where every single NPC in a zone was checking to depop themselves
as a swarm pet every 3ms regardless of being a swarm pet or not. Swarm pets now check to depop only when their timer is up
Akkadius: [Performance] Removed a timer where clients would constantly calculate light amount on equipment every 600ms, instead
clients will update light when changing equipment or entering a zone
Akkadius: [Performance] Disabled enraged timer checks for NPC's that do not actually have enrage as a special attack
Akkadius: [Performance] Don't process ProjectileAttack checks for NPC's that are not engaged in any combat
== 03/27/2017 ==
Akkadius: [Performance] Reworked how client to NPC aggro checks are made
- Before when reverse aggro checks were done (client to NPC), checks would happen every 750 millseconds where a client would
check an entire entity list with distance calcs and other checks for aggro, with many clients in a zone and many NPC's this would
add a lot of unecessary overhead. A temporary adjustment on 3/25 was made and upped the check to 6 seconds.
- Now, there is a new methodology to scanning. The client will build a cache list of NPC's within close range as defined in new rule:
RULE_INT(Range, ClientNPCScan, 300) and will also get any NPC that has an aggro range beyond that defined range to use in
the frequent checks for aggro, the result is far less overhead
- Client scanning changes when moving versus not moving, the client will scan aggro every 500 milliseconds while moving, and
3000 millseconds aggro check when not moving, with a 6000ms re-fetch for close NPC's
- A demo of these changes can be found here:
== 03/25/2017 ==
Akkadius: [Performance] Reduced CPU footprint in non-combat zones doing constant checks for combat related activities
Akkadius: [Performance] Reduced CPU footprint in cases where a client is checking for aggro excessively every 750 millseconds. This has
been adjusted to 6 seconds per new rule RULE_INT(Aggro, ClientAggroCheckInterval)
- When zones have many players, with many NPC's, this adds up quickly
== 03/12/2017 ==
Akkadius: [Performance]
- Implemented range rules for packets and other functions
RULE_INT ( Range, Say, 135 )
RULE_INT ( Range, Emote, 135 )
RULE_INT ( Range, BeginCast, 200)
RULE_INT ( Range, Anims, 135)
RULE_INT ( Range, SpellParticles, 135)
RULE_INT ( Range, DamageMessages, 50)
RULE_INT ( Range, SpellMessages, 75)
RULE_INT ( Range, SongMessages, 75)
RULE_INT ( Range, MobPositionUpdates, 600)
RULE_INT ( Range, CriticalDamage, 80)
- (Readability) Also cleaned up some formatting in messaging and packets so it is easier to understand what is going on with the code
== 03/09/2017 ==
Uleat: Fixed a few glitches related to bot trading and other affected code
- Added a temporary fail clause for partial stack transfers to prevent client item overwrites
- Return messages no longer repeat the top cursor item when multiple items are pushed there
- Test slot for client returns is now handled appropriately for parent and bag searches
- FindFreeSlotForTradeItem() now begins at the correct bag index on subsequent parent iterations
Uleat: First step of implementing inventory v2.0
== 03/08/2017 ==
Uleat: Complete rework of the bot trading system
- Equipment slot priority can now be tailored..though, a recompile will be required
- All item validations and slot assignments for trades and returns are now performed before any actual item movements occur
- Failed trade/returned items will now go straight into the client's inventory, just like a normal trade transaction
- A 'green' message appears at the end of each successful trade informing the trader of 'accepted' and 'returned' item counts
- Bots respond to the trader directly now instead of using BotGroupSay()
- Bots will still only allow trades from their owner (currently, too high a risk of exploit and/or malicious activity)
- Partial stack movements (i.e., ammo refills) have been scoped..but, not implemented
- I have not been able to reproduce any 'illegal' weapon combinations with this code
- NOTE: The report of item duplication with bot return items appears to be an inventory desync condition
- I experienced this condition both before and after the rework with RoF+ clients (UF- appears ok)
- The bug lies within the actual client inventory system and not with bot trades
- Please post any issues with this change as they arise
== 02/27/2017 ==
Uleat: Notes on bot movement speed changes:
- Clients (players) appear to be on a different speed scale than other entities (NPCs, etc...)
- The server does not calculate deltas/velocities for moving players..those come the client itself
- GetBotWalkspeed() and GetBotRunspeed() are specific to bot movement calculations
- The class Mob equivilents are not scalared so that a 'client-oriented' value can still be attained
- The value of ~1.786f is derived from the ratio of 1.25f/0.7f (npc speed/client speed)
- Modifying the two speeds like this is a rough guess-timate..but, appears to at least bring the incongruous behavior to acceptable levels
== 02/26/2017 ==
Uleat: Moved bot `npc_spells` entries from '701-712' to 3000 + <class_id> .. also, added melee types for future expansion
Uleat: Moved bot spell casting chance values into database - this will allow admins to tailor their bots without having to rebuild server code
- Each entry uses a 3-dimensional identifier: [spell type index][class id][stance index]
- [spell type index] is not the SpellType_## bit value..use SpellType_##Index instead
- [class id] values of 1-16 are valid and hold a direct correlation to server-coded player class values
- [stance index] is a direct correlation (0-6)
- the 'conditional fields' are currently predicated on 4 compounded boolean states:
- `pH_value` represents bit '0'
- `pS_value` represents bit '1'
- `pN_value` represents bit '2'
- `pD_value` represents bit '3'
- all other conditional fields are masked based on these 4 predicates
- the full conditional field enumeration is as follows:
- `nHSND_value` - negative Healer/Slower/Nuker/Doter
- `pH_value` - positive Healer
- `pS_value` - positive Slower
- `pHS_value` - positive Healer/Slower
- `pN_value` - positive Nuker
- `pHN_value` - positive Healer/Nuker
- `pSN_value` - positive Slower/Nuker
- `pHSN_value` - positive Healer/Slower/Nuker
- `pD_value` - positive Doter
- `pHD_value` - positive Healer/Doter
- `pSD_value` - positive Slower/Doter
- `pHSD_value` - positive Healer/Slower/Doter
- `pND_value` - positive Nuker/Doter
- `pHND_value` - positive Healer/Nuker/Doter
- `pSND_value` - positive Slower/Nuker/Doter
- `pHSND_value` - positive Healer/Slower/Nuker/Doter
- Single- and mixed-bits fields should be filled-in based on the boolean 'AND' concept
- (i.e., if 'healer' then `pH_value`=x; if 'slower' then `pS_value`=y; if 'healer' AND 'slower' then `pHS_value`=z; )
- most cases can allow the same value across all fields..but, there are some that shouldn't and this format allows for their discrimination
- Valid `##_value` entries are 0-100..though, the field accepts up to 255... Anything above 100 is clamped to 100 upon loading, however...
- Not all conditions are currently coded and changing a field may not produce any results
- The 'default' database values will be changed and tweaked as bot spell code modifications occur
== 02/25/2017 ==
Uleat: Implemented rule-based node pathing for bots
- This currently applies to out-of-combat following movement and blocked los in-combat movement
- The default is set to 'true' (use node pathing), consider disabling it if cpu use is too high
- If you want to disable node pathing, apply the optional sql '2017_02_25_bots_use_pathing_rule.sql' file located in the utils/sql/git/bots/optional sub-directory. This will apply a 'false' rule..but, it can be changed as desired
- This helps with bot movement..but, there are still issues...
Uleat: Implemented rule-based position update packet with movement timer check for bots
- This currently only applies to out-of-combat movement
- The default is set to 'false' (original behavior) to help save bandwidth (each bot will send an update packet every 1/10th of a second when enabled)
- If you want to enable the position update packet, apply the optional sql '2017_02_25_bots_update_position_with_timer_rule.sql' file located in the utils/sql/git/bots/optional sub-directory. This will apply a 'true' rule..but, it can be changed as desired
- This appears to help with/eliminate rubber banding
== 02/23/2017 ==
Uleat: Moved bot spell casting chance values into database - this will allow admins to tailor their bots without having to rebuild server code
- Each entry uses a 4-dimensional identifier: [spell type index][class index][stance index][conditional index]
- [spell type index] is not the SpellType_## bit value..use SpellType_##Index instead
- [class index] values of 0-15 are valid and determined by subtracting 1 from the actual class value
- [stance index] is a direct correlation (0-6)
- the [conditional index] is currently predicated on 2 compounded boolean states:
- not primary healer/not primary slower: 0
- primary healer/not primary slower: 1
- not primary healer/ primary slower: 2
- primary healer/primary slower: 3
- Valid `value` entries are 0-100..though, the field accepts up to 255... Anything above 100 is clamped to 100 upon loading, however
- Not all conditions are currently coded and changing a field may not produce any results
- The 'default' database values will be changed and tweaked as bot spell code modifications occur
== 02/20/2017 ==
Uleat: Reworked bard bot spell twisting and updated their spell (song) list
Uleat: Added ability to shift to pre-combat song buffing by selecting a non-pet npc target, eliminating the need to mix all bard buff songs together
== 2/19/2017 ==
Akkadius: Added a fix for limiting the amount of items sold in a stack when the resulting return coin is higher than the supporting struct for returning coin
== 01/31/2017 ==
Uleat: Modifed bot movement behavior in an attempt to 'normalize' it. This is a hack fix and will be revisited at some point. (Probably just need a follow function rather than use movement, when the leader of the follow chain is moving.)
== 01/26/2017 ==
Uleat: Change rogue bot behavior to eliminate twirling combat. They will only get behind the mob if they are not the mob's target or if the mob is feared or fleeing. This may lower rogue bot dps a small fraction..but, is more in-line with realistic game mechanics.
== 01/17/2017 ==
Mackal: Combat Revamp
- This change brings melee combat into line with how combat is done on live.
- This correctly applies the PC damage tables and corrects stacking order of many spells
- Given the scope of what had to be rewritten, it was not feasible to preserve the old combat system.
This means you will likely have to rebalance your server, which sucks, but this is very
accurate so shouldn't require any more changes, at least none that would cause you to have
to rebalance your server again.
- For rebalancing, I would recommend running the optional SQL and tweaking from there.
- To help with rebalancing there is a simulator included at utils/combat-sim.
- You can enter the mitigation or offense values you would like to balance around (#showstats will show you them)
a 1 on the sim is min damage 20 is max.
- Quick recommendations for best ways to improve PC DPS, give them some worn (or AA) SE_DamageModifier and/or SE_MinDamageModifier
== 12/03/2016 ==
Uleat: Added hack detection to trade code
- If illegal items are found in trade slots when the 'trade' button is clicked, the trade is cancelled and a message is sent to the offending player
- Future revisions will, at a minimum, log the player as a hacker once the quirks have been worked out
== 12/01/2016 ==
Uleat: Disabled RoF+ clients from augmenting items not in their possessions slots (0-29, 9999, 251-330) to abate an exploit in the current code
== 10/17/2016 ==
Uleat: Moved namespace ItemField from item_instance.h to shareddb.cpp - the only place it is used
Uleat: Separated class Inventory from item_instance files into inventory_profile files
Uleat: Renamed class Inventory to EQEmu::InventoryProfile
Uleat: Renamed enum class InventoryVersion to MobVersion
== 10/16/2016 ==
Uleat: Renamed struct EQEmu::ItemBase to EQEmu::ItemData and class ItemInst to EQEmu::ItemInstance
Uleat: Added class EQEmu::InventorySlot. Re-attached pertinent inventory token references to EQDictionary
== 10/15/2016 ==
Uleat: Changed filenames to facilitate future inventory naming conventions
== 10/09/2016 ==
Noudess: Rogue usage of merchants while utilizing sneak was limited to
temporary items, as the code that checked faction per item sold did not
take into account that rogue was sneaking. Now sneaking rogues can see full
inventory on merchants (well, unless an item requires a + faction value).
== 09/12/2016 ==
Akkadius: Massive overhaul of the update system and EQEmu Server management utility framework
(known as now known as
- is now a general EQEmu Server management utiltiy framework that can be used
to extend to many purposes. It's main purpose is to simplify server management
- changes:
- Menu has been completely changed, instead of a number based (enter number and hit enter)
you now type commands within the menu (Ex: 'database')
- Handles last mile installation for Windows Servers (See Github Readme)
- Handles last mile installation for Linux Servers (See Github Readme)
- Ubuntu
- Debian
- Fedora
- CentOS
- Now checks for Internet connection before performing web requests
- Database:
- Regular schema updates now happen automatically, if new binaries present updated
database schema changes, script will backup first, auto update database, and continue
world bootup
- Regular bots database schema changes now happen automatically similarily to the above
- Database checks can also be ran manually via the script menu
- CLI Arguments
- Arguments passed to can execute the same name-based operations that
are present in the interactive menu
- Example: "perl opcodes" will download opcodes
- Example: "perl backup_player_tables" will backup and export player tables
- Bots
- Bots can now be automatically setup in Linux or Windows via the 'setup_bots' command
- Windows will auto download binaries and install, along with installing bots db schema
- Linxu will auto compile binaries and install, along with installings bots db schema
- Utility scripts
- Linux now has the following utility scripts for download, available via menu 'utility_scripts'
and via Linux default install:
- Usage analytics
- now collects usage analytics, this is very helpful for our developers
- Example: We can see how many installs have been performed:
- This helps us see how often certain utilities are used as well
- Console Messages
- All script messages have been prefixed with a bracket action Ex: [Update] [Database] [Info]
to be more consistent with our log conventions
- 'New Server' Utility
- Running 'new_server' from the main menu or 'perl new_server' while in
a completely new folder with just the script present, will allow a server operator
to initiate a full clean PEQ install in that folder. Pulling down all assets and
installing a PEQ database with the name the server operator gives the prompts in the
== 09/10/2016 ==
noudess: Task system experience based on a % of a level did not take into
account the hell levels rule. Now it does.
== 09/04/2016 (Changes over past few months) ==
Akkadius: Fixed an issue where clients would crash with health marquee's
Akkadius: Fixed issues with NPC's "ghosting" when they path
Akkadius: Overhauled worldserver logging
Akkadius: Pets now don't actually spawn until the player has fully entered the zone (Live-like)
demonstar/KLS: Adjusted some background workings on how spell buff tics are synced with the client
Uleat: Optimizations to map loading and zone times
Uleat/Akkadius: Fixed bandolier exploit where you could equip a 2H and Shield
mackal: Re-worked spell re-use timer logic
mackal: Source optimizations all over, crash fixes
mackal: Fixed some issues with illusions on zoning
mackal: Fixed some client DOT stacking bugs
mackal: Invis will now break on AA spell casts and item cast
mackal: Changed how Loot response code works
mackal: Implemented 3 additional spell gems with (Mnemonic Retention)
mackal: Instant spells now have instrument mods
mackal: Rate limit character saves
mackal: Made it so items no longer do TGB (Live-like) Rule implemented to disable
mackal: Set pet buffs limit to 30
== 09/03/2016 ==
Uleat: Changed 'Bind Wound' behavior to match the best references that I could find for post-2004 era.
Note: If you wish to retain the old method, source in the optional '2016_09_03_old_bind_wound_rule.sql' script file.
== 08/27/2016 ==
Kinglykrab: Added optional IP-based account exemptions.
- To use this system simply set World:EnableIPExemptions to true and create an entry in the ip_exemptions table.
- Example: exemption_ip of IP in ip_exemptions with exemption_amount of 1 will allow only 1 account to login from IP
- Note: If there is no exemption, the amount of accounts logged in from a singular IP will default to World:MaxClientsPerIP
== 08/23/2016 ==
noudess: Force mobs on a depop @ end pathgrid to still do this on idle zones.
This makes them be more random after a zone is idle, rather than always showing
up at start point when 1st person logs into an idle zone. Much more like live.
I dion't think this will be much of a performance problem. Once they path and
depop, no mkore cpu usage.
== 08/14/2016 ==
mackal: Implement Linked Spell Reuse Timers
- For whatever reason this is a bit unfriendly, but that's how it is on live.
- Titanium is especially unfriendly with large differences in reuse times (ex higher canni and the first 4)
- Unsure when this went live for spells, but canni was at least linked at OoW launch
== 08/13/2016 ==
Kinglykrab: Implemented optional avoidance cap rules.
- Serves to eliminate God-like characters on custom servers with high item stats
- Rule Names:
- Character:EnableAvoidanceCap (default is false)
- Character:AvoidanceCap (default is 750, beyond 1,000 seems to make characters dodge all attacks)
== 08/02/2016 ==
Uleat: Changed 'SendZoneSpawnsBulk' behavior to use near/far criteria (live-like) when sending packets.
- Zone-to-Zone client loading will see a small decrease in time (less than 10~15%)
- World-to-Zone client loading appears to greatly benefit from this (tested 'devastation' - pre-change: ~22 seconds, post-change: 12~15 seconds)
- This change does not affect the final spawning of mobs in the client
== 07/31/2016 ==
mackal: Implement more spell gems!
- There are a few things still left to due like make dealing with losing gems nice (reset AAs, going to an older client etc)
- Sadly SoF disc release doesn't support gem 10 like one might expect :(
- So changed clients:
- SoD = 10
- UF = 12
- RoF/RoF2 = 12. I know the UI supports 16, but the client does not and can cause client crashes
- The quest APIs assume you pass a valid spell gem ...
== 07/28/2016 ==
Uleat: Implemented zone memory-mapped file usage
- Zone map files are converted to pre-loaded binary files, bypassing the (sometimes) time-consuming raw data transform process
- There are three ways to convert files:
-- Do nothing! The zone bootup process will check for a mmf file and load it, if found, or create it after the 'normal' transform process is complete
-- Use the command line option: zone convert_map <zone_name>.map (for singular conversions)
-- Drop the '' into your server directory and execute it for a batch conversion
-- Note: Any zone maps not pre-converted will be processed once a zone is booted up that does not have one
- To enable this feature, you must have the 'USE_MAP_MMFS' option checked in cmake and have built binaries on that
- To disable this feature, or if you encouter problems, disable the 'USE_MAP_MMFS' option and rebuild your binaries
- This feature will test the validity of your zlib library. If you get errors/crashes upon conversion, then your zlib1.dll is most likely suspect (check our forum for solutions)
== 07/25/2016 ==
mackal: Fix up the SpellBuff struct
- there shouldn't though, most of the hackery was from badly named fields causing confusion
== 07/09/2016 ==
Uleat: Important fix for mob pathing
- This should fix failed pathing issues (and high cpu usage for zone.exe) for mobs in affect zones
- Changed variable 'gridno' type from int16 to int32 to reflect actual return value of fetch (values do exceed 32767 aka int16.max)
- Precision loss from int32 to int16 conversion was causing grid id to be changed to quest controlled movement in cases where (gridno & 0x8000 == true)
== 06/28/2016 ==
Noudess: Resurrection effects now block certain buffs like on live.
Noudess: Added message about why spells are blocked (rule based)
Noudess: Added new rule: Client:UseLiveBlockedMessage
Uleat: Fix for bot inventory save failure involving items with unlimited charges
== 06/13/2016 ==
Noudess: Changes personal faction earned min/max to -2000/2000 from -3000/1200
== 06/06/2016 ==
Uleat: Reworked EQEmuDictionary to use class LookupEntry
== 06/01/2016 ==
Uleat: Implemented EQEmu::TintProfile
Uleat: Implemented EQEmu::TextureProfile
== 05/31/2016 ==
Uleat: Converted enumeration MaterialSlots to EQEmu::textures::TextureSlot
== 05/28/2016 ==
Uleat: Merged client_version and inventory_version into emu_versions files
== 05/27/2016 ==
Uleat: Renamed EQEmu::Item_Struct to EQEmu::ItemBase (and appropriate files) to coincide with new inventory naming conventions
== 05/25/2016 ==
Uleat: Renamed and moved enumeration SkillUseTypes to EQEmu::skill::SkillType - added class EQEmu::SkillProfile, though not implemented at this time
Uleat: Some more work on eq_dictionary
== 05/21/2016 ==
Uleat: Moved struct Item_Struct into namespace EQEmu along with associated enumerations - enumerations into namespace EQEmu::item (run shared_memory)
Uleat: Fixed a few possible crash points in linux builds associated with augments/ornamentations
== 05/18/2016 ==
Uleat: Changed client 'constants' files to 'limits'
== 05/10/2016 ==
Uleat: Converted client translators' 'SerializeItem()' to recursive, single buffer methodology. Titanium SerializeItem() now adds a null term between parent items instead of the invoking function
Uleat: Converted server 'BulkSendInventoryItems()' to use single buffer methodology
Uleat: Added 'ItemInst::Serialize()' overload to make use of the above single buffer methodology
== 05/08/2016 ==
Uleat: Re-coded Titanium client translator 'SerializeItem()' to use coded property assignments over file enumerated ones
== 04/22/2016 ==
Uleat: Reworked ClientVersion into namespace EQEmu; Added InventoryVersion
Uleat: Delinked current inventory slot enumeration and constants from EQEmu::constants and global definition (inv2 pre-work)
== 04/19/2016 ==
Uleat: Changed the recent EQEmu rework to eliminate the nested class design (possible cause of VS2015 update crashes - unverified)
Uleat: Some more inv2 convergence work
== 04/15/2016 ==
Uleat: Reworked EQDictionary into namespace EQEmu
== 04/08/2016 ==
Uleat: Added Heal Rotation HOTs (Heal Override Targets) that can be set for proactive healing (default HR behavior is reactive)
Uleat: Added the ability to save/load/delete Heal Rotations based on targeted member - load is automatic when ^hrcreate is used on a bot that has a saved HR entry
== 04/07/2016 ==
Uleat: Rework of eq_dictionary to facilitate inventory work
== 04/05/2016 ==
Uleat: Moved database query code out of bot.cpp and into the new BotDatabase class
== 03/25/2016 ==
Uleat: Fix for heal rotation 'Stack Overflow' error
Kayen: Defensive procs will now only proc once per attack round (instead of every attack chance).
Live like modifier added that decreases defensive proc chance if you are higher level then your attacker.
== 03/24/2016 ==
Kayen: Fix for AE taunt to use correct range and hate modifier.
Fix for spell effect version of taunt to use correct range.
Uleat: Activation of new 'Bots' command system
- You will need to re-run cmake to capture the file additions and then re-compile your server binaries
- You will also need to manually run and select the bots update option - you should have 2 pending updates: 9001 & 9002
- The new command system is accessed with the '^' character - start with '^help' and see where that takes you
- More information can be found on the eqemu forums
== 03/05/2016 ==
mackal: Implement extra bind points (secondary recall)
For SE_Gate, base2 is which bind to use (starting at 1)
For SE_BindAffinity, base1 is which bind to set (starting at 1)
For SE_GateCastersBindpoint, base1 is which bind to use (starting at 1)
There was actually no spells that don't send to the main bind, but it uses a base1 of 1 which matches with SE_Gate
This also doesn't break anything
== 03/01/2016 ==
Uleat: Fix for LDoN treasure 'npcs' not leaving a corpse (please report any issues..)
== 02/29/2016 ==
Uleat: Change in AddItemBonuses - now includes ammo slot for skill mods only. Defined SoD- client SkillModMax packet property (client does not show..but, does enforce.)
== 02/11/2016 ==
Hateborne: Added IgnoreSpellDmgLvlRestriction rule (boolean) to ignore the 5 level spread when checking to add SpellDmg
== 02/10/2016 ==
Hateborne: Added FlatItemExtraSpellAmt rule (boolean) to allow SpellDmg on items to be added as raw damage versus scaled.
== 01/26/2016 ==
Uleat: Fix for Berserker 'Piercing' skill issues. Server Admins: If you run custom skill sets, this patch touches the code segments that you will need to modify if you have changed the default berserker 1H-/2H-piercing skill values.
Uleat (Daerath): Fix for precision-loss item weight conversions in older clients.
- Note: Cmake must be re-run to include/exclude the required files
== 01/13/2016 ==
Kinglykrab: Modified #flag so you can refresh your target's account status (GM status level) without them having to relog.
- Just target the person whose flag you want to refresh and type #flag.
Uleat: Added itemlink functionality to the #summonitem command. Current use is limited to extracting the item id from the link.
- Invoking by item link '#summonitem Arrow' produces the same result as by item id '#summonitem 8005'
== 01/12/2016 ==
Athrogate: Adding ClearCompassMark() to Lua.
- Lua didn't have ClearCompassMark(). Perl already had this.
== 01/12/2016 ==
Uleat: Fix for tradeskill containers remaining locked after a RoF+ client leaves. Intermediary fix for RoF+ clients accessing tradeskill containers when in use by another player (thanks Natedog!)
== 12/29/2015 ==
Akkadius: Implemented standardized zone controller scripts (Rule Zone, UseZoneController) Defaulted to true
- When a zone boots, it will spawn an invisible npc by the name of zone_controller
- Lua and Perl scripts can be represented with this npc as
- This NPC's ID is ruled be define ZONE_CONTROLLER_NPC_ID 10
- Two EVENT's uniquely are handled with this NPC/controller (They only work with the zone_controller NPC)
- EVENT_SPAWN_ZONE :: All NPC spawns in the zone trigger the controller and pass the following variables:
- EVENT_DEATH_ZONE :: All NPC deaths in the zone trigger the controller event and pass the following variables:
== 12/28/2015 ==
Kinglykrab: Added GetInstanceTimer() to Perl and Lua.
- Added GetInstanceTimerByID(instance_id) to Perl and Lua.
- Note: If you do not provide an instance id in the method it defaults to instance id 0 and returns 0 for time remaining.
- Added UpdateZoneHeader(type, value) to Perl and Lua.
- Note: UpdateZoneHeader allows you to manipulate fog color, fog density, and many other zone header settings on the fly in Perl and Lua.
== 12/21/2015 ==
Natedog: Updated item table fields and added a few missing fields for evolving items
-DO NOT implement Heirloom items till the inventory code is fixed to allow placing NO DROP
items in your shared bank. (but item field located on items table)
-NYI - SkillModMax: Max skill point modification from the percent mods. EX:
100% 2HSlashing (Max 50) - can only increase 2hslash by 50 MAX! (item field located though)
Kinglykrab: Added GetMeleeMitigation() for NPCs and Clients in Perl and Lua.
- This allows you to check total item, spell, and AA melee mitigation contribution.
== 12/19/2015 ==
Kinglykrab: Added many methods to Perl and Lua, list below:
- SeeInvisible()
- SeeInvisibleUndead()
- SeeHide()
- SeeImprovedHide()
- GetNimbusEffect1() - returns first nimbus effect
- GetNimbusEffect2() - returns second nimbus effect
- GetNimbusEffect3() - returns third nimbus effect
- IsTargetable()
- HasShieldEquiped()
- HasTwoHandBluntEquiped()
- HasTwoHanderEquiped()
- GetHerosForgeModel() - returns int32 Hero's Forge model
- IsEliteMaterialItem() - returns uint32 Hero's Forge Model
- GetBaseSize() - returns Mob's base size
- HasOwner()
- IsPet()
- HasPet()
- IsSilenced()
- IsAmnesiad()
== 12/16/2015 ==
Noudess: Repaired issue with Bind Wounds on someone else. Message was not coming out on client (hold still) and a bind wounds on someone already binding their wounds would interrupt their bind and make them stand. Also removed some duplicate messaging.
== 12/14/2015 ==
Kinglykrab: Added IsBlind() and IsFeared() functionality to Perl and Lua.
- Note: Both methods are Mob methods and may be used on NPCs or PCs.
Natedog: Added Discipline functions, UpdateInstanceTimer function, and UnmemSpellBySpellID to lua and perl
== 12/07/2015 ==
Uleat: Command aliases are no longer handled through the command_add() function.
- To add a command alias, edit the database table `command_settings` - here, you will find three columns: `command`, `access` and `aliases`
- Adding command aliases require that the command contain an entry in `command_settings`.`command`
- Only 'real' commands go inside of the command_init() function in command.cpp .. if you wish to add aliases, you must enter them into the database
- 'Real' commands are loaded first .. then any access/alias data is loaded and applied afterwards
- Duplicate aliases will be ignored .. only the first encountered occurrence will be honored - if it does not conflict with an existing command name
- Aliases should not contain whitespace and should be '|' (pipe) delimited
- The restriction on the number of aliases has been removed .. though each alias will still be limited to the access level of the parent command
- If you need need more name space for aliases, simply edit the `command_settings` table and increase the size of the `aliases` column
- The old `commands` table has been renamed to `commands_old` for reference
- All of the current 'standard' commands have been added to the new `command_settings` table
== 11/30/2015 ==
Uleat: Changed criteria for a few bots scripts from count to null/not null in hopes of fixing special case failures
== 11/22/2015 ==
Uleat: Fix for loginserver project compile failure
== 11/7/2015 ==
Akkadius: Implemented #repopclose [distance in units] - Used for development purposes, defaults to 500 units
- Real case use: Large zones with 700 NPC's and you are making fast quick tweaks to nearby NPC's you can refresh just the NPC's around you instead of all in the zone
- This can be quite the time saver
- This command will depop all NPC's and only respawn the NPC's that are 500 units around you or unless you specify otherwise
== 11/2/2015 ==
Akkadius: Performance boost (exponential) - Adjusted default idle cast check timers in rules
- Spells:AI_IdleNoSpellMinRecast 500 (Now 6000) 6 seconds
- Spells:AI_IdleNoSpellMaxRecast 2000 (Now 60000) 60 seconds
- Database version 9089 will take care of this update automatically only if you used the default values
- The CPU cost of NPC's checking the entire entity list to cast beneficial spells (Heals/Buffs) becomes extremely high when higher NPC count zones exist (Based off of process profiling)
- Distance checks for every single NPC to every single other NPC who are casting beneficial spells occur every .5 - 2 seconds unless npc_spells dictates other values, which most of the time it does not
- Zones that once fluctuated from 1-8% CPU with no activity (Idle but players present) now idle at .5% based on my testings due
to this change in conjunction with the past few performance commits, these are zones that have 600-800 NPC's in them
- These values normally are overidden by the spells table (npc_spells), fields (idle_no_sp_recast_min, idle_no_sp_recast_max)
== 11/1/2015 ==
Akkadius: Made many performance optimizing oriented code changes in the source
- Added Rate limit the rate in which signals are processed for NPC's (.5 seconds instead of .01 seconds)
Akkadius: Added Perl Export Settings which should heavily reduce the Perl footprint
- Normally when any sub EVENT_ gets triggered, all kinds of variables have to get exported every single time an event is triggered and
this can make Perl very slow when events are triggered constantly
- The two most taxing variable exports are the item variables ($itemcount{} $hasitem{} $oncursor{}) and qglobals ($qglobals{})
- qglobals can pose to be an issue quickly when global qglobals build up, it is highly recommend to use the GetGlobal() and SetGlobal()
methods instead as they don't reference the hashmap $qglobals{} that is rebuilt every single time a sub event is triggered
- A stress test conducted with 10,000 samples shows an excess of time taken to export variables:
- After the Perl Export Settings table is implemented, and all exports are shut off you see the following test result:
- The difference of eliminating uneeded exports brings the overhead and footprint of 10,000 triggers from 54 seconds to 2 seconds
- In a 10,000 sample test (10,000 sub event triggers), exporting item variables adds 12 seconds alone, when item variables are only needed in
EVENT_ITEM and EVENT_SAY a majority of the time if at all
- In a 10,000 sample test (10,000 sub event triggers), exporting qglobals with approximately 1,000 global qglobals in the database creates
about 11-20 seconds of delay on its own (Depending on hardware of course)
- I've written a parser that has determined which of these exports are needed in which sub routines and have turned off all of the unneeded
exports in sub routines that do not need them and used it to create the default table that will be installed in the database.
- The export table is called 'perl_event_export_settings' and it resembles the following structure and contains all current 81 EVENTS
- If an entry doesn't exist in this table and a new subroutine is added to the source, all exports will be on by default for that routine
| event_id | event_description | export_qglobals | export_mob | export_zone | export_item | export_event |
| 0 | EVENT_SAY | 1 | 1 | 1 | 1 | 1 |
| 1 | EVENT_ITEM | 1 | 1 | 1 | 0 | 1 |
| 2 | EVENT_DEATH | 1 | 1 | 1 | 0 | 1 |
| 3 | EVENT_SPAWN | 1 | 1 | 1 | 0 | 1 |
| 4 | EVENT_ATTACK | 0 | 1 | 1 | 0 | 1 |
| 5 | EVENT_COMBAT | 1 | 1 | 1 | 0 | 1 |
- If a change is made to this table while the server is live and running, you can hot reload all zone process settings via:
- For those who wonder what "exports" are, they are reference to variables that are made available at runtime of the sub event, such as:
(export_qglobals) (Heavy) : $qglobals
(export_item) (Heavy) : $itemcount{} $hasitem{} $oncursor{}
(export_zone) : $zoneid, $instanceid, $zoneln etc.
(export_mob) : $x, $y, $z, $h, $hpratio etc.
(export_event) : (event specific) IE: EVENT_SAY ($text)
== 10/16/2015 ==
Uleat: Added command '#bot clearfollowdistance [ <target> | spawned | all ]' to coincide with the activation of the load/save feature for follow_distance
== 10/13/2015 ==
Uleat: Important update to 2015_09_30_bots.sql - fix for orphaned entries causing crashes during the conversion process
Note: Please visit the thread below if you encounter issues during the conversion process
== 10/12/2015 ==
Uleat: Implemented 'bots' database versioning
Note: See thread for more information:
Kayen: Feign death will now break when hit by casted spells, consisted with live.
Implemented suport for AA/spell effect which provides a chance to avoid FD breaking from spells.
== 10/10/2015 ==
Kayen: Updated mechanics to be consistent with live regarding how invisible breaks when the client is the target of a spell.
Invisible will drop whenever a client is hit with a detrimental spell, regardless of if resisted, if it does damage or AOE.
Hide skill now also follows the same rules as above.
Implemented support for Rogue AA - Nerves of Steel which gives a chance for hide NOT to break
when client is hit with an AOE spell.
== 09/25/2015 ==
Uleat: Implemented 'Inventory Snapshot' feature to track online player inventories at timed intervals.
'Character:ActiveInvSnapshots' - active (true) or inactive (false - default)
'Character:InvSnapshotMinIntervalM' - minimum time between snapshots (in minutes)
'Character:InvSnapshotMinRetryM' - minimum time to attempt a retry after a failed snapshot (in minutes)
'Character:InvSnapshotHistoryD' - minimum time to keep snapshot entries (in days)
'#invsnapshot' - Takes a snapshot of target client's inventory (feature active or inactive)
'#clearinvsnapshots [use rule]' - Clears snapshot entries based on bool argument ([true] - honors the 'InvSnapshotHistoryD' rule, [false] - erases all)
== 08/02/2015 ==
Shendare: VS2013 query StringFormat glitches when "%f" is passed for the int GetRunSpeed().
Shendare: In CreateNewNPCCommand(), the npc_type_id and spawngroupid are created in the database, but never set in the spawn class, so later it can't delete them with #npcspawn remove or #npcspawn delete.
== 07/27/2015 ==
Uleat: Reworked the QS Audit code in Handle_OP_ShopPlayerBuy (\zone\client_packet.cpp) to help eliminate potential for exception errors
== 07/22/2015 ==
mackal: Corrected some hate value calcs based on updated
Rule Aggro:MaxStunProcAggro to Aggro:MaxScalingProcAggro since the cap applies to more than stuns
== 07/16/2015 ==
mackal: Rework spell aggro based on
== 07/15/2015 ==
Hateborne: Added optional ability to enforce task level requirements in perl and lua via an added, optional parameter to $client->AssignTask and quest::assigntask.
Use cases:
quest::assigntask(703); # this still assigns the task as normal, no functional change
quest::assigntask(703, 1); # this will assign the task, provided the character meets the db-stored level requirements
$client->AssignTask(703, $npc->GetID()); # still assigns the task as normal, no functional change
$client->AssignTask(703, $npc->GetID(), 1); # this will assign the task, provided the character meets the db-stored level requirements
== 07/06/2015 ==
mackal: Implement Triple Attack Skill
Parses showed about rand(1000) for the chance, may need more investigating
Corrected Double Attack chances as well
Running optional 2015_07_06_TripleAttack.sql will set current toons to their max skill
This is optional because the admins might want to go a different route.
== 07/05/2015 ==
mackal: Rewrite NPC combat attack round logic
An NPC "quading" is really just an NPC with innate dual wield that doubles on both hands
The old rules allowed NPCs to hit 6 times in one round
NPCs also seem to have their own skill progression for DW/DA
You can set Combat:UseLiveCombatRounds to false to use the old rules
PC Double Attack rates kind of follow the same thing but still needs to be implemented
Kinglykrab: WARNING: summonburriedplayercorpse is now summonburiedplayercorpse, getplayerburriedcorpsecount is now getplayerburiedcorpsecount, summon_burried_player_corpse is now summon_buried_player_corpse, and get_player_burried_corpse_count is now get_player_buried_corpse_count FIX THESE IN YOUR SCRIPTS OR THEY WILL NOT WORK!!!!
Added bot saylinks (thanks Uleat!)
Command aliases for #augmentitem (#aug), #findnpctype (#fn), #findspell (#fs)
Bot command changes: #bot sow -> #bot speed, #bot magepet -> #bot setpet, #bot resurrectme -> #bot resurrect
Changed all occurrences of burried to buried in the code.
client_packet.cpp was referencing old columns in character_corpses, not sure how we didn't already see this before.
== 7/4/2015 ==
mackal: Reworked the activated avoidace skills (riposte, dodge, etc) based on dev quotes
This also fixes the order things are checked (avoidance skills, THEN hit/miss)
Also riposte immunity from the increase riposte chance spell effect.
== 7/2/2015 ==
KLS/mackal: AA system has been rewritten fixing a ton of bugs and extending functionality while making it easier to create new AA points.
KLS/mackal: New tables are needed and so older data will need to be migrated to the new system.
KLS/mackal: The SQL saves the old aa points spent/avail/character_alt_abilities data if any server ops want to do something different than PEQ did with it.
KLS/mackal: Will try to get a wiki entry written up next week some time explaining the system but it's really not hard to follow the db tables in the meantime.
== 7/1/2015 ==
Akkadius: Fix an issue where emote messages would overflow the buffer of 256 by increasing the size and changing some of the initialization
Akkadius: Added a custom Health Update message that will display in the middle of the players screen, to enable this server wide you must enable rule 'Character:MarqueeHPUpdates'
Akkadius: (Haynar) Fixed some runspeed issues with Perl and LUA scripts
Akkadius: (Haynar) Updated #showstats and #npcstats for new speed calcs to display speeds again in familiar float format.
Akkadius: (Haynar) Improved client movement while AI Controlled, such as feared and charmed. Movement will be much smoother from clients perspective.
== 06/12/2015 ==
Uleat: Adjusted SessionStats to better reflect a sister implementation
== 06/07/2015 ==
Uleat: Implemented optional rule for using disenchanted bags. Action triggers at the same point that temporary items are removed.
Optional SQL: utils/sql/git/optional/2015_06_07_TransformSummonedBagsRule.sql
mackal: changes to AA packets since more fields have been identified
mackal: fix exploit with expendable AAs punching holes in the aa_array and staying around longer than they are welcomed
== 05/25/2015 ==
Akkadius: Implemented disjointed zone based time, this can be triggered via quest methods
Akkadius: Added parameter to LUA and Perl method settime(hour, minute, [update_world = true])
- If update_world is false, the zone will then unsubscribe itself from regular worldserver time synchronizations
- Basically this localizes the zones time and keeps it from syncing with world updates
Akkadius: Added DB ver 9082 with update to add npc_types texture columns if table does not currently have them
== 05/22/2015 ==
Uleat: Added null-term declaration for character names in ENCODE(OP_CharInfo) - where appropriate
== 05/20/2015 ==
mackal: Bard instrument mods should be more consistent with live. Zoning will keep instrument mod for long duration buffs (selo's)
Still need to have procs/doom effects to inherit the instrument mods from their source buff/whatever
== 05/18/2015 ==
KLS: Changed how fishing locates water to hopefully be a bit more accurate at the expense of a bit more cpu power per line cast.
== 05/15/2015 ==
Uleat: Added check to EntityList::CheckSpawnQueue() to bypass dereference if returned iterator is npc_list.end() - should fix the debug assertion failure crash
== 04/30/2015 ==
mackal: Implement mob and client melee push
You can set Combat:MeleePush to false to turn off or change Combat:MeleePushChance to increase the chance an NPC can be pushed
PCs are always pushed, need to do more testing to verify.
== 04/22/2015 ==
Uleat: Probable fix for 'Debug Assertion Failure' in Client::GarbleMessage() when calling the 'isalpha' macro.
== 03/29/2015 ==
Secrets: Identified the Target Ring fields for RoF/RoF2.
Secrets: Added a perl accessor for the last target ring position received from the client. Usage: $client->GetTargetRingX(), $client->GetTargetRingY(), $client->GetTargetRingZ()
== 03/12/2015 ==
Akkadius: [ V7] Add Option 9) LUA Modules - Download latest LUA Modules (Required for Lua)
== 03/11/2015 ==
Akkadius: [] Add Option 7) Plugins - Download latest Perl plugins
Akkadius: [] Add Option 8) Quests - Download latest PEQ quests and stage updates
Akkadius: [] Set version 5 of script
== 03/10/2015 ==
Akkadius: [] Add Option 6) Download Latest map and water files
== 03/04/2015 ==
Akkadius: Fix Spell Book Deletion
== 03/03/2015 ==
Uleat: Fix for 'Invalid Slot ID' messages. Bag slot count is now enforced during database saves to eliminate existing 'hidden' duplicated items..sorry MQ2 users...
Uleat: Fix for Item loss during corpse looting and possible item loss when purchasing items from LDoN or Adventure merchants. (cursor-related)
== 02/27/2015 ==
Uleat: Final 'tweak' for light sources until a valid issue arises. Wearable equipment now matches client behavior. Stackable light sources are bugged in the client..but, the current timer update implementation alleviates this condition.
== 02/26/2015 ==
Uleat: Updated light source criteria to (hopefully) match what the client uses (still needs tweaking)
Uleat: Changed 'general' light source checks to accept the last valid light source (client behavior)
- "Fire Beetle Eyes" are still causing issues in general slots (no item movement sound effect)
- Wearable equipment types still register as valid light sources when in general slots (needs exemption criteria)
== 02/23/2015 ==
Noudess: Allow for a rule to set starting swimming && SenseHeading value.
I moved the swimming override to char create instead of setting it
every time a char enters a zone.
Also added rules to not ignore, but rather forrce sense heading packets to be
used to train it instead of maxing it out like before.
Uleat: Fix for RoF+ clients showing active 'Return Home' button when action is not available (swapped 'GoHome' and 'Enabled' fields in RoF-era CharacterSelectEntry structs)
== 02/21/2015 ==
Noudess: Starting erudites that were supposed to start in paineel were landing in erudin on Titanium. Fixed to be paineel.
== 02/20/2015 ==
mackal: Implement claims for RoF/RoF2 (should no longer crash the client!)
- fixed bugs related to claims for the rest of the clients (woo infinite loops)
== 02/18/2015 ==
Trevius: Fix for potential recursive loops if using RemoveFromHateList() within EVENT_HATE_LIST.
== 02/17/2015 ==
Uleat: Implemented per-client character creation limiting. Caps are unknown, don't get over-zealous!
- Titanium is hard-coded to min/max of 8 in both the server and client translator code (client doesn't support variations in available character count)
- SoF thru RoF2 have had their max characters raised to 12 from 10
- Changing the number of characters per account is accomplished by:
1) Setting consts::CHARACTER_CREATION_LIMIT to the desired count in the client's constants file in ../common/patches/
2) Ensuring that eq_dictionary's EmuConstants::CHARACTER_CREATION_LIMIT is equal-greater than the client's new value..referencing is good
3) Recompiling the server code
- A rules-based qualifier may be added at some point
== 02/16/2015 ==
Trevius: (RoF2) Bazaar Trading (Buying/Selling) is now fully functional. Bazaar (/bazaar) search is not yet functional.
mackal: (RoF2) Send the bard focus effects, note custom servers will need to fix their items, server side we still use the old system, but RoF2 wasn't showing anything with not sending focus, so send them
== 02/14/2015 ==
Trevius: (RoF2) Bazaar is now partially functional. RoF2 clients can start/end trader mode and other clients can purchase from them. No other functionality yet.
Uleat: Implemented higher bandolier and potion belt counts for clients that support will still need to activate them through the proper aa's, etc...
== 02/12/2015 ==
Akkadius: Implement zone based gravity, required SQL DB change
- To test `zone` table `gravity` values, change the value and use #zheader <zoneshortname> to test
== 02/11/2015 ==
Trevius: (RoF+) Bandolier no longer displays a Treasure Chest Icon when no Bandoliers are set.
== 02/09/2015 ==
Trevius: (RoF+) Setting Alt flag on characters in the Guild Management Window is now saved and functional for filtering.
Trevius: (RoF+) Guild Invites between RoF+ and previous Clients is now functional.
== 02/08/2015 ==
Kayen: Implemented npc specialability (44) COUNTER_AVOID_DAMAGE which when applied to the ATTACKING NPC will make their attacks more difficult to be avoided by riposte/dodge/parry/block.
Parama0: Negative modifer value that affects ALL avoid damage types dodge/parry/riposte/block) chance on defender. Ie (44,50 = 50 pct reduction to ALL)
Parama1: Negative modifer value that affects RIPOSTE chance on defender. Ie (44,1,0,50 = 50 pct reduction to riposte chance)
Parama2: Negative modifer value that affects PARRY chance on defender. Ie (44,1,0,0,50 = 50 pct reduction to parry chance)
Parama3: Negative modifer value that affects BLOCK chance on defender. Ie (44,1,0,0,0,50 = 50 pct reduction to block chance)
Parama4: Negative modifer value that affects DODGE chance on defender. e (44,1,0,0,0,0,50 = 50 pct reduction to dodge chance)
Example of usage: Player has Improved Dodge V (+50 pct dodge chance), you want to negate this bonus you would set 44,1,0,0,0,0,50 on your NPC.
== 02/07/2015 ==
Akkadius: Reduced #repop time dramatically by taking down hundreds of individual SELECT/DELETE/INSERT queries in routines and bringing it down to very few
== 02/06/2015 ==
Uleat: Updated returns for Inventory and ItemInst const iterators. (const == const)
Uleat: Replaced 'iter_inst' and 'iter_contents' typedefs with their stl definitions
Uleat: Removed 'limbo' from the 'HasItem' series of checks - including lore checks. The client excludes this range and it causes issues when performing item searches - dupe lore checks were added to account for this.
Uleat: Updated command #iteminfo to show light source information and a few other things
== 02/05/2015 ==
Trevius: Fixed Environmental Damage for RoF2.
== 02/03/2015 ==
Trevius: Crashfix for TempName() when numbers are passed at the end of the name.
Uleat: Tweaking of item type exclusions to alleviate strobing conditions with light sources
== 02/02/2015 ==
Akkadius: Implement Packet logs with dumps
- Category: 41: Packet: Server -> Client With Dump
- Category: 42: Packet: Server -> Client With Dump
== 02/01/2015 ==
mackal: Add quest debugging to lua
eq.debug("Test debug level implicit 1")
eq.debug("Test debug level explicit 1", 1)
eq.debug("Test debug level explicit 2", 2)
eq.debug("Test debug level explicit 3", 3)
Akkadius: Add Packet Logging Categories
- 5 - Packet: Client -> Server - Logs::Client_Server_Packet
- 39 - Packet: Server -> Client - Logs::Server_Client_Packet
- 40 - Packet: Client -> Server Unhandled - Logs::Client_Server_Packet_Unhandled
== 01/31/2015 ==
Trevius: Fixed FindGroundZ() and GetGroundZ() to once again utilize the X and Y arguments that are passed to them.
== 01/30/2015 ==
Akkadius: Implemented event type "EVENT_ENVIRONMENTAL_DAMAGE"
- This event triggers when taking any sort of environmental damage. Example use:
quest::debug("env_damage is " . $env_damage);
quest::debug("env_damage_type is " . $env_damage_type);
quest::debug("env_final_damage is " . $env_final_damage);
Result: (Test falling in Velks):
- Implemented LUA counterpart of this same implementation above
Akkadius (Bobaski): Add PoK New Merchant sql/git/optional/2015_01_30_poknowledge_spell_vendors.sql
== 01/29/2015 ==
Trevius: Added more information to Mercenary Logging.
Trevius: Added potential fix for Mercenaries that fail to unsuspend.
Trevius: Added a new "statscale" field to the merc_stats table that can be used to quickly balance Mercenary Stats based on Level.
Trevius: The new "statscale" field now combines with the Mercs::ScaleRate rule value (default 100 percent for both).
== 01/28/2015 ==
Akkadius: Added Logs::DebugQuest category per request from Trevius (Great idea)
- Exported quest::debug(log_message, [debug_level = 1)
- Example:
quest::debug("This is a test debug message, level 1 (default)");
quest::debug("This is a test debug message, level 1", 1);
quest::debug("This is a test debug message, level 2", 2);
quest::debug("This is a test debug message, level 3", 3);
- Uses traditional logging system to output this category
- Required MySQL Source in Database version 9070
== 01/27/2015 ==
Trevius: Removed "Mercenary Debug:" from the Mercenary Log entries.
Trevius: Resolved duplicate "You have no Mercenaries" messages when zoning without owning a Mercenary.
Trevius: Mercenaries should now always be able to unsuspend if the timer is up.
Trevius: More work on Mercenaries and Grouping to reduce bugs and redundant queries.
Uleat: Finished ClientVersion update to include patch file and namespace updates - don't forget to copy the renamed 'patch_UF.conf' into your eqemu directory.)
== 01/26/2015 ==
Uleat: Changed Corpse::MoveItemToCorpse() to allow 'by address' passing of removed item slot list. Fixed a bug that kept soul-bound items inside of bags from attuning properly
== 01/25/2015 ==
Trevius: Fixed an issue where Mercenaries were causing several DB queries per second while suspended.
Trevius: Added Logs::Mercenaries to the new Logging System. Logging of Mercenary information is off by default with the required SQL.
== 01/24/2015 ==
Uleat: Added equipment light source functionality to all mob derived classes (may still need tweaking...)
- In addition to equipment light sources, innate npc_type light sources have already been activated
- Valid light source values are 0 thru 15 (values are bitmask checked and limited to 0x0F)
- Not all classes handle equipment light sources the same way due to their equipment/loot list configurations
- Spell (casting?) light sources may be implemented at some point..more information is needed
- Currently, loot list (general inventory) light sources are limited to ItemTypeMisc and ItemTypeLight to avoid issues with worn-specific light sources emitting
- Augment light sources are not recognized by the client and, therefore, not implemented in the server code
== 01/22/2015 ==
Akkadius: Massive Log System overhaul, see:
== 01/21/2015 ==
Uleat: Added `light` field to npc_types load query (all six clients tested positive for functionality.)
Note: This only affects 'innate' light. Equipment (other) light is still in-work.
Optional SQL: utils/sql/git/optional/2015_01_21_NPC_Types_Light_Field_Primer.sql
== 01/20/2015 ==
Uleat: Fix for Inventory::_HasItemByUse(bucket) using the parent container when searching for bag container items.
== 01/19/2015 ==
Uleat: Changed 'enum EQClientVersion' to 'enum class ClientVersion.' Other light modifications were made to accommodate this namespace. Added 'RoF2' to the lua client version enumeration.
== 01/15/2015 ==
Uleat: Attempted fix for elusive inventory bug:
- Removed 'iter_queue' typedef and converted lcast to explicit or auto defines
- Reworked several functions that manipulate the cursor queue
- Found/corrected one occurrence of post-processing iterator incrementing in an ItemInstQueue handler
- Added many scope declarations in code that handles inventory manipulation (loose macros are bad...)
Uleat: Added Item_Struct pointer checks to ItemInst methods that did not have them
Uleat: Changed IsEquippable(race,class) to use bit-wise 'and' (&) over '(x%2)==1' in conditional check.
Uleat: Changed DyeArmor() assignment of 'armor_color' to use bit-wise 'or' and bit-shifting (|,<<) over multiplication and addition (*,+).
== 01/13/2015 ==
Uleat: Placed an upper limit on the cursor queue save loop.
Trevius: (RoF2) Guild invites now add new members as members instead of recruits, and /guild chat works properly.
Trevius: (RoF2) Guild Promote is now functional.
== 01/12/2015 ==
Uleat: Fix for OP_FormattedMessage text link server crashes
Uleat: Added text link translators for OP_TaskDescription (RoF+ -- all clients current)
Uleat: Fix for load_bots.sql using '\\' as a delimiter (Changed to '$$')
== 01/11/2015 ==
Uleat: Added text link translators for OP_TaskDescription (Ti thru UF..RoF+ in-work)
== 01/10/2015 ==
Uleat: Added text link translators for OP_Emote
== 01/09/2015 ==
Uleat: Added text link translators for OP_FormattedMessage
== 01/08/2015 ==
Trevius: Added some extra checks and clean-up related to Groups and Mercenaries.
== 01/07/2015 ==
Uleat: Excluded text link body from message scrambling in Client::GarbleMessage()
Trevius: Mercenaries now load directly from tables only. The vwMercNpcTypes view is no longer required and can be deleted.
Trevius: Query fix for group_leaders table. This may resolve some crashes/bugs related to Mercs/Bots and Groups.
== 01/06/2015 ==
Trevius: Changed the pet command #defines to be based on RoF2 list of pet commands and added decodes to Titanium, SoF and SoD.
Trevius: (RoF+) The /pet focus on/off and /pet hold on/off commands are now functional.
Trevius: Added defines for all remaining pet commands and some support for them as well.
== 01/05/2015 ==
Uleat: Fixed (added translators for) item/text links. Only 'OP_ChannelMessage' and 'OP_SpecialMesg' are currently handled..more text channels will be added as the need arises.
== 01/03/2015 ==
Trevius: (RoF2) /shield (shielding) and /key (key ring) are both now functional after opcode updates.
== 01/02/2015 ==
Trevius: (RoF2) *Hopefully* Fixed looting incorrect items from NPCs. Please report any issues!
Trevius: (RoF2) Now able to loot items past the 10th slot on NPC corpses.
Trevius: Attuned Items can now be auto-looted and will equip properly.
Trevius: Mercenaries and Bots will no longer take a share from /split or /autosplit.
== 12/30/2014 ==
Trevius: (RoF2) Aug Type 21 no longer shows the "Buy Now" button in the aug slot of items.
Trevius: (RoF2) Identified the "Copied" item flag with the help of Uleat.
== 12/29/2014 ==
Trevius: (RoF2) Identified a few Item Fields and resolved an issue with cloth armor not accepting certain augments that they should.
Akkadius: Updated $client->UpdateTaskActivity to have optional argument ignore_quest_update IE: Client::UpdateTaskActivity(THIS, TaskID, ActivityID, Count, [ignore_quest_update])
Akkadius: Also updated internal UpdateTaskActivity methods to optionally ignore quest based task updates to prevent feedback
== 12/28/2014 ==
Uleat: Implemented class Client::TextLink as a replacement for the dozens of individual link formatters.
== 12/27/2014 ==
Akkadius: Add option to automatic database upgrade script 5) Download latest Opcodes from Github
Trevius: (RoF2) Fixed dropping items on the ground so they go to ground level instead of camera height.
Trevius: Show Helm Option should be functional again.
Kayen: Implemened npc special ability (43) CASTING_RESIST_DIFF which sets innate resist modifier on
ALL spells used by that NPC. Ie. 43,1,-200 will set a -200 innate resist diff, so if your npc cast
a spell that has a -10 resist modifier the final resist diff would be -210.
== 12/25/2014 ==
Uleat: Updated 'links' code for all clients
== 12/24/2014 ==
Trevius: (RoF+) Added herosforgemodel field to the npc_types table.
Trevius: (RoF2) Updated item links from #npcstat command output.
Trevius: (RoF+) Implemented Hero's Forge Armor for NPCs. Set the herosforgemodel field in npc_types table to the model (example: 84 for full set, or 12107 for robe).
Trevius: (RoF+) Hero's Forge Armor now overrides NPC texture settings. To display Hero's Forge Armor Helms, set helmtexture field to anything other than 0.
== 12/23/2014 ==
Uleat: Tidied up some ItemInst* declarations and added some nullptr checks.
Trevius: (RoF+) Added support for Hero's Forge Robe Models. Set herosforgemodel field in items table to exact model such as 11607, 11707, etc.
== 12/22/2014 ==
Trevius: (RoF2) Fixed Tracking.
Trevius: (RoF+) Added a work-around for the cursor buffer issue.
== 12/21/2014 ==
Trevius: (RoF2) Fixed Extended Targets Window by correcting opcodes.
Trevius: (RoF/RoF2) Fixed Guild Rank in the Player Profile, which prevents the guild rank message on login/zone.
== 12/20/2014 ==
Akkadius: Updated #cvs to display RoF2 Client Stream count
== 12/19/2014 ==
Trevius: (RoF2) Fixed Leadership AA Purchasing and Recipe Search by correcting opcodes.
Trevius: Fixed Armor Tinting (players and NPCs) that was broken during a previous update.
Trevius: (RoF2) Fixed Rest Timer, Show Helm Option, Auto-Consent Options, and identified Krono in the PP.
Trevius: Fixed Selling for Alternate Currency Merchants for RoF and RoF2.
== 12/18/2014 ==
Trevius: Finished lining up the RoF2 Player Profile Struct. Zone times are now normal, and everything from the PP is accurate in game now.
Trevius: Fixed zoning after death for RoF2.
== 12/17/2014 ==
mackal: Use vectors for route stuff, should be more CPU cache friendly so faster
Secrets: EQStream changes as recommended by a community member in private.
== 12/15/2014 ==
Trevius: (RoF+) Implemented the 6th Augment Slot for Items.
Trevius: Player Corpses now saved attuned settings for Items.
Required SQL: utils/sql/git/required/2014_12_15_multiple_table_updates.sql
== 12/13/2014 ==
mackal: Fix guild rank spam on zone (needed to be in OP_PP).
Trevius: (RoF+) Implemented Armor Ornamentation using Hero's Forge Armor Models. To use, create an ornamentation augment and set the herosforgemodel field in the items table.
Trevius: (RoF+) Added command #heromodel (#hm for short) - Usage: #heromodel [hero forge model] [ [slot] ] (example: #heromodel 63)
Be sure to run this or there will be item loss:
Required SQL: utils/sql/git/required/2014_12_13_inventory_table_update.sql
== 12/12/2014 ==
mackal: Add special attack 42, Ignore Root Aggro Rules. This allows you to root a mob and have them still use the normal aggro rules (so they will attack the one with most hate, not closest)
== 12/09/2014 ==
Trevius: (RoF+) Implemented Hero's Forge Armor Models for Items. To use, set herosforgemodel field in the item table to a model number such as 63 (for example).
mackal: SoF+ swarm pets will no longer be F8able (without a hack!)
== 12/08/2014 ==
Secrets: Added a feature that allows an EQ client to log in directly to World without having to enter the LoginServer, provided the 'password' field is set in WorldServer.
== 12/04/2014 ==
Kayen: Ranged attacks will now more accurately check MAX firing range, fixing the issue where you would
hit ranged attack and nothing would happpen due to incorrect server side range checks.
Trevius: Initial addition of the RoF2 client from May 10th 2013 (currently available on Steam as the F2P client).
Trevius: RoF2 is disabled by default, but you can enable by editing /common/patches/patches.cpp (see comments)
== 12/01/2014 ==
Trevius: Mercenaries now spawn as the same Gender and Size of the Merchant they are purchased from.
Trevius: Mercenaries now spawn with randomized facial features when purchased.
Trevius: Setting a lastname for NPCs will now override any hard coded lastname (such as GM Trainers).
Required SQL: utils/sql/git/required/2014_12_01_mercs_table_update.sql
== 11/28/2014 ==
Trevius: Fixed a zone crash related to numhits for spells.
Trevius: Fixed a query related to group leaders logging in.
Trevius (Natedog): Fixed a world crash related to attempting to join an adventure with Mercenaries.
== 11/27/2014 ==
Kayen: Projectiles (ie Arrows) fired from archery will now do damage upon impact instead of instantly (consistent w/ live).
Optional SQL: utils/sql/git/optional/2014_11_27_ProjectileDmgOnImpact.sql
== 11/25/2014 ==
Trevius: Spells that modify model size are now limited to 2 size adjustments from the base size.
Trevius: Fix to prevent Mercenaries from being set as Group Leader.
== 11/24/2014 ==
Trevius: Added Rule NPC:EnableMeritBasedFaction (disabled by default) - Allows faction gain to work similar to experience.
== 11/22/2014 ==
Trevius: Grouping with Mercenaries is now considerably less buggy.
Trevius: Fixed an issue with Spell Globals related to high Character IDs.
Trevius: Crash fix for Swarm Pets.
== 11/19/2014 ==
Trevius: Mercenaries now Dismiss, Suspend, Unsuspend, and Die correctly.
== 11/18/2014 ==
Trevius: Mercenaries can now zone once again.
== 11/17/2014 ==
mackal: Correct OP_AugmentInfo reply. This fixes RoF display issue with Adventurer's Stone. Still issues with UF/SoF/SoD though.
== 11/16/2014 ==
mackal: fix size issue with ControlBoat_Struct and exploit fix in OP_BoardBoat
Akkadius: Implemented Automatic Database update and versioning system
Akkadius: Created database revision define, this is located in version.h in common #define CURRENT_BINARY_DATABASE_VERSION 9057
- This revision define will need to be incremented each time a database update is made
- Along with a revision define increment, you will need to update the db_update manifest located in:
- An entry needs to be made at the bottom of the manifest, the entry is quite simple
- Example: 9057|2014_11_13_spells_new_updates.sql|SHOW COLUMNS FROM `spells_new` LIKE 'disallow_sit'|empty|
- This latest example is checking to see if the spells_new table contains the column 'disallow_sit', if its empty, the update needs to be ran
- More examples of match types below:
# Example: Version|Filename.sql|Query_to_Check_Condition_For_Needed_Update|match type|text to match
# 0 = Database Version
# 1 = Filename.sql
# 2 = Query_to_Check_Condition_For_Needed_Update
# 3 = Match Type - If condition from match type to Value 4 is true, update will flag for needing to be ran
# contains = If query results contains text from 4th value
# match = If query results matches text from 4th value
# missing = If query result is missing text from 4th value
# empty = If the query results in no results
# not_empty = If the query is not empty
# 4 = Text to match
- The manifest contains all database updates 'Required' to be made to the schema, and it will contain a working backport all the way back to SVN -
currently it is tested and backported through the beginning of our Github repo
- On world bootup or standalone run of, users will be prompted with a simple menu that we will expand upon later:
EQEmu: Automatic Database Upgrade Check
Operating System is: MSWin32
(Windows) MySQL is in system path
Path = C:\Program Files\MariaDB 10.0\bin/mysql
Binary Database Version: (9057)
Local Database Version: (9057)
Database up to Date: Continuing World Bootup...
Retrieving latest database manifest...
Saved: db_update/db_update_manifest.txt
Database Management Menu (Please Select):
1) Backup Database - (Saves to Backups folder)
Ideal to perform before performing updates
2) Backup Database Compressed - (Saves to Backups folder)
Ideal to perform before performing updates
3) Check for pending Database updates
Stages updates for automatic upgrade...
0) Exit
Akkadius: Created, placed in utils/scripts folder, used for the automatic database update routine (Linux/Windows)
- script created db_version table if not created, if old one is present it will remove it
Akkadius: Created, placed in utils/scripts folder, used for the automatic database update routine backups and standalone backups (Linux/Windows)
Akkadius: World will now check the script on bootup, if the script is not present, it will fetch it remotely before running -
when is done running, world will continue with bootup
== 11/15/2014 ==
Uleat(Natedog): A better fix for OP_ShopPlayerBuy - doesn't cause the issues that I introduced
Kayen: Implemented NPC Special Ability 41 'Allow To Tank', gives NPC opportunity to take aggro over a client in melee range.
Kayen: Updated swarm pet AI to be consistent with live.
*OLD AI: Swarm pet would lock on to target until target died, then depop as soon as target died.
*NEW AI: Swarm pet will attack cast on target, NOT perma locked it can change targets if attacked
by something else that generate more hate. When target dies swarm pet will follow owner, if owner is
attacked by something else the swarm pet will attack it (until duration timer despawns the pet).
Kayen: Updated perl quest function: MakeTempPet(Tspell_id, name=nullptr, duration=0, target=nullptr, sticktarg=0)
Kayen: Implemented perl quest function: Mob::TypesTempPet(npctypesid, name=nullptr, duration=0, follow=0, target=nullptr, sticktarg=0)
Note: 'sticktarg' field will cause the swarm pet to use the OLD AI
Rule to use OLD AI only - default is disabled.
Optional SQL: utils/sql/git/optional/2014_11_15_SwarmPetTargetLock.sql
== 11/14/2014 ==
Secrets: Identified object size and solidtype as flags. Exported them as functions to Perl.
mackal: Don't use the hack for charms that doesn't work on RoF
mackal: UF too
mackal: Tit
mackal: SoF
mackal: SoD
mackal: 62 (untested)
== 11/13/2014 ==
Kayen: Implemented target type (44) 'Beams' (which projects an AE infront of caster with a specified length and width).
Kayen: Implemented target type (32) AE Target HateList
Kayen: Implemented target type (36) Area Client Only
Kayen: Implemented target type (37) Area PC Only
Kayen: Implemented target type (39) Group No Pet
Uleat: PlayerLogMerchantTransactions does not support partial stack purchase logging at this time
== 11/12/2014 ==
Uleat: Changed 'GMTrainee' struct to reflect the actual client hard-coded max skill count (100) - applies to all currently supported clients (6.2->RoF)
== 11/11/2014 ==
Uleat: Third attempt at a fix for GM trainer zone crashes... (this is starting to look like a KLS fix...)
== 11/10/2014 ==
Uleat: Fix for GM Trainer crashing server (really!)
JJ: Yellow faction messages.
== 11/09/2014 ==
Kayen: Implemented support for spell target type (45) 'Target Rings' on Underfoot (does work earlier expansions). Thanks to Lecht for figuring out the op_code side.
JJ: Implement new Live-like faction adjustment message using rule Client:UseLiveFactionMessage.
Optional SQL: utils/sql/git/optional/2014_11_09_LiveFactionMessages.sql
== 11/06/2014 ==
mackal: Tracking default sort will now be correct order
Trevius: Fixed dynamic merchant list loading. Allows any merchant to be used in any zone.
== 11/03/2014 ==
Secrets: Fixed an overflow in melee lifetap calculations (int16 vs int32)
Secrets: Fixed overflow on AC and ATK values that can go out of range.
Secrets: Merc/Bot fixes for previous updates.
Secrets: Changed a lot of int16s for stat-related functions to int32 because they were causing combat formula overflows (int16/int32 mismatch).
Secrets: Linux fix?
== 11/02/2014 ==
Akkadius: Added out of range checking for Spell Save/Loads
== 11/01/2014 ==
Trevius: Fixed potential crash related to Pets/Mercs buffs when targeting themselves.
JJ: (noudess) Revamped faction system. See
== 10/28/2014 ==
Uleat: Added Client::InterrogateInventory(). Can be invoked by #interrogateinv and is also called when Handle_OP_MoveItem() calls for SwapItemResync()
== 10/22/2014 ==
Uleat: Fix for stacking items in a world object..added a new command option: #peekinv world - will show world container contents, if one is in use by target.
== 10/20/2014 ==
mackal: Inspect Buffs rank 1 will now show NPC buffs in target window (SoD+)
== 10/19/2014 ==
Uleat: Updated command #peekinv to display item links properly in RoF clients
mackal: Group Mentoring in raids
mackal: Inspect Buffs (text only version) works in raid groups
mackal: Make use of the Inspect Buffs op/packet. 62 SOL until someone finds its op
== 10/18/2014==
mackal: Implement group mentor, sharing leadership exp (SoF+ only)
mackal: Add gaining of group leadership while in raids
== 10/16/2014 ==
Uleat: Fixed the auto-conversion view naming error and renamed the views in the script files. Added a fix sql for databases that auto-converted.
Fix SQL: ../sql/git/bots/deprecated/2014_10_16_Lower_Case_View_Fix.sql
== 10/15/2014 ==
Uleat: Cleaned up load/drop bots sqls, added '../utils/sql/git/bots/deprecated' and '../deprecated/load_bots_old.sql' (use this file on pre-player blob conversion databases.)
Notes: I modifed the behavior of both load and drop bots to fail on the first operation if their modifications have been performed already.
'load_bots.sql' will explicitly add bot schema, while 'drop_bots.sql' will explicitly drop it. I also added a few lines to change
a few altered tables back to their original state - as of the date in the file.
== 10/13/2014 ==
mackal: Partially implement leadership and raids
Currently working: client side only effects and stat bonuses.
Not working: Mark NPC, and other stuff that need extra server side support
Currently only UF tested (Tit and 62 may just work, others need packet work)
== 10/12/2014 ==
Akkadius: Fix for LDON Character Stat load
== 10/11/2014 ==
mackal: Implement Raid MOTD for UF
Don't forget 2014_10_11_RaidMOTD.sql!
== 10/09/2014 ==
Uleat: Added 'BOTS' conversion code to supplement the database 'PlayerProfile' blob conversion that Akkadius recently implemented.
Note: This automatic conversion uses the view `vwbotcharactermobs` as an update vector. If you need/would like for the converter to run on
previously and/or manually changed code, or just have a need for it to re-run, change the following in the database view and save:
"c.`last_login`," to "c.`timelaston`,"
"c.`zone_id`" to "c.`zoneid`"
"FROM `character_data` AS c" to "FROM `character_old` AS c"
** This will only work if you haven't deleted your `character_old` table **
== 10/07/2014 ==
mackal: Identified tutorial flag in all charcreate packets, reworked logic to correctly set homes binds
== 10/05/2014 ==
Uleat: Added Server<->Corpse slot translators needed for re-enumeration (inactive until phased in)
== 10/03/2014 ==
Uleat: Fixed Ti(6.2) OP_AugmentInfo translation that I broke (does not currently need and I mis-read a process)
Uleat: Moved client patch OP_LootItem slot translation to external handlers
== 10/02/2014 ==
Kayen: Exported to PERL $client->SendSpellAnim(targetid, spellid)
This function sends the spell graphic of a spell without actually having to cast the spell.
== 10/02/2014 ==
Uleat: First round of Ti/6.2 translators added - needed for re-enumeration
== 10/01/2014 ==
Kayen: Exported to PERL $client->SendColoredText(color, msg)
mackal: Exported SendColoredText to lua
== 09/30/2014 ==
Uleat: Implemented click-casting from bag slots for clients that natively support it (RoF)
== 09/28/2014 ==
mackal: Add support for post June 18, 2014 Hundred Hands Effect spells (they changed the formula and stuff)
set Spells:Jun182014HundredHandsRevamp to true if you're using a spell file from June 18, 2014+
== 09/27/2014 ==
Kayen: Implemented perl function $mob->GetSpellStat(spell_id, identifier, slot);
Note: identifier is the stat field in spells_new, slot is used for certain effects like effectid, base,base2, max ect.
Example $mob->GetSpellStat(121, "range"); //Returns spell range
Example $mob->GetSpellStat(121, "effectid", 1); //Returns the the value of effectid1
This will allow you to pull almost all the data for any spell in quest files.
mackal: Move the client's SetAttackTimer to the end of Client::CalcBonuses to keep the haste in sync
mackal: Correct haste/slow "stacking" rules
mackal: Correct SE_AttackSpeed4 to respect unslowable
mackal: Make the haste be between 1-225 like the client (<100 = slow, >100 = haste) to ...
mackal: Correct Hundred Hands effect and use formula provided by devs
== 09/24/2014 ==
Uleat: Re-ordered server opcodes and handlers to give them some predictability of location (I need this for the inventory re-enumeration.)
mackal: Added helper function bool EQEmu::IsTradeskill(uint32 skill)
== 09/23/2014 ==
Kayen: Spell recourse effects will now be applied AFTER the base spells effects have been applied (consistent with live).
Kayen: SE_ApplySpell and SE_TriggerSpell will now be applied based on which effect slot they are used in (instead of always before all spell effects are checked).
Note: If a spell has multiple SE_TriggerSpell effects within it. Only one will be able to trigger. (If you want multiple spells use SE_ApplySpell)
== 09/22/2014 ==
Akkadius: #resetaa now covers the function of #resetaa and #refundaa
- #resetaa will wipe all AA data, refund the spent points into the available points and send character to character select properly
Akkadius: Removed #refundaa
Akkadius: Removed a lot of debug code for blob conversion
Akkadius: Changed status logging for loads/saves to Debug category
== 09/21/2014 ==
Akkadius: Player Profile Blob to Database Conversion
- Summary: HUGE difference in database speeds reads/writes and 1:10 datasize difference
- The new character storage engine unlike the character_ table before, is able to properly index data and make use of
proper MySQL/MariaDB caching optimizations and performance has increased phenominally
- EZ Server Character data size of 2.6GB `character_` table alone now takes up approx 600MB
- Character Data Loads take approx .03 seconds BEFORE MySQL/MariaDB cache
- Character Data Loads take approx .001-.0035 seconds AFTER MySQL/MariaDB cache
- Character Data Saves take approx .0001 - .003 for any particular save operation
- Database Auto Conversion: When the 'character_' table exists, World boot-up will queue an auto-conversion prompt and convert all of your characters, BACKUP
- On auto conversion, the following tables are created automatically:
- Table: `character_skills` - Stores Character Skills
- Table: `character_languages` - Stores Character Language
- Table: `character_bind` - Stores Character Bind point and Home Bind point designated by is_home bool field
- Table: `character_alternate_abilities` - Stores all Character AA
- Table: `character_currency` - Stores all Platinum/Gold/Silver/Copper and character related currencies
- Table: `character_data` - Stores basic character data (Fields from `character_` table migrated to this table)
- Table: `character_spells` - Stores character spells
- Table: `character_memmed_spells` - Stores character memorized spells
- Table: `character_disciplines` - Stores character disciplines
- Table: `character_material` - Stores character armor dye textures
- Table: `character_tribute` - Stores character tributes
- Table: `character_bandolier` - Stores character bandoliers
- Table: `character_inspect_messages` - Stores character inspection messages (Moved from `character_` table)
- Table: `character_leadership_abilities` - Stores character Leadership AAs
- Loads: Majority of Player profile loads now occur at Client::Handle_Connect_OP_ZoneEntry
LoadCharacterFactionValues(uint32 character_id, faction_map & val_list);
LoadCharacterSpellBook(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterMemmedSpells(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterLanguages(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterDisciplines(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterSkills(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterData(uint32 character_id, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp);
LoadCharacterCurrency(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterBindPoint(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterMaterialColor(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterBandolier(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterTribute(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterPotions(uint32 character_id, PlayerProfile_Struct* pp);
LoadCharacterLeadershipAA(uint32 character_id, PlayerProfile_Struct* pp);
- Saves: Occur all over the code now instead of calling full saves
SaveCharacterBindPoint(uint32 character_id, uint32 zone_id, uint32 instance_id, float x, float y, float z, float heading, uint8 is_home);
SaveCharacterCurrency(uint32 character_id, PlayerProfile_Struct* pp);
SaveCharacterData(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp, ExtendedProfile_Struct* m_epp);
SaveCharacterAA(uint32 character_id, uint32 aa_id, uint32 current_level);
SaveCharacterSpell(uint32 character_id, uint32 spell_id, uint32 slot_id);
SaveCharacterMemorizedSpell(uint32 character_id, uint32 spell_id, uint32 slot_id);
SaveCharacterMaterialColor(uint32 character_id, uint32 slot_id, uint32 color);
SaveCharacterSkill(uint32 character_id, uint32 skill_id, uint32 value);
SaveCharacterLanguage(uint32 character_id, uint32 lang_id, uint32 value);
SaveCharacterDisc(uint32 character_id, uint32 slot_id, uint32 disc_id);
SaveCharacterTribute(uint32 character_id, PlayerProfile_Struct* pp);
SaveCharacterBandolier(uint32 character_id, uint8 bandolier_id, uint8 bandolier_slot, uint32 item_id, uint32 icon, const char* bandolier_name);
SaveCharacterPotionBelt(uint32 character_id, uint8 potion_id, uint32 item_id, uint32 icon);
SaveCharacterLeadershipAA(uint32 character_id, PlayerProfile_Struct* pp);
- Deletes:
DeleteCharacterSpell(uint32 character_id, uint32 spell_id, uint32 slot_id);
DeleteCharacterMemorizedSpell(uint32 character_id, uint32 spell_id, uint32 slot_id);
DeleteCharacterDisc(uint32 character_id, uint32 slot_id);
DeleteCharacterBandolier(uint32 character_id, uint32 band_id);
DeleteCharacterLeadershipAAs(uint32 character_id);
- Now occur all over the code and only trigger when necessary
- Two FULL saves when looting a corpse, this has been reduced to just currency saves on initial loot and trimmed to one save since AddToMoneyPP did it already
- Every time a player moves coin with any situation (Splits/Trades/Merchant/Skills/Bank Coin Exchange/Coin Moves), a full save is made, this is now just a currency save
- Every time a player skilled up at a skill vendor, a full blob save hit was made, this is not just a currency hit
- Every time an AA was purchased, a full save was made
- Every time a spell was scribed/swapped, disc was trained
- When a client exists a zone, when a client enters a zone
- NOTE: These amount of excessive saves have caused scalability issues that cause the `character_` table to hang which causes process hangs that affect the whole server
because of the slowness of the `character_` table and the blob not allowing any indexing to occur
- All functions that once depended on the `character_` table are now rewritten to appropriately read from the `character_data` table
- Database query errors that occur during conversion or from and load/save/delete character functions are now leveraged via ThrowDBError and logs now go to
Server_Folder_Root/eqemu_query_error_log.txt (You cannot log errors natively through MySQL)
- DBASYNC IS NOW COMPLETELY REMOVED - This was mainly for Character data async loads/saves and merchantlist loads
- Side implementations:
Perl Exports:
- quest::crosszonesetentityvariablebynpctypeid(npctype_id, id, m_var) - Sets entity variables world wide with specified npctype_id
- quest::crosszonesignalnpcbynpctypeid(npctype_id, data) - Signals all NPC entities world wide with specified npctype_id
- $client->GetTaskActivityDoneCount(TaskID, ActivityID) - Gets task activity done count by task id and activity id for client entity
SELECT CONCAT(table_schema, '.', table_name) as table_name,
CONCAT(ROUND(table_rows / 1000000, 2), 'M') rows,
CONCAT(ROUND(data_length / ( 1024 * 1024 * 1024 ), 2), 'G') DATA,
CONCAT(ROUND(index_length / ( 1024 * 1024 * 1024 ), 2), 'G') idx,
CONCAT(ROUND(( data_length + index_length ) / ( 1024 * 1024 * 1024 ), 2), 'G') total_size,
ROUND(index_length / data_length, 2) idxfrac
FROM information_schema.TABLES
WHERE `table_name` LIKE 'character_%'
== 09/20/2014 ==
mackal: Fix crash in SendEnterWorld on illegally long names
mackal: The client only lets you enter 15 characters for your name (UF at least)
mackal: Add rule Spells:SHDProcIDOffByOne for pre-UF spell file, set to true, UF+ set to false
KLS: #suspend and #ban now have required messages to record the reason for the ban/suspension.
== 09/19/2014 ==
mackal: Added Client::Tell_StringID (used in tell queue messages)
mackal: Tell queues (and offline) messages now show correctly
mackal: Fix starting with capital check
== 09/18/2014==
mackal: Implement tell queues
Currently set to a limit of 20 by default (World:TellQueueSize) I was unable to hit the limit on live though (100+)
The required SQL nukes the old tell queue table, which may or may not be in your DB
Optional SQL adds the rule to the DB to allow easy of change
Note: this does not play well with multiple sessions with the same name on (crash and relog and have multiple sessions) but normal tells don't play well either
== 09/16/2014 ==
mackal: Implement spell formula 137 (BER AA Desperation)
Uleat (NateDog): Fix for LoadBuffs() crash when a spell with a non-persistent Illusion effect was loaded.
mackal: Fix some effect calcs + implement more (derived from the client)
== 09/15/2014 ==
Kayen: Nimbus effects will now be reapplied after zoning and will be removed when associated buff fades.
== 09/13/2014 ==
mackal: Fix rogues not having Thieves' Cant
== 09/09/2014 ==
mackal: Incrase Mob kick/bash timer by 3
mackal: Fix slow effect on NPC special attack reuse timers
mackal: Slow fixes to bots!
mackal: Revamped how NPC attack rate is set
SQL: 2014_09_09_attack_delay.sql
mackal: Added attackdelay to #npcedit
== 09/08/2014 ==
mackal: Fix slow calc
== 09/07/2014 ==
Akkadius: Fixed ROF Augment item dupe with not checking for available slots properly and adding items to the virtual instance
== 09/06/2014 ==
Uleat: Tweaked 'Smart' trading code to return main slots before sub slots in stackable and free space search processes. (If enough people ask for it, I'll add an optional rule to allow 'bag packing' - the original implementation behavior)
== 09/05/2014 ==
Uleat: Fix for cursor item loss when zoning. (Thanks to the other devs who traced and fixed the 'macro' issue!)
mackal: Fix size getting nuked with lua's SendIllusionPacket
== 09/03/2014 ==
Secrets: Identified the routines needed to augment items in RoF. Currently, only Insert and Remove are supported. Swap and Destroy do not work due to missing functions related to the cursor.
mackal: Added work around command to show numhits on your buffs (#shownumhits)
Uleat: Fix for timer issue introduced by Zone::ShutDown() fix.
== 09/02/2014 ==
Secrets: Identified OP_GuildPromote for RoF clients.
Secrets: Fixed promotion, demotion, transferring a leader and displaying of client ranks in the Rain of Fear client. The rain of fear client, as such, will only have 3 ranks like the other clients, but supports a theoretical 8 ranks later.
Secrets/Akkadius: Fixed an issue involving character name lookup in the new DB code.
mackal: crash fix checking DivineAura in hate_list.cpp
Secrets: Reverted some code that got in the main branch that shouldn't have gotten there.
Uleat: Changed #loc to report the same precision as /loc for Cartesians
== 08/31/2014 ==
KLS: Fixed a bug in fishing in S3D zones
KLS: Fixed a bug in turnins with new any abstraction
KLS: Fixed a few quest related inconsistencies.
KLS: Added Lua EntityList::ChannelMessage(from, type, msg, language)
== 08/30/2014 ==
mackal: (noudess) Merchants should be more descriptive of why they don't sell to you
== 08/26/2014 ==
Uleat: Implemented 'Smart' Player Trade transfers. Trades are processed by containers, stackables and then all remaining. QueryServ logs have been updated to match these transactions.
Note: QueryServ logs previously listed 'Items' on the main entry table. This indicated the number of slots affected and not the actual number of items.
This field now indicates the actual number of items transferred. For non-stackable, the value is '1' and stackable is the number of charges. A _detail_count
property has been added to both 'Trade' and 'Handin' structs to indicate the number of details recorded..though, not could be added.
== 08/24/2014 ==
Uleat: Fix (attempted) for zone crashes related to zone shut-down. This change disables all Mob AI and disables/deletes all Mob timers once Zone::ShutDown() is called. More areas will be addressed as reports come in.
Note: Perl and Lua quests tested to work..please post any aberrant behavior. (I finally set my spell-check to US English...)
Akkadius: Character creation process crash fix and query cleanup
Akkadius: Created `character_lookup` table for applications that mirrors all `character_` table fields minus blob fields for application lookups
- A 2.4GB character_ table will take 7 seconds to query on a SSD versus .1s on the character_lookup table
- This also causes applications like Magelo to burst reads of the entire character table because of the blob fields that come with the reads, as much as 500-600MB/s even if a indexed id filter is provided
- This field is synchronized on player save and has 0.001s DB hit
- When we split out from the blob, ideally this table can be removed
- Required SQL: utils\sql\git\required\2014_08_24_character_lookup.sql
== 08/23/2014 ==
Akkadius: Changed zone process window title format, example: 'crushbone :: clients: 6 inst_id: 1 inst_ver: 0 :: port: 7015'
Akkadius: Most of the following changes are QueryServ related, fully implemented its original functionality to be able to offload
intensive or metric based logging to a remote server process that could exist on another server entirely
Akkadius: Implemented Player Event Logging Types (Go to table `qs_player_events`):
1 = Player_Log_Quest,
2 = Player_Log_Zoning,
3 = Player_Log_Deaths,
4 = Player_Log_Connect_State,
5 = Player_Log_Levels,
6 = Player_Log_Keyring_Addition,
7 = Player_Log_QGlobal_Update,
8 = Player_Log_Task_Updates,
9 = Player_Log_AA_Purchases,
10 = Player_Log_Trade_Skill_Events,
11 = Player_Log_Issued_Commands,
12 = Player_Log_Money_Transactions,
13 = Player_Log_Alternate_Currency_Transactions,
- All QueryServ logging will be implemented with a front end in EoC 2.0 very soon
- Architecture page:
Akkadius: Changed all QS Error related logging to 'QUERYSERV__ERROR'
Akkadius: (Natedog) (Crash Fix) Legacy MySQL bug revert for loading AA's COALESCE( from COALESCE (
Akkadius: Implemented Perl Quest objects (LUA still needed to be exported):
- quest::qs_send_query("MySQL query") - Will send a raw query to the QueryServ process, useful for custom logging
- quest::qs_player_event(char_id, event_desc); - Will process a quest type event to table `qs_player_events`
Akkadius: Added MySQL Tables
- `qs_player_aa_rate_hourly`
- `qs_player_events`
- Source table structures from:
- utils\sql\git\queryserv\required\08_23_2014_player_events_and_player_aa_rate_hourly
To get the complete QueryServ schema, source from here:
- utils\sql\git\queryserv\required\Complete_QueryServ_Table_Structures.sql
Akkadius: Added rules for each logging type, source rules here with them enabled by default:
- utils\sql\git\queryserv\required\Complete_QueryServ_Rules_Enabled.sql
Akkadius: Spawn related logging cleanup
Akkadius: General code cleanup
Akkadius: More to come for QueryServ
== 08/22/2014 ==
Uleat: Rework of Trade::FinishedTrade() and Trade::ResetTrade() to parse items a little more intelligently.
Trade window items are now sent to client inventory in this order:
- Bags
- Partial stack movements
- All remaining items
If any of these procedures cause any problems, please post them immediately.
== 08/20/2014 ==
Uleat: Rework of Trade::AddEntity() - function used to move items into the trade window. Now accepts argument for 'stack_size' and updates client properly.
Note: I tested trade with Titanium:{SoF,SoD,UF,RoF} in both directions and no client generated an OP_MoveItem event for attempting to place a stackable
onto a partial stack already in the trade window. The only way to achieve stacking is to click on the receiving client. If there is a partial stack remaining
on the cursor after the OP_MoveItem event, and there is room available, the client will generate subsequent events to move the remaining count.
== 08/19/2014 ==
Akkadius: Implemented a Stop_Return feature (Accidental item handin prevention) that will be symmetrically used with plugin::return_items that I am currently running live testing on EZ before releasing to EQEmu. This does not hurt to have this in the source.
Akkadius: Fixed crash where 'attacker' validation is not being checked
Akkadius: Removed petition console spam that does not follow traditional logging and is useless
Akkadius: Made fix with SympatheticProcChances where it was checking for TempItem->Focus.Effect instead of TempItemAug->Focus.Effect
== 08/18/2014 ==
Uleat: Fix for -- also activated a remarked action in doors.cpp to eliminate a memory leak.
== 08/16/2014 ==
KLS: (addmoreice) Trying out some unstable DB changes. Do backup your database before trying them as master will be considered unstable for a few days at least.
Uleat (Noudness): Fixed a floating-point comparison error that led to the notorious 'client bounce' (this is not related to the
'mob falling' due to not having maps installed.) This fix also eliminates a sizeable amount of unnecessary out-going packets due
to invalid orientation corrections.
Note: This patch is probably of significant enough importance that admins may wish to manually apply this to older server builds.
The number of packets reduced per second should be approximately (num_stationary_close_clients * (num_close_clients - 1)). This will
likely have the most effect in zones like: Nexus, Bazaar, Guilds (Halls) and RAID INSTANCES - where players don't move around a lot.
== 08/15/2014 ==
Uleat: Reactivated the Bot::Spawn() code for sending post-spawn wear change updates..temporary until I can sort out the proper usage.
== 08/13/2014 ==
Uleat (Kingly_Krab): Fix for bot chest armor graphic glitch. (fix also caused RoF #wc to work properly)
== 08/02/2014 ==
Kayen: Implemented spell_news fields
- npc_no_los (check if LOS is required for spells)
- InCombat, OutofCombat - Used together to restrict spells to only be cast while
in/out of combat (beneficial) or if target is in/out of combat (detrimental).
-min_dist, min_dist_mod, max_dist, max_dist_mod - Scales spell power based on targets distance from caster.
*This will require further work to fully implement but will work with 90% of live spells as is.
*If making custom spells do not include effects that can't be scaled (like a spell trigger)
- min_rage sets minimum distance range that must be away from target.
Required SQL: utils/sql/git/required/2014_08_02_spells_new.sql
== 07/31/2014 ==
Uleat: More inventory slot constant conversions. This should be the bulk of everything..but, due to the size of the server code, there
may be some hidden ones. (client_packet.cpp and the client translators still need a thorough review.)
Note: Please report any abnormal behaviour with inventory-related content..each diff file was reviewed 3 times..but, things CAN be missed.
Uleat: Test fix for client crashes in Bazaar, while actively selling, with a charm in the Trader's Satchel.
== 07/27/2014 ==
Uleat: More updates to the dictionary. Added a 'constants' file for each client translator..these will tie-in to the dictionary. Started
replacement of hard-coded numeric values with a pre-defined constant. This will help in the transition.
== 07/16/2014 ==
Uleat: Initial commit of new client/server 'dictionaries' - work in-progress... Changed equipment slot references to reflect new naming
conventions. Lua enumerations maintain both the old and new names as to not break existing scripts..but, the old names are deprecated.
== 07/14/2014 ==
KLS: Changes to CMake build
-Lua builds by default now
-Common has been renamed common
-Binary files will now be put into ${CMAKE_BINARY_DIR}/bin instead of ${CMAKE_BINARY_DIR}/Bin
The last two are of note to people on non-windows systems as case sensitivity is important. Edit your scripts accordingly, thank you.
== 07/10/2014 ==
Kayen: Updated table npc_spells to now support defensive and ranged procs.
Note: Proc rate modifier work as it does for spell effects (ie 200 = 200% baseline chance modifier)
Table is also now contains 12 AI spell casting variables that can be set to fine tune casting behaviors per spell set.
Global default rules have also been added that can further fine tune all content if no specific variables are set.
Descriptions of new AI casting fields in npc_spells
'fail_recast' AI spell recast time(MS) when an spell is cast but fails (ie stunned)
'engaged_no_sp_recast_min' AI spell recast time(MS) checked when no spell is cast while engaged in combat. (min time in random)
'engaged_no_sp_recast_max' AI spell recast time(MS) checked when no spell is cast while engaged in combat. (max time in random)
'engaged_b_self_chance' Chance during first AI Cast check to do a beneficial spell on self (ie check to heal self)
'engaged_b_other_chance' Chance during second AI Cast check to do a beneficial spell on others.(ie check to heal others)
'engaged_d_chance' 'Chance during third AI Cast check to do a determental spell on others (ie check to nuke others)
'pursue_no_sp_recast_min' AI spell recast time(MS) checked when no spell is cast while chasing target. (min time in random)
'pursue_no_sp_recast_max' AI spell recast time(MS) checked when no spell is cast while chasing target. (max time in random)
'pursue_d_chance' Chance while chasing target to cast a detrimental spell.
'idle_no_sp_recast_min' AI spell recast time(MS) checked when no spell is cast while idle. (min time in random)
'idle_no_sp_recast_max' AI spell recast time(MS) checked when no spell is cast while idle. (max time in random)
'idle_b_chance' Chance to cast a beneficial spell while idle (ie cast heal on self while out of combat).
Kayen: Updated table npc_types, adding field 'ranged_type' and 'ammo_idfile'
'ranged_type' Will set what skill / animation is used when NPC uses a ranged attacked (special ability 11)
'ammo_idfile' Will set what projectile graphic an NPC uses in a ranged attacked (special ability 11) Format IT#### (same as item 'idfile')
(*Set to IT11118 for some fun*)
Added parameters: SPECATK_RANGED_ATK = 11
Param0: Min Ranged distance (default: 25)
Param1: Max Ranged distance (default: 250)
Param2: Percent Chance to Hit modifier
Param3: Percent Total Damage modifier
Kayen: Updated to Chance to Hit code with how bonuses are applied to be consistent for all effects.
Added field to npc_types 'Avoidance' which will modify chance to avoid melee
Added rules to set max and min chance to hit from melee/ranged (Default 95% / 5%)
Required SQL: utils/sql/git/required/2014_07_10_npc_spells.sql
Optional SQL: utils/sql/git/optional/2014_07_10_AICastingRules.sql
== 07/5/2014 ==
Kayen: Updated SE_Sanctuary - Adjust way hate lowering effect worked to be more accurate
Kayen: Updated SE_SympatheticProc - Revised proc rate formula to be accurate to live.
Sympathetic foci on items with proc rate mod will now benefit from that modifier.
Sympathetic foci can now be placed on AA's (This should always be slot1 in the AA)
Kayen: Implemented SE_IllusionPersistence- Allows illusions to last until you die or the illusion is forcibly removed.
Kayen: Added rule 'PreNerftBardAEDot' for SE_BardAEDot to allow it to once again do damage to moving targets. (Set to true)
Kayen: Completely revised SE_SkillProc, SE_LimitToSkill, SE_SkillProcSuccess to overall just work better and more accurately, AA support.
Required SQL: utils/sql/git/required/2014_07_04_AA_Update.sql
== 07/2/2014 ==
Kayen: Implemented SE_Sanctuary - Places caster at bottom hate list, effect fades if caster cast spell on targets other than self.
Kayen: Implemented SE_ResourceTap - Coverts a percent of dmg from dmg spells(DD/DoT) to hp/mana/end.
Kayen: Implemented SE_FactionModPct - Modifies faction gains and losses by percent.
Kayen: Re-Implemented SE_TriggerMeleeThreshold and SE_TriggerSpellThreshold correctly - Trigger spell if owner of buff
takes more than the specified damage amount in a SINGLE hit, then fade the buff.
Kayen: Implemented SE_LimitSpellClass - Focus Limits spell to pre defined categories. (3=Cures,3=Offensive, 6=Lifetap)
Kayen: Changed SE_LimitMaxMana to SE_MeleeVulnerability - Weakness/Mitigation verse melee damage
(Despite lives SPA lable as the former it clearly is not what the effect does from all spell examples)
Kayen: Updated SE_BardAEDot to no longer damage target while target is moving (consistent with live)
Kayen: Update SE_InterruptCasting: Will now work for instant spells (as well as over time).
== 06/25/2014 ==
Kayen: Updated SE_Hate (Renamed from SE_Hate2) to now properly work for instant +/- hate spells.
Kayen: Updated SE_FadingMemories - Base value will be properly utilized to set % chance for fade effect to work.
Kayen: Implemented SE_StrikeThough (Was incorrectly defined as implemented previously) - Works same as item bonus.
Kayen: Update SE_Taunt - Limit value if present will now add instant hate.
Kayen: Implemented SE_MassGroupBuff - Allows next group buff cast to be a MGB (AA now uses this)
Kayen: Implemented SE_IllusionOther - Allows next Illusion buff (self only) cast to be cast on target. (AA now uses this)
Kayen: Update SE_AETaunt - Base value will now determine AE taunt range (This will not result in any change to currently used spells).
Kayen: Udpated SE_ReclaimPet - Correct forumla for mana returned to properly return 75% of actual pet spell mana cost.
Kayen: Implemented SE_ImprovedReclaimEnergy - Modifies % mana returned from SE_ReclaimPet.
Kayen: Implemented SE_HeadShot, SE_HeadShotLevel - Defines headshot damage and level requirements.
Revised HeadShot mechanic so damage now receives all archery bonuses, proc chance can be set to either (lives new Proc Per minute
system, or flat chance based on dex (formula updated).
Kayen: Implemented SE_Assassinate, SE_AssassinateLevel - Defines assassinate damage and level requirements.
Revised Assassinate mechanic so damage now receives all backstab bonuses, proc chance can be set to either (lives new Proc Per minute
system, or flat chance based on dex (formula updated). Assassinate can now proc from THROW if behind target, various other adjustments.
Kayen: Fix to AA Finishing Blow missing aa_effects data, update required SQL.
Revised Finishing blow so that damage now receives all melee bonus. Support also for this effect if placed on items or spells.
Kayen: Implemented SE_PetMeleeMitigation - Bonus applied to pet owner. Gives AC to owner's pet.
Required SQL: utils/sql/git/required/2014_06_25_AA_Update.sql
Optional SQL: utils/sql/git/optiional/2014_06_29_HeadShotRules.sql
== 06/17/2014 ==
Kayen: Implemented SE_AStacker, SE_BStacker, SE_CStacker, SE_DStacker.
These effects when present in buffs prevent each other from stacking,
Any effect with B prevents A, C prevents B, D prevents C.
Kayen: Implemented SE_DamageModifier2 (Stacks with SE_DamageModifier, mods damage by skill type)
Kayen: Implemented SE_AddHatePct (Modifies +/- your total hate on NPC by percent)
Kayen: Implemented SE_AddHateOverTimePct (Modifies +/- your total hate on NPC by percent over time)
Kayen: Implemented SE_DoubleRiposte (Modifies +/- your double riposte chance) *Not used in any live effects
Kayen: Implemented SE_Berserk (Sets client as 'Berserk' giving chance to crippling blow) *Not used in any live effects
Kayen: Implemented SE_Vampirsm (Stackable lifetap from melee effect) *Not used in any live effects
Kayen: Minor fixes to how lifetap from melee effects are calced. Removed arbitrary hard cap of 100%, Negative value will now dmg client.
Kayen: Fix to issue that prevented NPC's from receiving HP Regeneration derived from spell buffs.
Kayen: Fixes and Updates for melee and spell mitigation runes.
Kayen: Update to SE_NegateAttack, 'max' value can now set upper limit of damage absorbed. DOT ticks will no longer be absorbed.
Kayen: Implemented SE_Metabolism - Modifies food/drink consumption rates. [Data for AA is already in database]
Kayen: Update to SE_BalanaceMana, SE_BalanceHP to support limit value which caps max mana/hp that can be taken per player.
== 06/13/2014 ==
Kayen: For table 'npc_spell_effects_entries' setting se_max for damage shield effects (59) will now determine the DS Type (ie burning)
Setting se_max to 1 for SkillDamageTaken effects (127) will allow for stackable mitigation/weakness same as quest function ModSkillDmgTaken.
Kayen: Implemented SE_AlterNPCLevel (not currently used on live). Will +/- to NPC level. When fade will revert back to original level.
Kayen: Implemented 'special_abilities' 38 ALLOW_BENEFICIAL (Allows an NPC to recieve player buffs/heals)
Kayen: Implemented 'special_abilities' 39 DISABLE_MELEE (Prevents NPC from auto attacking, will still aggro)
Note: These two special abilities were previously implemented and still remain as quest functions. (SetDisableMelee() and SetAllowBeneficial())
== 06/8/2014 ==
KLS: Changed lua API: eq.get_globals(client, npc) has been removed. Use eq.get_globals(npc, client) instead.
There's a bug with something in gcc 4.6.3 (maybe other versions) on x86 that this is attempting to combat.
== 05/17/2014 ==
Secrets: Identified the opcode/struct for guild ranks in Rain of Fear+ clients.
Secrets: Implemented a work-around for Rain of Fear clients to have all guild permissions until proper database support is added for newer ranks.
== 05/14/2014 ==
Kayen: Rooted NPC's will no longer target players with Divine Aura effect if they are the closest target and other targets exist on the hate list.
== 05/12/2014 ==
Uleat: Re-arranged functions in Item.cpp to somewhat match the order they are declared in Item.h. Should make finding their location a little easier when using declarations as a guide. (This will facilitate readability of an upcoming change...)
== 05/07/2014 ==
Kayen: AA/Item/Spells that allow pets to critical and flurry will now work on the owners swarm pets consistent with live.
== 05/05/2014 ==
Uleat: Oops! Wrong state check (conn_state != client_state)
Uleat: Test fix to eliminate seemingly random crashes when an AE spell is being used. (Possible access to uninstantiated pointers during client connection process when someone casts a beneficial AE spell within range of a connecting client.)
== 04/29/2014 ==
KLS: Implemented new map code based on some of Derision's earlier work. Old maps still work with this system and don't need to be regenerated. We're still working on a new azone solution for better/more efficient maps.
== 04/27/2014 ==
Kayen: Implemented new table 'npc_spells_effects' and 'npc_spells_effects_entires'.
Implemented new field in 'npc_spell_effects_id' in npc_types.
These are used to directly apply spell effect bonuses to NPC's without requirings spells/buffs.
Example: Allow an npc to spawn with an innate 50 pt damage shield and a 5% chance to critical hit.
Please see the wiki page: for details.
*NPC's can now do critical heals / damage spells if bonus is applied from table.
Required SQL: utils/sql/git/required/2014_04_27_AISpellEffects.sql
Note: 30 examples of spell effects have been included by default in this sql. Edited/removed as needed.
== 04/25/2014 ==
cavedude: Corrected a crash in spawn_conditions caused by NPCs on a one way path.
cavedude: Added strict column to spawn_events which will prevent an event from enabling if it's mid-cycle.
cavedude: Prevented disabled or strict spawn_events from enabling when the zone first boots.
cavedude: Fixed the quest function toggle_spawn_event under Perl.
If you're using the quest function toggle_spawn_event (worked on Lua only) it has changed syntax to:
toggle_spawn_event(int event_id, bool enable, bool strict, bool reset_base)
Required SQL: utils/sql/git/required/2014_04_25_spawn_events.sql
== 04/23/2014 ==
Kayen: Improved SE_LimitCombatSkills will now more accurately determine if a spell is a combat proc.
Kayen: SE_LimitInstant will now also work when set to include instant spells.
Optional SQL: utils/sql/git/optional/2014_04_23_FocusComabtProcs.sql
Note: Set to false, if enabled will allow all combat procs to receive spell focuses.
== 04/21/2014 ==
Secrets: Crash fix for more hatelist crashes.
Secrets: Hate list fixes, again.
Secrets: Revert of hatelist changes.
== 04/20/2014 ==
Secrets: Changed the functionality of EQDEBUG cmake flag. It now suppresses logs, but shows crashes in any scenario when set to 1. It will also now show crashes even if the log system is disabled.
KLS: Change to how quest signals work, signals with no delay will now be added to the signal queue. This addresses an odd timing issue where NPCs are in a state of life/death flux when a signal from event_death goes off.
KLS: Added cmake flags to define how logging behavior works for each different log type.
Secrets: Crash fix for Hatelist crash observed
== 04/18/2014 ==
Akkadius: Added #command error message suppression for those who don't want to see 'Command is not recognized' constantly
- You need to have rule 'Chat:SuppressCommandErrors' set to true, this is set to false by default
- Required SQL: 2014_04_18_Suppress_Command_Error.sql
== 04/15/2014 ==
Akkadius: Exported $client->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, msg) - Will be available for simple plugin use
Akkadius: Exported $client->ExpeditionMessage(THIS, ExpdID, Message) - In use with custom expedition mod that will be released soon
== 04/12/2014 ==
Kayen: Fixed an with the slow mitigation code that would cause it to spam the message. Optimized the way the variable is handled for slow mitigation.
Required SQL: utils/sql/git/required/2014_04_12_SlowMitigation.sql
Note: This changes the variable type in the sql table from FLOAT to INT and updates your database.
(When setting slow mitigation 50 = 50%, 100 = 100% ect. You can also set > 100 which will cause slow to become haste now with appropriate in game msg given)
== 04/10/2014 ==
Kayen: Added 'no_target_hotkey' field to npc_types table. This will prevent the NPC from being targeted with F8 (Warning: Will also turn it's name YELLOW)
Kayen: Added a rule to make all (Player cast) Swarm Pets not targetable with F8 (nearest NPC) by default (Warning: Will also turn pets names YELLOW). This is semi-hack but it works.
Kayen: Player cast swarm pets can now be healed and buffed consistent with live.
Optional SQL: utils/sql/git/optional/2014_04_10_SwarmPetNotTargetableWithHotKey.sql
Required SQL: utils/sql/git/required/2014_04_10_No_Target_With_Hotkey.sql
Note: For the required new npc_types field you DO NOT need to set values for swarm pets if you enable the above rule.
== 04/09/2014 ==
Kayen: Implemented ability to use the actual live spell projectile graphics that are defined in the modern spell file.
*This is disabled by default. Recommend enabling if your server uses an UF+ spell file AND most of your players use UF+ clients.
Kayen: Expanded the PERL ProjectileAnim(mob, item_id, [IsArrow?, speed, angle, tilt, arc, IDFile]) so you can now just set the weapon model graphic IT####
Example: ProjectileAnim($npc, 0, 0, 1, 0, 0, 0, "IT10747") This will shoot an SK 2.0 sword.
Kayen: Updated wizard innate critical damage modifier to be from 20-70% of base damage (based on live parses)
Optional SQL: utils/sql/git/optional/2014_04_09_SpellProjectileRule.sql
Note: This sql also contains a query to check if your spell file is compatible.
== 04/06/2014 ==
Uleat: Changed Mob::CanThisClassDualWield() behavior. This should let non-monk/beastlord dual-wielding classes attack with either fist as long as the other hand is occupied.
See this thread for more information and to provide feedback:
== 04/05/2014 ==
Akkadius: Fix for the Fix for the Fix: Rule Combat:OneProcPerWeapon was created so that you can revert to the original proc functionality
for custom servers that have balanced their content around having more than 1 aug proc on weapons. By having this rule set to 'false' you revert this functionality.
This rule is set to 'true' by default as the original functionality from Live was intended to be
Akkadius: (Performance Adjustment) Removed AsyncLoadVariables from InterserverTimer.Check() in both zone and world. By watching the MySQL general.log file on mass zone idle activity, you can
see that the query 'SELECT varname, value, unix_timestamp() FROM variables where unix_timestamp(ts) >= timestamp' is called every 10 seconds. This function is loading
variables that are initially loaded on World and Zone bootup. When running a large amount of zone servers, the amount of MySQL chatter that is produced is enormous and
unnecessary. For example, if I ran 400 zone servers, I would see 3,456,000 unnecessary queries from all idle or active zone processes in a 24 hour interval.
Secrets: Added a rule to enable multiple procs from the same weapon's other slots if a proc is deemed to trigger, Defaults to true.
If Combat:OneProcPerWeapon is not enabled, we reset the try for that weapon regardless of if we procced or not.
This is for some servers that may want to have as many procs triggering from weapons as possible in a single round.
Optional SQL: utils/sql/git/optional/2014_04_05_ProcRules.sql
== 04/04/2014 ==
Kayen: Implemented 'Physical Resists' (Resist Type 9) to be consistent with live based on extensive parsing.
SQL will add new field to npc_types 'PhR' and fill in database with values consistent with observations.
Required SQL: utils/sql/git/optional/2014_04_04_PhysicalResists.sql
== 04/03/2014 ==
Kayen: Implemented live like spell projectiles (ie. Mage Bolts).
Optional SQL: utils/sql/git/optional/2014_04_03_SpellProjectileRules.sql
Note: The rules in this SQL are for setting the item id for the graphic used by the projectile on different clients.
== 04/01/2014 ==
mackal: Implemented ability for a merchant to open and close shop.
Lua quest functions: e.self:MerchantOpenShop() and e.self:MerchantCloseShop()
GM Commands: #merchant_open_shop (short: #open_shop) and #merchant_close_shop (short: #close_shop)
default to status 100, just in case you need to force the merchants status
Trevius: Fixed potential endless quest loop with EVENT_COMBAT and WipeHateList().
== 03/31/2014 ==
Uleat: Fix for unconscious skillups.
Uleat: Fix for crash issue with nullptr reference in recent Client::SummonItem() work.
Uleat: Added rule for GM Status check code in Client::SummonItem().
Note: Rule default is set to 250..but, implementation is on hold until load item code handles the database 'minstatus' field.
Uleat: Added RuleB(Bots, BotLevelsWithOwner). Bots will auto-update as their owner levels/de-levels. Appearance packets are sent to show the 'leveling effect' as well as updating client entities.
Trevius: Prevented an endless loop crash related to EVENT_TASK_STAGE_COMPLETE.
Optional Bot SQL: utils/sql/git/bot/optional/2014_03_31_BotLevelsWithOwnerRule.sql
Note: This sql is required to activate the optional behavior.
== 03/27/2014 ==
Kayen: SE_Gate will now use have a fail chance as defined by its base value in the spell data.
Kayen: SE_Succor will now have a baseline fail chance of (2%). Rule added to adjust this as needed.
Kayen: SE_FeignDeath will now have a fail chance as defined by its base value in the spell data.
Optional SQL: utils/sql/git/optional/2014_03_27_SuccorFailRule.sql
== 03/22/2014 ==
Uleat: Moved the existing 'load_bots' and 'drop_bots' sqls into the emu git repository for the time being. Look to the
/utils/sql/git/bots/ folder to find them. The 'load_bots' sql has been updated to include the below fix, as well as
collecting the multiple files into one. This should allow HeidiSQL to now run it properly. (You will still need to
search for the optional scripts for the time being.)
Uleat: Fixed bot guild script failure. For existing bot databases only, use this sql file to update the affected table and view.
Required Bot SQL: 2014_03_22_BotGuildMember_ScriptFailureFix.sql
== 03/19/2014 ==
Kayen: Further refinements to root, charm, mez and fear behaviors - See commit message for full details
New rule for 'Fear' break chance, and updates to default settings of various rules.
Optional SQL: utils/sql/git/optional/2014_03_19_RulesUpdates.sql
== 03/18/2014 ==
Uleat: Fixed the name/account discrepancy in the Client::SummonItem() code as well as the origin of the mistake (thanks K_K!)
Uleat: Condensed and rearranged certain snippets of code in SummonItem(). Added a 'augslotvisible' check to validation check.
Note: If you are experiencing issues with SummonItem, please enable 'INVENTORY_ERROR' logging if it not active on your server.
== 03/17/2014 ==
Uleat: Updated Client::SummonItem() to check for valid item combinations when augmentations are passed.
Uleat: Changed the return type of Client::SummonItem() from void to bool. Calling methods and APIs have not been update as yet.
Uleat: Fixed the RoF Item structure to properly pass the 'augrestrict' variable. RoF clients now show restrictions in the Item Information window.
Optional SQL: 2014/03/17_EnforceAugmentRules.sql
Note: This adds the rules Inventory:EnforceAugmentRestriction, Inventory:EnforceAugmentUsability and Inventory:EnforceAugmentWear.
If you run into script/recipe issues, running this sql file will set the default enforcement rules to false.
If you still run into issues, you may want to check that your scripts are not trying to augment non-common items.
Please post any failures as bugs and be sure to include the base item ID, as well as any augment IDs that you are using.
== 03/12/2014 ==
Kayen: Melee/Magic runes are now calculated as bonuses. Resolved issues with runes not working and not fading properly.
== 03/08/2014 ==
Kayen: Revision to lull/harmony/pacification code to be consistent with live based on extensive personal parsing.
*Lulls on initial cast do not check regular resists (MR ect) but only apply a flat ~7.5 % resist chance + level modifier
*If Lull is resisted, a second resistance check is made this time using regular resists and a charisma modifier (same as charm)
which if 'resisted' will cause the caster to gain aggro.
== 03/05/2014 ==
mackal: Corrected rogue's evade to be single target
sorvani: fixed crash issue 119
== 03/04/2014 ==
Sorvani: Created RemoveFromInstance and RemoveAllFromInstance to remove a single player or all players in an instance.
Sorvani: Exported to Lua as eq.remove_from_instance(instance_id) and eq.remove_all_from_instance(instance_id).
Kayen: Revision to root code to be consistent with live based on extensive personal parsing.
*ROOT has a 40% chance to do a resist check to break each buff tick.
*If multiple roots on target. Root in first slot will always and only be check to break from nukes.
*If multiple roots on target and broken by spell. Roots are removed ONE at a time in order of buff slot.
*Roots on beneficial spells can not be broken by spell damage.
Optional SQL: utils/sql/git/optional/2014_03_04_RootRule.sql
== 03/03/2014 ==
mackal: Implemented deadly strikes and gave rogues higher innate throwing crit chance
New rules: Combat:RogueCritThrowingChance, Combat:RogueDeadlyStrikeChance, Combat:RogueDeadlyStrikeMod
Defaults should give fairly close to live results
== 03/02/2014 ==
Kayen: Revision to charm code to be consistent with live based on extensive personal parsing.
*Charisma ONLY effects the initial resist check when charm is cast with 10 CHA = -1 Resist mod up to 200 CHA
*Charisma DOES NOT extend charm durations.
Optional SQL: utils/sql/git/optional/2014_03_02_CharmRules.sql
mackal: Melee Crits, HoTs, DoTs messages should now be filtered correctly on all clients.
Clients that also support seeing others DoTs will now see them if they don't filter them
note: some newer clients have a 'mine only' option for HoTs but it functions the same as show
== 02/27/2014 ==
cavedude: Exported TrainDisc to Lua.
== 02/26/2014 ==
Kayen: Implemented SE_FrenziedDevestation - increase critical spell chacnce and 2x mana cost for DD spells
Kayen: Fixed SE_SpellProcChance - Now works on spell dervived procs
cavedude: Added two new NPC special_abilities. ALWAYS_FLEE, which forces the NPC to always flee ignoring FleeIfNotAlone and FLEE_PERCENT which allows you to change the HP an individual NPC will flee at. If no value is set, the rule is used as normal.
cavedude: Fixed an issue where rectangular roamboxes could cause an NPC to get stuck on a single coord.
cavedude: Added a new roambox column, mindelay allowing you to have more control over the roambox delay.
Uleat: Fix for 'sqrt' failure on vs2010 clients
image: Added idle zone timer to save CPU cycles.
Required SQL: utils/sql/git/required/2014_02_26_roambox_update.sql
== 02/24/2014 ==
cavedude: Better flee runspeed calculation. Added rule Combat:FleeMultiplier to alter this behavior.
Sorvani: Updated GetUnusedInstanceID to not recycle instance ID's unless it has reached max (65535)
== 02/23/2014 ==
Secrets: Exported the client object SendTargetCommand to Perl.
cavedude: Merchants will now keep better track of charges.
== 02/20/2014 ==
Kayen: Implemented SE_MitigateDotDamage - dot spell mitigation rune with max value
Kayen: Implemented SE_DistanceRemoval - removed from target when target moves X amount of distance away from where initially hit.
Required SQL: utils/sql/git/2014_02_20_buff_updates.sql
== 02/18/2014 ==
Kayen: Implemented SE_TriggerOnReqCaster - triggers a spell which a certain criteria are met (below X amount of hp,mana,end, number of pets on hatelist)
Kayen: Implemented SE_ImprovedTaunt - Locks Aggro On Caster and Decrease other Players Aggro by X% on NPC targets below level Y
Kayen: Fixed an error where SE_ChangeAggro was adding its bonus x 2 for spell generated aggro. (this applies also to spell casting subtlety AA reduction)
== 02/14/2014 ==
Kayen: Fixes for buffs not fading under certain conditions in revised numhits system, and other fixes.
Kayen: Implemented support for spell_new field CastRestrictions (limits what type of targets spells can effect).
*A detailed list describing what the values used in this field do can be found in Mob::PassCastRestriction*
Kayen: Implemented support for spell_new field not_reflectable, no_partial_resists.
Required SQL: utils/sql/git/2014_02_13_spells_new_updates.sql
Names many unknown fields in the table.
== 02/13/2014 ==
Sorvani: Renamed the instance_lockout and instance_lockout_player tables to instance_list and instance_list_player. Cleaned up the Database::GetUnusedInstanceID logic.
Required SQL: utils/sql/git/2014_02_13_Rename_instance_lockout_tables.sql
== 02/10/2014 ==
mackal (Secrets): Re-wrote the entity list to be a std::map. This should be used for direct entityID lookups and is noticably faster performance-wise. Also should result in less nil pointers potentially.
Secrets: Fixed a crash issue that could occur on #repop related to quest timers.
Kayen: Divine Arbiration and other similar spell effects will now utilize a spell range check.
Kayen: Revised how heal amount is calculated to properly incorporate all current focus effects/bonuses.
Kayen: Various updates/fixes/clean-ups to focus effect related code. Focus effect limits should now all work properly.
== 02/09/2014 ==
Sorvani: Added new spawn condition onchange action: DoRepopIfReady. Choosing this will not repop mobs when the spawn condition is enabled if they have an existing respawn timer. Additionally, this condition will not even attempt repop when the condition is is changed to disabled. Will be in use on PEQ for: Cragbeast Queen in Natimbi.
Secrets: Fixed a weird crash issue with deletion of pointers if task loading fails.
== 02/2/2014 ==
Kayen: Revised how spell/dot damage is calculated to properly incorporate all current focus effects/bonuses.
Required SQL: utils/sql/git/2014_02_02_SpellCriticalsAA.sql
== 01/27/2014 ==
Kayen: Implemented SE_CriticalMend (chance to critical monk mend)
Kayen: Implemented SE_IncreaseChanceMemwipe (increases the chance to wipe hate with memory blurr)
Kayen: Implemented SE_FcStunTimeMod (modify stun duration from casted spells)
Kayen: Implemented SE_StunBashChance (increase chance to stun from bash)
Required SQL: utils/sql/git/2014_01_27_CritcalMendAA.sql
== 01/26/2014 ==
Kayen: Revised 'dispel' type spell effects (ie cancel magic) to be consistent with live
== 01/23/2014 ==
Kayen: Implemented SE_FfLimitUseType (focus limit to numhits type)
== 01/20/2014 ==
cavedude: Live-Like weather system (Thanks to robregen for figuring it out!)
mackal: Implemented not_extendable spell flag
mackal: Moved Spell Casting Reinforcement to DB
mackal: Moved Mez Mastery to DB
Kayen: Complete revision of the numhits systems to utilize 'numhits type' field in spell file.
== 01/18/2014 ==
sorvani: Implemented for Lua eq.get_characters_in_instance(uint16 instance_id), return a Lua HashTable
mackal: NPCs will now cast their charms.
== 01/13/2014 ==
Kayen: Numerous minor fixes to spell effects.
Kayen: Changed SE_ArcheryDoubleAttack -> SE_DoubleRangedAttack (now works with throwing ect)
Kayen: Changed SE_IncreaseHitDmgTaken -> SE_TriggerMeleeThreshold (now only works on melee)
Kayen: Changed SE_MitigateMeleeDamageSP -> SE_MeleeThresholdGuard
Kayen: Implemented SE_SpellThresholdGuard (Partial Spell Rune that only is lowered if spell hits are over X amount of damage)
Kayen: Implemented SE_TriggerSpellThreshold (implemented Trigger effect on X amount of spell damage taken)
Kayen: Changed SE_ReduceHealing -> SE_FcHealAmtIncoming (focus limited Add/Remove amount of healing on target by X amount)
Kayen: Change SE_CriticalHealChance2 -> SE_CriticalHealDecay
Kayen: Change SE_CriticalHealOverTime2 -> SE_CriticalRegenDecay
Kayen: Implemented SE_CriticalDotDecay
Note: 'Decay' effects means the chance to critical decays based on the level of the spell using the effect (like focus decay)
Kayen: Implemented SE_FfLimitUseMin (focus limit to require a min amount of numhits value)
Kayen: Implemented SE_FcLimitUse (focus to increases numhits count by percent)
Kayen: Implemented SE_LimitRace (Limits to spells cast by a certain race)
Kayen: Implemented SE_FcMute (silences casting of spells that contain specific spell effects) ie silence only heals
== 01/09/2014 ==
mackal: Add pet size preservation like live (zone, camp, etc)
== 01/07/2014 ==
mackal: Moved pet can attack check to before it tries to attack, which is more live like.
== 01/03/2014 ==
mackal: Crash prevention for emote.
== 01/02/2014 ==
mackal: Stuns from beneficial spells (Harvest) ignore immunity
== 12/26/2013 ==
mackal: Added classes_required to merchantlist (same bitmask as items)
== 12/24/2013 ==
Secrets (Akkadius): Perl $client->SilentMessage("Message"); addition, this is a pre-req for a Perl plugin I've shared with EQEmu. This function essentially mimics a player speaking with an NPC - which is used in popup window responses
Secrets: Added functionality to Perl for $client->PlayMP3("name of file").
Usage varies, but typically you can place an MP3/WAV/XMI in the EQDir//sounds, pfs, s3d, or root client folder and it will play through this Perl function. Example, $client->PlayMP3("combattheme1.mp3") or $client->PlayMP3("TUTBTrade1.mp3")
All clients except Secrets of Faydwer and 6.2 have their opcodes identified for this function. The struct + supported params is the same throughout versions.
Use $client->PlayMP3 with an invalid sound file to stop playback or simply wait for it to end.
KLS: Added functionality to Lua for Client:PlayMP3(filename)
KLS: Added functionality to Lua for Client:SendMarqueeMessage(type, priority/opacity, fade_in_time_ms, fade_out_time_ms, duration_ms, msg)
== 12/16/2013 ==
Kayen: Implemented SE_ArcheryDoubleAttack (Chance to do an extra archery attack)
Kayen: Implemented SE_ShieldEquipDmgMod (Increase damage in primary hand if shield equiped)
Kayen: Implemented SE_ShieldEquipHateMod (Increase hate generated if shield equiped)
Kayen: Implemented SE_TriggerOnAmountValue (Trigger spell if HP/Mana/End bellow X value or num pet on target)
== 12/16/2013 ==
Kayen: Fix to SE_BlockNextSpellFocus to make it functional again.
== 12/15/2013 ==
mackal: Moved the blocked buff check down so we get spell effects like on live
Kayen: Implemented SE_ReduceHealing (Reduces amount of healing on target by X amount)
Kayen: Implemented SE_CastonFocusEffect (Triggers spell as part of a focus, when that focus effect is used)
Kayen: Implemented SE_IncreaseHitDmgTaken (Effect is triggered when X amount of damage is taken)
Kayen: More fixes for various spell triggers/procs to now properly use their resist modifier.
== 12/14/2013 ==
mackal: Blocked buffs shouldn't fail, they should just not be applied.
JJ: Changed enable/disable recipe to confirm change made.
== 12/13/2013 ==
Kayen: Implemented additional functionality for SE_CurrentHP utilizing base2 values. (ie limit to body type)
Kayen: Implemented SE_MitigateMeleeDamageSP (Partial Melee Rune that only is lowered if melee hits are over X amount of damage)
Kayen: Implemented SE_SpellOnAmtDmgTaken (Effect is triggered when X amount of damage is taken)
Kayen: Fix for various spell triggers/procs to now properly use their resist modifier.
Kayen: Fix to mob->ModSkillDmgTaken(skill_num, value), setting value to -1 will now properly effect all skills.
== 12/11/2013 ==
mackal: Fixed issue with crippling blow from berserker frenzy not actually doing anything
mackal: Fix haste caps
== 12/04/2013 ==
mackal: Fixed SpellType_Charm case in AICastSpell
== 12/03/2013 ==
mackal: Added #showspellslist to view a mobs spell list
mackal: Fix procing off of unattackable things
== 12/02/2013 ==
JJ: Bandaid fix to CopyCharacter function.
== 11/29/2013 ==
mackal: Stacking issues should be resolved now, probably could be optimized more, but went from 3 loops that do stuff to 3 where only 2 really does stuff and one breaks early in most cases, so slightly better
== 11/23/2013 ==
Secrets: Fixed an issue related to a zone crash where the count of the abilities in an AA was 0, leading to a size 0 buffer issue.
== 11/19/2013 ==
Secrets: Fixed an issue with two zone crashes reported on PEQ related to the buff restrictions code and AAs.
mackal: Partially make use of dot_stacking_exempt (case when it's 1 is implemented, -1 case isn't)
== 11/18/2013 ==
mackal: Added assistradius to npc_types, defaults to aggroradius if set to 0 (old behaviour)
== 11/17/2013 ==
Sorvani: fixed leash and tether special abilities to use the specified range correctly.
mackal: Rewrote the Mob::_GetMovementSpeed fix an issue that arose from the change on 11/11
- Added the rule Character:BaseRunSpeedCap (default 158) so people can customize what their runspeed cap is. Hardcapped to 225 so stuff doesn't get too crazy.
== 11/16/2013 ==
Leere: Fixed the drinking message for auto-consume, it will again correctly show up for forced consumption instead.
mackal: Added Mob::DoCastingChecks() which will check for various fail conditions while the casting bar is up. This is called after Mob::DoCastSpell() starts the casting and before it returns.
== 11/15/2013 ==
mackal: Fixed Mob::CalcFocusEffect()'s SE_LimitEffect
Leere: Fixed a stacking issue for SE_StackingCommand_Block
== 11/13/2013 ==
mackal: Implemented bard song effect cap. You can set the base cap with the rule Character:BaseInstrumentSoftCap, defaults to 36 or "3.6" as it is sometimes referred to.
mackal: Fix Echo of Taelosia and Ayonae's Tutelage to increase the mod cap instead of further improving the instrument mod
mackal: Implemented Singing/Instrument Mastery as an AA bonus.
== 11/11/2013 ==
mackal: Changed the way walk speed is calculated to allow mobs to have their walk speed equal a 100% movement reduction
== 11/09/2013 ==
Leere: Fixed Bard mana regen, they now only are affected by items and AA.
== 11/07/2013 ==
KLS: Added a system to use the BaseData system in the client.
KLS: Added an optional utility to import spells, skill caps and base data (will import from ./import and export to ./export).
Be sure to source the SQL and run shared_memory.
== 11/06/2013 ==
JJ: (Kingly_Krab) Fix for #npcedit qglobal command.
== 11/01/2013 ==
JJ: Added in-game commands to enable/disable tradeskill recipes
-Commands: #enablerecipe recipe_id, #disablerecipe recipe_id
-Perl: quest::enablerecipe(recipe_id), quest::disablerecipe(recipe_id)
-Lua: eq.enable_recipe(recipe_id), eq.disable_recipe(recipe_id)
== 10/31/2013 ==
Leere: Add the ability to disable a tradeskill recipe
== 10/28/2013 ==
Uleat: Client patch prep work for extending usable skill range (no apparent issues with Ti through RoF[12-10-2012] testing - i.e., clients showed proper skills and they didn't crash)
Uleat: This final patch aligns the existing server PlayerProfile_Struct with the previous changes. The pp_struct, as well as the character 'pp' blob, remains unchanged in size and alignment. The only difference is that the first trailing 100 bytes of the unknown array have been re-assigned to the skills array, and the unknown array decreased by the same amount.
- The existing configuration will allow the use of any new skills up to 99
- Due to this new segment of the blob having never been written to properly, we may have erratic data there that needs to be cleared before use
- None of the new skills are coded to use these 'new' skill slots
- A per-client method will still need to be observed when coding for the new skill uses
== 10/27/2013 ==
Uleat: Attempted fix for high level (12) debug compile failures
- Explicit Windows vs. Linux code was not changed due to my inability to compile Linux code
- Only CMake accessible flags were corrected if adding the 'std' namespace did not correct the issue
- the tag [CODEBUG] was added to failed code identifed by the above note
- If you are having compile issues after this patch is committed, look to the changes here first
Uleat: Changed riposte fail check to proper failure criteria - (x == a && x == b, where a != b) never passes, so skills a and b can riposte (discovery find, no known reported occurences)
Uleat: Enforced naming standard on my recent changes (Sorry for any inconviencies)
Uleat: Moved DeityTypes enumeration from eq_constants.h to deity.h (expanded utility of accessors, but are yet to be implemented)
Uleat: Changed ItemUseType to ItemInstTypes to better reflect the definition (also to free-up the namespace)
Uleat: Changed ItemClass to ItemClassTypes
Uleat: Converted MATERIAL defines to MaterialUseSlots enumeration - use of scripted 'Bracer' and 'Max' are deprecated
Uleat: Changed ItemTypes to ItemUseTypes - retained the 'ItemType' prefix to avoid too much confusion. Also adopted the '1H Piercing' model found in later clients
Uleat: Converted SkillType typedef enumeration to SkillUseTypes enumeration - Some prep work for adding the newer skills
Uleat: Prepped the client patch files for larger skill buffer size (not active)
== 10/24/2013 ==
mackal: Fix some memory leaks in Mob::SpellOnTarget
== 10/21/2013 ==
mackal: Changed GetMinLevel return 0 for more cases that EQ uses for some reason ...
mackal: Added buff level restrictions, set the Spells:BuffLevelRestrictions to false to have the old behavior.
== 10/18/2013 ==
Uleat: Expanded the 'Bag Type' enumeration to include all known values. Also, set in place additional 'Bag Type' to 'Skill Type' conversions. Some of these will need to be verified before activation.
Uleat: Cleaned up some unused enumerations to show a move towards standardization. More to come...
== 10/12/2013 ==
mackal: Allow Titanium and lower clients to enter Tutorial zone from character select
Bad_Captain: Fixed merc crash issue by updating special_abilities & vwMercNpcTypes (Sorvani).
Bad_Captain: Bots- added out of combat bard songs & #bot bardoutofcombat on|off command to turn them on/off.
== 10/11/2013 ==
JJ: (mackal) Allow use of Go Home button when Tutorial still selected in RoF.
== 10/10/2013 ==
Secrets: Fixed zone shutdown (or #reloadqst) reinitalization of Perl. This should allow for Perl 5.14 and later to work on Windows under the new quest system.
mackal: Beneficial single target buffs shouldn't have their mana/timers set if they fail to cast after the Mob::SpellOnTarget call in Mob::SpellFinished
JJ: Revert change to EnterWorldPacket introduced on 22 April 2013 to fix inability to enter Tutorial or Go Home from character select screen.
== 10/09/2013 ==
mackal: Fixed some more instances of the AA timer being eaten
== 10/08/2013 ==
mackal: Added IsBuffSpell(spell_id) that will return true if the spell has a duration, so would end up in effects/song/discs etc windows on the client
mackal: Replaced instances of using CalcBuffDuration to determine if a spell was a buff with IsBuffSpell
mackal: Removed Mob::HasBuffIcon since it was doing what IsBuffSpell does in a more convoluted way with a rather misleading name
mackal: Fixed issues that arose from the 10/03/2013 change
== 10/05/2013 ==
Sorvani: fixed issue with stackable items being created with 0 charges cause by fix to SummonItems
== 10/03/2013 ==
mackal: Fix when the random +1 tick is added to nerf extension focus effects to where they should be
== 09/30/2013 ==
Sorvani: Changed SummonItem to only summon an item with max charges when said default value is present and not on zero charges
mackal: Fixed issue with #showstats showing your level for a bunch of values
== 09/13/2013 ==
mackal: Add support for /pet hold on and /pet hold off (UF and RoF)
== 08/29/2013 ==
KLS: Removed Common Profiler and Zone Profiler. They're well past outdated status and are just code bloat.
KLS: Fix for reported issue on forums with skills that could potentially be trained before a player achieved the level to train.
== 08/20/2013 ==
Uleat: Fix for bot pet spell buff corruption (existing db issues will correct themselves through pet death attrition)
== 07/18/2013 ==
KLS: Fix for crash in special_abilities code due to existing use of some dangerous code we didn't catch before.
== 07/15/2013 ==
Sorvani: fix for lua_general.cpp funtion get_spawn_condition
Uleat: added non-extensioned wildcard filter to \\...\dependencies\.gitignore to fix tortoisegit inclusion errors (fixes commit and display overlay issues.)
== 07/13/2013 ==
KLS: Added packet class and helper functions to Lua.
KLS: Added quest event: event_unhandled_opcode
== 07/11/2013 ==
KLS: Added a few lua functions.
KLS: Redid the npcspecialatk system with a new system that is more flexible but a little more complicated (this will break any 3rd party tools that deal with them).
Instead of a string such as "ERS" to denote "Enrage Rampage Summon" abilities are indexed by their ability number, level and params separated by '^'.
It is stored in the following format: ability,level[,param0,param1,param2,param3,param4,param5,param6,param7] Params will be read until there are 8 total or a '^' is reached.
Eg: 'ERS' -> '2,1^3,1^1,1
Levels allow us to dictate how abilities behave that may be different even though they're the same ability.
Params allow us to further refine behaviors on a case by case basis. Passing 0 as a param will use the default value.
NOTE: Be sure to source 2013_07_11_NPC_Special_Abilities.sql. Also due to the large impact this has on a database it is very HIGHLY SUGGESTED to BACKUP YOUR DATABASE FIRST.
The following are the special abilities currently in the game as well as their levels and parameters currently in use:
Level 1: Summon target to NPC
Level 2: Summon NPC to target
Param0: Cooldown in ms (default: 6000)
Param1: HP ratio required to summon (default: 97)
Param0: HP ratio required to enrage (default: rule NPC:StartEnrageValue)
Param1: Enrage duration in ms (default: 10000)
Param2: Enrage cooldown in ms (default: 360000)
Param0: Proc chance (default: 20)
Param1: Rampage target count (default: rule Combat:MaxRampageTargets)
Param2: Percent of a normal attack damage to deal (default: 100)
Param3: Flat damage bonus to add to the rampage attack (default: 0)
Param4: Ignore % armor for this attack (default 0)
Param5: Ignore flat armor for this attack (default 0)
Param6: Percent of npc's natual crit that can go toward this rampage (default: 100)
Param7: Flat crit bonus on top of npc's natual crit that can go toward this attack (default 0)
Param0: Proc chance (default: 20)
Param1: Rampage target count (default: 1)
Param2: Percent of a normal attack damage to deal (default: 100)
Param3: Flat damage bonus to add to the rampage attack (default: 0)
Param4: Ignore % armor for this attack (default 0)
Param5: Ignore flat armor for this attack (default 0)
Param6: Percent of npc's natual crit that can go toward this rampage (default: 100)
Param7: Flat crit bonus on top of npc's natual crit that can go toward this attack (default 0)
Param0: Proc chance (default: rule Combat:NPCFlurryChance)
Param1: Flurry attack count (default: rule Combat:MaxFlurryHits)
Param2: Percent of a normal attack damage to deal (default: 100)
Param3: Flat damage bonus to add to the flurry attack (default: 0)
Param4: Ignore % armor for this attack (default 0)
Param5: Ignore flat armor for this attack (default 0)
Param6: Percent of npc's natual crit that can go toward this attack (default: 100)
Param7: Flat crit bonus on top of npc's natual crit that can go toward this attack (default 0)
Ex: Normal Flurry with 25% proc rate and 100% crit chance that ignores 500 armor.
Param0: Aggro modifier on non-tanks (default: rule Aggro:TunnelVisionAggroMod)
LEASH = 32
Param0: Range (default: aggro range * aggro range)
Param0: Range (default: aggro range * aggro range)
The following Lua API functions were added to deal with the new system:
Integer GetSpecialAbility(Integer ability);
Integer GetSpecialAbilityParam(Integer ability, Integer param);
Void SetSpecialAbility(Integer ability, Integer level);
Void SetSpecialAbilityParam(Integer ability, Integer param, Integer value);
Void ClearSpecialAbilities();
Void ProcessSpecialAbilities(String str);
The old API functions that worked with letters still exist for backwards compatibility reasons but wont be updated further.
== 07/08/2013 ==
Secrets: Cleanup of some log functions that did not have an 'off' function.**
Secrets: Unknown opcode messages only show on EQDEBUG* >= 5 or higher now. (including the dumped packet)
*NOTE: We recommend for debugging and feature development that you keep EQDEBUG to 5 or higher. For production environments, we recommend 1 to help with CPU performance on windows machines and disk I/O on all platforms.
**Affected filters:
== 07/05/2013 ==
KLS: Added some lua functions
KLS: Fixed some lua functions
KLS: Perl now will (like lua) keep track of the values you return from EVENT_*. This allows perl to use the extra behavior in things like EVENT_DEATH. Now generally the perl system is now considered deprecated (in favor of lua in the long term) I felt this was too big a change to pass up adding when I got it working.
== 07/02/2013 ==
KLS: Exported eq.follow(entity_id, [distance]) and eq.stop_follow() to lua.
== 07/01/2013 ==
mackal: Fix Monster Summoning related to giants/cyclops
mackal: Prevent Monster Summoning from summoning a portal in bothunder
KLS: Merge of lua branch to master
See: for more detailed information on what is added.
Upgrade notes:
-'templates' quest folder needs to be renamed 'global'
-'items' quest folder needs to be moved into the 'global' folder
-'spells' quest folder needs to be moved into the 'global' folder
-EVENT_PROXIMITY_SAY needs to be enabled via quest before it will work, calling quest::enable_proximity_say() in EVENT_SPAWN will suffice.
-quest::handleturnin, quest::completehandin, quest::resethandin, and quest::clearhandin have been removed. Take a look at plugin::mq_process_items, plugin::check_mq_handin, plugin::clear_mq_handin for MQ viable replacements.
-Some spell quests that overwrote the effects from the spell they were cast on no longer function properly on perl, it's suggested you make the spells empty or rewrite the broken quests in lua and return a non-zero value.
-Some item quests have changed in a subtle way, though it's unlikely any quests are impacted and the thread has more information if you found any of your quests broke. As far as I know for example: PEQ didn't have to update any of its nearly 70 item quests.
-Cazic Touch (982) no longer shouts the name of the thing it is targeting without a script.
-EVENT_DEATH now triggers before the death is complete. For the old functionality you may use EVENT_DEATH_COMPLETE. It might be a good idea to replace all EVENT_DEATH with EVENT_DEATH_COMPLETE in existing spells.
We sought to minimize changes required but it's still a bit disruptive so take a few minutes when upgrading to make sure everything is correct. Most notably quest::clearhandin was used in some popular plugins to avoid a dupe involved with its code and now that it's gone those will not function if fixes are not applied.
== 06/16/2013 ==
Secrets: Fixed an issue with RoF items and Req/Rec level above 100 appearing yellow. Recommended to enable the #iteminfo command for items that have a req/rec above 100 to display proper information regarding the info.
== 06/15/2013 ==
KLS: (image) Potentially could bypass some spell checks by passing a specially crafted spell slot. This has been addressed.
== 06/12/2013 ==
KLS: Merge Hateborne's hp cap stuff
KLS: We haven't updated changelog in a while but there's been:
-Some string stuff
-A lot of fixes to things like caps.
-More work on custom mod stuff (including examples)
-Fix for login not bailing out if it cant connect to a db
-Quite a few warning changes.
== 05/09/2013 ==
Uleat: (Updated: 06/12/2013) Fixed a few observed bot issues and an beneficial AE casting bug:
Added missing Bot primary weapon proc call (secondary and ranged already exist)
Added Bard Bot instrumentation bonuses
Added checks to avoid AE Buff casting on enemy mobs
Fixed a few typos in 'Vah Shir'-related code
(Please post any discrepancies as bugs)
== 05/05/2013 ==
Tabasco: Added EVENT_ITEM_TICK for interactive item quest scripts. (See
Added simple account flags. Would this work better as an additional qglobal category?
Added SendMessage to EQW, useful for using CURL to broadcast to the server.
Added WorldShutDown to EQW for timed world shutdowns, also updated console worldshutdown command to optionally use timed behavior.
Added numerous modding hooks and mod_functions.cpp for easy custom formulas or future lua integration.
Added various rules for monk AC bonus weight, archery bonuses, kick/bash stuns and mob stun levels.
required SQL: 2013_05_05_Account_Flags.sql
required SQL: 2013_05_05_Item_Tick.sql
== 04/28/2013 ==
PiB: Implement CRC16 using CRC32.
== 04/27/2013 ==
PiB: Verify OP_Ack size & fix crash in BasePacket::build_raw_header_dump due to uninitialised timestamp.
Derision: Verify minimum size of OP_Packet, OP_Fragment and OP_OutOfOrderAck.
== 04/24/2013 ==
Bad_Captain: Fixed a couple of merc stat issues.
Bad_Captain: Removed unneeded bot pet AI.
Bad_Captain: Fixed a few bot aggro issues. (Uleat)
== 04/20/2013 ==
JJ: Fixed rare case where heals from buffs could go negative.
== 04/12/2013 ==
Derision: Moved entity_list.Clear() prior to destruction of Perl objects in zone shutdown as I was seeing a segfault due to attempts to call EVENT_HATE_LIST as mobs were being destroyed.
== 04/09/2013 ==
mackal: Realized I was an idiot, changed salvage script to be better
optional SQL: 2013_04_09_SalvageCleanOld.sql - run if ran old script
== 04/08/2013 ==
mackal: Implemented Salvage AA
required SQL: 2013_04_08_Salvage.sql
script: - will generate the entries for some exceptions for salvage returns.
== 04/04/2013 ==
mackal: Implemented SE_ForageAdditionalItems as a bonus
required SQL: 2013_04_04_NaturesBounty.sql
== 04/03/2013 ==
mackal: Overloaded Mob::Say_StringID with the option to provide a message type
mackal: Switched rest of the Pet Messages to MT_PetResponse (Leader commands intentionally left the old way)
== 04/2/2013 ==
Bad_Captain: Fixed Merc lack of use of heal over time spells (causing excessive healing).
Bad_Captain: Fixed pet mitigation/AC issues.
== 04/01/2013 ==
mackal: AA reuse timers now start when you hit the button and are reset upon failure
mackal: Instant Cast bard AAs can now be used while singing a song
== 03/30/2013 ==
mackal: Fixed most of the pet talking, all use StringIDs now. Pet now informs you when it taunts.
== 03/23/2013 ==
mackal: Fix issues with escape not always working and fixed SE_FadingMemories to have the message since the message isn't part of the spell data.
Escape now uses just the spell and not the AA Actoin
Fading Memories now only uses the AA Action to eat mana
== 03/21/2013 ==
Bad_Captain: Fixed merc buffing bugs.
Bad_Captain: Added checks before dismissing merc to prevent possible bugged mercs.
Bad_Captain: Merged in Secret's merc memory leak fixes.
== 03/20/2013 ==
mackal: Fixed stacking issues with SE_Limit* (ex. Unholy Aura Discipline and Aura of Reverence)
== 03/18/2013 ==
Bad_Captain: Fixed zone crash due to merc focus effects & tribute.
Bad_Captain: Fixed merc aggro issues when client in melee range & spell recast timers.
Bad_Captain: Added melee DPS spells/disciplines & support.
== 03/17/2013 ==
Secrets: Fixed that pesky merc memleak.
Secrets: Bit of code cleanup regarding mercs.
== 03/15/2013 ==
Derision: RoF: Added ENCODE for Resurrect_struct (Accepting a rez should now work).
Derision: Fixed a couple of memory leaks in Rez code.
== 03/14/2013 ==
JJ: (NatedogEZ) Fix for hate list random never selecting last member of hate list.
Bad_Captain: Fixed Merc spell recast timers.
Bad_Captain: Changed how Mercs add mobs to their hate lists (should prevent IsEngaged() issues).
Bad_Captain: Initial Caster DPS Merc spell casting AI, including initial Merc stance implementation.
Bad_Captain: Mercs now suspend when their owner dies to prevent them being bugged (until it can be fixed).
OPTIONAL SQL: 2013_03_14_Merc_Spells.sql
== 03/09/2013 ==
Zaela_S: Stop mobs aggroing on dead players when using RespawnFromHover.
Derision: Removed _log message from zone/CatchSignal on Linux as it can deadlock on shutdown if another signal is received while the _log call is being processed.
Derision: Added some error logging into ZoneDatabase::NPCSpawnDB for #npcspawn create.
== 03/07/2013 ==
af4t: Melee tomes with names beginning "Skill:" (e.g. RNG Warder's Wrath, etc) can be memorized now, by hand-in-to-guildmaster or right-click-from-inventory.
== 03/02/2013 ==
af4t: Stop NPCs aggroing each other with buffs/beneficial spells.
== 03/2/2013 ==
Bad_Captain: Fixed Merc depop bug.
Bad_Captain: Added merc rest regen.
Bad_Captain: Fixed merc group spell casting bug where mercs would continue to try to cast group buffs on pets of caster who didn't have Pet Affinity AA.
== 03/1/2013 ==
Bad_Captain: Fixed Merc duplicate save bug.
Bad_Captain: Focus items, spell_scale and heal_scale now work implemented and new merc equipment (with focus items).
Bad_Captain: Added checks during merc hire, unsuspend, & timer update for states where a merc can't be hired, unsuspended, or can't be retained due to insufficient funds, no room in group, in raid, invalid merc data, etc, and give appropriate feedback.
Bad_Captain: Added rules for charging of merc purchase and upkeep costs.
REQUIRED SQL: 2013_03_1_Merc_Rules_and_Equipment.sql
== 02/27/2013 ==
KLS: Changed how shared memory works:
Instead of System V/windows pagefile shared memory we now have shared memory that's backed by the filesystem.
What that means is basically instead of EMuSharedMem(shared library) we now have shared_memory(executable), shared memory will be persistent between runs until you delete or reload it using the shared_memory executable.
1) Create a directory in the place you run world/zone named shared and make sure files can write there.
2) Run the shared_memory executable from the same place you run world/zone (it's basically doing the loading we would do on startup so will take a moment).
3) Run world/zone/whatever
== 02/25/2013 ==
af4t: Add Touch of the Wicked AA redux to SK Improved Harm Touch and Leech Touch.
== 02/22/2013 ==
mackal: Mobs will now be removed from XTargets when they get back to their way point, should be last instance of XTarget mobs not clearing when they are not aggroed anymore
== 02/19/2013 ==
Derision: World should no longer crash if the start_zone query fails at character creation.
== 02/18/2013 ==
Bad_Captain: Moved merc save to merc table, save merc buffs, added cure and rez spells to healer merc.
JJ: Chat garbled for drunk characters.
Derision: Charmed pets should no longer be targettable with F8. Charmed pets no longer get a surname of Soandso's Pet.
mackal: Added potionbelt tool tip
KLS: Added EVENT_DEATH to Player Quests
REQUIRED SQL: 2013_02_18_Merc_Rules_and_Tables.sql
OPTIONAL SQL: 2013_02_18_Merc_Spells.sql
== 02/17/2013 ==
Derision: Added optional guildid and minstatus parameters to quest::gmsay(<messsage>, [color], [toworld], [guildid], [minstatus])
Derision: Client version is now returned by the stream proxy as a number.
Derision: Fixed bug where BecomeTrader packets were only being sent to the Trader, not all other clients in the bazaar.
== 02/16/2013 ==
mackal: Fix AA reuse timer calc
mackal: Remove old filters and change all remaining old to new (Also fix Auction filtering out OOC as well due to incorrect define)
== 02/12/2013 ==
Kayen: AA fix
REQUIRED SQL: utils/sql/svn/2504_required_aa_updates.sql
== 02/11/2013 ==
Derision: RoF: Added ENCODE for OP_BeginCast (fixes no sound during spell casting). Corrected OP_DeleteSpell.
== 02/10/2013 ==
JJ: (mackal) Language skill up should use proper function.
JJ: SetLanguageSkill now updates client immediately. Both functions do proper limit checks.
Added two missing languages. Skill level 0 in a spoken language now shows 'in an unknown tongue'.
JJ: Initial implementation of a GarbleMessage function and implemented for languages. Can be shared with drunk speaking.
== 02/09/2013 ==
KLS: Was pointed out to me that we're in violation of ActiveState Licensing terms for their perl distribution.
To rectify this we have removed the Windows perl binaries from the source.
== 02/06/2013 ==
Uleat: Changed conversion of bot armor colors from long to unsigned long. Conversion error led to #FFFFFFFF for all returns.
== 02/05/2013 ==
cavedude00: Added heading to start_zones
Uleat: Fixed the 'nude' bot issue. Mob::texture was not set to the appropriate value and forcing an unclad body model.
Uleat: Fixed the show/hide helm feature. Added rebroadcast of packet so that changes take place immediately instead of after zoning.
KLS: Addressed several (completely stupid and inexcusable) bugs in the avoidance code that made it impossible to dodge and parry in certain situations.
As a note: please don't touch the avoidance code if you don't know what you're doing, seriously.
Required SQL: utils/sql/svn/2482_required_start_zones.sql
== 02/03/2013 ==
Trevius: RoF: More work on Bazaar Traders.
Sorvani: Items with more than 1 charge should be purchased at max charges again. This does not fix players recharging by sell/buyback method. That will come in the future.
== 02/02/2013 ==
Trevius: RoF: Fixed some opcodes related to surnames and traders. Surnames can now be cleared.
JJ: Fix to #spawn: Automatically truncate name if too long so spawn will happen as expected rather than a NameTooLong NPC.
JJ: Fix to #spawn: Output actual NPC result after creation rather than projected result before.
== 02/01/2013 ==
Trevius: RoF: Loading Spell Sets now unmems spells before meming the new set.
Trevius: RoF: Turning on Trader mode in bazaar now works, but no further trader functionality is available yet.
Akkadius: Fixed an issue where was not initializing (initially)
== 01/31/2013 ==
cavedude00: (mackal) Rune aggro fix
cavedude00: (Drajor) Tradeskill skillneeded fix.
== 01/30/2013 ==
Kayen: Various AA fixes, mostly related to SOF display issues.
REQUIRED SQL: utils/sql/svn/2471_required_aa_updates.sql
== 01/29/2013 ==
Secrets: Another attempt to fix this bot/merc group crash on zoning.
cavedude: Added $client->GetInstanceID() Perl export.
== 01/28/2013 ==
Secrets: Fixed a crash issue involving invalid buff slots in SpellEffect code. (Crash fix.)
Secrets: QuestParserCollection no longer processes EventPlayer in the case that a player zones and the group is still valid via linkdeath. (Crash fix.)
Secrets: Added the command #augmentitem. Does the same thing that the #bot augmentitem command does but without the bot command needing to be active. Default 250 status.
JJ: Added quest::depop_withtimer() which will depop NPC and start spawn timer (a replacement for $npc->Depop(1) code if desired)
== 01/27/2013 ==
Trevius: Fixed a bug introduced in Rev2448 that caused some spell casting to use all of a player's mana.
Trevius: Mercenary buffs now display in the Target Buffs window.
Trevius: RoF: Populated a couple more bit fields in the spawn struct.
Trevius: Mercenaries are no longer targetable with NPC targeting hotkeys.
== 01/26/2013 ==
Derision: RoF: Updated spell buffs in the PP to account for instrument_mod/bard_modifier.
Sorvani: Missed a spot on the stun proc aggro change.
Trevius: Fixed Mercenary Upkeep Timers and Stances again for UF and SoD.
Trevius: Fixed Mercenary Upkeep Timers to properly restart after the timer is up for all clients.
Bad_Captain: Mercs - Initial spell casting AI committed.
KLS: Added crash logging for Windows builds.
Trevius: Mercenaries now despawn when a player camps out or disconnects in any way.
Trevius: Players with a Mercenary spawned can now be invited to and join another group with their mercenary.
Sorvani: (mackal): Moved stunproc rule implmentation to catch all cases
OPTIONAL SQL: utils/sql/svn/mercs.sql -- rerun for updated merc stats & merc spell lists
== 01/25/2013 ==
Sorvani: Implemented max aggro from stun proc set to 400. It is rule based set rule to -1 for unlimited.
Derision: RoF: Should fix x10 Buff bug.
Trevius: Reworked some of the code dealing with Mercenary packets and spawning them. There is still some work to be done, but the basics are more solid now.
Trevius: Mercenaries function much more consistently now for Hiring, Suspending, Unsuspending, Dismissing.
Trevius: Mercenaries no longer fail to group up after being hired, unsuspended or after zoning/logging in.
== 01/24/2013 ==
Trevius: RoF: The #fixmob command can now go up to race 724 when cycling through races.
Trevius: RoF: The #npcstats command no longer truncates itemlinks.
== 01/23/2013 ==
Trevius: RoF: Corrected multiple opcodes.
Trevius: RoF: Apply Poison is now functional.
Trevius: RoF: /getguildmotd is working.
Trevius: RoF: GM commands /changename, /summon, /emotezone, and /emoteworld are working.
Trevius: RoF: Sense Traps is now working.
Trevius: RoF: Potion Belt is now functional.
Trevius: RoF: /who and /who all now display the correct player counts.
== 01/21/2013 ==
Akkadius: Should have fixed some scenarios where the script wasn't unloading correctly
Trevius: RoF: Alternate Currencies now display correctly in the inventory window.
Trevius: Changed one of the mercenary data packets to use the same packet Live does instead of the Merchant packet.
Uleat: RoF: Aligned the extended client slots back into slottype 0. Previously, corpse looting stopped after looting the ninth slot. (There's still an issue addressing slots 31 and 32..this cannot be efficiently corrected until an inventory rework is performed.)
Uleat: Fixed a corpse looting issue where the power source item (slot 9999) was being omitted from the corpse inventory. A previous oversight on my part. Also refined message reporting. (RoF: increased corpse slot limit to 34)
Uleat: Power Source items will now report in 'worn' instead of 'inv' when using #peekinv.
== 01/20/2013 ==
KLS: intN types have changed to more closely reflect C99 and C++11 types:
intN was an unsigned int of N bits -> it is now a signed int of N bits.
sintN was a signed int of N bits -> it has been removed in favor of intN.
uintN is still unsigned.
The existing types in the code have been changed automatically(intN -> uintN, sintN -> intN), but keep this in mind when developing in the future.
== 01/19/2013 ==
Akkadius: Implemented, this is very similar to where any normal NPC script will run dual-stack or in tandem with the located in the templates folder
Akkadius: Implemented the ability to modify EXP and AAEXP modifiers per Level, these are loaded from an optional table (level_exp_mods) that is attached to the commit, you MUST enable the rule first!
Akkadius: Added #reloadlevelmods - which will reload level mods from the `level_exp_mods` table
Derision: RoF: Guild name now appears in the Guild Management window and over player's heads. /guildstatus now works. Guild members status now updates in the GMW.
Uleat: Corrected the BulkSendInventory process for incomplete item trade returns resulting from a server crash. Previous code used an external reference and items were never moved..and hence, lost once a new trade occurred.
Uleat: Added mlog messages to existing BulkSendInventory code to report hidden item movements and deletions. All BSI and helper processes now log movements/deletions.
Uleat: Added two new client pre-entry inventory validation methods - RemoveDuplicateLore and MoveSlotNotAllowed. Duplicate lore was not checked and IsSlotAllowed failures were not handled. Both were causes of persistent desyncs.
Uleat: Corrected a bug in ItemInst::IsSlotAllowed that 'passed' PowerSource slot checks regardless of ItemInst::Slots value.
Uleat: [Client-Server Inventory Desyncronization] Most CSD bugs should now be corrected, or at least, compensated for. Please post any desync issues as a new bug post or pm a Dev or GM if it involves an exploit.
Optional SQL: \utils\sql\svn\2428_optional_levelbasedexpmods.sql
== 01/18/2013 ==
Akkadius: Fixed an size value of hp_regen_rate for NPC's so values don't roll over into negative values
KLS: EQEmu has been setup to use CMake, this is mandatory.
Visit for instructions on Windows/GCC.
== 01/17/2013 ==
Uleat: Added opcode handlers for OpenInventory(SoF and SoD) and OpenContainer(SoF, SoD, UF and RoF). Both still need slot translators.
Uleat: Changed internal SwapItem method from void to bool return. Added appropriate code to handle returns.
Uleat: Added an abbreviated form of the resync code - SwapItemResync. Handles failed item swaps on a case-by-case basis.
Uleat: Fixed a bug that allowed duplication of non-stackable, charged items..lore or otherwise. (Sorry cheaters...)
== 01/16/2013 ==
Derision: RoF: Updated OP_LogServer encode based on a live packet in order to enable 'Enter Tutorial from character select.
Secrets: Added five new functions to perl for clients: GetBindX, GetBindY, GetBindZ, GetBindHeading, and GetBindZoneID. They all have an optional parameter of index of playerprofile's bindpoint.
Secrets: Added an optional parameter to GetBind for index.
== 01/15/2013 ==
Derision: RoF: Added Encode for OP_TaskDescription and removed RoF specific code for it from tasks.cpp
Derision: Fixed some compiler warnings.
Trevius: RoF: Varlinks and Saylinks now display properly for RoF.
Trevius: RoF: Started work on Mercenaries. They are partially functional but need more work.
Trevius: RoF: Started work on Guilds. The guild window can now display members, but the guild name does not yet display.
== 01/14/2013 ==
Derision: RoF: Fixed bug that was causing only one task to show in the Active Task window.
Derision: Fixed potential crash in QuestManager::varlink. Removed some unused variables that gcc was warning about.
== 01/13/2013 ==
Derision: RoF: Encoded OP_TaskHistoryReply and added temporary handling for short OP_TaskActivity packets until encode is down for that.
Derision: Deleted Anniversary/HoT/VoA and Live patches.
Derision: Updated StaticGetZoneName with all zones currently in the PEQ database.
Trevius: RoF: Disciplines now update without zoning.
== 01/12/2013 ==
Derision: RoF: Personal Tribute and the Pet Buff Window now work.
Derision: Fixed potential crash in SendPetBuffsToClient.
Derision: RoF: Accounted for the fact the Duplicate Lore item message now includes the item's name.
Trevius: RoF: The Task Selector Window is now functional.
== 01/11/2013 ==
JJ: Added rule check to zone - no need to load Merc Templates if Mercs aren't allowed.
== 01/10/2013 ==
Trevius: RoF: Corrected multiple opcodes.
Trevius: RoF: #finditem now displays itemlinks correctly.
Trevius: RoF: Started work/testing to get Tasks functioning. Don't click tasks in the history tab or client will freeze.
Trevius: Added some possible crash fixes.
Bad_Captain: Mercs - temp fix for possible crash when dying with RespawnFromHover on, fixed infinite stats (buffs continually adding to stats).
== 01/09/2013 ==
Derision: RoF: Corrected LDoN merchant opcodes, added encode for OP_AdventureMerchantSell. Updated PP with available LDoN points.
Bad_Captain: Mercs - removed debug messages, fixed regen.
== 01/08/2013 ==
Derision: RoF: Marked position of Monk 'Mend' skill cooldown timer in PP. Fixed a typo.
Bad_Captain: Mercs - Merged from branch. Initial merc commit to trunk with semi-functional tank mercs.
Uleat: RoF: Changed opcode so that is handled properly. (Was writing to the log about twice-per-second.)
Trevius: RoF: Death no longer crashes players and the respawn window is now functional.
Trevius: RoF: More work on slot conversions. This time for the cursor buffer.
Trevius: RoF: Some work on Guild Master Training packets, but still only seeing languages displayed.
REQUIRED SQL: utils/sql/svn/2383_required_group_ismerc.sql -- adds ismerc column to group_id table
OPTIONAL SQL: utils/sql/svn/2380_optional_merc_rules.sql -- Contains rules for mercs including rule to enable mercs
OPTIONAL SQL: utils/sql/svn/2380_optional_merc_merchant_npctypes_update.sql -- Contains npc_types & spawn updates for merc merchants in PoK
OPTIONAL SQL: utils/sql/svn/2380_optional_merc_data.sql -- Contains basic merc data, template info, & merc merchant entries
OPTIONAL SQL: utils/sql/svn/mercs.sql -- Contains merc stats & armor - to be replaced as needed with updated stats, spells, etc. Allows a complete resourcing of file
== 01/07/2013 ==
Trevius: RoF: /who and /who all now function properly.
Trevius: RoF: Adjusted/corrected some of the slot conversion functions.
Kayen: Various AA Fixes including a critical crash bug.
REQUIRED SQL: utils/sql/svn/2376_required_aa_updates.sql
== 01/06/2013 ==
Kayen: Fix for missing and incorrect Healing Adept AA values.
Trevius: RoF: Possible crash fix for logging in on some server builds.
Trevius: RoF: Added VoA to the #cvs command output.
Derision: RoF: Short buffs should appear in the song/short buff box.
Lerxst/Hateborne: Updated Mob::TryDivineSave to allow someone to be saved even if there are no additional effects to be cast and rearranged the buff fading so the spell effect isn't lost before it can be cast.
REQUIRED SQL: utils/sql/svn/2370_required_aa_updates.sql
== 01/05/2013 ==
Trevius: RoF: Tradeskill combines (auto-combine and experiment) are now functional.
Trevius: RoF: The Popup Message window is now functional.
Trevius: RoF: Increased the max race id for #race to 724 (the max for RoF).
Trevius: RoF: Corrected the opcode for Augmenting Items and adjusted the struct, but it looks like it may require considerable work to implement the new augment system.
Akkadius: Trap Zone Crash issue where message is empty
Akkadius: Fixed a warning regarding AC
Vaion: RoF: Books now work properly.
== 01/04/2013 ==
Trevius: RoF: Looting items and loot all are now functional.
Trevius: RoF: Trading to NPCs and Players is now functional.
Trevius: RoF: AA Purchases are now functional.
Trevius: RoF: Opening Tradeskill Objects is now possible.
Trevius: RoF: Moving items into Tradeskill Objects is now possible, but combines will bug the client.
Uleat: QS: Added 4 additional logging options [MerchantLogTransactions], [PlayerLogDeletes], [PlayerLogHandins], [PlayerLogMoves]
Uleat: QS: PlayerLogHandins is partially enabled..currently logs NPCtypeID and Client-side trade information only.
Uleat: QS: Renamed 1 existing source files to maintain logging name continuity [PlayerLogTrades].
Uleat: Fixed minor issue that was causing armor glitches with RoF clients from UF and lower clients.
Uleat: Fixed minor bug in the #iteminfo command where the material value reported 0x20xx.
REQUIRED SQL: utils/sql/svn/2361_required_qs_rule_values.sql
REQUIRED SQL: utils/sql/queryserv/2361_QueryServ.sql
REQUIRED SQL: utils/sql/queryserv/2304_QueryServ.sql (rename '2304_qs_playertradelog.sql' - Does not need to be re-sourced)
== 01/03/2013 ==
Trevius: RoF: Fixed slot conversion issues for Bank and Shared Bank
Trevius: RoF: Normal Merchants are now fully functional for buy/sell
Trevius: RoF: Item Links now display item stats when clicked, but the links are still truncated.
Trevius: RoF: Corrected the Illusion Struct and corrected some opcodes.
Trevius: RoF: Updated the DeleteSpawn struct and added an encode for it.
Trevius: RoF: Hopefully fixed Consuming food/drink.
== 01/02/2013 ==
Vaion: RoF: Crash prevention for Item Preview window.
Trevius: RoF: Finished identifying basically all of the remaining RoF opcodes.
Akkadius: Fix for Guild Crash again...
Uleat: Fixed the wear change issue where the server was not translating the SoF, SoD and UF clients' update request properly.
Uleat: Fixed the non-clickable quest reward bug triggered when the item was in a container and the player traded the item or zoned.
Vaion: RoF: Found Opcode for Item Previews. Made base packet support so that Item Preview (Alt+Right Click) works. Still a few issues to hash out.
Derision: RoF: Added encode/decode for BlockedBuffs and OP_FindPerson. Added opcodes for FindPerson and RestState
Derision: RoF: Found XP/AAXP in the PP. Updated OP_ExpUpdate/OP_LevelUpdate.
Derision: RoF: Did some work on buffs & buff removal. OP_SetChatServer2 for UCS. Encode for OP_HPUpdate
Derision: RoF: Added Leadership AA into the PP. Few opcodes to make Track work.
Derision: RoF: Some spell related opcodes and PetCommands struct update.
Vaion: RoF: Fixed OP_PetCommands and OP_TargetCommand to correct opcodes. Identified OP_Jump.
Vaion: Fix for an issue with attuneable augments and an issue in guild bank.
Sorvani: Fix for pets causing a crash. Do not set rule > 25!
Trevius: RoF: Corrected wearchange packet structure.
Trevius: RoF: Added new arguments to #wc ( #wc [wear slot] [material] [ [hero_forge_model] [elite_material] ] ) - Example: "#wc 1 5 6"
Trevius: RoF: Hero's Forge Robes can now be used with #wc by using wear slot 7 - Example: "#wc 7 6 11"
Akkadius: Guild Bank crash fix, checking for valid items before going through the iterator
REQUIRED SQL: utils/sql/queryserv/2340_required_maxbuffslotspet.sql
Derision: RoF: Found GM and PVP flags in PP.
Derision: RoF: Found endurance & some group/raid leadership stuff in PP.
Sorvani: Restricted pet buffs to 25. could be made a rule when/if the extpp gets changed to handle it.
Sorvani: Changed a few more VS2010 projects to build as $ProjectName
Sorvani: Removed #PRAGMA statements around OP_CharacterCreate from patch files now that real problem with RuleI is resolved.
Derision: RoF: Found more of the Spawn_Struct bitfield values.
Secrets: Fixed an issue where the pets code was counting the wrong number of buffs to load, resulting in invalid memory. "And no one likes getting in the middle of invalid memory!"
Derision: RoF: Updated position/movement related structs (per SEQ), OP_Animation encode and CombatDamage_Struct
Akkadius: Increased max item ID to 300000 (You will need to replace your EmuShareMem.dll for sure next build!
Akkadius: Fixed an issue where initiating CreateDatabaseEntry() for a door would reset version back to 0, it now grabs the current version the door is saved in.
Sorvani: Fixed quest::summonitem to summon charged items with max charges if no charge amount specified
KLS: Fixed an issue with RuleI returning an unsigned int32 instead of a signed int32. This is a critical vulnerability, please update right away.
Akkadius: Fixed an issue where quest::createdoor would return a door id of 0 when doors exist with version -1 (All Zones)
Trevius: RoF - Fixed the item struct so items can be loaded properly.
Trevius: RoF - Added back all of the opcodes that were previously identified and a few more.
Derision: RoF - Commented out lots of Guild opcodes that were causing crashes.
Derision: RoF - Updated RequestClientZoneChange struct and encode. Altered default Bitfields setting to only apply tyo NPCs
Derision: RoF - Updated RoF.cpp to remove all the warnings in a Linux compile
Secrets: Fixed the x64 portability issue reported by Akkadius. No idea how long this has been broke but at least it's fixed.
Sorvani: Items with zero charges remaining and located in a bag will no longer get set to MaxCharges when looted from a corpse. Round 2.
Sorvani: (Hateborne) copy paste issue in Mob::TryDivineSave corrected
Trevius: RoF - Fixed the Character Select Struct, which should prevent an error when trying to enter world on certain characters.
Trevius: RoF - Character Creation is now functional.
Trevius: RoF - Identified more fields in the Player Profile and added the correct checksum so the current packet should work (thanks Derision).
Trevius: RoF - Added the opcode for max characters to allow up to 10 chars to be created per account instead of 0 (thanks Noport).
Trevius: RoF - Fixed Drakkin Appearances at Character Select. Appears that all facial/body features are now perfectly aligned.
Uleat: QueryServ player trade log code is now enabled. Set the rules_value to true to enable logging.
REQUIRED SQL: utils/sql/queryserv/2304_qs_playertradelog.sql
Akkadius: Changed maxlevel default value and value for lootdrop_entries, this is a thing more affecting servers with higher than 127 so this doesn't affect many people.
OPTIONAL SQL: utils/sql/svn/2300_optional_loot_changes.sql
Trevius: RoF - More work on RoF Structs and added the Client Version stuff.
Trevius: RoF - Removed/Disabled most opcodes until we are further along and then I will add them all back in and populate the rest.
Trevius: RoF - Added a new packet dealing with membership status, but it may need more work.
Uleat: Added inspect message functionality for SoF+ clients.
Uleat: Added bot command #bot setinspectmessage (use #bot setinspectmessage help)
REQUIRED SQL: utils/sql/svn/2299_required_inspectmessage_fields.sql
Lerxst: Added the RoF.cpp files to the patches folder of the project for the vs2008 people.
Sorvani: Added the RoF.cpp files to the patches folder of the project for the windows people.
Akkadius: Added EntityList::GetDoorsByDoorID(int32 id) which is exported to Perl $entity_list->GetDoorsByDoorID
Akkadius: Added Door Class object $Door->GetDoorID(); to return the obvious Door ID for the entity
Trevius: Initial addition of the RoF client. Currently disabled by default. Uncomment the 2 RoF lines in common/patches/patches.cpp to enable the client.
Sorvani: (Uleat) Player Inspect works for Titanium users again. Spell casting from a clicky effect checks that the item is still in the slot it was cast from before applying the affect and removing the charge (if applicable).
Secrets/Akkadius: Implemented the customary ability to scale an NPC's spell damage or healing % by a modifier loaded from the npc data in npc_types
This will allow an NPC to do for example 150% of the damage of their damage spells if spellscale is set to '150'
'healscale' field needs to be set to affect heals in a similar manner
Both of these can also be accessed via ModifyNPCStat through 'healscale' and 'spellscale'
REQUIRED SQL: utils/sql/svn/2283_required_npc_changes.sql
Secrets: Fixed OP_PVPStats in HoT to the proper opcode, OP_WebLink. You can use $client->SendWebLink("website"); in perl to use this functionality to pop open a web browser ingame.
Akkadius: Ability to send signals through the Telnet console to character: signalcharbyname <playername> <id>
Sorvani: (Uleat) Update to inspect (SoF+) and corpses to related to handling power sources. Titanium inspect still broken.
Vaion: Renamed the rule for targeting swarm pets so that it make sense with the code.
OPTIONAL SQL: utils/sql/svn/2280_optional_rule_targetableswarmpet-rename.sql
Vaion: New rule created for handling whether swarm pets are targetable or not. Set to false for default to allow targeting swarm pets.
OPTIONAL SQL: utils/sql/svn/2278_optional_rule_targetableswarmpet.sql
Secrets: Pets can no longer proc from any hand other than their primary hand. This fixes an issue where beastlord pets could proc two, three or four from dual wielding/double attacking pets (as well as a general mechanics fix).
Secrets: NPCs will no longer attempt to heal through walls. There is now a LOS check for friendly NPC heals through walls. This was especially apparent in the PEQ database in Splitpaw, where you could have maybe 10 NPCs healing through walls at a time. I don't recall this ever happening on live past OoW. If this is incorrect revert it and make it a rule.
Vaion: Swarm Pets are now untargetable. They still gain aggro, are attackable and can be casted on by NPCs, but clients cannot target them.
Sorvani: Items with 0 charges will no longer get a free recharge when players die. Changed the TargetName property for all projects to be $(ProjectName). The only project that will have a new name is chatserver. It is now called ucs matching the linux build.
Sorvani: fix for newly created items with unlmiited charges to actually be usable.
Sorvani: (Uleat) Lore check is now made for items inside bags being trade before the trade completes.
Akkadius: Started first works of implementing QueryServ for what it was meant to be used
Akkadius: Moved QueryServ to it's own configuration block in the eqemu_config.xml (example):
Akkadius: QueryServ can now be used on a separate server and can use an entirely separate database as it was meant to
Akkadius: Added 'loottable_id` to NPC::ModifyNPCStat which also changes quest::ModifyNPCStat(identifier, newValue); as well
Akkadius: Fixed heap corruption in quest_globals that would occur if a value over 64 bytes was created
Akkadius: Changed value size in qglobals from 64 bytes to 128 bytes
Akkadius: Added #reloadworld - This command will reload every single zones Perl quests and repop them
Secrets: Minor code fix for qglobals. Since we removed the id field from qglobals, I suppose we shouldn't use it in code.
Secrets: Warning fix for a quest function.
Secrets: Fixed a crash issue where player corpses did not exist at all in a function (ie; they were disabled) yet we are trying to use an invalid pointer
Secrets: durp, i'm retarded. memleak fix.
Perl Changes:
Akkadius: Added EVENT_DISCONNECT to - Event that triggers whenever a character disconnects from the world
Akkadius: Added EVENT_CONNECT to - Event that triggers whenever a character connects to the world
Akkadius: Added EVENT_TASK_UPDATE to - Event that triggers whenever a donecount is incremented in a task, exports variables: $donecount, $activity_id and $task_id
Akkadius: Added EVENT_TASK_COMPLETE to - Event that triggers whenever a task is complete, this can sort of be checked in EVENT_TASK_STAGE_COMPLETED already but this is more finite, exports variables: $donecount, $activity_id and $task_id
Akkadius: Added EVENT_TASK_FAIL to - Event that triggers whenever a task has failed, exports variables: $task_id
Akkadius: Added $client->SignalClient($data), it uses the client as the initiator and the client that gets sent the data, good for entity_list iterations through client
Akkadius: Exported $client->AddAlternateCurrencyValue(currency_id, amount); originally created by KLS
Akkadius: Added quest::gettaskactivitydonecount(task, activity); which obviously will get the amount done in a task based on task and activity
Akkadius: Added cross zone client signalling capability by character ID: quest::crosszonesignalclientbycharid(char_id, data);
Akkadius: Added cross zone client signalling capability by character Name: quest::crosszonesignalclientbyname(Name, data);
Akkadius: Added cross zone client messaging capability by character Name: quest::crosszonemessageplayerbyname(Type, Name, Message);
Akkadius: Added the ability to flow #commands through Perl, by flow meaning if the command doesn't process through the traditional command system, it will dump the output to EVENT_SAY in based on rule Chat:FlowCommandstoPerl_EVENT_SAY
QueryServ Changes:
* I plan on adding much more logging to this server, but for now I've started with the following:
* QueryServ requires rules to be enabled before packets get sent to QueryServ, otherwise World/Zone doesn't need to even craft the packets for logging
Akkadius: Logging all player kills through QueryServ, you need to have QueryServ:PlayerLogNPCKills Rule Enabled, type: 0 = Solo, 1 = Group, 2 = Raid
Akkadius: Player trades logging started but definitely not finished
Akkadius: Removed the rules system from QueryServ, rules should only be read from World/Zone
REQUIRED SQL: utils/sql/queryserv/2268_QueryServ.sql
Database Changes:
Akkadius: Added a field in `character_` called `firstlogon` that will essentially be booled true when a player logs on, it handles a characters online status between world and zone and ultimately gets used in EVENT_CONNECT
Akkadius: Completely dropped the `id` column in `quest_globals`, the (`charid`, `npcid`, `zoneid`, `name`) fields will act as the primary keys, tested and working fine. This solves capping out on ID's as they are unecessary.
Akkadius: Changed value size of `quest_globals` field `value` from 64 bytes to 128 bytes
Akkadius: Removed an AA that was causing heap corruption
REQUIRED SQL: utils/sql/svn/2268_required_updates.sql
JJ: Initial fix for /MQZone detection to reduce false positives.
Sorvani: Corrected Improved Familiar pre-req and commited Vaion's AA update to fix animation Empathy.
Required SQL: utils/sql/svn/2264_required_aa_updates.sql
Sorvani: (Vaion) Added /pet no cast and /pet focus
Required SQL: utils/sql/svn/2262_required_pet_discipline_update.sql
cavedude: (Tabasco) Re-added probability, setting it to 100 (default) effectively bypasses probability and no additional roll is made. Setting it to 0 prevents the table from being rolled at all, so you can disable the table but still keep the entries if needed.
Required SQL: utils/sql/svn/2260_probability.sql
Sorvani: Tabasco sent in this bugfix: Ranged attack crash
It doesn't happen every time, but if an NPC is flagged for ranged attacks and they kill their target, the AIProcess function continues on under the assumption that the target is still available.
I just adjusted it to set a flag and do the actual attack at the end of the function. I haven't been able to reproduce the crash since.
Akkadius: Added the ability to govern player max levels through the source per character. It will look for a qglobal named 'CharMaxLevel', type 5 qglobal, if the rule is enabled and the character flag is set, they will not be able to pass that level.
Optional SQL: utils/sql/svn/2243_optional_char_max_level_rule.sql
Lerxst2112: Fixed issue in AddMoneyToPP where the amount of silver was being added to copper instead of the leftover copper.
Sorvani: Disabled optimization around the DECODE(OP_CharacterCreate) in all SoF+ patches to force character creation to validate correctly.
Sorvani: A NPC that is immune to Mez, Slow, Fear, Charm, or Snare will now generate aggro based on the respective spell's normal aggro.
Sorvani: SE_SummonCorpse will now work in raid groups.
Bad_Captain: Bots- Changed #bot healrotation timer to allow decimal values.
Bad_Captain: Bots- Rewrote bot AAs to load from DB.
Bad_Captain: Bots- Synced bot code to client code for aabonuses, attack, spell casting, etc., as the result of the client aabonuses changes.
Kayen: Fix for crippling blow chance, other minor fixes related to bonuses.
Kayen: AA dbase table fixes - Archery Mastery, Fury of Magic.
REQUIRED SQL: utils/sql/svn/2215_required_aa_updates
KLS: Faction mods (Race, Class, Deity) can now be added on the fly, without adding database columns or editing the code. Source in the database change, run utils/, and then drop the faction_list table to convert.
REQUIRED SQL: utils/sql/svn/2214_faction_list_mod.sql
cavedude: Overhauled loot system. I've outlined the new system on the forums here:
REQUIRED SQL: utils/sql/svn/2213_loot_changes.sql
Kayen: Implemented SE_HealFromMana changed to SE_HealGroupFromMana - now implemented correctly.
Kayen: Implemented SE_CriticalHealRate - Focus that increase chance for heals cast on you to critical.
Kayen: Implemented SE_IncreaseNumHits - Focus that can inceases max number of hits a buff can have before being removed.
Kayen: Removed SE_Twinproc - This is not an actual spell effect, Twin proc is now correctly implemented as on live using SE_Twincast.
Kayen: Implemented SE_TwoHandBluntBlock - Chance to block when using two hand blunt weapon (similiar to shield block).
Kayen: SE_NegateEffect will now negate all AA, item and spell bonuses for the specified effects.
Kayen: Added support to allow for certain bonuses to now properly be calculated when cast as debuffs (ie decrease chance to critical hit)
Kayen: Implemented rule to allow certain bonuses to be calculated by adding together the value from each item, instead of taking the highest value.
*Ie. Add together all worn cleave effects, ferocity effects ect.
OPTIONAL SQL: utils/sql/svn/2209_optional_additive_bonus_rule.sql (disabled by default)
cavedude: Uleat implemented the following changes:
The bandolier function should no longer CAUSE desyncs. Its use can still be affected by previous issues, just like any manual swap. Message cues have been temporarily added to certain procedures to indicate to the player that a possible desync condition exists and that they should zone or relog to correct the situation immediately.
The chance of player corpses becoming bugged should now be minimal. Corpse processing was changed to better emulate client behavior when 'RespawnFromHover' is set to true or false. Message cues and #commands were added to help determine whether a corpse is bugged. (Previously, queued cursor items were sent to the corpse..but, the packet builder did not include the 8000-series of items when a player looted their corpse.)
Tweaked several areas where item swaps were not handled properly, or at all, and the client-server inventories became desyncronized. Additional areas are still suspect for causing desync's. (A 'ResyncInventory' method is in-work to eliminate the need for item deletion...)
Client::SummonItem now limits the size of a summoned stack to the value of stacksize in the database. If you are using script to summon stacks greater than item->stacksize, this action was/is incorrect and you will need to modify your 'quest' to summon multiple stacks.
command changes:
#equipitem - modified partial stack movements..if a partial stack would be left on cursor, the action now fails.
#corpse - added subcommand 'InspectLoot' for client and npc corpses..additional information with client.
#peekinv - added stack size(charges) to report and modified the cursor depth reporting of bag slots.
#zopp - new command for troubleshooting..forces a client 'trade' or 'summon' to desync the client inventory.
references: - CSD Support Patch - CSD Bugged Corpse Patch - CSD Bandolier Patch
cavedude: (mackal) Damage shields by default will no longer count towards EXP gain. (Rule also added to change this behaviour.)
cavedude: (mackal) Extended targets should now clear when aggro is lost using skills.
cavedude: (mackal) AAs with shorter reuse timers should now reset if the cast failed (interrupted.)
KLS: Fixed a cause of raids disbanding on zoning.
OPTIONAL SQL: INSERT INTO `rule_values` VALUES (1, 'Combat:EXPFromDmgShield', 'false', 'Determine if damage from a damage shield counts for EXP gain.');
Kayen: Implemented NPC Special Attack 'i'. Immune to Taunt.
Kayen: Implemented: SOF+ live like stacking of AA's that belong to the same series in the AA window (Expection: AA's that use hot keys).
Kayen: Implemented SE_SpellEffectResistChance - Increase chance to resist specific spell effects ie. Charm
Kayen: Revision to how AA focus effects are handled to correclty utilize live AA data.
Kayen: Almost all 'General' and most 'Archetype' AA's implemented through Underfoot.
Kayen: aaID data (AA.h) updated through VoA expansion.
Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: Spell Casting Subtlety now implemented with bonus SE_ChangeAggro
MISC AA: Many AA that are spell focus effects now implemented using live data.
MISC AA: Finishing Blow ect, will now implemented using bonus, SE_FinishingBlow and SE_FinishingBlowLvl.
ENC AA: Total Domination now implemented with bonus SE_CharmBreakChance.
SK AA: Soul Abrasion now implemented with bonus SE_ImprovedDamage2.
*Many fixes to previously implemented AA effects.
REQUIRED SQL: utils/sql/svn/2208_required_aa_updates
OPTIONAL SQL: utils/sql/svn/2208_optional_aa_stacking_rule.sql (If false will disable AA stacking for all clients)
OPTIONAL SQL: utils/sql/svn/2208_optional_EnableSoulAbrasionAA
*If using an older server spell file (pre SOF), will need to run this to correctly populate the 'spellgroups' field.
Bad_Captain: Bots- Fixed an issue where bots couldn't have spells with target type of ST_GroupClientAndPet cast on them.
Bad_Captain: Bots- Added #bot healrotations command. Please see forums for more information.
cavedude: Added NPC:UseMultiQuest rule to turn multiquest support on or off.
OPTIONAL SQL: INSERT INTO `rule_values` VALUES (1, 'NPC:UseMultiQuest', 'false', 'If true, NPC will remember items handed to them for classic multiquest support.');
Akkadius: First set of efforts to clean up Windows compiling. See:
- Cleaned up x64 compiles, x86 compiles coming right up
- Removed pragma comments and forced them to be used under 'Additional Dependencies' (Windows)
Akkadius: Fixed-up Release & Debug 32-bit compiles
Akkadius: Uploading includes and libraries for both x64 and x86 so that VS2010 can automatically reference those libraries and requires no configuration
Akkadius: All project types have had includes and libraries linked to the appropriate machine type
Akkadius: Most project types have been set to /MP (Multiprocessor compile) and Warning Level 1 to filter most of the garbage
Akkadius: Got the rest of the VS2010 compiles working on a fresh SVN:
Debug x64|x64 = Debug x64|x64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
DebugBots x64|x64 = DebugBots x64|x64
DebugBots|Win32 = DebugBots|Win32
Release x64|x64 = Release x64|x64
Release|Win32 = Release|Win32
ReleaseBots x64|x64 = ReleaseBots x64|x64
ReleaseBots|Win32 = ReleaseBots|Win32
ReleaseBots|x64 = ReleaseBots|x64
cavedude: (image) Added Classic Multiquest support.
cavedude: Added quest::clearhandin and #clearquestitems so that multiquest can co-exist with out current system without issues.
REQUIRED plugin: utils/defaults/plugins/ (Or use PEQ quests repo)
Akkadius: (Uleat) Temporary dupe fix until we can iron this out the way it should be (Not use signed ints in the blob). This should trap a majority of it to client saves.
Akkadius: Account shared platinum field type change (signed to unsigned) to no longer allow negative values...
REQUIRED SQL: utils/sql/svn/2195_required_sharedplatupdates.sql
Kayen: Taunt skill updated to work consistent with live.
*You can now taunt NPC's over the users level. (RULE: TauntOverLevel)
*Taunt success chance should be accurate to live. Penalty of not being at max skill lv can be adjusted with (RULE: Combat:TauntSkillFalloff)
*Live messages for taunt success and failure are now implemented. (Note: Only NPC races that can 'talk' will say the success message).
Bad_Captain: Bots- Fixed an issue when with bot spell timers that could lead to a crash.
Kayen: Fixed SQL files from rev2185+ that were not saved as .sql
OPTIONAL SQL: utils/sql/svn/2189_optional_taunt_rules
OPTIONAL SQL: utils/sql/svn/2185_optional_NPCFlurryChance_rule (run this again)
Kayen: Complete revision of the Death Save and Divine Save effects and related bonuses to be consistent with live.
*Death Save (Death Pact/DI) will no longer fire on death. It should only fire when less 15% HP but not killed.
*Death Save chance is determined soley by charisma of client with the buff. (RULE: DeathSaveCharismaMod)
*Divine Intervention baseline is now correctly set to 8000HP (from 50k) (RULE: DivineInterventionHeal)
*AA Touch of the Divine provides upon failure of first Death Save, a second roll and if successful will
do a portion of the original heal value. (Ie DI=8000HP with ToTD-3(60%) your heal will be 8000*0.6 = 4800HP)
*Implemented functionality for later expansion Death Save effects (Divine Intercession ect)
These can add heal value to the base heal which is limited by level (ie Heal 10,0000+8000 if client less then level 80)
*Divine Save (AA Unfailing Divinity) only fire upon death of client with this effect and is independent of Death Save effect.
*Increased ranks of AA only increase the chance of firing upon death. Heal value does NOT increase with rank.
*Upon firing you will still recieve the Divine Aura like buff, which now also correctly removes all determental effects.
Kayen: Implemented: SE_Purify - Removes determental buffs. Value determines how many buffs are removed.
Kayen: Added RULE MaxCastTimeReduction - Max percent your spell cast time can be reduced by spell haste(is/was 50%).
Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: Internal Metronome/Channeling Focus now implemented with bonus, SE_ChannelChanceSpells.
MISC AA: Concentration now correctly implemented with bonus, SE_ChannelChanceItems.
MISC AA: Pet Affinity now implemented with bonus, SE_GivePetGroupTarget.
MISC AA: Spell Casting Expertise, Mastery of the Past ect will prevent fizzles from spells under certain level, SE_MasteryofPast.
BRD AA: Extended Notes/Sionachie's Crescendo will increase ranage of songs with bonus, SE_SongRange.
BRD AA: Jam Fest now implemented with bonus, SE_CastingLevel2.
CLR AA: Unfailing Divinity now implemented with bonus SE_Unfailing Divinity.
CLR AA: Touch of the Divine now implemented with bonus SE_DivineSave.
DRU AA: Enchanted root/Viscid Root (was implemented completely wrong), now uses bonus SE_RootBreakChance.
*If a root is cast on the target and target has this AA it will decrease the chance for that root to break
from any damage spells. The damage spells can be cast by any one, not just the client with the bonus.
Added RULE: RootBreakFromSpells - Baseline is/was set at 20% chance from nukes.
REQUIRED SQL: utils/sql/svn/2188_required_aa_updates
OPTIONAL SQL: utils/sql/svn/2188_optional_miscspelleffect_rules
Kayen: Update to how chance to hit bonuses are applied.
*Accuracy spell effect will now stack with Hit Chance spell effect. (Accuracy/15 = 1% chance to hit).
*Skill specific Hit Chance effects should stack correctly now.
*Accuracy/Hit Chance effects that DECREASE your chance to hit will now function.
Kayen: Minor update to duel wield, chance bonuses will be correctly applied to baseline dw chance.
Kayen: Implemented Perl MOB Quest Object SetFlurryChance(value) (ie 50 = 50% chance for NPC flurry if special atk "F")
Kayen: Implemented Perl MOB Quest Object GetFlurryChance(value) returns flurry chance.
Kayen: Added rule to adjust server wide flurry chance (Default = 20%) *Perl object will override this.
Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: Dead Aim, Precision of the Hunter, Scout's Efficiency will now calculate from bonus SE_Accuracy.
MISC AA: Combat Agility line will now calculate from bonus SE_AvoidMeleeChance. (Now implemented through SoD)
MISC AA: Combat Stability line will now calculate from bonus SE_CombatStability. (Now implemented through SoD)
MISC AA: Double Riposte, Return Kick now calculated from bonus SE_GiveDoubleRiposte. (New AA's implemented that use this)
MISC AA: Natural Durability, should be working correctly now from bonus SE_MaxHP.
MISC AA: Ambidexterity will now apply properly to increase chance to duel wield from bonus SE_Ambidexterity.
MISC AA: Flurry,Rapid Strikes will now properly be applied from bonus SE_Flurry. (New AA's implemented that use this)
MISC AA: Pet AA's that give flurry chance will now be applied by bonus, SE_PetFlurry.
MAG AA: Elemental Agility was incorrectly giving melee mitigation instead of avoidance, to now use SE_PetAvoidance.
MAG AA: Elemental Durability will now add to pet max hp with bonus, SE_PetMaxHP.
REQUIRED SQL: utils/sql/svn/2185_required_aa_updates
OPTIONAL SQL: utils/sql/svn/2185_optional_NPCFlurryChance_rule
Bad_Captain: Fixed an issue when using bots where you would not get xp when your pet did most of the damage and you are not grouped.
Bad_Captain: Added rule to enable receiving xp from bots not in your group. Defaults to false.
OPTIONAL SQL: utils/sql/svn/2183_optional_bot_xp_rule.sql
Kayen: Updates to critical hit calcuations to be consistent with live.
*Baseline critical rate is determined by DEX stat (255 dex = 2%),this baseline is then modified by item,spell and AA critical chance bonuses.
*Pet critical baseline is determined by the rate from AA effects that give pets the ability to critical. (Can not crit w/o this effect)
Kayen: Slay Undead effect will now be working consistent with live.
*Slay rate is no longer effected by critical hit rate, it uses it's own predetermined rates from the spell effect data.
*Damage modification will now be much closer to that of lives utilizing the spell effects damage modifier.
*Example(AA Slay Undead I - Rate: 225 (2.25%) Damage Mod: 680%)
*Note that that spell effects using Slay Undead (Holyforge) will stack with AA and increase the damage and the rate.
Kayen: Crippling Blow's derived from spell effects will now be calculated consistent with live.
*Cippling blow chance is determined by modifying your critical hit chance.
*Example (Savage Onslaught - 200% chance to crippling blow) If you have a base chance to critical hit of 10%
and you score a critical hit, you will then have a 20% chance to crippling blow.
Kayen: Fixed effect for AA 'War Cry' will now provide group fear immunity for duration.
Kayen: Few new AA's added including shaman Ancestral Aid and Spirit Channeling.
Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: 'Combat Fury', 'Fury of the Ages' will now calculate from bonus SE_CriticalHitChance.
MISC AA: 'Veteran's Wrath' will now calculate from bonus SE_CriticalDmgMod.
MISC AA: All AA that give pet criticals will be calculated from SE_PetCriticalHit.
PAL AA: 'Slay Undead', 'Vanquish Undead' will now calculate from bonus SE_SlayUndead. (Holyforge now works correctly)
REQUIRED SQL: utils/sql/svn/2178_required_aa_updates
Kayen: Fixes to rev2176 - Double Attack, EndlessQuiver, Run Speed.
REQUIRED SQL: utils/sql/svn/2176_required_aa_updates will need to be applied again for Run Speed fix.
Kayen: Complete revision of how double attack chance is calculate to be consistent with live.
Kayen: Berserker 'Frenzy' skill attack will now function as it does on live. Gives a chance for 1-3 attacks using frenzy skill specific damage.
*Note: This will be a considerable nerf to bersekers because it was previously coded to give actual melee rounds using weapon damage.
Kayen: Implemented a few miscellaneous new AA's, mostly from DODH. (These will show in OoW Window in Titanium)
Kayen: Added almost all remaining spell effects into spdat.h (~90% defined).
Kayen: Alternate Advancement Update: In the process of coverting most of the hard coded AA data out of the source and into the 'aa_effects' table
using live data. These effects are then reimplemented using the bonus system in the broadest possible way, most of these effects will
also be useable as regular spell/item effects. This will allow developers in the future to adjust,implement and customize AA effects
without requiring source changes. Beware in doing this, many AA effects that were previously either implemented incorrectly or with values
not consistent with live data will be adjusted to be as accurate as possible.
Following AA effects are now implemented as bonuses: You must update your 'aa_effects' table with 'required_aa_updates.sql' for these to work.
MISC AA: All innate run speed AA's have been converted to use bonus SE_BaseMovementSpeed.
MISC AA: All bind wound related AA have been converted to use bonuses, SE_ImprovedBindWound, SE_MaxBindWound.
MISC AA: Shield Block will now be calculated using bonuses, SE_ShieldBlock.
MISC AA: Sinister Strike will now correctly allow your off hand weapon to recieve a weapon damage bonus, SE_SecondaryDmgInc.
MISC AA: Strengthened Strike/Vicious Smash/Kick Mastery will now accurately to live add skill damage to respective special abilities.
MISC AA: StrikeThrough, Tactical Mastery - will now be calculated from bonus, SE_Strikethrough2.
MISC AA: Ferocity, Knight's Advantage ect - will now be calculated from bonus SE_DoubleAttackChance.
MISC AA: Harmonious Attacks, Bestial Frenzy - will allow double attack chance using bonus SE_GiveDoubleAttack (any class can be given this)
MISC AA: Weapon Affinity, will now use SE_ProcChance.
MISC AA: PunishingBlade, SpeedoftheKnight will now allow an extra 2 Handed attack using bonus, SE_ExtraAttackChance.
BRD AA: Fleet of Foot will now correctly allow bards to run over the speed cap using, SE_IncreaseRunSpeedCap.
WAR AA: Previously non functional 'Stalwart Endurance' and 'Dauntless Preservence' now working using bonus, SE_FrontalStunResist
MNK AA: HightenedAwareness - Implemented using bonus, SE_BlockBehind.
MNK AA: Technique of Master Wu - Will now correclty use a random monk special attack, chance for double/triple attack as SE_DoubleSpecialAttack.
MNK AA: Dragon Punch - Implemented as now using bonus SE_SpecialAttackKBProc, (base1 = 100 [25% proc chance at 100] base2 = skill)
RNG AA: Endless Quiver - Implemented as SE_ConsumeProjectile which gives a percent chance NOT to consume an arrow. (EQ base1 = 100)
RNG AA: Archery Mastery- Implemented as SE_ArcheryDamageModifier which gives a percent increase to archery attacks.
BER AA: Throwing Mastery - Implemented using SE_DamageModifier.
BER AA: Blur of Axes, Vicious Frenzy - will now correctly add skill damage to 'Frenzy' skill attacks.
ROG AA: Triple Backstab, SiezedOpportunity, Chaotic Stab - as bonus, SE_TripleBackstab, SE_FrontalBackstabChance,SE_FrontalBackstabMinDmg.
REQUIRED SQL: utils/sql/svn/2176_required_aa_updates
Optional SQL: utils/sql/svn/2176_optional_FrenzyBonus_rule
Optional SQL: utils/sql/svn/2176_optional_aa_expansion_sof_fix (Allow AA to show proper expansion in SOF+ clients)
Bad_Captain: Fixed bot compile issue introduced in Rev 2171.
Bad_Captain: Integrated Kayen's skill attack code with bots' code, as well as other changes from Rev 2171.
Akkadius: (KLS) Fix for synchronization. There was an issue where certain subroutines were not passing as global
Kayen: Fixed: SE_ImmuneFleeing - Will now disable fleeing if used after mob begins to run, will not effect fleeing from fear.
Kayen: Implemented Perl MOB Quest Object SetDisableMelee(1=Disabled) - Prevents the ability to auto attack.
Kayen: Implemented Perl MOB Quest Object IsMeleeDisabled()
Sorvani: corrected build name for queryserv project in all the various build types.
Kayen: Implemented: SE_HundredHands (incorrectly marked as already implemented) - Increases/Decrease actual weapon delay by % of value.
Kayen: Implemented: Missing modifications from the Archery/Throw damage pathways.
*SkillAmount/SkillDamageTaken mods, ability to Block/Dodge/Parry ranged attacks (Can not riposte), other new focus/mod effects.
Kayen: Fixed: aaThrowingMastery will no longer be applied 2x per throw.
Kayen: Implemented: Damage bonus to skill attacks from specific armor slot AC (ie KICK from BOOT AC) can adjust with rule 'SpecialAttackACBonus'
Kayen: SE_MinDamageModifier should now apply to skill specific effects and to special attacks.
Kayen: Implemented: Complete revision of SE_SkillAttack. (+ required various fixes/adjustments to functions related to special attacks)
*This spell effect performs a physical attack from a specific skill with a set weapon damage value and chance to hit modifier.
*Attacks will now calculate correctly and use their actual respected pathways utilizing all skill specific mods/bonus.
Kayen: Implemented Perl MOB Quest Object DoMeleeSkillAttackDmg(target, weapon_damage, skill, chance_mod, focus, CanRiposte)
Kayen: Implemented Perl MOB Quest Object DoArcheryAttackDmg(target,NULL,NULL, weapon_damage, chance_mod, focus)
Kayen: Implemented Perl MOB Quest Object DoThrowingAttackDmg(target,NULL,NULL, weapon_damage, chance_mod, focus)
Optional SQL: utils/sql/svn/2171_optional_SpecialAttackACBonus_rule
Kayen: Implemented NPC Special Attack 'K'. Immune to Dispell.
Kayen: Fixed SE_RangedProc to be applied after zoning, calculate proc rate correctly, utilize numhits.
Kayen: Fixed a bug that would cause NPC procrates to be incorrectly effected by equipped weapon delay.
Kayen: Modified functions related to obtaining proc chance to no longer recalculate the 'attack rate' every swing.
Instead it will use the already calculated attack timer values. (Not implement for BOTs, but should be no compile problems).
Kayen: Fixed for buff issue with rev2167.
Kayen: Implemented: SE_SpellProcChance, SE_CharmBreakChance, SE_BalanceMana, SE_DotCritDmgIncrease, SE_TripleAttackChance, SE_Taunt
SE_BardSongRange, SE_ACv2, SE_ManaRegen_v2, SE_SpellCriticalFocus, SE_AdditionalHeal2, SE_HealRate2,
SE_CriticalHealOverTime2, SE_CriticalHealChance2, SE_SkillDamageAmount2, SE_LimitSpellSkill, SE_LimitClass
SE_LimitExcludeSkill, SE_ShieldBlock, SE_BlockBehind
Kayen: Implemented: SE_Empathy - A focus limited debuff which causes (spells/skill attacks) cast on target to do +X amount more damage.
*This spell effect is often limited using SE_LimitSpellSkill.
*(Ie. If empathy value is 1000 and limited to evocation, all nukes on target using evoc. will get +1000 damage)
Kayen: Implemented: SE_SpellPowerIncrease - Can be used to apply a worn/buff focus effect with limits for...
1) Additional bard instrument modifiers.
2) Healing/Damage focus to bard songs. (Note: This is only effect that can do this).
3) Increase effectiviess of casted/disc Skill Attacks.
4) General use stackable Healing/Damage focus.
5) Increase the value of melee runes by focus amount.
Kayen: SE_HPtoMana will no longer drain your HP before the spell is finished casting. Effect now handled as a bonus using best value.
Kayen: SE_SpellVulunerability will now correctly calculate and apply the highest value if target has mulitple effects.
Kayen: Fixed an issue where DOTs cast by an NPC on another NPC would not generate hate per tick. Improved how we calc damage from DOTs.
Kayen: SE_BlockSpellEffect was implemented incorrectly and has been revised to SE_NegateSpellEffect.
*It is not meant to block buffs, rather it negates the specific spell bonuses or effects from buffs you already have.
*Currently functional with any effect that is handled under bonuses, and focus effects.
Kayen: Vastly improved how we handle melee/spell runes/partial mitigation runes ect. Should be significantly more efficient.
*Melee/Spell Mitigation runes and ManaAbsorbPercentDamage effects will now use the best mitigation value if multiple effects.
Kayen: Improved the process we use to get spell/item focus effects. An initial check if the client has a specific focusType
is done while checking for item/spell bonuses. GetFocusEffect will no longer check all inventory and buff slots every cast for the
focusType if that focusType doesn't exist on the client. This should improve performance since these checks are done 10-20x per cast/proc.
Secrets: Fixed an issue with saylinks above 255 characters. If you do want to use saylinks above 255 characters, it is reccomended you adjust the varchar field in the saylinks table to a "TEXT" field, which supports up to 65535 characters.
Bad_Captain: Fixed another bug that allowed pets to steal xp when using bots.
Bad_Captain: Bots: Persisting spell & discipline timers.
Bad_Captain: Bots: Bot pets will no longer continuously try to get behind a mob if they are tanking.
Bad_Captain: Bots: Fixed potential duplicate lore item bug when trading with bots.
Bad_Captain: Bots: Fixed bot compile issue from Rev 2160.
Bad_Captain: Bots: Fixed multiple issues with #bot spawn and #bot botgroup load (c0ncrete).
Bad_Captain: Bots: Implemented new #bot defensive command for Warriors and Knights. Includes most of the code required to implement disciplines for bots. Requires disc AI & disc lists.
Required SQL: utils/sql/svn/2164_require_bots_bottimers.sql
Kayen: Fixed issue causing npc special attacks (kick/bash ect) to do extra damage.
Kayen: Fixed major crash bug with rev2159.
cavedude: AFTERDEATH npc_emote will now use emoteid instead of npcid.
Kayen: Implemented: SE_SkillProc, SE_SkillProc2 which can be limited by SE_LimitToSkill - Procs an effect when a specific skill is used
*Functional with all melee skills, special attacks, backstab, taunt, dodge,block,parry,riposte.
Kayen: Added checks to attack process to prevent mob from performing certain actions after being killed (riposte, defensive proc ect).
Kayen: Fixed bug where if client had delay death effect NPC would not be able to attack them if HP < -11, clients without delay death will now bleed again.
Kayen: Implemented: SE_CastingLevel2, SE_ReduceHate
Kayen: Fix to bug where some spell procs and defensive procs were not loading after zoning.
Kayen: Updated spdat.h with many new live spell effects that were previously 'unused'.
Kayen: Implemented: SE_Manaburn: Drains mana for damage/heal at a defined ratio up to a defined maximum amount of mana.
Kayen: Implemented: SE_CastonNumHitFade: Casts a spell when a buff fades due to its numhits being depleted.
Kayen: Implemented: support for all remaining live spell effects that use 'numhits'.
Significantly optimized how all spell effects that utilize 'numhits' are handled throughout the source.
Kayen: Fixed: SE_DefensiveProc - Proc rate will now be calculated similiar to live. *Spell specific rate modifcations will now work.
Kayen: Added Rule: Combat:AvgDefProcsPerMinute (Default = 2.0) Determine defensive procs per minute.
Kayen: Added Rule: Combat:DefProcPerMinAgiContrib (Default = 0.075) Determines how much agility effects proc rate.
Optional SQL: utils/sql/svn/2159_optional_defensiveproc_rules
Kayen: Implemented Perl NPC Quest Object GetSlowMitigation()
Kayen: Implemented Perl NPC Quest Object GetAttackSpeed()
Kayen: Implemented Perl NPC Quest Object GetAccuracyRating()
Kayen: Fixed: Slow Mitigation (was not loading from dbase),optimized its application in source and added lives slow mitigation messages.
Slow mitigation Messages: 'slighty' 0.00 - 0.25 'partial' 0.25-0.75 'mostly' 0.75-1
Kayen: Implemented: SE_AttackSpeed4: 'Inhibit Melee' effect works different then regular haste/slow effect
1) If target is hasted (or no haste) Inhibit Melee will decrease attack speed by the Inhibit Melee value.
2) If target is slowed Inhibit Melee is applied as a percent change to remaining attack speed after regular slow.
ie. You cast 75% Slow (25 attack speed remains) then apply 25% Inhibit melee (18.75 attack speed remains): Final slow 81.75%
Kayen: Added Rule: Spells:CharismaEffectiveness (Default = 10) Deterimes how much resist modification charisma applies to charm/pacify checks (10 CHA = -1 resist mod).
Kayen: Added Rule: Spells:CharmBreakCheckChance (Default = 25) Determines percent chance for a charm break check to occur each buff tick.
Kayen: Reworked code to that handles charm breaks/lull to be accurate to live and more functional in general.
1) Each charm buff tick there is a default 25% [Rule.CharmBreakCheckChance] chance to trigger a spell resistance check.
2) Spell resistance check then adds an additional bonus resist modification based casters Charisma at a default
ratio of 10 CHA per -1 resist mod [Rule.CharismaEffectiveness]
3) If resisted (ie Charm is to break) Total Domination AA is then applied to give another chance to maintain the charm.
Kayen: Implemented: SE_AdditionalHeal: Focus Effect that adds an additional heal amount to the casted spell.
Kayen: Implemented: SE_CastOnCure: Casts a spell on cured target.
Kayen: Implemented: SE_CastOnCurer: Casts a spell on the curer of the target.
Kayen: Modified: Mob::TryFadeEffect to avoid interaction wtih Twinproc effect.
cavedude: (Uleat) Multiple changes and additions to doors, per the forums.
Optional SQL: utils/sql/svn/2156_optional_charm_break_rule.sql
Trevius: Reviewed and Committed the below by Kayen:
Kayen: Added Rule: AvgSpellProcsPerMinute (Default = 6.0) Determines proc rate of spells applied from sympathetic focus effect
Kayen: Added Rule: ResistFalloff (Default = 67) Max that level that will adjust our resist chance based on level modifiers
Kayen: Adjusted Mob::TrySpellOnKill()
- Will now check AA, Items and Buffs for SE_SpellOnKill (Same logic problem as TrySpellOnDeath)
- Level of the npc you killed and the spell_id used to kill it now both passed into the function.
- SE_TrySpellOnKill will now correctly check if there is a min level of the npc required for the spell effect to work (max value in spelldat)
Kayen: Implemented: SE_SpellOnKill2: For deterimental spells where landing the kill gives x% chance to give a buff.
Kayen: Sympathetic proc now calculates chance to proc a sympathetic spell accurately like live using Procs per minute.
Kayen: Adjusted Mob::TrySpellOnDeath() - Now checks all avialable effects and trys to use each one.
Kayen: Fixed SE_TargetsTarget - Target's Target must be in CombatRange to recieve the effect (Verified from live)
Kayen: Fixed TryApplyEffect - No longer incorrectly lands on the target's target's taget. (Example of spells that use this are Shaman Mending Couterbias)
Kayen: Adjusted Twincast to now select the buff with the highest chance to Twincast and use that, it will also stack with item focus and AA (when implemented).
Kayen: Removed the mana cost portion from twin casting a spell.
Kayen: Fix for SE_SympatheticProc - The focus effect now checks all items/buffs for the focus effect and adds all returned proc spellid's to a list from which one is randomly selected.
Kayen: Implemented SE_FF_Damage_Amount - Focus/Buff that adds damage to the casted spell. Usually found on spell group limited augments and stackable with SE_SpellDamage.
Kayen: Adjusted SE_SpellDamage to be handled properly as a focus effect.
Kayen: Extra damage from Focuses is now calculated correctly for DoTs
Kayen: Implemented Perl NPC Quest Object SetSpellFocusDMG(focus amount) - Focus all npc direct/dot damage spells by value
Kayen: Implemented Perl NPC Quest Object SetSpellFocusHeal(focus amount) - Focus all npc healing spells by value
Kayen: Implemented Perl Mob Quest Object ModSkillDmgTaken(skill_num,value) - Set a weakness/bonus of weapon attacks to a Mob
- Example: mob can be set to take 5% more damage from blunt weapons - ModSkillDmgTaken(0,5)
- Stacks with spell/item bonuses - Setting skill to -1 will effect all skills
Kayen: Implemented Perl Mob Quest Object GetModSkillDmgTaken(skill_num) - Returns only the quest skill mod for specified skill
Kayen: Implemented Perl Mob Quest Object GetSkillDmgTaken(skill_num) - Returns the total skill damage taken mod for the specified skill (item+spell+quest_mod value)
Kayen: Implemented Perl Mob Quest Object SetAllowBeneficial(false) - Allow a specific Mob to be healed/buffed by a client
Kayen: Implemented Perl Mob Quest Object GetAllowBeneficial() - Returns SetAllowBeneficial flag
Kayen: Implemented Perl Mob Quest Object IsBeneficialAllowed(target) - Returns if target can have beneficial spells cast on them
Kayen: Implemented Perl Mob Quest Object ModVulnerability(resist type, value) - Set Spell Vulnerability of mob by resist type(0-9) ALL = -1
- Example: mob can be set to take 5% more damage from Fire spells (2,5);
- Applied effect will stack with spell buff effects.
- If a resist type SPECIFIC and a resist type ALL mod are applied to the same MOB, the SPECIFIC value will be used if spell cast on MOB is the same resist type.
Kayen: Implemented Perl Mob Quest Object GetModVulnerability(resist type) - Return the quest applied value for each resist (ALL = -1)
Optional SQL: utils/sql/svn/2154_optional_rule_spell_procs_resists_falloff.sql
Secrets: (mackal) Spells now display to all clients and can be filtered as such.
Secrets: Damage Shields now go to the proper filter, and do not show the non-melee damage to everyone.
Akkadius: Added the ability to run a dual-stack with the existing that will run locally in quests/zone/ or quests/templates/
- This allows the to be ran globally without interference of a local script (quests/zone/ OR quests/templates/
- '' simply needs to be added to quests/templates/ to be parsed otherwise it will not be loaded
- '' parses after the local
- '' parses all of the same events a regular does and will work with any new subroutines added to it in the future
- Thanks Derision for being a pair of eyes on a part of the diff for this
cavedude: Exported quest::addldonwin(wins, theme); and quest::addldonloss(losses, theme);
Bad_Captain: Fixed bug that allowed pets to steal xp when using bots.
Bad_Captain: Bots: Fixed bug that allowed bots to sometimes cast HoT buffs during combat instead of HoT heals.
Bad_Captain: Bots: Tweaked bard casting chances to restore twisting of multiple songs.
Bad_Captain: Bots: Implemented Shaman cannibalization during combat.
cavedude: Corrected the text merchants give when they refuse to sell to you.
cavedude: The graveyard timer will now resume when a dynamic GY zone boots, instead of resetting.
cavedude: When a corpse is moved to the graveyard, it will no longer attempt to use an instanced version of the zone.
cavedude: Added the ability to load NPC emotes from the DB. Wiki entry for this will be at when I write it up.
REQUIRED SQL: utils/sql/svn/2142_emotes.sql
Akkadius: Added the ability to load a script underneath quests/templates
Derision: Fixed reference to freed memory in Mob::BardPulse, plus a couple of minor memory leaks in Load/SavePetInfo
Derision: Corpses no longer appear in Extended Target Auto slots.
Derision: Fixed some minor bugs with Extended Targeting (if the tank/assist/puller had a target before you allocated an XT slot to that function, you would not see the target unti they changed target).
Derision: UF+: Support for the Extended Target window (aside from the Raid target types).
Derision: Fixed Extended Target bugs where CurrentTargetPC targets were incorrectly cleared when leaving a group, and a CurrentTargetPC wasn't updating when they zoned in.
REQUIRED SQL: utils/sql/svn/2136_extended_targets.sql
Note: Default number of Extended Targets is 5. This is stored as a column in character_
GMs can increase a players slots by targetting them and typing #xtargets <n> where n is between 5 and 20.
Trevius: VoA - The AA Window now populated AAs. AA hotkeys can be created, but purchasing still needs work.
sorvani: Bard AE DoTs should now be affected by mods correctly.
cavedude: quest::buryplayercorpse will now despawn corpses in zones other than the client's current location, preventing dupes.
cavedude: Added quest::summonallplayercorpses (same syntax as quest::summonburriedplayercorpse) which will depop and summon all of the player's corpses, buried or not.
cavedude: Fixed a bug that caused some summoned corpses to use a static 5 minute decay timer.
cavedude: Changed player_corpses_backup schema to match player_corpses. If the rule is enabled, corpse backups will now be created for players that are high enough level to drop items to their corpses.
cavedude: Added a rule to determine whether or not to remove player corpse backups older than 2 weeks.
cavedude: #corpse now has options to depop a single player corpse, or every corpse belonging to a single player.
cavedude: You can now specify if a faction hit is temporary (is removed when player camps/zones) or whether or not to display the faction hit to the player in-game.
If temp in npc_faction_entries is set to:
0 (Default): Faction is permanent, player recieves a message. (Same functionality as we had previously.)
1: Faction is temporary, player does not recieve a message.
2: Faction is temporary, player recieves a message.
3: Faction is permanent, but player does not recieve a message.
cavedude: Added an optional argument to quest::faction to utilize the functionality and values listed above.
cavedude: Added minlevel and maxlevel to lootdrop_entries. The player credited with the kill (most hate) has their level checked against both columns, and if they are lower than the specified minlevel, or higer than the max, that item entry if it exists is removed from the NPC before it becomes a corpse.
cavedude: You can now specify if a NPC automatically repops (rerolls against their spawngroup) or depops after the reverse spawn timer is up.
If despawn in spawngroup is set to:
0 (Default): Do not depop or repop, no depop timer is set. (Same functionality as we had previously.)
1: Despawn the current NPC and repop the spawngroup after the associated spawn2 timer is up (including variance.)
2. Repop, after the value specified in despawn_timer is up (also uses spawn2 variance.)
3: Depop the NPC after the spawn2 timer is up + variance.
4. Depop the NPC after despawn_timer is up + variance.
Example: Setting despawn to 1 will despawn the NPC and immediately respawn the spawngroup after it has been up for the length of its spawn2 timer + variance.
Example: Setting despawn to 4 and despawn_timer to 3600 will depop the NPC after it has been up for an hour + variance. It then will respawn after its normal respawn timer is up.
cavedude: Fixed a crash in groups.cpp.
Required SQL: utils/sql/svn/2133_required_faction_loot_despawn.sql (Backup your data first!)
Bad_Captain: Bots: Added Bot Group Messages and #bot groupmessages command to turn them on or off per bot or for all bots.
Bad_Captain: Bots: Fixed bugs that allowed more bots to be spawned than specified in the Bots:SpawnBotCount rule, fixed bug that allowed more bots to be created than specified in the Bots:CreateBotCount rule, and fixed slow buffing bug.
Bad_Captain: Bots: Various spell ai tweaks (including HoT spells should no longer block other heals from being cast in certain situations and hybrids should use less mana by healing less often).
Bad_Captain: Bots: Removed client xp gain from bots outside the player's group.
Trevius: Fixed inspect for SoF+ clients, which was broken by Rev2128.
Derision: Added support for the 'Looking For Guild' window.
Required SQL: utils/sql/svn/2129_required_lfguild.sql
To use this feature, you must be running the querserv process. If you are not running queryserv, LFGuild will not work, but your server will
run normally in all other respects.
Underfoot users can bring up the LFGuild Window by pressing the EQ buton and selecting Players/Looking For Guild.
I think all other clients can only access the feature by clicking on the notice boards in the Guild Lobby. To allow them to do this, you must
add the following to the SUB EVENT_CLICKDOOR of your guildlobby/
if(($doorid >= 5) && ($doorid <= 38))
Trevius: VoA - Corrected a few alignment issues with the item struct and it should be fully aligned now.
Trevius: VoA - Identified a few new item fields including: Prestige, SkillModMax, SkillModExtra, and Power
Trevius: VoA - #summonitem and functions that summon items such as quests are now fixed.
Trevius: VoA - Identified multiple Membership fields, which corrects multiple issues such as limited inventory slots, assigned AA limit, level limit, shared bank, and more.
Trevius: Added packet length verification to all packet handling that was missing it.
Secrets: VoA - Character Creation is now functional. Fixed creation request struct (opcodes were right), and membership is now sent (characters can now be created!)
Secrets: VoA - Membership levels are now sent to the client via the SendMembership opcode. Hardcoded to be like older clients for now. Might need bag slots looked into; upon applying this, bag slots & items went missing.
Secrets: Updated #race command to support races up to 714 (as per the 4/12/2012 client)
Trevius: VoA - Items now display food/drink correctly and consuming them is now functional.
Trevius: VoA - Items no longer display UKNOWN SKILL for skill mods on some items that don't have skill mods set.
Trevius: VoA - Items no longer display Prestige on them.
Trevius: VoA - Buying from merchants is now functional, though selling to merchants is not yet.
Trevius: VoA - Disabled the Guild Member List temporarily to prevent guilded characters from crashing.
Trevius: VoA - Casting Spells and Click Effects on items is now functional.
Trevius: VoA - Corrected the Player Profile which should now be perfectly aligned.
Trevius: VoA - More Opcode and Struct corrections/adjustments.
Trevius: VoA - Identified/corrected some more opcodes and packet structures.
Trevius: VoA - Merchants now display items for sale, but purchasing is not yet functional.
Trevius: VoA - Added new packet for setting the max number of characters allowed to be created on an account (10 for now).
Trevius: VoA - Identified/corrected some more opcodes.
Trevius: VoA - Items can now be moved around through all slots.
Trevius: VoA - Updated structs that use inventory slots to use the new format. Still need to verify some of the struct changes.
Trevius: Initial addition of the VoA (March 21 2012) client. To enable, you must uncomment the VoA lines in /common/patches.
Trevius: Many of the core systems are basically functional, but this client is still in an early development phase and not recommended for normal players yet.
Trevius: Non-Player Race spawns will cause the client to crash, so it is recommended to test it in an empty zone.
Trevius: Also, items in the bank will cause it to crash, but normal inventory seems to work fine so far.
Trevius: You cannot create a character on this client yet, so you must use an existing character.
Derision: VOA: Fixed zoning. Adjusted spawn encoding.
JJ: Removed additional library and include directories from windows projects as they were not standard locations for all.
Sorvani: Resurrections effects will again be applied to characters who are in a zone where combat is not allowed (GL, PoK etc) when they receive a rez.
Bad_Captain: Bots: A few fixed for #bot stance command
Bad_Captain: Bots: Implemented bot stances. See forum post.
Required SQL:
Bad_Captain: Fixed potential crash in group roles code when a group member is removed.
Sorvani: Added check for ST_AEBard song before sending spell SPELL_NO_HOLD
Bad_Captain: Implemented Group Roles via UI (SoD+)- Set group roles, maintains across zones, save/load grouprole sets (load doesn't appear to work on UF- may be a client bug as client doesn't send request to the server for saved group roles as SoD client does)
Bad_Captain: Fixed FindType to allow for spell effects > 127. Observed by bots trying to cure corruption (effectid 369) when client has a mount (summonhorse effectid 113: 369-128-128=113).
Bad_Captain: Bots- fixed bot summoning of client corpses, fixed ability to spawn more bots than allowed via server rule (#bot botgroup load was not checking for SpawnBotCount rule), fixed bot issue with receiving buff with Group with Pets target type.
Required SQL:
Secrets: Fixed two more hanging issues introduced regardless of the item discovery feature was on or off.
Secrets: Fixed a hanging issue introduced regardless of the item discovery feature was on or off. Keep in mind the item discovery feature still takes a reasonable amount of time to work, and this will be fixed in a future update.
Secrets: Added OP_IncreaseStats for use with the #incstats command (and other things, in due time!)
Secrets: Added QueryServ to the VS2008 project in preparation of moving eventlog, hackers, discovered items, and other non-essential database tasks over to it.
Trevius: Added accout_status field to the discovered_items table to make it easier to remove accidental GM item discovery from the table.
Required SQL:
Trevius: The version field in the zone_points table can now be set to -1 if you want all versions of the zone to inherit the same zone points.
Trevius: Added extra option to the "#npcspawn create" command that will try to create the npc_type ID within the standard range for the current zone (zone_id * 1000). Usage: "#npcspawn create 1"