bool GuildTaskMgr::SendAdvertisement(uint32 owner, uint32 guildId) { Guild *guild = sGuildMgr->GetGuildById(guildId); if (!guild) return false; Player* player = sObjectMgr->GetPlayerByLowGUID(owner); if (!player) return false; Player* leader = sObjectMgr->GetPlayerByLowGUID(guild->GetLeaderGUID()); if (!leader) return false; uint32 validIn; uint32 itemTask = GetTaskValue(owner, guildId, "itemTask", &validIn); if (itemTask) return SendItemAdvertisement(itemTask, owner, guildId, validIn); uint32 killTask = GetTaskValue(owner, guildId, "killTask", &validIn); if (killTask) return SendKillAdvertisement(killTask, owner, guildId, validIn); return false; }
void GuildTaskMgr::CheckItemTask(uint32 itemId, uint32 obtained, Player* ownerPlayer, Player* bot, bool byMail) { uint32 guildId = bot->GetGuildId(); if (!guildId) return; uint32 owner = (uint32)ownerPlayer->GetGUID().GetRawValue(); sLog->outMessage("gtask", LOG_LEVEL_DEBUG, "%s / %s: checking guild task", bot->GetGuild()->GetName().c_str(), ownerPlayer->GetName().c_str()); uint32 itemTask = GetTaskValue(owner, guildId, "itemTask"); if (itemTask != itemId) { sLog->outMessage("gtask", LOG_LEVEL_DEBUG, "%s / %s: item %u is not guild task item (%u)", bot->GetGuild()->GetName().c_str(), ownerPlayer->GetName().c_str(), itemId, itemTask); return; } if (byMail) { ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId); if (!proto) return; uint32 money = GetTaskValue(owner, guildId, "payment"); SetTaskValue(owner, guildId, "payment", money + auctionbot.GetBuyPrice(proto) * obtained, sPlayerbotAIConfig.maxGuildTaskRewardTime); } uint32 count = GetTaskValue(owner, guildId, "itemCount"); if (obtained >= count) { sLog->outMessage("gtask", LOG_LEVEL_DEBUG, "%s / %s: guild task complete", bot->GetGuild()->GetName().c_str(), ownerPlayer->GetName().c_str()); SetTaskValue(owner, guildId, "reward", 1, urand(sPlayerbotAIConfig.minGuildTaskRewardTime, sPlayerbotAIConfig.maxGuildTaskRewardTime)); ChatHandler(ownerPlayer->GetSession()).PSendSysMessage("You have completed a guild task"); } else { sLog->outMessage("gtask", LOG_LEVEL_DEBUG, "%s / %s: guild task progress", bot->GetGuild()->GetName().c_str(), ownerPlayer->GetName().c_str()); SetTaskValue(owner, guildId, "itemCount", count - obtained, sPlayerbotAIConfig.maxGuildTaskChangeTime); SetTaskValue(owner, guildId, "thanks", 1, urand(sPlayerbotAIConfig.minGuildTaskRewardTime, sPlayerbotAIConfig.maxGuildTaskRewardTime)); } }
bool GuildTaskMgr::SendItemAdvertisement(uint32 itemId, uint32 owner, uint32 guildId, uint32 validIn) { Guild *guild = sGuildMgr->GetGuildById(guildId); Player* player = sObjectMgr->GetPlayerByLowGUID(owner); Player* leader = sObjectMgr->GetPlayerByLowGUID(guild->GetLeaderGUID()); ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId); if (!proto) return false; SQLTransaction trans = CharacterDatabase.BeginTransaction(); ostringstream body; body << "Hello, " << player->GetName() << ",\n"; body << "\n"; body << "We are in a great need of " << proto->Name1 << ". If you could sell us "; uint32 count = GetTaskValue(owner, guildId, "itemCount"); if (count > 1) body << "at least " << count << " of them "; else body << "some "; body << "we'd really appreciate that and pay a high price.\n"; body << "The task will expire in " << formatTime(validIn) << "\n"; body << "\n"; body << "Best Regards,\n"; body << guild->GetName() << "\n"; body << leader->GetName() << "\n"; ostringstream subject; subject << "Guild Task: " << proto->Name1; MailDraft(subject.str(), body.str()).SendMailTo(trans, MailReceiver(player), MailSender(leader)); CharacterDatabase.CommitTransaction(trans); return true; }
bool GuildTaskMgr::SendThanks(uint32 owner, uint32 guildId) { Guild *guild = sGuildMgr->GetGuildById(guildId); if (!guild) return false; Player* player = sObjectMgr->GetPlayerByLowGUID(owner); if (!player) return false; Player* leader = sObjectMgr->GetPlayerByLowGUID(guild->GetLeaderGUID()); if (!leader) return false; uint32 itemTask = GetTaskValue(owner, guildId, "itemTask"); if (itemTask) { ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemTask); if (!proto) return false; SQLTransaction trans = CharacterDatabase.BeginTransaction(); ostringstream body; body << "Hello, " << player->GetName() << ",\n"; body << "\n"; body << "One of our guild members wishes to thank you for the " << proto->Name1 << "! If we have another "; uint32 count = GetTaskValue(owner, guildId, "itemCount"); body << count << " of them that would help us tremendously.\n"; body << "\n"; body << "Thanks again,\n"; body << guild->GetName() << "\n"; body << leader->GetName() << "\n"; MailDraft("Thank You", body.str()). AddMoney(GetTaskValue(owner, guildId, "payment")). SendMailTo(trans, MailReceiver(player), MailSender(leader)); CharacterDatabase.CommitTransaction(trans); return true; } return false; }
void CSVAddPlan::UpdateData(ADD_PLAN_OK addMail) { m_pName->setText(addMail.szName); chgstr = addMail.szName; OBJECT hTask = GetTask(addMail.szName); for(int i = 0; i < 7; i++) { char buf[256]; std::string temp1 = "Allow"; itoa(i, buf, 10); temp1 += buf; std::string temp = GetTaskValue(temp1, hTask); if(strcmp(temp.c_str(), m_FormShowText.szStatusAllow.c_str()) == 0) { m_pTasklist -> m_pCombo[i]->setCurrentIndex(0); } else { m_pTasklist -> m_pCombo[i]->setCurrentIndex(1); } temp1 = "start"; temp1 += buf; temp = GetTaskValue(temp1, hTask); m_pTasklist->m_pStart[i] -> setText(temp); temp1 = "end"; temp1 += buf; temp = GetTaskValue(temp1, hTask); m_pTasklist->m_pEnd[i] ->setText(temp); } std::string temp1 = "Description"; std::string temp = GetTaskValue(temp1, hTask); textarea -> setText(temp); }
bool GuildTaskMgr::Reward(uint32 owner, uint32 guildId) { Guild *guild = sGuildMgr->GetGuildById(guildId); if (!guild) return false; Player* player = sObjectMgr->GetPlayerByLowGUID(owner); if (!player) return false; Player* leader = sObjectMgr->GetPlayerByLowGUID(guild->GetLeaderGUID()); if (!leader) return false; uint32 itemTask = GetTaskValue(owner, guildId, "itemTask"); uint32 killTask = GetTaskValue(owner, guildId, "killTask"); if (!itemTask && !killTask) return false; ostringstream body; body << "Hello, " << player->GetName() << ",\n"; body << "\n"; if (itemTask) { ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemTask); if (!proto) return false; body << "We wish to thank you for the " << proto->Name1 << " you provided so kindly. We really appreciate this and may this small gift bring you our thanks!\n"; body << "\n"; body << "Many thanks,\n"; body << guild->GetName() << "\n"; body << leader->GetName() << "\n"; } else if (killTask) { CreatureTemplate const* proto = sObjectMgr->GetCreatureTemplate(killTask); if (!proto) return false; body << "We wish to thank you for the " << proto->Name << " you've killed recently. We really appreciate this and may this small gift bring you our thanks!\n"; body << "\n"; body << "Many thanks,\n"; body << guild->GetName() << "\n"; body << leader->GetName() << "\n"; } SQLTransaction trans = CharacterDatabase.BeginTransaction(); MailDraft draft("Thank You", body.str()); uint32 itemId = sRandomItemMgr.GetRandomItem(RANDOM_ITEM_GUILD_TASK_REWARD); if (itemId) { Item* item = Item::CreateItem(itemId, 1, leader); item->SaveToDB(trans); draft.AddItem(item); } draft.AddMoney(GetTaskValue(owner, guildId, "payment")).SendMailTo(trans, MailReceiver(player), MailSender(leader)); CharacterDatabase.CommitTransaction(trans); SetTaskValue(owner, guildId, "activeTask", 0, 0); return true; }
void GuildTaskMgr::Update(Player* player, Player* guildMaster) { if (!sPlayerbotAIConfig.guildTaskEnabled) return; uint32 guildId = guildMaster->GetGuildId(); if (!guildId || !guildMaster->GetPlayerbotAI() || !guildMaster->GetGuild()) return; if (!player->IsFriendlyTo(guildMaster)) return; DenyReason reason = PLAYERBOT_DENY_NONE; PlayerbotSecurityLevel secLevel = guildMaster->GetPlayerbotAI()->GetSecurity()->LevelFor(player, &reason); if (secLevel == PLAYERBOT_SECURITY_DENY_ALL || (secLevel == PLAYERBOT_SECURITY_TALK && reason != PLAYERBOT_DENY_FAR)) { sLog->outMessage("gtask", LOG_LEVEL_DEBUG, "%s / %s: skipping guild task update - not enough security level, reason = %u", guildMaster->GetGuild()->GetName().c_str(), player->GetName().c_str(), reason); return; } uint32 owner = (uint32)player->GetGUID().GetRawValue(); uint32 activeTask = GetTaskValue(owner, guildId, "activeTask"); if (!activeTask) { SetTaskValue(owner, guildId, "killTask", 0, 0); SetTaskValue(owner, guildId, "itemTask", 0, 0); SetTaskValue(owner, guildId, "itemCount", 0, 0); SetTaskValue(owner, guildId, "killTask", 0, 0); SetTaskValue(owner, guildId, "killCount", 0, 0); SetTaskValue(owner, guildId, "payment", 0, 0); SetTaskValue(owner, guildId, "thanks", 1, 2 * sPlayerbotAIConfig.maxGuildTaskChangeTime); SetTaskValue(owner, guildId, "reward", 1, 2 * sPlayerbotAIConfig.maxGuildTaskChangeTime); uint32 task = CreateTask(owner, guildId); if (task == GUILD_TASK_TYPE_NONE) { sLog->outMessage("gtask", LOG_LEVEL_ERROR, "%s / %s: error creating guild task", guildMaster->GetGuild()->GetName().c_str(), player->GetName().c_str()); } uint32 time = urand(sPlayerbotAIConfig.minGuildTaskChangeTime, sPlayerbotAIConfig.maxGuildTaskChangeTime); SetTaskValue(owner, guildId, "activeTask", task, time); SetTaskValue(owner, guildId, "advertisement", 1, urand(sPlayerbotAIConfig.minGuildTaskAdvertisementTime, sPlayerbotAIConfig.maxGuildTaskAdvertisementTime)); sLog->outMessage("gtask", LOG_LEVEL_DEBUG, "%s / %s: guild task %u is set for %u secs", guildMaster->GetGuild()->GetName().c_str(), player->GetName().c_str(), task, time); return; } uint32 advertisement = GetTaskValue(owner, guildId, "advertisement"); if (!advertisement) { sLog->outMessage("gtask", LOG_LEVEL_DEBUG, "%s / %s: sending advertisement", guildMaster->GetGuild()->GetName().c_str(), player->GetName().c_str()); if (SendAdvertisement(owner, guildId)) { SetTaskValue(owner, guildId, "advertisement", 1, urand(sPlayerbotAIConfig.minGuildTaskAdvertisementTime, sPlayerbotAIConfig.maxGuildTaskAdvertisementTime)); } else { sLog->outMessage("gtask", LOG_LEVEL_ERROR, "%s / %s: error sending advertisement", guildMaster->GetGuild()->GetName().c_str(), player->GetName().c_str()); } } uint32 thanks = GetTaskValue(owner, guildId, "thanks"); if (!thanks) { sLog->outMessage("gtask", LOG_LEVEL_DEBUG, "%s / %s: sending thanks", guildMaster->GetGuild()->GetName().c_str(), player->GetName().c_str()); if (SendThanks(owner, guildId)) { SetTaskValue(owner, guildId, "thanks", 1, 2 * sPlayerbotAIConfig.maxGuildTaskChangeTime); SetTaskValue(owner, guildId, "payment", 0, 0); } else { sLog->outMessage("gtask", LOG_LEVEL_ERROR, "%s / %s: error sending thanks", guildMaster->GetGuild()->GetName().c_str(), player->GetName().c_str()); } } uint32 reward = GetTaskValue(owner, guildId, "reward"); if (!reward) { sLog->outMessage("gtask", LOG_LEVEL_DEBUG, "%s / %s: sending reward", guildMaster->GetGuild()->GetName().c_str(), player->GetName().c_str()); if (Reward(owner, guildId)) { SetTaskValue(owner, guildId, "reward", 1, 2 * sPlayerbotAIConfig.maxGuildTaskChangeTime); SetTaskValue(owner, guildId, "payment", 0, 0); } else { sLog->outMessage("gtask", LOG_LEVEL_ERROR, "%s / %s: error sending reward", guildMaster->GetGuild()->GetName().c_str(), player->GetName().c_str()); } } }