Commit graph

54 commits

Author SHA1 Message Date
Emagi
60928d2e0c Fix #448 - Scroll/Recipe scribing fixes
* Spells now have level and class checks
  * Recipes now have class checks (already had level checks)
  * Recipes now fallback to the item recipebook info to populate players recipes from a recipe book if the recipe book is not properly configured by book name
Fix #396 - Implemented subspawn tables so we can update specific types of spawns, in this case collectors when we remove the red book
Fix #205 - ground spawns now can have random heading assigned or forced heading
alter table spawn_ground add column randomize_heading tinyint(3) unsigned default 1;
randomize_heading = 0 uses base heading in the spawn location
randomize_heading = 1 means all spawns will have a random heading 0-360 degrees
Fix #118 - Knowledge sorting / spell book updates now correctly work.
  * Down/Across patterns now supported (zig-zag was default)
Fixed a crash when a spawn spell is interrupted and then the spawn dies to a melee attack could cause memory corruption removing spell timer pointers
Startup opcode warnings are now grouped by versioning to allow easier troubleshooting, DoF uses 546 and AoM 60085, thus most opcodes warnings are not relevant to supported cases
Fixed a regex crash on /findspawn
2022-08-13 10:40:04 -04:00
Emagi
1068849ef8 Fix #451 - basic pvp mitigation / mitigation integration
Fix #458 - fixed memory leaks in lua quest step location/zone loc functions and also languages memory cleanup

New Rules:
       RULE_INIT(R_PVP, PVPMitigationModByLevel, "25"); // gives a bonus to mitigation for PVP combat to offset the percentage level * mod (default 25)
       RULE_INIT(R_Combat, EffectiveMitigationCapLevel, "80"); // level multiplier for max effective cap, level * 80 (default)
       RULE_INIT(R_Combat, CalculatedMitigationCapLevel, "100"); // The cap to calculate your mitigation from is [level*100].
       RULE_INIT(R_Combat, MitigationLevelEffectivenessMax, "1.5"); // ratio victim level / attacker level for max effectiveness, when victim is higher level cap can reach 1.5
       RULE_INIT(R_Combat, MitigationLevelEffectivenessMin, ".5"); // ratio victim level / attacker level for min effectiveness
       RULE_INIT(R_Combat, MaxMitigationAllowed, ".75"); // percentage max mitigation allowed, eg. 75% of damage can be mitigated max in PVE
       RULE_INIT(R_Combat, MaxMitigationAllowedPVP, ".75"); // percentage max mitigation allowed, eg. 75% of damage can be mitigated max in PVP

InfoStruct now has two unsigned int16 values that offer mitigation percentage values in integer formats, eg 155 = 15.5% mitigation
mitigation_pve
mitigation_pvp

Updated formulas to use effective_level (mentor/actual level) vs just player level
* Dodge
* Block

Bug fix for crash in non existent quest being called for /modify quest advance
Bug fix for improperly trying to stack items that are not stackable (count of 0 items, stack count of 1)
Bug fix for inventory updates, typically with overflow slots and after deleting items from inventory (packet count needs to be updated with current size in PlayerItemList::serialize)

Collections/Rewards:
- Display is now one reward at a time
- Display of award now only allows the reward cash, status to be provided once
- Database persistence of unaccepted rewards cross-zone with two new tables
- Selectable collections now checks if either field provided in /accept_reward is a potential item id (this is likely due to a client versioning)
2022-08-06 18:22:29 -04:00
Emagi
0e00165195 - Fix #453 PlayFlavor re-design
PlayFlavorID(NPC, type, id, index, Player, language)
Set Player to 'nil' to send to all clients, specifying a Player will make it send ONLY to that player
New command /reload voiceovers added
- versioning updated to 0.9.4-aquarii
- Fix #454 Support for SendShowBook to have language, items field 'book_language' added
- Some debug log cleanup
2022-07-24 22:19:45 -04:00
Devn00b
364f9ff210 Added ability to search broker for tinkered items. SQL update needed. 2022-07-20 18:12:03 -07:00
Emagi
7e5562da32 DB update query just for reference 2022-07-15 07:59:42 -04:00
Emagi
8aee382185 - Broker 'btypes' (special effects) addressed for AoM client, new table broker_item_map created check DB/updates/broker_item_map_july3_2022.sql Fix #336
* May need further expansion some day to compare other clients, we can map btype, but the itype/ltype may also need to be mapped.
- Fixed Item::HasStat to work for stats in the 100-199 range since they only match the type (1) and the subtype is the value, meaning we have to match up the skill name
Partial addressing of Issue #279
- Ministration Skill/Power reduction added with rules
       RULE_INIT(R_Spells, MinistrationSkillID, "366253016"); // ministration skill id used to map power reduction rule MinistrationPowerReductionMax
       RULE_INIT(R_Spells, MinistrationPowerReductionMax, "15.0"); // max percentage of power reduction for spells with ministration mastery skill (default is 15.0 for 15%)
       RULE_INIT(R_Spells, MinistrationPowerReductionSkill, "25"); // divides by integer value to establish how much skill req for higher power reduction
- Subjugation, Disruption, Ordination and Aggression resistance reduction by skill of the attacker
       RULE_INIT(R_Spells, MasterSkillReduceSpellResist, "25"); // divides by integer value to establish how much skill bonus for reducing spell resistance on target
- Weapon Skills item stat now added to the weapon skill (crush/slash/pierce) for determinehit
2022-07-04 20:32:56 -04:00
Emagi
74d2358c86 missing column for character items 2022-07-02 21:28:41 -04:00
Emagi
6fbc15029d - Fixed Cure not working if there was no levels table on the detrimental spell
- Fix #329 /cureplayer implementation (minus RAID support)
update commands set handler=531 where command='cureplayer';

- cures will now remove the maintained spell of the caster if all targets are gone
- target support for item scripts 'used' function, eg.

function used(Item, Player, Target)
    -- do stuff
end

- effect_type added to items table, currently used to map to cure types
alter table items add column effect_type int(10) unsigned not null default 0;

	NO_EFFECT_TYPE=0,
	EFFECT_CURE_TYPE_ALL=1,
	EFFECT_CURE_TYPE_ARCANE=2,
	EFFECT_CURE_TYPE_TRAUMA=3,
	EFFECT_CURE_TYPE_NOXIOUS=4,
	EFFECT_CURE_TYPE_CURSE=5,
	EFFECT_CURE_TYPE_MAGIC=6
- created sample cure using item id 48868 Translucent Remedy of the Gods
update items set lua_script='ItemScripts/cure_test.lua' where id=48868;
update items set usable=1,effect_type=1 where id=48868;
I know, not the items real purpose, but this was just a fun test since the other effect cure types would be specific to the type
- removed dump packet of lower layer packet opcode 3 (reduce noise in console)
2022-07-01 18:12:45 -04:00
Emagi
682e023635 Complete Fix #418 item flags
- Temporary item flag support (removes item 30 minutes from camp out)
Rule R_Player, TemporaryItemLogoutTime added for seconds to deletion of item
- Heirloom item flag support added (limited to group support)
Rule R_Player, HeirloomItemShareExpiration added for seconds to inability to trade item between prior group members(tbd raid)

SQL Updates:
CREATE TABLE `character_items_group_members` (
  `unique_id` int(10) unsigned NOT NULL default 0,
  `character_id` int(10) unsigned NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
alter table character_items add column last_saved timestamp default current_timestamp on update current_timestamp;
alter table character_items add column created timestamp default current_timestamp;
2022-06-30 20:08:25 -04:00
Emagi
4b322d60ae - ZoneServer::PlayAnimation Fix #395 - spawn id 0 check to avoid bad packets, also client versioning methodology added, no longer creating a packet for each client
- SpellProcess::DeleteCasterSpell now unshades/ungreys a spell that was in maintained effects when cancelled.  This is for Fix #383 in relation to pet spells, but extends to any endless duration maintained spells.
- Fix #315 Implemented /cancel_effect [spell_id] - need DB query update: update commands set handler=530 where command='cancel_effect';
- Spell bonuses should properly be removed when spell is removed from a entity/spawn (char sheet stats should update and bonuses re-calculated)
- Sanity checks on /cancel_maintained so you cannot overflow the array and crash the server
- Resisted spells should no longer add control effects or do other spell like impacts when the cast is complete, this is based on the SpellDamage/Attack (that resists, then additional effects will be ignored in the cast function)
- Root, stun and mesmerize now hold the NPC in place
- We purge their previous movement plans to avoid wandering pointlessly when an NPC is stunned, mesmerized or rooted
- starting_languages update
	R_World StartingZoneLanguages
	Value 0: Does a match specific to race id (ignores starting_zone in the SQL query, so it consumes all) and inserts the languages applicable
	Value 1: Looks for all matching to starting_city, which is based on the client see starting_zones for examples.  Also wildcard for starting city of 0 and race id match.
update starting_languages set race=2 where race=3 and language_id=3; #dwarf (2) language id of 3 is not erudite race (3)
2022-06-28 19:24:00 -04:00
Emagi
13b1837623 Fix #384 group encounter mob loot
Adding a new column to the spawn table:
alter table spawn add column loot_drop_type int(10) unsigned not null default 0;

- loot_drop_type of 0 means spawn will when part of an encounter transfer its loot to the next alive spawn.
- loot_drop_type of 1 means the spawn will drop its own loot when it dies (like a named mob ideally).
- These changes do not change body drops which remain on the spawn/npc that dies, not transferred.
- loot and chest drops have been expanded beyond NPC's which means potential PVP support or even other types of spawns can drop loot/chests (probably expand loot_drop_type at a later time for more options in this area).  Need lua interface support (when player dies and all that) issue #436 opened for it.
- some additional mutex lock protections on spawn loot
- SetLootTier(loot_tier) and GetLootTier(), SetLootDropType(drop_type) and GetLootDropType() added to lua
2022-06-18 09:51:38 -04:00
Devn00b
6484e62cfb Added ability to disable gate from specific zones. Update SQL. 2022-06-16 17:50:39 -07:00
devn00b
f3526e14de Rd 1 of setting up bind location checks. Run SQL Update. 2022-06-14 23:39:04 -07:00
Devn00b
5383358146 Update to /mood 2022-05-17 10:10:08 -07:00
Devn00b
8abfa24537 SQL Update to go with f52e5f59db 2022-05-09 23:35:21 -07:00
Devn00b
4eca5cb32f SQL to go with f599ed8603 2022-05-07 20:59:45 -07:00
devn00b
46b57b0757 Adds a starting_languages table, and a rule (R_World, StartingZoneLanguages). 2022-04-23 05:11:20 +00:00
Image
244fe96dc5 Create spawntable_update_jul27_2021.sql 2021-07-27 23:01:53 -04:00
Image
25eb7d26d5 Create lootdrop_update_june23_2021.sql
SQL update for lootdrop required
2021-06-23 16:47:18 -04:00
Image
6c8e81eb3d DB Update for items 2021-04-03 23:48:40 -04:00
Image
d0f6bf9c0e DB update for mentor and unmentor commands 2021-04-01 00:11:10 -04:00
Image
852f035b45 Exe Updates 2021-03-21 08:25:37 -04:00
Image
a718618909 lua_file set to not include default value since mysql is picky 2021-03-10 08:37:23 -05:00
Image
fe70bba3b0 DB Updates 2021-03-06 17:33:10 -05:00
Image
03890860f3 DB Update 2021-02-28 07:57:41 -05:00
Image
4663fa36c9 Spell stacking restrictions integrated using linked_timer_id and a new field, type_group_spell_id
Fix #267 - spell stacking restrictions in place

min_class_skill_req is now pulled from the database
sint32 type_group_spell_id added to spells, can use this to distinguish spells of different classes not competing (eg. wards of templar/inquisitor dont stack)
GetSpellData and SetSpellData support min_class_skill_req and type_group_spell_id
2021-02-24 12:15:10 -05:00
Image
65e7222de5 Spirit Shards, Group and Solo EXP Debt (PVE/PVP), new lua functions, rules included
xp_debt in InfoStruct changed to float use SetInfoStructFloat and GetInfoStructFloat for it

SpawnScript file is now listed in /spawn details on the last page

LUA functions added:
bool GetRuleFlagBool(category, name)
float GetRuleFlagFloat(category, name)
int32 GetShardID(Spawn)
int32 GetShardCharID(Spawn)
int64 GetShardCreatedTimestamp(Spawn)
bool DeleteDBShardID(shardid) -- using GetShardID
int32 GetCharacterID(Spawn)
bool SetAccessToEntityCommandByCharID(Spawn, CharID, command_string, val) -- same as SetAccessToEntityCommand, but using a CharID instead of player

Rules added:

RULE_INIT(R_Combat, DeathExperienceDebt, "50.00"); // divide by 100, 50/100 = .5% debt per pve death
RULE_INIT(R_Combat, PVPDeathExperienceDebt, "25.00"); // divide by 100, 25/100 = .25% debt per pvp death
RULE_INIT(R_Combat, GroupExperienceDebt, "0"); // set to 1 means we will share debt between the group
RULE_INIT(R_Combat, ExperienceToDebt, "50.00"); // percentage of xp earned to debt vs obtained xp 50/100 = 50% to debt
RULE_INIT(R_Combat, ExperienceDebtRecoveryPercent, "5.00"); // recovery percentage per period of time, 5/100 = 5% recovered (so if .5% debt, .5*.05 = .025, .5-.025=.475% debt left)
RULE_INIT(R_Combat, ExperienceDebtRecoveryPeriod, "600"); // every 10 minutes (x*60 seconds) recover ExperienceDebtRecoveryPercent
RULE_INIT(R_Combat, EnableSpiritShards, "1");
RULE_INIT(R_Combat, SpiritShardSpawnScript, "SpawnScripts/Generic/SpiritShard.lua");
RULE_INIT(R_Combat, ShardDebtRecoveryPercent, "25.00"); // recovered percentage of debt upon obtainig shard, 25/100 means 25%.  If there is .5 DeathExperienceDebt, .5*25% = .125,  .5 - .125 = .375
2021-02-07 22:19:03 -05:00
Image
10b1a4e8d0 allow body drops with body_drop item db entry
Fix #244

alter table items add column body_drop tinyint(3) not null default '0';
2020-12-31 17:57:53 -05:00
Image
f85294d6a0 Support for /movecharacter
Fix #199
/movecharacter name zonename

    updates the characters table, moves to safe x,y,z,heading of zone
    character should be logged out, otherwise there is no point to using this command (just gets overwritten on char save).

- /castspell command updated for third argument, when set to '0' will cast as 'self' as it were the target.  eg /castspell 1234 1 0 (will cast spell id 1234 tier 1 and self cast it on your target)
2020-12-27 16:13:26 -05:00
Image
1ee2f8c4d0 Titles DB update to fix commands and increase available title options 2020-12-12 08:08:55 -05:00
Image
f76cee915e starting zone db updates 2020-11-29 22:51:29 -05:00
Image
b815c3dd9a Create reloadregionscripts_command_nov22_2020.sql
sql update for new /reload regionscripts command
2020-11-22 15:31:07 -05:00
LethalEncounter
339071500e added /waypoint command 2020-10-21 21:21:45 -04:00
LethalEncounter
65109b0d5d Glowpaths/waypoints added
Fixed spell error messages for DoF client
Fixed food/drinks for DoF client
Changed items to allow archetypes to use an item if all the classes in the archetype are allowed to use it
Added a ton of LUA functions to support various gameplay features
Loot icon only added to corpse if the corpse has loot
Class skills will now rise appropriately with level
Fixed various bugs
2020-10-21 20:12:06 -04:00
image
95bbe23192 SQL Updates for changes to Far Journey Freeport -- only supported for NEW characters after this update sourced 2020-09-21 07:14:23 -04:00
image
f374cb4dd4 items table update flags_16384 -> no_transmute, flags2_256 -> no_salvage 2020-08-22 18:05:55 -04:00
image
41716c32fa Group fixes/support - requires characters table update
Fix #66

- Fixed crashing of the world server when a client in a group zones
- Tracking of players group_id in the characters table (for both sanity and tracking cross zone)
- Clients zoning now properly 'rejoin' their group
- Mutex locks added to group code, this makes groups more reliably work across different zones as they run on different threads (some behavior for example was some players would not see chat and others would)
2020-08-21 23:38:15 -04:00
LethalEncounter
e64b718066 Merge branch 'master' of http://cutpon.com:3000/devn00b/EQ2EMu
# Conflicts:
#	EQ2/source/WorldServer/Spawn.cpp
#	server/EQ2World__Debug_x64.exe
#	server/SpawnStructs.xml
2020-07-26 00:36:20 -04:00
LethalEncounter
8e9afeded6 Fixed merchants and examine hang 2020-07-25 23:58:02 -04:00
Image
c34cf38c7d Added /findspawn searchstring/regex
Fix #159 allows us to more easily locate spawns by partial name and identify location / database ids
2020-07-25 14:18:01 -04:00
Image
745185ecde Fixed emote visual state ids for classic/DoF client
Fix #154 - emotes will work cross clients since visual state ids can vary
2020-07-25 08:24:05 -04:00
Image
b698e847e1 Merging LethalEncounter's support of classic (version 283) and dof (version 546)
Fix #145
2020-07-18 17:18:51 -04:00
Image
a7fe1df8f0 reload commands added
Fix #149 - /reload transporters
Fix #148 - /reload rules
2020-07-12 23:09:34 -04:00
Image
452ce7f157 add holiday_flag to spawn and transporters table
Fix #146
2020-07-09 22:49:06 -04:00
Image
a9f087b40c Cleanup logging behavior
Fix #8

- the multiple 'version' handling in LS is removed, now just GetVersion() as before.
- Console commands '1' and '2' removed (would change world status to all clients).  Version command added (was missing).
- Window Title updated to note version
- Some loose log messages (printfs) were made into proper "LOGIN" messages via log_config.xml
- Previously marked "World" messages that are also used as "Login" now properly categorized as such
- Removed DumpPacket on unknown opcodes (stop unnecessary data to console)
- Welcome banners on world/login updated
2020-06-26 22:09:16 -04:00
Image
905cc8b0ba Flight path support for transport maps issue #143
Fix #143

Adds flight_path_id, mount_id, mount_red_color, mount_green_color and mount_blue_color to transporters table

flight_path_id matches to StartAutoMount id or flight_paths id
mount_id matches to SetMount value
mount red/green/blue color are by default 255
2020-06-26 09:16:05 -04:00
Image
60d7b7527f spawn table merchant_min_level and merchant_max_level issue #67
Fix #67
Spawn table updated with merchant_min_level and merchant_max_level, extends to spawns, widgets, objects and signs.

Restricts the min level required and a max level cap on a player able to use the merchant (buy/sell/display)

/spawn set merchant_min_level x
/spawn set merchant_max_level x
2020-06-25 22:59:35 -04:00
Image
8c7da8e039 Support for expansion_flag, min and max client version for transporters table (zone and generic transport type)
Fix #141
2020-06-24 22:19:25 -04:00
Image
4f1005b647 History tab inside house now functioning for Paid Upkeep
Fixes issue #125
2020-06-19 22:45:35 -04:00
Image
a1f8fb9ed2 Deposit tab in the house supports deposits, track deposit history and escrow balance
In support of issue #125
- /house_deposit [??] [coin_amount] [status_amount] added
update query:
update commands set handler=518 where command='house_deposit';

- Escrow balance is tracked on the house
- Deposits are tracked for total and last deposit
- House upkeep payment now takes from escrow first
- character_house_deposits table added

CREATE TABLE `character_house_deposits` (
  `timestamp` int(10) unsigned NOT NULL DEFAULT 0,
  `house_id` int(10) unsigned NOT NULL DEFAULT 0,
  `instance_id` int(10) unsigned NOT NULL DEFAULT 0,
  `name` varchar(64) not null default '',
  `amount` bigint unsigned NOT NULL DEFAULT 0,
  `last_amount` bigint unsigned NOT NULL DEFAULT 0,
  `status` int(10) unsigned NOT NULL DEFAULT 0,
  `last_status` int(10) unsigned NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
2020-06-19 08:45:12 -04:00