{"action":"created","comment":{"url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/comments/39653948","id":39653948,"diff_hunk":"@@ -110,168 +155,302 @@ class boss_thaddius : public CreatureScript\n         return GetInstanceAI<boss_thaddiusAI>(creature);\n     }\n \n-    struct boss_thaddiusAI : public BossAI\n+    class boss_thaddiusAI : public BossAI\n     {\n-        boss_thaddiusAI(Creature* creature) : BossAI(creature, BOSS_THADDIUS)\n-        {\n-            // init is a bit tricky because thaddius shall track the life of both adds, but not if there was a wipe\n-            // and, in particular, if there was a crash after both adds were killed (should not respawn)\n-\n-            // Moreover, the adds may not yet be spawn. So just track down the status if mob is spawn\n-            // and each mob will send its status at reset (meaning that it is alive)\n-            checkFeugenAlive = false;\n-            if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))\n-                checkFeugenAlive = pFeugen->IsAlive();\n-\n-            checkStalaggAlive = false;\n-            if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))\n-                checkStalaggAlive = pStalagg->IsAlive();\n+        public:\n+            boss_thaddiusAI(Creature* creature) : BossAI(creature, BOSS_THADDIUS), _phase(PHASE_NOT_ENGAGED), stalaggAlive(true), feugenAlive(true), ballLightningEnabled(false), shockingEligibility(true) {\n+                if (instance->GetBossState(BOSS_THADDIUS) != DONE)\n+                {\n+                    if (!me->IsAlive()) // this can happen if the encounter despawned and then the server shut down before it could respawn\n+                        me->Respawn();\n+                    if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))\n+                        if (!stalagg->IsAlive())\n+                            stalagg->Respawn();\n+                    if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))\n+                        if (!feugen->IsAlive())\n+                            feugen->Respawn();\n+                    events.SetPhase(PHASE_NOT_ENGAGED);\n+\n+                    SetCombatMovement(false);\n+\n+                    BeginResetEncounter(); // initialize everything properly, and ensure that the coils are loaded by the time we initialize\n+                }\n+            }\n \n-            if (!checkFeugenAlive && !checkStalaggAlive)\n+            void KilledUnit(Unit* victim) override\n             {\n-                me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);\n-                me->SetReactState(REACT_AGGRESSIVE);\n+                if (victim->GetTypeId() == TYPEID_PLAYER)\n+                    Talk(SAY_SLAY);\n             }\n-            else\n+\n+            void Reset() override\n             {\n-                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);\n-                me->SetReactState(REACT_PASSIVE);\n+                if (_phase == PHASE_TRANSITION || _phase == PHASE_THADDIUS)\n+                    BeginResetEncounter();\n             }\n \n-            polaritySwitch = false;\n-            uiAddsTimer = 0;\n-        }\n-\n-        bool checkStalaggAlive;\n-        bool checkFeugenAlive;\n-        bool polaritySwitch;\n-        uint32 uiAddsTimer;\n-\n-        void KilledUnit(Unit* /*victim*/) override\n-        {\n-            if (!(rand32() % 5))\n-                Talk(SAY_SLAY);\n-        }\n-\n-        void JustDied(Unit* /*killer*/) override\n-        {\n-            _JustDied();\n-            Talk(SAY_DEATH);\n-        }\n-\n-        void DoAction(int32 action) override\n-        {\n-            switch (action)\n+            void JustDied(Unit* /*killer*/) override\n             {\n-                case ACTION_FEUGEN_RESET:\n-                    checkFeugenAlive = true;\n-                    break;\n-                case ACTION_FEUGEN_DIED:\n-                    checkFeugenAlive = false;\n-                    break;\n-                case ACTION_STALAGG_RESET:\n-                    checkStalaggAlive = true;\n-                    break;\n-                case ACTION_STALAGG_DIED:\n-                    checkStalaggAlive = false;\n-                    break;\n+                _JustDied();\n+                me->setActive(false);\n+                if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))\n+                    stalagg->setActive(false);\n+                if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))\n+                    feugen->setActive(false);\n+                Talk(SAY_DEATH);\n             }\n \n-            if (!checkFeugenAlive && !checkStalaggAlive)\n+            void DoAction(int32 action) override\n             {\n-                me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);\n-                // REACT_AGGRESSIVE only reset when he takes damage.\n-                DoZoneInCombat();\n+                switch (action)\n+                {\n+                    case ACTION_RESET_ENCOUNTER_TIMER:\n+                        if (_phase == PHASE_RESETTING)\n+                            ResetEncounter();\n+                        break;\n+                    case ACTION_FEUGEN_RESET:\n+                    case ACTION_STALAGG_RESET:\n+                        if (_phase != PHASE_NOT_ENGAGED && _phase != PHASE_RESETTING)\n+                            BeginResetEncounter();\n+                        break;\n+                    case ACTION_FEUGEN_AGGRO:\n+                    case ACTION_STALAGG_AGGRO:\n+                        if (_phase == PHASE_RESETTING)\n+                            return BeginResetEncounter();\n+                        if (_phase != PHASE_NOT_ENGAGED)\n+                            return;\n+                        _phase = PHASE_PETS;\n+                        events.SetPhase(PHASE_PETS);\n+\n+                        shockingEligibility = true;\n+                        \n+                        if (!instance->CheckRequiredBosses(BOSS_THADDIUS))\n+                            return BeginResetEncounter();\n+                        instance->SetBossState(BOSS_THADDIUS, IN_PROGRESS);\n+\n+                        me->setActive(true);\n+                        if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))\n+                            stalagg->setActive(true);\n+                        if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))\n+                            feugen->setActive(true);\n+                        break;\n+                    case ACTION_FEUGEN_DIED:\n+                        if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))\n+                            if (feugen->AI())\n+                                feugen->AI()->DoAction(ACTION_FEUGEN_REVIVING_FX);\n+                        feugenAlive = false;\n+                        if (stalaggAlive)\n+                            events.ScheduleEvent(EVENT_REVIVE_FEUGEN, 5 * IN_MILLISECONDS, 0, PHASE_PETS);\n+                        else\n+                            Transition();\n+\n+                        break;\n+                    case ACTION_STALAGG_DIED:\n+                        if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))\n+                            if (stalagg->AI())\n+                                stalagg->AI()->DoAction(ACTION_STALAGG_REVIVING_FX);\n+                        stalaggAlive = false;\n+                        if (feugenAlive)\n+                            events.ScheduleEvent(EVENT_REVIVE_STALAGG, 5 * IN_MILLISECONDS, 0, PHASE_PETS);\n+                        else\n+                            Transition();\n+\n+                        break;\n+\n+                    case ACTION_POLARITY_CROSSED:\n+                        shockingEligibility = false;\n+                        break;\n+                }\n             }\n-            else\n+\n+            uint32 GetData(uint32 id) const override\n             {\n-                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);\n-                me->SetReactState(REACT_PASSIVE);\n+                return (uint32)(id == DATA_POLARITY_CROSSED && shockingEligibility);\n             }\n-        }\n \n-        void EnterCombat(Unit* /*who*/) override\n-        {\n-            _EnterCombat();\n-            Talk(SAY_AGGRO);\n-            events.ScheduleEvent(EVENT_SHIFT, 30000);\n-            events.ScheduleEvent(EVENT_CHAIN, urand(10000, 20000));\n-            events.ScheduleEvent(EVENT_BERSERK, 360000);\n-        }\n+            void Transition() // initiate transition between pet phase and thaddius phase\n+            {\n+                _phase = PHASE_TRANSITION;\n+                events.SetPhase(PHASE_TRANSITION);\n \n-        void DamageTaken(Unit* /*pDoneBy*/, uint32 & /*uiDamage*/) override\n-        {\n-            me->SetReactState(REACT_AGGRESSIVE);\n-        }\n+                me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);\n \n-        void SetData(uint32 id, uint32 data) override\n-        {\n-            if (id == DATA_POLARITY_SWITCH)\n-                polaritySwitch = data ? true : false;\n-        }\n+                events.ScheduleEvent(EVENT_TRANSITION_1, 10 * IN_MILLISECONDS, 0, PHASE_TRANSITION);\n+                events.ScheduleEvent(EVENT_TRANSITION_2, 12 * IN_MILLISECONDS, 0, PHASE_TRANSITION);\n+                events.ScheduleEvent(EVENT_TRANSITION_3, 15 * IN_MILLISECONDS, 0, PHASE_TRANSITION);\n+            }\n \n-        uint32 GetData(uint32 id) const override\n-        {\n-            if (id != DATA_POLARITY_SWITCH)\n-                return 0;\n+            // @todo remove debug\n+            // debug: point to begin reset, laugh to force (improper) reset\n+            /*void ReceiveEmote(Player* player, uint32 emoteId) override\n+            {\n+                if (emoteId == 72)\n+                    BeginResetEncounter();\n+                else if (emoteId == 60)\n+                    ResetEncounter();\n+            }*/\n \n-            return uint32(polaritySwitch);\n-        }\n+            void BeginResetEncounter()\n+            {\n+                if (!me->IsAlive())\n+                    return;\n \n-        void UpdateAI(uint32 diff) override\n-        {\n-            if (checkFeugenAlive && checkStalaggAlive)\n-                uiAddsTimer = 0;\n+                if (_phase != PHASE_RESETTING)\n+                    instance->ProcessEvent(me, EVENT_THADDIUS_BEGIN_RESET);\n+\n+                instance->SetBossState(BOSS_THADDIUS, NOT_STARTED);\n+\n+                // remove polarity shift debuffs on reset\n+                Map::PlayerList const& players = me->GetMap()->GetPlayers();\n+                for (Map::PlayerList::const_iterator it = players.begin(); it != players.end(); ++it)\n+                    if (Player* player = it->GetSource())\n+                        if (player->IsAlive())\n+                        {\n+                            player->RemoveAura(SPELL_POSITIVE_CHARGE_APPLY);\n+                            player->RemoveAura(SPELL_NEGATIVE_CHARGE_APPLY);\n+                        }\n+\n+                me->DespawnOrUnsummon();\n+\n+                me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);\n+                _phase = PHASE_RESETTING;\n+                events.SetPhase(PHASE_RESETTING);\n+                if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))\n+                    if (feugen->AI())\n+                        feugen->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER);\n+                if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))\n+                    if (stalagg->AI())\n+                        stalagg->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER);\n+\n+                me->setActive(false);\n+            }\n \n-            if (checkStalaggAlive != checkFeugenAlive)\n+            void ResetEncounter()\n             {\n-                uiAddsTimer += diff;\n-                if (uiAddsTimer > 5000)\n-                {\n-                    if (!checkStalaggAlive)\n-                    {\n-                        if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))\n-                            pStalagg->Respawn();\n-                    }\n-                    else\n-                    {\n-                        if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))\n-                            pFeugen->Respawn();\n-                    }\n-                }\n+                events.SetPhase(PHASE_NOT_ENGAGED);\n+                _phase = PHASE_NOT_ENGAGED;\n+                feugenAlive = true;\n+                stalaggAlive = true;\n+                me->Respawn(true);\n+                me->CastSpell(me, SPELL_THADDIUS_INACTIVE_VISUAL);\n+\n+                if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))\n+                    if (feugen->AI())\n+                        feugen->AI()->DoAction(ACTION_RESET_ENCOUNTER);\n+                if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))\n+                    if (stalagg->AI())\n+                        stalagg->AI()->DoAction(ACTION_RESET_ENCOUNTER);\n+                _Reset();\n             }\n \n-            if (!UpdateVictim())\n-                return;\n-\n-            events.Update(diff);\n-\n-            if (me->HasUnitState(UNIT_STATE_CASTING))\n-                return;\n-\n-            while (uint32 eventId = events.ExecuteEvent())\n+            void UpdateAI(uint32 diff) override\n             {\n-                switch (eventId)\n+                switch (_phase)\n                 {\n-                    case EVENT_SHIFT:\n-                        DoCastAOE(SPELL_POLARITY_SHIFT);\n-                        events.ScheduleEvent(EVENT_SHIFT, 30000);\n-                        return;\n-                    case EVENT_CHAIN:\n-                        DoCastVictim(SPELL_CHAIN_LIGHTNING);\n-                        events.ScheduleEvent(EVENT_CHAIN, urand(10000, 20000));\n-                        return;\n-                    case EVENT_BERSERK:\n-                        DoCast(me, SPELL_BERSERK);\n+                    case PHASE_NOT_ENGAGED:\n                         return;\n+                    case PHASE_THADDIUS:\n+                        if (!UpdateVictim())\n+                            return;\n+                    default: // -Wall is king\n+                        break;\n                 }\n+\n+                events.Update(diff);\n+                while (uint32 eventId = events.ExecuteEvent())","path":"src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp","position":503,"original_position":503,"commit_id":"b68f56b9e516035ee9265869a8fc280ef72434de","original_commit_id":"b68f56b9e516035ee9265869a8fc280ef72434de","user":{"login":"ccrs","id":4329612,"avatar_url":"https://avatars.githubusercontent.com/u/4329612?v=3","gravatar_id":"","url":"https://api.github.com/users/ccrs","html_url":"https://github.com/ccrs","followers_url":"https://api.github.com/users/ccrs/followers","following_url":"https://api.github.com/users/ccrs/following{/other_user}","gists_url":"https://api.github.com/users/ccrs/gists{/gist_id}","starred_url":"https://api.github.com/users/ccrs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ccrs/subscriptions","organizations_url":"https://api.github.com/users/ccrs/orgs","repos_url":"https://api.github.com/users/ccrs/repos","events_url":"https://api.github.com/users/ccrs/events{/privacy}","received_events_url":"https://api.github.com/users/ccrs/received_events","type":"User","site_admin":false},"body":"UNIT_STATE_CASTING check?","created_at":"2015-09-16T16:44:16Z","updated_at":"2015-09-16T16:44:16Z","html_url":"https://github.com/TrinityCore/TrinityCore/pull/15523#discussion_r39653948","pull_request_url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/15523","_links":{"self":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/comments/39653948"},"html":{"href":"https://github.com/TrinityCore/TrinityCore/pull/15523#discussion_r39653948"},"pull_request":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/15523"}}},"pull_request":{"url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/15523","id":45124225,"html_url":"https://github.com/TrinityCore/TrinityCore/pull/15523","diff_url":"https://github.com/TrinityCore/TrinityCore/pull/15523.diff","patch_url":"https://github.com/TrinityCore/TrinityCore/pull/15523.patch","issue_url":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/15523","number":15523,"state":"open","locked":false,"title":"Creature/BossAI/Thaddius: Complete rewrite [WIP]","user":{"login":"Treeston","id":14020072,"avatar_url":"https://avatars.githubusercontent.com/u/14020072?v=3","gravatar_id":"","url":"https://api.github.com/users/Treeston","html_url":"https://github.com/Treeston","followers_url":"https://api.github.com/users/Treeston/followers","following_url":"https://api.github.com/users/Treeston/following{/other_user}","gists_url":"https://api.github.com/users/Treeston/gists{/gist_id}","starred_url":"https://api.github.com/users/Treeston/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Treeston/subscriptions","organizations_url":"https://api.github.com/users/Treeston/orgs","repos_url":"https://api.github.com/users/Treeston/repos","events_url":"https://api.github.com/users/Treeston/events{/privacy}","received_events_url":"https://api.github.com/users/Treeston/received_events","type":"User","site_admin":false},"body":"Full rewrite of the Thaddius encounter. Stuff fixed, among others:\r\n- Encounter properly resets if the raid wipes at any point during the encounter (fixes and closes #6888)\r\n- Polarity Shift works properly (fixes and closes #10126)\r\n- Visual spells used properly\r\n- Thaddius is now immobile and will no longer chase the tank\r\n- Tesla Coil leashes on Feugen/Stalagg work properly (cast chain lightning on raid if dragged off the platform)\r\n- Achievement criteria for Shocking! fixed to trigger properly, and only on appropriate difficulty (fixes and closes #4751)\r\n\r\nPS: My first full rewrite of a boss AI. Some stuff may be done incorrectly. Please tell me how to do it better. Thanks.","created_at":"2015-09-16T02:15:15Z","updated_at":"2015-09-16T16:44:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7054373f3c520396c76da1f2bff038e572e7db73","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/15523/commits","review_comments_url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/15523/comments","review_comment_url":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/comments{/number}","comments_url":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/15523/comments","statuses_url":"https://api.github.com/repos/TrinityCore/TrinityCore/statuses/b68f56b9e516035ee9265869a8fc280ef72434de","head":{"label":"Treeston:3.3.5-thaddius","ref":"3.3.5-thaddius","sha":"b68f56b9e516035ee9265869a8fc280ef72434de","user":{"login":"Treeston","id":14020072,"avatar_url":"https://avatars.githubusercontent.com/u/14020072?v=3","gravatar_id":"","url":"https://api.github.com/users/Treeston","html_url":"https://github.com/Treeston","followers_url":"https://api.github.com/users/Treeston/followers","following_url":"https://api.github.com/users/Treeston/following{/other_user}","gists_url":"https://api.github.com/users/Treeston/gists{/gist_id}","starred_url":"https://api.github.com/users/Treeston/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Treeston/subscriptions","organizations_url":"https://api.github.com/users/Treeston/orgs","repos_url":"https://api.github.com/users/Treeston/repos","events_url":"https://api.github.com/users/Treeston/events{/privacy}","received_events_url":"https://api.github.com/users/Treeston/received_events","type":"User","site_admin":false},"repo":{"id":42188757,"name":"TrinityCore","full_name":"Treeston/TrinityCore","owner":{"login":"Treeston","id":14020072,"avatar_url":"https://avatars.githubusercontent.com/u/14020072?v=3","gravatar_id":"","url":"https://api.github.com/users/Treeston","html_url":"https://github.com/Treeston","followers_url":"https://api.github.com/users/Treeston/followers","following_url":"https://api.github.com/users/Treeston/following{/other_user}","gists_url":"https://api.github.com/users/Treeston/gists{/gist_id}","starred_url":"https://api.github.com/users/Treeston/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Treeston/subscriptions","organizations_url":"https://api.github.com/users/Treeston/orgs","repos_url":"https://api.github.com/users/Treeston/repos","events_url":"https://api.github.com/users/Treeston/events{/privacy}","received_events_url":"https://api.github.com/users/Treeston/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Treeston/TrinityCore","description":"TrinityCore Open Source MMO Framework","fork":true,"url":"https://api.github.com/repos/Treeston/TrinityCore","forks_url":"https://api.github.com/repos/Treeston/TrinityCore/forks","keys_url":"https://api.github.com/repos/Treeston/TrinityCore/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Treeston/TrinityCore/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Treeston/TrinityCore/teams","hooks_url":"https://api.github.com/repos/Treeston/TrinityCore/hooks","issue_events_url":"https://api.github.com/repos/Treeston/TrinityCore/issues/events{/number}","events_url":"https://api.github.com/repos/Treeston/TrinityCore/events","assignees_url":"https://api.github.com/repos/Treeston/TrinityCore/assignees{/user}","branches_url":"https://api.github.com/repos/Treeston/TrinityCore/branches{/branch}","tags_url":"https://api.github.com/repos/Treeston/TrinityCore/tags","blobs_url":"https://api.github.com/repos/Treeston/TrinityCore/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Treeston/TrinityCore/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Treeston/TrinityCore/git/refs{/sha}","trees_url":"https://api.github.com/repos/Treeston/TrinityCore/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Treeston/TrinityCore/statuses/{sha}","languages_url":"https://api.github.com/repos/Treeston/TrinityCore/languages","stargazers_url":"https://api.github.com/repos/Treeston/TrinityCore/stargazers","contributors_url":"https://api.github.com/repos/Treeston/TrinityCore/contributors","subscribers_url":"https://api.github.com/repos/Treeston/TrinityCore/subscribers","subscription_url":"https://api.github.com/repos/Treeston/TrinityCore/subscription","commits_url":"https://api.github.com/repos/Treeston/TrinityCore/commits{/sha}","git_commits_url":"https://api.github.com/repos/Treeston/TrinityCore/git/commits{/sha}","comments_url":"https://api.github.com/repos/Treeston/TrinityCore/comments{/number}","issue_comment_url":"https://api.github.com/repos/Treeston/TrinityCore/issues/comments{/number}","contents_url":"https://api.github.com/repos/Treeston/TrinityCore/contents/{+path}","compare_url":"https://api.github.com/repos/Treeston/TrinityCore/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Treeston/TrinityCore/merges","archive_url":"https://api.github.com/repos/Treeston/TrinityCore/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Treeston/TrinityCore/downloads","issues_url":"https://api.github.com/repos/Treeston/TrinityCore/issues{/number}","pulls_url":"https://api.github.com/repos/Treeston/TrinityCore/pulls{/number}","milestones_url":"https://api.github.com/repos/Treeston/TrinityCore/milestones{/number}","notifications_url":"https://api.github.com/repos/Treeston/TrinityCore/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Treeston/TrinityCore/labels{/name}","releases_url":"https://api.github.com/repos/Treeston/TrinityCore/releases{/id}","created_at":"2015-09-09T15:54:20Z","updated_at":"2015-09-09T15:54:34Z","pushed_at":"2015-09-16T15:26:26Z","git_url":"git://github.com/Treeston/TrinityCore.git","ssh_url":"git@github.com:Treeston/TrinityCore.git","clone_url":"https://github.com/Treeston/TrinityCore.git","svn_url":"https://github.com/Treeston/TrinityCore","homepage":"http://www.trinitycore.org","size":374517,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"3.3.5"}},"base":{"label":"TrinityCore:3.3.5","ref":"3.3.5","sha":"df55a7139929dac7179f1cbdc9f6d143d48d85d1","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}","created_at":"2010-12-28T23:40:07Z","updated_at":"2015-09-13T08:01:59Z","pushed_at":"2015-09-16T15:26:29Z","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":862139,"stargazers_count":2953,"watchers_count":2953,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3115,"mirror_url":null,"open_issues_count":1163,"forks":3115,"open_issues":1163,"watchers":2953,"default_branch":"6.x"}},"_links":{"self":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/15523"},"html":{"href":"https://github.com/TrinityCore/TrinityCore/pull/15523"},"issue":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/15523"},"comments":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/issues/15523/comments"},"review_comments":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/15523/comments"},"review_comment":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/pulls/15523/commits"},"statuses":{"href":"https://api.github.com/repos/TrinityCore/TrinityCore/statuses/b68f56b9e516035ee9265869a8fc280ef72434de"}}}}