Jump to content

Playerbot


Recommended Posts

report command dose not work btw got the spell learn stuff to work the bots just reply WHAT? for list of commands

/p report

is what i put ingame

all current with mangos and playerbot

Yes sorry, I haven't updated the documentation recently. I hope to correct this in my next few commits. The 'report' command has now been integrated as a sub-command for the 'quest' command. Try

/p quest report

Hope this helps

Link to comment
Share on other sites

  • Replies 799
  • Created
  • Last Reply

Top Posters In This Topic

report command dose not work btw got the spell learn stuff to work the bots just reply WHAT? for list of commands

/p report

is what i put ingame

all current with mangos and playerbot

Yes sorry, I haven't updated the documentation recently. I hope to correct this in my next few commits. The 'report' command has now been integrated as a sub-command for the 'quest' command. Try

/p quest report

Hope this helps

Thank you sir worked great

Link to comment
Share on other sites

Firstly, with the invisibility problem ; I have less problems with VMaps (LOS) enabled.

Based on that statement, I think your trouble with bots isn't that they are actually invisible, they've fallen through the ground. Having vmaps enabled does help to prevent this, but you will encounter "holes" in the vmaps that will still let the bots fall through the ground.

I do feel sorry for those using VS2010. From all that I've read online, Service Pack 1 caused more problems than it solved. It's still a buggy, half-broken mess if the avalanche of complaints against VS2010 are to be believed.

Don't feel badly about using old hardware, blueboy. It's what you can do with your system that makes all the difference. You've done more with 32 bits that most people can ever dare to manage with the latest and greatest 64-bit hardware and software. :cool:

Constructive criticism is a way of contributing. By giving feedback on how things work, it does make devs aware of areas that need improvement or implementation, which does make the software better in the long run. Although, blueboy doesn't seem to be lacking in imagination where new features are concerned!

It would be nice if all of us who post in this community were also coders, bet it C++, SQL, or cranking out scripts for ScriptDev2. Unfortunately, it is a bit unreasonable to expect that. Some are content just learning about setting up and running a server while others only want a private world to play in. Programming requires a degree of dedication and time that a lot of people don't have or prefer to focus on other things. You can easily spend days just researching game features to make sure your project behaves like retail play, days more planning and writing the code, then many more days hunting bugs and fixing them.

However, following blueboy's example would be a great benefit to this community. He seems to be incredibly knowledgeable and skilled now, but by his own words he was once just as clueless as the rest of us before making the choice to learn C++ and take up a project. Boy, am I ever glad he did! If you don't know how much he's done for Playerbot, take a look at the posts about the early days of Playerbot. Bots were basically useless dummies that you had to tell what to do for every little thing, when they managed to work at all!

Link to comment
Share on other sites

Based on that statement, I think your trouble with bots isn't that they are actually invisible, they've fallen through the ground. Having vmaps enabled does help to prevent this, but you will encounter "holes" in the vmaps that will still let the bots fall through the ground.

Yes I think it's something like that. Could it be possible for someone who doesn't encounter the invisibility bug to write here the options he set in these lines :

[== mangosd.conf ==]
vmap.enableLOS = 1
vmap.enableHeight = 1
vmap.ignoreSpellIds = "7720"
vmap.enableIndoorCheck = 1
DetectPosCollision = 0
TargetPosRecalculateRange = 1.5

Link to comment
Share on other sites

update -

quest like discover rolfs fate bots cannot pick up or accept.. (i have to do a "quest add")

just a fyi

-Vanilla

Yes, If your using MaNGOS Zero to do this quest I don't think it will work. Playerbot uses the 'get' command to get the bots to travel to rolfs corpse, obtained from the 'survey' command. When the bot try to open the gameobject this triggers a CMSG_GAMEOBJ_REPORT_USE packet, that gives the bots the opportunity to TurnInQuest() and AcceptQuest() the next quest. The problem is the CMSG_GAMEOBJ_REPORT_USE opcode is still quarantined on the MaNGOS Zero, so it won't work.

Hope this helps

Link to comment
Share on other sites

update -

quest like discover rolfs fate bots cannot pick up or accept.. (i have to do a "quest add")

just a fyi

-Vanilla

Yes, If your using MaNGOS Zero to do this quest I don't think it will work. Playerbot uses the 'get' command to get the bots to travel to rolfs corpse, obtained from the 'survey' command. When the bot try to open the gameobject this triggers a CMSG_GAMEOBJ_REPORT_USE packet, that gives the bots the opportunity to TurnInQuest() and AcceptQuest() the next quest. The problem is the CMSG_GAMEOBJ_REPORT_USE opcode is still quarantined on the MaNGOS Zero, so it won't work.

Hope this helps

I remember reading that in the mangos forums. so was not surprised. is there a work around? how about an "additem" or "addquest" - i can do it as a gm, just trying to figure a way to do it as a player.

giving the command "addquest" is not at the top of my list (yet) hehehehe

Link to comment
Share on other sites

I got the same behaviour, as told from cowchmonkey, on my box.

Also I found out a bit more:

It seems that a priest, set as healer, is mostly casting Renew, and that from 5 til 20 times in a row, when someone is low at health and not one of the other "normal" (not HoT) healing spells.

After a small recurse/omen session it seems that my DDs (pala and mage) made only half as much DPS as I did, using a hunter with no pet and no rotation.

The last thing I recognized is that the tank (in my case a warrior) does not build up much thread. When he attacks it is no big problem for me, or one of the other bot, even the healer, to get aggro.

for the dps and the thread generated from the tank, I guess i did not configure it correctly. is there something to configure the rotation, or mostly to use spells, or is it all hard coded. I had a small look on the code (but it is a long time ago i coded c++) and unfortunately i couldn't find any information here.

The rest worked absoluty fantastic! The buffed themself, and I had no problems when testing them regards a crash or other stuff.

Thanks that you are coding the bots, it is really fun playing with them :)

I tested with lvl 80 chars mostly pre lvl80 green and blue items in a lvl 72 Instance.

The configuration from my bots are:

Warrior (Tanks and protect healer)

pala (assists tank and protect healer)

mage (assist tank)

priest (heals)

myself a hunter

edit: forgot to say which version of playerbot I am using: https://github.com/playerbot/mangos from 12th december

edit no2: ok I had closer look at the code and found out that he should have healed my tank. Unfortunately I don't have much time, but

I will try to "debug" the behaviour, strange healing behaviour and small dps output, ( or my misconfiguration..) and inform you as soon as I found something.

edit 3: silly me :( With your new Post I found the new-ai and the fix with the Renew is, of course, already implemented :)

Link to comment
Share on other sites

i notice when u have combat orders set for healers they still attack with spells is there a way to toggle off the attack spells so they only use healing ones and same with a pally tank they try to heal when there pose to be tanking

or where is the combat attack orders at ?

If the bots are attacked they will defend themselves even if their combat orders suggest a passive response. If the healers only used heal spells in combat I can guarantee that we would get posts asking why the healers appear to do nothing. I do appreciate what your saying and there is certainly room for plenty of improvements in the AI.

Cheers

Link to comment
Share on other sites

I guess i did not configure it correctly. is there something to configure the rotation, or mostly to use spells, or is it all hard coded. I had a small look on the code (but it is a long time ago i coded c++) and unfortunately i couldn't find any information here.

There is nothing to configure as far as spell rotation is concerned (hard coded at present, but this can change). If you examine the playerbot AI files for the various classes you see slight variation in the way the rotation is handled (primarily because different programmers worked on each, with their own coding style). Generally the rotation is sequential loop with conditional exclusions. If you would like to take a closer look at this, that would be great. I will help you all I can ;)

Hope this helps

Link to comment
Share on other sites

i notice when u have combat orders set for healers they still attack with spells is there a way to toggle off the attack spells so they only use healing ones and same with a pally tank they try to heal when there pose to be tanking

or where is the combat attack orders at ?

If the bots are attacked they will defend themselves even if their combat orders suggest a passive response. If the healers only used heal spells in combat I can guarantee that we would get posts asking why the healers appear to do nothing. I do appreciate what your saying and there is certainly room for plenty of improvements in the AI.

Cheers

i agree with u on that part and i think my issue was i was telling them all to attack but... i notice with the druid he/she still melees when they are set to heal even if they dont get the order to attack :?

hey im messing with the druids healing ai and have a quick ?

if (hp < 70 && REJUVENATION > 0 && !target->HasAura(REJUVENATION) && ai->CastSpell(REJUVENATION, *target))

is the 70 in that line 70% ? just clarifying trying to play around with it to make the druid heal more like i did when i played retail

one more thing is there a way to make it so u can summon bots from the guild? or where the invite/summon stuff is

sry for so many edits :) didnt want to trible post

Link to comment
Share on other sites

To all the people with questions regarding Healers and such. I only have a few minutes and this may seem like common sense to some but trust me it isnt.

Instead of rewriting the bot coding for AI i found an easier way to make sure my priest/druid/shaman only heals instead of doing DPS.

I only train them the spells i want them to use .

Sounds simple but trust me MANY people ive spoken to had not thought of it. I think its second nature to train everything you can. But if i only train the spells i want used. They only cast those. For instance a priest eats up like 70% of its mana casting holy nova over and over. So i dont train it holy nova. Now my priest is mana conservative and heals extremely well using mostly renew and major heals spells.

The character will retain spells like Smite rnk1 obviously but it wont use almost any mana if it chain casts a level 1 spell.

Anyways I just though i would share that since I too had complained about lack of healing from bots.

Link to comment
Share on other sites

i notice when u have combat orders set for healers they still attack with spells is there a way to toggle off the attack spells so they only use healing ones and same with a pally tank they try to heal when there pose to be tanking

or where is the combat attack orders at ?

This could use some clever party-based calculations. For example, once the (healer / party.size) ratio <= 25% (as in, once there are 1 healer per 4 party members, or less), healers only heal. Blueboy made a good point (that I share): playerbot is used by various people and while I with my 5man party may wish my healer only healed, someone else with a 2man party may curse a healer for not DPSing (and then curse it for not healing when it goes OOM).

hey im messing with the druids healing ai and have a quick ?

if (hp < 70 && REJUVENATION > 0 && !target->HasAura(REJUVENATION) && ai->CastSpell(REJUVENATION, *target))

is the 70 in that line 70% ? just clarifying trying to play around with it to make the druid heal more like i did when i played retail

I haven't read all the classes code but in general health is % based, and mana is % based BUT (very broken) % of base mana (before item bonuses and such). If I'm not mistaken.

Instead of rewriting the bot coding for AI i found an easier way to make sure my priest/druid/shaman only heals instead of doing DPS.

I only train them the spells i want them to use.

Very clever solution and I'll commend you for it even if I don't want to use it myself. Personally I'd rather see this coded properly without a workaround. Until it is, of course (and perhaps after) this should be a relatively simple solution.

Link to comment
Share on other sites

I'm currently testing a bit with standard WotLK rotations and it seems to work quite good!

I changed the healing from the priest to only healing, the Warrior to just tank and the mage as firemage (if assigned the correct Roles (TANK,ASSIST, HEAL).

My Mage just increased the DPS from 550 to 1300, my Warrior has no problems holding the aggro and my priest is just healing, as they should.

So an relative easy solution would be to code for all classes to all needed types (dd, healer and tank) a simple

rotation, that they will do what they should if all stays normal. Any special cases excluded (tank is iceblock, too many enemies..)

I will start doing this with the chars I'm testing(Priest, Warrior, Paladin, Mage and Hunter [though this could be a bit tricky due to the pet] ) . Having finished them I will post the patchfile.

I don't how how fast I could finish it due to limited time. :/ But I will let you know any progress.

@kennumen: I will try to keep the healerratio-aspect in mind, when coding it.

@blueboy: Maybe you want to review the code once finished or in between, 'cause my codingstyle is not the best :) But I will comment as much as needed, so that is quite understandable.

Link to comment
Share on other sites

Very clever solution and I'll commend you for it even if I don't want to use it myself. Personally I'd rather see this coded properly without a workaround. Until it is, of course (and perhaps after) this should be a relatively simple solution.

Thank you:P I didnt mean though NOT to rewrite it I just meant in the meantime thats how i use it.

Like i said quite some time before in this thread i believe there should be an option to make healers only heal or DPS. This has been greatly improved since then. The only issue i have now is i find certain spells come up in for example the priests rotation well before the more functional and mana conservative ones. Such as Holy nova being used when 1 target is injured instead of renew or other spells.

I always thought it would have been easiest to have it function something like.

Priest AI

Heal Holy

If Target is below 75% health --> renew

If Target is below 50% health --> Greater Heal

If Target is below 25% health --> Flash Heal

Heal Assist

Priest functions as it does now.

Then perhaps you can set a further subcommand to combat orders. Such as telling the priest

.bot co heal holy Target

then the bot would ONLY use the spells specified above to heal when set to heal holy.

Under Heal Assist it would function as it does now and focus more on Damage.

This would have great effect to use the AI such as this for all classes considered. Such as Shamans Druids and Paladins. Limit the spells they have available to them during that combat order designation. Leave them the way they are under assist.

Even for the druid could create the sub listing of spells so that in TANK mode the Druid will ONLY use bear abilities and stay in bear form.

In Assist could have Assist CAT and Assist Balance. Where it is set that under each they would only have the spells available to them that are associated with Catform under Cat and Balance spells under Balance.

Heal for a druid could consist of Only Healing spells and treeform.

Sorry for the wall of text.. Again just my own ideas lol

Link to comment
Share on other sites

I too have been messing with the ai code and have been trying to setup spell rotations for classes etc.

I'm using this as a way to learn a bit of c++ so if I ask something stupid you will have to forgive me. :)

I've been setting up a rotation for the warrior bot and I think I have it pretty close but I'm stuck on a couple of things.

One I don't know how to make the bot taunt if it no longer is the target of the mob. Right now I just have him taunting whenever taunt is up.

The other thing is I can't keep the warrior bots from constantly using heroic strike no matter what the rage level is. I'm trying to get them to

only use heroic strike if their rage is over 60.

if (HEROIC_STRIKE > 0 && ai->GetRageAmount() > 60 && ai->GetAttackerCount() <= 2 && ai->CastSpell(HEROIC_STRIKE, *pTarget))
out << " > Heroic Strike";    

When I use that code they will spam heroic strike and have no rage for any other abilities.

If anyone knows a solution I would appreciate it and of course when I'm done I would be more than happy to share what I finish.

Link to comment
Share on other sites

hey this is just a thought/idea

but sins we all seem to have different ideas on how we want to spell rotation on healing spellcast and tanking, specs and what no how hard would it be to put all this AI into a config file for the server owner to play with. I no the reason for playerbots was intended for small servers. me I have no coding exp at all kinda learning as I go and not sure how hard or if this idea would even be possible or if it would make things more easy for ppl to set rotations up just an idea.

I no this maybe hard but if someone wants to tell me how to do it I would be more than happy to do it

PS Sry posting from my phone before I forgot lol

Link to comment
Share on other sites

@Corzarium: I did it with a LastSpellCounter. and set the heroic strike at the end of the rotation:

Here is how I made the tank rotation (includes a view debugging messages):

if (DISARM > 0 && ai->GetRageAmount() >= 15 && !pTarget->HasAura(DISARM, EFFECT_INDEX_0) && LastSpellTank == 3)

{

ai->CastSpell(DISARM, *pTarget);

ai->TellMaster("Spell -> Disarm");

LastSpellTank = LastSpellTank + 1;

}

else if (SUNDER_ARMOR > 0 && ai->GetRageAmount() >= 15 && LastSpellTank == 4 )

{

ai->CastSpell(SUNDER_ARMOR, *pTarget);

ai->TellMaster("Spell -> Sunder Armor");

LastSpellTank = LastSpellTank + 1;

}

else if (REVENGE > 0 && ai->GetRageAmount() >= 5 && ai->CastSpell(REVENGE, *pTarget) && LastSpellTank == 4 )

{

ai->TellMaster("Spell -> Revenge");

LastSpellTank = LastSpellTank + 1;

}

else if (SHIELD_BLOCK > 0 && !m_bot->HasAura(SHIELD_BLOCK, EFFECT_INDEX_0) && LastSpellTank == 5 )

{

ai->CastSpell(SHIELD_BLOCK, *m_bot);

ai->TellMaster("Spell -> Shield Block");

LastSpellTank = LastSpellTank + 1;

}

else if (SHIELD_WALL > 0 && !m_bot->HasAura(SHIELD_WALL, EFFECT_INDEX_0) && LastSpellTank == 5 )

{

ai->CastSpell(SHIELD_WALL, *m_bot);

ai->TellMaster("Spell -> Shield Wall");

LastSpellTank = LastSpellTank + 1;

}

else if ( SHIELD_SLAM > 0 && ai->GetRageAmount() >= 20 && LastSpellTank == 6 )

{

ai->CastSpell(SHIELD_SLAM, *pTarget);

ai->TellMaster("Spell -> Shield Slam");

LastSpellTank = LastSpellTank + 1;

}

//Try to spam a heroic_strike..

else if (HEROIC_STRIKE > 0 && ai->GetRageAmount() >= 15 )

{

ai->CastSpell(HEROIC_STRIKE, *pTarget);

ai->TellMaster("Spell -> Heroic Strike");

LastSpellTank = LastSpellTank + 1;

}

if (LastSpellTank > 6)

LastSpellTank = 0;

edit: I don't know why but he is messing up my code box, that's why i quoted it..

Link to comment
Share on other sites

@Corzarium: I did it with a LastSpellCounter. and set the heroic strike at the end of the rotation:

Here is how I made the tank rotation (includes a view debugging messages):

if (DISARM > 0 && ai->GetRageAmount() >= 15 && !pTarget->HasAura(DISARM, EFFECT_INDEX_0) && LastSpellTank == 3)

{

ai->CastSpell(DISARM, *pTarget);

ai->TellMaster("Spell -> Disarm");

LastSpellTank = LastSpellTank + 1;

}

else if (SUNDER_ARMOR > 0 && ai->GetRageAmount() >= 15 && LastSpellTank == 4 )

{

ai->CastSpell(SUNDER_ARMOR, *pTarget);

ai->TellMaster("Spell -> Sunder Armor");

LastSpellTank = LastSpellTank + 1;

}

else if (REVENGE > 0 && ai->GetRageAmount() >= 5 && ai->CastSpell(REVENGE, *pTarget) && LastSpellTank == 4 )

{

ai->TellMaster("Spell -> Revenge");

LastSpellTank = LastSpellTank + 1;

}

else if (SHIELD_BLOCK > 0 && !m_bot->HasAura(SHIELD_BLOCK, EFFECT_INDEX_0) && LastSpellTank == 5 )

{

ai->CastSpell(SHIELD_BLOCK, *m_bot);

ai->TellMaster("Spell -> Shield Block");

LastSpellTank = LastSpellTank + 1;

}

else if (SHIELD_WALL > 0 && !m_bot->HasAura(SHIELD_WALL, EFFECT_INDEX_0) && LastSpellTank == 5 )

{

ai->CastSpell(SHIELD_WALL, *m_bot);

ai->TellMaster("Spell -> Shield Wall");

LastSpellTank = LastSpellTank + 1;

}

else if ( SHIELD_SLAM > 0 && ai->GetRageAmount() >= 20 && LastSpellTank == 6 )

{

ai->CastSpell(SHIELD_SLAM, *pTarget);

ai->TellMaster("Spell -> Shield Slam");

LastSpellTank = LastSpellTank + 1;

}

//Try to spam a heroic_strike..

else if (HEROIC_STRIKE > 0 && ai->GetRageAmount() >= 15 )

{

ai->CastSpell(HEROIC_STRIKE, *pTarget);

ai->TellMaster("Spell -> Heroic Strike");

LastSpellTank = LastSpellTank + 1;

}

if (LastSpellTank > 6)

LastSpellTank = 0;

edit: I don't know why but he is messing up my code box, that's why i quoted it..

i tried to use ur code for my warrior and sins im a noob i suck but i got this

.\\..\\src\\game\\playerbot\\PlayerbotWarriorAI.cpp(278): error C2065: 'LastSpellTank' : undeclared identifier

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use