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
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
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
Renamed struct EQEmu::ItemBase to EQEmu::ItemData and class ItemInst to EQEmu::ItemInstance
Added class EQEmu::InventorySlot. Re-attached pertinent inventory token references to EQDictionary
Uleat Changed filenames to facilitate future inventory naming conventions
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)
eqemu_server.pl is now a general EQEmu Server management utility framework that can be used to extend to many purposes. It's main purpose is to simplify server management
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)
Now checks for Internet connection before performing web requests
Regular schema updates now happen automatically, if new binaries present updated
database schema changes, script will backup first, auto update database, and continue
Regular bots database schema changes now happen automatically similarily to the above
Database checks can also be ran manually via the script menu
Arguments passed to eqemu_server.pl can execute the same name-based operations that
are present in the interactive menu
Example: "perl eqemu_server.pl opcodes" will download opcodes
Example: "perl eqemu_server.pl backup_player_tables" will backup and export player tables
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
Linux now has the following utility scripts for download, available via menu 'utility_scripts'
and via Linux default install:
All script messages have been prefixed with a bracket action Ex: [Update] [Database] [Info] to be more consistent with our log conventions
Running 'new_server' from the main menu or 'perl eqemu_server.pl 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 script
noudess Task system experience based on a % of a level did not take into account the hell levels rule. Now it does.
Uleat Changed 'Bind Wound' behavior to match the best references that I could find for post-2004 era.
To use this system simply set World:EnableIPExemptions to true and create an entry in the ip_exemptions table.
Example: exemption_ip of IP 192.168.1.4 in ip_exemptions with exemption_amount of 1 will allow only 1 account to login from IP 192.168.1.4.
Note: If there is no exemption, the amount of accounts logged in from a singular IP will default to World:MaxClientsPerIP
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 didn't think this will be much of a performance problem. Once they path and depop, no more cpu usage.
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
Serves to eliminate God-like characters on custom servers with high item stats
Character:EnableAvoidanceCap (default is false)
Character:AvoidanceCap (default is 750, beyond 1,000 seems to make characters dodge all attacks)
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
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
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 'convert_maps_to_mmfs.pl' 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 encounter 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)
THERE MAYBE BUGS
there shouldn't though, most of the hackery was from badly named fields causing confusion
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
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
Noudess Changes personal faction earned min/max to -2000/2000 from -3000/1200
Uleat Reworked EQEmuDictionary to use class LookupEntry
Uleat Implemented EQEmu::TintProfile
Uleat Implemented EQEmu::TextureProfile
Uleat Converted enumeration MaterialSlots to EQEmu::textures::TextureSlot
Uleat Merged client_version and inventory_version into emu_versions files
Uleat Renamed EQEmu::Item_Struct to EQEmu::ItemBase (and appropriate files) to coincide with new inventory naming conventions
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
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
Uleat Changed client 'constants' files to 'limits'
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
Uleat Re-coded Titanium client translator 'SerializeItem()' to use coded property assignments over file enumerated ones
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)
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
Uleat Reworked EQDictionary into namespace EQEmu
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
Uleat Rework of eq_dictionary to facilitate inventory work
Uleat Moved database query code out of bot.cpp and into the new BotDatabase class
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.
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 eqemu_update.pl 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
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
Uleat Fix for LDoN treasure 'npcs' not leaving a corpse (please report any issues..)
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.)
Hateborne Added IgnoreSpellDmgLvlRestriction rule (boolean) to ignore the 5 level spread when checking to add SpellDmg
Hateborne Added FlatItemExtraSpellAmt rule (boolean) to allow SpellDmg on items to be added as raw damage versus scaled.
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.
WARNING: YOU MUST RE-RUN SHARED_MEMORY.EXE BEFORE STARTING SERVER OR ITEM LOSS WILL OCCUR!
Note: Cmake must be re-run to include/exclude the required files
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'
Athrogate Adding ClearCompassMark() to Lua.
Lua didn't have ClearCompassMark(). Perl already had this.
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!)