// herbfunk revisions v1.4.4.0 Ability: Clusters used for abilities are now seperated from Target/Group clusters. Cluster method used now uses ClusterConditions as the parameter. Removed Property CheckCustomConditionsAlways. Added DOTDPS to TargetProperties. TargetMovement.BlockedMovementCounter is now reset after SuccessfullyUsed method is called. Added ClusterTargetNearest to AbilityUseTypes. --This will target closest unit of the cluster. Barb Cleave now uses ClusterTargetNearest. Monk FOT now uses ClusterTargetNearest. WitchDoctor: Added TargetUnitConditionFlags to Lotus Swarm and Spirit Barge. Grouping: Changed unit validation to ObjectIsValidForTargeting Kill Radius extension only applies to units added to DistantUnits list. TargetMovement: NonMovementCounter will require LOS check on object. Changed how Distant Check is tested. Items will now require LOS during Distant Check. NEW FEATURE: Bot Stop on Low Health Feature Implemented: Triggered when Health Percent is less than or equal to value set. This will open the game menu up and stop the bot! Screenshot is optional -- this will resize window, move it, refresh it, capture, and return it back to orginal. *Screenshots are saved in @FunkyTrinity/Log/Screenshots/ *Width and Height of the resize can be edited directly in the XML settings for the character. Refactor: Removed Statistics Class (Held all other stat classes). ItemStats,GameStats, and ProfileStats are now properties of Stats Class. Refresh is now a static class inside Bot. Misc: ObstacleChecking will now modify range based upon stuck counter. Added a list for profile blacklisting which will be ignored if object is being prioritized. BotStatistics and related classes have been moved into Bot.Stats. BotStatistics has been renamed to Statistics. Profile Check has been moved into Bot.Stats as Void. Profile Behavior checking has been moved into Bot Class. Fixed IgnoreCorpses by checking if its actual corpse. Added Spawner Unit Hash Set and Property to CacheSNO. Added Clustering Setting Exceptions -- Spawner Units, Ranged Units. Fixed ObjectIsSpecial for CacheUnit. Added a2dun_Zolt_SandBridgeBase to BlackList. Settings: Demonic Essences Pick Up option added to Funky Settings (Item->Pickup) Grouping Output option added. (Logs various actions). Clustering now has its own tab under Combat Tab. Added Cluster Exceptions: Spawner units and Ranged units. v1.4.2.0 Refactor -- *Details: https://github.com/herbfunk/Funky/commit/ed2ff629826fefae82bcc836b568979871e598ac *Navigation and Stats are now static properties of Bot Class. *Kiting renamed to Fleeing *Namespaces added: https://github.com/herbfunk/Funky/commit/8bdbc05ee33f6b954481b10124323c02b5e57b3e FunkyTrinity. -- Movement, Cache, XML, Enums, ability Settings: !All Settings will need to be set again! *switched to XML Serialization *removed kiting/avoidance min and max retry settings *added grouping settings Grouping: *To help grow a group of units by engaging distant groups and returning to orginal target afterwards* -Behavior is triggered when multiple "tough" units are being engaged. -Setting: Minimum Unit Distance is what determines the eligible units for clustering. (Unit must be at least the distance set from bot.) -Setting: Maximum Distance Allowed is the maximum distance the cluster can be to be considered as a target. -Setting: Minimum Units In Cluster filters away any clusters with less than the value set. Misc: -Fixed issue of getting stuck during town run -- unid stashing -- in Act 3. -Craft plans are automically stashed if in inventory. (Settings filter pickup of plans now) -Barricades and Interactables with will no longer test intersection using (Current Path Vector) in ObjectIsValidForTargeting. -Reset inactivity timer during waits for skill on bosses. v1.1.1.0 -Redesigned Navigational block checking. -LOS Checking for Ranged Classes during Target Handling will also use AllowProjectile NavCellFlag. -Fixed unhandled exception when checking CurrentProfileBehavior. -Fixed unhandled exception for ErrorClicker IsInGame Check. -Obstacle Object Radius is now set to collision sphere and properties are overriden accordingly. -IsNPC is checked regardless of if monstertype is hostile. (Fixes issue with NPC targeting when monster type should be "hostile") -Clustering Ability Checks when Clustering Target Logic is disabled will properly update cluster cache. -Fixed issue with A1 Town Run Movement to Vendor. -GPCache weighting for avoidances will use bots health percent to multiply the weight added. -Wizard abilities now properly check if current target is null! *Added clustering check into metor, hydra! *Hydra is now added to pet data and ability checks if hydra already is summoned. -Removed a lot of unused code. v1.1.0.0 ¡This Update requires -- DELETING FunkyTrinity Folder -- prior to extraction! Settings: *GilesSettings has been totally removed! *FunkyWindow has been updated to be easier on the eyes. *Default values changed for a more optimized setup (Inferno Farming) Targeting: *Fixed Line of Sight related logic and actions. *Weighting and Current Target updating has been moved into TargetHandler. *Optimized refreshing with reduced iterations of object cache. *Legacy Update Log* v0.1.0.20 Abilities: Modified the following abilites to use cluster computing. WD -> FireBats -> Acid Cloud. (Runes) -> Lotus Swarm and Haunt Barb -> HOTA -> Seismic Slam Misc: Fixed potential crash with FunkySettings for Non-US users (Formating the percent text values!) LOS For Range Classes will also check ServerObject Cache. Clustering will no longer take into account units that are not valid for targeting. Combat cache will flag UsingDotDPSAbility when a unit is checked. DotDPS will update for Witchdoctor Loctus/Haunt ability. Added Cache HashSet for Stealthable Units -IsTargetable will check stealth attribute when unit is a stealthable normal monster Fixed XML Tag NextProfile. v0.1.0.19 Clusters: Implemented Kmeans Clustering Algorithm using code found online. (Cluster Algorithm Using .NET Collections by emilioarp) Algorithm can be accessed from ObjectCollection (ObjectCache-->Objects) -ObjectCollection Implementation used for target logic (Abilities..) -Static Implementation found in MovementHelper.cs (Used in Cluster Target Logic) Cluster class: -Tracks both point position and unit objects. -Validates units prior to accepting Added into Witch Doctor Acid Cloud / Grasp of the Dead Added into Demonhunter Multi Arrow Added into Monk Wave of Light Added into Barb WOTB Logic for Targeting added, settings found in Target -> Clustering Tab. -Distance used as range for cluster algorithm -Minimum Unit Count is used to filter away clusters with less than the setting. -Option to ignore cluster target logic when bot HP is lower then setting. Settings: Added Option to Kill units with 25% or less HP. (Oversteps Cluster Target Logic) Added Ignore Loot and Ignore Combat Range Values (Set by profile). Added Item Range Value which is added to the Loot Range. Added Goblin Range value which is added to Combat Range. (And multiplied if priority is higher than none). Added Goblin Minimum Range Value into Range Class Settings. (Forces minimum range before interaction). Cache: Valid Units for targeting add the RAGUID to CombatCache List. Interactables that are flagged as obstacles will be properly added to cache now. Added Property ShouldBeKited and BeingIgnoredDueToClusterLogic into CacheUnit. PointPosition now caches previous value used and only updates when position is updated. Prioritized units will remain so for a minimum of 1500ms. LOSCheck on objects will be set on creation of object and requests for LOS will no longer ignore objects that do not require initial LOSChecks. Changed IsAttackable value to use ActorAttribute Untargetable (Was using DiaUnit.IsAttackable) Renamed IsAttackable to IsTargetable Added new IsAttackable into CacheUnit -- which only updates on units who shield. Weighting for units that would intersect avoidances will try to find a safe location. (Melee only!) *Converted back to hold method which checks if avoidance should be avoided "now"* *Failure to find a spot on a unit with a higher weight will result in waiting* *Added temp list to ignore units that already tried to find a spot* Added AvoidanceIntersection variable into GPRect/GPQuadrant TryFindSafeSpot Method. Fixed issue with perma blacklist being cleared. Added Monks Pillar from Wave of Light to Blacklist Added new cache set for units who can reflect missiles (I.E. Dune Dervish) Misc: Avoidance trigger will not fire if an avoidance movement was given in the last second. Town run behavior optimized by reducing recreation of cache item list. Fixed issue with tempest rush being used for movement. Added check into abilities selection when target is null. Character Mule will use actual default settings. Level-up auto ability equip will refresh class data after 15 seconds. Minor touch-up to funky settings. Unidify Item Stashing is now more like the stashing behavior! (Added pre and post stash methods) Added a few rules for legendaries to the Unid Item Stash Rule Set. v0.1.0.18 Cache: Added IsNPC Check on units that are not a hostile monstertype (if IsNPC then it is ignored). Fixed exception when refreshing current buffs that had duplicate IDs (Mantra + Mantra Temp Bonus) Added ID for chest in act 2 to resplendent chest cache. Blacklisted couple objects that were being targeted as units. Blacklisted NPCs and Hakan in Act 2 town/serwers Blacklisted Bridge in act 2 which was being targeted as door. Monk: Tempest Rush updated for both combat and out-of-combat, and is capable of being used to destroy destructibles. Witch Doctor: Increased dart range to 49f Gaurgantuan will be summoned out of combat unless active skill is restless giant. Misc: Added Unidify Keep For ItemRules Moved Debug Status bar into Funky Settings -> Advance Tab. Added Setting for Logging of Safe Movement Finding. Fixed avoidance testing for objects inside an avoidance (Was testing if it should be avoided and not if it is an accepted avoidance). Fixed LOS tests which uses BotMeleeVector instead of the objects Position. ZigZag pathing will now only check if server objects occupy the point being tested (Was testing destructibles also) Fixed issue with legendaries being evaluated (Trash Leggies were always stashed due to Plugin Defaults). Units who ignore LOS now have modified range (A2 Worms/Gysers) to force bot to get close enough to engage. Elites who are burrowed will now force a minimum range to engage it. Avoidances that are ignored (disabled avoidance movements or avoidance is set to 0%) are temp blacklisted. v0.1.0.17 Town Run: Added back in extension for item rules -- salvaging -setting found under items -> general -rules found in hard/soft folder -default rules will salvage only items that give inferno mats. If in town, with gear under 50 percent durability will trigger town run. Treehook Idenification for townruns is now disabled by default. Salvaging timer reduced and movement fixed for act 2. Avoidance & Kiting: Avoid/Kite movements will try to find position with target remaining in LOS (when current target is unit). Avoidance/Kiting retry limit for min/max added. (Added to Character -> Combat Settings) -Avoidance no longer resets Kiting Timer and vice versa. -Maximum will be used on successful finding and is modified by current bot health percent. (i.E. 100% will be the full value) -Minimum will be used on failure finding and is not modified. GPQuadrant will start from last index used when searching. Renamed GPCircle to GPRectangle GPSector to GPQuadrant Misc: TrinityMoveTo/TrinityExploreDungeon fix for Skip Ahead Cache. Added Health check to unit objects which invalidates it after (4 seconds). Removed values that were under 18f from dictSNOExtendedDestructRange -Fixes range classes movining into melee range on destructibles. Source Code: Bot is now static class and contains static property classes used throughout the code. -Moved Combat/TargetHandling/PlayerData/ClassData/Target into Bot Class. -Rename: TargetHandling to CombatCache Combat to ObjectCache PlayerData to CharacterCache ClassData to CharacterInfo Target to TargetHandler -Target is a static property of Bot Class which contains the Current Target. -Target: Override Equals accepts a cacheobject to compare with current target object. v0.1.0.16 *GridPointAreaCache: *GPRectangles and GPQuadrants now have have a weight assigned based upon monsters/avoidances and navigational points blocked. -Avoidances (Descrator/ArcaneSentry/MoltenCore) are weighted slighty higher than other avoidances. *Safespot finding will attempt to find a weight based location that is lower then the current location. *Safespot blacklisting changed from Vector3 to gridpoint (so it will ignore properly). *Added IsGridPointNavigationallyBlocked Method - checks if all surrounding points are "blocked". -Checks MGP.CanStandAt, then it checks obstacle cache, then if it is actually pathable (On the same plane). *PointCollection: -Converted collection base from HashTable into Dictionary. -Added QuadrantLocation Enum *GPRectangle: -Added FullyExpand Method -- Expands using all available searchpoints. -Added CanExpandFurther Property -- Checks if any searchpoints remain. -Added UpdateSectors Method. -Safespot finding will attempt to expand further if failed to find a location. *GPQuadrant: -Safespot finding will check if point is ignored already. *Misc: *Blacklisting will permanetly add all avoidance objects not used by plugin. (Should help a lot with performance!) *Blacklisting is now logged. *Target Flags Class have been moved from Target Class into new class TargetHandling - which can be accessed from Bot. *Target Movement method has been implemented directly into CacheObject. *Fixed Demon Hunter Sentry. *Average Maximum Health is now tracked and updated on normal monsters (Average to compare other monsters with). *Triggering avoidances are now added to a list (Validates movement required). *Removed all unnecessary calls to MainGridProvider Update. (Now only updates when level changes). *Removed "LOS" movement finding for monsters who are above average (was causing issues..) *LOS Check added back into gizmo objects. *Finding best potion to use will always update item list. (bug found when a potion was no longer present in backpack but items were not updated) *Added ObjectShouldBeRecreated into CacheObject and all its derieved classes. -This eliminates unboxing each object every loop during UpdateCacheObjectCollection *CacheObstacles that are monsters will update position using the CacheObject during Refresh. *Static Methods (TallyTargetRange and ReturnKillRadius) have been implemented directly into CacheUnit. *Static Method IsZDifferenceOkay has been implemented directly into CacheObject and derieved classes. *CacheUnit and CacheGizmo will update there radius during update method, and will use ActorSphere Radius instead of collision sphere. v0.1.0.15 --New Feature -- Full Stash, Mule Transfering! *Occurs only when stash is FULL, I.E. the bot cannot stash another item... *If the stash is full, the behavior will start. *The bot will leave current game, create a new level one hero with a random name. *Then it will load up a modified act 1 profile which runs until it is near the stash in act 1. *The bot will move all 2 slot items first, until the new character has 1 slot left in the backpack. *After transfer is complete, the bot leaves the game, switches back to the orginal botting character, and loads up the profile it was using. *Leveling -Implemented Giles Equip Scoring. -Implemented Baelphors Level Up Auto Skill Equipping. -Enabled Setting Leveling Item Logic. *Cache -Overhauled much of the cache objects.. fixed SNO cache (working as intended)! -CacheObject now implements virtual methods: *UpdateData - (Updates Cache Values) *ObjectIsValidForTargeting (Checks if object should be consider for targeting) *UpdateWeight (Refreshes the objects weight) *WithinInteractionRange (Checks if target is within range for interaction) *Interact *And a few others.. -Replaced lots of code from static methods which are now implemented directly into objects. -Removed the custom OfType methods from Object Collection Class. -Added Derieved Classes of CacheObject *CacheUnit *CacheItem (Gold/Globe/Item) *CacheGizmo *CacheInteractable *CacheDestructable *CacheObstacle (Abstact Class) *CacheAvoidance *CacheServerObject -Added Value to TargetType Enum: Interactables -Gizmo Doors are now considered a obstacle. -Units cached while in town and not considered hostile will check IsNPC and ignore all found indefinitely. *Misc -Looting will now call db method to track stats. -Demon Hunter multishot range has been reduced. v0.1.0.14 *Objects: -Added "Destructable" to ObstacleTypes (objects that can be destroyed). -Added Weight Modifier to units when kiting occured within the last 3 seconds. (Based upon distance). -Interactable Doors will now update GizmoOperated value. *Movement: -Overhauled Obstacle Check and Postion Shift Finding Code. -Replaced obstacle check code for both PlayerMover and Target Handling. *Misc: -Townrun Treehook Individual Behaviors can be disabled by editing Treehooks.xml file found inside plugin folder. -UseTownPortal Tag failure on first attempt will cause it to be override by Plugin Behavior. -Stopping the bot will now create default DB treehook behaviors. -Demon hunter will now use smokescreen to when incapacitated. *Cache: -Added a3 blazing ghoul to kiting ignore list. -Demonic forges no longer blacklisted. (Both now..) *Settings: -Added Ignore Above Average Monster Setting (Requested Feature). -Moved Giles Item Settings into Funky Settings. -Added setting to use advanced projectile avoidance intersection test. -Added button to funky and plugin settings to switch between the two. v0.1.0.13 *Settings: -Gold range now a slider value setting. -Moved Item Default Settings from the plugin into funky window. -All townrun behaviors can be disabled by editing the Treehooks.xml inside the plugin folder. (This will set the behavior to DB default). *Misc: -Removed All Quest Tools XML tags -GP Movement finding will take Z into account when area is not consistent height. -Radius of navigation obstacles are reduced. -Destructibles that are not enviormental are added to obstacles. -Fixed bug when no potions are found during potion pickup evaluation. -Fixed bug with higher level potions not being picked up. -Obstacles will use GPC to find a valid spot in which our current destination is in LOS. -Combat routine is copied as "content" and is compiled on initilization of FunkyTrinity. -Fixed issue with repair during town runs. -Ranged class will evaluate the current target using ability range to test if the location should be avoided. *Demon hunter: -Added 2.7s cooldown for evasive fire when selected rune is Hardended. (To maintain armor buff) v0.1.0.12 *Line Of Sight: -Optional LOS Check added into safespot finding. -Added additional LOS things into RAGUID Objects. -Current target will be checked for LOS validness and will attempt to find a LOS location to move to when target is "important" *Settings: -Added Elite Combat Range Setting -- which is the max kill radius for units that are (Elite/Rare/Unique) -Changed Extend Combat Range from checkbox into Slider, allowing extended range setting during combat. -Fixed Funky Settings Slider Max Values for Potion/Globe -Shrine Range is now a slider *Misc: -Combat routine replaced on plugin initilization, and will no longer require a seperate routine assembly. -Kiting will set target back to the unit which caused the kiting trigger when no targets are returned after kiting. v0.1.0.11 *Settings: You will need to set all settings again* -All settings are now saved individually based upon BTag & Toon *These settings can be found inside: "DB\Settings\FunkyTrinity\BattleTag\" -Added ReadMe_Settings to explain settings a little further. -Moved many of the options related to combat, avoidances, and ranges from the Trinity.xaml into the Funky Window. -Demonbuddy Settings for Combat Looting, Open Container, Open Chest, and Destroy Enviroment are now implemented into bot. *This is still globally used by all toons, for now!* -Plugin Settings save/reset all button is visible again. *Misc: -Kiting should work better! -Non-Melee classes will no longer back-and-forth for an object that would cause the bot to enter avoidance zone. -Removed more unused code throughout the project! v0.1.0.10 *Avoidances: *Kiting enabled again. *Fixed avoidance related issues. Should now work again. *Routine Movement Cache enabled again. (Used to backtrack during avoidance/kite movement). *Trimmed code from GP Cache. *Item Rules: *Updated to version 2.2.1.5 *Added Settings into Funky Window accordingly. *--This also removes salvage rules and any custom code from previous version--* *Item Settings: *Moved GilesScoring into Funky Window, with either Giles Scoring or DB Weighting. This option is used only after item rules does not return a valid action. *If using GilesScoring, the settings should still be setup inside the plugin config window. *Misc *Added Shrine Range Setting into Funky Window under Target tab. *Added LOS Ignore Hashset for specific units that bypass LOS checking. (Worms, Certain "Gizmo" units). *Witch doctor -ability zombie dogs will now check passive "Zombie Handler" -increased range for acid cloud from 12f to 30f v0.1.0.9 *Avoidances: *Avoidances will now be sorted by distance from the bot prior to safe spot finding. *Fixed few misc issues.. related to movement and avoidance. *Extended intial range for safe finding up to 100f in a single direction. *DirectionPoints slightly modified to test more effiectively the maximum range which can be traveled. *Obstacles: *Blocking obstacles that can be destroyed or targeted will properly do so.. (Should fix all "stuck" issues related to destructibles/barricades/doors) *Destructibles/Barricades will shift-click always after first attempt. *Misc *Fixed bug where bot would be in "interact" range but never actually succedeed on interactable objects. *Gizmo Doors now have their own target type and are no longer grouped with interactables. *Added minimum 250ms update time restriction on bots position. *Excluded items from inital LOS check when distance is less than 30f away from bot. *Fixed issue with the Obstacle Cache which was a "trim" after refresh.. cache is now properly emptied (Including avoidances). v0.1.0.8 *Interactables that have "barricade" attribute will be changed into a barricade target instead. (Mostly for doors that are not interatable but need to be broken!) *LOSCheck for objects is set to true when first created, and reset if raycast is successful. This flag is also set to true during target handling when we are not moving! *RAGUID based objects now inherit SNO Data. Obstacles will now inherit RAGUID objects. (Eliminates redudant code!) *Touched up code related to target evaluation when target will cause bot to intersect avoidance. *Issue with blacklisting fixed on objects being blocked and simple interactable gizmos being used once. *RadiusDistance of a cachedobject will no longer use the generated vector3 for melee and is now reverted back to simple centre distance - radius. *Destructibles will now cache values NoXp/NoLoot attributes. -Destructibles with both values are ignored from selection unless prioritized else where. *Target handling of movement failure due to "unit blocking" will now evaluate surrounding objects and prioritze them. *Removed Goblin backtracking behavior (Was never intended to be included/enabled, as it is not even close to being done and tested!) *Minor fixes to Avoidance Cache and Testing. *Searching for safespots has been once again overhauled: *Uses some of my previous safe point finding code.. but most code has been rewritten to support future extensions. *GPCircle: Is created with a centering Vector3 and the number of expansions it will encompass. (Surrounding points it will add to itself). -Inherits PointCollection Class, which adds all points to hashtable with its Quadrant Code, which is internally computed using bytes. -Sector can be retrieved from the GPCircle which will contain points relavent to the quadrant it lies in based upon the center. -Safe point evaluations are internally used within the sector itself and a GPCircle only iterates these sectors during safe movement calls. *Safe movement method will always evaluate current position GPCircle, followed by potential directional GPCircles. *When using Directional GPCircles, a DirectionPoint is created which evaluates a directions maximum range, using raycasts to adjust range accordingly. *If all directions are valid for searching, the maximum GPCircles that can be searched in one call is 10. Which includes a backtrack GPCircle if any are present. Obstacles: *Objects will be reused, no longer recreating them every refresh. *Containers that are not chests will not be added to obstacles anymore. *Monsters and Moving obstacles will now properly update position using a DiaObject reference. Misc: *Avoidance should now be properly flagged when inside an avoidance zone. *Destructibles will now cache IsBarricade value into the SNO Data. *Removed exception being thrown during Sno Cache Indexer Get Value try. *Removed weapon rack from blacklist. *Ability selection against a shielded non-attackable unit will return a destructible power instead! v0.1.0.7 *Added XML Tags from Trinity and QuestTools to support Rrix's profiles! *GizmoDoors added to object check, target type equal to interactable. *No longer ignores pets prior to counting. *Removed backtracking related code, and reduced more redudant/unused code. *cacheSNOPower is now a Struct. *Coffee breaks method changed, no longer increases game wait time.. behavior hooked directly into the outofgame routine. *Added new Class, CharacterInfo: -Recreated every new game. -Holds ActorClass Related things like avoidances/abilities/buffs.. -Passive skill iteration will reduce Repeat Delay timer according to the skill. **Not finished with 2 which require other events** -SnoPowers can be returned such as (Destructible/SpecialMovement/Offensive). -Added SnoPower cached hashsets for the following groups: -Destructible -Special movements -Pet Summoning -Buffs *Starting bot will nullify Bot Data. (Abilities changed should stop/start to update properly) *Starting bot will also check and set routine if not currently set to FunkyPlugin. *Fences and Monster Affix Wall (Server Prop) are considered navagational obstacles now. *Avoidance zone now inherits CacheObstacle class: -methods/properties extracted from CacheObstacle related to avoidance only. *Reduced updating of projectile intersection testing. *Added LineIntersectsRect Method. *Renamed NavGrid to NavRect, and is now a struct. *GridPoint Added implicit conversion Vector3 from/to Vector3. *Added Class NavGrid (new one..) which tracks GridPoints/NavRect during safe point finding. v0.1.0.6 *Obstacles* *Complete overhaul to obstacle cache! *Added new Class ObstacleCollection -Used to hold cached obstacles. -Methods to check points/vectors for contain/intersect testing. *Refreshing will also check names (monsterAffix_) when its server prop. *Enum Obstacle Type is now a Flag, to help filter obstacles quick. *Avoidances* *Replaced SNOID for avoidance lookups with enum AvoidanceType as Key. -updated all code related to avoidance dictionaries for health/radius. -method to ID AvoidanceType for both SNOID and Internal Name. *Added AvoidanceZones Class which are created if static avoidance. *Checks for occupied/intersection added and used during target weighting evaluation. *Should now properly ignore all avoidances when suppose to. *Added Struct GridPoint -With implicit conversions from/to both System Point structs and from vector3. -Replaces all Point parameters/properties. *Added Class NavGrid -Creates a grid composed of surrounding points of the constructor point. -Area optional parameter gives ability to make bigger grids. (6x6 area normally) -Safe point finding method attempts to return a valid vector using its navigable points for testing. *Added new Avoidance Safety Point Finding Method: -Overall optimized/simplifed compared to previous method. -Searches in all directions, 40f out at first, reducing range by 5f if not navigable. -Navigable direction points create NavGrids to find safe zones around the point. -Counter to track current direction points, changing when no safezone found at direction point. *Projectile: -now uses Ray to test if avoidance required. -special check which calculates loops before intersection, by checking speed, distance, and last refresh time. *Misc* *Added Hashset SNO Burrowable Units, filled with a2 related burrowing units! *Forced A2 Slime Gyser to be unit instead of destructible. *Avoidance safe spot failure wait time now based upon health percent. *Unit Interaction Raycast test now uses the melee adjusted point instead of centroid point. *Item Backpack handling sorting now combines rows (First+Second.. etc). -OOC IDing will now randomize between normal sorted and backwards sorted. *Demonic Essence added to pickup/special item rules, Currently Ignored for pickup. -Also updated gilestype to no longer mismatch. *Add check of animation state for destructibles after interaction stage to confirm destroyed. -This fixes destructible issue! (No More Pre-mature finishing :P) *GilesPlayerMover now records position vectors every Xf, up to 5 points, used in safe point finding. *Main Grid Provider now updates if scene changes. (Forced) *Cached Obstacle now have a Type property. (Monster/Avoidance/Navigation) *Merged all obstacle related collections into a single collection. *Added new button inside the funky window under Misc, To Open Trinity Folder. *Barbs will no longer wait for special if @ 100% fury.. v0.1.0.5 *Cache *Sno Entries are now trimmed away every level change, entries used only 5 times or less are removed. *Removed all RAGUID data reference dictionaries. All values are now saved inside the object internally. *Reduced the Sno Trim Timer Check to 3 mins was 5 mins. *Destructibles/Barricades *Added Ignore Destructible Flag which is enabled after interaction of any destructible and will ignore all destructibles for 2.5s. *Barricade objects are considered a target if it blocks our path (Destination that is tested is taken from player mover) *Destructibles will now be cached only when range is 40f or less, and removed if range is greater than 40f. *Added special check during unstucker for any cached barricades exisiting within 10f. If so, it will attempt to use target handler on the object. *Special destructibles that have a base are now added to obstacles. *Misc *Enabled obstacle mapping method. (maps out multiple vectors for more accurate obstacle navigation shifting) *Fixed bug where bot would get stuck trying to loot item! (Rare bug, would occur trying to loot within range but never successful) *Interaction counter is now a property of CacheObject, Dictionary has been removed. *Reduced waiting time after IDing an item. *Disabled Melee Movement due to bug in player data not returning correct target value. *Non-rend counter now ignores non-attackable units. v0.1.0.4 *Cache *All live data reads during refresh will now only occur inside the RefreshCacheObjects method. *Added Aquireframe (framelocking) to parts of code where reading of data occurs. This eliminates a lot of the memory exceptions. *Moved internal name to Sno Data, and replaced old internal name with optional property Name. (For objects that don't use SNO for data). *Added Operated and PhysicsSNO properties to CacheObject for gizmo related objects. *Added Methods inside CacheObject for updating Unit Position/Hitpoints. *Player Cache now has Animation state and SnoAnim, which can be updated using new method UpdateAnimationState *Misc *Removed a lot of unused variables and some redudant code. *SNO Dictionaries Lookups are now placed inside SnoLookup for organization. *Merged Herbfunk plugin back into Trinity! (Future changes will implement more control in XML tags) *Containers/Shrines/Healthwells are now added to obstacle navigation properly. *Barricades/Destructibles: -now use Sphere Radius as the minimum range. -ExtendedRange destructible dictionary: *use radius distance instead of centre distance to determine if it should be considered for targeting. *value given inside the dictionary is no longer used and is replaced with Sphere Radius. *Item confirmation now uses new CacheBPItem class for cached data references. *Added a timer when OOC IDing and in combat for more than 20secs -- close inventory! *Updated with unified trinity avoidance/kite safe position method. *Fixed any remaining studder walk for melee classes by removing minimum range requirment for click based movement checks (maximum range requirement still required) v0.1.0.0 *Overhaul to refreshing objects. -Objects found to be useful will be cached. -Removal of these objects occur when unseen for X refreshes, level changed, or if flagged during evaluation. *Implemented new cache object, which replaces ("GilesObject"). -CacheObject is created from RAGUID (Individual) based data. *Implemented new cache object CacheSno and new container SnoCollection. -Caches common data such as ActorType, Collision Radius, Monster Type/Size. -CacheObjects can access this data using given SNO ID. -A CacheSno entry uses dictionaries to lookup values if all values are not completed yet. -SnoCollection (Class), which holds Sno Objects, is created to quickly and easily start new entries. -Most Sno based lookups from (compiled collections) are now implemented directly into either Sno or CacheObject. -Sno Collection trimming will occur every 5 minutes, which will remove any entries that have not been used for over 5 minutes. (Trim Timer resets on new game to prevent it from removing all during a coffeebreak) Misc: *With new implementations, a lot of code had to be updated/replaced/removed. As a result, there may still be issues that are unknown! *Item dropped event is no longer valid and is disabled until code has been updated. *Destructibles will use radius distance instead of centre, which will make bot destroy them before he moves past them. *Fixed avoidance calulations for barbs during WOTB, if critical avoidance is enabled then values do not deflate. *Updated for DB 1330 //v0.0.1.17 // // **Item Drop event no longer caches globes/gold any further than internal name. // // **Redesigned obstacles with support for oblong shaped obstacles using multiple vectors to blacklist the area. // // **Destructibles/Barricades that are found inside the dictSNOExtendedDestructRange now use BB Width Size as the extended range modifier. // // **OOC ID Behavior now will properly quit if player is dead. // // **Added support to handle stucks occuring with click-movement and objects blocking us. // // **Items no longer ignored after interaction, only items below rare quality will be temp ignored after confirmation rechecks. // // **Updated to work with new DB release (Dark Style?) // //v0.0.1.16 // // **Stashing\vendor movement will now use target click to move. // // **Salvage wait time will double if next item is legendary. // // **Salvage [REQLEVEL] now properly subtracts base required level with item level reduction. // // **Modified target movement, now will only use if melee is active class, unit is active target, and range is within 10-50f, and raycastable. // -Future ability checks should incorperate playerdata ismoving to eliminate abilites that are used as AOE and not as targeted. // // **Barbs with rend will no longer use if moving.. this fixes issue with ability click-movement not working due to rend being used. // // **Reduced wait after loot confirmation rechecks by 2. // // **Added Cache Dict for ActorType using SNO as key. // // **Increased inital range for goblins.. 20 base range + Priority * 10. (Highest setting would be 60). // // **Disabled Item Evaluation during OOC IDing. Issues with evaluation were causing stashing of random items. // // **Fixed wait time on containers again! (Was blacklisted after use due to being open, added code before this). // // //v0.0.1.15 // // **OOC ID Behavior is no longer implemented directly into the target handling, and is now seperate and is called when actually OOC. // // //v0.0.1.14 // // New return To Town Behavior Replacement! // **Has features included into the combat handler, quickly clearing an area before attempting. // --Replaces DB default behavior for town run. // --XML Tag included: FunkyCastTP // //Misc: // // **Cleaned up code further, minor improvements to object refresh. // // **Static Loot Containers and Shrines: // --Ignored now if not usable or already opened. // --If blacklisted it will be added to obstacle cache. // // **OOC ID Behavior // --will now confirm no enemies are within range before starting. (Fixes backpack toggling issue). // --will no longer resume default movement of profile when starting. // // **Item Stats // --Implemented ItemDrop Counter, Output will break down each profile. // --Item stats may/may not be working as intended. Not a huge priorty at this moment! // // **Salvage itemrules now uses RequiredLevel as [LEVEL], modified rule for only inferno mats! // **Updated salvaging using sorted order (Same as sell/IDing). // **Fixed delay for rare chests, units that were above-average now have 2x the delay time. // **Units in 10f Range that use TargetGUID for ability will be used instead of destructible power. // //v0.0.1.13 // // Item Rules // **ItemRules now has Salvage rules. // -Accepts [QUALITY] and [LEVEL] as values for rules. // -Default Settings are set to salvage legendaries or rares that are at least ilevel 61. // -Note: Could not get sell value from items.. I tried :( // // Misc // **Reset OOC ID Flag now resets @ new game. Fixes issue with Disconnect and flag not allowing targeting of anything but units. // **Added additional check after blacklisting check for ignoring Actor Types that have no importance. // **Fixed radius of loot-container obstacle cached, should now work. **Fixed range on treasure goblins who were not hit yet. // **Fixed potion selling during town run (When no potions were present) // **Knockback is also considered as incapacitated! // **OOC IDing will not occur if incapacitated. // **Item cache on dropped event will now caches quality again, and item data if quality is at least magical only. // //v0.0.1.12 // // **ItemBaseType and ItemIsTwoHanded is updated correctly, and no longer updates based upon GameDataCache setup orginally by Giles. // //v0.0.1.11 // **Implemented OnItemDropped to cache item data. // // **Refreshing of Objects -- Generating Object List has been overhauled and split up. // -Determining Object Type uses ActorType. // -Refeshing has reduced unnecessary data cache/updating, depending on type. (I.E. Globes/Gold/Gizmos uses very little data compared to Item/Units) // // //v0.0.1.10 // //OOC-ID Behavior // **Fixed constantly refreshing item list during cast behavior, now it should work as intended. // **If an item is determined to be keeped, a town-run will be forced after finishing behavior. // //Townrun: // **Updated code Townrun Overlord. // --Simplifed, no longer checks backpack space. // //Items: // **Improved upon the Loot Confirmation code! // --Items of rare or higher quality will continue to try and loot if failed to confirm during recheck. // --Anti-Stuck messures added if unable to loot.. // --Additional modification to item weighting if item has been current target or life is low and enemies are nearby, then weight will be reduced by half. // --Interact counter and the blacklisting has been removed from item interaction behavior. // // **Replaced GilesBackPackSlot with new DB CanPickUpItem, this replaces the backpack recheck during item interaction. // **Added variable to the current target data: DiaItem, a reference which is used for PickUp Validation. // // //Refreshing of Objects: // **Globes/Gold will be defined as the correct type and is no longer inside code specific to item related cache. // **temp references to unit/item DiaObjects will be nullified after being added to the evaluation list. // **New dictionary to hold monster SNOs that are capable of being burrowed. Currently contains A2 flying birds, sandsharks, and burrow worms. // --Logic for burrow flag has changed to include this new dictionary. // // //Avoidance: // **Changed how critical avoidance effects current refresh of objects. // --Now if preforming OOC/Townrun or CriticalAvoidance is enabled during ability selection, a special avoidance dict replaces the default one. // --This means avoidance will be instantly switched on with safe values to help stay alive during "down-time". //Misc: // Profile Stats: // -Tracking of each individual profile loaded during a single game. // -New games will create a report inside the log folder which will show each profile ran and its stats. // -Stats include: Duration of the profile, Deaths, XP, and item stats (similar to the report found inside Funky Window). // // **Fixed waiting for WOTB, which was flagged if at least 1 champ was in range, but only used if 3 were in range. // **Added reloading of item rules button, which can be found in the funky window, under the item rules tab. // //v0.0.1.9 // //OOC ID Behavior // **Pause before opening backpack added. // **Additional time check added with casting flag, hopefully fixing any disconnect issues when preforming behavior. (Possibly due to animation flag not correct, and causing a double cast?) // **IDing order is now randomized using different methods. (W.I.P.) // //Objects: // **Fixed logic issue with range of misc objects. This fixes ignoring objects that were not containers/shrines, and shrines now obey the container setting range. // **NON-Destructible-Containers will now be added to the obstacle cache. // **Items && Gold weight will be decreased if life is low and at least 3 monsters are within 25f // //Targeting: // **Out of game will now exit target handling behavior. // **An additional blocking count has been added to prevent stucks when not able to navigate due to blocking by large obstacle structures. // --This is a quick fix for the rare-but-noticable issue with above average mobs who are in range, damaged, but unable to navagate to causing stucks that were unmanaged. // //Misc: // // // // //v0.0.1.8 // //OOC ID Behavior // **When IDing items, it will now go in order by row/column (Left to Right, Top to Bottom). // **Will now ignore all objects besides units/avoidance during behavior. (To prevent it from interacting/picking up things) // **Reduced maximum wait between actions by 400ms. // //Town Runs // **Added logic for townrun to extend kill radius and force refresh if interurpted. // **Selling items will now go by row/column. // **Added new OVERLORD for Idenification behavior during town run. // --This uses the OOC ID Behavior, which has been modified slightly to support townrun behavior. // **Replaced Giles Sell Overlord with new code, using old code with new logic layout. // **Fixed "lag" issue during town run. (Temp freezing during evaluation). // //Misc // **Target Movement will now "left-click" if range is right and object is clickable. This fixes the "stop-and-go" when chasing fleeing enemies. // **Reduced wait time after non-elite kills by over half and wait time after opening normal containers. // **Removed buttons (Pause bot & Force Town Run) due to DB new buttons. // **Containers and shrines should now be properly ignored if already used. // **Funky Item Stats total time tracked modified. (this keeps time tracked accurate by not adding down-time, aka not in game). // **Added checks prior to caching data related to barbarian rending and whirlwind. (So it won't update data unless using the abilities) // **Updated the refreshing of hotbar abilities with the new updated DB activeskill method. // // //V0.0.1.7 // //OOC ID Behavior // **The kill radius during behavior is now set to 75. // **Closes backpack when at least 1 target is within 25 range. (this still can cause open/close if monster is wandering back-and-forth lol!) // //ItemRules: // **Added [REQLVL] to check for reduced level items. // **Default Settings: Soft, Rare & Legendary Settings Only. // **Pickup: Added legendaries that should be ignored.. (i.e. frostburn, death mantle watch.. etc) // //Misc: // **Fixed issue of funky config not properly saving wait on containers setting. // **Shrines and Loot containers will now be checked if usable (I.E. not already used before). // **Fallen units (ones that are summoned by mages) are now allowed an exception to blacklisting ignore.. to help with large minons reappearing before blacklist is cleared. // **Knockback is now considered in calculating Z-Diff of units. If player is in knockback then the maximum allowed difference is double. (10 normally, 20 in knockback). // // //V0.0.1.6 // //Code // **Further split up code.. // //Coffee-Break // **Minimum Hours before Coffeebreak now settable in the funky config window. // --Editing Value: attempting to put a decmial point at the end will not work.. you must put it in front of a number first. // //Looting: // **Confirmation of item looting: // --This will check backpack for similar item based upon type/quality. // --Rechecking is based upon quality: legendary being 3 rechecks, magical being 1. // --Failure after recheck max attempts will ignore item as it normally does. // //Misc: // **Townrun Stashing will now make the targeted stash page visible prior to stashing item. // **Health potions will now be used by best HP, followed by lowest stack first. // **Health potions now properly sold. // **Blacklisted Object Container in Act 2: "Loose Stones" // **Bot Data Reset added to GilesResetEverything, which will re-initilize BOT, which will result in data reset for CharacterData, CombatData, Caches, and Bot.CurrentTarget Data. // **Pickup Radius now added to CharacterData and will be updated only if Target.ObjectType is equal to gold/globe. -- This replaced two calls during TargetHandling range check. (No more casting live data). // //V0.0.1.5 // //Coffee-Breaks // **Should now properly take breaks every 1.5 hours // //OOC ID Behavior // **Now uses special avoidance dictionary and check // **Better inventory visibility control. // **Tracks checked items to prevent rechecking. // **Kill radius is extended during behavior. // **Fixed any issues caused by items not valid (I.E. keys) // **Added condition to townrun overlord to run if we found stashable items. // //Barb // **Rend is modified to wait longer if HOTA was used prior. (Same as WW). // **Changed HOTA wait-after-use from 1 to 3. // //Misc // **Split up code even further.. // // **Town-Runs now uses a pre-check before commititing to the behavior. // -this checks for surrounding enemies, avoidance, etc.. // // **Logging: // -Logging output during item rules evaluation has been sileneced. // -Items Stashed Log moved back to Log folder // // **Item looting: // -Will now loop once prior to actual ability use. // // **Non-Elite monster Loot Delay Randomized peroidically. // //v0.0.1.4 // //ItemRules // **Updated to v2.0.2.34 (taken from unifiedTrinity) // //OOC ID Behavior // **Removed additional time check to speed up the behavior. // //Barb // **OOC Warcry buff will not be used if fury is greater than 90% // --This change has been applied to the non-OOC selection too. // //Misc // **Log cleanup now checks item rule log folder also. // **Output stats re-eanbled once again. // **Added act2 Chilling Construct to priority list. // **Reduced ignore on items to 2 (-1) // -To help with items not looted and player being far beyond range when blacklist clears. // //v0.0.1.3 // //Funky Features Setting Window // ** Added settings window to easily toggle features added. // -This does not override the default trinity settings, and only effects new feature settings. // //Info Dumping // ** Dumping info now easier to access thru Funky button drop-down menu. // -Object/Units/Inventory dumping. // //Coffee Breaks // ** Breaking between games now implemented and occurs every hour and a half, with options of break time in settings. // -This only changes the wait time between games (via Demonbuddy settings), and switches them back once the next game begins. // //Out-of-Combat Identify Items // ** Out-of-combat Identify items now implemented. // -This will attempt to ID any unid items when X unid items exist inside backpack // -When finish it will check newly ID'ed items and do a townrun if any should be stashed. // -This is optional and can be enabled from the new settings. // //Changes: // // //Barb: // ** Added UnifiedTrinities Barb Whirlwind Modifications. // ** Unrended targets counted @ 7f or less now ( +1f) // ** Warcry used as OOC buff when available. // ** Fury dumping sprint during WW + WOTB will now wait until no buff before casting.. just to seem not like a bot? // //Misc // **Health potions no longer share item priority, and will no longer attempt to loot during combat. // **Blacklist: 3x act2 town units added to combat blacklist. // //v0.0.1.2 //Changes: // // Updated townrun to use ACDItem when calling SellItem. // Added potion check to sell routine, buys upto 99 potions if under. // //V0.0.1.1 //Changes: // Removed previous changes regarding rare chests and enforcing a wait by not allowing it to continue. // Similar to loot delay for elites/rares, causing the wait.. containers now act the same and cause a delay. (Normal containers cause half the time set, and Rare chests cause a 3s delay). // Normal units also cause a delay for loot, using half the time of the delay set in the settings. // --The above changes should help with regardess to loot being lost due to bot moving on.. before these changes, the only time a loot delay would occur was after elites/rares were killed. // //V 0.0.1.0 //Changes: // Code is split up into major parts to reduce headaches. // modified stashing of plans to only keep grand exalted or legendary or jeweler plans. (bot still picks up all plans) // Barb Ability Improvements: Rend, HOTA, Warcry for passive buff // --See my Rend + Cleave + Smash! post for more info on this build. // Multiple stacks of potions will now sell the smaller stack during town runs. // Default of 40f range when casting recall (stone/Townportal) // Replenish Chests defined by the Dictionary will now cause targeting to wait around (aprox 3-5s) after opening. This is a quick fix for missing loot. // A2 Worm bosses should now be properly handled in encountering them. // Changed rare chests so it will take into account further distances, and weighting so it will prioritize to open it. // --This also means it has a higher range of notice and priority above some monsters. // Modified trinity logging to support unid items (--This does not really matter anymore, I removed UNID code!) // Range of containers for opening is set to 4f // Added XML Tag [TrinityResetAll] -- Equal to GilesTrinity.GilesResetEverythingNewGame // Added custom return to town for Vendoring Behavior. // --Ensures casting occurs by checking every 6 seconds for void casting. // --Checks for hostiles and calls trinities refreshObjects and HandleTarget prior to casting/recasting. // --Added InGame and Death Check so it will fail correctly. // Implemented Interpreter by darkfriend77 (ItemRules 2) // --This is default and not optional, Pickup and Stashing will check these rules first. // Added CriticalAvoidanceEnable which ReEnables avoidance for 8 seconds, see Barb/Monk Ability Selection for exmaples of how this is used. // Removed Default Item Stat Logging and Intergrated a summary button which displays desired statistics of looted/stashed, and IPM (items per minute). These are no longer logged! // Added a clean-up call on start up which will delete any logs inside DB/Logs/ that are 24h or older. // //Misc: // Destructible Large Wagon (act 2) added to dictionary list. // Blacklisted Water-Bloated Corpse found in the Ancient/Mysterious/Ice Caves in Oasis. // added a2 dungeon rep chest to Rare Chests // blacklisted larva monster // blacklisted a2 beast loot container // beast container added to obstacle dictionary to fix issues of being stuck trying to move thru it. // the destructible cart in blackmines/howling plateu has been added to the range dictionary to correctly destroy it when near.