Also included is an additive lagged fibonacci generator that should is
very similar to EQ's. Also added BIASED_INT_DIST in case someone wants
to use "bad" int distribution to more closely match EQ as well.
An option to set a custom engine (just in case people would like to play
with other std engines) is available.
There is also support for GCC's SIMD accelerated extension to std random
engines.
All these options are hidden behind advanced options in CMake since
they're rather advanced knobs.
* Implemented SPA Duration Pct
Implemented new spell effects
SE_Duration_HP_Pct 524
SE_Duration_Mana_Pct 525
SE_Duration_Endurance_Pct 526
Consumes 'base1' % of your maximum health/mana/endurance every 6 seconds. 'max' is maximum amount that can be consumed per tic.
Additional Functionality
Can be used as a heal/gain % by setting the base1 value to a positive.
* Implemented SPA Instant Mana/End pct
Fixes for SPA 524-526
Implemented
SE_Instant_Mana_Pct 522
SE_Instant_Endurance_Pct 523
Extracts 'base1' percent of your maximum mana/endurance, or 'max', whichever is lower.
* Implemented: SPA 521 EndAbsorbPctDmg
Implemented
SE_Endurance_Absorb_Pct_Damage 521
Absorb Damage using Endurance: base1 % (base2 End per 1 HP)
Note: Both base1 and base2 need to be divided by 100 for actually value
* Implemented SE_HealthTransfer 509
Implemented
SE_Health_Transfer 509
'life burn'
Consume base2 % of Hit Points to Damage for base % of Hit Points
Can be used for heal
Act of Valor
* Implemented SPA 515,516,518,496
Implemented
SE_AC_Avoidance_Max_Percent 515
SE_AC_Mitigation_Max_Percent 516
SE_Attack_Accuracy_Max_Percent 518
Above are stackable defense and offensive mods
SE_Critical_Melee_Damage_Mod_Max 496 - This is a non stackable melee critical modifier
* Implemented SPA 503 , 505
SE_Melee_Damage_Position_Mod 503
define SE_Damage_Taken_Position_Mod 505
SPA 503 increase/decreases melee damage by percent base1 based on your position base2 0=back 1=front
SPA 504 increase/decreases melee damage taken by percent base1 based on your position base2 0=back 1=front
* Implemented 467,468
Implemented
SE_DS_Mitigation_Amount 467
SE_DS_Mitigation_Percentage 468
Reduce incoming DS by amt or percentage. base1 is value, if a reduction is desired it should be set to negative for both.
* Fixes
Formula fixes
* Update spdat.h
Added spa descriptions.
* Fixes for PR
removed debug shouts
fixed description issue
* Add defines (commented) for further known SPAs
Added as comments since that appears what we were doing. This just gets
us caught up to dev post.
* More SPAs
Move the newer stuff added that was recently to the same place all of
our previous spell IDs were defined.
Either of these solutions were good, but I went with defines since it
was less changes
I also added a bunch of stuff the client has hardcoded behavior for, but
not currently implemented by us.
The removed stuff from the command_castspell were reused on live, so I
figured it was best to remove them from the restrictions since they are
no longer test spells
* Revert some "fixes", clean some code up
* Use RaceGender default height data for when calculating size during SendIllusionPacket which should alleviate some inconsistencies for new clients zoning in and seeing the entity
* Some code cleanup
* [Quest API] Add optional clean name parameter to getnpcnamebyid in Perl/Lua.
- Allows Server Operators to grab the clean name without having to clean it up in their Perl/Lua.
* Convert from a parameter to a method.
* Add safer method.
* Convert to proper type.
* [Pets] Unhardcode Beastlord pet values.
- Create a Beastlord pets table to allow server operators to easily customize Beastlord pets without a source modification.
* Add table to schema.
* [Bug Fix] NPC not breaking charm correctly
#947 and #905
fixes the issue with charm breaking and spells being cast after to cause a faction war. this removes dots to stop faction wars also.
dot removal part needs better testing to ensure it works as intended
* Remove this-> since it is implied
* Update spell_effects.cpp
* clear all this->
* pMob to mob
* Added rule Spells:PreventFactionWarOnCharmBreak
Co-authored-by: Chris Miles <akkadius1@gmail.com>
* strict spawn_events now take into account EQ minute.
This should fixed the eqtime spawn condition from falling behind.
* change a log to logspawns and add a comment in ExecEvent function.
* moved the comment to the note paramenter in the rule for last commit.
* [Bots] Remove hardcoded race-class combinations from bots.
- Allows server operators to directly influence via a database table the classes a specific bot race can be.
- Previously this was hardcoded and required a source modification to do.
- Allowed races, classes, and genders have been removed due to redundancy at this point.
* Remove const cast and modify saylink definition.
This moves members from expeditions so other systems can use them
Replace expedition_members table with dynamic_zone_members
Move 'EnableInDynamicZoneStatus' rule to DynamicZone namespace
Modify #dz list to show dz members (not instance players) and type name
Move various queries to repository methods
Remove the overloads that don't make sense (bots probably doesn't make
sense either, but too lazy)
Fix the formulas
Removed the Spells:MaxCastTimeReduction rule since this is HARDCODED in
the client so it doesn't really make sense to have it as a customization
point. If you want to hack the client, change the hardcode as well I
guess.
* [Bug Fix] EntityList::AESpell fix for Pacify / Mez
this fixes AE pacify / Mez spells only landing on 4 when it shouldn't have a cap
* Update effects.cpp
added constants
* Update effects.cpp
opmization thanks to @mackal
* Update effects.cpp
this fixes the unlimited issue
* added Spells:AOEMaxTargets to rules
incase a server doesn't want there to be a absolute unlimited AOE targeting for spells
* Update ruletypes.h
This starts some changes that move storage of things from expeditions to
dynamic zone class so other systems can possibly use them. This will also
make it easier to move window packet creation methods to DynamicZone.
For now these will remain on the expeditions table in the database. This
can be re-evaluated once other components are moved and seeing how other
systems may want to handle their player requirements.
World now caches and tracks member statuses so it can send them to zones
that request them on startup. Prior to this the cle would be searched in
world for every zone startup caching request, now it's only searched once
when a new expedition is created.
Bulk loading statuses removed since it would only be needed on world
startup now and likely have no clients in the client list anyway.
This also lets world choose non-linkdead members on expedition leader
changes and better detect when a leader change needs to occur
* Rename dz member id field
The name of the struct is enough to make this implicit
* Rename dz member enum and struct
Rename ExpeditionMember to DynamicZoneMember
Rename ExpeditionMemberStatus to DynamicZoneMemberStatus
* Rename dz window packet structs
This makes it more clear the window may be used by any dynamic zone
system not just expeditions (live missions fill the window when
player doesn't have an active expedition).
* Rename dz window packet fields
* Fix calls to GetSafePoints to not pass null_ptr as zonename
* Fix GetSafePoints to check and deal will nullptr being sent as short_zone_name
* Remove unintentinal formatting change
* Fix some typos/cut-n-paste errors I assume
Co-authored-by: Noudess <noudess@gmail.com>
* Add character-specific zone-based experience modifiers.
This will allow server operators to give players individual experience modifiers (regular and AA).
Zone ID 0 will server as a global modifier for players, if no rows are found the modifier defaults to 1.0 so experience is neither increased nor decreased.
Setting a zone-specific modifier will override the zone ID 0 global modifier.
Requires a SQL update: sql/git/required/2021_04_11_character_exp_modifiers.sql
- Add quest::getaaexpmodifierbycharid(character_id, zone_id) to Perl.
- Add eq.get_aa_exp_modifier_by_char_id(character_id, zone_id) to Lua.
- Add quest::getexpmodifierbycharid(character_id, zone_id) to Perl.
- Add eq.get_exp_modifier_by_char_id(character_id, zone_id) to Lua.
- Add quest::setaaexpmodifierbycharid(character_id, zone_id, aa_modifier) to Perl.
- Add eq.set_aa_exp_modifier_by_char_id(character_id, zone_id, aa_modifier) to Lua.
- Add quest::setexpmodifierbycharid(character_id, zone_id, exp_modifier) to Perl.
- Add eq.set_exp_modifier_by_char_id(character_id, zone_id, exp_modifier) to Lua.
- Add $client->GetAAEXPModifier(character_id, zone_id) to Perl.
- Add client:GetAAEXPModifier(character_id, zone_id) to Lua.
- Add $client->GetEXPModifier(character_id, zone_id) to Perl.
- Add client:GetEXPModifier(character_id, zone_id) to Lua.
- Add $client->SetAAEXPModifier(zone_id, aa_modifier) to Perl.
- Add client:SetAAEXPModifier(zone_id, aa_modifier) to Lua.
- Add $client->SetEXPModifier(zone_id, exp_modifier) to Perl.
- Add client:SetEXPModifier(zone_id, exp_modifier) to Lua.
* Removed unneeded [].
* Fix variable name,
* Fix variable name.
* Fix version.h.
* Rename 2021_04_11_character_exp_modifiers.sql to 2021_04_23_character_exp_modifiers.sql
* Update db_update_manifest.txt
* Switch the 2 split calls to SplitString
* Nuke duplicate split in favor of SplitString #1263
* Add a test for SplitString
* Optimize SplitString
Benchmarking:
--------------------------------------------------------------
Benchmark Time CPU Iterations
--------------------------------------------------------------
bench_oldsplit 5201 ns 5201 ns 129500
bench_split 1269 ns 1269 ns 548906
This is splitting a VERY long SpecialAbilities string. This is ~75%
speed up.
* For as long as I can remember people have had issues with zoning in, facing the wrong way, and walking through a zone line.
With this we will be able to set zone's safe heading as well as preserve heading on summon (NPC or GM) and teleports between zones.
This affects several pre-existing quest methods and extends their parameters to allow for the addition of heading.
The following functions have had heading added.
Lua
- client:SetBindPoint()
- client:SetStartZone()
Perl
- $client->SetBindPoint()
- $client->SetStartZone()
- quest::rebind()
SetStartZone parameter list was fixed also.
This converts some pre-existing methods from glm::vec3() to glm::vec4() and has an overload where necessary to use a glm::vec3() method versus glm::vec4() method.
This shouldn't affect any pre-existing servers and will allow PEQ and others to document safe headings for zones properly.
* Removed possible memory leaks.
* Fix SQL.
* Fix client message.
* Fix debug log.
* Fix log message.
* Fix call in rebind overload.
* Fix floats.
* Add default to column.
* Add rule 'GM:MinStatusToBypassLockedServer'
Default Status: 100
Description: Players >= this status can log in to the server even when it is locked
* Add rule 'GM:MinStatusToBypassLockedServer'
Default Status: 100
Description: Players >= this status can log in to the server even when it is locked
Add common expedition base class
Use repository for zone and world expedition caching
World now stores members and leader as Member objects instead of ids
This improves readability of the caching methods and lets world cache
expedition dzs and members like zone. World also now caches expeditions
as unique_ptr which will be necessary for future dz callback lambdas
that capture 'this' so addresses don't change on cache vector resizes.
This creates an abstract class in common so zone and world can share
most of the implementation. World now has access to the same dz data and
api as zone.
Rename CharacterChange to AddRemoveCharacter for clarity
Rename GetRemainingDuration to GetDurationRemaining for consistency
Move dynamic zone queries to custom repository methods
Move early empty shutdown and process rate rules to DynamicZone scope
This decouples the expired status check from expeditions into an
internal dz method that can be called by its owning system
Use internal dz messages to process duration and location changes
Add world DynamicZone class (later this will inherit from a base)
Add FindDynamicZoneByID to get dz from zone and world system caches
Move ExpeditionLockoutTimer to common
This simplifies expedition request conflict checks and uses repository
for the queries instead of processing the query result directly.