PDA

View Full Version : Limit Bot Class Count per Group


skyy
10-12-2015, 03:30 PM
Hello there,

i am currently trying to limit the amount of same class-bots per group for my solo server project and am having a little trouble doing so.

what i was trying was to simply not let them being invited to group when there is already the same class present:

void Bot::ProcessBotGroupInvite(Client* c, std::string botName) {
if(c) {
Bot* invitedBot = GetBotByBotClientOwnerAndBotName(c, botName);

if(invitedBot && !invitedBot->HasGroup()) {
if(!c->IsGrouped()) {
Group *g = new Group(c);
if(AddBotToGroup(invitedBot, g)) {
entity_list.AddGroup(g);
database.SetGroupLeaderName(g->GetID(), c->GetName());
g->SaveGroupLeaderAA();
database.SetGroupID(c->GetName(), g->GetID(), c->CharacterID());
database.SetGroupID(invitedBot->GetCleanName(), g->GetID(), invitedBot->GetBotID());
}
} else {
// godrage
//for (int i = 0; i < 7; ++i)
//{
// if (c->GetGroup()->members[i]->GetClass() == invitedBot->GetClass())
// {
// c->Say("It's all about diversity...");
// break;
// }
//}

AddBotToGroup(invitedBot, c->GetGroup());
database.SetGroupID(invitedBot->GetCleanName(), c->GetGroup()->GetID(), invitedBot->GetBotID());
}
}
}
}
but due to my rather limited knowledge of the source and c++ i cant seem to get it to work;

anyone able to help me out on that ? would highly appreciate it :D

Uleat
10-12-2015, 03:44 PM
I'm assuming that it's crashing, or at least letting the bot in?


As far as the code..try this:

void Bot::ProcessBotGroupInvite(Client* c, std::string botName) {
if(c) {
Bot* invitedBot = GetBotByBotClientOwnerAndBotName(c, botName);

if(invitedBot && !invitedBot->HasGroup()) {
if(!c->IsGrouped()) {
Group *g = new Group(c);
if(AddBotToGroup(invitedBot, g)) {
entity_list.AddGroup(g);
database.SetGroupLeaderName(g->GetID(), c->GetName());
g->SaveGroupLeaderAA();
database.SetGroupID(c->GetName(), g->GetID(), c->CharacterID());
database.SetGroupID(invitedBot->GetCleanName(), g->GetID(), invitedBot->GetBotID());
}
} else {
// godrage
for (int i = 0; i < 6; ++i)
{
if (!c->GetGroup()->members[i])
continue;

if (c->GetGroup()->members[i]->GetClass() == invitedBot->GetClass())
{
c->Say("It's all about diversity...");
return;
}
}

AddBotToGroup(invitedBot, c->GetGroup());
database.SetGroupID(invitedBot->GetCleanName(), c->GetGroup()->GetID(), invitedBot->GetBotID());
}
}
}
}



That's off the cuff..so, I don't know if it works.

skyy
10-12-2015, 03:45 PM
thanks, gonna try it :D

skyy
10-13-2015, 07:28 AM
it works perfectly and in case someone is looking to do the same, thats what my code looks like atm:

void Bot::ProcessBotGroupInvite(Client* c, std::string botName) {
if(c) {
Bot* invitedBot = GetBotByBotClientOwnerAndBotName(c, botName);

if(invitedBot && !invitedBot->HasGroup()) {
if(!c->IsGrouped()) {
//godrage
if (c->GetClass() == invitedBot->GetClass())
{
//c->Say("It's all about diversity... and against clones");
invitedBot->Say("There is already someone with my talents in your group.");
invitedBot->Emote("rejects your invitations");
return;
}
//godrage
Group *g = new Group(c);
if(AddBotToGroup(invitedBot, g)) {
entity_list.AddGroup(g);
database.SetGroupLeaderName(g->GetID(), c->GetName());
g->SaveGroupLeaderAA();
database.SetGroupID(c->GetName(), g->GetID(), c->CharacterID());
database.SetGroupID(invitedBot->GetCleanName(), g->GetID(), invitedBot->GetBotID());
BotGroupOrderFollow(g,c); //godrage
}
} else {
//godrage
for (int i = 0; i < 6; ++i)
{
if (!c->GetGroup()->members[i])
continue;
if (c->GetGroup()->members[i]->GetClass() == invitedBot->GetClass())
{
//c->Say("It's all about diversity... and against clones");
invitedBot->Say("There is already someone with my talents in your group.");
invitedBot->Emote("rejects your invitations");
return;
}
}
//godrage
Group *gg = c->GetGroup(); //godrage
AddBotToGroup(invitedBot, c->GetGroup());
database.SetGroupID(invitedBot->GetCleanName(), c->GetGroup()->GetID(), invitedBot->GetBotID());
BotGroupOrderFollow(gg, c); //godrage
}
}
}
}




the reason for BotGroupOrderFollow(g,c); //godrage is simply the fact that i add a different followdistance for each bot with the follow command which i now trigger from the invite.

my personal reason for this change is to simply enforce a policy to see bots as dearly beloved group members and not as zerg fodder :)