Код:
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index d90f6bc..28cc165 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -647,5 +647,6 @@ ChatCommand * ChatHandler::getCommandTable()
{ "titles", SEC_GAMEMASTER, false, NULL, "", titlesCommandTable },
{ "wp", SEC_GAMEMASTER, false, NULL, "", wpCommandTable },
+ { "achievement", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAchievementCommand, "", NULL },
{ "aura", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAuraCommand, "", NULL },
{ "unaura", SEC_ADMINISTRATOR, false, &ChatHandler::HandleUnAuraCommand, "", NULL },
diff --git a/src/game/Chat.h b/src/game/Chat.h
index d90f6bc..28cc165 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -523,4 +523,6 @@ class ChatHandler
bool HandleWaterwalkCommand(const char* args);
bool HandleQuitCommand(const char* args);
+ bool HandleAchievementCommand(const char* args);
+
//! Development Commands
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index d90f6bc..28cc165 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -2678,12 +2678,71 @@ bool ChatHandler::HandleAddItemCommand
if(noSpaceForCount > 0)
PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemId, noSpaceForCount);
return true;
}
+bool ChatHandler::HandleAchievementCommand(const char* args)
+{
+ if (!*args)
+ return false;
+
+ uint32 achievementId = 0;
+
+ if(args[0]=='[') // [name] manual form
+ {
+ char* cachievementName = strtok((char*)args, "]");
+
+ if(cachievementName && cachievementName[0])
+ {
+ std::string achievementName = cachievementName+1;
+ WorldDatabase.escape_string(achievementName);
+ QueryResult *result = WorldDatabase.PQuery("SELECT entry FROM achievement_reward WHERE text = '%s'", achievementName.c_str());
+ if (!result)
+ {
+ PSendSysMessage(LANG_COMMAND_ACHINOTFIND, cachievementName+1);
+ SetSentErrorMessage(true);
+ return false;
+ }
+ achievementId = result->Fetch()->GetUInt16();
+ delete result;
+ }
+ else
+ return false;
+ }
+
+ char* ccount = strtok(NULL, " ");
+
+ int32 count = 1;
+
+ if (ccount)
+ count = strtol(ccount, NULL, 10);
+
+ if (count == 0)
+ count = 1;
+
+ Player* pl = m_session->GetPlayer();
+ Player* plTarget = getSelectedPlayer();
+ if(!plTarget)
+ plTarget = pl;
+
+ DETAIL_LOG(GetMangosString(LANG_ADDACHI), achievementId, count);
+
+ // remove binding (let GM give it to another player later)
+ if(pl==plTarget)
+ for(AchievementPosCountVec::const_iterator itr = dest.begin(); itr != dest.end(); ++itr)
+ if(Achievement* achievement1 = pl->GetachievementByPos(itr->pos))
+ achievement1->SetBinding( false );
+
+ return true;
+}
+
bool ChatHandler::HandleAddItemSetCommand(const char* args)
{
if (!*args)
return false;
diff --git a/src/game/Language.h b/src/game/Language.h
index d90f6bc..28cc165 100644
--- a/src/game/Language.h
+++ b/src/game/Language.h
@@ -547,7 +547,7 @@ enum MangosStrings
LANG_GET_UINT_FIELD = 570,
LANG_GET_FLOAT = 571, //log
LANG_GET_FLOAT_FIELD = 572,
- // 573, //not used
- // 574, //not used
+ LANC_COMMAND_AHINOTFIND = 573,
+ LANC_COMMAND_ADDACHI = 574,
LANG_CHANGE_32BIT = 575, //log
LANG_CHANGE_32BIT_FIELD = 576,
diff --git a/sql/achievement_command.sql b/sql/achievement_command.sql
new file mode 100644
index 0000000..94b31ec
--- /dev/null
+++ b/sql/achievement_command.sql
@@ -0,0 +1,6 @@
+INSERT INTO `command` VALUES
+('achievement',3,'Syntax: .achievement $Id');
+DELETE FROM `mangos_string` WHERE `entry` BETWEEN 573 AND 574;
+INSERT INTO `mangos_string` VALUES
+(573,'Achievement not found',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Достижение не найдено'),
+(574,'[%s] add ahievement',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'[%s] добавил себе достижение');