void OnPVPKill(Player* killer, Player* killed) { if (!MultiKillEnable) return; uint32 killerGuid = killer->GetGUIDLow(); uint32 killedGuid = killed->GetGUIDLow(); ResetCounter(killedGuid); if (killerGuid == killedGuid) return; if (MultiKillBattleGround && !killer->InBattleground()) return; time_t now = time(NULL); Reward(killer, ++MultiKillPlayer[killerGuid].total, KILL_TYPE_TOTAL); if (now - MultiKillPlayer[killerGuid].last > MultiKillTimeBetween) MultiKillPlayer[killerGuid].count = 0; MultiKillPlayer[killerGuid].last = now; if (MultiKillPlayer[killerGuid].count < MultiKillMax) MultiKillPlayer[killerGuid].count++; if (MultiKillPlayer[killerGuid].count < MultiKillMin) return; Reward(killer, MultiKillPlayer[killerGuid].count, KILL_TYPE_MULTI); }
bool OnGossipSelectCode( Player *player, Creature *_Creature, uint32 sender, uint32 action, const char* sCode ) { if(sender == GOSSIP_SENDER_MAIN) { if(action == GOSSIP_ACTION_INFO_DEF+1) { if(int32 Index = Reward(player, _Creature, sCode)) { if(Index > 0) { SQLTransaction trans = ExtraDatabase.BeginTransaction(); trans->PAppend("UPDATE coupons as T1, coupons_info as T2 SET T1.rewarded = '1', T2.account = '%u', T2.character = '%u' WHERE T1.id = '%u' AND T2.id = '%u'", player->GetSession()->GetAccountId(), player->GetGUIDLow(), Index, Index); ExtraDatabase.CommitTransaction(trans); player->SaveToDB(); _Creature->MonsterWhisper(PREMIUM_LANG_GOOD_BYE,player->GetGUID()); player->CLOSE_GOSSIP_MENU(); return true; } } } } player->CLOSE_GOSSIP_MENU(); return true; }
void OnPlayerFirstKillBattleground(Player* player, Battleground* /*bg*/) { Reward(player, 0, KILL_TYPE_FIRST); }
void PC::EndRunning() { // unlocked locked npc { LPCHARACTER npc = CQuestManager::instance().GetCurrentNPCCharacterPtr(); LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); // npc АЦѕъґш °жїм if (npc && !npc->IsPC()) { // ±Ч їЈЗЗѕѕ°Ў іЄїЎ°Ф ¶фАО °жїм if (ch->GetPlayerID() == npc->GetQuestNPCID()) { npc->SetQuestNPCID(0); sys_log(0, "QUEST NPC lock isn't unlocked : pid %u", ch->GetPlayerID()); CQuestManager::instance().WriteRunningStateToSyserr(); } } } // commit data if (HasReward()) { Save(); LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if (ch != NULL) { Reward(ch); ch->Save(); } } m_bIsGivenReward = false; if (m_iSendToClient) { sys_log(1, "QUEST end running %d", m_iSendToClient); SendQuestInfoPakcet(); } if (m_RunningQuestState == NULL) { sys_log(0, "Entered PC::EndRunning() with invalid running quest state"); return; } QuestState * pOldState = m_RunningQuestState; int iNowState = m_RunningQuestState->st; m_RunningQuestState = 0; if (m_iLastState != iNowState) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); DWORD dwQuestIndex = CQuestManager::instance().GetQuestIndexByName(m_stCurQuest); if (ch) { SetFlag(m_stCurQuest + ".__status", m_iLastState); CQuestManager::instance().LeaveState(ch->GetPlayerID(), dwQuestIndex, m_iLastState); pOldState->st = iNowState; SetFlag(m_stCurQuest + ".__status", iNowState); CQuestManager::instance().EnterState(ch->GetPlayerID(), dwQuestIndex, iNowState); if (GetFlag(m_stCurQuest + ".__status") == iNowState) CQuestManager::instance().Letter(ch->GetPlayerID(), dwQuestIndex, iNowState); } } DoQuestStateChange(); }
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()); } } }