- Mail list inbox now updated when a mail item is read (previously unread)
- Fix run speed like sprint stacking on the player
- Removed some unnecessary spell code that was unused, nullified spell when cast timer is performing delete/cleanup
- /info command updated with /info your_trade|their_trade slot_num for DoF trading
- Rule R_Player, CoinWeightPerHundred -> R_Player, CoinWeightPerStone, defaulted to 40 which is the DoF client equivalent (eg 100/40 = 2.5 weight)
- Concentration is now capped on zone/reload of the player spells
- Fix crash related to trade (entity pointers were loosely handled), bot or player otherwise could decouple from the zone and leave a dead ptr.
- LUA Functions added: GetCharacterFlag(Spawn, val) and ToggleCharacterFlag(Spawn, val) -- val is defined by the Character Flags in Player.h with #define CF_ or CF2_
- Rule R_Loot, LootDistributionTime added to set lotto/NBG timer countdown for distribution, default 120 (in seconds)
- /setautolootmode [x] command now supported, 0 = none, 1 = need/lotto, 2 = decline
DB Update: update commands set handler=534 where command='setautolootmode';
- /loot list details added - tracks the loot windows of players and tells if they are still open or closed (to determine when loot should dispense)
- Addressed spells causing crashes on deconstruct of NPCs
- Fixed inner struct data honoring the IfVariableSet/IfVariableNotSet flag, eg. previously item_id would not honor IfVariableSet/IfVariableNotSet:
<Data ElementName="item_count" Type="int8" IfVariableNotSet="loot_all"/>
<Data ElementName="item_list" Type="Array" ArraySizeVariable="item_count" IfVariableNotSet="loot_all">
<Data ElementName="item_id" Type="int32" IfVariableNotSet="loot_all"/>
</Data>
1. build components showing as 0/1 in red when component was available(tradeskillpackets.cpp)
2. select item not showing list properly(worldstruct.xml)
- Fix#109 Soulrend does not knock down target (finish spell cast, ZoneServer::SendCastSpellPacket spell_visual is disabled) when no damage applied
* alter table character_spell_effects add column has_damaged tinyint(3) unsigned not null default 0 after resisted;
- Fix#536, SpellDamage now can drain power. Also Fixed AoM and DoF client WS_HearSiphonSpellDamage
- SpellDamage LUA Function now returns a boolean whether damage is dealt (or spell resisted) -- (true is damage/false is no damage or resisted). See Spells/Fighter/Crusader/Shadowknight/Soulrend.lua for a sample.
- DamageSpawn LUA Function now returns a boolean whether damage is dealt, updated to allow take_power argument DamageSpawn(Attacker, Victim, victim, type, dmg_type, low_dmg, high_dmg, spell_name, crit_mod, is_tick, no_calcs, ignore_attacker, take_power)
- new LUA Functions (both can be used in and outside of a LUA Spell):
* SpellDamageExt(Target, type, min_damage, max_damage, crit_mod, no_calcs, override_packet_type, take_power, class_id_reqs...) -- extends support for take_power field (SpellDamage function does not have this and would break other potential spells)
* SendHearCast(Spawn, spell_visual_id, cast_time, Caster, Target) -- lets the Spawn see a spell visual on Target. If Caster is not defined, we use Spawn, same goes for Target.
- Fixed WS_HearHeal struct for DoF client (displays critically heal vs heal) and proper spell name. DoF does not support absorb or other types.
- Support for translation of spell_visual (spells table) aka spellcast.dat from assets vpl.
CREATE TABLE `spell_visuals` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) DEFAULT NULL,
`alternate_spell_visual` varchar(128) DEFAULT NOT NULL '',
`spell_visual_id` int(10) unsigned NOT NULL DEFAULT 0,
`min_version_range` int(10) unsigned NOT NULL DEFAULT 0,
`max_version_range` int(10) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
** MAKE SURE TO GET spell_visuals sql included with update inserted!
- Fixed right-click inventory examine (again?) - tested and it is working for main invetory, bags and items in bags!
- DoF bags support up to 36 slots now instead of the restricted 20 for "classic" client
- DoF and classic equipment restricts to 22 slots instead of trying to send client 25 slots (the additional do not exist)
- Fix crash on signs due to lack of nullptr check on entity_command
- SetInfoStructString / GetInfoStructString now supports combat_action_state -- can be used without overriding action_state outside of combat.
- Fix#538 - Item quest offer color and part of quest color mapping corrected
- Fix#519 - DoF broker now supports multiple pages, properly displays item name in the field area expected.
- Fix#518 - DoF client mender / repair fixed.
- Negated Control Effect 32 from DoF client, was causing low gravity when safe fall was on a spell.
- Fixed some LUA Functions handling of dead pointers and cleanup of the LUA stack.
- Fixed SpiritShard.lua to convert the timestamp to numerical from string
- Fixed a memory leak on PacketStruct handling of WS_Resurrected
- Fixed being dead allowing you to move around/jump on DoF client
- Fixed DoF control flags when revived/resurrecting to allow movement again
- Fixed reviving not setting HP and leaving player as a corpse (in any client)
- Fixed LUA Function SetSpellData, it was resetting the stack before we pulled the variable so we got no variable data
- DoF client restricted to 20 slots for backpacks (by client limitation, enforced server side to avoid bugs)
- DoF bagged inventory now behaves correctly (bags were only showing items up to the 11th slot on login, DoF supports up to slot 20)
- Fixed mender having NO_RENT flag checked incorrectly not allowing individual repair of items (was checking flags vs flags2)
- Fix#434 - AttackAllowed now checks for attackable against NPCs. Added more AttackAllowed checks around AE/Enemy target to avoid non-attackable npcs
- Fix#531 - DoF house support, AoM client also fixed inside house for door widget
- Fix#543 - Addressed AE/other spells including unattackable spawns
- Support for LUA Function InFront(Spawn, Target)
- Fix AE max targets exceeding cap
- Fix#541 - Support for world server to use non-3306 port for mysql by using port=3307 in world_db.ini
- Fix#540 - Added GetDifficulty(Spawn) command. No longer do spawns have a "encounter_level" all translated to "difficulty"
- HateList now no longer allows negative hate from deaggro
- more protection on player_quests to avoid crash
- Fix#534 when drowning death occurs, proper kill message (kill blow type 10) is sent to clients for appropriate 'glug glug' message.
* AoM client WS_HearDeath structure fixed, blow type was in wrong place
- Addressed a number of memory leaks in handling of packet structures through configReader.getStruct and LoadPacketData
- Addressed buffer overflow of packets trying to match opcodes that do not exist (beyond bounds of the opcode list)
- Addressed issues with trying to read memory in packet data when a packet is not loaded correctly, where we should instead bypass and just delete the bogus packet (avoid crash)
- Tracking icon for DoF set to 231
- Addressed DoF inventory causing items to be put in the wrong slot or disappearing
- Fixed instances serving a client a zone currently shutting down
- Added more enforcement of the client count for a zone so it does not prematurely shutdown when a client is entering the zone
- Addressed NPCs in DoF client "looking at" them when they should not. "interaction_flag" in SetInfoStructUInt(Spawn, "interaction_flag", 255) will now enforce not looking at a player.
- resolved /reload spells crash
- Control Effects now work for DoF client
- /flymode now supports values 1 and 2. 1 = flymode, 2 = noclip + flymode. DoF client flymode is not the same as AOM, it doesn't support up/down/jump
- added /gm controleffects (select entity target) will display their active control effects
- DoF client: can now right-click examine items in base inventory and inside bags of inventory
- can no longer put bags inside of other bags
- fixed the classic icons for collecting, fishing, gathering, foresting, mining, trapping, tracking put in temp icon until we determine right one.
- /info command now has recipe_product support
- /delete_quest crash fix
- knowledge sorting for DoF client now supported (ability book cannot be resorted in DoF)
- fixed copying of Recipe::Recipe class
- OP_RequestRecipeDetailsMsg and WS_RecipeDetailList support for earlier clients (DoF and probably similar classic)
- fixed HandleExamineInfoRequest to properly map the "id" for DoF client
- Quest mutex updated for pending quests to avoid crashes
- PacketStruct::serializeCountPacket better defined for larger sizes
Fix#521 - Spells can now be examined correctly, loot now pops up for previously failing with items like master spells.
- Capped rain/wind to 0.0 - 1.0, going beyond 1.0 crashed DoF client
- Removed stats from clients that do not support them (DoF and AoM vice versa)
- Encounter list no longer splits exp when pet is part of encounter, only bots/players count in the split.
- Rule R_Player, AutoSkillUpBaseSkills added, 0 by default. Setting to 1 automatically sets current skill = max skill for armor,shield,class,weapon skills
- DoF client Quest complete reward now includes temp rewards item data, previously you would see an empty quest reward window.
- DoF client properly in combat (no re-sheething of weapon while in combat)
- DoF client fixed spells to do start and end cast at appropriate times (struct fix).
- DoF client casting on self says "not a friend" -- now says not an enemy. When being too far away, instead of saying "too close" now says "too far away".
- DoF fixed selecting self interrupts /camp
- DoF client server/client properly synched for inventory (food/drink and other equipped slots previously not working right)
- DoF Broker no longer crashes client, limited implementation to get first 8 results. WIP
- DoF fixed examine equipped items didn't work for drink/potentially mismatched other slots
- DoF item stat review of resists now properly display
- DoF client is constantly sending HandleExamineInfoRequest packets for spells, fixed. Greatly improved performance of DoF cause it was constantly sending these packets for all spells in your book per second!
- DoF collections window is fixed, collections now display correctly in journal window. Upon turning in complete collections, client no longer crashes. Outstanding note: DoF client has EXP show up as % of level (60?) instead of just bare XP points. This might need more discovery, but isn't a huge issue right now.
- DoF player profile inspection inventory, DoF and AoM both display inventory (DoF does not support appearance gear). Cross client inspection works also. Avoidance (DoF and AOM) / ATK (DoF) stats need to be reviewed and matched in the structure, but not a big priority.
- DoF client /who list is broken (if more than one player, by myself /who works) -- structure updated for some unknown bytes tail of packet
- DoF client gestures now show up visually and not as an /emote-
- DoF item display fixed for house items (the items themselves in inventory/broker/so on were previosuly displayed corrupted)
- DoF Merchant "sell to merchant" just shows buy window, sell window was displaying buy items, there is already a sell window with the buy window.
- DoF merchant mender/repair no longer crashes the client -- currently worked around by sending buy screen then repair screen.. displays both, need to get buy screen disabled, will be its own git issue.
- Remove/Add skills via LUA will now properly update/reflect the database.
- starting_skills and starting_spells no longer applies on each login, this will stop the restoring of spells/skills on zoning that are removed with LUA
- Login sequence into world now initially load spells/skills (and also sync if first time into the world for the character). This will allow us to avoid an unneccessary blocking behavior with World::SyncCharAbilities (it waited for 5 loops and hold the thread to see if the DB is updating the character). Now we enforce this behavior with an updated state machine for the login, no longer blocking/holding the thread.
alter table characters add column first_world_login tinyint(1) unsigned not null default 0;
- R_World, DisplayItemTiers rule made to display item tiers (1) / disable (0)
- Bots are no longer impacted by /depop or /repop
- fixed crash with Player::CheckQuestFlag where we try to send updates based on quest, dead quest ptr when calling CheckQuestChatUpdate
- revive points now support an always_included option, otherwise it only shows the closest distance
- Database updates:
alter table revive_points add column always_included tinyint(1) unsigned not null default 0;
alter table characters add column first_world_login tinyint(1) unsigned not null default 0;
- LoginServer
* LoginServer.ini now supports (integer) fields expansionsflag, citiesflag, defaultsubscriptionlevel, enabledraces under the "LoginConfig" block
eg. enabledraces = 65535 allows all races
enabledraces = 57343 removes sarnak as playable race (-8192), another -4096 would remove Arasai. -2048 removes Fae.
Default values (in hex, you can only use integer in the ini):
// full support = 0x7CFF
// 1 << 12 (-4096) = missing echoes of faydwer, disables Fae and Arasai (black portraits) and kelethin as starting city
// 1 << 13 (-8192) = disables sarnak (black portraits) and gorowyn as starting city
expansionFlag = 0x7CFF; // 0x4CF5
/* dword_1ECBA18 operand for race flag packs (sublevel 0,1,2?) -- (sublevel -1) controls starting zones omission 0xEE vs 0xCF (CF misses halas)
1 = city of qeynos
2 = city of freeport
4 = city of kelethin
8 = city of neriak
16 = gorowyn
32 = new halas
64 = queens colony
128 = outpost overlord
*/
citiesFlag = 0xFF;
// sub_level 0xFFFFFFFF = blacks out all portraits for class alignments, considered non membership
// sub_level > 0 = class alignments still required, but portraits are viewable and race selectable
// sub_level = 2 membership, you can 'create characters on time locked servers' vs standard
// sub_level = 0 forces popup on close to web browser
defaultSubscriptionLevel = 0xFFFFFFFF;
// disable extra races FAE(16) ARASAI (17) SARNAK (18) -- with 4096/8192 flags, no visibility of portraits
enabledRaces = 0xFFFF; // 0xCFFF
- Fix#351 /yell now available, yell with self target breaks all active encounters, yell with direct target breaks that encounter, no target breaks first encounter
- WorldStructs.xml update required for /yell so others know you are yelling!
- /spawn details aggro (NPC only) added, view active encounter list (who receives credit, locked encounter) and hate list (actual damage/hate)
- InfoStruct now has a new UINT8 "engaged_encounter", set to 1 for being in an active encounter, 0 for out of encounter (allows regen/speed recovery)
- Returning from linkdead DB load reduced
- Returning from linkdead you won't see ghost versions of yourself
- Addressed returning from linkdead and spells missing, would despawn your pet or remove buffs for examples.
- Protections around private spawns aggroing/attacking players that cannot see them
- Additional spell crash protection when spell caster is not in zone
- Addressed spells being removed from character on /camp and disconnect
- LUA AddRecipeBookToPlayer(Player, BookID)
BookID = SELECT id, name, tradeskill_default_level FROM items WHERE item_type='Recipe'
- LUA RemoveRecipeFromPlayer(Player, RecipeID)
RecipeID = SELECT id from recipe where name='RecipeName';
Many tradeskill updates, the following issues should be resolved
- Counter successes/fails don't seem to have any effect on durability/progress more than a regular tick.
- Every recipe has the description "The art of sculpting metal into a candelabra." in the mouseover tooltip.
- Materials and fuels stored in bank are counted for use in recipes.
- Recipes with a primary component that is not owned in inventory (or bank) show as "Primary Component: [0]" in the recipe tooltip when hovering the recipe icon in the recipe window, instead of red-colored text "Primary Component: Bronze Cluster [0]". This is only with primary components. Build components and fuel components don't have this same behavior.
- Recipes can be crafted from recipe window, without having a crafting station selected or even being near one.
- T1 rawhide leather pelts harvested from dens are not the same pelts needed for any recipe that requires rawhide leather pelts:
Alder, Bronze, Sackcloth, Tranquil Sackcloth, Waxed Leather, Woven Waxed, Elm, Rawhide Leather, Woven Rawhide, Threadbare, Tranquil Threadbare, Tin (probably more)
- examine recipe windows fixed, including showing total amounts of components in your inventory and previously created stage now displays as intended
- when in the craft recipe screen (prior to pressing begin) you may now select components to craft with, all available will be listed that can be used
TS bench and recipe List Fixes
Required world list XML update as well Should be included
this will fix 1 items of Issue #467 Tradeskill stations should restrict recipes( these basics take care of standard devices found in starting cities will need some work for house and summoned devices)
PS. i really hope i dont screw this up
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
Fix#300 - appearance inventory saved to database, can equip and overrides normal equipment. Also fixed appearance properly updating (it wasn't sent other than in zone in primarily)
Fix#322 - rule to disable house alignment requirements
RULE_INIT(R_Player, DisableHouseAlignmentRequirement, "1");
Fix#311 - defines for root/snare as spell types
#define SPELL_TYPE_ROOT 15
#define SPELL_TYPE_SNARE 16
Fix#301 - loot_global needs a lua_script to access the ZoneScript and call function loot_criteria(Spawn)
loot_criteria_zone(Zone, Spawn, LootTableID, MinLevel, MaxLevel)
loot_criteria_racial(Zone, Spawn, LootTableID, MinLevel, MaxLevel)
loot_criteria_level(Zone, Spawn, LootTableID, MinLevel, MaxLevel)
Spawn: the target of the loot table to be added
LootTableID: the current loot table id we are checking to add to the Spawn
MinLevel/MaxLevel: Criteria from the global loot table that is handled via code (eg. always add if minlevel/maxlevel is 0, otherwise it is based on the Spawn's level)
return value of 0 will skip the provided LootTableID(int32) despite the database MinLevel/MaxLevel checks
return value of 1 will always include the loot table id on the Spawn list, even overriding if the min/max level check fails in the code
Issue #231 partially addressed, added support to override item_difficulty in the item script based on the arrow color (3 is white):
function item_difficulty(Item, Spawn)
return 3
end
Fix#256 - status points function and SetInfoStructUInt can set them
Fix#273 - fields in player profile not updating
Fix#290 - add SetSpawnGroupID(Spawn, group_id) lua function
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
Standardized the message numbers and will send the correct one based on client version
Fixed /tell to not assume that both clients were the same version
Tons of quest fixes
Fixed various spawn bugs
Classic/DoF client use only a single float, then later a direction was added. Not clear what version exactly, however struct will function despite the extra int8.
Furthering issue #124
- spawn_instance_data now tracks unique item id
- inside door widget now lists all items in the house, can move or pickup from UI
- Support for examine item by unique item id in house instance