This code also allows you to toggle on Tick Pulling (Aggro:AllowTickPulling)
which was a pulling technique (exploit) fixed sometime in 2006
This code also implements assist caps to cut down on trains (5 by default)
Unsure if live what this number is (it exists) or if it's a per NPC basis
An NPC with Assist Aggro will not call for help, only NPCs with Primary Aggro will
Updated mechanics to be consistent with live regarding how invisible breaks when the client is the target of a spell.
Invisible will drop whenever a client is hit with a detrimental spell, regardless of if resisted, if it does damage or AOE.
Hide skill now also follows the same rules as above.
Implemented support for Rogue AA - Nerves of Steel which gives a chance for hide NOT to break
when client is hit with an AOE spell.
Spells with this flag will not generate any aggro
Note: DOT portions of spells wilth this flag STILL generate aggro.
Example Harminous Arrow (Ranger AA) 16127
Shendare: In CreateNewNPCCommand(), the npc_type_id and spawngroupid are created in the database, but never set in the spawn class, so later it can't delete them with #npcspawn remove or #npcspawn delete.
Updated #showstats and #npcstats for new speed calcs to display speeds again in familiar float format.
Improved client movement while AI Controlled, such as feared and charmed. Movement will be much smoother from clients perspective.
This increases the timer that mobs will send out updates
(It could probably be increased more)
This will also reset the timer every time SendHPUpdate is called
to prevent sending like 3+ completely useless updates at once
Also skip sending the update to the client if we're sending an
OP_Damage with the damage since the client will apply this number
Changes Speed from float to int. EQ client deals with int step locs better than it does floats according to Haynar's testing.
This also contains mob runspeed changes. I recommend you set runspeeds to start in the DB 1.25 for NPCs below 1.25 which will match player runspeeds almost equally. Existing DBs will need to be updated.
General Cleanup of MobAI functions. Mobs now change their heading on AIMovement timers if their targets' heading has changed since that time. This prevents players from being able to land backstabs inbetween mob swings.
Charmed/feared players now send the appropriate packet, there was a missing CastToClient() in spells that was missing.
Mob runspeed can no longer be snared to 0%, instead, 1% of their base runspeed is the maximum. Roots apply as roots instead of a modifier under this code.
There is going to be bugs with this code. It's better we push through it than revert it. Sanctuary has been running this for a good week and we've worked through the issues.
Misc updates:
Exported some variables to perl, including:
EVENT_ITE_CLICK_CAST:
EVENT_ITEM_CLICK:
spell_id - returns the spell_id of the click effect.
return value - cancels the cast.
EVENT_DROP_ITEM:
quantity - returns the # of items dropped in the packet. If the item has charges, charges are returned here instead.
itemname - name of the item being dropped
itemid - id of the item being droppped
spell_id - spell_id associated with the item's click effect.
slotid - the inventory slot id of the item being dropped.
return value - cancels the item from being dropped.
Added Perl function: CalcEXP. Calculates the experience you would gain for an NPC that cons a specific con value to you.
Fixed a bug where you would receive the group experience bonus and group experience messages for simply being in a group, regardless of the player being in the same zone as you.
Changes:
Mods are now saved for in the DB so they are loaded on zone
This allows long duration buffs from bards that get mods to keep their mods
Ex. Selo's, Symphony of Battle
Instrument mods are applied to basically anything that is an instrument skill
The only exception to this is discs (ex. Puretone is Singing but always 10)
Singing spells from procs (Ex. Storm Blade) that are instrument skills should
inherit their buffs instrument mod. Doom effects should also. This isn't
implemented yet.
Syntax on NPC is:
e.other:QuestReward(e.self,copper,silver,gold,platinum,item,experience,factionid,factionvalue);
This will give you any or all of the rewards and their messages with one call, including the quest ding sound. Any item is sent to your inventory, like SummonItem does now. The coin message is generated by the client, and will give you a message for each coin type (You recieve 5 copper...). No way around that, but it's still useful if the reward only calls for a single type.
We now send the PlayerState in the spawn struct to allow clients
to see other bard animations with instrument to be played if they
zone in after the bard equipped the instrument
OP_WeaponEquip2 and OP_WeaponUnequip2 renamed to OP_PlayerStateAdd
and OP_PlayerStateRemove
Still needs work: Get AI controlled mobs sending the correct
PlayerStates. (stunned, attacking, etc)
was bad. Blinded mobs can still cast spells when in melee range. The
original fear code had no blind rolled into it, I added that. This was an
overright. I changed the macro to use bonues and fleemode instead of
looking at curfp. Testing looks good to me.
when the spawn vie gm command or normally with loot tables that equip.
Refined previous changes that fixed the issue with zoning in and not seeing
previosuly spawned armor by sharing the same module.