Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Bots

Development::Bots Forum for bots.

Reply
 
Thread Tools Display Modes
  #1  
Old 08-07-2015, 03:37 AM
kilst87
Sarnak
 
Join Date: Dec 2008
Location: sydney
Posts: 35
Default Newb fix for #bot healrotation

I've spent a bit of time looking over the healrotation code (admittedly, I don't actually know C++ at all), and I think I've come up with a fix (or at least a partial one).

Replace (bot.cpp):
(in the function Bot::AddHealRotationMember())
Code:
for(int i = 0; i < 3; i++){
at line 12903

with:

Code:
int count = 0;
for (int i = 0; i < MaxHealRotationTargets; i++)
{
    if (_healRotationTargets[i] != 0)
    count++;
}
for(int i = 0; i < count; i++){

The tank/s weren't being set properly after calling AddHealRotationMember(). I'm assuming it's due to trying to set tanks that aren't actually there since the newly added healers would get stuck in the function Bot::AddHealRotationTarget().

I haven't thoroughly tested it, but with 1 tank and 3 healers, I was able to get a chain going, add a new healer, and stop the chain perfectly fine.
Reply With Quote
  #2  
Old 08-08-2015, 10:23 PM
kilst87
Sarnak
 
Join Date: Dec 2008
Location: sydney
Posts: 35
Default

Edit: Actually that doesn't work after lots more testing.

Instead, replace the whole loop:

Code:
for(int i = 0; i < 3; i++){
    healer->ClearHealRotationMembers();
    healer->ClearHealRotationTargets();
    healer->AddHealRotationTarget(entity_list.GetMob(_healRotationTargets[i]));
}
starting at line at line 12903

with:

Code:
for (int i = 0; i < MaxHealRotationTargets; i++)
{
    if (_healRotationTargets[i] != 0)
        healer->AddHealRotationTarget(entity_list.GetMob(_healRotationTargets[i]));
}
Only problem now is that healers only switch tanks on feign deaths that fail

Re-Edit:

Code:
Mob* Bot::GetHealRotationTarget( ) {
    Mob* tank = nullptr;
    Mob* first = nullptr;
    Mob* target = nullptr;
    int removeIndex = 0;
    for(int i = 0; i < MaxHealRotationTargets; i++) {
	    if(_healRotationTargets[i] != 0) {
		    target = entity_list.GetMob(_healRotationTargets[i]);
		    if(target) {
			    if(target->GetZoneID() == GetZoneID() && (!(target->GetAppearance() == eaDead) && !(target->IsClient() && target->CastToClient()->GetFeigned()))) {
				    if(!first)
					    first = target;

                                              Etc, etc.......
}
Bolded line is the line in question.

And that should fix the feign death bug. Tested, but not very thoroughly.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 06:48 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3