Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
cs_achievement.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6/* ScriptData
7Name: achievement_commandscript
8%Complete: 100
9Comment: All achievement related commands
10Category: commandscripts
11EndScriptData */
12
13#include "AchievementMgr.h"
14#include "Chat.h"
15#include "Guild.h"
16#include "Language.h"
17#include "Player.h"
18#include "ScriptMgr.h"
19
21{
22public:
23 achievement_commandscript() : CommandScript("achievement_commandscript") { }
24
25 std::vector<ChatCommand> GetCommands() const OVERRIDE
26 {
27 static std::vector<ChatCommand> achievementCommandTable =
28 {
30 };
31 static std::vector<ChatCommand> commandTable =
32 {
33 { "achievement", rbac::RBAC_PERM_COMMAND_ACHIEVEMENT, false, NULL, "", achievementCommandTable },
34 };
35 return commandTable;
36 }
37
38 static bool HandleAchievementAddCommand(ChatHandler* handler, char const* args)
39 {
40 if (!*args)
41 return false;
42
43 uint32 achievementId = atoi((char*)args);
44 if (!achievementId)
45 {
46 if (char* id = handler->extractKeyFromLink((char*)args, "Hachievement"))
47 achievementId = atoi(id);
48 if (!achievementId)
49 return false;
50 }
51
52 Player* target = handler->getSelectedPlayer();
53 if (!target)
54 {
56 handler->SetSentErrorMessage(true);
57 return false;
58 }
59
60 if (AchievementEntry const* achievementEntry = sAchievementMgr->GetAchievement(achievementId))
61 {
62 if (achievementEntry->flags & ACHIEVEMENT_FLAG_GUILD)
63 {
64 if (Guild* guild = target->GetGuild())
65 guild->GetAchievementMgr().CompletedAchievement(achievementEntry, target);
66 }
67 else
68 target->CompletedAchievement(achievementEntry);
69 }
70
71 return true;
72 }
73};
74
#define sAchievementMgr
@ ACHIEVEMENT_FLAG_GUILD
Definition DBCEnums.h:67
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ LANG_NO_CHAR_SELECTED
Definition Language.h:118
Player * getSelectedPlayer()
Definition Chat.cpp:829
char * extractKeyFromLink(char *text, char const *linkType, char **something1=NULL)
Definition Chat.cpp:873
void SetSentErrorMessage(bool val)
Definition Chat.h:114
virtual void SendSysMessage(const char *str)
Definition Chat.cpp:153
CommandScript(const char *name)
Definition Guild.h:324
void CompletedAchievement(AchievementEntry const *entry)
Definition Player.cpp:21048
Guild * GetGuild()
Definition Player.cpp:22662
std::vector< ChatCommand > GetCommands() const OVERRIDE
static bool HandleAchievementAddCommand(ChatHandler *handler, char const *args)
void AddSC_achievement_commandscript()
@ RBAC_PERM_COMMAND_ACHIEVEMENT
Definition RBAC.h:124
@ RBAC_PERM_COMMAND_ACHIEVEMENT_ADD
Definition RBAC.h:125