vmangos / core

Progressive Vanilla Core aimed at all versions from 1.2 to 1.12
GNU General Public License v2.0
691 stars 491 forks source link

๐Ÿš€ [Feature] Improve mob linking and healer mob scripts #1237

Open Agney-gt opened 3 years ago

Agney-gt commented 3 years ago

๐Ÿš€ Feature

Currently, mob packs aggro when you attack mobs which are part of their group. They also do not heal mobs of other packs/spawns. If you link these packs and allow healer mobs to heal any other mobs that are nearby and also in combat, it would greatly increase the difficulty levels organically.

Visualization

https://user-images.githubusercontent.com/84612798/122675656-13d8c500-d1f8-11eb-9215-391523c2577b.mp4

In this video, you can see the spiritchaser mob not healing its allied troll mob since they are not in the same pack. If you attack a member of the spriitchaser's pack, it does heal it. This implies that packs are not interlinked ie: mobs in one pack are linked to one another but not linked to other nearby packs. This means that they will not aggro or heal if mobs from other packs.

I have reported around 16 mobs that do not heal properly. 4 bugs/reports on another github -

  1. Dont heal at all(https://github.com/darrowshire-dev/bugtracker/issues/98)
  2. Heal self instead of low hp friend(https://github.com/darrowshire-dev/bugtracker/issues/95),
  3. Heal self but not friends (https://github.com/darrowshire-dev/bugtracker/issues/112)and
  4. Dont heal after running in fear (https://github.com/darrowshire-dev/bugtracker/issues/110)

I have included videos and screenshots as evidence

Since there are a lot of mobs on these 2 lists of mobs that heal, https://classic.wowhead.com/spell=1355/healing-wave#used-by-npc;0+3+1 and https://classic.wowhead.com/spell=2055/heal#used-by-npc;0+2-3+1

As for the linking issue, to my knowledge, it applies to every mob pack outside and inside instances.

Benefits, Purpose

This will increase the difficulty and provide a challenging experience on a 17 year old game and a new take on leveling experience. The changes are easy to implement and will make a huge difference to 1-60 gameplay

ratkosrb commented 3 years ago

Skullsplitter Spiritchaser is set to use generic_spell_ai, which means he randomly casts his spells, and that is why he does not heal his allies. This is something that needs to be fixed on an individual basis.

Fixed here: https://github.com/vmangos/core/commit/259ce980953eed066ef26036a53797f1639cc8d1

If you can make a list of other mobs that are currently not healing their allies, but they should be doing it, I can correct them too.

Agney-gt commented 3 years ago

Thank you for your help!

Doesnt heal friends https://classic.wowhead.com/npc=3271/razormane-mystic https://classic.wowhead.com/npc=1183/mogrosh-mystic https://classic.wowhead.com/npc=1013/mosshide-mystic

Doesnt heal at all https://classic.wowhead.com/npc=2718/dustbelcher-shaman https://classic.wowhead.com/npc=1183/mogrosh-mystic https://classic.wowhead.com/npc=1013/mosshide-mystic https://classic.wowhead.com/npc=3944/wrathtail-priestess

Heals itself instead of healing ally https://classic.wowhead.com/npc=873/saltscale-oracle https://classic.wowhead.com/npc=1029/bluegill-oracle https://classic.wowhead.com/npc=4852/stonevault-oracle

Mob runs away in fear when low, and instead of healing, attacks or cast dmg spells https://classic.wowhead.com/npc=3924/thistlefur-shaman#abilities https://classic.wowhead.com/npc=453/riverpaw-mystic https://classic.wowhead.com/npc=548/murloc-minor-tidecaller https://classic.wowhead.com/npc=545/murloc-tidecaller https://classic.wowhead.com/npc=430/redridge-mystic

I was wondering if you could change behaviour and increase priority for heals by tinkering with delayRepeatMin_1 or just write a script using vanilla wow api for this argument - scriptId_1

PS: Spiritchaser DOES heal if you pull mobs which are part of its pack. The mob in video is not part of the mobs that spawn near him and so he does not heal it.

ratkosrb commented 3 years ago

I see no issue with these ones: Mo'grosh Mystic Mosshide Mystic Dustbelcher Shaman

Mob runs away in fear when low, and instead of healing, attacks or cast dmg spells

Not sure what you mean here exactly. You believe these mobs should not run at low health, or that cast timers are too long?

ratkosrb commented 3 years ago

Also there is no such concept as "mobs from the same pack" when it comes to picking heal target.

This is how it finds a target for healing spells. https://github.com/vmangos/core/blob/development/src/game/Objects/Unit.cpp#L8890

It goes through all units currently in combat with its victim, and picks one that is friendly to itself and has less than X percent health left.

Agney-gt commented 3 years ago

I see no issue with these ones: Mo'grosh Mystic Mosshide Mystic Dustbelcher Shaman

If you take a look at this link https://github.com/darrowshire-dev/bugtracker/issues/98, you will see that those mobs do not use their healing abilities. Here is a video for one of them -

https://user-images.githubusercontent.com/84612798/122856179-fe68b580-d333-11eb-91e4-aad192315c2f.mp4

Mob runs away in fear when low, and instead of healing, attacks or cast dmg spells

Not sure what you mean here exactly. You believe these mobs should not run at low health, or that cast timers are too long?

Maybe i was not being clear, what i mean can be explained by watching this video.

https://user-images.githubusercontent.com/84612798/122856437-6f0fd200-d334-11eb-9956-7d4c4333b4b4.mp4

In this video you see almost perfect behaviour. The mobs heal itself, and friends. But, after it runs away in fear, it regenerates mana and uses damaging spell instead of healing spell while its health is low.

Agney-gt commented 3 years ago

Also there is no such concept as "mobs from the same pack" when it comes to picking heal target.

This is how it finds a target for healing spells. https://github.com/vmangos/core/blob/development/src/game/Objects/Unit.cpp#L8890

It goes through all units currently in combat with its victim, and picks one that is friendly to itself and has less than X percent health left.

If this is the case, then the spiritchaser mob should heal the skullsplitter warrior that i had aggrod. I was talking about packs since when i aggrod another mob which spawned near or was in the same pack as the spiritchaser, it healed that mob.

ratkosrb commented 3 years ago
In this video you see almost perfect behaviour. The mobs heal itself, and friends. But, after it runs away in fear, it regenerates mana and uses damaging spell instead of healing spell while its health is low.

Most likely the damaging spell costs less mana, and that's why its used first.

If this is the case, then the spiritchaser mob should heal the skullsplitter warrior that i had aggrod. I was talking about packs since when i aggrod another mob which spawned near or was in the same pack as the spiritchaser, it healed that mob.

There is no such distinction made. They will heal any friendly mob in combat with you. As long as they have the mana and the spell is not in cooldown. Most mobs have a 20-30 sec cd on their heal.

https://streamable.com/kju3rm