{"action":"created","comment":{"url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/comments/55935428","id":55935428,"diff_hunk":"@@ -0,0 +1,264 @@\n+/*\n+ * Copyright (C) 2011-2016 TrinityCore <http://www.trinitycore.org/>\n+ *\n+ * This program is free software; you can redistribute it and/or modify it\n+ * under the terms of the GNU General Public License as published by the\n+ * Free Software Foundation; either version 2 of the License, or (at your\n+ * option) any later version.\n+ *\n+ * This program is distributed in the hope that it will be useful, but WITHOUT\n+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n+ * more details.\n+ *\n+ * You should have received a copy of the GNU General Public License along\n+ * with this program. If not, see <http://www.gnu.org/licenses/>.\n+ */\n+\n+#include \"Language.h\"\n+#include \"ScriptMgr.h\"\n+#include \"ObjectMgr.h\"\n+#include \"Chat.h\"\n+#include \"SpellAuras.h\"\n+#include \"AnticheatMgr.h\"\n+\n+class anticheat_commandscript : public CommandScript\n+{\n+public:\n+    anticheat_commandscript() : CommandScript(\"anticheat_commandscript\") { }\n+\n+    std::vector<ChatCommand> GetCommands() const override\n+    {\n+        static std::vector<ChatCommand> anticheatCommandTable =\n+        {\n+            { \"global\", rbac::RBAC_PERM_COMMAND_ANTICHEAT_GLOBAL, true,  &HandleAntiCheatGlobalCommand, \"\" },\n+            { \"player\", rbac::RBAC_PERM_COMMAND_ANTICHEAT_PLAYER, true,  &HandleAntiCheatPlayerCommand, \"\" },\n+            { \"delete\", rbac::RBAC_PERM_COMMAND_ANTICHEAT_DELETE, true,  &HandleAntiCheatDeleteCommand, \"\" },\n+            { \"handle\", rbac::RBAC_PERM_COMMAND_ANTICHEAT_HANDLE, true,  &HandleAntiCheatHandleCommand, \"\" },\n+            { \"jail\",   rbac::RBAC_PERM_COMMAND_ANTICHEAT_JAIL,   false, &HandleAnticheatJailCommand,   \"\" },\n+            { \"warn\",   rbac::RBAC_PERM_COMMAND_ANTICHEAT_WARN,   true,  &HandleAnticheatWarnCommand,   \"\" }\n+        };\n+        static std::vector<ChatCommand> commandTable =\n+        {\n+            { \"anticheat\", rbac::RBAC_PERM_COMMAND_ANTICHEAT, true, nullptr, \"\", anticheatCommandTable }\n+        };\n+        return commandTable;\n+    }\n+\n+    static bool HandleAnticheatWarnCommand(ChatHandler* handler, char const* args)\n+    {\n+        if (!sWorld->getBoolConfig(CONFIG_ANTICHEAT_ENABLE))\n+        {\n+            handler->SendSysMessage(LANG_COMMAND_ACDISABLED);\n+            handler->SetSentErrorMessage(true);\n+            return false;\n+        }\n+\n+        Player* pTarget = nullptr;\n+        char* command = strtok(const_cast<char*>(args), \" \");\n+\n+        if (command)\n+        {\n+            std::string strCommand(command);\n+            normalizePlayerName(strCommand);\n+\n+            pTarget = ObjectAccessor::FindPlayerByName(strCommand); //get player by name\n+        }\n+        else\n+            pTarget = handler->getSelectedPlayer();\n+\n+        if (!pTarget)\n+        {\n+            handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);\n+            handler->SetSentErrorMessage(true);\n+            return false;\n+        }\n+\n+        ChatHandler(pTarget->GetSession()).SendSysMessage(LANG_COMMAND_ACWARN);\n+        return true;\n+    }\n+\n+    static bool HandleAnticheatJailCommand(ChatHandler* handler, char const* args)\n+    {\n+        if (!sWorld->getBoolConfig(CONFIG_ANTICHEAT_ENABLE))\n+        {\n+            handler->SendSysMessage(LANG_COMMAND_ACDISABLED);\n+            handler->SetSentErrorMessage(true);\n+            return false;\n+        }\n+\n+        static WorldLocation const jailPos(1, 16226.5f, 16403.6f, -64.5f, 3.2f);\n+\n+        Player* pTarget = nullptr;\n+        char* command = strtok(const_cast<char*>(args), \" \");\n+\n+        if (command)\n+        {\n+            std::string strCommand(command);\n+            normalizePlayerName(strCommand);\n+\n+            pTarget = ObjectAccessor::FindPlayerByName(strCommand); //get player by name\n+        }\n+        else\n+            pTarget = handler->getSelectedPlayer();\n+\n+        if (!pTarget)\n+        {\n+            handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);\n+            handler->SetSentErrorMessage(true);\n+            return false;\n+        }\n+\n+        if (pTarget == handler->GetSession()->GetPlayer())\n+            return false;\n+\n+        // teleport both to jail.\n+        pTarget->TeleportTo(jailPos);\n+        // freeze!\n+        uint32 freezeDuration = sWorld->getIntConfig(CONFIG_GM_FREEZE_DURATION);\n+\n+        if (Aura* freeze = pTarget->AddAura(9454, pTarget))\n+        {\n+            if (freezeDuration)\n+                freeze->SetDuration(freezeDuration * IN_MILLISECONDS);\n+\n+            pTarget->SaveToDB();\n+        }\n+\n+        handler->GetSession()->GetPlayer()->TeleportTo(jailPos);\n+\n+        return true;\n+    }\n+\n+    static bool HandleAntiCheatDeleteCommand(ChatHandler* handler, char const* args)\n+    {\n+        if (!sWorld->getBoolConfig(CONFIG_ANTICHEAT_ENABLE))\n+        {\n+            handler->SendSysMessage(LANG_COMMAND_ACDISABLED);\n+            handler->SetSentErrorMessage(true);\n+            return false;\n+        }\n+\n+        char* command = strtok(const_cast<char*>(args), \" \");\n+\n+        if (!command)\n+            return false;\n+\n+        std::string strCommand(command);\n+\n+        if (strCommand.compare(\"deleteall\") == 0)\n+            sAnticheatMgr->AnticheatDeleteCommand(0);\n+        else\n+        {\n+            normalizePlayerName(strCommand);\n+            Player* player = ObjectAccessor::FindPlayerByName(strCommand); //get player by name\n+            if (!player)\n+            {\n+                handler->PSendSysMessage(LANG_PLAYER_NOT_EXIST_OR_OFFLINE, strCommand.c_str());\n+                handler->SetSentErrorMessage(true);\n+                return false;\n+            }\n+            else\n+                sAnticheatMgr->AnticheatDeleteCommand(player->GetGUID().GetCounter());\n+        }\n+\n+        return true;\n+    }\n+\n+    static bool HandleAntiCheatPlayerCommand(ChatHandler* handler, char const* args)\n+    {\n+        if (!sWorld->getBoolConfig(CONFIG_ANTICHEAT_ENABLE))\n+        {\n+            handler->SendSysMessage(LANG_COMMAND_ACDISABLED);\n+            handler->SetSentErrorMessage(true);\n+            return false;\n+        }\n+\n+        char* command = strtok(const_cast<char*>(args), \" \");\n+\n+        ObjectGuid::LowType lowGuid = 0;\n+        Player* player = nullptr;\n+\n+        if (command)\n+        {\n+            std::string strCommand(command);\n+\n+            normalizePlayerName(strCommand);\n+            player = ObjectAccessor::FindPlayerByName(strCommand); //get player by name\n+\n+            if (player)\n+                lowGuid = player->GetGUID().GetCounter();\n+        }\n+        else\n+        {\n+            player = handler->getSelectedPlayer();\n+            if (player)\n+                lowGuid = player->GetGUID().GetCounter();\n+        }\n+\n+        if (!lowGuid)\n+        {\n+            handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);\n+            handler->SetSentErrorMessage(true);\n+            return false;\n+        }\n+\n+        float average = sAnticheatMgr->GetAverage(lowGuid);\n+        uint32 total_reports = sAnticheatMgr->GetTotalReports(lowGuid);\n+        uint32 speed_reports = sAnticheatMgr->GetTypeReports(lowGuid, REPORT_TYPE_SPEED);\n+        uint32 fly_reports = sAnticheatMgr->GetTypeReports(lowGuid, REPORT_TYPE_FLY);\n+        uint32 jump_reports = sAnticheatMgr->GetTypeReports(lowGuid, REPORT_TYPE_JUMP);\n+        uint32 waterwalk_reports = sAnticheatMgr->GetTypeReports(lowGuid, REPORT_TYPE_WATERWALK);\n+        uint32 teleportplane_reports = sAnticheatMgr->GetTypeReports(lowGuid, REPORT_TYPE_TELEPORT_PLANE);\n+        uint32 climb_reports = sAnticheatMgr->GetTypeReports(lowGuid, REPORT_TYPE_CLIMB);\n+\n+        handler->PSendSysMessage(LANG_COMMAND_ACPLAYER_INFO, player->GetName().c_str());\n+        handler->PSendSysMessage(LANG_COMMAND_ACPLAYER_STATS, average, total_reports);\n+        handler->PSendSysMessage(LANG_COMMAND_ACPLAYER_SPEEDFLYJUMP, speed_reports, fly_reports, jump_reports);\n+        handler->PSendSysMessage(LANG_COMMAND_ACPLAYER_WATERPLANE, waterwalk_reports, teleportplane_reports);\n+        handler->PSendSysMessage(LANG_COMMAND_ACPLAYER_CLIMB, climb_reports);\n+        return true;\n+    }\n+\n+    static bool HandleAntiCheatHandleCommand(ChatHandler* handler, char const* args)\n+    {\n+        if (!*args)\n+            return false;\n+\n+        std::string strCommand = const_cast<char*>(args);","path":"src/server/scripts/Commands/cs_anticheat.cpp","position":228,"original_position":228,"commit_id":"51d9a4d3c0eb11cf336d1fe09e1090e7fecf5135","original_commit_id":"51d9a4d3c0eb11cf336d1fe09e1090e7fecf5135","user":{"login":"Rochet2","id":468816,"avatar_url":"https://avatars.githubusercontent.com/u/468816?v=3","gravatar_id":"","url":"https://api.github.com/users/Rochet2","html_url":"https://github.com/Rochet2","followers_url":"https://api.github.com/users/Rochet2/followers","following_url":"https://api.github.com/users/Rochet2/following{/other_user}","gists_url":"https://api.github.com/users/Rochet2/gists{/gist_id}","starred_url":"https://api.github.com/users/Rochet2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Rochet2/subscriptions","organizations_url":"https://api.github.com/users/Rochet2/orgs","repos_url":"https://api.github.com/users/Rochet2/repos","events_url":"https://api.github.com/users/Rochet2/events{/privacy}","received_events_url":"https://api.github.com/users/Rochet2/received_events","type":"User","site_admin":false},"body":"doesnt look like a necessary cast. The value should be copied by the string constructor.","created_at":"2016-03-13T11:03:29Z","updated_at":"2016-03-13T11:03:29Z","html_url":"https://github.com/TrinityCore/TrinityCore/pull/16774#discussion_r55935428","pull_request_url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/16774","_links":{"self":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/comments/55935428"},"html":{"href":"https://github.com/TrinityCore/TrinityCore/pull/16774#discussion_r55935428"},"pull_request":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/16774"}}},"pull_request":{"url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/16774","id":62659321,"html_url":"https://github.com/TrinityCore/TrinityCore/pull/16774","diff_url":"https://github.com/TrinityCore/TrinityCore/pull/16774.diff","patch_url":"https://github.com/TrinityCore/TrinityCore/pull/16774.patch","issue_url":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/16774","number":16774,"state":"open","locked":false,"title":"[Feature] Implement passive anticheat system","user":{"login":"ariel-","id":9031719,"avatar_url":"https://avatars.githubusercontent.com/u/9031719?v=3","gravatar_id":"","url":"https://api.github.com/users/ariel-","html_url":"https://github.com/ariel-","followers_url":"https://api.github.com/users/ariel-/followers","following_url":"https://api.github.com/users/ariel-/following{/other_user}","gists_url":"https://api.github.com/users/ariel-/gists{/gist_id}","starred_url":"https://api.github.com/users/ariel-/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ariel-/subscriptions","organizations_url":"https://api.github.com/users/ariel-/orgs","repos_url":"https://api.github.com/users/ariel-/repos","events_url":"https://api.github.com/users/ariel-/events{/privacy}","received_events_url":"https://api.github.com/users/ariel-/received_events","type":"User","site_admin":false},"body":"**Changes proposed**: Original patch taken from here: (created by @maanuel)\r\nhttps://community.trinitycore.org/topic/10-patch-telenpc2-pvpranks-passive-anticheat-for-trinitycore-2016-02-24-4e4b2b9-35a-only/\r\n\r\n- This adds the core capabilities to passively detect player hacking/cheating using 3rd party tools, it just scans for some flags/speed mismatch and emits a warning to every GM (or rather any account with rbac::RBAC_PERM_RECEIVE_GLOBAL_GM_TEXTMESSAGE)\r\n- The original version was massively updated, it was optimized and updated to reflect core changes along the way.\r\n\r\n**Target branch(es)**: 335/6x\r\n\r\n**Issues addressed**: None, feature request.\r\n\r\n**Tests performed**: (Does it build, tested in-game, etc) It builds and correctly detects many kinds of 3rd party tools, issuing a warning.\r\n\r\n**Known issues and TODO list**:\r\n- [x] Move anticheat.sql to correct folder and update base sql","created_at":"2016-03-13T02:25:15Z","updated_at":"2016-03-13T11:03:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b99d1b8b3753dd226662a1b7dcb5071c28c27e47","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/16774/commits","review_comments_url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/16774/comments","review_comment_url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/comments{/number}","comments_url":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/16774/comments","statuses_url":"https://api.github.com/repos/TrinityCore/TrinityCore/statuses/51d9a4d3c0eb11cf336d1fe09e1090e7fecf5135","head":{"label":"Aokromes:passive","ref":"passive","sha":"51d9a4d3c0eb11cf336d1fe09e1090e7fecf5135","user":{"login":"Aokromes","id":539374,"avatar_url":"https://avatars.githubusercontent.com/u/539374?v=3","gravatar_id":"","url":"https://api.github.com/users/Aokromes","html_url":"https://github.com/Aokromes","followers_url":"https://api.github.com/users/Aokromes/followers","following_url":"https://api.github.com/users/Aokromes/following{/other_user}","gists_url":"https://api.github.com/users/Aokromes/gists{/gist_id}","starred_url":"https://api.github.com/users/Aokromes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Aokromes/subscriptions","organizations_url":"https://api.github.com/users/Aokromes/orgs","repos_url":"https://api.github.com/users/Aokromes/repos","events_url":"https://api.github.com/users/Aokromes/events{/privacy}","received_events_url":"https://api.github.com/users/Aokromes/received_events","type":"User","site_admin":false},"repo":{"id":42428903,"name":"TrinityCore","full_name":"Aokromes/TrinityCore","owner":{"login":"Aokromes","id":539374,"avatar_url":"https://avatars.githubusercontent.com/u/539374?v=3","gravatar_id":"","url":"https://api.github.com/users/Aokromes","html_url":"https://github.com/Aokromes","followers_url":"https://api.github.com/users/Aokromes/followers","following_url":"https://api.github.com/users/Aokromes/following{/other_user}","gists_url":"https://api.github.com/users/Aokromes/gists{/gist_id}","starred_url":"https://api.github.com/users/Aokromes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Aokromes/subscriptions","organizations_url":"https://api.github.com/users/Aokromes/orgs","repos_url":"https://api.github.com/users/Aokromes/repos","events_url":"https://api.github.com/users/Aokromes/events{/privacy}","received_events_url":"https://api.github.com/users/Aokromes/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Aokromes/TrinityCore","description":"TrinityCore Open Source MMO Framework","fork":true,"url":"https://api.github.com/repos/Aokromes/TrinityCore","forks_url":"https://api.github.com/repos/Aokromes/TrinityCore/forks","keys_url":"https://api.github.com/repos/Aokromes/TrinityCore/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Aokromes/TrinityCore/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Aokromes/TrinityCore/teams","hooks_url":"https://api.github.com/repos/Aokromes/TrinityCore/hooks","issue_events_url":"https://api.github.com/repos/Aokromes/TrinityCore/issues/events{/number}","events_url":"https://api.github.com/repos/Aokromes/TrinityCore/events","assignees_url":"https://api.github.com/repos/Aokromes/TrinityCore/assignees{/user}","branches_url":"https://api.github.com/repos/Aokromes/TrinityCore/branches{/branch}","tags_url":"https://api.github.com/repos/Aokromes/TrinityCore/tags","blobs_url":"https://api.github.com/repos/Aokromes/TrinityCore/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Aokromes/TrinityCore/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Aokromes/TrinityCore/git/refs{/sha}","trees_url":"https://api.github.com/repos/Aokromes/TrinityCore/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Aokromes/TrinityCore/statuses/{sha}","languages_url":"https://api.github.com/repos/Aokromes/TrinityCore/languages","stargazers_url":"https://api.github.com/repos/Aokromes/TrinityCore/stargazers","contributors_url":"https://api.github.com/repos/Aokromes/TrinityCore/contributors","subscribers_url":"https://api.github.com/repos/Aokromes/TrinityCore/subscribers","subscription_url":"https://api.github.com/repos/Aokromes/TrinityCore/subscription","commits_url":"https://api.github.com/repos/Aokromes/TrinityCore/commits{/sha}","git_commits_url":"https://api.github.com/repos/Aokromes/TrinityCore/git/commits{/sha}","comments_url":"https://api.github.com/repos/Aokromes/TrinityCore/comments{/number}","issue_comment_url":"https://api.github.com/repos/Aokromes/TrinityCore/issues/comments{/number}","contents_url":"https://api.github.com/repos/Aokromes/TrinityCore/contents/{+path}","compare_url":"https://api.github.com/repos/Aokromes/TrinityCore/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Aokromes/TrinityCore/merges","archive_url":"https://api.github.com/repos/Aokromes/TrinityCore/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Aokromes/TrinityCore/downloads","issues_url":"https://api.github.com/repos/Aokromes/TrinityCore/issues{/number}","pulls_url":"https://api.github.com/repos/Aokromes/TrinityCore/pulls{/number}","milestones_url":"https://api.github.com/repos/Aokromes/TrinityCore/milestones{/number}","notifications_url":"https://api.github.com/repos/Aokromes/TrinityCore/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Aokromes/TrinityCore/labels{/name}","releases_url":"https://api.github.com/repos/Aokromes/TrinityCore/releases{/id}","deployments_url":"https://api.github.com/repos/Aokromes/TrinityCore/deployments","created_at":"2015-09-14T05:26:31Z","updated_at":"2016-01-11T11:52:29Z","pushed_at":"2016-03-13T03:55:24Z","git_url":"git://github.com/Aokromes/TrinityCore.git","ssh_url":"git@github.com:Aokromes/TrinityCore.git","clone_url":"https://github.com/Aokromes/TrinityCore.git","svn_url":"https://github.com/Aokromes/TrinityCore","homepage":"http://www.trinitycore.org","size":370226,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":0,"forks":2,"open_issues":0,"watchers":0,"default_branch":"4.3.4"}},"base":{"label":"TrinityCore:3.3.5","ref":"3.3.5","sha":"7f1cef3fa7f4f40d68e1763d6151d241801cc591","user":{"login":"TrinityCore","id":539602,"avatar_url":"https://avatars.githubusercontent.com/u/539602?v=3","gravatar_id":"","url":"https://api.github.com/users/TrinityCore","html_url":"https://github.com/TrinityCore","followers_url":"https://api.github.com/users/TrinityCore/followers","following_url":"https://api.github.com/users/TrinityCore/following{/other_user}","gists_url":"https://api.github.com/users/TrinityCore/gists{/gist_id}","starred_url":"https://api.github.com/users/TrinityCore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TrinityCore/subscriptions","organizations_url":"https://api.github.com/users/TrinityCore/orgs","repos_url":"https://api.github.com/users/TrinityCore/repos","events_url":"https://api.github.com/users/TrinityCore/events{/privacy}","received_events_url":"https://api.github.com/users/TrinityCore/received_events","type":"Organization","site_admin":false},"repo":{"id":1204412,"name":"TrinityCore","full_name":"TrinityCore/TrinityCore","owner":{"login":"TrinityCore","id":539602,"avatar_url":"https://avatars.githubusercontent.com/u/539602?v=3","gravatar_id":"","url":"https://api.github.com/users/TrinityCore","html_url":"https://github.com/TrinityCore","followers_url":"https://api.github.com/users/TrinityCore/followers","following_url":"https://api.github.com/users/TrinityCore/following{/other_user}","gists_url":"https://api.github.com/users/TrinityCore/gists{/gist_id}","starred_url":"https://api.github.com/users/TrinityCore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TrinityCore/subscriptions","organizations_url":"https://api.github.com/users/TrinityCore/orgs","repos_url":"https://api.github.com/users/TrinityCore/repos","events_url":"https://api.github.com/users/TrinityCore/events{/privacy}","received_events_url":"https://api.github.com/users/TrinityCore/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/TrinityCore/TrinityCore","description":"TrinityCore Open Source MMO Framework","fork":false,"url":"https://api.github.com/repos/TrinityCore/TrinityCore","forks_url":"https://api.github.com/repos/TrinityCore/TrinityCore/forks","keys_url":"https://api.github.com/repos/TrinityCore/TrinityCore/keys{/key_id}","collaborators_url":"https://api.github.com/repos/TrinityCore/TrinityCore/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/TrinityCore/TrinityCore/teams","hooks_url":"https://api.github.com/repos/TrinityCore/TrinityCore/hooks","issue_events_url":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/events{/number}","events_url":"https://api.github.com/repos/TrinityCore/TrinityCore/events","assignees_url":"https://api.github.com/repos/TrinityCore/TrinityCore/assignees{/user}","branches_url":"https://api.github.com/repos/TrinityCore/TrinityCore/branches{/branch}","tags_url":"https://api.github.com/repos/TrinityCore/TrinityCore/tags","blobs_url":"https://api.github.com/repos/TrinityCore/TrinityCore/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/TrinityCore/TrinityCore/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/TrinityCore/TrinityCore/git/refs{/sha}","trees_url":"https://api.github.com/repos/TrinityCore/TrinityCore/git/trees{/sha}","statuses_url":"https://api.github.com/repos/TrinityCore/TrinityCore/statuses/{sha}","languages_url":"https://api.github.com/repos/TrinityCore/TrinityCore/languages","stargazers_url":"https://api.github.com/repos/TrinityCore/TrinityCore/stargazers","contributors_url":"https://api.github.com/repos/TrinityCore/TrinityCore/contributors","subscribers_url":"https://api.github.com/repos/TrinityCore/TrinityCore/subscribers","subscription_url":"https://api.github.com/repos/TrinityCore/TrinityCore/subscription","commits_url":"https://api.github.com/repos/TrinityCore/TrinityCore/commits{/sha}","git_commits_url":"https://api.github.com/repos/TrinityCore/TrinityCore/git/commits{/sha}","comments_url":"https://api.github.com/repos/TrinityCore/TrinityCore/comments{/number}","issue_comment_url":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/comments{/number}","contents_url":"https://api.github.com/repos/TrinityCore/TrinityCore/contents/{+path}","compare_url":"https://api.github.com/repos/TrinityCore/TrinityCore/compare/{base}...{head}","merges_url":"https://api.github.com/repos/TrinityCore/TrinityCore/merges","archive_url":"https://api.github.com/repos/TrinityCore/TrinityCore/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/TrinityCore/TrinityCore/downloads","issues_url":"https://api.github.com/repos/TrinityCore/TrinityCore/issues{/number}","pulls_url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls{/number}","milestones_url":"https://api.github.com/repos/TrinityCore/TrinityCore/milestones{/number}","notifications_url":"https://api.github.com/repos/TrinityCore/TrinityCore/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/TrinityCore/TrinityCore/labels{/name}","releases_url":"https://api.github.com/repos/TrinityCore/TrinityCore/releases{/id}","deployments_url":"https://api.github.com/repos/TrinityCore/TrinityCore/deployments","created_at":"2010-12-28T23:40:07Z","updated_at":"2016-03-12T22:12:01Z","pushed_at":"2016-03-13T10:20:02Z","git_url":"git://github.com/TrinityCore/TrinityCore.git","ssh_url":"git@github.com:TrinityCore/TrinityCore.git","clone_url":"https://github.com/TrinityCore/TrinityCore.git","svn_url":"https://github.com/TrinityCore/TrinityCore","homepage":"http://www.trinitycore.org","size":753723,"stargazers_count":3174,"watchers_count":3174,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3325,"mirror_url":null,"open_issues_count":1382,"forks":3325,"open_issues":1382,"watchers":3174,"default_branch":"6.x"}},"_links":{"self":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/16774"},"html":{"href":"https://github.com/TrinityCore/TrinityCore/pull/16774"},"issue":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/16774"},"comments":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/16774/comments"},"review_comments":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/16774/comments"},"review_comment":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/16774/commits"},"statuses":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/statuses/51d9a4d3c0eb11cf336d1fe09e1090e7fecf5135"}}}}