2021 January 01: Added: New Command #questtrade to simulate the turn-in of items without requiring them in the player's inventory, the item and coin rewards from NPCs will be simulated and printed to the player only 2020 December 30: Info: This patch took longer than anticipated and in the end, I had to split it up in at least two patches, this is the first due to some major database changes which I'm still working on. Updated: Quests and Events have been majorly overhauled, hopefully, most missing or broken quests should work now most quest also require a specific faction now Updated: The following Quests/Events were upgraded: In antonica "beholder","commons","eastkarana","ecommons","everfrost","freporte","freportn","freportw","halas","highkeep","highpass","kithicor","misty","neriakc", "northkarana","nro","oasis","paw","qcat","qey2hh1","qeynos","qeynos2","qeytoqrg","qrg","rivervale","runnyeye","southkarana","sro" In faydwer "akanon","butcher","crushbone","felwithea","felwitheb","gfaydark","kaladima","kaladimb","lfaydark","mistmoore","oot","steamfont" In odus "erudnext","erudnint","erudsxing","tox" Added: The zone of Nektulos Forest is now available Added: ConsumeItemsWithArgs function for quests which allows to display fail text or emote from NPCs if a turn in did not result in all required items but at least one item is correct (e.g. xx says: I need two bottles of rum) Added: direct accessor for GetItemID for EventOnItemsReceived Added: a randomString(val1,val2) utility for Scripting Added: script functions GetGender(), GetFactionValue(), IsInCombat() for NPC scripts Fixed: Possible crash when turning in cash only quests Added: A new command #questhelp which requires a targeted NPC is now available to advanced auditor accounts and will print out all keyword triggers and required items Showing text triggers of Trumpy Irontoe.. Trumpy Irontoe says, 'hail drinks kaladim' Showing item triggers of Trumpy Irontoe.. Trumpy Irontoe says, 'I require 4 items:' Trumpy Irontoe says, 'ID 13033 [Honey Mead]' Fixed: Backstabbing NPCs with a magical weapon which are otherwise immune should now work correctly. Fixed: A zone point in highpass 2020 January 07: Fixed: Issue #659 Pets from players should not be buffed by NPCs when they have ally faction Fixed: Issue #660 Zonepoints from and to Nro/Oasis/Sro would put the player in the center of the zone line after zoning instead of keeping the relative coordinates in the target zone 2019 December 22: --=EQCExtender/Launcher=--New Release here Added: Ability to overwrite the default client screenshot functionality. A new eqcextender.ini section named [EnhancedScreenshots] has been added. This will no longer "freeze" the client for a couple of seconds, the clients default was increasing the time depending on how many screenshots you have already taken. Additionally, with the option SaveAsPNG=1 you can create screenshots not in BMP but PNG format. Furthermore, the Directory setting allows you to specify another folder where to save screenshots. The file name now also includes the date and time e.g. EQ_2018-12-27-18-20-54.png. Added: Win10 Only: DPI Scaling is automatically disabled by default, otherwise if you have a OS Text Scaling > 100% the Game would be scaled too and the mouse would not work. To disable this setting change the EnableDPIAware in EQCExtender.ini to 0. The default is enabled, it is basically the same result as using the EQCLauncher.exe Windows Property "Override High DPI Scaling, Let Application Control". Fixed: A crash when trying to run the EQCLauncher using WINE, note that widescreen isn't supported there yet and only VideoMode=2 or 1 works in the eqclient.ini --=Server=-- Added: Erudite is now a valid starting race, for now only Erudite starting in Erudin can be created (all but NEC,SK and some evil deity combinations) Added: New Zones: Tox, North Ro, Oasis and South Ro are available for playing! Fixed: Beta Neutral Faction For Alpha NPCs is now correctly set, Santa Clugg and Teleporter should no longer be hated by specific deities. Fixed: Bolts/Projectiles would travel for too long, the max projectile travel length where a hit is still possible is now 500 in-game units Fixed: Issue #643 Added a server-side gate collapse timer to handle corner cases where a player is using a zone line to zone to his bind zone after a gate collapses. In this rare case, he would appear at the bind location and not on the other zones zone line. Updated: Stat Spell command shows recast delay on available spells Fixed: Issue #656 Recast Delay was not working at all for NPCs (including pets), additionally some delay has been added to higher-level pet spells. Fixed: Issue #647 Half Elfs can now be created in the Auditor Test on Faydwer 2019 January 01: Fixed: Issue #643: Collapsed Gate retains Zoning Information server side, thus moving you to your bind point when you try a normal zone line afterwards Added: New GM Command #blacklisted [comment] lists blacklisted NPC in a zone Updated: Blacklisted NPCs are now loaded including description and expansion info Updated: GM Command #lootchance now has a 20sec cooldown Updated: A few more blacklisted NPCs for Gfay 2018 December 21: Added: Freeport and Ocean of Tears is now available Updated: Characters can now be created in Freeport Updated: Added Santa Clugg to Freeport and Greater Faydark Updated: Removed most items from the traveling Merchant since more locations are now available Updated: Traveling Agent can now also be found in front of Freeport Gates Updated: Maps for Butcherblock, E/W Commons, Greater Faydark, Lesser Faydark, OOT, Steamfont and Tox have been updated to include some missing Zone Geometry Updated: Stormbreaker and Sirensbane activated Updated: Removed invalid Objects/Switches from a few Zones in Antonica and Faydwer 2018 December 09: Added: East and West Commons are now playable zones Added: ResumeWPAction() for GrimScript to resume NPC movement early if paused before Fixed: Faction Consider levels were still using intervals from the previous test, now the correct one is used - this means that some mobs that were previously dubious could be threateningly now (e.g. animals). Added: Missing Waypoint behaviour "Random Point from given List", NPCs with that behaviour assigned will no longer stand still 2018 December 05: Updated: New Char creation for Dwarf/Gnome/High Elf/Wood ELf is now possible Updated: More Items have been Blacklisted in Faydwer, if you did a Newbie Quest from a later era you will lose that item on login. Added: GetPathID() to GrimScript Engine Updated: orc_apprentice is no longer blacklisted in misty 2018 November 23: Updated: The Server has been moved. Added: The following zones are now available: Felwithe, Greater Faydark, Crushbone, Kaladim, Butcherblock, Akanon, Steamfont and Lesser Faydark New Character Creation is still disabled in Faydwer! Updated: The travelling agent will now offer services from and to Greater Faydark. 2018 October 19: Added: Kithicor is now available 2018 October 18: Added: Highkeep is now available 2018 October 17: Fixed: Issue #629 Blacklisted NPCs are now zone specific Updated: Traveling Merchant now has some more Bard Spells and a Necro Pet Added: Highpass is now available 2018 Januar 30: Fixed: Issue #636 Regression Bug broke trading lore items Fixed: When trading containers, it's content is now also checked for duplicate lore items before a trade is finalized 2018 Januar 25: Added: Traveling Agent to Halas and Rivervale for fast travel Added: /auditor boost Command for auditors getting their char up to highest - 10lvls Fixed: Issue #626 NPCs pausing travel at their current waypoint will now walk back to said waypoint if they had been engaded and lose aggro again. Added: #targetdepop depops all NPCs but target in zone Added: #fixz sets the Z of NPC to the clients one Fixed: Issue #616 Sometimes clients do not advance the time of day correctly, as a workaround the current in game time is now sent every in game hour. Fixed: Issue #615: Valid Recipes now also search for the tradeskill container type and not only his item ID Fixed: Issue #612 Reduced price for Shaped Ashwood Recurve Bows due massive profit till recipe is changed Fixed: Issue #632 Imbue Spells can now only be scribed or cast by players who follow the spells deity requirement. Fixed: If an error happend during scribing or memorizing a spell, the client would not be informed correctly. Fixed: Issue #562 Missing Lore checks for interacting with world containers Fixed: Roaming NPCs could get "stuck" getting to their Destination waypoint Fixed: LOS Issue in Beholder near x 950,y -1250 Fixed: Merchants that would despawn/respawn would have an empty static inventory. Fixed: NPCs which backtrack their waypoints once they arrived at one end, will now no longer use the end point as the start point but the one after that thus preventing double waiting times. Updated: Removed Spider Legs from Blacklist Updated: Removed Jaggedpine Forest Teleporter from BB and Surefall Fixed: Item 18149 was showing as no rent Added: NETWORK_DEBUG_PACKETLOSS compile prop to generate client and server side packetloss Updated: World and Zone Client Received Packets are now CRC checked Updated: NETWORK_DEBUG enabled will now produce 20% packet drops from client and server Fixed: Removed Diseased Wolf Pelt from blacklist Fixed: GetHighestLevelOnAnyChar now excludes tutorial for Santa's Gifts EQCExtender: Added: Support for MultiMonitor Setup, there is a new INI Setting for the MonitorID to select a different Monitor. This needs to be > 0 and might only work if using FullScreen=0. Added: Initial Support for DirectX8 Renderer Added: RenderCustomWindows Function to draw custom windows and data ingame Fixed: It is now possible to move windows like target and buffs to the far right even on high resolutions like 20xx February 26: Fixed: Issue #608: Sometimes DoTs did not do damage on their tick February 25: Added: DoLevelUp to Scripting Engine, Boost character level/scribe spells/give skills Added: GetHighestLevelOnAnyChar to Scripting Engine Added: Santa now offers level buffing for players who have at least one lvl20+ char, also gives a present for lvl30+ players Updated: The NPC Santa Clugg can now also be found in Halas and Rivervale. He will offer his service for players who have attained at least a specific level on any of their characters. February 24: Fixed: DoTs, AEs Spells and similar would not use the correct entity ID when adding hate to a mob, thus resulting that random NPCs seemed to do damage do Mobs. February 23: Fixed: Memory Leak when using Scripting Timers Updated: Increased Difficulty to increase Intimidation Skill Fixed: Made sure invisible NPCs can't attack and can't be attacked Updated: Zone sleep time to 250ms if no player is connected Updated: Use unordered MAP for NPC AI Scripts for possible performance gain February 11: Updated: New DB Version of Content, some previously incorrect recipes might have been fixed, missing spawns too Updated: Refactored the #findrecipe command, it now also shows container types for a recipe and resulting items Fixed: Issue #577: Combine Containers that should be deleted after a successful combine will now be removed Fixed: Waterbound creatures should only select a roambox point to travel to if it is actually in water. Fixed: If a Waterbound creature spawns above water, try to adjust the Z value till water is found. Fixed: Waterbound Creatures can no longer by harmed by a Dot when the caster is not in water Added: Boat shouts to North+South Qeynos, Erudin and Butcherblock, specific NPCs will now shout when a Boat is leaving the docks and when a Boat on the other side of the route starts its voyage towards the zone the announcer NPC is in. Added: It is now possible to trigger an NPC from one zone to another or directly from the world server Fixed: Adding Event Listeners by NPCTypeID should work correctly now Added: New NPC in Qeynos - Travel Agent - he can bind players and allows players access to higher level zone if they met the level requirements Fixed: Issue #586: The arrow type (magical) now defines whether a nonmagic immune NPC (a wisp) can be hit or not, not the type of bow. Added: npc::ClearShopItems() to Scripting Engine Updated: Refactored SpawnLocations to SpawnGroup->SpawnLocations to honour SpawnLimit setting per SpawnGroup Updated: NPCs buffing other NPCs now will wait a bit before continuing their patrols Added: npc:SetStance(..) to Scripting Engine to let NPC sit or stand during travel Added: Region Type "Slime" is now regarded as liquid for waterbound creatures Added: #region command, shows current type of zone region you are in (water,ice, slime etc) Added: Regenerated all WaterMaps to recognise type Slime Added: NPCs now can trigger certain text onspawn/entercombat/leavecombat/ondeath Fixed: Missing Connection of Nodes in 3rd Level of Runnyeye resulting Pets/NPCs to take the longer route Added: Teleport and IsInCombat for Clients to Scripting Engine Added: GetZoneName to Scripting Engine Fixed: Issue #604: Pets no longer gain hate from other NPCs healing their Allies January 22: Fixed: Fletching Kit was using invalid data and could not be used Added: Spawning NPCs via Script can now be given a SPAWN_FACTION_ID property to set their faction Fixed: The Traveling Merchant and Santa Clugg are now on beta neutral faction Added: New Waypoint behaviours : Backtrack current Waypoint List, Despawn with no Repop and Goto a random closest waypoint/waypoint with LOS Updated: NPCs that use a roambox will now select a new destination after arriving at their initially randomly selected destination and no longer patrol back and forth between the spawn point and initial destination Fixed: NPC that should despawn at the end of their patrol will now wait the last waypoints pause time till they despawn Updated: Admins can now see account names in /who all Updated: Removed Giant Fire Beetle Leg from Blacklist Fixed: Issue #580 melee and ranged skill ups will now only happen on actual hits only January 15: Fixed: Hailing an NPC will only make him turn if he is not moving Fixed: Pathing between invisible doors in north and south qeynos, additionally reduced pathing data by about 25% Updated: Removed Spiderling Eye and Leg from Blacklisted Items Fixed: Added dungeon flag to Highkeep and Runnyeye Updated: Misty, Qeynos Hills, Everfrost, West+North+East Karana now include Houses and Guard Towers in the zone geometry, this should prevent NPCs spawning at these location be stuck under the world Fixed: #574 Picking up a Lore item you already have will no longer result in losing both items January 1: Fixed: Allow Non casters binding in cities Fixed: #567 NPCs Names are now trimmed when loaded from DB Fixed: Upper case "Mana" in Message Insufficient Mana to cast this spell. Fixed: Correct Bind Failure Message Fixed: #560 Most bard spells should no longer require an instrument Fixed: Quest Rewards should now contain max charges on items with charges instead of 1 Fixed: Looted Items should now contain max charges on items with charges instead of 1 Fixed: #563 Giving lowbie Pets a magicial weapon made them hit magicial too Fixed: NPCs could not drop multiple quantities of an item e.g. bone chips. Fixed: Some Quests which could randomly award an item only always returned one (e.g. Zamel) December 22: Added: New Server is live, use only the new EQCLauncher release to acccess it. Fixed: Fixed issue that NPCs were using behaviour scripts that do not belong to them, resulting in erratic behaviour. June 29: Added: The following zones are now available: Rivervale, King Xorb, Runnyeye, Misty Thicket, East Karana Added: Halfling Characters can now be created and will start in rivervale Note: NPCs/items in these zones havent been reviewed yet for blacklisting purposes, so you might spot a few which are not classic February 1: Added: West, North and South Karana are now online, additionally Erudin Palace is also available Updated: Blacklisted NPCs for Karanas, and item drops Added: GrimScript NPC property to toggle walking/running status Added: GrimScript functions to pause current waypoint movement Fixed: Bard Drums now show a flute instead of a lute model Added: New #debugnpc command, with an npc selected will log actions of an NPC in more detail Added: GrimScript GotoWP(x,y,z) for a one time NPC movement to a specific place Fixed: NPC dropped items that are no drop can now be picked up by players Added: Pathing nodes for southkarana, northkarana and westkarana Added: GrimScript functions UpdateScheduledTimer to either add or update a repeatable timer for an NPC and RemoveScheduledTimer to remove it again Added: GrimScript Event EventOnTimer; Fires if a timer is hit January 19: Fixed: #556 Trying to loot a lore item that is currently already in the players possession would temporary lock the corpse to the current player, other players could not loot the corpse and would receive the message that someone is already looting that corpse even tho nobody is. Fixed: Issue #557 PCs with magic gloves/boots can not hit melee nonmagic immune NPCs; Added checks for Kicks, Punches and Bash Updated: More Blacklisting; Updated: Exclude Fear2 Spell from scribespell command Fixed: Issue #558: Check if shoulder is magic for slam attempts Added: New SpawnObject method for Grim Scripting, so that NPCs can drop objects Added: New auditor command refreshgroup to resent group membership information to the client as a temporary workaround for lost packets. January 9: Updated: Made sure that charmed entities can not charm other entities. Updated: Identified additional fields in the zone struct related to ambient settings Added: Inital work for the spell hate revamp, along with a new tester command #spellhate which calculates the hate of a given spell ID on the selected target if cast by the player. Added: Blacklisting Support for NPCs and Items; Blacklisted NPCs for a specific expansion can now be excluded from spawn groups; Blacklisted Items can now be excluded from Loot tables; Both can be updated/added via DB. Updated: All? non classic NPCs have been blacklisted from qeynos/qeynos2/qeynoshill/blackburrow/everfrost/halas - moreover non classic items have been blacklisted from NPCs drop list Fixed: #554 Wisps can be attacked by non-magical weapons. (special attacks are currently not evaluated) Fixed: #555 Bash attacks that miss are not considered to be an attack Updated: Workaround for Quiver Item with unknown ID Fixed: Crash when accessing invalid spawnLocationEntry with non existing NPC Added: Nodes for Qeynos Hills and Everfrost at places where mobs would attack through walls because of terrain (entrance blackburrow, miragul cave) Updated: Added seeinvis/seeinvisvsundead/seehide from NPC db data (NPCs now actually can see invis) Updated: Implemented missing NPC special abilities which were not read from new DB special_attacks field Updated: Removed custom item from DB that interferenced with a valid item Updated: Refactored Taunt Chance, Taunt is now zone specific. For all vanilla and kunark zones; NPCs at or above level 50 can not be taunted. NPCs at the same or higher level as the Player can not be taunted. Warriors receive a small additional bonus to widen the gap between hybrid tank and Warrior regarding taunt a bit. In Velious Zones, for Players level 59 and below only NPCs below their level can be taunted. Level 60 Players are able to taunt up to level 65 NPCs but with a reduced chance to succeed. Updated: The only NPCs that can taunt now are Player pets, moreover pets can not taunt NPCs that are above level 49. Charmed NPCs can not taunt at all. Moreover Pets are no longer guaranteed to taunt every tick. Updated: Added exception for Merchants and Bankers that they cant be charmed Updated: Fix DireWolf Models in some velious zones Updated: Added all unknown spell scroll items (after velious) to blacklist Fixed: ZoneChangeRequest server OPcode was using the same ID as BoatEnter -----2015 Below---- December 4: Added: Erudin Docks and Erudins Crossing are now available, Erudin Palace is not, char creation is also not possible for erudites. Added: Boats from Qeynos <-> Erudin have been enabled, ship arrrrrhoi! Updated: Max/Min Faction loss is now determinate by the starting faction value, e.g. a tunare druid will never be able to build up the same faction as a human in neriak. Added: Updated Quest Files for Qeynos/Qeynos2/Erudin/ErudinsX/QCat Added: IsNPCSpawned for grim scripting Added: NPCs can now be assigned a waypointList ID from grim scripting, waypoints are loaded from DB November 30: Updated: Refactored Hate Bonus Generation according to latest live findings, this means temporary hate due sitting or being in melee range Fixed: NPC HP Regen is now read for combat and non combat from DB, previously out of combat was used while in combat Added: CastSpell is now available via GrimEngine scripting Added: ErudCrossing and ErudExt converted Scripts from Lua Updated: Hailed NPCs now wait 15s (up from 5) when they are on waypoint travel Added: GetRaceName and GetClassName are now available for GrimEngine scripting Updated: Removed all Perl Quest stuff, good riddance Added: Added GetFactionStanding to GrimEngine scripting to get faction value with a specific faction ID November 23 Fixed: Drain Spells (Lifetap etc) now heal the caster Updated: New Chars now autojoin the default guild Fixed: Some consider differences between dubiously and threatingly November 17 Added: New Server, edit your hosts file to point to new IP of 52.16.124.49 old server will be shut down soon Updated: Faydwer zones are gone, Qeynos has been added (Qeynos,Qeynos Hills, Qeynos Catacombs, Surfall Glade, Blackburrow, Everfrost, Halas) Updated: Creating a new char and selecting home city Qeynos/Halas will now create the char in the new zones - selecting another city will result in the new char being in tutorial zone which is still not accessable Updated: As usual, dont look at the content/quests - this is just a playground to goof around. March 3 Updated: Using Faction Data from new DB, this should fix Gnome Necros being KOS in Akanon Updated: Using latest DB Version from March 3 March 2 Fixed: The spells Hsagra's Wrath and Porlos' Fury no longer require belly range Fixed: Issue #533 Wandering Mind and Theft of Thought now give an error message when the target has no mana. Fixed: Issue #534 Silence will now also disable any proc,bonus proc or item clicky spells. Updated: Migrated to new NPC/Spawn DB Schema Added: Command #lootchance [x] - While targeting an NPC it will calculate the chances for any item to drop after killing said NPC x times. The command will additionally calculate the coin drop and item sell price for the specified interval, finally it will also calculate the average value per kill. Added: Assist/Aggro Range can now be specified for each NPC type Updated: Added a randomized coin type distribution, previously if an NPC would drop 50PP he would drop as much as possible as PP coins and max 9 gold/silver/copper. Now he might drop a few PP in lower coin types, e.g. 30PP 80GP 170SP 30CP Fixed: Issue #543 Critical Damage messages should be broadcasted from the targets position and not from the attackers position. Fixed: Issue #540 Charmed NPC should no longer buff Players Updated: Refactored NPC Data and Spellset Loading, Pet and NPC data/spells now each use their own table data, this makes it easier to update spawn information while not touching pet data Fixed: Issue #545 Added missing error messages when charm fails due NPC not charmable or player already has a pet Fixed: Issue #545 When an NPC is charmed, he is now also removed from all NPC hatelists, previously this only happend when the charm wore off Fixed: Issue #541 Bolt spells can now be casted without supplying a target, the bolt will hit the first entity that is in front of the player Updated: The command #timeofday now shows the current server time and alters the hour in the current zone till next world server update Added: NPC Waypoints can now also be loaded from the DB backend, previously these could only be assigned from script Fixed: Issue #547 Mobs would be interrupted from regular melee hits too often, clients channeling chance was too good at higher levels Fixed: Related to #546 Intra Zone Succor did not move the player to the zones safe coordinates Added: Akanon, Steamfont and Lesser Faydark are now available on Test, Tutorial zones had to be temporary disabled due new DB Schema, Gnomes can now be created. Note: The new DB has been deployed, roamers, loottables, mobs can all be very different now, watch out and report any inconsistencies in THIS thread viewtopic.php?f=70&t=4080 January 30 Fixed: #532 Make sure spells dont land on dead entities Updated: Crash Fix related to NPCs using spells outside tutorial January 25 Updated: Rewrote the tradeskill recipe search logic into 1 single query. 99% less confusing and 99% less crashes now! All available recipes should now work correctly, please verify. Updated: NPCs outside tutorial now use their correct spell table ID, e.g. an orc oracle will heal his allies now! January 21 Updated: #stats now shows min and max hit Updated: Pet data is now in a separate table source db/eqc_pets_JANUARY_2015.sql Fixed: #478 Mage Epic Pet stats adjusted to lvl49 only, increase max hit to 81 and hp reg to 40 Fixed: Stackable/Chargable Item Rewards from Quests would reward an item with 0 charges Fixed: Quests would sometimes remove too many items of the same ID from an NPC even tho only 1 instance should be deleted. Added: Coins given to NPCs are now remembered and handled seperately from normal loot coins, this means that multiquesting is now also possible for turning in coins e.g. 2 items are needed and 3000 gold. Each step can be done separately by a different player. Updated: KaladimA Scripts which use the new lua API to check for items+coins Updated: The bard song bonus range has been temporary removed for further testing. Fixed: #524 Glamour of Tunare was set as beneficial and not working (magic resist debuff) Fixed: #525 Great Bear Form for Shaman used a different illusion texture color depending on the shamans race Fixed: #530 Charmed players now use the 8th spell slot instead of the 1st. Fixed; #531 Money Conversion bug due rounding errors from lower to higher coin type January 12 Added: Butcherblock and both Kaladim zones are now available, creating a dwarf now will automatically put your starter zone as kaladim Updated: Added a few roamboxes for Butcherblock Updated: Added some runspeed fixes for butcherblock Updated: An NPC no longer ignores melee range when he got to your last position, this will make it easier to kite, trivial even, however this will be changed later on. Updated: All Nodes/Maps have been updated to support teleportation nodes Update: Pathing nodes now support teleporation bridges, which will instantly move the mob between the nodes Updated: All ground Z offsets in all zones have been adjusted, look out for mobs falling down from the sky! Updated: All boats have been disabled for alpha Update: Significant differences in a mob's z-axis rate of change now trigger position updates. This helps to prevent a mob from getting visually stuck on small ledges between normal updates. Fixed: #480 Charmed Player in a Duel should no longer bounce September 25 Updated: Using PEQ/Alkabor Fishing Table Updated: Using PEQ/Alkabor Forage Table Fixed: #516 charmed pets shouldnt respond to report health Updated: Added some beg failure messages Fixed: #502 Prohibit using racial forges/containers for non allowed races Fixed: #510 Added a few more variable spells Fixed: #462 Always check caster of AE spells first if he is going to be hit Fixed: #508 Allowed Max Level Difference for resist is now level+6 or level*1.25 whatever is higher Fixed: Figured out Walk/Runspeed Relation, Updated Velocity speed calculation - You cant outrun mobs anymore without SoW, note that bats are faster than any other NPC in the test (apart from tutorial mobs) Fixed: Players walkspeed has been increased Updated: Recheck #505 Money Issue due convert plat to copper 19 September Fixed: #511 NPCs should now attack NPC targets they dont like Updated: XP message back by popular demand Fixed: #507 non group members could hear group chat Fixed: #488 NPCs can now proc on special attacks Fixed: #457 pet should say that it cant attack the target Updated: Changed Blind Melee Range Check to no longer require 2x melee Range Fixed: #493 Parry no longer requires a weapon 17 September Fixed: Issue #500 Money is auto converted to higher currency when buying items Updated: Temporary added higher out of combat regen Fixed: Issue #499 Reagent Free Clickies now consume charges again Updated: Auditors can now use the command "recipesearch" or "rs" Updated: Reduced even/higher con aggro/assist range to 60 units Updated: AE spells hit more than one target again #462 15 September Updated: New Server Address, read other thread Updated: The blind spell issue received a temporary workaround Updated: Creating HIE or WE will no longer start you in tutorial Updated: Added Test Messageboard in Kelethin Fixed: Issue #491 A players corpse would add hate to an NPC via a DOT if the player died before the DOT was finished. Fixed: Issue #494 When person who is currently bandaged dies, the bind wound user would not get his UI unlocked nor the message that his target has died. Fixed: Issue #443 Monk Silentfist reuse time was too low at lvl60 Fixed: Issue #443 The remaining discipline cooldown is now also shown when a discipline is still active Updated: Refactored Message Board handling to use PreparedStatements against possible malicious attacks Fixed: Issue #489 The 2H Blunt animation will now be used for 2H Piercing weapons instead of the piercing animation Fixed: Issue #449 Mage pets now have a random recast delay Added: A new scripting method to reward faction to a player. Fixed: Issue #452 Charmed NPCs will give no faction if a player completes a quest Fixed: Issue #490 Rogues will now receive a message whether hide failed or succeeded. Updated: Refactored the zoning process to check if a zone is available before trying to zone a player, if a zone is not available for the player he will be automatically translocated to the zones safe coordinates. Fixed: Issue #485 The disciplines Deadeye and Charge did not guarantee a hit with all types of attack skills Fixed: Issue #486 Added a grace period for the range attack timer, a player could trigger a new range attack too soon due lag/packetloss. Added: A players pet will now say if it can not attack a target Updated: Even with the sanctification discipline active, you can no longer resist cazic touch spell Updated: You no longer can cast spells on not attackable entities anymore Fixed: Issue #476 Summoned Pets will now attack the most hated target on their hatelist Fixed: Issue #479 Only the caster of a spell (or if it is his pet) will now receive the "hit by non melee" text Fixed: Issue #462 The caster is now excluded from the target limit of rain spells 03 September Added: Auditors can now use the discreset command to reset their disciplines to 1 min. Fixed: Issue #470 Warrior can now land critical/crippling hits with all special abilities e.g. Kick/Bash/Rangeattack etc Fixed: Eye of zoom can no longer be used in Kedges Keep Fixed: Issue #471 Quivers with weight reduction did not provide haste to range attacks Fixed: Issue #477 Players sometimes appear after death with zero hp Fixed: Issue #458 Eye of Zoom is too fast underwater Fixed: Issue #445 Non Patrollers will now remove debuffs when they arrive at their homepoint, so dots will no longer generate aggro for FD pulling. Additionally removed the 2min autoblur when being feigned. Fixed: Issue #473 NPCs can now finish a spell even when a player is out of range Fixed: Issue #468 Enstill is now variable length spell like other roots Updated: New commands to zone/summonitems for the targeted player Fixed: Issue #472 AFK Status of existing players was not sent to new players entering a zone Updated: Missing "." for item use message Fixed: Issue #460 Rangers above lvl50 can now do double damage on nonmoving nonrooted targets Fixed: Issze #454 Added a list of clicky items which require a reagent Updated: On a successful taunt, humanoid npcs will now say "I'll teach you to interfere with me"... 27 August Fixed: #454 ring of flight has 2 charges now and does not require components to cast levitate as well as other summoned items liike waterstone Updated: Reverted #438 , dots can be refreshed again Fixed: Issue #451 - increased duration for some disciplines Fixed: #448 Spells activated by clickies should print "begins to glow" Updated: Added missing spells for 10% cleric penalty #382 Fixed: Issue #441 Damage Shield damage is no longer broadcasted put only displayed to the player who triggered the damage Fixed: Chat Filter for damage shields should now work Fixed: #439 Fade Bind Sight if player removes illusion Fixed: Issue #446 Pickpocket can result in coin again Fixed: Issue #440: Merchant Barter should be displayed in white/black text for other players. Updated: FD should work again as it should 24 August Fixed: Issue #438 A player should not be able to refresh dots, you now get the spell does not take hold message Fixed: Issue #432 Charming a FD person while dueling leads to a player that that shows up as unconscious while auto following his master Fixed: Getting killed in Duel/PVP by a pet will result in XP loss Updated: When the client tries to reset the session, the world server will allow another login and sent the login success messages again 19 August Fixed: Endless Loop Issue in the packet manager when people are connected for days Fixed: Mobs will now attack players which are charmed by other players even if the owner of the pet is not on the mobs hatelist zoning to area is now possible starting from level 1 --------------- Old Patch Notes-------------- Revision: 894 Author: Harakiri Date: 11:00:00 AM, Saturday, March 7, 2017 Updated: Refactored the #findrecipe command, it now also shows container types for a recipe and resulting items Fixed: Issue #577: Combine Containers that should be deleted after a successful combine will now be removed Fixed: Waterbound creatures should only select a roambox point to travel to if it is actually in water. Fixed: If a Waterbound creature spawns above water, try to adjust the Z value till water is found. Fixed: Waterbound Creatures can no longer by harmed by a Dot when the caster is not in water Added: Boat shouts to North+South Qeynos, Erudin and Butcherblock, specific NPCs will now shout when a Boat is leaving the docks and when a Boat on the other side of the route starts its voyage towards the zone the announcer NPC is in. Added: It is now possible to trigger an NPC from one zone to another or directly from the world server Fixed: Adding Event Listeners by NPCTypeID should work correctly now Fixed: Issue #586: The arrow type (magical) now defines whether a nonmagic immune NPC (a wisp) can be hit or not, not the type of bow. Added: npc::ClearShopItems() to Scripting Engine Updated: Refactored SpawnLocations to SpawnGroup->SpawnLocations to honour SpawnLimit setting per SpawnGroup Updated: NPCs buffing other NPCs now will wait a bit before continuing their patrols Added: npc:SetStance(..) to Scripting Engine to let NPC sit or stand during travel Added: Region Type "Slime" is now regarded as liquid for waterbound creatures Added: #region command, shows current type of zone region you are in (water,ice, slime etc) Added: Regenerated all WaterMaps to recognise type Slime Added: NPCs now can trigger certain text onspawn/entercombat/leavecombat/ondeath Fixed: Missing Connection of Nodes in 3rd Level of Runnyeye resulting Pets/NPCs to take the longer route Added: Teleport and IsInCombat for Clients to Scripting Engine Added: GetZoneName to Scripting Engine Fixed: Issue #604: Pets no longer gain hate from other NPCs healing their Allies Fixed: Memory Leak when using Scripting Timers Updated: Increased Difficulty to increase Intimidation Skill Fixed: Made sure invisible NPCs can't attack and can't be attacked Updated: Zone sleep time to 250ms if no player is connected Updated: Increase performance for AI Scripts lookup Added: DoLevelUp to Scripting Engine, Boost character level/scribe spells/give skills Added: GetHighestLevelOnAnyChar to Scripting Engine Fixed: Issue #608: Sometimes DoTs did not do damage on their tick Revision: 893 Author: Harakiri Date: 11:00:00 PM, Saturday, January 28, 2017 Added: Pathing for Rivervale, King Xorb, Runnyeye, Misty Thicket and East Karana Fixed: NPCs were using behaviour scripts that do not belong to them, resulting in erratic behaviour. Fixed: Allow non-casters to be bound in cities Fixed: Issue #567: NPCs Names would sometimes contain additional spaces, they are now trimmed Fixed: Upper case "Mana" in the Message "Insufficient Mana to cast this spell" Fixed: Added correct Bind Failure Message Fixed: Issue #560: Most bard spells should no longer require an instrument Fixed: Quest Rewards should now contain the supposed max charges on items instead of just one Fixed: Looted Items should now contain the supposed max charges on items instead of just one Fixed: Issue #563: Giving lower level pets a magical weapon will now let them hit magical too Fixed: NPCs could not drop multiple quantities of an item e.g. bone chips Fixed: Some Quests which could randomly award an item only always returned a specific one Fixed: Hailing an NPC will only make him turn to the player if the NPC actually stopped moving Fixed: Pathing between invisible doors in north and south qeynos, additionally reduced pathing data by about 25% in these zones Fixed: Added dungeon flag to Highkeep and Runnyeye Updated: Misty, Qeynos Hills, Everfrost, West+North+East Karana now include Houses and Guard Towers in their zone geometry, this should prevent NPCs spawning at these location be stuck under the world Fixed: Issue #574: Picking up a Lore item you already have will no longer result in losing both items Fixed: The Fletching Kit was using invalid data and could not be used Added: Spawning NPCs via Script can now be given a SPAWN_FACTION_ID property to set their faction Fixed: Auditor only NPCs - The Travelling Merchant and Santa Clugg are now on beta neutral faction Added: New Waypoint behaviours: Backtrack current Waypoint List, Despawn with no Repop and Goto a random closest waypoint/waypoint with LOS Updated: NPCs that use a roambox will now select a new destination after arriving at their initially randomly selected destination and no longer patrol back and forth between the spawn point and initial destination Fixed: NPC that should despawn at the end of their patrol will now wait the last waypoints pause time till they despawn Updated: Admins can now see account names in /who all Fixed: Issue #580: Melee and Ranged skill ups will now only happen on actual hits Revision: 892 Author: Harakiri Date: 09:03:00 PM, Sunday, January 31, 2016 Fixed: Issue #557 PCs with magic gloves/boots could not hit/kick melee nonmagic immune NPCs Fixed: Issue #558: Slam now requires a magic shoulder item to hit melee nonmagic immunte NPCs Added: GrimScript SpawnObject method, can place objects at a specific location - used mostly by NPCs dropping items at specific places Added: GrimScript NPC property to toggle walking/running status Added: GrimScript functions to pause current waypoint movement Fixed: Bard Drums now show a flute instead of a lute model Added: New #debugnpc command, with an npc selected will log actions of an NPC in more detail Added: GrimScript GotoWP(x,y,z) for a one time NPC movement to a specific place Fixed: NPC dropped items that are no drop can now be picked up by players Added: Pathing nodes for southkarana, northkarana and westkarana Added: GrimScript functions UpdateScheduledTimer to either add or update a repeatable timer for an NPC and RemoveScheduledTimer to remove it again Added: GrimScript Event EventOnTimer; Fires if a timer is hit Revision: 891 Author: Harakiri Date: 09:42:00 PM, Saturday, January 9, 2016 Fixed: Issue #554 Wisps could be attacked by non-magical weapons. Fixed: Issue #555 Bash attacks that miss are not considered to be an attack. Fixed: Possible crash related when accessing an invalid spawn entry that had no valid NPC assigned Added: Pathing nodes for Qeynos Hills and Everfrost, even if these are considered outdoor - some locations would allow the mob to appear (client side) to be a in wall when chasing a player (BB entrance for example). Updated: The See Invis/InvisUndead/Hide flags are now properly read from the DB. Updated: Refactored the Taunt skill and chance, the Taunt logic is now zone specific. For all vanilla and kunark zones the following rules apply : NPCs at or above level 50 can not be taunted. NPCs at the same or higher level as the player can not be taunted. In Velious Zones the following rules apply: for Players level 59 and below only NPCs below their level can be taunted. Level 60 Players are able to taunt up to level 65 NPCs but with a reduced chance to succeed. Updated: The only NPCs that can taunt now are player pets, moreover pets can not taunt NPCs that are above level 49 and are no longer guaranteed to utilize their taunt skill every tick. Charmed NPCs can no longer taunt at all. Updated: Added exception for Merchants and Bankers that they cant be charmed. Fixed: The incorrect DireWolf Model was used in some Velious zones Fixed: The internal communication between zone and world server used the same opcode value for two different messages. Fixed: Issue #556 Trying to loot a lore item that is currently already in the players possession would temporary lock the corpse to the current player, other players could not loot the corpse and would receive the message that someone is already looting that corpse even tho nobody is. Revision: 890 Author: Harakiri Date: 04:42:00 PM, Thursday, December 17, 2015 Fixed: Issue #547 NPCs would be interrupted from regular melee hits far too often, a players channeling chance was too good at higher levels. Fixed: NPCs should no longer spin in place when they arrive at their pause waypoint because their previous location was too close to said waypoint Fixed: Intra Zone Succor did not move the player to the zones safe coordinates Updated: Rewrote the faction handling routines related to deity/race/illusion Fixed: Limited NPC Pet name length if they were too long due an excessive long NPC name. Added: New tester command #showfaction - shows all possible faction hits if a player kills the targeted NPC and explains race/class/deity faction modification for the NPCs primary faction (e.g. why an NPC hate/likes the player) Updated: Querying an item book text now uses a prepared statement and will inform the player if the corresponding text entry could not be found Fixed: The drain line spells now heal again Added: Client:GetFactionStanding (factionID) scripting method to evaluate a players current faction standing with a specific faction ID for handling quest responses Updated: Hailed NPCs now wait a bit longer for the player to reply if they are on waypoint travel Added: New method npc:CastSpell to the scripting engine, so that NPCs may cast spell on players e.g. through a completed quest players receive a buff Fixed: NPC HP Regen is now read for combat and non combat from DB, previously out of combat was used while in combat Updated: Refactored the Hate Bonus Generation, this should also fix the issue of necro pets not holding aggro good enough Added: A new event type 'trigger' to the scripting engine - so that NPCs can trigger other NPCs to perform an action e.g. reply to a conversation Added: NPCs can now be assigned an ID of a waypoint list from within the scripting engine, waypoints are retrieved from the DB Added: New method IsNPCSpawned for scripting engine to check if an NPC is currently spawned in the zone for handling different quest events Added: Maximum Faction Gain/Loss is now based from the chars initial base faction value, e.g. a tunare druid will never be able to build up the same faction as a human necro in neriak. Added: Pathing node maps for Erudin Docks and Surfall Glade has been added. These are needed for NPC path finding through obstacles. Added: New command #listcorpses - lists corpses from all players in the zone Added: New command #gotopc - server side teleport to a player in the current zone Added: New command #showroamboxes - visualize all roamboxes in the current zone Updated: The #hate command now also includes the current bonus hate an NPC applies when selecting a new target Updated: Made sure that charmed entities can not charm other entities. Updated: Identified additional fields in the zone struct related to ambient settings Added: Inital work for the spell hate revamp, along with a new tester command #spellhate which calculates the hate of a given spell ID on the selected target if cast by the player. Added: Blacklisting Support for NPCs and Items; Blacklisted NPCs for a specific expansion can now be excluded from spawn groups; Blacklisted Items can now be excluded from Loot tables; Both can be updated/added via DB. Revision: 889 Author: Harakiri Date: 10:00:00 PM, Friday, February 27, 2015 Updated: Migrated to new NPC/Spawn DB Schema Added: Command #lootchance [x] - While targeting an NPC it will calculate the chances for any item to drop after killing said NPC x times. The command will additionally calculate the coin drop and item sell price for the specified interval, finally it will also calculate the average value per kill. Added: Assist/Aggro Range can now be specified for each NPC type Updated: Added a randomized coin type distribution, previously if an NPC would drop 50PP he would drop as much as possible as PP coins and max 9 gold/silver/copper. Now he might drop a few PP in lower coin types, e.g. 30PP 80GP 170SP 30CP Fixed: Issue #543 Critical Damage messages should be broadcasted from the targets position and not from the attackers position. Fixed: Issue #540 Charmed NPC should no longer buff Players Updated: Refactored NPC Data and Spellset Loading, Pet and NPC data/spells now each use their own table data, this makes it easier to update spawn information while not touching pet data Fixed: Issue #545 Added missing error messages when charm fails due NPC not charmable or player already has a pet Fixed: Issue #545 When an NPC is charmed, he is now also removed from all NPC hatelists, previously this only happend when the charm wore off Fixed: Issue #541 Bolt spells can now be casted without supplying a target, the bolt will hit the first entity that is in front of the player Updated: The command #timeofday now shows the current server time and alters the hour in the current zone till next world server update Added: NPC Waypoints can now also be loaded from the DB backend, previously these could only be assigned from script Revision: 888 Author: Harakiri Date: 11:14:00 AM, Wednesday, February 4, 2015 Fixed: The spells Hsagra's Wrath and Porlos' Fury no longer require belly range Fixed: Issue #533 Wandering Mind and Theft of Thought now give an error message when the target has no mana. Fixed: Issue #534 Silence will now also disable any proc,bonus proc or item clicky spells. Fixed: Issue #532 Players could be hit by a spell the moment they died, thus any debuffs from spells would stick after appearing at bind point. Now, dead players should no longer be able to get hit by any spells. Updated: Pets and NPCs outside the testing tutorial zone now use the correct spells Updated: Rewrote the tradeskill recipe verification logic by using only one single DB query instead of 4, also fixed any possible crashes related to it Updated: Finished moving NPC Spell data to shared memory Updated: [Extender] The custom/widescreen resolution no longer requires a display device capable of WUXGA, devices which only support lower resolutions like 1366x768 are now also supported. Revision: 887 Author: Harakiri Date: 01:33:00 PM, Wednesday, January 21, 2015 Updated: The /auditor stats command now also shows the min and max hit Updated: The pet data has been moved to a separate table to make them independent of any NPC/Spawn data Fixed: Issue #478 Mage Epic Pet has no longer a level variance, it is now always lvl49 - additionally the max hit has been increased to 81 and hp reg to 40 Fixed: Stackable/Chargeable Item rewards from quests would result in an item with 0 charges Fixed: On quests turn in completion, sometimes too many items of the same ID were removed from an NPC's "memory" even though only 1 instance should be deleted. Added: Coins given to NPCs are now remembered as trade specific coins, previously the NPC would forget about these once the turn in was done. This means that multiquesting is now also possible for turning in coins e.g. a quest that needs 2 items 3000 gold. Each step can now be done separately by a different player. Added: Extended the Script API for ConsumeItems function to also check if all coin requirements are met. Example : npc:ConsumeItems({[13132]=1,[13848]=2,['GOLD']=17}), this will only remove coin/items from an NPC if all conditions are met. Fixed: Issue #530 Charmed players now use the 8th spell slot instead of the 1st when trying to cast a spell. Fixed: Issue #531 Coin Conversion error when converting a higher coin type to a lower one, e.g. 10 PP to 1000 SP - sometimes the result did not agree with the client. Updated: Starting moving NPC spell data to shared memory to reduce the number of SQL queries when spawning an NPC Revision: 886 Author: Harakiri Date: 04:52:00 PM, Tuesday, January 13, 2015 Added: Pathing node maps for blackburrow, north qeynos, south qeynos, qeynos catacombs and halas. These are needed for NPC path finding through obstacles. Update: Pathing nodes now support teleportation bridges, which will instantly move the mob between the nodes (for example between the teleporter to the qeynos ufo) Update: Holding shift while creating a pathing node connection in the zone explorer tool now creates a teleportation bridge. Update: Significant differences in a mob's z-axis rate of change now trigger position updates. This helps to prevent a mob from getting visually stuck on small ledges between normal updates. Fixed: Issue #480 A player that is charmed during a duel should no longer bounce Fixed: Issue #524 Glamour of Tunare was set as beneficial and was not working Fixed: Issue #525 Great Bear Form for Shaman uses a different illusion texture color depending on the shamans race Added: The EQC Extender/Launcher changes will now also be listed in the revision log. These are prefixed with the [Extender] tag. Added: [Extender] Client side benchmark function to calculate how fast a mobs velocity is visually on the client side. This will be used to better synchronize the client/server differences with mob running speed. Added: [Extender] The custom/widescreen resolution can now be configured via the EQCExtender.ini file. Added: [Extender] The custom/widescreen resolution can now be set while in game using the /setres command. Added: [Extender] A custom field of view can be now set in game using the /setfov command. Revision: 885 Author: Harakiri Date: 10:18:00 PM, Thursday, September 25, 2014 Fixed: Issue #500 Money was auto converted to higher currency when buying items Fixed: Issue #511 NPCs should now attack NPC targets they dont like Fixed: Issue #507 Non group members could hear group chat Fixed: Issue #488 NPCs can now also proc on special attacks (bash, kick etc) Fixed: Issue #457 A pet should say that it cant attack if the target is not attackable Updated: Reduced the range a blinded mob needs to "see" his target Fixed: Issue #493 Parry no longer requires a weapon Fixed: Issue #516 Charmed pets shouldnt respond to report health command Updated: Added some beg failure messages Fixed: Issue #502 Prohibit using racial forges/containers for non allowed races Fixed: Issue #510 The following spells are now also variable : Invisibility to Undead, Solon's Bewitching Bravura, Solon's Song of the Sirens, All Blind Spells Fixed: #508 The allowed max level difference for a spell to land now level+6 or level*1.25 whatever is higher Fixed: Figured out the relation between walk/runspeed, the velocity speed calculation has been updated to accurately reflect NPC walk/run speed Fixed: Players walkspeed has been increased, it was too low ---- Revision: 884 Author: Harakiri Date: 04:38:00 PM, Monday, September 15, 2014 Fixed: Issue #491 A players corpse would add hate to an NPC via a DOT if the player died before the DOT was finished. Fixed: Issue #494 When person who is currently bandaged dies, the bind wound user would not get his UI unlocked nor the message that his target has died. Fixed: Issue #443 Monk Silentfist reuse time was too low at lvl60 Fixed: Issue #443 The remaining discipline cooldown is now also shown when a discipline is still active Updated: Refactored Message Board handling to use PreparedStatements against possible malicious attacks Fixed: Issue #489 The 2H Blunt animation will now be used for 2H Piercing weapons instead of the piercing animation Fixed: Issue #449 Mage pets now have a random recast delay Added: A new scripting method to reward faction to a player. Fixed: Issue #452 Charmed NPCs will give no faction if a player completes a quest Fixed: Issue #490 Rogues will now receive a message whether hide failed or succeeded. Updated: Refactored the zoning process to check if a zone is available before trying to zone a player, if a zone is not available for the player he will be automatically translocated to the zones safe coordinates. Fixed: Issue #485 The disciplines Deadeye and Charge did not guarantee a hit with all types of attack skills Fixed: Issue #486 Added a grace period for the range attack timer, a player could trigger a new range attack too soon due lag/packetloss. Added: A players pet will now say if it can not attack a target Updated: Even with the sanctification discipline active, you can no longer resist cazic touch spell Updated: You no longer can cast spells on not attackable entities anymore Fixed: Issue #476 Summoned Pets will now attack the most hated target on their hatelist Fixed: Issue #479 Only the caster of a spell (or if it is his pet) will now receive the "hit by non melee" text Fixed: Issue #462 The caster is now excluded from the target limit of rain spells ---- Revision: 883 Author: Harakiri Date: 10:31:00 PM, Thursday, September 3, 2014 Fixed: Issue #470 Warrior can now land critical/crippling hits with all special abilities e.g. Kick/Bash/Rangeattack etc Fixed: Eye of zoom can no longer be used in Kedges Keep Fixed: Issue #471 Quivers with weight reduction did not provide haste to range attacks Fixed: Issue #477 Players sometimes appear after death with zero hp Fixed: Issue #458 Eye of Zoom is too fast underwater Fixed: Issue #445 Non Patrollers will now remove debuffs when they arrive at their homepoint, so dots will no longer generate aggro for FD pulling. Additionally removed the 2min autoblur when being feigned. Fixed: Issue #473 NPCs can now finish a spell even when a player is out of range Fixed: Issue #468 Enstill is now a variable length spell like other roots Updated: New commands to zone/summonitems for the targeted player Fixed: Issue #472 AFK Status of existing players was not sent to new players entering a zone Fixed: Issue #460 Rangers above lvl50 can now do double bow damage on nonmoving nonrooted targets Fixed: Issue #454 Added a list of clicky items which require a reagent, additionally charges of clickies will only be removed after checking if all reagents exist in the inventory Updated: On a successful taunt, humanoid npcs will now say "I'll teach you to interfere with me"... Added: New test command discreset to reset any discipline timer. ---- Revision: 882 Author: Harakiri Date: 00:30:00 PM, Friday, August 29, 2014 Fixed: Issue #454 Ring of Flight now has 2 charges and it will no longer require batwings to cast levitate. The same applies to other summoned items like waterstone. Fixed: Issue #451 Increased duration of some disciplines mentioned in January 9, 2001 patch Fixed: Issue #448 Spells activated by clickies should now print " begins to glow" when they have a cast time. Updated: Added missing spells for 10% cleric penalty Fixed: Issue #441 Damage Shield damage is no longer broadcasted and only displayed to the player who triggered the damage. Fixed: The chat filter for damage shields should now work Fixed: Issue #439 Bind Sight will now automatically be removed if player removes an active illusion Fixed: Issue #446 Using Pickpocket can result in coin again Fixed: Issue #440 Merchant Barter should be displayed in white/black text for other players. ---- Revision: 881 Author: Harakiri Date: 00:51:00 AM, Sunday, August 24, 2014 Updated: Refactored the network packet code and debug packet logging. Fixed: When the client tries to reset the session, the world server will allow another login and sent the login success messages again. This could happen due packet loss between client and server. Fixed: Issue #438 Refreshing DOTs was not a classic mechanic, a player now receives a message that the spell did not take hold Fixed: Issue #432 Charming a FD person while dueling leads to a pet that follows its master around as unconscious visually Fixed: Getting killed in Duel/PVP by a pet would result in XP loss Updated: The GM zone and goto commands can now also be used with a target Fixed: When a player charmed another player as pet, the NPC which the charmed player attacked would not defend if the pets owner was not on his hatelist. Fixed: A player who was connected for multiple days could produce an endless loop issue in the network packet code due integer overflow Fixed: DB queries on linux are case sensitive regarding the table names Updated: Reduced the message range for Merchant Barter with other players ---- Revision: 880 Author: Harakiri Date: 01:07:00 AM, Friday, August 15, 2014 Added: Guild Members which are in a Guild War with another guild may now attack each other in any zone. Added: The DB Connection is now automatically restored when the connection was once lost. Updated: Identified the outdoor type and max_z field in the zone header struct Updated: Identified the lastLogin field in playerprofile struct Added: A build process to automatically create an installable eqc server DEB package, it includes all conf/data and binaries to start the server. This makes it significantly easier to update a server with just one command. Fixed: The intra zone to world server communication was not working correctly under linux, packets took too long to be delivered Updated: Cleaned up logging, only one log file per process is now generated and now includes the zone name as filename suffix. Fixed: Multiple memory read/write concurrency issues in the world and zone server Updated: Reduced world server idle cpu usage by ensuring that every thread frees enough resources Fixed: A virtual memory leak under linux in the world server (8MB every 90sec) because threads were not cleaned up once they had finished. ---- Revision: 879 Author: Harakiri Date: 10:52:00 AM, Monday, August 11, 2014 Message: Updated: The world server now has a routine which checks if a guild war has ended and informs all players about the guild peace Added: New command "#guild create" to create a guild and assign a leader Updated: Joining/Leaving a Guild or disbanding it will now instantly update any "who all" lookup to show the new guild status Updated: The new guild leader and all players in his zone are now automatically informed about the newly created guild name, players can see the guild tag without relogging. Players in other zones will automatically receive an update once they zone. Fixed: Heap Corruption on some PreparedStatement Calls Updated: Refactored the zone server to world server opcode communication, added size checks for message types Updated: Identified the guild ID field in the "who all" request struct Updated: Refactored the who all request processing on the world server. Searching by guild name and by min and/or max level is now supported. Updated: Players who are anonymous can now only be found by their name and, if they roleplay by their guild name. GMs can not be found if they are either anonymous or on roleplay. Updated: Searching for a level, race and class is now an exclusive AND search, meaning "/who all 1 10 Dark Elf Magician" will only show non anonymous Dark Elf Magicians between level 1 and 10. Updated: A "who all" request is now capped to return a maximum of 20 players which are matched by the filter. Updated: A "who all guild" request will now automatically substitute the guild keyword with the guilds name of the requesting player. Updated: A "who all friends" request now also shows the friends guild name if he is not anonymous. Updated: A "who all" or "who all friends" request will now show the kunark specific class names for players above lvl 50 ---- Revision: 878 Author: Harakiri Date: 7:33:00 PM, Thursday, August 6, 2014 Message: Added: Support for the client packet request when a new player enters a zone that has an unknown guild. The server will now update the client with the missing guild record. Added: Support for the /guilddelete command, a leader can now disband a guild. All currently logged in players will be informed that they are removed from the guild. Added: Players who are offline during a guilds deletion will be automatically removed once they log in again. Added: Implemented the /guildwar procedure, a guild leader can request another guild leader to initiate a guild war for a specific amount of time. All guild members which are online will be informed if a war has been initiated. (The combat mechanic still needs to be implemented) Added: Implemented the /guildpeace procedure, similar to guildwar. Updated: Identified all fields in the guildwar and guildpeace data struct for client communication. Added: Identified two new Opcodes for handling the response for a guild war and guild peace which will be sent once the opposing guild leader answers to a request. Updated: The world server is now aware of any guild war and any disabled guilds. ---- Revision: 877 Author: Harakiri Date: 5:50:00 PM, Thursday, March 6, 2014 Message: Added: Identified new Opcode for Guild removal Added: The guild leader can now transfer the guild leadership to a guild officer. Updated: The /guildinvite command may now also be used to promote or demote members Added: Guild leaders and officers can now set the guild motd. Added: The guild motd is now sent to the client when it is requested (usually on the first zone in). The current message can now be viewed at any time by using /guildmotd Added: The world server is now aware of new guild members or members who have been removed, thus a /who all now shows guild membership for players from other zones Added: Guild Chat. The chat is now relayed to the world and from there broadcasted to each zone where at least one guild member is found. Updated: Removed redundant character save during specific intenvory/loot actions, thus reducing the overall database store overhead Updated: Most DB queries related to user input (login, char creation, char deletion) have been refactored to use prepared statements to be protected against malicious user input. Fixed: It is no longer possible to delete a character that doesn't belong to the current logged in account (e.g. through packet forging) Updated: Any dead code related to the old guild implementation has been removed. ---- Revision: 876 Author: Harakiri Date: 11:09:00 PM, Monday, February 17, 2014 Message: Added: Loading guild information and memberships from DB, the world server is now aware of all existing guilds. Updated: Identified all fields in the guilds2.dat (the clients local guild name cache) struct that is sent to the client. Added: Reversed how the client generates the checksum over his local guild storage file, the server can now compare his checksum with the one the client sents. This removes the need to sent the whole 30kb guild information on each zone/server select because the world server now knows if an update is required. Added: When the guilds2.dat checksum does not match, the server will sent the client all the guilds he is aware of in the format the client expects. Added: A guild leader or officer may now invite other players who are not already guilded, to join their guild! Added: Players now can remove themself from their guild if they are not the guild leader, a guild officer can remove normal members, and the guild leader additionally officers. Added: Joining/Leaving a guild is now broadcasted to all players in a zone. Updated: Switched to SQL prepared statements for saving character, to be certain no malicious input and no corruption of the players data can exist. Fixed: Various little issues related to dead code found by a static code analyser. ---- Revision: 875 Author: Harakiri Date: 03:50:00 PM, Monday, February 03, 2014 Message: Fixed: Issue #344 - NPCs affected by illusion spells (Chill Bones, Ignite Bone, etc) will now appear with their original size once the illusion has worn off. Fixed: Issue #372 - Death Pact will no longer be a complete heal and the fade message has been corrected. Additionally the chance for both DP and DI to go off have been reduced significantly. Fixed: The healing messages are no longer sent when the target is invulnerable. Fixed: Nearby players now receive healing messages (xxx has been completely healed) Updated: A caster of beneficial duration drain spells (Impart Strength, Shadow Compact, Pact of Shadow, Shadowbond) can now only cast these on one target at a time. Fixed: Issue #355 - The same spell could be casted on an NPC when the previous spell was casted by a higher level caster. Fixed: NPCs no longer try to charm their target if they have an owner. Fixed: Issue #399 - (Charmed) Pets no longer try to cast hostile spells on their master or other friendly targets. Fixed: Issue #388 - Pet owners now receive a spell worn off message for buffs they cast on their own pet. Updated: Spell worn off and Merchant Shop messages are now transmitted using the correct channel for defining a custom user color. Fixed: Issue #415 - The server and client did not agree on the current mana after the played had been resurrected, because the client manually set the players mana to zero. Fixed: There was a buff synchronization issue related to resurrection sickness, the client uses a different spell for large races and also sets the duration to only 40 tics instead of 50. This behavior has been implemented on the server. ---- Revision: 874 Author: Harakiri Date: 00:10:00 AM, Wednesday, January 29, 2014 Message: Fixed: Manastone will now only work in vanilla zones (excluding planes). Updated: The Harmtouch ability now receives an additional bonus after lvl40. Fixed: Lay on Hands no longer heals the target for their full HP, the amount is determined by the casters level. Updated: The Lay on Hands ability now receives an additional bonus after lvl40. Updated: The bard spell Denon`s Desperate Dirge now receives an additional bonus after lvl45 and another bonus when the puretone discipline is active. Updated: Made sure that no Giants or Dragons can be mesmerized. Updated: NPCs above lvl52 cannot be feared any more. Fixed: Hide now cancels all active form of invisibility. Fixed: Issue #417 - Drain spells will now only take hold if the target and the caster have a free buff slot. Fixed: Issue #220 - Leach broke the snare effect of an existing Darkness Spell Updated: Drain Spell handling has been re-factored and included in the normal spell effect processing. Additionally fixed issue that the target would receive the "buff" in the free buff slot determined by the casters buff slots, thus overwriting any spell there already was. Added: Support for Endurance Drain Spells for non NPCs. ---- Revision: 873 Author: Harakiri Date: 03:25:00 PM, Thursday, January 23, 2014 Message: Fixed: The character selection screen information wasnt refreshed once you camped out, thus providing inaccurate information about level,zone and equipment. Fixed: Issue #400 - Critical Hit damage messages now match the actual damage done. Fixed: The world server would never disconnect a player idling on the char select screen, this has been fixed. Fixed: Issue #429 - The maximum hit formula for backstab was incorrect. After extensive research a new one has been formulated which is able to reach 553 at lvl60 (maxed) Fixed: The duelist discipline would not double the backstab damage but only increase the base weapon damage. Updated: Reversed the weapon damage (DMG) caps for each class and level in our client, and added them to the servers weapon damage calculation. For example, a 40dmg weapon for a lvl25 melee is regarded as only 30dmg weapon. For casters/healers even lower. Fixed: Riposte is now possible while using an evasive discipline. Fixed: Rune shield absorbed blows will no longer trigger bonus procs. ---- Revision: 872 Author: Harakiri Date: 00:35:00 AM, Friday, January 17, 2014 Message: Updated: Group management/interaction has been redesigned, now the central world server is responsible for managing groups across all zones - any invite/remove/create request by a zone is first verified by the world which keeps track of all groups and than relayed back to each zone a member exist. Updated: Players now request their group member ship status from the world server once they zone into a new zone, thus ensuring correct synchronization if any group related action happens during their loading/zoning process. Fixed: Link Dead Players are no longer removed immediately from a group as if they would be camping. Updated: The world server now periodically checks if a group member is still online, if he has not been seen for a certain amount of time - he will be removed from the group and all other members across all zones are informed about this change. If the player logs in again between this time frame, he will sill be a group member. If that member was the leader, the second member automatically assumes that role. Fixed: Issue #241 - You would sometimes rejoin a group even if you camped out. Fixed: Group instances would persist in a zone even if the last member moved out of the zone. Fixed: Three memory leaks related to boat travel/status communication to the world server Added: Found new opcode to initiate automatic disconnection while player is in a zone. --- Revision: 871 Author: Harakiri Date: 10:35:00 PM, Saturday, January 4, 2014 Message: Fixed: Issue #431 - The vampiric embrace spell proc is now depending on the caster class (less powerful for SK) Fixed: Issue #311 - The server and client disagreed on the melee range while auto attacking, thus while the client didnt complain about out of range - the server didnt allow the attack to go through and vice versa. Updated: Fix for #311 required a non anticipated massive time investment, since the client calculates the melee range based off the attacker AND defender and their 3d models bounding box / scale factor - these values had to be extracted from the client for all existing races. Added: Table with the ScaleFactor,BoundingRadius and 3D models height of every race, and corresponding formula which includes the attackers/defenders size for scaling his BoundingRadius to calculate the melee range. Added: Client side script to dump all important size/boundingradius information of all NPCs in a zone. Updated: Removed static melee range checks and used dynamic range check based on the attacker and defender (i.e. ogres have a slightly larger melee range than halflings while attacking the same mob). Added: New command #mrange to compare the melee range values for the current target. Fixed: Illusions for non playable races would assume a 0 size on the server (skeletons, spectre etc), thus having a very low hit range. Updated: Spawning NPCs from the Grim Scripting engine now allows specification of a size parameter via an NPCs SetProperties method. Updated: Identified the view height,spirtes height, bounding radius and scale factor of a players struct. Fixed: Halflings ain't that tiny anymore! Through rigorous training they grew by half a unit! (They were misrepresented server side, and are a bit larger than 1/2 of humans but still below dwarfs - this was only important for accurate melee range calculations). ---- Revision: 870 Author: Harakiri Date: 7:00:00 PM, Saturday, December 26, 2013 Message: Fixed: Issue #397 - When an illusion fades all other players will no longer see the caster as naked. Fixed: Issue #365 - Beneficial spells can now be cast on a target, if both the caster and the target are in PVP and can attack each other. Fixed: Issue #380 - The Mend skill cooldown is now persisted through death/zoning. Fixed: Issue #395 - Charmed pets would not clear their complete aggro list when /pet back off was used. Fixed: Issue #411 - Group Spells no longer have a level check for their target if the target is grouped with the caster Updated: Identified the mend cooldown timer in the playerprofile, to inform the client to gray out the mend button for a specific time after zoning. ---- Revision: 869 Author: Harakiri Date: 4:00:00 PM, Saturday, December 21, 2013 Message: Added: Correct XP loss formula upon death for all class/race combinations, verified from our client. Updated: Refactored XP required by level calculation, in some odd cases it was off. Updated: The players death routine has been reworked, the server now calculates the XP loss itself. Fixed: Issue #389 - Healing player pets no longer generates hate Fixed: Issue #394 - Casting sacrifice now removes XP from the victim. Fixed: Issue #418 - Sneak should now always cancel if you are hit with a detrimental spell Fixed: Variable stun spells which depend on the casters level (e.g. AirPet) can now can exceed a 1 second stun duration. ---- Revision: 868 Author: Harakiri Date: 8:00:12 PM, Thursday, November 28, 2013 Message: Fixed: Issue #409 - Pick Pocket will no longer be able to steal all coins an NPC has even when trying multiple times Fixed: Issue #410 - Rogue's Poison Proc will now only go off when you hit with a piercing weapon Fixed: Issue #426 - Rogues and Warrios with a Bind Wound skill > 200 will also be able to bind up to 70% of their HP Fixed: Issue #413 - Bind Sight spells can now be clicked off to cancel the effect Fixed: Issue #429 - The spells Shroud of Death/Undeath were using an incorrect trigger spell, they are now using the correct weapon proc. Fixed: Issue #393 - Turning off hide manually through the skill button now works. Fixed: You no longer get an evade message when using hide while out of combat. Fixed: Using hide would sometimes still show yourself as visible. Updated: Identified the sneaking flag for players, now new players zoning into zone will see if existing players are sneaking Updated: Identified the bodyType field in a players profile Updated: Identified the pitch and force fields in the spell casting struct Added: Found new Opcode to cancel sneak and hide ---- Revision: 867 Author: Harakiri Date: 1:00:12 PM, Tuesday, November 26, 2013 Message: Fixed: Issue #385 - Even while in combat, pets would always regen at non-combat rate Fixed: Issue #387 - The spell damage message (hit by non-melee) would not be broadcasted to nearby players and wouldnt use the correct message type ID to customize its user color. Fixed: Issue #382 - Non clerics that cast cleric heal spells now suffer a 10% penalty Fixed: Issue #392 - The healing message for Lay on Hands was showing an incorrect heal amount. Fixed: Issue #391 - Player pets were casting their innate spell attacks too often and too regularly. Fixed: Issue #425 - Failed Feign should still provide defense skill checks Fixed: Issue #427 - Knight Abilities can no longer fizzle Fixed: Issue #386 - The amount of damage done through a damage shield was not displayed. Additionally damage shield text spam can now be correctly filtered. Fixed: Issue #404 - NPCS (and player pets) now include worn items in their AC calculation again. Fixed: Issue #421 - Flying Kick Minimum Damage has been increased. ---- Revision: 866 Author: Harakiri Date: 5:00:12 PM, Tuesday, November 19, 2013 Message: Fixed: Issue #379 - No Drop Items specifically placed on a merchant (for testing environment), can now be purchased. Fixed: Issue #412 - Trading items with somebody that has a full inventory, will now place the items at the cursor or simply drop them on the ground. Fixed: Issue #332 - Looting containers with items inside would sometimes turn these items invisible to the client. The client issued a corrupt item error packet, due the misuse of the wrong trading opcode/combination. Added: Tons of faction, zone and spawn captures. ---- Revision: 865 Author: Yeahlight, Harakiri Date: April - Mai 2013 Message: -- This is a combined Revision for a multitude of commits over a 2 month timeframe -- Fixed: The following issues were resolved during Auditor Phase 359 353 366 369 372 371 375 368 350 361 378 360 363 364 330 272 314 240 322 202 321 326 323 327 329 331 333 338 340 302 348 288 313 278 279 286 298 300 272 294 297 299 301 312 271 272 273 126 269 280 277 281 237 236 152 Updated: Removed range check for GMs on /corpse; GMs can now summon any corpse with /corpse no need for consent Updated: Weather toggle to ON or OFF is no longer guaranteed each interval, less chance to switch to active, higher chance to switch from active to inactive. Some weather intensive zones have higher chance for active weather. Added: Clients default 10% success chance for channeling Added: AIUpdate functionality for scripting, usage eventManager:AddScheduledEvent(npc,EVENT_ON_AI_UPDATE,Boss_OnAIUpdate,{TIME=1000, REPEAT=1}) Updated: Fix Food/Water consumption - Client gets now informed every tick about current levels and fatigue. Monks receive a Bonus, their food/water levels deplete slower - some zones will deplete water faster Added: #stats fatigue Updated: A lot of other things ---- Revision: 864 Author: Harakiri Date: 6:10:18 PM, Wednesday, March 06, 2013 Message: Added: The headless client now supports character creation, use --addchar Added: New opcode/struct for manipulating the current sky, identified all valid values for sky setting Added: New opcodes for disconnecting players from either world or zone server Added: New opcode/struct for modifying the particle effect of a world object Updated: Identified magic values for world switch struct, that instruct the client to only show particle effects during daytime or nighttime on switches Updated: Perl2Grim now converts faction checks (e.g. npc:GetConsiderLevel(e:GetClient()) > FACTION_INDIFFERENT) and spawn commands for spawning NPCs from script Updated: The current day/time information is now only sent once upon zoning for each player, the client automatically advances the time on its own Updated: The world server now broadcasts the complete day/time information to each zone server, so that each zone knows the current ingame day/hour etc instead of just the day/night cycle Fixed: The client would always receive a day/time update that was off by one hour ---- Revision: 863 Author: Yeahlight Date: 5:43:26 AM, Saturday, March 02, 2013 Message: Update: The acknowledgment response portion of the packet manager has been rewritten. When faced with significant packet loss, the previous implementation would occasionally process duplicate packets and fail to properly respond to acknowledgment requests Update: All send and receive socket calls may now be subjected to induced packet loss for testing Update: The send and receive socket buffers are now much larger, thus greatly reducing the chance of the OS discarding incoming packets Update: Gravity fluxed NPCs now fly into the air Update: PCs with their sight bound to another mob will receive bulk spawn position updates for both locations Update: PCs now receive a feedback message when another PC fails to land an offensive spell on them Fix: PCs no longer receive duplicate spell landing messages when they are the target of their own spell Fix: Armor textures once again disappear from a PC corpse as it is looted Fix: The definition of a boat is now correct Fix: The definition of a monster is now correct Fix: The pet summoning routine no longer modifies shared memory ---- Revision: 862 Author: Harakiri Date: 2:13:30 PM, Thursday, February 21, 2013 Message: Fixed: Memleaks in client due not deleted timers Fixed: Memleak in loadingQueue when non critical packets get added during client connecting Fixed: Memleaks in SpawnLocation, not deleted timer and spawngroups Fixed: Memleak for soulbound items during corpse creation Fixed: Memleak when buying an item Fixed: Memleaks when shutting down zone Added: Identified all ClientZoneEntry_Struct fields Added: Identified all ZoneServerInfo_Struct fields Updated: Added support for starting a session for our network packet manager, now its also usable as a client and not only as a server. Updated: The network packet manager now recognizes closing packets for ending a session Added: New scripting method npc:GetConsiderLevel(Client) to compare the current faction standing of a player Updated: During a zone in, additional checksum verifications have been added Added: New Project Headless Client! Command line application to imitate the real trilogy clients behaviour. Currently supports login to the world server, listing characters, selecting a character and zoning with the selected character in a zone and staying idle. This is tool is used for stress testing and benchmarking, initial tests showed that the world server can cope pretty easily with 1000 logins/character listings at once. Updated: Linux build files for supporting Headless Client Updated: Some additional security checks during character creation and cleanup. ---- Revision: 861 Author: Harakiri Date: 4:57:26 PM, Tuesday, February 05, 2013 Message: Added: cross-platform shared library loader Updated: Refactored Shared Memory project to be platform independent. Added: Added cross-platform support for Shared Memory Project, previously only win32 was supported. Shared memory will either be realized by POSIX or System V implementation - depending on what the underlying platform supports. Fixed: Numerous case sensitive errors during header includes e.g. #include "logger.h" vs #include "Logger.h" Fixed: Encapsulated Win32 specific functionality in #ifdef and provided unix alternative includes/functions for Common Project Updated: Replaced min/max macros with std::min/max implementations. Updated: Added unix support for world server. The world server now runs successfully under linux (tested with debian)! Updated: Added unix support for zone server. The zone server now runs successfully under linux (tested with debian)! GrimEngine will follow soon... Added: Build configuration files for common, shared memory, world and zone for unix. Building a server is now easier than under Win =p ---- Revision: 860 Author: Harakiri Date: 5:50:45 PM, Tuesday, January 29, 2013 Message: Fixed: Identified the animation speed property in the emote struct, updated Mob::AttackAnimation with default value of 1.0 Added: NPC properties can now be set from the scripting engine, using the newly added method npc:SetProperties. Example call npc:SetProperties({PREVENT_AGRO=1,PREVENT_CASTING=1}) Added: A list of client side used animations and their ID Added: New method npc:EmoteAnimation to the scripting engine, example call npc:EmoteAnimation(,) Added: Example script GrimScripts\test\Spawn_All_Models.lua to spawn NPCs from a given text file list Added: GrimZoneManager has been added to the GrimEngine, it provides a globally accessable utility object which NPC event callbacks can use e.g. Spawning an NPC from a script, at a specific location and marking it as unique (no duplicates of this type are allowed) npc = zoneManager:SpawnNPC({SPAWN_TYPE_ID=1234, SPAWN_LOC={-188.71, 2869.99, 0.34, 123}, SPAWN_UNIQUE=1}) e.g. Finding an NPC in the current zone npc = zoneManager:GetNPC({NAME="MyNPC"}) npc = zoneManager:GetNPC({ID=123}) The resulting npc object can then be normally used, e.g. npc:GetName(), npc:GetX() etc.. Updated: Temporary utility methods from the npc scripting class have been removed, some cleanups within the GrimEngine Fixed: A theoretical issue could arise, when a script would expose NPC objects in a global variable e.g. using zoneManager:GetNPC() - the script would have no knowledge if this NPC would have been deleted sometime in the future. Now, upon deleting an NPC, all script callback functions are iterated and any global var which references this NPC, are removed/nil'ed. This will still raise a normal scripting error if a function tries to access the global npc object variable, but it will not result in access violations (aka crash). Generally, this cannot happen if only NPC ids are exposed in global variables, and not their objects (which should never be done anyway, but now it should be safe...=p). ---- Revision: 859 Author: Yeahlight Date: 7:22:32 AM, Friday, January 18, 2013 Message: Addition: NPCs now scan their pathing node history for patterns of abuse. If an NPC feels it is being exploited, it will simply ignore the pathing system and pursue its target in a strait line Addition: Added an entity list validator to monitor itself for duplicate pointers, names and IDs Update: Mob movement is now much more efficient and node transitions are now perfectly timed. Before, a very short duration timer was utilized to make certain a mob did not overstep its destination, but this required many updates (5+) per second (mob movement requires the most CPU attention in the source) and mobs would still occasionally ghost beyond their destination from the client's perspective. Now, we make no more than two updates per second and the system accurately predicts when the NPC should make these updates, thus--no matter how long the timer's duration may be--the NPC is guaranteed to update their position the precise moment they reach their destination from the client's perspective. Not only does this new approach require 1/4th of the CPU's attention, but a mob's movements are now much more fluid than they were in the past Update: Underwater path finding (including surfacing and submerging) is now as smooth as it is on land Update: The memory footprint of the pathing node data has been cut in half. The estimated memory requirement for all 120 zones has been reduced from 8GB to less than 4GB Update: The zone explorer's path generator has been threaded and file creation times are a small fraction of what they were in the past Fix: Roamers that spawn outside of all roam boxes will choose the closest one Fix: Coin generation for an NPC's loot table no longer has a chance to underflow (wrap back around to 2^32 copper pieces) Fix: PCs removed during the loading process are now properly managed Fix: Visibility is now a requirement for the Velious corpse dragging agro Fix: Sense heading is now an uncapped skill Fix: Corpse names are now guaranteed to be unique ---- Revision: 858 Author: Yeahlight Date: 8:27:31 PM, Wednesday, January 09, 2013 Message: News: My five-year running list of missing features, corrections, bugs and miscellaneous notes about development is finally empty!! :) Addition: Full support for LD PCs has been added. A PC will go LD following a connection timeout, making an unauthorized zoning request, executing /q and any other form of disconnection not stemming from camping or authorized zoning. A LD PC will remain in the game for no less than thirty seconds and no more than five minutes (being in combat dictates how long you remain LD). Other PCs and NPCs may interact with a LD PC as if they were still connected to the game. LD PCs will continue to fight, auto-follow and cast on their hostile target if auto-attack was enabled prior to losing their connection Addition: Corpse dragging agro has been added to a small number of Velious zones. Dragging a corpse that is not your own in these zones will trigger frenzy agro regardless of your current faction standing with the NPCs. The only ways to safely transport corpses in these zones are to drag your own corpse, use corpse summoning spells or FD between summons; sneak + hide will *not* prevent corpse dragging agro! Please source ./db/zone.sql Update: Loose line of sight checks are now roughly 25% faster. Strict line of sight checks are now anywhere from 30 to 90% faster (the greater the distance between the two end points, the higher the speedup) Update: The PC disconnection process has been rewritten and now makes quite a bit more sense. The connection summary of a PC is also now much more thorough (reports on total Kbs, average Kbps, total packets and average packets per second) Update: Refactored and corrected many bugs in the entity list class. The life cycle (construction, processing and destruction) of all eight types of entities is now correct and all pointer integrity between these entities is ensured during destruction. The entity list also now prevents duplicate entries Update: Refactored and corrected many bugs in the client class Update: Refactored and corrected many bugs in the corpse class. Item / coin duplication exploits are no longer possible with corpses, as items / coin no longer coexist in multiple locations at the same time (including system memory and the database) Update: Invalid camp requests (e.g., forcing the client to camp faster than possible) will now result in link death Update: NPCs now leash after all potential targets are massively far away Update: Many, many unnecessary dynamic memory allocations have been removed from the source Update: Incoming and outgoing packet queues are now throttled (caps on processed and sent packets per server tick) Update: The range of periodic spawn position updates is now dictated by the PC's velocity potential. PCs capable of moving quickly will receive larger updates than slower PCs, thus it is now far less likely to observe any pathing anomalies when traveling at very high speeds Update: Added audible feedback (the ASCII character '\7') for all critical errors reported in the console Fix: #shownodes displays pathing nodes and roam boxes once again Fix: The zone's client list is no longer susceptible to race conditions Fix: Fishing, begging, alcohol tolerance and swimming are now uncapped skills (may reach 200 at level 1) Fix: Engaged GMs no longer answer training requests Fix: Faction feedback messages are now correct Fix: Logging out with a buff on the verge of fading no longer results in a permanent buff when logging back into the game Fix: Disengaged NPCs will now pause briefly before continuing their waypoint path Fix: The identify spell line no longer creates double lore text when the caster is the target of the spell ---- Revision: 857 Author: Harakiri Date: 4:31:11 PM, Wednesday, January 09, 2013 Message: Added: Patrol data for akanon - Clockwork XIIIB, Clockwork XVIIA, Clockwork XXA, clockwork cleaner, clockwork sweeper, a decaying gnome skeleton(s), obsolete model(s), snake(s) Added: The spawn location ID for different spawn groups of NPCs can now be used as a scripting filter to assign events to NPCs which spawn at a specific location, e.g. eventManager:AddListeners({SPAWN_LOC_ID={11095, 11096, 11098}, ZONE="akanon"},EVENT_ON_SPAWN,func.... For example, this can be utilized to assign the same patrol route to differently named NPCs which are just placeholders of eachother. Added: Command #gotowp - teleports targeted NPC to a specific waypoint on his current patrol. Updated: Reviewed all zones for proper indoor/outdoor settings, please source zone_JANUARY_2013.sql Added: SKIP_LOS property for waypoint navigation via GrimEngine scripting, e.g. npc:SetWPs( { LOC={-246.0, 1966.0, -122.1}, SKIP_LOS=1}, .... }) - will instruct the servers waypoint AI to force moving through nearby pathing nodes for navigation even when the waypoint is within LOS and could be directly moved to. Updated: Improved perl2grim converter syntax translation for specific perl functions. Added: Converted perl2grim event files for akanon, butcherblock, kaladima, crushbone, lfaydark, steamfont, cauldron and mistmoore Added: NPCs location properties have been exposed to GrimEngine scripting. Added: npc::TriggerSpawn has been added to GrimEngine scripting. Used to spawn NPCs of a specific type at a specific location. Added: npc::Kill has been added to GrimEngine scripting. Used to depop an npc without leaving a corpse. ---- Revision: 856 Author: Yeahlight Date: 4:38:40 AM, Monday, December 31, 2012 Message: Update: Rewrote and corrected the charmed PC logic. Charmed PCs now offer the exact same utility as charmed NPCs, including responding to all pet commands, auto-assisting the master and spell casting (charmed PCs only utilize the spell in the first gem slot, though) Fix: Fixed an issue with NPCs spinning indefinitely when responding to a PC's hail Fix: The min and max resist rates for spells are now implemented correctly Fix: Initial NPC spell casting now obeys range checks Fix: An NPC is now incapable of adding itself to its own hate list ---- Revision: 855 Author: Yeahlight Date: 2:02:19 AM, Thursday, December 27, 2012 Message: Addition: Added full support for /consent, /corpse, /who all friend, /surname, /feedback, /report, /bug, /duel and /decline. All non-guild PC commands are now handled properly Addition: Merchant NPCs will now occasionally pick up player-dropped items off the ground. Ooo!--a piece of candy! NPC AI is now complete Update: Rewrote and corrected the decay process of PC corpses. Please source ./db/player_corpses.sql Update: During the client connecting process, the delivery of those packets not related to the connecting process is delayed until the client is fully connected. This is a much better approach than simply dropping the packets Update: NPCs may now operate trigger switches (e.g., doors that open together at the same time) Update: The zone is now in control of the decision to make all undead NPCs posses the chaotic undead agro or not. Please source ./db/zone.sql Update: NPC spawn limits are now enforced Update: The entire spell file has been ported to the database. Please source ./db/spells.sql Update: Spell resists are now subject to min and max resist rates as defined by the spell Fix: Melee stuns now generate hate Fix: The database string escape function now actually works Fix: Attacking a pet will now place the mob on the master's hate list Fix: All channel messages received from the client are now ensured to be null-terminated to prevent buffer overflow attacks Fix: Raid-level NPCs are now far less aggressive with offensive spell casting Fix: Patrollers are now capable of recovering from--the extremely rare act of--falling through the ground Fix: Purely cosmetic switches (crates, camp fires, docks, etc.) are no longer operable. Please source ./db/doors.sql Fix: Merchants and bankers no longer answer frenzy agro requests made by other NPCs Fix: Extremely small NPCs no longer hop in place Fix: Instill doubt now deals kick damage ---- Revision: 854 Author: Yeahlight Date: 6:16:29 AM, Tuesday, December 18, 2012 Message: Update: Patrolling NPCs now stop and rotate when making significant changes in their heading Update: All of our zone geometry files have been regenerated and now only include critical zone geometry. The old files included doodad geometry, which was inflating collision detection costs and creating cosmetic problems for NPCs in areas with large numbers of doodads Update: The entire switch class (doors, triggers, lifts, etc.) has been rewritten and corrected. All of the door geometry has been collected from the client and loaded into the line of sight system, so NPCs will now open unlocked doors for themselves. Switches are now synchronized between the client and server, thus PCs will no longer observe switches in different states (e.g., some PCs observing a lift on the ground while others observe it in the air). Other notable corrections include the prevention of switches that are managed by other trigger switches from being operable, PCs can no longer spam click switches, teleportation switches that require a key now work properly and switches will now automatically close themselves. Please source ./db/doors_DECEMBER_2012.sql Fix: Rooted NPCs no longer flee Fix: NPCs now reference their entire hate list instead of their current target when making the decision to flee Fix: Corrected a rare issue in the line of sight system that was causing the algorithm to overstep the destination BSP leaf node. This error was capable of creating serious performance issues Fix: When making line of sight checks, a PC's location in space is no longer misrepresented due to its inability to send floating-point coordinates (e.g., the server believing a PC is standing on the wrong side of a wall) ---- Revision: 853 Author: Harakiri Date: 7:33:39 PM, Monday, December 10, 2012 Message: Added: New command #showwp to show an NPCs waypoints while ingame, use #showwp 0 to remove the display of WP for the currently targeted NPC Added: New option DEFAULT_RUN, while using SetWP from script e.g. npc:SetWPs({DEFAULT_RUN=1}, { { LOC={305.0, 659.0, -53.4}, .... }) Added: New zone filter for adding events for NPC, e.g. eventManager:AddListener("Guard Mystan","felwithea",EVENT_ON_SPAWN,Guard_Mystan_OnSpawn) will only assign the spawn event to Guard Mystan in zone felwithea - not in felwitheb where he also spawns. Alternative extended filter syntax: eventManager:AddListeners({NAME={"Infected Rat","Giant Rat"}, ZONE="kaladimb"},EVENT_ON_SPAWN,Giant_Rat_OnSpawn) assigns spawn event to 2 NPCs only in kaladimb Added: Patrol data for felwitheb: Guard Golyn, Guard Plage, Guard Spioko, Guard Tistan Added: Patrol data for gfaydark: Captain Silverwind, Faelin Bloodbriar, Guard Briarstorm, Guard Dayblaze, Guard Eaglesong, Guard Fayfield, Guard Marshmoor, Guard Moonwind, Guard Nitegazer, Guard Noonshadow, Guard Oakwillow, Guard Starstrike, Guard Sunblaze, Guard Tangleroot, Guard Treestrider, Guard Valewatcher, Lieutenant Leafstalker, a drunkard Added: Patrol data for kaladima: Byzar Bloodforge, Guard Adolar, Guard Adolmer, Guard Badmer, Guard Dinamin, Guard Kathur, Guard Koranin, Guard Kindor, Guard Ninadek Added: Patrol data for kaladimb: Diggins, Giant/Infected Rat, Guard Ainamar, Guard Dalammer, Guard Dalthur, Guard Doradek, Guard Kaldolar Updated: NPCs will now be only interrupted in their patrols through "Hail" when they actually have an EVENT_ON_SAY defined. ---- Revision: 852 Author: Harakiri Date: 5:49:44 PM, Sunday, December 02, 2012 Message: Added: The waypoint system can now be scripted through the GrimEngine. Added: New lua method npc:SetWPs to set a list of waypoints and properties for each WP - example: {LOC={-675.0, -60.0, -10.2}, RUN=1 }, {LOC={-672.0, 276.0, -10.2}, DELAY=1000*60}, LOC={-675.0, -60.0, -10.2}, HEADING=45}}. Added: New lua method npc:ExecWPAction - currently supports parameters WP_ACTION_RESUME and WP_ACTION_STOP to start/continue or stop WP movement. Added: New Event EventOnArriveWP - sent to the scripting engine when an NPC arrives at a desired waypoint, further actions can be performed from there (e.g. dropping items, or other npc related actions) Added: Patrol data for felwithea, Guards now patrol the city of the high elves once again! ---- Revision: 851 Author: Yeahlight Date: 8:34:07 AM, Saturday, December 01, 2012 Message: Addition: Support for fleeing NPCs has returned to the source. Non-pet, non-undead-agro NPCs will start to consider fleeing from combat when their HP is low (currently set at 30%). Any green NPC capable of fleeing will not hesitate to do so. Any blue NPC capable of fleeing will do so when its target has a significant edge on HP percentage (currently set at 2.5:1) and when no other NPCs on the same faction in the surrounding area have the NPC's target on their hate list. Any white or higher NPCs will not flee (I need confirmation on this). A fleeing NPC will continue to negotiation their fleeing status and terminate the flee if their HP is restored. A fleeing NPC right at the flee HP threshold will run at full speed and will lose speed in a linear fashion as their HP is decreased (30% HP = full speed, 15% HP = half speed, 7.5% HP = quarter speed, etc.). A fleeing NPC affected by a significant movement speed debuff will flee in place (it will be motionless). Please source ./db/spawn_locations.sql Addition: Support for roaming NPCs has returned to the source. If an NPC is flagged as a roamer and spawns inside of a roam box, the NPC will chose a random location no closer to its current location than 33% of the roam box's diagonal. The NPC will roam back and forth between these two locations indefinitely. Upon arriving at each location, the NPC will pause for a significant length of time (60000ms). Please source ./db/roam_boxes.sql Update: The pathing system will now rarely fail to select the ideal starting node Update: During the bulk spawn position update routine, PCs will no longer receive a spawn position update for a nearby mob that recently (within the last 6000ms) moved. This fixes the occasional jitter observed in a mob's first few steps of moving Update: The zone explorer will no longer proceed with building a zone's optimal path file if one ore more pathing nodes have zero connections ---- Revision: 850 Author: Yeahlight Date: 9:11:13 PM, Saturday, November 24, 2012 Message: Update: The work for NPCs returning home has been corrected and added back to the source. When an engaged NPC's hate list is cleared, the NPC will wait for a random duration of time before returning home. Once the NPC starts heading home, all future disengaging activities (FD, memory blur, etc.) will not trigger the NPC's random wait time; the NPC resumes walking home immediately. Once the NPC arrives at their home location, the NPC's hate list is completely wiped. NPCs with escape spells will refrain from using them if they are close to their home location Update: Spawn position updates are now bundled and sent in bulk to each PC at the end of each server tick Update: All custom data containers (list, queue, etc.) have been replaced with their Standard Template Library equivalents Update: The dynamic memory allocation tracker (debugger) is now much more thorough. Instead of simply tracking orphaned (leaked) memory, this new allocation tracker has the ability to prevent and report unauthorized deallocations, including the deallocation of memory addresses that are not outstanding (were never allocated) and those deallocations of the incorrect type (array vs. non-array space). This new allocation tracker is also now completely thread-safe. Error reports are generated in the root directory Update: Added a line of sight stepping mod to the database for each zone. Smaller stepping mods produce more accurate strict line of sight checks (zones with ledges / cliffs in pathing areas require very accurate checks) but also require more computational overhead. Please source ./db/zones.sql Update: Implemented a lighter mutex (critical section) solution Fix: Waypoint navigation is now as smooth as the normal pathing navigation Fix: Default agro and assist ranges are now much more sensible Fix: Corrected an oversight in the packet queue destruction process that was occasionally leading to a crash Fix: Corrected dozens of heap corruption opportunities ---- Revision: 849 Author: Yeahlight Date: 5:46:50 AM, Sunday, November 11, 2012 Message: Addition: Added an NPC waypoint system (quest movement, patrolling and roaming). The waypoint system sits on top of the pathing AI system, so instead of defining potentially hundreds of patrolling locations, an NPC can now patrol an entire city with only a handful of defined waypoint locations Update: Promoted the pathing AI system from the NPC class to the mob class so PCs can utilize it when feared, charmed, etc. Update: PC fear movement has been completely rewritten and they now take advantage of pathing nodes just like NPCs Update: The presence of environmental data (water, lava, freezing water and PvP arenas) has been preprocessed for each zone, thus time is no longer wasted when iterating through a zone's environmental BSP tree if no environmental data exists Fix: NPCs will now dive into water when a path demands it ---- Revision: 848 Author: Yeahlight Date: 3:02:08 AM, Wednesday, October 31, 2012 Message: Addition: A dedicated client list has been added to speedup entity list iterations that only concern PCs (position updates, channel messages, armor changes, etc.) Update: Fear pathing has returned to the source for NPCs. Support for PCs will be in the next revision Update: Major improvements and optimizations have been made to the NPC AI pathing system Update: PCs now only receive critical packets during the connecting stage. Once the PC is fully connected, they will once again receive non-critical information (chat message, position updates, etc.) Fix: Added constructors (initializers) to our non-C structures because the C++ initialization operator only works on POD structures Fix: A handful of heap corruptions have been removed ---- Revision: 847 Author: Yeahlight Date: 1:49:24 AM, Wednesday, October 17, 2012 Message: Addition: Bulk optimal-path processing has been added to the zone explorer. This new approach is roughly 30 times faster than our previous implementation (a zone with 400 nodes now only requires five minutes of CPU time instead of 2.5 hours) Update: Path traversing has been added back to the source. As before, all possible optimal paths are cached for each zone. The current implementation is mostly complete, but there are still a few minor issues (mostly cosmetic) Update: NPC variable z-axis offsets have been removed. These were causing major pathing issues for large NPCs in small spaces. All non-waterbound NPCs now have the same z-axis offset Fix: A few heap corruptions have been corrected ---- Revision: 846 Author: Yeahlight Date: 12:15:43 AM, Tuesday, October 02, 2012 Message: Update: The zone explorer has been expanded to handle placement and manipulation of pathing nodes Update: The unique name generator has been rewritten to support scenarios where more than 100 entities share the same base name Fix: A number of scenarios where memcpy() was wrongfully utilized to copy strings have been corrected ---- Revision: 845 Author: Yeahlight Date: 8:26:27 AM, Wednesday, September 26, 2012 Message: Update: The NPC spell casting system has been finalized. NPCs now buff themselves and other NPC allies, broadcast heal requests and make somewhat intelligent offensive / defensive spell casting decisions Update: NPC movement updates no longer rely on critical timing (assuming a precise amount of time has elapsed since the last update). NPC movement calculations now consider the actual time elapsed since the last update to create exceptionally fluid updates, even for remote connections Fix: Spell recast times are now enforced for NPCs Fix: Summoned pets now use the correct name suffix when summoned by an NPC ---- Revision: 844 Author: Yeahlight Date: 1:32:21 AM, Saturday, September 22, 2012 Message: Addition: NPC spell casting AI has been introduced back to the source. The current implementation is by no means final or even remotely correct Addition: Social agro has been corrected and added back to the source. It is important to note that a mob's visibility is NOT a requirement for an NPC to answer a social agro request (invisibility pulling [exploiting] is not possible), and it is also not possible for an NPC to immediately trigger its own social agro call when answering a social agro request Update: NPCs without a defined mana pool now derive one based on class and level Update: NPC frenzy agro and assist range modifiers have been granted to zones. Please source ./db/zone.sql Update: The faction rank enumerations have been reordered and now make logical sense Fix: Several scenarios where a PC's current race (via illusions) was referenced instead of their actual race have been corrected Fix: NPCs no longer teleport to the floor when pushed while underwater Fix: The line of sight requirement to begin channeling a spell in dungeons is now enforced for all mobs ---- Revision: 843 Author: Yeahlight Date: 6:06:07 AM, Wednesday, September 12, 2012 Message: Update: The entire faction system has been rewritten and corrected. All of the faction data is now cached in arrays, thus lookup times are now constant instead of making database calls or iterating through lists. A player's faction standings have been moved from a dedicated table in the database to the character's player profile. The new faction system is now as small as it can possibly get, many times faster than before and much more intuitive to use Update: NPC frenzy agro has been rewritten and added back to the source. NPC frenzy agro is a prime example of the benefits obtained through the binary space partitioning (BSP) system introduced a few months ago. While a significant speedup was obtained when introducing the BSP system into areas such as AoE spells, the benefits were typically superficial (the events do not occur often enough to actually matter); however, NPC frenzy agro checks are guaranteed to occur at least 15,000 times per second when all zones are loaded. Without the BSP system, a zone with 250 NPCs requires 14,000 ms to process 1,000,000 frenzy agro checks for *one* NPC. With the BSP system, the same zone requires only 180 ms to process 1,000,000 frenzy agro checks for the same NPC. For the average zone, the BSP system grants a remarkable speedup of 77.8 for NPC frenzy agro checks (the resolution times are 98.71% faster) Update: NPCs now have default frenzy and assist ranges based on race and size Update: Charm now generates additional hate per tic towards the master Update: When NPCs attack an eye of zomm, the eye of zomm's owner is now automatically added to the NPC's hate list Fix: Situational spells (assaulting beneficial spells, e.g. cancel magic, lull, etc.) no longer require line of sight in dungeons ---- Revision: 842 Author: Yeahlight Date: 8:59:00 PM, Thursday, September 06, 2012 Message: Addition: Added an activated skill (backstab, forage, hide, flying kick, etc.) validator. The validator ensures the PC has access to the skill and sufficient time has passed since the last usage of said skill. The validator fully supports shared activated skills (e.g., flying kick, tail rake, eagle strike, etc.) and slam (bash with no skill in bash) Addition: Added the ROG's evasion ability. Hiding while auto-attack is disengaged has a chance to reduce the ROG's current hate on each participating hate list Addition: Added a #spellchance pseudo-command to calculate a PC's spell landing rate on its target Addition: Added the correct PvE spell resist formula Update: A PC's incoming packet queue (client -> server) is no longer processed on demand. The incoming packet queue is now processed in 100ms intervals (arguably still "on demand" processing), but the interval timer is reset each time a new packet arrives (ACK responses do not trigger this behavior), thus if a break in communication does not occur (the PC is spamming the server), the PC's requests will never be answered and the PC will be dropped Update: The entity list tick rate (number of processing iterations per second) is now set to an optimally efficient value (20 instead of 100). For best results, ensure all timers are a multiple of 50ms Update: Refactored and corrected the feign death skill. A skill of 100 grants a 95% success rate and no additional points beyond 100 grant the PC any benefit. Receiving invisibility during or immediately after terminating feign death (see: Circlet of Shadow) fools an NPC into believing you are still feigning death for the duration of the invisibility (a DoT's tick will cancel this trickery for only the NPC affected by the DoT). A PC is now removed from all hate lists after feigning death for two minutes Update: Refactored and corrected the hide, sneak, sense traps, disarm traps, beg, instill doubt, pick pockets, forage and fishing skills. All activated skills are now complete Update: The PC spawn appearance update routine has been completely rewritten Update: The "Am I visible to you?" routine has been corrected Fix: A PC's invisibility appearance is now properly managed Fix: Harm Touch and Lay on Hands can no longer fizzle Fix: Spawn updates for PC-controlled NPCs are now properly managed Fix: The forced removal of bind sight (the target dies) is now properly managed Fix: Weapon projectiles are now synchronized with the client Fix: Eyes of Zomm may no longer be buffed. Eyes of Zomm may also now fly in the Plane of Sky Fix: Fire giants are now belly casters Fix: NPC z-axis offsets are now capped to prevent scenarios where an NPC is so large that a PC is unable to attack them ---- Revision: 841 Author: Yeahlight Date: 5:40:12 AM, Tuesday, August 28, 2012 Message: Addition: Added full support for disarm. An NPC may be disarmed if their worn weapons are droppable and non-magical, all of which will fall to the ground under the NPC. The client is in charge of disarming itself after receiving a disarm request, so the server does not need to do much work when disarming a PC Addition: Added a #royalrumble pseudo-command to ignite a zone-wide fight between all of the NPCs. This is used to benchmark many different areas of the source Update: The spawn position update routine has been redesigned. The previous implementation only updated nearby PCs with a mob's movement changes and relied on occasional zone-wide bulk updates to inform the rest of the zone about a mob's current position. While this approach works reasonably well, inconsistencies between the client and the server surface rather quickly when the entire zone starts moving around, which is especially annoying for tracking classes moving at high speeds. Now, *all* movement updates are broadcast to every PC in the zone in real time. With a zone of 250 NPCs all chaotically running around at once, a client requires roughly 115kbps (14,720 bytes/sec) to stay in sync. While this communication requirement is fairly high, it is important to note that updates are only sent when movement changes occur; if no mobs are moving in the zone, then PCs no longer receive any position updates. It is not feasible to know an average case for this new communication requirement at this time, but I would be surprised if it was higher than 4kbps (512 bytes/sec) in crowded dungeons Update: The bind wound and apply poison routines have been refactored Fix: The wrong item type was being referenced in many item search routines Fix: The item removal routine for NPCs has been simplified and fixed. The inventory iterator was previously being corrupted Fix: Identified the correct way the client differentiates between magical and non-magical items Fix: There is now a range associated with critically low HP agro to prevent trivial ping-pong exploits Fix: Projectiles are now responsible for the weapon and ammo data. Previously, weapon and ammo data was pulled from the attacker's inventory on collision, which opened the door for exploit opportunities and bugs Fix: Enrage now properly terminates Fix: Corrected an uncommon crash when an NPC's destroyed inventory pointer was referenced prior to the NPC being deallocated Fix: Dropped objects are now removed from the zone's object list after decaying ---- Revision: 840 Author: Harakiri Date: 6:11:49 PM, Wednesday, August 22, 2012 Message: Added: Initial commit of new framework for creating non-actor scripts, scriptable Scenes are now part of the GrimEngine! Scenes can be created from a script with eventManager:RegisterScene("sceneName",sceneStartFunc,sceneStopFunc). Added: NPCs may now start complex scenes using eventManager:StartScene("sceneName"), e.g. during a conversation with an NPC or an item turn in - an NPC may now start zone events similar to ring of fire or 10th ring quest; GMs will soon be able to start scenes too Added: Sample Scene implementation for the GrimTool for testing purposes, integration into the zone server will soon follow. Fixed: Wake of Karana will now only stop raining, not snowing and only of it is active. Updated: Added correct message for client when a door is locked. Added: Some npc tables for whitelisting, to disable specific NPCs. ---- Revision: 839 Author: Yeahlight Date: 5:34:12 AM, Saturday, August 18, 2012 Message: Addition: Discipline reuse time messages have been added Addition: The entire NPC data table has been loaded into shared memory and all zones now have instant access to every NPC in the game. Also, NPC lookup times are now constant instead of iterating through lists Update: Unified *all* hit chance calculations under the same routine and *all* damage calculations under two routines (one for melee attacks and one for activated skills, but they both use the same damage interval selection routine) Update: Rewrote and corrected the critical hit routine. WARs have passive critical hits after level 11, PALs have passive critical hits to undead NPCs when using the holy forge discipline, RNGs have passive critical hits for archery after a skill of 65 and ROGs have passive critical hits with throwing objects. WARs also have crippling blows when berserking (a crippling blow also ministuns) and ROGs have deadly strikes when throwing objects from behind. ROGs can also assassinate some humanoid NPCs with deadly strikes at level 60 Update: All NPC and PC activated combat skills have been corrected and returned to the source. Researching and rewriting these activated combat skills took about sixty hours, so there is far too much information to list here, but the following are some key notes about these abilities: Slam is capped at one point of damage; slam/bash have a chance to stun for 1500ms; ROGs receive double backstab at level 55; ROGs can assassinate some humanoid NPCs with backstab at level 60; a botched backstab attempt results in a single melee attack with the primary weapon (this attack cannot trigger procs or double attack opportunities); PC WARs get stun kick at level 55; thunder kick, silentfist and ashen hand MNK disciplines expire after their respective combat abilities deal damage; the MNK silentfist discipline has a good chance to stun the target for 1500ms; the MNK ashen hand discipline has a chance to slay some humanoid NPCs; and activated combat skills (excluding backstab) now generate a large amount of push Update: Correctly identified all of the mob animations available to us Update: Identified the animation speed in the animation structure Update: Simplified the melee immunity checking process Update: Rewrote the melee range negotiation routine. All underwater combat now requires 3D melee range checks (even for NPCs) and PCs now have a z-axis melee range restriction Fix: A WAR's passive mitigation bonus now only applies to PCs Fix: A PC's connected status is no longer a requirement for saving their player profile Fix: The cold-based damage shields are now properly handled Fix: ATK bonuses from item effects are now included in the ATK calculations Fix: Normal pets (not single-target or single-attack pets) now have taunt enabled by default Fix: An NPC's proxy hate modifier range is now extended slightly beyond the NPC's melee range to prevent scenarios where a tank is pushed out of proxy hate range and the NPC immediately bolts towards another mob since the tank's proxy hate modifier has been lost Fix: The minimum reuse time for any discipline is now 3:54 ---- Revision: 838 Author: Yeahlight Date: 12:52:57 AM, Wednesday, August 08, 2012 Message: Addition: Added a fast, legitimate, normal (Gaussian [bell-shaped]) distribution random number generator. Instead of exploiting the Central Limit Theorem, we now use the proper approach (Box–Muller transform). With this approach, we now have full control over the distribution with regards to mean and standard deviation Addition: Added the #mitigation pseudo-command to dump 100,000 successful melee attacks to and from a PC's target to file for parsing Addition: Added a default raw armor AC formula for NPCs that have nothing defined in the database Update: The damage calculation routine has been completely rewritten. All mobs now use the same routine and it is roughly one-fourth its previous size. This new approach also adds support for increasing an NPC's melee damage through equipped weapons. An NPC will evaluate its potential damage output with and without the use of the weapon in hand and choose the more favorable outcome. Since NPCs do not adhere to a weapon's delay, an NPC's adjusted damage output is capped at 14 weapon damage (not 14 melee damage, but 14 weapon damage, e.g. a weighted axe is capped at 14/150 instead of 45/150). A PC's weapon damage (again, not melee damage) is now capped at 10 for levels 1 to 9 and 14 for levels 10 to 19. The melee damage distributions are now legitimately normal (Gaussian [bell-shaped]). As mitigation AC overwhelms efficiency ATK, the distribution is shifted to the left (the mean is decreased), and as efficiency ATK overwhelms mitigation AC, the distribution is shifted to the right (the mean is increased). Since we cannot have a damage interval less than one or greater than twenty (ignoring a WAR's passive mitigation bonus), peaks form at the distribution's edges as overflow is experienced (if you look at any legitimate mitigation parse, this behavior is obvious). Also, PCs now have the so-called "magic number" (2 * weapon damage + damage bonus) favoritism in their damage distributions. This favorite damage value is assigned to the nearest damage interval to properly modify its final outcome with disciplines Update: Raw item AC is now hard capped at 289 (385 for INT casters) for all level 60 PCs (the cap is currently linear from levels 1 to 60); there are *no* soft AC caps up through Velious Update: All pet and owner checks are now fully recursive during the NPC death and rewards routines. Uncommon scenarios such as killing blows landed by a pet of a pet preventing the creation of an NPC's corpse will no longer occur. Also, a pet's damage will no longer be double-counted when determining the group to receive rewards (exp, first loot rights, etc.) Update: Abandoned the 50/50 pet experience penalty and replaced it with the more favorable rule. Unlike the 50/50 rule (do more than half of the damage or receive half of the experience), a PC or group must only deal one point of damage to receive full experience, otherwise they only receive 25% experience Update: Every single memory allocation is now zero'ed out prior to use Fix: CHA is now referenced to determine an NPC's flurry and rampage bonus proc rates (yes, that's right--CHA) Fix: Corrected the two-hander damage bonus formulas ---- Revision: 837 Author: Yeahlight Date: 7:09:41 AM, Friday, August 03, 2012 Message: Update: Rewrote the aggressive line of sight algorithm. This new approach is far more reliable than the previous and it supports our recent changes to a mob's z-axis coordinate (NPC offsets) Update: Rewrote the locate ground algorithm. The old approach was occasionally failing us in several scenarios Update: Simplified the process of removing a mob from an NPC's rampage list Update: The PC level change routine has been rewritten and corrected. PCs will no longer receive more than 300 training points (60 levels * 5 points) in their entire lifetime, regardless of how many DINGs they may experience. PCs will also now see the correct amount of training points available when visiting a GM after leveling up in the same zone Update: All of the skill increase formulas for non-tradeskills have been unified under the same routine. Each skill can still have its own formula or be grouped with other similar skills Update: All skill increase opportunities (swimming, channeling, specialize alteration, offense, dual wield, etc.) are now firing under the correct scenarios (melee combat skills require a non-PC, blue-con target) Update: The relative position functions (in field of view, is behind target, etc.) now utilize the sine and cosine lookup tables and are roughly 90% faster Update: Rewrote and corrected the GM training routine Fix: Feedback for missing keys has returned Fix: NPCs will no longer equip or drop no-drop items received from PCs Fix: A PC's starting skill values are no longer overwritten during the character creation process Fix: NPC armor tint sets are no longer lost when updating an NPC's worn inventory Fix: A server's representation of a door once again closes after a brief period of time Fix: Reduced the PC timeout duration to agree with the client (30secs) Fix: It is now possible to raise a tradeskill to 200+ at level 1, and only one tradeskill is permitted to break the 200 skill cap Fix: The skill limitation of specialized casting skills (only one may break the 50 skill cap) is now correctly enforced ---- Revision: 836 Author: Harakiri Date: 6:20:40 PM, Tuesday, July 31, 2012 Message: Updated: The quest turnin logic for the lua engine has been overhauled and now matches the vanilla behaviour exactly. Instead of verifying the completion of a quest once for every finished trade from a player, a quest is now verified up to 4 times depending on the number of used trade slots for each item. This makes it possible to complete a quest which only requires 1 item, up to 4 times with a single trade session. To additionally emulate the classic behaviour, any quantity above 1 for stacked items in a single trade slot will be ignored. That means putting 20 stacked bone chips in trade slot 1 will not complete the quest 20 times. Additionally this change brings true multiquesting to eqc, for example if a quest requires 1 bone chip, 1 rusty sword and 1 leather belt - a player (or more) is able to hand in each item one by one, and on the third completed trade session - the npc will regard the quest as finished and will remove the previously traded items from his inventory. (To the best of my knowledge, this is another EQC first, since this has not been implemented on any other servers). Updated: Items given to NPCs are now memorized, and marked as traded. They are automatically removed if a lua item event regards a quest as completed. Added: New command #stats trade - shows all items given to an npc by a player. Added: Perl2Grim converted events/quests for neriakc and kaladimb. Added: Opcode related to client trading, when an NPC is busy. Updated: Perl2Grim quest converter now handles multiple conditions better. ---- Revision: 835 Author: Harakiri Date: 7:23:54 AM, Friday, July 27, 2012 Message: Added: Exposed EQC random implementation to the lua scripting interface, available with 3 overloads - grim.random(low,high) grim.random(high), grim.random({1...n}) Added: Massively improved the perl2grim converter, which converts perl to lua quests. All quests of most zones should be convertible now. Added: Sample converted perl2grim files for felwithea,felwitheb and gfaydark. Updated: Item rewards from lua quests will now no longer put the item on the players cursor but into a free inventory slot. Updated: Added npc script method npc:RewardMoney(player,cp,sp,gp,pp) - additionally changed the script API for rewarding an item to a player it is now npc:RewardItem(player,itemID,itemCharges). Added: New command #grimshowtrigger - requires an NPC as target - will show all keywords/phrases the npc will react to. Additionally, it will also show all item triggers the npc will react to upon turning items in. This obviously only works for the new lua event system because we have control over each script from the servers core. Updated: Various improvements to the GrimEngine! ---- Revision: 834 Author: Yeahlight Date: 7:29:43 AM, Monday, July 23, 2012 Message: Addition: Added support for water bound creatures (when I speak of "water," I am referring to all liquids, including lava and freezing water). Water bound creatures are never allowed to leave a body of water and they may only attack or be attacked when its target is also under water. A water bound creature will simply overlook mobs on its hate list when they are on land. Also, all water bound creatures have a faction level of indifferent from land Addition: Added support for PC combat fatigue penalties (the stat penalties were matched in the past, but never actually applied to the PC) Update: The NPC pathing system has been expanded to include entering and exiting water. This new approach does not require any special pathing nodes and it permits NPCs to travel in three dimensions under water without the risk of clipping through the floor Update: Updating a mob's environmental location flags (entering water, leaving lava, entering a PvP arena, etc.) now only occurs when the mob actually changes locations Update: Projectile collision ranges have been reduced to agree with the client Update: Identified the gravity strength field in the zone entry structure Fix: A handful of oversights with the attack permission rules (mostly with PC pets) have been fixed Fix: Proximity agro is now properly implemented ---- Revision: 833 Author: Harakiri Date: 6:53:32 PM, Sunday, July 22, 2012 Message: Added: New util Perl2Grim - converts NPC behavior/quest files from the old perl system to the new lua GrimEngine system/syntax. It currently is able to convert most of the quest which consist of generic response events (EVENT_SAY), item turn ins (EVENT_ITEM), Aggro and others. Since "Only perl can parse Perl" is spot on statement, the util is also written in perl to create the lua output =p Sample Output http://pastebin.com/LNfNzUKY Added: All event callbacks for the lua engine now follow the same method signature, e.g. function myFunc(npc,event) - where event is a specific type of the appropriate event class. This enables us to add more features to a given event, without creating any incompatibilities in existing scripts. Updated: Implemented EventOnSay with scriptable methods GetMessage() GetLanguage() GetClient() and HasMessage(), these can now be used from lua. E.g. if (event:HasMessage("hail")) then ... Updated: Implemented EventOnItemsReceived with scriptable methods Get(Copper,Silver,Gold,Platinum)() GetClient() and HasItems(..), these can now be used from lua. E.g. if (e:HasItems({[13073]=4})) then (-- Bone Chips x 4) or e:HasItems(13599,18780) (-- 1x pie, 1x note) Updated: Implemented EventOnSpawn Updated: Cleaned up GrimEngine event dispatching, reduced code through inheritance of different event types. Added: The player (client) is now exposed to the lua scripting and can be used with the currently existing event types. Added: Command #grimreload - Reloads all template scripts and npc behaviors Added: Created testcase for reloading the script engine within the grimtool ---- Revision: 832 Author: Harakiri Date: 5:32:09 PM, Tuesday, July 17, 2012 Message: Updated: Removed limitation that a scripts file name dictates the NPC name it applies to. The lua script engine now allows unlimited behaviour and event definition for different NPCs in one script file. This allows for sharing of variables/settings between NPCs event listeners, so NPCs can now directly "communicate" with each other in a lua script. Added: Template mechanism for adding event listeners to NPCs. That means one specific event listener function (example when an NPC is aggroed) can now be automatically used by differently named NPCs. Example: AddListeners({RACE=ORC},EVENT_ON_Spawn,GenericOrcAggroFunction) - this will add the default lua function "GenericOrcAggroFunction" to all NPCs of race = ORC - it is no longer required to write a specific function for each orc (orc pawn, orc oracle etc) Added: Adding event listeners by the template mechanism initially allows filtering npcs by the following attributes: NAME, RACE, CLASS, ID, FACTION. The states can be combined, e.g. AddListeners({RACE=HUMAN, CLASS=WARRIOR},... ) will only add the listeners to NPCs which are of race human AND class warrior. Added: Chaining of multiple attributes is possible, e.g. AddListeners({ NAME={Assa Leafwind, Banker Tintal} },... will apply the listener to these two NPCs. Added: Added pattern matching and exclude filters for template listerns, e.g. AddListeners( { NAME_PATTERN={"Guard*"}, NAME_EXCLUDE="Guard Legver" } , EVENT_ON_SAY , LuaFunc) will assign the specific script function to all NPCs whose name starts with "Guard ..." except to "Guard Legver". This should greatly reduce duplicate logic used for scripting NPCs. Added: GrimTool has been updated with a memory test function, to verify that no leak exists after adding/dispatching/removing event listeners. ---- Revision: 831 Author: Yeahlight Date: 7:16:39 AM, Sunday, July 15, 2012 Message: Addition: Added two new pseudo-commands #hate and #rampage to dump an NPC's hate and rampage lists Update: NPC target evaluation now considers the current HP level of each mob. When a mob reaches critically low HP, its current hate value is enhanced by an enormous static amount (the actual hate value is not modified). The only ways to overcome low HP agro are to heal the mob or have another mob with more base hate enter the critically low HP region Update: The NPC database table now utilizes level variances. Instead of ten individual records for an NPC with a level range of 40 to 49, we may now join all of these records together. An NPC's stats within its record are now assumed to be the stats for its maximum level, thus its stats are uniformly reduced when its selected level is less than its maximum level. Please source ./db/npcs_JULY_2012.rar once again Update: The rampage list has been reworked. See the discussion for revision #829 for details Fix: Numerous division by floating-point zero/INF oversights have been corrected in the line of sight system Fix: Corrected a large computational choking point within the hate list system Fix: One-shotting an NPC no longer disqualifies the PC from rewards ---- Revision: 830 Author: Yeahlight Date: 2:14:08 AM, Friday, July 13, 2012 Message: Addition: Added the zone experience modifiers to the database. Please source ./db/zone.sql Addition: Added support for NPC non-magical melee immunity Update: When an NPC is not engaged, a debuff will no longer generate hate (unless the debuff includes a hate modifier). In this scenario, an NPC will still chase the caster upon receiving the debuff, but stealing agro away from the caster is now trivial (assuming no additional debuffs are applied by the caster) Update: The PC and NPC damage reception routines have been completely rewritten and optimized Update: The hit chance routine has been completely rewritten and optimized. Avoidance AC and accuracy ATK are now properly utilized Update: Monks level 30 and beyond now have magical fists; all pets *spell* level 12 and beyond now have magical attacks; and all non-pet NPCs have magical attacks (prevents wisp charming exploits) Update: The act of sitting now greatly enhances the amount of hate calculated by an NPC during target evaluation (the actual hate value is not modified) Update: As the distance between a mob and an NPC increases, the amount of hate calculated by an NPC during target evaluation decreases for the mob (the actual hate value is not modified). This is known as "proximity agro," and it makes such things as CH chains possible (if a cleric in the CH chain decided to run into the NPC's melee range, that cleric would most likely be smashed into the ground, but they are generally safe at a distance) Fix: Damage shields are now completely neutral forms of damage, meaning no mob receives credit for the damage and no hate is generated from them. If an NPC is slain by just damage shield damage, it will not grant rewards (exp, faction, etc.) or leave behind a corpse Fix: Damage from damage shields no longer triggers other damage shields Fix: Ranged attacks can no longer be blocked, parried or riposted Fix: Divine intervention checks are now guaranteed to be made on the killing blow Fix: Casters can no longer break roots on self with self-inflicted nukes Fix: Memorized spells are now wiped upon death Fix: The damage evasion checks (dodge, block, parry and riposte) are now much more accurate Fix: Summoned pets that are not owned by any class in the spell file (e.g., Manifest Elements) are now dual wielding when appropriate ---- Revision: 829 Author: Yeahlight Date: 12:56:45 PM, Thursday, July 05, 2012 Message: Addition: Added support for NPC range attacks. NPCs may now be assigned a specific range weapon (or throwing object) and ammo. An NPC will make range attacks only when its target is outside of melee range. When switching between range and melee attack modes, an NPC's weapon textures are updated as such. Since the NPCs are firing actual projectiles, mobs other than their intended targets may be struck, but other NPCs are willing to forgive them. ) Addition: Rampage has been corrected and added back to the source. Rampage allows an NPC to attack an additional target with a single round of attacks and it is governed by the following rules: The rampage target is chosen with respect to order of engagement (favoring those who engaged the NPC first); the rampage target can never be the NPC's current target; rampage candidates who are FD are overlooked; rampage has a reach significantly larger than max attack range, but will overlook candidates outside of its reach; rampage attacks cannot be riposted; rampage is a proc and--like all procs--cannot be made less common by slowing the mob (this only increases the chance of the proc triggering), but can be made less common by debuffing the NPC's dexterity; and an NPC's rampage list is indexed by entity name and it does not reset until the NPC fully resets (memblur / goes home), which means zoning, camping and even death will NOT remove you from the list! Addition: Added a spell table to the database for additional spell data that is absent from the spell file Addition: PC WARs now have passive triple attack at level 60, which only fires from their main hand attacks after making a successful double attack attempt. The chance of performing a triple attack is roughly 6% Update: NPCs that can equip items will now search their entire inventory for the best available haste item to use Update: Hate generated by melee attacks is now based on threat potential instead of raw damage, so a critical hit, missed attack, parried attack, etc. all generate the same amount of hate. Generally speaking, the hate generated by a weapon is derived by its damage bonus and damage value, thus off-hand attacks generate significantly less hate than main-hand ones (there is no off-hand damage bonus). As such, two-handed weapons typically generate more hate than dual wielding. Also, ranged attacks do not generate a significant amount of hate. Fix: There is now an inherit delay when repoping the zone to prevent issues with the unique name generator Fix: The NPC inventory lists no longer leak memory ---- Revision: 828 Author: Yeahlight Date: 8:12:38 AM, Monday, July 02, 2012 Message: Addition: NPC passive proc effects and spell sets are now loaded from the database Addition: NPC and PCs now display their light sources to other PCs in the zone Addition: Added the 'spell' category to #stats to inspect a mob's current spell lineup Update: Moved pets into the NPC table. Please source ./db/npcs_JULY_2012.rar Update: All NPCs will now equip items from their inventory, but only those NPCs below level 55 will actually be awarded with attributes and the opportunity to dual wield. The only exception to this rule are weapon procs, which are now available to all NPCs. In short, raid-level NPCs will once again wield their weapons (when appropriate) ---- Revision: 827 Author: Harakiri Date: 8:36:40 PM, Sunday, July 01, 2012 Message: Added: Implemented new scriptable AI behaviour engine using Lua 5.2 as backend. The GrimEngine (working title) was initially written to provide an easier interface for more difficult quests/tasks which would be very hard to realize with the existing perl system. The script engine has been designed as module, therefor it is decoupled from the server code and allows for standalone applications to utilize it (e.g. desktop clients which can implement+test behaviour scripts). The overhead of using Lua is very small (with all bindings the zone binary only increases by less than 200k, this includes the whole lua vm), Lua wins not only by size but also by speed on most functions (http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=lua&lang2=perl). Additionally, since the engine is implemented using callbacks (e.g. you can name your functions as you like and the server will call it) - the server core "knows" if an NPC has a specific method for an event and does not need to query the lua vm blindly to check if a binding exists in contrast to perl, thus no unneeded overhead. Sample benchmarks for the GrimEngine : 10000 dispatched sample events for 10k different NPCs need about 30ms on a 2 year old core2duo (the time depends on the complexity of the lua script obviously) Added: The GrimEngine provides unlimited callbacks for events, script designers will be able to add as many methods for events they need e.g. eventManager:AddEventListener(npc,EVENT_ON_ITEMS_RECEIVED,OnCrushboneBeltTurnin) eventManager:AddEventListener(npc,EVENT_ON_ITEMS_RECEIVED,OnGnollFangTurnIn). When such an event is dispatched by the server, all dedicated methods are called with the specific Event as argument. E.g. EventOnItemsReceived provides GetCopper()/Silver etc HasItems(itemID1,itemID2) to quickly gather any needed data for further evaluation. Added: The GrimEngine allows for easily scheduling of events/tasks e.g. eventManager:AddScheduledEvent(npc,myFunction,timeTillExecution) will execute the specific function at the specified time interval (reoccurring will be possible) Added: The GrimEngine offers the unique feature of coroutines (like non-blocking mini "threads") - e.g. eventManager:AddScheduledCoroutine(npc,myCoroutine,timeTillExecution) will allow the custom function myCoroutine to halt its execution for a specific time and resume later. Example: An NPC starts a speech: npc:Say("Starting Speech...") Wait(5s) npc:Say("Continuing Speech") Wait(20s) npc:Attack(...) - this allows for linear event programming in one single function without sending signals to execute some other function in X time. Added: GrimTool - a standalone applications which allows to test/benchmark NPC scripts without running a server or db. This will be later on released so that script writers can easily test and implement their scripts offline without the need to access a server. Updated: The zone project now has an optional preprocessor which enables the new script engine by default! Currently the events for talking and item turn in have been implemented, as well as registering and unregistered an NPC which should utilize the AI behaviour engine. Each NPC is obviously sandboxed in the engine, so no lua script will be able to somehow clash with another! Added: Command #grimreloadt - reloads only the lua behaviour script of the targeted NPC Added: Command #grimforcegc - force a GC run on the lua vm Updated: Fixed some memory leaks with the npcs talk functions. Added: Solution files for VS2010. ---- Revision: 826 Author: Yeahlight Date: 8:50:02 AM, Saturday, June 30, 2012 Message: Addition: Support for NPC armor tint sets has been added (see: NEC guild in cabwest) Addition: Added a very detailed mob statistics pseudo-command (#stats) with text rewrites in place of numerical data where appropriate (race, class, body type, etc.). Additional categories will be added over time (general, combat, buff and skill categories are available right now) Update: Moved the PC's current faction standing data to the player profile instead of the database Update: The database redesign is now complete and it is 50% leaner than before. Please backup your character/account tables, wipe the entire database and source ./db/db.rar. A backup of the old database is also available in ./db/db.rar Update: Rewrote the entire NPC inventory and worn item selection routine. NPCs now have a worn item inventory much like PCs (although, an NPC's worn inventory is limited to the visible armor slots [one bracer, not two]), from which combat stats and effects are pulled. In order to achieve a consistent level of raiding difficulty, NPCs level 55 and above do NOT utilize this system, thus they will never equip an item (there is one small exception for pulling weapon skill types [1H Blunt, 2H Slash, etc.], though). For the remaining NPCs, weapons are now chosen based solely on attack delay (the fastest weapons are wielded) and armor selection is now based solely on AC (including shields when an off-hand weapon is not available or usable). The armor selection routine is greedy, which means there is no concern for achieving the highest possible AC yield (due to multi-slot items), but rather just achieving the highest AC possible for each inventory slot as they are examined. As with PCs, an NPC is required to meet an item's class requirements before equipping the item (race and deity are ignored). When an item is added or removed from the NPC's inventory, the entire item selection process is redone instead of attempting to swap or remove an item (this approach leads to combat integrity errors). For those NPCs that have default weapon/armor textures (see: thurgadinb), items (and their attributes) are ignored in the NPC's worn inventory when conflicts arise (attempting to overwrite a default weapon/armor texture) Fix: Time of day restricted NPC spawns are now working correctly for the new spawn management system (see: kithicor) ---- Revision: 825 Author: Yeahlight Date: 7:38:26 PM, Sunday, June 10, 2012 Message: Addition: A new spawn management system has been created. This new system is roughly half the size, requires 1/8th or less physical memory, makes decisions in a fraction of the time (no multi-pass iterations present) and it does not leak memory. Also, this system runs validation checks and generates reports to ensure that each time of day scenario adds up to exactly 100% cumulative spawn chance for the list of NPCs in each spawn location of the zone Update: The NPC database tables have been completely redesigned to include only the types of data we require and they also now reflect the correct functionality of the game. NPC drops are now broken into four distinct categories: Main, spell, coin and miscellaneous. An NPC's main loot table is the collection of drops typically unique to that specific or type of NPC (e.g., Jade Mace, bronze armor, bone chips, etc.). An NPC's spell loot table is a typically-shared entry of spell drops for NPCs of a similar tier (Skyfire NPCs, Sebilis juggs / shrooms, Velious dragons, etc.). An NPC's coin loot table is a typically-shared entry of min / max coin drop configurations for a specific or type of NPC. With these new coin loot tables, NPCs may now drop more than 9 copper, silver and gold (instead of being converted up to the next coin tier) and we may also now restrict types of coins for specific or types of NPCs (e.g., dogs in Velks never drop copper or gold). An NPC's miscellaneous loot table is a shared entry of miscellaneous drops amongst a very broad category of NPCs (Words of XXX, Rune of YYY, Gloves of Zek, etc.). For all item loot tables, the worst possible drop rates have been expanded from 1 in 100 to 1 in 100,000,000. Other than loot tables, several new NPC attributes have been added, such as class attack damage (e.g., a pet's backstab, Grand Master Glox's 700+ damage flying kick, etc.), base mitigation AC (NPCs obviously do not have gear), and bound to water and trackable flags. Due to the scale of the structural changes, many aspects of NPCs are currently disabled or broken. Please extract and source ./db/new_npc_schemas_JUNE_2012.rar Update: Refactored the remaining client messaging routines Update: Refactored the Mob, NPC and Client constructors. Also, the constructor parameters for these classes have been reduced to only request the data we actually utilize Update: The faction system has been disabled, pending a complete rewrite Fix: A large number of significant memory leaks have been fixed Fix: The RNG seeds are now properly set (process ID * current epoch time) Fix: A number of multiple inclusion opportunities of header files have been fixed Fix: Pseudo-commands are now case insensitive ---- Revision: 824 Author: Harakiri Date: 5:40:52 PM, Wednesday, May 30, 2012 Message: Added: New itemtype - housekey. Added: Identified previously unknown chat channel types. Added: Identified the weighted language expertise field and all remaining unknown fields in the channelmessage struct. Updated: The message processing has been extended everywhere to include the weighted language expertise of the sender, the weighted expertise is calculated from the current language skill expertise and any intoxication. That means the receiver of a message will now finally see drunken and/or garbled text speech! ---- Revision: 823 Author: Yeahlight Date: 7:24:18 AM, Friday, May 25, 2012 Message: Update: Rewrote the PC death routine Update: The absolutely correct experience loss formulas have been implemented (credit to Harakiri for the discovery!) Update: Rewrote the client message (/say, /group, /ooc, etc.) handler Update: Rewrote the pet management system for NPC pets (AI and /pet commands). Also, full and proper support for single-target pets (Rage of Zomm, Flaming Sword of Xuzl and Unswerving Hammer of Faith) and single-attack, single-target pets (Mistwalker) has been added. Single-target pets are uncontrollable; fight until they or their target has died (at which point the pet despawns, too); and never change targets. Single-attack, single-target pets follow the same rules as single-target pets, but these pets will despawn after landing one unavoidable, maximum-damage attack (this attack cannot miss or be evaded [it may be bounced by invulnerability or runes] nor is there any chance for a double attack or dual wield check). Unlike all other pets, the damage generated by single-attack, single-target pets is credited to the owner with no additional hate generated Update: Simplified the process of adding a mob to an NPC's hate list Fix: As it turns out, the client relies on the server to define the killing blow that ends its life. Without this instruction, the client credits "Pain and Suffering" with the killing blow when dropping below -10 HP. In light of this, the server is now in charge of instructing the client to die when it believes the client has dropped below -10 HP. The HP synchronization has been rewritten to reflect this change and early testing suggests there will be no significant disagreements between the client and server (no issues arose when consistently cannibalizing down into the purple HP range [-10 to 0 HP]) ---- Revision: 822 Author: Yeahlight Date: 6:10:59 AM, Sunday, May 20, 2012 Message: Update: Rewrote the feign death system. A feigned PC no longer exits an NPC's hate list (unless a masterful FD is performed). A feigned hate list entry is simply overlooked by NPCs when making decisions (targeting, granting rewards, determining most damaging entity, etc.); however, a feigned PC will receive experience if their pet or group has done the most damage to an NPC (they will still not receive faction in this scenario, though). A successful, non-masterful FD will only remove a portion of the PC's hate from the NPC--only a masterful FD completely removes the PC from the NPC's hate list Update: The /target and /assist routines have been rewritten (these were a part of my first EQClassic commit, /tear) Update: HP updates are now sent immediately after targeting a mob Update: Rewrote the NPC death routine Fix: Resurrection returns experience (when applicable) once again Fix: Feigned and disconnected (/q'ed) PCs no longer receive faction hits Fix: Direct damage spells now generate hate Fix: Unconscious PCs may no longer attack ---- Revision: 821 Author: Yeahlight Date: 12:55:02 AM, Friday, May 18, 2012 Message: Update: An NPC's z-axis location is now offset by its size and/or race instead of a small, static value. An NPC's "eyes" (the starting location for line of sight checks) are now reliably close to the face of the model Update: PCs are now sent to a zone's safe point after falling through the ground Update: The locate ground algorithm now chooses more sensible locations as fail safes Update: NPC bounding boxes are now awarded to only a few types of NPCs Fix: Discovered a floating point exception that was fouling up the locate ground algorithm Fix: The Corpse class no longer overrides the inherited Mob x, y and z coordinates, thus a corpse may now be moved ---- Revision: 820 Author: Yeahlight Date: 3:21:06 AM, Tuesday, May 15, 2012 Message: Addition: Discovered the PC combat push values in the damage packet structure Addition: Added a legitimate melee push system. Every time a non-rooted / non-perma-rooted mob is hit (PCs included), they are pushed away from the attacker a little bit. The amount of push is determined by the type of weapon used (from most to least: blunts, swords, fists then daggers) and the distance between the two mobs (the amount of push decreases exponentially and approaches zero as one achieves max melee range). Push from special attacks (kick, bash, etc.) will be added as these skills are rewritten. When a push is prevented by an absence in line of sight (a movement that would place a mob behind a wall), the new location is derived by examining the perpendicularity of the attack angle versus the angle of the colliding wall. As perpendicularity increase, the total distance of the push decreases (imagine a car smashing into a wall head on (90 degree angle) versus a car slamming into a wall at a 45 degree angle). The mob's new location is some point along the colliding wall with respect to the approach angle and adjusted distance (a perpendicular approach angle results in no push, while a 45 degree approach angle results in half the original push distance). If line of sight is again not available between the new location and the original location, the distance of the push is reduced to not intersect the adjacent geometry, thus pinning the mob in a corner. PCs resolve identical updates on their own (we just tell the client how far to move), thus this system is mainly for NPCs. A legitimate melee push system is critically important to the difficultly of the raiding scene and the absense of one trivializes raid content, especially those encounters in Velious Update: NPC summoning has been rewritten and added back to the source ---- Revision: 819 Author: Yeahlight Date: 9:05:08 PM, Friday, May 11, 2012 Message: Addition: A singular proc management system has been added. This system manages all weapon procs (primary, secondary and ranged), spell procs (see: Boon of the Garou), passive procs (NPC abilities) and poison applications (ROG poisons). NPC passive procs and poison applications both require a damaging hit to proc/land Update: The entire hate list system has been rewritten and we no longer require multi-pass, hate-list iterations to make decisions. An NPC's target selection should now be correct and is as follows: A rooted NPC always chooses the closest mob on its hate list; an NPC will never consider targeting an invulnerable mob on its hate list unless no other options are available; and an NPC will never choose to target a pet if a non-pet mob is currently in melee range of the NPC Update: The Mob, NPC and Client classes have been reduced to only include those functions and attributes we actually utilize. Also, the entire NPC AI system (boats excluded) has been removed and replaced with a trivial point-and-shoot movement and combat system. Pieces will be rewritten and added back to the NPC AI system as they are needed Update: Melee range calculations are now much more sensible and they also now agree with the client's expectations (no more contradictory warning messages during combat). Also, a common melee range is now negotiated by the two mobs in combat, thus there are no more "dead zone" scenarios (e.g., a mob hitting its target but its target cannot strike back) Update: Added ranged-weapon efficiency and accuracy ATK calculations Fix: Only NPCs and hybrid PC classes are awarded with reserved melee attacks during channeling; casters and priests will now need to time their spells between melee attacks Fix: Attack timers are now fully reset when swapping weapons Fix: All humanoid NPCs level twenty and above may now dual wield when two weapons are equipped. Please note that an NPC will be unable to equip two weapons unless they are first charmed or summoned Fix: Invulnerable mobs may no longer attack ---- Revision: 818 Author: Harakiri Date: 4:46:18 PM, Thursday, May 10, 2012 Message: Updated: The old grouping mechanic has been completely removed from the codebase, the new system has replaced all functionality and should generally work fine. There is still some error handling left to be done (Group Updates while a player is zoning etc) Added: Identified new opcode - RequestHouseLock - sent when the player tries to open a specific switch/door with a housekey - this is unused however Updated: Identified the CommandBoat opcode as ControlNPC Opcode, used to signal the client which NPC he is controlling Added: Identified the RefuseTrade opcode Updated: Identified opcodes FreezePlayer and UnfreezePlayer - used to lock UI Updated: Identified opcodes ControlPlayer and UncontrolPlayer - used to lock UI and signals client that player is being controlled Added: Identified new opcodes related to GM snooping chat text client side - OP_SnoopClear, OP_SnoopSet, OP_SnoopText Added: Identified new opcodes to disable client side attacking, OP_HarmlessEnable/Disable, OP_SilenceEnable/Disable Added: Identified roleplayer server setting opcode, used to limit the clients ability to group/create new characters with specific deities. Added: Identified opcode for /movelog Updated: Merchants greetings are now broadcasted to nearby players and not only to the player who is shopping. Updated: Identified some flags related to the projectile struct. Updated: Extended the language struct in the playerprofile, identified the air_left field in the zone entry struct Updated: Logging now uses a timestamp ---- Revision: 817 Author: Yeahlight Date: 4:49:59 AM, Monday, May 07, 2012 Message: Addition: Discovered the berserker frenzy opcode toggles (+/- ATK and STR) and the server agrees with the client's frenzy stat bonus calculations Update: Started the combat system revamp. The combat system will be broken for the next few weeks Update: PvP arena and water location checks have been moved to the client position update routine instead of firing every single PC tick (tick as in server tick rate, not HP regeneration tic) Update: Determining a mob's melee range has been simplified and mobs now agree on a common melee range Update: Unified PC and NPC melee attacking attempts under the same routine Update: Rewrote the PC entity-process routine in anticipation for LD combat handling Update: PC disconnect handling is now consistent across all methods of leaving the game Update: Rewrote and optimized the mob attack evasion routine Update: Pets and dual wield handling is now correct (the levels may be inaccurate, though). MAG pets below *SPELL* level 24 may no longer dual wield; MAG pets below spell level 39 may no longer dual wield unless two weapons are equipped; MAG pets spell level 39 and above dual wield automatically; NEC pets below spell level 29 may no longer dual wield; NEC pets below spell level 39 may no longer dual wield unless two weapons are equipped; NEC pets spell level 39 and above dual wield automatically; ENC pets below spell level 39 may no longer dual wield; ENC pets below spell level 49 may no longer dual wield unless two weapons are equipped; ENC pets spell level 49 and above dual wield automatically; and all other class pets no longer dual wield Update: The maximum obtainable skill value routine for PCs and NPCs has been reduced, semi-corrected and optimized a bit Fix: Other than the aforementioned class pets, only MNK NPCs may now dual wield. This is not to be confused with triple and quad attacking (if a monk NPC was given the ability to quad attack, they would hit four times with each hand). Successfully trading a two handed weapon with a MNK NPC *will* negate their dual wield capabilities Fix: PCs may no longer evade attacks while ducking or laying on the ground Fix: PCs may now block, parry and riposte attacks while sitting, but they cannot dodge them Fix: Non-bard mobs may no longer riposte while channeling a spell Fix: Disabled mobs (stunned, mesmerized or feared) may no longer evade attacks Fix: Double attack checks are now correct and unified for all mobs Fix: Dual wield checks are now correct and unified for all mobs Fix: The conditions for removing a PC's hide are now correct Fix: NPCs will no longer occasionally possess random combat abilities ---- Revision: 816 Author: Yeahlight Date: 5:57:57, AM Wednesday, May 02, 2012 Message: Addition: Created a memory allocation tracker to monitor and report on of our outstanding memory allocations (those without respective deallocations) Fix: The massive packet manager memory leak has been located and fixed ---- Revision: 815 Author: Harakiri Date: 6:20:40 PM, Tuesday, May 01, 2012 Message: Added: Party chat support for the new grouping system. Refactored all instances were the old group chat was used (tradeskill combines, teaching language etc) Added: New logic to split money among the group for the new grouping system. When using /split each coin type will be split individually, the remains go to the splitter. E.g. splitting 4PP among a group of 3 will result in 1PP for each member and 2 for the splitter. It cannot be used to convert coins. When a client is using autosplit and loots a corpse, splitting will be done by the total coin value in coppers and divided equally to all members, the potential copper remains will additionally go to the looter. Added: Method to handle clients confirmation of receiving split from looting/using split Updated: Adding allowed looters to a corpse has been simplified. Updated: Disabled all instances of the old guild system. ---- Revision: 814 Author: Harakiri Date: 8:14:57 PM, Monday, April 30, 2012 Message: Updated: Splitting of group experiences has been reimplemented and simplified for the new grouping system. Additionally each member has to be within a certain range of the mob to receive group exp. Updated: The hatelist calculation for getting the client/group/npc who did the most damage to a mob has been rewritten and simplified. Updated: The npcs death routine has been simplified to reflect the hatelist changes. Updated: If the pet of a player did the most damage to a mob, the player has to be within a certain range to still receive experience. Fixed: Upon zoning into a zone, players will now initially receive the correct appearance (sitting,ducking etc) of other players/mobs, previously the player had to be in the same zone to recognize any changes in appearances of others. ---- Revision: 813 Author: Yeahlight Date: 1:51:24 AM, Monday, April 30, 2012 Message: Addition: Added a respectable random number generator (RNG), based off of the Mersenne Twister algorithm--no more using rand()! The results of twenty-five million integer and floating point value dumps are posted in this revision's thread Addition: A new opcode has been discovered (OP_WhoAllFriend), which is sent to the server with a comma separated list of character names after executing '/who all friend' Update: Optimized the BSP node transitioning system Fix: NPCs now spawn with the correct gravitational flags Fix: Clients now receive HP updates for their group members, regardless if they have them targeted or not Fix: Clients under the effect of bind sight or eye of zomm now receive zone wide position updates instead of nearby updates Fix: The server now receives a client's player profile that is sent after camping Fix: The remaining damage the new zoning system caused to the boat system has been repaired Fix: Bind sight works once again ---- Revision: 812 Author: Yeahlight Date: 3:35:40 AM, Saturday, April 28, 2012 Message: Addition: An entity cleanup routine has been added to ensure pointer integrity from other entities when said entity is destroyed Update: Mob movement calculations are now much more accurate and a mob will no longer overshoot or miss its destination. To my surprise, the more accurate calculations actually require less CPU cycles than the inaccurate method! Update: The BSP system has been added to the remaining entity list searching routines (AE spells, find closest mob, queue nearby clients, etc.) Update: The number of static spawn position updates (mobs standing still) sent to a client has been dramatically reduced. For close range updates, the time between each update has been increased from six to twelve seconds (the maximum threshold allowed by the client), and the update range has been increased to compensate for it. The new update range was determined by sampling the distance a PC can travel with the fastest acceleration buff in the game. Unless a client is experiencing packet loss, it is now impossible to outrun the update range. For far range (zone wide) updates, only those clients capable of tracking a mob will receive these updates every ninety seconds. To remove any inconsistencies with non-tracking clients, when a client travels a distance greater than the close update range within a single PC update (via Call of the Hero, same zone teleport, knockback, etc.), the client is immediately updated with the nearby spawns of their new location Update: The server now handles freezing water environmental damage Update: The projectile class has been completely rewritten. Projectile movement is now based on the more accurate mob movement implementation, thus projectiles will no longer overshoot or miss their targets, too. To improve the accuracy of early collision detection, a projectile's tickrate (the number of times it is updated per second) has been increased from three to thirteen. Projectile movement is also now calculated in three-dimensional space Update: The entity ID distribution routine has been completely rewritten Update: Only those clients who have a mob targeted will receive HP updates for said mob Fix: A number of broken polymorphic links has been fixed and a number of meaningless polymorphic declarations has been removed Fix: A casting success packet is now guaranteed to be received by the caster Fix: Repaired some of the damage to the boat zoning protocols caused by the new zoning system ---- Revision: 811 Author: Yeahlight Date: 1:22:35 AM, Wednesday, April 25, 2012 Message: Addition: Added a binary space partitioning (BSP) system. The BSP system divides the zone into small sections for which each section has a list of mobs in its respective space. When a check for nearby mobs needs to be made, such as determining frenzy agro for an NPC, only a mob's surrounding BSP locations are examined. Without a BSP system, an NPC would have to check the range of every other mob in the zone to determine frenzy agro opportunities. A zone with 400 NPCs each checking for frenzy agro every three seconds would require roughly 53,333 (400 * 400 / 3) range checks per second (this is without any PCs in the zone). With this BSP system, the number of range checks can theoretically approach zero. A one million iteration benchmark of the spawn position update routine (a PC being updated with nearby NPC locations) in a moderately dense area (noobie ramp of the Field of Bone) yielded a ridiculous 99.82% reduction in execution time (49.1 seconds vs 0.09 seconds). The overhead in managing the BSP system is also negligible, as a BSP location is only updated when a mob enters or leaves it (a check requires only two lines of code and moving a mob from one BSP location to the next requires eleven). ---- Revision: 810 Author: Harakiri Date: 3:29:04 PM, Sunday, April 22, 2012 Message: Added: New opcode OP_CampFinished, sent when the client camped for the full duration of the camping process. Updated: Further major group reimplementation, zone to zone synchronization has been added. Removing/Adding/Kicking/Disbanding will now be broadcasted to members not in the same zone as the inital action. Safely logging out will remove the player from his group. A disconnect will remove the player after a while from the group. Group references in a zone will be safely removed if there is no member left in that zone. Updated: The camping functionality has been modify to reflect the above, OP_Camp is now OP_CampBegin. The client will only be saved now if he gracefully has logged out using the camping procedure. Updated: Zone Weather processing has been refactored and simplified, also verified that quickly changing the weather will not harm the client in any way. Updated: Housekeeping for the worldserver, fixed a few memory leaks, added logging etc. ---- Revision: 809 Author: Harakiri Date: 10:34:28 AM, Wednesday, April 18, 2012 Message: Updated: Identified Infravision and Ultravision fields in the Playerprofile, used by the client to determinate how the ambient light should be set Added: Identified opcode OP_GroupIamLeader to signal the groups creator that his group was successfully created and that he is the leader. Updated: Found two more fields in the ZoneEntry struct used client side as pointer references. Updated: Corrected/Identified the unknown fields in the Illusion_Struct Updated: Identified all possible commands used for the GroupUpdateCommand Struct (Add,Remove,Rename,Set Members and Join Failure) Updated: Identified all fields in the GroupUpdateCommand Struct, it can be used to set/send all party members at once. Updated: Further refactoring of new group system - identified and implemented the correct handling for creating, inviting, following, disbanding, kicking, leaving. Additionally all error checks have been added - group full, pending invite from other group (this was already correctly handled by the client itself but never utilized), inviter left zone etc. ---- Revision: 808 Author: Harakiri Date: 6:25:40 PM, Monday, April 16, 2012 Message: Added: Started reimplementation of the grouping functionality, most grouping related functions are now broken for the time being Added: Correct math formula to "unpack" the players xyz delta values from the position updates, the client "compresses" these 3 into one 32bit value Updated: Identified deltaHeading field in the ZoneEntry struct Updated: Identified soulboundItemsBitMask in PlayerProfile Updated: Identified the final two colors in the equipmentColor array of a spawn struct Fixed: Identified how the client rounds price values for training costs, the servers calculation no longer differs by 1 copper in some cases, i.e. the player doesnt pay 1 copper too much anymore =) Fixed: Multiple cases of incorrect zero initialization of a struct through the constructor Fixed: Multiple cases of missing nullpointer checks, sanity checks etc ---- Revision: 807 Author: Yeahlight Date: 3:54:29 AM, Sunday, April 15, 2012 Message: Update: The packet manager has been reorganized and optimized quite a bit. The packet manager is now very stable and capable of supporting indefinite connections Fix: "Keep alive" packets have been removed. There is no evidence "keep alive" packets were ever utilized and they create a significant amount of unnecessary traffic. In their place, the packet manager now answers a client's acknowledgment requests on demand Fix: The remaining integer overflow oversights with the packet manager's fragmentation and sequencing have been fixed ---- Revision: 806 Author: Yeahlight Date: 1:27:47 AM, Thursday, April 12, 2012 Message: Update: The packet queue system has been completely rewritten. We now take advantage of connectionless (UDP) traffic and utilize TCP emulation (ACK) for critical packets. There is not a whole lot to say about the new system, other than it works phenomenally well. ---- Revision: 805 Author: Yeahlight Date: 6:26:38 AM, Thursday, April 05, 2012 Message: Addition: Added a routine to procedurally query and record all of the spell stacking results directly from the client. The spell stacking rules we have now are very close to correct, but not quite perfect, so this routine will give us all of the correct stacking results, plus they will be preprocessed! The entire process started on the 25th of March and it is presently 33% complete Addition: Added support for soulbound items. A soulbound item is one that remains on a character through death (e.g., Key to Charasis) Update: Cleaned up and protected the PC corpse creation routine Update: The player profile buff structure now contains a field for the amount of effect left on a buff (amount of rune or poison/disease counters remaining). This discovery is credited to Harakiri Update: The server's representation of a client's buff lineup is now slot agnostic. That is, accepting and communicating changes with the client is now done based solely on spell IDs instead of buff slot locations. Based on the nature of the client, it is impossible to know exactly where a buff resides at all times, but it is possible to know which buffs are present. When a client periodically requests a save (uploads its player profile), the server's buffs are reordered to match the order of the client, thus greatly reducing the chance of experiencing any oddities with cancel magic and the like Fix: The definition of a blank spell effect is now correct Fix: The client tic timer synchronization is now much more accurate Fix: Bind sight is now guaranteed to succeed for the caster Fix: If more than one illusion buff is present, a mob no longer reverts to their normal race when one of the illusions fade (they morph into one of the remaining illusions) ---- Revision: 804 Author: Harakiri Date: 5:05:14 PM, Tuesday, April 03, 2012 Message: Updated: Added sanity check for some world container based item exploits. Updated: Some specific range/ammo slot items can now be correctly equipped server side, there were some hardcoded exceptions in the client unknown to the server that would allow certain items to be put into the ammo slot. Updated: The inventory will now be correctly saved upon buying/selling equipment from a merchant. Updated: Banker NPCs can have factions below dubious. ---- Revision: 803 Author: Yeahlight Date: 5:23:37 AM, Saturday, March 24, 2012 Message: Addition: Added support for the plant, giant and dragon-only spells Update: PCs are now required to have the Velious dragon portal teeth on hand to be teleported to those destinations. The CS tooth may be used as a substitute for WL and GD, and the WL tooth may be used as a substitute for GD Update: Call of the Hero and all travel spells (teleport, succor, translocate, gate, etc.) are no longer permitted in the Plane of Sky Update: Cross-zone travel spells are no longer permitted in Veeshan's Peak Update: PCs now display the LD flag when charmed or feared Update: Variably lengthed buffs are now forcefully removed from the client when the server determines they have faded Update: The correct memory blur success rates have been added Update: A zone now knows if it is a dungeon or not (this is not to be confused with the indoor / outdoor flag). Please source ./db/zone_rules.sql Fix: Only the most potent acceleration and deceleration effects are considered for a mob, and the calculations for a mob's run and walk-speeds are now correct Fix: Only the most potent lull spell effects are considered for a mob Fix: Eyes of Zomm may no longer be charmed Fix: Voice grafting is now disabled when a master's pet has been dismissed Fix: The grow/shrink formula is now correct Fix: A PC no longer needs to be hit while casting to receive a channeling skillup Fix: Line of sight for detrimental spells is now only required in zones flagged as dungeons. NPCs are only subjected to this requirement when casting area of effect spells ---- Revision: 802 Author: Yeahlight Date: 2:06:50 AM, Wednesday, March 21, 2012 Message: Update: Lull spells are now subjected to NPC level caps (Harmony's cap is level 75) Update: The Lull spell effects (frenzy radius, reaction radius and pacification) are now handled properly Fix: Pets and owners are now referenced by pointers alone instead of entity IDs. The entity ID approach masked how poorly pets and their owners were previously managed Fix: Weather has been re-enabled. The client's inability to enter a zone with weather running appears to have been fixed Fix: NPCs that are immune to stun will now cause an entire spell to become resisted if it contains a stun component Fix: A resisted Lull spell is no longer guaranteed to generated hate ---- Revision: 801 Author: Yeahlight Date: 12:26:11 AM, Tuesday, March 20, 2012 Message: Addition: Added a mob pushing routine for knock back spells (for NPCs, as PCs handle knock backs on their own) and melee combat that is guaranteed to never push a mob through a wall. The melee push revamp will happen during the combat system revamp Update: The list of grouping-required buffs has been expanded to include combat sensitive buffs (see: Scale of Wolf) and Torpor Update: Reworked the way memory blur spells function. Memory blur spells are now very difficult to resist, and success rates (the check made after the spell has landed) are based on the spell's minimum casting level and the caster's CHA with success rate caps derived by NPC level. Also, a memory blur is not guaranteed to be a complete hate list wipe, as there is now a cap on the amount of hate removed from each entity on the hate list Update: Added the remaining of the spell effect types that can generate hate Fix: Cure poison and disease spells now work properly Fix: Refined the definitions for DoTs and regen spells that should be 100% accurate or very close to it. Using the new definitions, mobs will no longer get nuked or healed when evaluating the specific degen/regen component upon receiving a buff Fix: Beneficial buffs with detrimental effects (see: Cancel Magic) now generate hate (some only when resisted, e.g. Lull) ---- Revision: 800 Author: Yeahlight Date: 9:27:24 PM, Friday, March 16, 2012 Message: Update: The list of grouping-required buffs is now complete or very close to it Fix: Beneficial spells with detrimental properties (cancel magic, wipe hate list, lull, etc.) now require line of sight when line of sight for detrimental spells is required ("indoor" zones) Fix: All illusions now work properly, including the consistency of a PC's face selection and visible armor textures between illusions. Also, the ol' visible armor texture swap bug with monster illusions (equip some nice looking gear, cast a monster illusion, replace nice looking gear with your actual gear, remove the monster illusion and the textures of the nice looking gear remain) has been successfully emulated Fix: Reclaim energy now derives the amount of returned mana from the actual spell used to summon the pet Fix: Projectile spells no longer require a target Fix: Helm textures for PCs are now properly relayed to other PCs, including the custom helm graphics from Velious Fix: PCs may no longer translocate themselves Fix: Eliminated a few buffer overflow exceptions ---- Revision: 799 Author: Yeahlight Date: 8:19:06 AM, Thursday, March 15, 2012 Message: Addition: Added support for the Lull line of spells. With this addition, all spell types are now handled; hooray! Update: Preprocessed the sine and cosine calculations for the entity movement functions, granting an additional speedup of 70.6% (1s vs. 3.4s on a fifty million iteration benchmark) Update: Refined the spell landing permission rule set, granting the proper handling for ambiguous spells (those marked at beneficial but have detrimental properties) such as cancel magic and memory blur Update: Replaced all calls to strcpy() and strncpy() with safe_strncpy() to protect against buffer overflow oversights Fix: Weapon procs from spells are now reapplied after zoning Fix: The server now recognizes that the buff icon for the bind sight line of spells is placed on the caster and its target ---- Revision: 798 Author: Yeahlight Date: 3:50:01 AM, Tuesday, March 13, 2012 Message: Addition: Added support for the destroy NPC line of spells (see: Disintegrate). Level 46 and below NPCs may be destroyed, leaving no corpse behind and granting no rewards (exp, faction, loot, etc.) Addition: Added support for the silence line of spells (see: Cacophony) Addition: Added support for the fearless line of spells (see: Fearless Companion) Addition: Added support for the translocational anchor line of spells (see: Translocational Anchor). An anchored mob is not permitted to gate, translocate, succor or teleport away from the zone Addition: Added support for the succor line of spells (see: Succor) Update: Rewrote the entire zoning protocol. This solution makes actual sense now and it very easy to prepare a client for zoning Update: Rewrote the rest of the trigonometry routines in the source. All of the new routines are significantly faster, but the NPC movement update routine is the most impressive at 98.4% faster (3.4s vs 213.5s on a fifty million iteration benchmark) Update: We now differentiate between minor and major focused pets in the database, thus level 49 MAG pets have three individual records Fix: Small races no longer fall to the ground after zoning Fix: The wipe hate list property (chance) of mesmerization spells is now properly handled Fix: Whirl Till You Hurl is now properly enforced as a mes instead of a stun Fix: Spin stuns no longer manually spin the client. The client knows to spin itself in presence of a stun ---- Revision: 797 Author: Yeahlight Date: 2:16:15 AM, Friday, March 09, 2012 Message: Addition: Non-consumable reagent requirements are now enforced Addition: Support for MAG and NEC focused pets has been implemented. MAG pets from spell level 4 to 44 require the minor focus items to be in hand and those pets spell level 49 to 60 require the major focus items to be in hand. NEC pets level 49 to 60 require the Encyclopedia Necrotheurgia to be in hand (there is no focusing level 1 to 44 NEC pets) Update: Summoning an entity (pet, player, corpse, etc.) now places it slightly in front of the mob instead of directly under it. If aggressive line of sight is not present to this adjusted location, the entity is summoned slightly behind the mob. If neither of these new locations satisfy an aggressive line of sight check, the entity is placed directly under the mob. If the entity is summoned with a door nearby, the entity is placed directly under the mob to prevent any exploitation with bypassing doors Update: The pet table is now complete (but not necessarily accurate) for all PC pets, including dedicated records for focused pets. Please source ./db/pets_MARCH_2012.sql Update: The four possible types of pets (uncontrollable, controllable, single target and single attack [Mistwalker]) have been identified, but the work to govern these pets will be implemented when the NPC AI is revisited Fix: The server and PC now agree on the PC's tic timer within half of a second margin of error Fix: The lingering server-side effects of Eye of Zomm are now properly removed upon an eye's abrupt passing ---- Revision: 796 Author: Yeahlight Date: 12:02:42 AM, Sunday, March 04, 2012 Message: Addition: Added Nullify() functions to each entity constructor to zero out the object's attributes. Please update each Nullify() list as new attributes are added to each entity class Update: Rewrote the Cartesian vector logic ("Is this mob in my field of vision?", "Am I behind this mob?", etc.) to be 100% accurate and 50% faster than our old solution Update: Cleaned up the timer class Fix: The Eye of Zomm now levitates (w/out the bobbing, though) ---- Revision: 795 Author: Yeahlight Date: 1:15:29 AM, Thursday, March 01, 2012 Message: Update: Preprocessed and optimized the experience per level calculations Update: Rewrote the PC death routine Fix: The group experience splitting routine now works properly for level 1 characters Fix: The correct group experience bonuses (2, 4, 6, 8 & 10 percent) have been implemented Fix: The correct "Will I get exp in this group?" formula has been implemented Fix: PCs are no longer considered dead at -10 HP, but rather -11 HP Fix: PCs no longer lose exp upon death at levels five and below Fix: Fading all buffs at once works again ---- Revision: 794 Author: Harakiri Date: 7:17:46 PM, Sunday, February 26, 2012 Message: Updated: Reimplemented starting zone, starting items and default bind location selection. Starting zone locations and items are now also dependend on the players deity! Added: Our own data table for all city/class/race/deity combinations for starting zone/position/bindzone selection. This is the real classic data. Please source eqc_new_character_locations_*.sql Added: Our own classic based data table for all city/class/race/deity combinations for starting items. This is the real classic data. Please source eqc_new_character_items_*.sql Added: Utility method GetDeityName() for getting the deity as a string ---- Revision: 793 Author: Yeahlight Date: 6:33:15 AM, Sunday, February 26, 2012 Message: Added: The correct experience per level formula that agrees with the client (assisted by Harakiri). Added: Roughly two dozen documents on classic formula research. Fixed: Rewrote a majority of the experience routines, notably the group split routine; racial and class modifiers (penalties) are now shared amongst the group members. ---- Revision: 792 Author: Harakiri Date: 7:10:52 PM, Thursday, February 23, 2012 Message: Updated: Refactored the /consider handling, found correct boundaries for each faction level. Pets now consider amiable to their owners and indifferent to all others. Updated: Refactored the /random handling, simplified and now uses the correct message text. Updated: Further refactoring of the char creation handling. ---- Revision: 791 Author: Harakiri Date: 1:11:55 PM, Sunday, February 19, 2012 Message: Updated: Refactored Guildmaster training interaction (sanity checks, skill checks etc). Added: Found field in class training struct responsible for calculating the training costs (previously these were free regardless of skill level) Added: All missing greeting/goodbye messages when you interact with your trainer. Added: Formula used by the client to calculate the cost of a skill increase depending on the skills level and a price multiplier. Added: Money is now deducted server side when training in a skill according to the clients calculated cost. ---- Revision: 790 Author: Harakiri Date: 7:55:14 PM, Tuesday, February 14, 2012 Message: Added: Identified playerprofile field expansionBits - setting this correctly now allows to select max possible resolution while in game, also the UI is no longer switched to the vanilla one when you inspect an item or do merchant shopping! Added: Identified playerprofile field deity (was previously identified at a wrong place) Updated: Initial refactoring of the character creation, redone the process, added sanity checks, logging, deity is now honored. Added: During char creation initial language skill values (depending on the race) are now set. Added: During char creation initial noncombat skill values (depending on the race) are now set. Added: During char creation initial combat skill values (depending on the class) are now set. ---- Revision: 789 Author: Yeahlight Date: 12:26:02 AM, Wednesday, November 02, 2011 Message: Added: The starting support for the monster summoning spell line. Updated: Rewrote the rune absorption logic to properly support traditional and spell-only runes. Updated: Rewrote the buff loading routine for clients. This includes support for persistent client state effects, such as invisibility, levitation, etc. Fixed: A critical issue in our spell stacking logic. Fixed: A number of redundant packet payload initializations. Fixed: A handful of critical memory initialization issues associated with non-C structures. ---- Revision: 788 Author: Yeahlight Date: 6:43:03 PM, Saturday, October 29, 2011 Message: Added: Support for the recourse spell line. This addition includes the correct handling for all drain spells, including life taps, mana drains, reverse life taps and attribute drains. Mana drains will not land unless the target has a mana pool. Fixed: Identified the last remaining byte in the spell buff struct, the beneficial/detrimental recourse flag. Our client does not have dedicated recourse effect spells, so this flag controls the way the buff behaves (takes away or gives). Fixed: Made the distinction between dispellable and non-dispellable buffs. Non-dispellable buffs currently include resurrection effects and all drain recourse buffs (the client enforces the latter). Fixed: Combat sensitive buffs now fade when the owner makes an offensive action (the client actually handles this for us). ---- Revision: 787 Author: Yeahlight Date: 3:51:22 AM, Wednesday, October 26, 2011 Message: Updated: Continued the spell casting system revamp. Features of spell casting may be broken until the next update(s). Updated: Identified the total play time field in the player profile struct. Fixed: The server's representation of the client's player profile is now completely overwritten by the client's uploaded version only when the CRC32 checksum matches the server's calculation and when the incoming player profile data passes all thorough sanity checks. Fixed: We now keep track of the number of each spell effect on a mob to prevent wrongfully changing a mob's state before all necessary effects have been removed. For instance, a mob with two sources of invisibility will no longer become visible when one wears off. These checks are only made against redundant spell effects (invisibility, root, fear, see invis, etc.). Fixed: Combat sensitive buffs (e.g., Scale of Wolf) now fade when taking damage. Fixed: Heal agro is now based on the amount healed instead of the maximum heal amount. Fixed: Root spells with damage components no longer prematurely fade themselves (the damage in the root does not count towards a break). Fixed: Lifetaps function properly again. Fixed: Made the distinction between melee and magic runes. Fixed: The mana pool spell effect now functions properly. ---- Revision: 786 Author: Yeahlight Date: 8:28:35 PM, Monday, October 24, 2011 Message: Updated: Continued the spell casting system revamp. Features of spell casting may be broken until the next update(s). Updated: Identified the character creation time stamp in the player profile. Fixed: Finally discovered the correct protocol for updating a client's current mana from spells such as the iconless bard mana song and necro twitch line. Fixed: Bard modifications are now stored properly for each spell on the server. Fixed: Spell casting mistakes when using clicky items no longer consumes mana. ---- Revision: 785 Author: Yeahlight Date: 4:39:44 AM, Friday, October 21, 2011 Message: Updated: Continued the spell casting system revamp. Features of spell casting may be broken until the next update(s). Updated: The bard revamp is now complete. Fixed: Unified the attacking rules for all entities (PCs, NPCs and triggers). Fixed: Rewrote the entire area of effect (AE and PBAE) spell routine. Fixed: NPCs may now use rain spells. Fixed: Rain spells are now capped at four targets. Fixed: The server can now tell when a buff has ended prematurely on the client (clicked off or faded by the client). Fixed: Channeling is interrupted when charm wears off. ---- Revision: 784 Author: Yeahlight Date: 2:07:04 AM, Thursday, October 20, 2011 Message: Added: Support for synchronizing the effects of dynamic spells (those whose effects change in intensity over time). Updated: Continued the spell casting system revamp. Features of spell casting may be broken until the next update(s). Updated: Continued the bard class revamp. Features of the bard class may be broken until the next update(s). Fixed: Buff durations between the client and server are now synchronized. Fixed: The effect values for dynamic spells are now correct. Fixed: The available slot discovery routine is now correct. ---- Revision: 783 Author: Yeahlight Date: 8:20:04 PM, Tuesday, October 18, 2011 Message: Added: The correct classic spell stacking rules that agree with the client (props to Harakiri for the discovery!). These rules are far more erratic and complex than I anticipated, and services such as Lucy are not an accurate representation of how spells stacked in the classic era. Updated: Continued the spell casting system revamp. Features of spell casting may be broken until the next update(s). Updated: Continued the bard class revamp. Features of the bard class may be broken until the next update(s). Updated: Rewrote and simplified the attacking rules (sans PvP). Updated: Rewrote the spell landing permission rules (sans PvP). The new rules are as follows: Casters may always land spells on themselves; if the spell is detrimental, the spell will only land if the caster may attack its target; if the spell is a beneficial buff with a minimum casting level of 50, the spell will only land if the caster's target cons blue or higher; if the spell is a beneficial spell, the spell will not land on clients whose master may be attacked by the caster; if the spell is a beneficial spell, the spell will not land on NPCs who may be attacked by the caster or whose master may be attacked by the caster. Checks for a target's master is recursive, thus if any of the target's masters (there is no limit) violate the rules, the spell will not land. It is important to note that these rules make it impossible to apply detrimental spells to a charmed mob whose master is friendly, thus the charm debuff on the mob cannot ever be refreshed. Fixed: Regardless if a spell is resisted or not, a client will always receive (when landing is permitted) the buff placement packet. Since the client handles its own stacking rules, this approach will not produce any negative results but errors with our server-side implementation will now be easy to spot. Fixed: Group-only spells are now enforced, which are not to be confused with group buff spells. These spells include bind affinity, cancel magic, shrink, grow, etc. Fixed: The bard instrument modification now comes from the stronger of the two possible instruments wielded. ---- Revision: 782 Author: Yeahlight Date: 10:45:41 PM, Saturday, October 15, 2011 Message: Added: Mana cost reduction for spell casting specialization. The mana reduction returns are linear between 0 and 10 percent as the skill increases from 0 to 200 (the minimum obtainable skill is 30, so there will always be a reduction present). Added: Targeted binding exceptions (additions) for Kael (EW/WL zone lines), Iceclad Ocean (docks near Stormfeather) and corrected those for Skyshrine (now the entire first "floor"). Please source ./db/zone_rules.sql. Updated: Continued the spell casting system revamp. Features of spell casting may be broken until the next update(s). Updated: Continued the bard class revamp. Features of the bard class may be broken until the next update(s). Fixed: Implemented all twenty-two correct spell effect value formulas (props to Harakiri for discovering them!). These formulas cover all buff and debuff stat calculations, including dynamic effects such as Splurt, Resurrection Effects, etc. ---- Revision: 781 Author: Yeahlight Date: 4:24:46 PM, Saturday, October 15, 2011 Message: Added: Bind restrictions to the following zones marked as openly bindable (caster may bind target): Frontier Mountains (empty ruins), Field of Bone (Kaesora area), North Karana (gypsy camp), Firiona (docks), Overthere (docks), Skyshrine (barkeep area). Kael will probably make this list in the future. Updated: Continued the spell casting system revamp. Features of spell casting may be broken until the next update(s). Updated: Continued the bard class revamp. Features of the bard class may be broken until the next update(s). Fixed: The packets the client is expecting when channeling is concluded are now sent in the correct order. Spell gem availability no longer disagrees with the data in the spell file. ---- Revision: 780 Author: Yeahlight Date: 6:09:12 PM, Friday, October 14, 2011 Message: Updated: Continued the spell casting system revamp. Features of spell casting may be broken until the next update(s). Updated: Continued the bard class revamp. Features of the bard class may be broken until the next update(s). Updated: Identified the social animation ID in the spell struct. Fixed: Bards no longer receive mana regeneration from songs, spells or items. By the same token, bards no longer lose mana from debuffs and other detrimental effects. A bard's mana regeneration will forever be +1 / tic standing and +2 / tic sitting. Fixed: Stun and mesmerize now properly interrupt channeling. Fixed: Pulled weapon procs out of the channeling system. Weapon procs no longer overwrite active channeling data (this really only applies to bards). Removed: Roughly one hundred redundant payload (packet buffer) initializations. ---- Revision: 779 Author: Yeahlight Date: 10:01:57 PM, Thursday, October 13, 2011 Message: Updated: Continued the spell casting system revamp. Features of spell casting may be broken until the next update(s). Updated: Continued the bard class revamp. Features of the bard class may be broken until the next update(s). Fixed: The channeling monitoring system has been rewritten and should now be unbreakable (no more getting locked out of spell casting). Fixed: The "mana update" opcode was incorrectly described. This opcode is really the channeling conclusion opcode that just happens to have a current mana component. If a client receives this opcode while casting, their channeling will be interrupted, thus this opcode is not sufficient for spells that add or subtract from current mana, such as the necro twitch line. We will need to find a way to increase / decrease a client's mana pool through some other method. Fixed: Recurring effects (HP, mana and endurance) in buffs / debuffs are no longer applied the moment a spell lands. These effects do not take hold until a tic has been processed. Fixed: Bard songs may no longer be interrupted by basic melee combat. Fixed: Bards no longer receive mana regeneration benefits from their meditation skill. Fixed: The correct spell casting animations for all classes now trigger. Fixed: When overwriting an identical buff on the client, the old version is no longer removed but rather updated. Fixed: Spells and songs are now gracefully interrupted when required. Fixed: Bard fizzling is now working correctly. Fixed: Bards may now channel clicky items on the run. ---- Revision: 778 Author: Yeahlight Date: 5:03:58 AM, Wednesday, October 12, 2011 Message: Added: The correct spell fizzling formulas for casters and bards. A caster's primary stat (INT or WIS), casting skill, specialization and spell's difficulty level all influence fizzle rates for a minimum success rate of 5% and a maximum success rate of 98%. A bard's DEX, CHA, instrument skill and song difficulty all influence missing note rates for a minimum success rate of 1% and a maximum success rate of 98%. The amount of mana lost due to a fizzle is 40% of the spell's mana cost or 12.5% of the caster's total mana pool, whichever is smaller. Updated: Continued the spell casting revamp. Fixed: Finally acknowledged the presence of spell casting specializations. Casting specializations reduce fizzle chances and a spell's mana cost (not yet implemented). A caster may only have one specialization beyond 50, capping at 200. ---- Revision: 777 Author: Yeahlight Date: 10:47:48 PM, Saturday, October 08, 2011 Message: Fixed: We now only have eight user defined data types instead of the redundant group of fifteen or so. They are as follows: int[8/16/32/64] and sint[8/16/32/64]. Updated: Resumed the spell casting system revamp. Many outstanding bugs, redundant packets and oversights have been corrected, but this work is incomplete so many spell casting related features may be broken until my next update(s). The logic behind bard mechanics is also being rewritten to properly reflect how bards and their buffs should function. ---- Revision: 776 Author: Yeahlight Date: 4:31:03 AM, Friday, October 07, 2011 Message: Added: The combat fatigue formulas that agree with our client. Heavier weapons induce more fatigue than lighter ones. Added: Fatigue for traveling. Swimming burns more stamina than running, which burns more stamina than walking / standing still. Added: A generic alcohol consumption formula and the correct sobering formula. As calculated by the client, drunkenness is quite random, thus it is not possible to synchronize with the server (except when the client fires off a save), but the implemented formula is accurate over the long run. Updated: Finished stamina (yellow bar) synchronization with the client. Stamina regeneration / fatigue has many more variables than mana regeneration, plus some of the formulas have random number generation components, thus stamina's synchronization cannot be guaranteed accurate; the more chaotic a client's movements, the less accurate their stamina level will be. Updated: The correct drunkenness penalties have been applied to avoidance AC and accuracy ATK formulas. Fixed: Various monk related issues with AC calculations. ---- Revision: 775 Author: Yeahlight Date: 5:27:52 AM, Thursday, October 06, 2011 Message: Added: Correct encumbrance formulas that agree with our client for both weight and critically low HP. Added: Fatigue penalties to STR, AGI and DEX. Added: Drunkenness bonuses to STR and STA and penalties for DEX, AGI, INT and WIS. Added: Encumbrance penalty to AGI. Updated: Started the process of synchronizing a client's stamina (the yellow bar, not the stat) with the server. Much like HP and mana, we no longer send the client direct stamina updates. Fixed: Several precision errors in the AC component formulas. A few monk related errors are currently outstanding, though. ---- Revision: 774 Author: Yeahlight Date: 7:09:54 AM, Wednesday, October 05, 2011 Message: Added: The ability to calculate a client's weight (equipment + inventory + cursor + coin) using the correct formulas that agree with our client. These formulas take into consideration both item and coin reduction bags, too. Fixed: Identified the actual maximum amount of client HP. Fixed: The maximum client HP formula now agrees with our client. ---- Revision: 773 Author: Yeahlight Date: 12:36:33 AM, Wednesday, October 05, 2011 Message: Added: Routines to determine PC drunkenness and its associated degree of drunkenness as instructed by the client. Added: Routine to properly determine if an entity (PC and NPC) has a skill (bool Mob::HasSkill()). Fixed: We have now the correct mitigation AC, avoidance AC, efficiency ATK, accuracy ATK, AC combination and ATK combination formulas for which all agree with the client. Encumbrance (normal and monk) and drunkenness penalties are currently absent from these formulas. Fixed: Added a lower bound to the HP synchronization routine to prevent a majority of the false positive warnings. Removed: All unnecessary attribute estimation formulas and switches. ---- Revision: 772 Author: Harakiri Date: 6:23:06 PM, Sunday, October 02, 2011 Message: Added: Identified Opcode to sent switches (doors, bridges, traps etc) as one compressed bulk packet Added: Switches will no longer be sent one at a time when zoning in, they are sent as one compressed bulk packet, this should reduce the network and processing overhead. Added: Identified how to sent the players inventory as one compressed packet, items are no longer sent one at a time during zone in, this should reduce the network and processing overhead and will get rid of other side effects. Added: Initial commit of new merchant item shop list - these are are "hand picked" and contain the correct shop list for felwithea, felwitheb, gfaydark(kelethin) and halas - over 165+ merchants with correct inventory. Please source eqc_merchant_shop_items_*.sql Updated: The merchants inventory will now be first loaded from the clean shop list, if no entry exists it will default to the old table. ---- Revision: 771 Author: Harakiri Date: 2:24:21 PM, Saturday, October 01, 2011 Message: Added: Identified previously unknown opcode sent by the client - OP_UnknownSpawn. When the server sends a position update for a spawn ID the client is not aware of, the unknown ID is sent back. Added: Function to resent a spawn to the client if the client requested a specific spawn ID. Updated: Identified all fields in the social action struct sent while using /emote. Updated: The main processing loops min sleep delay has been increased, this should reduce the CPU usage. Updated: The fall back for using items from the non blob item table now works correctly. Updated: No rent items are now correctly removed when the clients last login is more than 30min. Fixed: The server should no longer sent empty position updates each time. Updated: Loot messages are now sent to the looter and his group only. Added: A merchant will now greet the player with a selection of specific phrases. Updated: Using the correct 3d model for the bard lutes, the lutes are now visible when equipping. ---- Revision: 770 Author: Yeahlight Date: 2:19:29 AM, Saturday, October 01, 2011 Message: Fixed: HP and mana pools are now correctly updated server side after leveling. Fixed: Clients level 34 and below are now forced to stare at their spell book to gain the meditation bonus. Fixed: We now properly determine which classes have mana pools and at which levels they become active (bool Mob::HasManaPool()). Fixed: The base HP regeneration for standing and sitting now agrees with the client. Fixed: Implemented the correct total mana pool calculation formula. Fixed: Clients may no longer receive more than fifteen points of mana regeneration (flowing thought) per tic from items alone (good luck reaching this cap, anyway). Removed: All of the infinite loop checks. ---- Revision: 769 Author: Yeahlight Date: 4:38:52 AM, Friday, September 30, 2011 Message: Updated: The HP sync tolerance is now based on the PC's regeneration rate (base + item + spell) instead of a flat HP amount. Fixed: The correct mana gain formulas for INT/WIS have been implemented to match the client. As instructed by the client, PCs no longer accumulate additional mana from INT/WIS after the 200 mark. Fixed: The correct mana regeneration rates for standing, sitting and meditating have been implemented to match the client. Fixed: The number of buff tics on the server now agree with the client. Fixed: DoTs with a nuke component now work properly. ---- Revision: 768 Author: Yeahlight Date: 10:26:52 PM, Tuesday, September 27, 2011 Message: Updated: The healing and damaging routines for all entities have been unified under Mob::Heal(...) and Mob::Damage(...). The client HP synchronization should now be complete. Updated: HP updates for entities are no longer sent to PCs unless a change in its HP is greater than or equal to 2%. Entities will still continue to send their spawn updates every six seconds regardless of change in HP. Updated: Rewrote the entire mend routine. Fixed: Removed several unnecessary polymorphic declarations from the entity headers. Fixed: Numerous initialization oversights associated with allocated memory. Fixed: Numerous memory leaks associated with redundant payload allocations. Fixed: The server no longer forces death onto a PC. Fixed: Client side buffs are no longer removed by the server unless the buffs have ended prematurely (cancel magic, variably lengthed buff durations, death, etc.). ---- Revision: 767 Author: Yeahlight Date: 6:23:09 AM, Wednesday, September 21, 2011 Message: Added: The green exp consider level to the preprocessed consider table. Added: GroupedWithClient(...) to determine if two clients are grouped. Please use this function from now on. Added: The heading attribute to the zone explorer. Updated: The consider table is now a member of the zone class. Updated: Started the process of removing all routines that force a specific HP amount onto the client. We now rely on the client to tell us its current HP amount and all HP adjustments from the server will use the proper methods to adjust a client's HP (no more sending out HP update packets back to the client). If the server and client fall too far out of sync between tics, a warning message will fire. ---- Revision: 766 Author: Harakiri Date: 6:16:44 PM, Tuesday, September 20, 2011 Message: Updated: Identified value in item struct, the bard instrument modifier. Updated: The calculation of the bard modifier for spells has been refactored, the amount of code has been greatly reduced. Updated: Switching weapons is now correctly reflected server side for selecting the attacking skill. Updated: Identified field in the cast struct, the animation ID. ---- Revision: 765 Author: Harakiri Date: 9:25:27 PM, Sunday, September 18, 2011 Message: Updated: The clients looting process has been completely refactored, that includes corpse locking, listing items on a corpse, looting items, looting items within bag containers, auto equiping items while looting, looting items onto the cursor. Part of the corpse handling has also been refactored. Updated: The items are now taken by default from the blob table, the fallback is now the newer item table data when the blob item does not exist. Updated: #npcstats now shows the loot for corpses too Updated: Removed some files with empty class skeletons which were not used at all. Added: Found four fear related opcodes which either lock or unlock the clients interface. Added: client->LockInterface function to lock/unlock the players interface. Added: Found four attack related opcodes to influence the clients attack function. Added: Found Opcode to disable all chatting from the client, i.e. its not sent to the server anymore. Updated: Identified field in playerprofile - the conscious state of the player. Fixed: Figured out why the client sends four times the error opcode upon login. It was a sanity check related to memory corruption regarding the inventory items. The complete inventory is now sent at a later login stage. Fixed: The contents of a bag is now checked for lore items before the client can loot it from a corpse. Fixed: Memory leak while loading items from DB for world server process. Fixed: Non blob items with passive worn effects are now correctly used client side. ---- Revision: 764 Author: Yeahlight Date: 4:54:16 AM, Friday, September 16, 2011 Message: Added: The complete, preprocessed, consider table (green, blue, white, yellow & red) as instructed by the client for mobs level 1 to 75. No more greenies giving exp! ---- Revision: 763 Author: Harakiri Date: 5:34:12 PM, Thursday, September 15, 2011 Message: Updated: The players merchant interaction (listing items, buying, selling) has been completely rewritten from scratch (and needs alot less code =p). Merchants now differentiate between unlimited supply items (static inventory) and player sold items (limited, not persisted). A merchant now also correctly remembers the amounts of charges on a limited charge item, a player has sold. The inventory handling while buying items has also been fixed, stackable items go to existing stackable items first. Finally a merchant is now locked for other players as long as he is doing business with one player similar to world containers (forges). Fixed: Artifact items are now correctly displayed as "Artifact" Fixed: Lore items are now correctly displayed as "Lore" Fixed: Items with worn effect now correctly display the effects name Added: Command #listmercinv to list all items (visible or not) a merchant has, indicates player sold items ---- Revision: 762 Author: Yeahlight Date: 8:15:13 PM, Wednesday, September 14, 2011 Message: Added: Support for the sacrifice spell. Updated: Pulled several NPC and Client functions up through the entity hierarchy to avoid redundancy and type casting mistakes. Updated: Rewrote the LocateGround() routine to be more efficient. Removed: The old line of sight system. Replaced all line of sight calls with the new system, but these are not necessarily correct and line of sight will remain broken until I rewrite the entire NPC decision tree (this is up next). Removed: Quest files for zones that we do not support. ---- Revision: 761 Author: Harakiri Date: 7:06:19 PM, Friday, September 09, 2011 Message: Updated: The order of putting items into the inventory while trading or canceling a trade has been enhanced. First all containers which were in a trade slot are moved to an available free slot. Second, all stackable items are dispensed on existing stacks of the same type. Third, any items or charges left are normally put either into the inventory if a free slot is found or on the ground if not. ---- Revision: 760 Author: Harakiri Date: 5:14:30 PM, Friday, September 09, 2011 Message: Added: Support for random ground spawn items, they can now spawn at random locations in a zone and will respawn after a certain time when picked up! Updated: Please source new ground_spawns.* SQL file. Updated: Player dropped items and coins will now despawn after a certain time. Fixed: Spell Recast Timers should now work correctly. Updated: The available items have been limited to ID 32000 to prevent accidental summoning of invalid items for trilogy client. ---- Revision: 759 Author: Harakiri Date: 9:04:38 PM, Thursday, September 08, 2011 Message: Updated: Switches/Doors/Bridges/Triggers etc have been completely refactored. They are now represented by a generic WorldSwitch object. All associated handling (disarm, unlock, zone, trigger, etc) has been refactored too. Updated: All lifts (gfaydark, paineel) should now work correctly, all changes are now updated to other clients. The trigger of a lift is now also moved. Updated: /kill works again ---- Revision: 758 Author: Harakiri Date: 4:31:50 PM, Wednesday, September 07, 2011 Message: Fixed: Stackable items will no longer diplay "charges" while inspecting Fixed: Some array overruns, wrong type casting, memset which exceed size of destination. Updated: Added configuration for non debug build. ---- Revision: 757 Author: Harakiri Date: 1:37:37 PM, Tuesday, September 06, 2011 Message: Added: Handling for new opcode when the client picks up coins, identified the important bits in the PickupCoin_Struct. Updated: Figured out that the client handles dropped coins differently then dropped items (they need to be sent with another opcode/struct). Identified the important bits in the DropCoin struct. Dropping and picking up coins has been refactored, the client now finally sees the picked up money on the cursor. Updated: The sending of inventory items upon login has been refactored, reduced code by 90% =p Fixed: Only clicky items with limited charges will now be consumed, additionally only clickies which are consumable will be deleted when they have 0 charges left. Updated: Trying to combine items which do not represent a valid recipe will result in losing all components, like in vanilla eq. Updated: Items now remain in the a world container when a user leaves/close it (e.g. forge). No Drop items are still returned automatically tho. ---- Revision: 756 Author: Yeahlight Date: 6:54:06 PM, Monday, September 05, 2011 Message: Added: A quadtree visualization to the zone explorer. Added: An aggressive line of sight check to the zone explorer. Added: The new line of sight system has been added to the EQC project. The old system still exists and will be removed when a new NPC decision tree is implemented. Updated: The locate ground routine in the zone explorer now has a failsafe to fall back on when needed. ---- Revision: 755 Author: Harakiri Date: 3:07:21 PM, Sunday, September 04, 2011 Message: Updated: The world object handling (Tradeskill Containers like Oven, Dropped Items, Money) has been completely refactored and thoroughly tested. Dropped Items are now persisted, the contents of the a World Tradeskill container too. Use the new WorldObject class for any player interaction. Fixed: Dropping container items with items in it will now be correctly saved, picking up bags with contents will now correctly update the client too e.g. the client will see the bag contents immediately. Updated: Dropping/Taking Coins or Items has been completely refactored and tested. Updated: The tradeskill process has been refactored to use the new inventory and world object handling. Updated: When a client picks up money from the ground, the cash sound is now played client side. Updated: Please source the new contents*sql for saving world container items. Fixed: Some "doors/objects" in timorous had wrong data - this has been fixed. Please source update_doors_timorous*.sql Fixed: Items with passive effects e.g. cloak of flame will now correctly show the effect name when inspecting the item. Fixed: The contents of a traded container will now be immediately visible to the other player. Fixed: NPCs will now attack again =p Updated: When the inventory is full while finishing a trade with another player, the overflowing items are now dropped on the ground. Updated: All Entities GetName() and their child classes now return const strings, all associated methods have been refactored. Updated: Some more cleanup with inventory and trade handling, processing is now split into multiple files. Added: Backup of old SQL deltas, please do not remove these. Added: Identified Opcode to sent client an item of type book into a specific equipment slot. Added: Identified Opcode to sent client an item of type container into a specific equipment slot. ---- Revision: 754 Author: Yeahlight Date: 6:11:52 AM, Friday, September 02, 2011 Message: Added: Our new locate ground z-axis function to the zone explorer (LocateGround(...)). I have not yet exhaustively tested this routine, but I have not seen the camera fall "below the world," thus it already appears infinitely better than our old solution. Added: "Gravity" mode to the zone explorer (as emulated by LocateGround(...)). This mode pins the camera to the ground much like you would expect to see in the client. No clipping is still enabled, so the camera will trip if you run through a wall. Updated: Implemented a new collision detection algorithm to the zone explorer. This one is roughly fifteen percent more efficient than our previous method. ---- Revision: 753 Author: Harakiri Date: 4:49:48 PM, Thursday, September 01, 2011 Message: Updated: The Inventory and Item Management has been completely refactored. This is a major milestone and the result of 40h+ of work. The inventory should no longer be accessed through the the properties of the player profile but through the GetInventory() class in the client. It provides all needed functionality for any item handling. Updated: Due the Inventory refactoring, the Player->Player and Player->NPC trading has been refactored. Both the inventory and trade mechanics should now be much more stable, the changes also resulted in less code overall =) Added: Identified Opcode to (re)move charges from a stackable item (finally! no more workarounds) Added: Identified Opcode to substract specific amount of money from players inventory Added: Identified Opcode to substract specific amount of money from players bank inventory Added: Identified Opcode to delete all items and money in inventory and bank Added: Identified Opcode to delete an item in the inventory by its uniqueID (not item ID) Added: Identified Opcode to delete an item in the bank by its uniqueID (not item ID) Added: Identified Opcode for success of delete item by unique ID for bank and inventory Added: Method to delete items by their unique ID either for inventory or bank, identified accompanied struct the client needs for deletion Added: Command #delunique to delete an item by its unique id for testing Updated: Refactored consuming of spell components Updated: GMs can now #cast spells without requiring the spell components, the missing components are still reported ---- Revision: 752 Author: Yeahlight Date: 2:25:35 PM, Thursday, September 01, 2011 Message: Fixed: Collisions in the zone explorer are now only possible within the boundaries of the line of sight segment. Updated: The line of sight system in the zone explorer now traverses the quadtree in the zone's *.map file to locate nearby geometry. Added: Press F4 in the zone explorer to view the first collision along the segment's path instead of all possible collisions (F3). ---- Revision: 751 Author: Yeahlight Date: 12:10:07 PM, Wednesday, August 31, 2011 Message: Added: An elegant, linear algebra driven vector and triangle collision system to the zone explorer (see the README for usage). Instead of the old caveman approach of walking along a vector between two points constantly polling all nearby geometry with "Am I touching you yet? Am I touching you yet? Am I touching you yet?," we now know--practically instantaneously--which triangles in the zone our vector intersects with 100% accuracy. Distance between line of sight destinations no longer dramatically inflates execution time, as our computational complexity is now constant (insignificant). ---- Revision: 750 Author: Yeahlight Date: 4:34:15 PM, Monday, August 29, 2011 Message: Updated: The zone explorer now supports map files (*.map) instead of 3D graphs. Updated: The zone explorer's camera pitch is now limited to the range between zero and one hundred eighty degrees. ---- Revision: 749 Author: Yeahlight Date: 4:33:02 AM, Friday, August 26, 2011 Message: Added: The zone explorer project (sample file included [fieldofbone3dgraph.txt]). Please see ./Tools/Zone Explorer/README.txt for details ---- Revision: 748 Author: Harakiri Date: 8:11:24 PM, Wednesday, August 24, 2011 Message: Added: Identified 2 Opcodes and the associated structs which the client sents when you ask him for a dump of his client side inventory Added: Debug Command #diffinv which compares the inventory the client currently has with the values stored on the server Added: Debug Command #resetinv which will reset the server side inventory with all values from the client Fixed: Players which command a boat will no longer receive movement updates from the boat, this fixes the eradic behaviour due float/int conversion Fixed: Players will no longer receive swimming skill ups while on a boat =) ---- Revision: 747 Author: Harakiri Date: 7:33:26 PM, Tuesday, August 23, 2011 Message: Updated: Identified all fields in the GMZoneRequest_Struct Updated: Completely refactored and cleaned up the /zone command processing Updated: Fixed some issues related to player controlled ships and how movement looks to other players in the zone Updated: Identified the stolen item (Item_Struct) within the PickPockets_Struct and where the client should put the item (cursor, inventory, etc) Updated: Completely refactored and cleaned up the Pick Pocket processing ---- Revision: 746 Author: Harakiri Date: 7:11:13 PM, Monday, August 22, 2011 Message: Updated: Identified the primary/secondary melee weapon material settings in the Character Select Struct. Weapons finally show correctly in the char select screen, this is the intended way no need for workarounds with wear change =p Updated: Identified all equipment color fields in the players zonentry struct. Updated: Initial Commit of updated PickPocket logic by DarkAkuma ---- Revision: 745 Author: Yeahlight Date: 6:54:55 PM, Monday, August 22, 2011 Message: Updated: Identified the gravitational effects (levitation) field in the spawn struct. Updated: The x, y, and z-delta fields in the spawn position update struct have been combined into one field (deltas). Until we find a need to populate these fields for NPCs, breaking these delta fields down is unnecessary. Fixed: NPCs now swim underwater instead of just teleporting from update to update. Fixed: The PC spawn position update logic has been rewritten. PC movement is now perfectly fluid along all axises to all other PCs in the zone. ---- Revision: 744 Author: Harakiri Date: 11:19:02 AM, Sunday, August 21, 2011 Message: Added: Identified boat reset opcode, moves player to safe location. Added: Identified OP_ZoneRejectPlayer and OP_Corpse_XYZ opcode. Added: Working Map for Timorous Deep, previously the pathing would not work there Updated: Identified 6 fields in the ServerZoneEntry_Struct - the remaining equipment materials Updated: Identified the face field in the Spawn_Struct Updated: Refactored and cleaned up the ZoneEntry method, filling in the zonentry and the playerprofile is now done in dedicated methods ---- Revision: 743 Author: Harakiri Date: 8:07:32 PM, Wednesday, August 17, 2011 Message: Added: Barrel Barge boat route Oasis<->Timorous Added: The Gwenavyne boat route in Halas Added: Gondola boat route in Cabalis (Thats it! We now should have finished all boats. There are now 17 boats working with 33 different routes in their dedicated zones! Another small milestone =p) Fixed: Use default Z value for spawns when no approriate near ground Z could be found. Updated: Please source the boat*.sql files again. ---- Revision: 742 Author: Harakiri Date: 7:45:58 PM, Tuesday, August 16, 2011 Message: Added: Boat Bloated Belly route Overthere<->Timorous Updated: Boat family members are no longer hardcoded, please update boat*.sql Updated: Starting Cleaning Up Database Functions, now uses Logging System instead of StdOut ---- Revision: 741 Author: Harakiri Date: 8:48:00 PM, Monday, August 15, 2011 Message: Added: 4 Boats - Shuttles for Butcherblock <-> Timorous transfer to the Maidens Voyage, please source all boat*.sql files Added: Command #boatreset to tell the World Server to restart the boat route for a specific boat Fixed: Boats will no longer DePop all NPCs =) (why did RemoveNPC() that in the first place ..?) ---- Revision: 740 Author: Harakiri Date: 6:29:35 PM, Monday, August 08, 2011 Message: Added: Boat Maidens Voyage route Firiona<->Timorous. Added: Boat Island Shuttle route in Timorous, used to get passengers from Maidens Voyage to Island. Added: The correct message channels/attack skill ID for damage shields. Damage shields can now correctly be filtered client side. Updated: Fixed deadlock in boat management. ---- Revision: 739 Author: Harakiri Date: 5:46:53 PM, Friday, August 05, 2011 Message: Added: New Boat Worldserver command SIGNAL_OTHER_BOAT "boatname". A Boat can now signal a specific shuttle boat to start its process from the isle to the ship to bring or get passengers. Additionally added WAIT_FOR_SIGNAL worldserver command so that shuttle boats for example in Erudin wait till they get a order from a boat. Previously this was handled indirectly through counting down the time when a boat enters a zone and a global check, this however could result in error prone synchronization between the shuttle and the boat. Furthermore the logic did not support multiple shuttles in a zone for one boat like they are needed in overthere, now a boat can explicitly trigger the shuttle which is needed. Updated: Due to a game client mechanic the teleporting logic for players on boats had to be refactored. Normally the client will sent the server the information when a player enters or leaves a boat. The client however does not sent this information when a player moves directly from one shuttle to the boat or vice versa. Even tho the player was on the boat and ready to zone with the boat, the server thought the player was still on the shuttle. Now we scan the location around the boats position right before zoning for players which are in range and should be on a boat. To be sure that we have the correct players location upon scanning, the teleport process now waits a few seconds that all game clients have sent their position update. Updated: The Erudin<->Qeynos Boat Routes have been updated to reflect the new system. Updated: The Boatmanager has been cleaned up and uses the standard logging facility everywhere instead of printing to stdout. Updated: A boat which cannot zone because the next zone is down will now wait a bit and try again to zone, previously the boat was removed from the current zone and players would fall into water. This information is also broadcastet to players in the zone. Updated: The Erudin<->Qeynos Boat Routes have been updated to reflect the new system. ---- Revision: 738 Author: Harakiri Date: 1:19:20 PM, Thursday, August 04, 2011 Message: Added: Persistent cooldown/recast timers for spells and SHD/PAL class ability. The timers now persist through zoning/logout, previously they would be lost upon zoning. The timers are now per spell, no longer per spell gem, meaning swapping spells no longer resets the timer of the previous spell. Fixed: SHD/PAL class ability works again =) ---- Revision: 737 Author: Harakiri Date: 5:33:03 PM, Wednesday, August 03, 2011 Message: Added: Implemented server side chat filtering (/serverfilter on/off) for all chat channels and emotes. Unwanted messages are no longer sent to the client at all (for dial-up users =) Updated: Identified PVP Server Setting Opcode (NoPVP/Team PVP/Normal PVP) for Client, Enables/Disables Grouping/Attacking/Casting with specific character deities Updated: Identified all struct data sent by client for SetServerFilter Updated: Found out how to trigger the client to tell us his current chat filter settings on login (was previously incorrectly named as SAT_Camp and needed client id) Updated: Cleaned up and documented login sequence a bit Updated: Fixed client side crash which could be triggered by sending a message to the client which was not yet fully connected. Updated: Added missing quest function used for triggering signals to other npcs. Updated: Found and fixed issue of slow processing time in the setMoving() method for npcs. ---- Revision: 736 Author: Harakiri Date: 10:52:35 AM, Sunday, July 31, 2011 Message: Added: Implemented the correct way to initiate a boat zone transfer for passengers. The server now honors the clients relative position on the boat and restores it upon zoning in. Previously a manual zoning process was used, and the position of the passengers was manually calculated - this could result in passengers falling off the boat after zoning. Added: Due the new boat zone transfer, it is now possible to logout while on a boat and login on the same relative position on the boat again regardless if the boat has moved meanwhile or not. The also means the boat now no longer has to wait for its passengers after a zone and can start moving without worrying about slow zoning clients falling into water. Added: The server can now correctly answer to a clients boat locate request (where is the boat i should be on). Even if the boat is not in the current zone, it will ask the worldserver for the boats location. The worldserver will answer to the zone where the boat is, and then the client will receive the answer. That means, when you logged out in oot while on a boat and the boat is now in freporte - you will be automatically moved to the boat in freporte again - you wont fall into water =) Added: ForceClientSentOPSave() to force the client to save&sent its client side profile to the server. Available as command #forcesave Updated: Explained and documented the differences between the two save methods the client uses to sent the profile to the save. Updated: /goto now uses TeleportPC client side instead of ClientUpdate - you will now correctly transfer to entities e.g. /goto Stormbreaker00 will put you on the boat, not below in the water. ---- Revision: 735 Author: Harakiri Date: 6:25:53 PM, Tuesday, July 19, 2011 Message: Added: Stormbreaker boat route Butcherblock -> OOT -> Freeport Added: Sirensbane boat route Butcherblock -> OOT -> Freeport -> OOT -> Butcherblock (OOT boat routes are now complete) Updated: Please source updated boat*.sql ---- Revision: 734 Author: Harakiri Date: 9:04:04 PM, Thursday, July 14, 2011 Message: Added: Stormbreaker boat route Freeport -> OOT -> Butcherblock Updated: boat sql and some unneeded npcs, please source updated *.sql ---- Revision: 733 Author: Harakiri Date: 8:02:20 PM, Thursday, July 07, 2011 Message: Added: Pirate Runners Skiff boat route for nro <-> iceclad, please source updated boat sql Fixed: Since Icebreaker is the only boat with animation, other boats will no longer receive an animation stop update, previously this could result in inclined boats =) ---- Revision: 732 Author: Yeahlight Date: 7:44:48 PM, Thursday, June 09, 2011 Message: Updated: Spell stacking routine has been further updated with addition stacking rules and exceptions. This routine is now satisfactory and we may finish the rules and exceptions in the future under a joint effort. Fixed: The remaining PC debug messages have been wrapped with our debug preprocessor. ---- Revision: 731 Author: Yeahlight Date: 5:41:51 AM, Wednesday, June 08, 2011 Message: Fixed: The spell stacking rules have been rewritten to agree with most of the client's hardcoded exceptions and rules. There are some disagreements between the server and client, but we are much closer now to perfected stacking rules. Fixed: Entities stunned while moving now update correctly. ---- Revision: 730 Author: Harakiri Date: 6:36:01 PM, Wednesday, April 20, 2011 Message: Updated: Made some modifications to the icebreakers route, the boat should now have the correct heading once it has stopped at another dock Added: New command #boatgoto, instantly warps boat to specific node ID of route and continues from there ---- Revision: 729 Author: Harakiri Date: 7:08:09 PM, Wednesday, April 13, 2011 Message: Added: Icebreaker's boat route for Iceclad Ocean Added: Finally found opcode/struct combination to set a pet's owner. We no longer need to despawn an NPC when its charmed to spawn a dummy npc that can be player controlled. Mob::SetOwnerID automatically takes care of this now. Added: Commands setsize and spawnnpc. Updated: The auto boot of zones now honors the IP address of the server supplied in the LoginServer.ini, the auto boot now also works if the server listens on an external interface. Updated: Identified two fields in the PlayerProfile Updated: Identified three fields in the players spawn entry. Updated: Some NPC runspeed fixes for current DB, please source new *.sql ---- Revision: 728 Author: Harakiri Date: 4:59:06 PM, Wednesday, March 16, 2011 Message: Added: Identified WS_SEND_LOGIN_INVALID_CREDENTIALS opcode, tells the client that the username/password was invalid. Sending this now when the server cannot authenticate user, previously the client waited till network timeout. Added: Identified opcode to initiate session key based encryption of specific packets, still needs correct struct. Updated: Identified OP_CreateObject (similar to OP_DropItem) but used mostly for forges and switches Updated: Potentially identified gm only flag in item struct Updated: Made autobootzones=true default in LoginServer.ini since it seems to work well Updated: The #goto command will now use the TeleportPC function insteadof MoveTo because MoveTo would move you to the ground z coordinate, TeleportPC will put you at the given z coordinate, even in air. ---- Revision: 727 Author: Harakiri Date: 7:58:41 PM, Wednesday, March 02, 2011 Message: Added: Auto booting for zones, use autobootzones=true in LoginServer.ini below [LoginServer] settings. The world server will scan for an available port on the localhost and will launch a zone process with an unused port. When you use this setting, you no longer needed to launch zones manually. ---- Revision: 726 Author: Harakiri Date: 5:28:39 PM, Tuesday, March 01, 2011 Message: Added: QuestUtil for perl, exposed to perl scripts. Includes missing helper functions for quests, there should be no perl errors now when loading zones e.g. freportw or when turning in quests to npcs which give you a random reward. ---- Revision: 725 Author: Harakiri Date: 2:45:19 PM, Thursday, February 17, 2011 Message: Fixed: Stackable items should no longer show "charges X" Fixed: Clickies from inventory should now work (again) ---- Revision: 724 Author: Yeahlight Date: 2:31:18 AM, Wednesday, February 02, 2011 Message: Added: Routine to dump the entire spell stacking chart. Updated: Additional refactoring and cleanup of our spell routines. Fixed: Rewrote the spell value calculation routine and implemented our missing formulas. These calculations have not yet been verified correct, so you may experience odd results. Fixed: The stacking rules have been adapted for DoTs. When a stacking conflict arises between two DoTs, the new DoT is permitted to land if its resistance type is disease, if its resistance type differs from the other DoT, or the class that owns the new DoT differs from the class that owns the other DoT. These rules mean that a Shaman may stack all of their disease DoTs, that a Necro may stack Dooming Darkness with Boil Blood, and that a Druid may stack Stinging Swarm with a Necro's Dooming Darkness, respectively. As always, the identical spell check is made first prior to checking for stacking conflicts, thus a Shaman will never be able to stack Plague with a Necro's Plague. Fixed: Removed the giant switch for calculating spell haste. We are now using the new formula routine. Fixed: The rules that describe a duration based buff are now correct. Fixed: The rules that describe a DoT are now correct. ---- Revision: 723 Author: Yeahlight Date: 5:01:35 AM, Saturday, January 29, 2011 Message: Updated: Continued work on the spell file refactorization and cleanup. ---- Revision: 722 Author: Yeahlight Date: 3:27:10 AM, Friday, January 28, 2011 Message: Updated: Continued work on the spell file refactorization. ---- Revision: 721 Author: Yeahlight Date: 6:01:47 PM, Thursday, January 27, 2011 Message: Updated: Continued work on the spell file refactorization. ---- Revision: 720 Author: Yeahlight Date: 1:19:55 AM, Thursday, January 27, 2011 Message: Updated: Started the task of refactoring and reducing our spell data files to match only the data present in our spdat.eff file. ---- Revision: 719 Author: Harakiri Date: 4:33:51 PM, Monday, January 24, 2011 Message: Added: Found Opcode to tell client the zone teleport destinations and the associated struct for sending a list of destination points, no more server side scanning for zone lines or teleport pads needed! Added: New db\*.sql for working list of intra zone and zone to zone destination points, please source this file. Updated: Identified field in zone_change struct Updated: ScanForZoneLines has been disabled ---- Revision: 718 Author: Yeahlight Date: 4:49:00 AM, Saturday, January 22, 2011 Message: Added: Data folder to the SVN for game data (skills, spells, etc.). Added: Complete spell dump file of our spdat.eff to the SVN. Added: Support for the day time and night time line of spells. Updated: Identified the indoor/outdoor and time of day (day/night) flags in the spell record struct. Updated: Refactored the spell casting process. Fixed: Several bugs and crashes within the spell casting routines. Fixed: PCs must have LoS to cast detrimental spells on targets. ---- Revision: 717 Author: Yeahlight Date: 1:39:16 AM, Friday, January 21, 2011 Message: Added: Charmed NPCs now generate hate towards their master during the charm's duration. Fixed: Melee attacks, no matter the outcome, now generate the same amount of hate based on the mob's damage potential (maximum hit). Fixed: Resisted nukes and DoTs now generate hate. Fixed: Resisted spells no longer generate a fraction of the original hate. Fixed: Mesmerized and feared PCs may no longer attack. ---- Revision: 716 Author: Yeahlight Date: 1:48:02 AM, Wednesday, January 19, 2011 Message: Added: Hate caps for heal agro for targets level 50 and below and 60 to 51. Fixed: The hate management system no longer derives hate from melee/spell damage. It will now use the passed in hate value. Fixed: Pet damage credits the pet with only hate points and credits the owner with only damage points, such that the pet retains the true calculated hate and the owner is credited with damage for loot rights. Fixed: Heal agro no longer divides the total hate amongst all the entities hating the caster's target. Fixed: Heal agro is now 2:3 for hate:heal points. Fixed: Mesmerized and stunned NPCs generate far less hate when in the presence of a heal spell. Fixed: Using beneficial spells on a charmed mob no longer generates hate. ---- Revision: 715 Author: Yeahlight Date: 3:36:50 PM, Saturday, January 15, 2011 Message: Added: Restrictions for level 51+ buffs. These buffs will only land when the receiving entity cons blue or higher to the minimum level required to cast the buff for any one class. For instance, a level 60 paladin may buff a level 1 PC with their highest HP buff as long as this buff is shared with another class that may cast it prior to level 51. Fixed: A mob affected with any sort of DoT spell (detrimental or beneficial) will strip all forms of mesmerization off on the next HP tick. It turns out that the client decides when a mesmerization spell should wear off, and--unfortunately--its decision is simply a check whether or not the client is currently DoT'ed with no regard to verifying if the DoT is actually causing any harm after regeneration effects. Sorry PvP Enchanters! Fixed: Beneficial DoTs (see: Arch Lich) no longer nuke the target on the first tick. ---- Revision: 714 Author: Yeahlight Date: 12:51:28 AM, Friday, January 14, 2011 Message: Added: Support for diminishing stat return calculations. Updated: Rewrote the variably lengthed spell duration routine. The distribution for detrimental spells is now the symmetrical normal distribution with the median and mode starting at the spell's maximum duration divided by two. Level and stat bonuses now only shift this distribution left and right; there are no more changes to variance. Beneficial buffs still pull their durations from an asymmetrical normal distribution, though. The stat bonus calculation for charm (the only type of spell where stats are pinned against each other) is now 5:3 (CHA:SVM), meaning that every five points of CHA from the caster negates three points of SVM on the target. When diminishing returns kick in, the caster requires twenty five points of CHA to negate three points of SVM. Fixed: Resisted or not, all detrimental spells fade the target's invisibility and cancel FD. Fixed: In order for a mez to be broken by a DoT, the total detrimental DoT damage (lich damage not included) on the mob (PCs included) must surpass their total spell, item and racial regeneration bonus. ---- Revision: 713 Author: Harakiri Date: 5:45:59 PM, Thursday, January 13, 2011 Message: Fixed: Range Attack Animations should now work correctly, again Added: Found Opcode to play specific sound files by ID, use #playsound to try it out! ---- Revision: 712 Author: Harakiri Date: 7:59:40 PM, Wednesday, January 12, 2011 Message: Updated: Found initial camera position (yaw,roll) and deltaXYZ values in the ServerZoneEntry_Struct ---- Revision: 711 Author: Yeahlight Date: 7:19:28 PM, Wednesday, January 12, 2011 Message: Added: Support for heal agro from non-percentile heal spells (direct heals and HoTs). Fixed: Stun, fear and DoT ticks now remove mesmerization and invisibility effects. Fixed: DoTs no longer act as a nuke on the first tick. Fixed: Refined the definition of a DoT spell. ---- Revision: 710 Author: Yeahlight Date: 8:20:08 AM, Wednesday, January 12, 2011 Message: Added: Support for spell fading warnings (these are not to be confused with the messages that the client produces when a buff fades). Added: DoT debuffs now inform the caster when they have faded. Added: SVN directory for formula research. Fixed: Adjusted the variably lengthed duration stat bonus calculations to include the target's save vs. magic. Fixed: Instead of simply forcing a duration of one onto negatively calculated variably lengthed durations, the calculations are redone to choose a legitimate value from the distribution. ---- Revision: 709 Author: Harakiri Date: 7:43:21 PM, Tuesday, January 11, 2011 Message: Updated: Reverse engineered some fields in ServerZoneEntry_Struct ---- Revision: 708 Author: Yeahlight Date: 1:59:04 AM, Tuesday, January 11, 2011 Message: Added: Support for discovering the charm permission opcode. Yaaayyyy opcode/packet hunting :/ Fixed: The owner of an eye of zomm no longer receives packets for their own movements. Fixed: Mesmerization effects now fade when the victim receives any sort of damage. ---- Revision: 707 Author: Yeahlight Date: 6:50:30 PM, Sunday, January 09, 2011 Message: Added: Root spells may now break early when encountered by direct damage portions of spells. Added: The (incomplete?) list of spells which have variably lengthed durations. Fixed: Life drain spells now set the caster's HP correctly when targeting a PC. Fixed: Call of the Hero drops agro from the target when the distance between the caster and target is greater than or equal to 200. Fixed: A charmed entity may no longer be charmed again until the original charm spell has completely worn off. Fixed: Blind and mez spells are no longer considered variably lengthed. ---- Revision: 706 Author: Harakiri Date: 1:00:03 PM, Sunday, January 09, 2011 Message: Added: Intra Zone Teleport Points for erudnext and felwitheb, Teleport Pads work now Added: Zone Points gfaydark<->felwithea<->felwitheb and erudnext<->tox and erudnext<->erudnint please source new *.sql Updated: Using TeleportPC instead of SpawnPositionUpdate for teleporting the player within a zone Fixed: Bards can disarm traps again Fixed: Zoning with softcoded zone points had x and y reversed ---- Revision: 705 Author: Yeahlight Date: 6:21:19 PM, Tuesday, January 04, 2011 Message: Fixed: Switched to the asymmetrical, normal (Gaussian) distribution for variably lengthed buff and debuff durations. The exponential distribution was too harsh. Fixed: Level gap bonuses and situational bonuses for variably lengthed buff and debuff durations are now working correctly. These bonuses reduce the variance (standard deviation) of the distribution, netting more favorable durations for the caster. ---- Revision: 704 Author: Yeahlight Date: 2:47:13 AM, Tuesday, January 04, 2011 Message: Added: Support for the stamina regeneration spell line. Added: Support for variably lengthed buffs and debuffs (invis, root, charm, mez, fear, etc.). The durations are pulled from an exponential distribution with bonuses derived from the caster's CHA (for charm, mez, fear) and any applicable level gaps between the caster and target. Fixed: The grow spell line may only be casted indoors now. Fixed: The Whirl Till You Hurl spell line now acts as a mesmerize instead of a stun. Fixed: The Divine Aura spell line now drops the caster to the bottom of all hate lists. ---- Revision: 703 Author: Yeahlight Date: 7:22:59 PM, Sunday, January 02, 2011 Message: Fixed: Teleportation objects (doors) no longer display the summoned message to the user. Fixed: PCs may only strip buffs from other PCs with the cancel magic spell line while grouped. Fixed: PCs may only summon other PCs with the Call of the Hero spell line while grouped. Fixed: The Call of the Hero spell line now purges all hate from the caster's target. ---- Revision: 702 Author: Yeahlight Date: 4:43:41 PM, Friday, December 24, 2010 Message: Added: Quest files to the SVN ---- Revision: 701 Author: Yeahlight Date: 1:44:40 AM, Saturday, September 04, 2010 Message: Added: Support for MySQL 5.1 (4.1 is no longer supported). Added: A new database batch file. Source this for the MySQL 5.1 support. Added: #shownodes now displays the roamboxes. Fixed: Ogres are once again immune to frontal, melee stuns. ---- Revision: 700 Author: Harakiri Date: 10:37:18 AM, Tuesday, July 27, 2010 Message: Added: Identified client opcodes OP_RequestGuildInfo, OP_ToggleChannelFilter, OP_RequestChannels and WS_Client_Quit. Added: Identified Toggle Channel Filter and Request Guild Info struct. Added initial server side recognition of these queries. ---- Revision: 699 Author: Harakiri Date: 6:38:53 PM, Monday, July 26, 2010 Message: Updated: Extended TriggerSpawn setting to include random min and max spawns, a random number of npcs can now spawn around a trigger. Added: Some more triggered spawns and traps, please update sql delta for trigger*.sql and trigger_spawn*.sql Added: Identified opcodes related to checksums of clients game files. Added: Methods to generate checksum serverside for specific game files. Added: Clients game and meta data file checksums must now match our enforced version, if not login will be prohibited. Modifying game files will no longer be easy, it will now take a more sophisticated hacker =). Updated: World Server was cleaned up a bit with using standing logging facilities. Updated: CastSpell_Struct is now fully identified and documented. Added: Fully identified the weather struct. Readded #weather command ---- Revision: 698 Author: cofruben Date: 5:05:04 PM, Wednesday, July 14, 2010 Message: Note: In order to help testing, GM's can now cast all spells indoors such as sow etc. Note: Restored my previous debugging system in order to tackle the item bugs (#cdebug items 1) Note: Split client.cpp into items.cpp and merchants.cpp to make it cleaner. ---- Revision: 697 Author: cofruben Date: 3:40:53 PM, Wednesday, July 14, 2010 Message: Fixed: Anti ghost code is now working correctly adding EntityList::CheckDuplicated(char* name). Fixed: some client connecting stuff, now using less packets to complete it. ---- Revision: 696 Author: Harakiri Date: 6:49:08 PM, Tuesday, July 13, 2010 Message: Added: Triggers now use a database based configuration, Velious/Kunark traps can now also spawn N specific mobs at a specific locations. Added; Velious/Kunark traps can now be disarmed. Added: Added over 50 different traps and trigger messages for specific zones, please source trigger*.sql and trigger_spawn*.sql Updated: Fixed heading on some vanilla traps, added missing qeynos doors, fixed door issues in necropolis. Please source update_doors*.sql Fixed: Spell effects by triggers should now be always visible to the client. Added: command #dist to show the distance to the target Fixed: Most messages sent to the clients should now use DEFAULT_MESSAGE_RANGE instead of a to low value. Fixed: Sending larger messages to the client should now work correctly. ---- Revision: 695 Author: cofruben Date: 4:41:30 PM, Monday, July 12, 2010 Message: Note: Cleaned up client connecting process a little making it more efficient & human readable. Note: Made APPLAYERs constant for all processing of packets so that's more secure. Note: Those steps were needed in order to approach the actual EQEmu networking system, so more changes in the way. ---- Revision: 694 Author: Harakiri Date: 7:45:12 PM, Wednesday, July 07, 2010 Message: Added: Framework for Trigger based Entities (i.e. Kunark/Velious Traps or Environment Messages), when clients enter the proximity of these triggers they can either just print out a message (for example: water drips from the stalactite to the stalagmite) and/or cast specific spells on surrounding targets. Added: Clients can now sense Kunark/Velious Traps. Added: Command #showtriggers to make these invisible triggers appear temporary. Fixed: Weapons for primary/secondary slot should now correctly show their effect. Added: SetAppearance is now available through the perl interface for NPCs. ---- Revision: 693 Author: cofruben Date: 10:16:52 AM, Tuesday, July 06, 2010 Message: Fixed: a zone crash when using just "/tell" with no target. ---- Revision: 692 Author: Yeahlight Date: 4:16:25 AM, Sunday, July 04, 2010 Message: Added: Reserved primary and off-hand attacks for NPCs when they are out of melee range (this was previously only enabled during spell channeling). Fixed: When an NPC cannot find a complete path from its nearest pathing node to a chosen destination node (recall that this only happens when line of sight is not present), the NPC will now resort to teleportation instead of freaking the hell out. This means that NPCs may now make the transition between disconnected systems of nodes (mini-dungeons). Fixed: Cleaned up the CastOn struct. ---- Revision: 691 Author: Yeahlight Date: 10:33:56 AM, Wednesday, June 30, 2010 Message: Empty message. ---- Revision: 690 Author: Yeahlight Date: 7:10:59 AM, Tuesday, June 29, 2010 Message: Added: The start of feedback messages warning the PC when a specific NPC process is requiring too much processing time. Fixed: Memory allocation for pathing nodes is now dynamic. Fixed: The binary search algorithm for finding the closest node to a mob has been completely rewritten and optimized. If this new formula is not sufficient for zones with a large number of nodes, then we can look into creating binary space partitions for each zone. ---- Revision: 689 Author: Harakiri Date: 8:42:29 PM, Monday, June 28, 2010 Message: Added: Rogue Skill Sense Traps, when successful the player will now face automatically to the nearest trap. Added: Rogue Skill Disarm Traps, when successful the trap will temporary stop - this works both by either clicking on the trap or using the skill disarm trap to disarm the nearest trap. Added: Identified field in player zone entry, the players size. Added: Found different actions for stopping a trap. Added: Found Opcode and Answer Struct for Sense Traps. Added: Identified field in player profile, a pointer to the zone entry. Updated: Refactored Door Handling. ---- Revision: 688 Author: Yeahlight Date: 8:10:33 PM, Monday, June 28, 2010 Message: Added: #removelineofsight command to delete a line of sight record between a targeted node and another node in the zone. Fixed: The formula to connect two locations with a strait line of objects has been fixed. ---- Revision: 687 Author: Yeahlight Date: 2:47:29 AM, Friday, June 25, 2010 Message: Added: The #forcelineofsight command to establish a line of sight link between a targeted node and an existing node in the zone. Added: #shownodes now displays a visual link (a series of gold coins) between all nodes with line of sight. Fixed: #addnode / #addwaternode now resorts the list of nodes on insertion. Fixed: Tweaked the restricted line of sight formula. ---- Revision: 686 Author: Harakiri Date: 8:28:07 PM, Wednesday, June 23, 2010 Message: Updated: Fixed zone crash when using a static zone instance Added: Deadly Strikes for Rogues Added: Cooldown Timer for Range Attacks Added: Warriors have a chance to stun kick their target starting with level 55. Updated: Refactored clients CombatAbility/Kick processing ---- Revision: 685 Author: Harakiri Date: 4:24:27 PM, Monday, June 21, 2010 Message: Added: Identified PlayerProfile field how much air the player has left before drowning. The current value will now also be saved and loaded, clients should no longer start to drown instantly as soon as they zone while being underwater without enduring breath. Added: New command #listentities/le, lists all npcs and their coordinates. Updated: Tradeskill combine/failures will now be broadcasted to the players group. Added: Some debugging methods for quests. ---- Revision: 684 Author: Harakiri Date: 9:18:57 AM, Friday, June 18, 2010 Message: Added: The non blob item table is now the default one, all inventory/summoning is now done using the data from the non blob table. Please source the update*.sql, it includes fixes for items which use a newer ID 3D model file than the client can handle. When you want to use items from the blob table, use the command #si2. Fixed: Possible zone crash in CanEquipThisItem due array length exceeded error. Using bitmask operations now. Fixed: Non blob item bags should no longer result that bags had always a tiny capacity. Updated: Identified 2 16bit fields in the item struct. Fixed: Summon Spells should now summon the correct ammount of items instead of always 1. ---- Revision: 683 Author: Harakiri Date: 12:03:40 PM, Tuesday, June 15, 2010 Message: Added: Completed refactoring of range attack code, it now uses a similar miss calculation like melee and a new damage calculation which includes the correct primary stat for range damage. Added: Range weapons like bows can now proc an effect. Updated: The command summonitem has now an optional secondary parameter, the number of charges for the item to be summoned. Updated: Identified some bits in the zonentry struct. ---- Revision: 682 Author: Yeahlight Date: 5:18:37 AM, Saturday, June 05, 2010 Message: Added: Batch file to copy and move executables from the build directory to the working directory, launch said executables, minimize all windows and launch the client. Added: Water maps for each zone. Added: No clipping mode (#noclip). Unfortunately, clients cannot break into the empty sections of the zone geometry, but this mode still has some worthwhile applications (skipping doors, etc.). Added: Zoning with critically low HP now heals the client slightly and strips all their buffs. Added: Hailing a node now results in the node telling you their node ID. The client does not display numbers in names, so this is as good as it is going to get. Fixed: The node placement and path generation commands are now available again (#addnode, #addwaternode, #deletenode, #shownodes, #createdirectedgraph, #resolvepaths). Fixed: The node system is now unified and does not require any third party executables for sorting, checking and parsing. Fixed: The save routine has been rewritten and cleaned up. Fixed: Reversed the zone freeze condition when no clients are present. If a client trained NPCs to the zone line and no clients remained in the zone, the NPCs would never head home. ---- Revision: 681 Author: Harakiri Date: 6:54:45 PM, Wednesday, June 02, 2010 Message: Fixed: GM Players should no longer see the endurance bar go up and down (they are never actually thirsty or hungry according to the client). Added: Endurance check now actually tests if the player is in water, he will now lose a small amount of endurance while swimming. Updated: Some minor housekeeping ---- Revision: 680 Author: Yeahlight Date: 8:06:28 PM, Tuesday, June 01, 2010 Message: Fixed: The client and server are now in sync with client login locations ---- Revision: 679 Author: Yeahlight Date: 9:52:44 PM, Tuesday, May 18, 2010 Message: Fixed: Item projectile travel and collision calculations ---- Revision: 678 Author: Harakiri Date: 12:09:42 PM, Tuesday, May 04, 2010 Message: Added: Mob/Client GetID() is now also available using perl scripting Added: Executing range attacks now spawns a projectile moving towards the target (Arrows, Throwing Knifes etc). Furthermore the damage/miss calculation/text is only done when the projectile reaches the target, not instantly after using a range attack. Updated: Initial refactoring of range combat, fixed consuming of ammo. Updated: Extended Projectile packet documentation and handling. Added: Sample #spawnmissle to perl commands ---- Revision: 677 Author: Harakiri Date: 8:21:06 AM, Tuesday, April 27, 2010 Message: Added: "classic" duration time for all disciplines Added: "classic" base cooldown time for all disciplines Added: "classic" formula to reduce the cooldown by each level after you initially got the disciplines for all disciplines ---- Revision: 676 Author: Yeahlight Date: 6:24:47 PM, Saturday, April 17, 2010 Message: Core repository changes for the move to the new server ---- Revision: 675 Author: Yeahlight Date: 2:50:40 AM, Thursday, April 08, 2010 Message: Added: Support for bulk spawn update packets for both close and distant ranges. Fixed: Mobs no longer issue close range updates unless they are moving and/or changing their cardinal heading. Instead, clients now request bulk spawn updates from the server. ---- Revision: 674 Author: Yeahlight Date: 12:59:21 AM, Tuesday, April 06, 2010 Message: Added: Persistent spell recast timers (zoning/camping no longer resets recast timers) with continuous updates Fixed: Spell recast timers are now functioning correctly ---- Revision: 673 Author: Harakiri Date: 9:26:44 PM, Wednesday, January 27, 2010 Message: Added: Identified PlayerProfile Bit SpawnAppearance, also some additional cleanup. ---- Revision: 672 Author: Harakiri Date: 11:59:04 AM, Monday, January 25, 2010 Message: Added: Implemented Persistent Timer Framework to store reuse/cooldown time accross zoning/logout/login. Please source timer*.sql in \db dir!. Use client->GetPersistentTimers() to implement your own timers. Added: Disciplines now use a persistent timer for active and reuse time. ---- Revision: 671 Author: Harakiri Date: 11:51:35 AM, Friday, January 22, 2010 Message: Added: Player controlled small boats are now working correctly. Players may now "move" over water using a boat. ---- Revision: 670 Author: Harakiri Date: 11:48:20 AM, Monday, January 18, 2010 Message: Added: Identified property in playerprofile, the name of the boat the player is currently on. When the player disconnects/zones the client tries to automatically teleport him where the boat is, if this property is set. Added: Found new opcode OP_LocateBoat & OP_LocateBoatAnswer. When the boat is not in the current zone and the playerprofile has a boatname set, the client asks for the zone where the boat currently is. OP_LocateBoatAnswer is used to tell the client the zone. Added: Implemented Bard Disciplines Deft Dance and Puretone - All Bard Disciplines are now implemented Added: Implemented Paladin Disciplines Holy Forge and Sanctification - All Paladin Disciplines are now implemented Added: Implemented Ranger Disciplines Trueshot and Weaponshield - All Ranger Disciplines are now implemented Added: Implemented Shadowknight Disciplines Unholy Aura and Leechcurse - All Shadowknight Disciplines are now implemented Fixed: Only classes with double attack skill may now have a chance to double attack with offhand. ---- Revision: 669 Author: Harakiri Date: 11:32:41 AM, Thursday, January 14, 2010 Message: Added: Implemented Monk Discipline Hundred Fists - All Monk Disciplines are now implemented Added: Implemented Rogue Discipline Blinding Speed - All Rogue Disciplines are now implemented Added: Implemented Warrior Disciplines Evasive, Mighty Strike, Precision, Aggressive - All Warrior Disciplines are now implemented ---- Revision: 668 Author: Harakiri Date: 12:25:02 PM, Wednesday, January 13, 2010 Message: Added: Implemented Monk Disciplines: Stone Stance, Whirlwind, Void Dance, Inner Flame Added: Implemented Rogue Disciplines: Counterattack, Deadeye, Nimble, Kinesthetics, Duelist Added: Implemented Warrior Disciplines: Charge, Defensive, Furious, Fell Strike, Fortitude ---- Revision: 667 Author: Harakiri Date: 9:12:06 AM, Tuesday, January 12, 2010 Message: Added: Base Resist Calculations for all class/race combinations, these are now included server side when using CalcBonuses() Added: command #clientstats to compare server side stats (i.e. resists) with client side displayed values Added: Implemented Fearless discipline for all melee/hybrid classes Added: Implemented Resistance discipline for all melee/hybrid classes Added: Found opcode to confirm activation of a discipline to the client, i.e. the client will show the correct resist increase values when the resistance displine is active ---- Revision: 666 Author: Harakiri Date: 10:37:29 AM, Wednesday, December 23, 2009 Message: Added: Framework/Container for handling disciplines Added: Data for all 33 Disciplines, please source db/disciplines_*.sql Added: Identified all client side IDs for each /discipline command Added: Implemented Monk Disciplines Thunderkick, Silent Fist and Ashenhand . Only 30 more to go! =p Added: Example to commands.pl to sent all emote/animation ids ---- Revision: 665 Author: wizzel Date: 6:05:38 PM, Thursday, December 03, 2009 Message: Fixed: Fixed a few possible zone crashes introduced by a developer whose name starts with W. ---- Revision: 664 Author: Harakiri Date: 12:24:24 PM, Wednesday, December 02, 2009 Message: Fixed: Small fix to make $entity_list available when using perl commands