EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Bots (https://www.eqemulator.org/forums/forumdisplay.php?f=676)
-   -   Limit Bot Class Count per Group (https://www.eqemulator.org/forums/showthread.php?t=40088)

skyy 10-12-2015 03:30 PM

Limit Bot Class Count per Group
 
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:
Code:

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:
Code:

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:

Code:

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
Code:

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 :)


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

Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.