Chat tweak, guild bots management tooggle

This commit is contained in:
Atidot3
2024-08-04 10:14:07 +02:00
parent 6e41c87e93
commit 7227211ddf
8 changed files with 127 additions and 39 deletions

View File

@@ -159,64 +159,141 @@ bool GuildManageNearbyAction::Execute(Event event)
if (!player || bot == player)
continue;
if (player->GetGuildId()) //Promote or demote nearby members based on chance.
if (player->isDND())
continue;
if (player->GetGuildId() && player->GetGuildId() == bot->GetGuildId()) //Promote or demote nearby members based on chance.
{
Guild::Member* member = guild->GetMember(player->GetGUID());
uint32 dCount = AI_VALUE(uint32, "death count");
if ((dCount < 2 || !urand(0, 10)) && guild->GetRankRights(botMember->GetRankId() & GR_RIGHT_PROMOTE))
if (!urand(0, 30) && dCount < 2 && guild->GetRankRights(botMember->GetRankId()) & GR_RIGHT_PROMOTE)
{
if (!urand(0, 10))
{
BroadcastHelper::BroadcastGuildMemberPromotion(botAI, bot, player);
botAI->DoSpecificAction("guild promote", Event("guild management", guid), true);
BroadcastHelper::BroadcastGuildMemberPromotion(botAI, bot, player);
continue;
}
botAI->DoSpecificAction("guild promote", Event("guild management", guid), true);
continue;
}
if ((dCount > 3 || !urand(0, 10)) && guild->GetRankRights(botMember->GetRankId() & GR_RIGHT_DEMOTE))
if (!urand(0, 30) && dCount > 2 && guild->GetRankRights(botMember->GetRankId()) & GR_RIGHT_DEMOTE)
{
if (!urand(0, 10))
{
botAI->DoSpecificAction("guild demote", Event("guild management", guid), true);
BroadcastHelper::BroadcastGuildMemberDemotion(botAI, bot, player);
continue;
}
botAI->DoSpecificAction("guild demote", Event("guild management", guid), true);
continue;
}
continue;
}
if (!(guild->GetRankRights(botMember->GetRankId()) & GR_RIGHT_INVITE))
if (!sPlayerbotAIConfig->randomBotGuildNearby)
return false;
if (guild->GetMemberSize() > 1000)
return false;
if ( (guild->GetRankRights(botMember->GetRankId()) & GR_RIGHT_INVITE) == 0)
continue;
if (player->GetGuildIdInvited())
continue;
PlayerbotAI* botAI = GET_PLAYERBOT_AI(player);
PlayerbotAI* botAi = GET_PLAYERBOT_AI(player);
if (botAI)
{
if (botAI->GetGuilderType() == GuilderType::SOLO && !botAI->HasRealPlayerMaster()) //Do not invite solo players.
continue;
if (botAI->HasActivePlayerMaster()) //Do not invite alts of active players.
continue;
}
else
{
if (!sPlayerbotAIConfig->randomBotGroupNearby)
return false;
}
if (sServerFacade->GetDistance2d(bot, player) > sPlayerbotAIConfig->sightDistance)
if (!sPlayerbotAIConfig->randomBotInvitePlayer && botAi && botAi->IsRealPlayer())
continue;
if (botAI && botAI->DoSpecificAction("ginvite", Event("guild management", guid)))
if (botAi)
{
if (botAi->GetGuilderType() == GuilderType::SOLO && !botAi->HasRealPlayerMaster()) //Do not invite solo players.
continue;
if (botAi->HasActivePlayerMaster() && !sRandomPlayerbotMgr->IsRandomBot(player)) //Do not invite alts of active players.
continue;
}
bool sameGroup = bot->GetGroup() && bot->GetGroup()->IsMember(player->GetGUID());
if (!sameGroup && sServerFacade->GetDistance2d(bot, player) > sPlayerbotAIConfig->spellDistance)
continue;
if (sPlayerbotAIConfig->inviteChat && (sRandomPlayerbotMgr->IsRandomBot(bot) || !botAI->HasActivePlayerMaster()))
{
std::map<std::string, std::string> placeholders;
placeholders["%name"] = player->GetName();
placeholders["%members"] = std::to_string(guild->GetMemberSize());
placeholders["%guildname"] = guild->GetName();
AreaTableEntry const* current_area = botAI->GetCurrentArea();
AreaTableEntry const* current_zone = botAI->GetCurrentZone();
placeholders["%area_name"] = current_area ? current_area->area_name[BroadcastHelper::GetLocale()] : BOT_TEXT1("string_unknown_area");
placeholders["%zone_name"] = current_zone ? current_zone->area_name[BroadcastHelper::GetLocale()] : BOT_TEXT1("string_unknown_area");
std::vector<std::string> lines;
//TODO - Move these hardcoded texts to sql!
switch ((urand(0, 10) * urand(0, 10)) / 10)
{
case 0:
lines.push_back(BOT_TEXT2("Hey %name do you want to join my guild?", placeholders));
break;
case 1:
lines.push_back(BOT_TEXT2("Hey man you wanna join my guild %name?", placeholders));
break;
case 2:
lines.push_back(BOT_TEXT2("I think you would be a good contribution to %guildname. Would you like to join %name?", placeholders));
break;
case 3:
lines.push_back(BOT_TEXT2("My guild %guildname has %members quality members. Would you like to make it 1 more %name?", placeholders));
break;
case 4:
lines.push_back(BOT_TEXT2("Hey %name do you want to join %guildname? We have %members members and looking to become number 1 of the server.", placeholders));
break;
case 5:
lines.push_back(BOT_TEXT2("I'm not really good at smalltalk. Do you wanna join my guild %name/r?", placeholders));
break;
case 6:
lines.push_back(BOT_TEXT2("Welcome to %zone_name.... do you want to join my guild %name?", placeholders));
break;
case 7:
lines.push_back(BOT_TEXT2("%name, you should join my guild!", placeholders));
break;
case 8:
lines.push_back(BOT_TEXT2("%name, I got this guild....", placeholders));
break;
case 9:
lines.push_back(BOT_TEXT2("You are actually going to join my guild %name?", placeholders));
lines.push_back(BOT_TEXT2("Haha.. you are the man! We are going to raid Molten...", placeholders));
break;
case 10:
lines.push_back(BOT_TEXT2("Hey Hey! do you guys wanna join my gild????", placeholders));
lines.push_back(BOT_TEXT2("We've got a bunch of high levels and we are really super friendly..", placeholders));
lines.push_back(BOT_TEXT2("..and watch your dog and do your homework...", placeholders));
lines.push_back(BOT_TEXT2("..and we raid once a week and are working on MC raids...", placeholders));
lines.push_back(BOT_TEXT2("..and we have more members than just me...", placeholders));
lines.push_back(BOT_TEXT2("..and please stop I'm lonenly and we can get a ride the whole time...", placeholders));
lines.push_back(BOT_TEXT2("..and it's really beautifull and I feel like crying...", placeholders));
lines.push_back(BOT_TEXT2("So what do you guys say are you going to join are you going to join?", placeholders));
break;
}
for (auto line : lines)
if (sameGroup)
{
WorldPacket data;
ChatHandler::BuildChatPacket(data, bot->GetGroup()->isRaidGroup() ? CHAT_MSG_RAID : CHAT_MSG_PARTY, line.c_str(), LANG_UNIVERSAL, CHAT_TAG_NONE, bot->GetGUID(), bot->GetName());
bot->GetGroup()->BroadcastPacket(&data, true);
}
else
bot->Say(line, (bot->GetTeamId() == TEAM_ALLIANCE ? LANG_COMMON : LANG_ORCISH));
}
if (botAI->DoSpecificAction("guild invite", Event("guild management", guid), true))
{
if (sPlayerbotAIConfig->inviteChat)
return true;
found++;
}
}
return found > 0;