<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>sql/updates/8731_01_mangos_creature_template.sql</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -787,13 +787,13 @@ Below is the list of current Event Flags that EventAI can handle. Event flags ar
 
 (bit#   Decimal   Internal Name                  Discription)
 0       1         EFLAG_REPEATABLE               Event repeats (Does not repeat if this flag is not set)
-1       2         EFLAG_NORMAL                   Event occurs in Normal instance difficulty (will not occur in Normal if not set)
-2       4         EFLAG_HEROIC                   Event occurs in Heroic instance difficulty (will not occur in Heroic if not set)
-3       8
-4       16
+1       2         EFLAG_DIFFICULTY_0             Event occurs in instance difficulty 0 (will not occur if not set)
+2       4         EFLAG_DIFFICULTY_1             Event occurs in instance difficulty 1 (will not occur if not set)
+3       8         EFLAG_DIFFICULTY_2             Event occurs in instance difficulty 2 (will not occur if not set)
+4       16        EFLAG_DIFFICULTY_3             Event occurs in instance difficulty 3 (will not occur if not set)
 5       32
 6       64
-7       128        EFLAG_DEBUG_ONLY              Prevents events from occuring on Release builds. Useful for testing new features.
+7       128       EFLAG_DEBUG_ONLY              Prevents events from occuring on Release builds. Useful for testing new features.
 
 NOTE: You can add the numbers in the decimal column to combine flags.
 </diff>
      <filename>doc/EventAI.txt</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
   `version` varchar(120) default NULL,
   `creature_ai_version` varchar(120) default NULL,
   `cache_id` int(10) default '0',
-  `required_8726_01_mangos_spell_proc_event` bit(1) default NULL
+  `required_8731_01_mangos_creature_template` bit(1) default NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
 
 --
@@ -1061,7 +1061,7 @@ UNLOCK TABLES;
 DROP TABLE IF EXISTS `creature_template`;
 CREATE TABLE `creature_template` (
   `entry` mediumint(8) unsigned NOT NULL default '0',
-  `heroic_entry` mediumint(8) unsigned NOT NULL default '0',
+  `difficulty_entry_1` mediumint(8) unsigned NOT NULL default '0',
   `KillCredit1` int(11) unsigned NOT NULL default '0',
   `KillCredit2` int(11) unsigned NOT NULL default '0',
   `modelid_A` mediumint(8) unsigned NOT NULL default '0',</diff>
      <filename>sql/mangos.sql</filename>
    </modified>
    <modified>
      <diff>@@ -144,6 +144,7 @@ pkgdata_DATA = \
 	8723_01_mangos_achievement_criteria_requirement.sql \
 	8726_01_mangos_spell_proc_event.sql \
 	8728_01_realmd_account.sql \
+	8731_01_mangos_creature_template.sql \
 	README
 
 ## Additional files to include when running 'make dist'
@@ -268,4 +269,5 @@ EXTRA_DIST = \
 	8723_01_mangos_achievement_criteria_requirement.sql \
 	8726_01_mangos_spell_proc_event.sql \
 	8728_01_realmd_account.sql \
+	8731_01_mangos_creature_template.sql \
 	README</diff>
      <filename>sql/updates/Makefile.am</filename>
    </modified>
    <modified>
      <diff>@@ -188,18 +188,19 @@ bool Creature::InitEntry(uint32 Entry, uint32 team, const CreatureData *data )
         return false;
     }
 
-    // get heroic mode entry
+    // get difficulty 1 mode entry
     uint32 actualEntry = Entry;
     CreatureInfo const *cinfo = normalInfo;
-    if(normalInfo-&gt;HeroicEntry)
+    if(normalInfo-&gt;DifficultyEntry1)
     {
         //we already have valid Map pointer for current creature!
-        if(GetMap()-&gt;IsHeroic())
+        //FIXME: spawn modes 2-3 must have own case DifficultyEntryN
+        if(GetMap()-&gt;GetSpawnMode() &gt; 0)
         {
-            cinfo = objmgr.GetCreatureTemplate(normalInfo-&gt;HeroicEntry);
+            cinfo = objmgr.GetCreatureTemplate(normalInfo-&gt;DifficultyEntry1);
             if(!cinfo)
             {
-                sLog.outErrorDb(&quot;Creature::UpdateEntry creature heroic entry %u does not exist.&quot;, actualEntry);
+                sLog.outErrorDb(&quot;Creature::UpdateEntry creature difficulty 1 entry %u does not exist.&quot;, actualEntry);
                 return false;
             }
         }
@@ -1928,7 +1929,7 @@ CreatureDataAddon const* Creature::GetCreatureAddon() const
             return addon;
     }
 
-    // dependent from heroic mode entry
+    // dependent from difficulty mode entry
     return ObjectMgr::GetCreatureTemplateAddon(GetCreatureInfo()-&gt;Entry);
 }
 </diff>
      <filename>src/game/Creature.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -158,7 +158,7 @@ enum CreatureFlagsExtra
 struct CreatureInfo
 {
     uint32  Entry;
-    uint32  HeroicEntry;
+    uint32  DifficultyEntry1;
     uint32  KillCredit[MAX_KILL_CREDIT];
     uint32  DisplayID_A[2];
     uint32  DisplayID_H[2];
@@ -742,7 +742,7 @@ class MANGOS_DLL_SPEC Creature : public Unit
         float CombatStartZ;
     private:
         GridReference&lt;Creature&gt; m_gridRef;
-        CreatureInfo const* m_creatureInfo;                 // in heroic mode can different from ObjMgr::GetCreatureTemplate(GetEntry())
+        CreatureInfo const* m_creatureInfo;                 // in difficulty mode &gt; 0 can different from ObjMgr::GetCreatureTemplate(GetEntry())
         bool m_isActiveObject;
         MonsterMovementFlags m_monsterMoveFlags;
 };</diff>
      <filename>src/game/Creature.h</filename>
    </modified>
    <modified>
      <diff>@@ -69,8 +69,7 @@ CreatureEventAI::CreatureEventAI(Creature *c ) : CreatureAI(c)
             #endif
             if (m_creature-&gt;GetMap()-&gt;IsDungeon())
             {
-                if( (m_creature-&gt;GetMap()-&gt;IsHeroic() &amp;&amp; (*i).event_flags &amp; EFLAG_HEROIC) ||
-                    (!m_creature-&gt;GetMap()-&gt;IsHeroic() &amp;&amp; (*i).event_flags &amp; EFLAG_NORMAL))
+                if ((1 &lt;&lt; (m_creature-&gt;GetMap()-&gt;GetSpawnMode()+1)) &amp; (*i).event_flags)
                 {
                     //event flagged for instance mode
                     CreatureEventAIList.push_back(CreatureEventAIHolder(*i));</diff>
      <filename>src/game/CreatureEventAI.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -150,13 +150,15 @@ enum CastFlags
 enum EventFlags
 {
     EFLAG_REPEATABLE            = 0x01,                     //Event repeats
-    EFLAG_NORMAL                = 0x02,                     //Event only occurs in Normal instance difficulty
-    EFLAG_HEROIC                = 0x04,                     //Event only occurs in Heroic instance difficulty
-    EFLAG_RESERVED_3            = 0x08,
-    EFLAG_RESERVED_4            = 0x10,
+    EFLAG_DIFFICULTY_0          = 0x02,                     //Event only occurs in instance difficulty 0
+    EFLAG_DIFFICULTY_1          = 0x04,                     //Event only occurs in instance difficulty 1
+    EFLAG_DIFFICULTY_2          = 0x08,                     //Event only occurs in instance difficulty 2
+    EFLAG_DIFFICULTY_3          = 0x10,                     //Event only occurs in instance difficulty 3
     EFLAG_RESERVED_5            = 0x20,
     EFLAG_RESERVED_6            = 0x40,
     EFLAG_DEBUG_ONLY            = 0x80,                     //Event only occurs in debug build
+
+    EFLAG_DIFFICULTY_ALL        = (EFLAG_DIFFICULTY_0|EFLAG_DIFFICULTY_1|EFLAG_DIFFICULTY_2|EFLAG_DIFFICULTY_3)
 };
 
 enum SpawnedEventMode</diff>
      <filename>src/game/CreatureEventAI.h</filename>
    </modified>
    <modified>
      <diff>@@ -716,14 +716,14 @@ void CreatureEventAIMgr::LoadCreatureEventAI_Scripts()
                             sLog.outErrorDb(&quot;CreatureEventAI:  Event %u Action %u uses incorrect Target type&quot;, i, j+1);
                         break;
                     case ACTION_T_SET_INST_DATA:
-                        if (!(temp.event_flags &amp; EFLAG_NORMAL) &amp;&amp; !(temp.event_flags &amp; EFLAG_HEROIC))
-                            sLog.outErrorDb(&quot;CreatureEventAI:  Event %u Action %u. Cannot set instance data without event flags (normal/heroic).&quot;, i, j+1);
+                        if (!(temp.event_flags &amp; EFLAG_DIFFICULTY_ALL))
+                            sLog.outErrorDb(&quot;CreatureEventAI:  Event %u Action %u. Cannot set instance data without difficulty event flags.&quot;, i, j+1);
                         if (action.set_inst_data.value &gt; 4/*SPECIAL*/)
                             sLog.outErrorDb(&quot;CreatureEventAI:  Event %u Action %u attempts to set instance data above encounter state 4. Custom case?&quot;, i, j+1);
                         break;
                     case ACTION_T_SET_INST_DATA64:
-                        if (!(temp.event_flags &amp; EFLAG_NORMAL) &amp;&amp; !(temp.event_flags &amp; EFLAG_HEROIC))
-                            sLog.outErrorDb(&quot;CreatureEventAI:  Event %u Action %u. Cannot set instance data without event flags (normal/heroic).&quot;, i, j+1);
+                        if (!(temp.event_flags &amp; EFLAG_DIFFICULTY_ALL))
+                            sLog.outErrorDb(&quot;CreatureEventAI:  Event %u Action %u. Cannot set instance data without difficulty event flags.&quot;, i, j+1);
                         if (action.set_inst_data64.target &gt;= TARGET_T_END)
                             sLog.outErrorDb(&quot;CreatureEventAI:  Event %u Action %u uses incorrect Target type&quot;, i, j+1);
                         break;</diff>
      <filename>src/game/CreatureEventAIMgr.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -5910,9 +5910,9 @@ bool ChatHandler::HandleInstanceListBindsCommand(const char* /*args*/)
             std::string timeleft = GetTimeString(save-&gt;GetResetTime() - time(NULL));
             if (const MapEntry* entry = sMapStore.LookupEntry(itr-&gt;first))
             {
-                PSendSysMessage(&quot;map: %d (%s) inst: %d perm: %s diff: %s canReset: %s TTR: %s&quot;,
+                PSendSysMessage(&quot;map: %d (%s) inst: %d perm: %s diff: %d canReset: %s TTR: %s&quot;,
                     itr-&gt;first, entry-&gt;name[m_session-&gt;GetSessionDbcLocale()], save-&gt;GetInstanceId(), itr-&gt;second.perm ? &quot;yes&quot; : &quot;no&quot;,
-                    save-&gt;GetDifficulty() == DUNGEON_DIFFICULTY_NORMAL ? &quot;normal&quot; : &quot;heroic&quot;, save-&gt;CanReset() ? &quot;yes&quot; : &quot;no&quot;, timeleft.c_str());
+                    save-&gt;GetDifficulty(), save-&gt;CanReset() ? &quot;yes&quot; : &quot;no&quot;, timeleft.c_str());
             }
             else
                 PSendSysMessage(&quot;bound for a nonexistant map %u&quot;, itr-&gt;first);
@@ -5933,9 +5933,9 @@ bool ChatHandler::HandleInstanceListBindsCommand(const char* /*args*/)
                 std::string timeleft = GetTimeString(save-&gt;GetResetTime() - time(NULL));
                 if (const MapEntry* entry = sMapStore.LookupEntry(itr-&gt;first))
                 {
-                    PSendSysMessage(&quot;map: %d (%s) inst: %d perm: %s diff: %s canReset: %s TTR: %s&quot;,
+                    PSendSysMessage(&quot;map: %d (%s) inst: %d perm: %s diff: %d canReset: %s TTR: %s&quot;,
                         itr-&gt;first, entry-&gt;name[m_session-&gt;GetSessionDbcLocale()], save-&gt;GetInstanceId(), itr-&gt;second.perm ? &quot;yes&quot; : &quot;no&quot;,
-                        save-&gt;GetDifficulty() == DUNGEON_DIFFICULTY_NORMAL ? &quot;normal&quot; : &quot;heroic&quot;, save-&gt;CanReset() ? &quot;yes&quot; : &quot;no&quot;, timeleft.c_str());
+                        save-&gt;GetDifficulty(), save-&gt;CanReset() ? &quot;yes&quot; : &quot;no&quot;, timeleft.c_str());
                 }
                 else
                     PSendSysMessage(&quot;bound for a nonexistant map %u&quot;, itr-&gt;first);
@@ -5986,9 +5986,9 @@ bool ChatHandler::HandleInstanceUnbindCommand(const char* args)
 
                 if (const MapEntry* entry = sMapStore.LookupEntry(itr-&gt;first))
                 {
-                    PSendSysMessage(&quot;unbinding map: %d (%s) inst: %d perm: %s diff: %s canReset: %s TTR: %s&quot;,
+                    PSendSysMessage(&quot;unbinding map: %d (%s) inst: %d perm: %s diff: %d canReset: %s TTR: %s&quot;,
                         itr-&gt;first, entry-&gt;name[m_session-&gt;GetSessionDbcLocale()], save-&gt;GetInstanceId(), itr-&gt;second.perm ? &quot;yes&quot; : &quot;no&quot;,
-                        save-&gt;GetDifficulty() == DUNGEON_DIFFICULTY_NORMAL ? &quot;normal&quot; : &quot;heroic&quot;, save-&gt;CanReset() ? &quot;yes&quot; : &quot;no&quot;, timeleft.c_str());
+                        save-&gt;GetDifficulty(), save-&gt;CanReset() ? &quot;yes&quot; : &quot;no&quot;, timeleft.c_str());
                 }
                 else
                     PSendSysMessage(&quot;bound for a nonexistant map %u&quot;, itr-&gt;first);</diff>
      <filename>src/game/Level3.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -184,13 +184,13 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player)
         MapDifficulty const* mapDiff = GetMapDifficultyData(entry-&gt;MapID,player-&gt;GetDifficulty(entry-&gt;map_type == MAP_RAID));
         if (!mapDiff)
         {
-            bool isHeroicTargetMap = entry-&gt;map_type == MAP_RAID
-                ? (player-&gt;GetRaidDifficulty()    &gt;= RAID_DIFFICULTY_10MAN_HEROIC)
-                : (player-&gt;GetDungeonDifficulty() &gt;= DUNGEON_DIFFICULTY_HEROIC);
+            bool isNormalTargetMap = entry-&gt;map_type == MAP_RAID
+                ? (player-&gt;GetRaidDifficulty()    == RAID_DIFFICULTY_10MAN_NORMAL)
+                : (player-&gt;GetDungeonDifficulty() == DUNGEON_DIFFICULTY_NORMAL);
 
             //Send aborted message
             // FIX ME: what about absent normal/heroic mode with specific players limit...
-            player-&gt;SendTransferAborted(mapid, TRANSFER_ABORT_DIFFICULTY, isHeroicTargetMap ? DUNGEON_DIFFICULTY_HEROIC : DUNGEON_DIFFICULTY_NORMAL);
+            player-&gt;SendTransferAborted(mapid, TRANSFER_ABORT_DIFFICULTY, isNormalTargetMap ? DUNGEON_DIFFICULTY_NORMAL : DUNGEON_DIFFICULTY_HEROIC);
             return false;
         }
 </diff>
      <filename>src/game/MapManager.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -812,12 +812,12 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket &amp; recv_data)
         if(!mapEntry)
             return;
 
-        bool isHeroicTargetMap = mapEntry-&gt;IsRaid()
-            ? (GetPlayer()-&gt;GetRaidDifficulty()    &gt;= RAID_DIFFICULTY_10MAN_HEROIC)
-            : (GetPlayer()-&gt;GetDungeonDifficulty() &gt;= DUNGEON_DIFFICULTY_HEROIC);
+        bool isNormalTargetMap = mapEntry-&gt;IsRaid()
+            ? (GetPlayer()-&gt;GetRaidDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
+            : (GetPlayer()-&gt;GetDungeonDifficulty() == DUNGEON_DIFFICULTY_NORMAL);
 
         uint32 missingKey = 0;
-        if(isHeroicTargetMap)
+        if (!isNormalTargetMap)
         {
             if(at-&gt;heroicKey)
             {
@@ -830,7 +830,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket &amp; recv_data)
         }
 
         uint32 missingQuest = 0;
-        if(isHeroicTargetMap)
+        if (!isNormalTargetMap)
         {
             if (at-&gt;requiredQuestHeroic &amp;&amp; !GetPlayer()-&gt;GetQuestRewardStatus(at-&gt;requiredQuestHeroic))
                 missingQuest = at-&gt;requiredQuestHeroic;
@@ -847,7 +847,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket &amp; recv_data)
             if(missingItem)
                 SendAreaTriggerMessage(GetMangosString(LANG_LEVEL_MINREQUIRED_AND_ITEM), at-&gt;requiredLevel, objmgr.GetItemPrototype(missingItem)-&gt;Name1);
             else if(missingKey)
-                GetPlayer()-&gt;SendTransferAborted(at-&gt;target_mapId, TRANSFER_ABORT_DIFFICULTY, isHeroicTargetMap ? DUNGEON_DIFFICULTY_HEROIC : DUNGEON_DIFFICULTY_NORMAL);
+                GetPlayer()-&gt;SendTransferAborted(at-&gt;target_mapId, TRANSFER_ABORT_DIFFICULTY, isNormalTargetMap ? DUNGEON_DIFFICULTY_NORMAL : DUNGEON_DIFFICULTY_HEROIC);
             else if(missingQuest)
                 SendAreaTriggerMessage(at-&gt;requiredFailedText.c_str());
             else if(missingLevel)</diff>
      <filename>src/game/MiscHandler.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -473,8 +473,8 @@ void ObjectMgr::LoadCreatureTemplates()
     sLog.outString( &quot;&gt;&gt; Loaded %u creature definitions&quot;, sCreatureStorage.RecordCount );
     sLog.outString();
 
-    std::set&lt;uint32&gt; heroicEntries;                         // already loaded heroic value in creatures
-    std::set&lt;uint32&gt; hasHeroicEntries;                      // already loaded creatures with heroic entry values
+    std::set&lt;uint32&gt; difficultyEntries1;                    // already loaded difficulty 1 value in creatures
+    std::set&lt;uint32&gt; hasDifficultyEntries1;                 // already loaded creatures with difficulty 1  values
 
     // check data correctness
     for(uint32 i = 1; i &lt; sCreatureStorage.MaxEntry; ++i)
@@ -483,83 +483,83 @@ void ObjectMgr::LoadCreatureTemplates()
         if (!cInfo)
             continue;
 
-        if (cInfo-&gt;HeroicEntry)
+        if (cInfo-&gt;DifficultyEntry1)
         {
-            CreatureInfo const* heroicInfo = GetCreatureTemplate(cInfo-&gt;HeroicEntry);
-            if (!heroicInfo)
+            CreatureInfo const* difficultyInfo = GetCreatureTemplate(cInfo-&gt;DifficultyEntry1);
+            if (!difficultyInfo)
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u) have `heroic_entry`=%u but creature entry %u not exist.&quot;, i, cInfo-&gt;HeroicEntry, cInfo-&gt;HeroicEntry);
+                sLog.outErrorDb(&quot;Creature (Entry: %u) have `difficulty_entry_1`=%u but creature entry %u not exist.&quot;, i, cInfo-&gt;DifficultyEntry1, cInfo-&gt;DifficultyEntry1);
                 continue;
             }
 
-            if (heroicEntries.find(i)!=heroicEntries.end())
+            if (difficultyEntries1.find(i)!=difficultyEntries1.end())
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u) listed as heroic but have value in `heroic_entry`.&quot;,i);
+                sLog.outErrorDb(&quot;Creature (Entry: %u) listed as difficulty 1 but have value in `difficulty_entry_1`.&quot;,i);
                 continue;
             }
 
-            if (heroicEntries.find(cInfo-&gt;HeroicEntry)!=heroicEntries.end())
+            if (difficultyEntries1.find(cInfo-&gt;DifficultyEntry1)!=difficultyEntries1.end())
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u) already listed as heroic for another entry.&quot;,cInfo-&gt;HeroicEntry);
+                sLog.outErrorDb(&quot;Creature (Entry: %u) already listed as difficulty 1 for another entry.&quot;,cInfo-&gt;DifficultyEntry1);
                 continue;
             }
 
-            if (hasHeroicEntries.find(cInfo-&gt;HeroicEntry)!=hasHeroicEntries.end())
+            if (hasDifficultyEntries1.find(cInfo-&gt;DifficultyEntry1)!=hasDifficultyEntries1.end())
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u) have `heroic_entry`=%u but creature entry %u have heroic entry also.&quot;,i,cInfo-&gt;HeroicEntry,cInfo-&gt;HeroicEntry);
+                sLog.outErrorDb(&quot;Creature (Entry: %u) have `difficulty_entry_1`=%u but creature entry %u have difficulty 1 entry also.&quot;,i,cInfo-&gt;DifficultyEntry1,cInfo-&gt;DifficultyEntry1);
                 continue;
             }
 
-            if (cInfo-&gt;unit_class != heroicInfo-&gt;unit_class)
+            if (cInfo-&gt;unit_class != difficultyInfo-&gt;unit_class)
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u, class %u) has different `unit_class` in heroic mode (Entry: %u, class %u).&quot;,i, cInfo-&gt;unit_class, cInfo-&gt;HeroicEntry, heroicInfo-&gt;unit_class);
+                sLog.outErrorDb(&quot;Creature (Entry: %u, class %u) has different `unit_class` in difficulty 1 mode (Entry: %u, class %u).&quot;,i, cInfo-&gt;unit_class, cInfo-&gt;DifficultyEntry1, difficultyInfo-&gt;unit_class);
                 continue;
             }
 
-            if (cInfo-&gt;npcflag != heroicInfo-&gt;npcflag)
+            if (cInfo-&gt;npcflag != difficultyInfo-&gt;npcflag)
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `npcflag` in heroic mode (Entry: %u).&quot;,i,cInfo-&gt;HeroicEntry);
+                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `npcflag` in difficulty 1 mode (Entry: %u).&quot;,i,cInfo-&gt;DifficultyEntry1);
                 continue;
             }
 
-            if (cInfo-&gt;trainer_class != heroicInfo-&gt;trainer_class)
+            if (cInfo-&gt;trainer_class != difficultyInfo-&gt;trainer_class)
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `trainer_class` in heroic mode (Entry: %u).&quot;,i,cInfo-&gt;HeroicEntry);
+                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `trainer_class` in difficulty 1 mode (Entry: %u).&quot;,i,cInfo-&gt;DifficultyEntry1);
                 continue;
             }
 
-            if (cInfo-&gt;trainer_race != heroicInfo-&gt;trainer_race)
+            if (cInfo-&gt;trainer_race != difficultyInfo-&gt;trainer_race)
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `trainer_race` in heroic mode (Entry: %u).&quot;,i,cInfo-&gt;HeroicEntry);
+                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `trainer_race` in difficulty 1 mode (Entry: %u).&quot;,i,cInfo-&gt;DifficultyEntry1);
                 continue;
             }
 
-            if (cInfo-&gt;trainer_type != heroicInfo-&gt;trainer_type)
+            if (cInfo-&gt;trainer_type != difficultyInfo-&gt;trainer_type)
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `trainer_type` in heroic mode (Entry: %u).&quot;,i,cInfo-&gt;HeroicEntry);
+                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `trainer_type` in difficulty 1 mode (Entry: %u).&quot;,i,cInfo-&gt;DifficultyEntry1);
                 continue;
             }
 
-            if (cInfo-&gt;trainer_spell != heroicInfo-&gt;trainer_spell)
+            if (cInfo-&gt;trainer_spell != difficultyInfo-&gt;trainer_spell)
             {
-                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `trainer_spell` in heroic mode (Entry: %u).&quot;,i,cInfo-&gt;HeroicEntry);
+                sLog.outErrorDb(&quot;Creature (Entry: %u) has different `trainer_spell` in difficulty 1 mode (Entry: %u).&quot;,i,cInfo-&gt;DifficultyEntry1);
                 continue;
             }
 
-            if (heroicInfo-&gt;AIName &amp;&amp; *heroicInfo-&gt;AIName)
+            if (difficultyInfo-&gt;AIName &amp;&amp; *difficultyInfo-&gt;AIName)
             {
-                sLog.outErrorDb(&quot;Heroic mode creature (Entry: %u) has `AIName`, but in any case will used normal mode creature (Entry: %u) AIName.&quot;,cInfo-&gt;HeroicEntry,i);
+                sLog.outErrorDb(&quot;Difficulty 1 mode creature (Entry: %u) has `AIName`, but in any case will used difficulty 0 mode creature (Entry: %u) AIName.&quot;,cInfo-&gt;DifficultyEntry1,i);
                 continue;
             }
 
-            if (heroicInfo-&gt;ScriptID)
+            if (difficultyInfo-&gt;ScriptID)
             {
-                sLog.outErrorDb(&quot;Heroic mode creature (Entry: %u) has `ScriptName`, but in any case will used normal mode creature (Entry: %u) ScriptName.&quot;,cInfo-&gt;HeroicEntry,i);
+                sLog.outErrorDb(&quot;Difficulty 1 mode creature (Entry: %u) has `ScriptName`, but in any case will used difficulty 0 mode creature (Entry: %u) ScriptName.&quot;,cInfo-&gt;DifficultyEntry1,i);
                 continue;
             }
 
-            hasHeroicEntries.insert(i);
-            heroicEntries.insert(cInfo-&gt;HeroicEntry);
+            hasDifficultyEntries1.insert(i);
+            difficultyEntries1.insert(cInfo-&gt;DifficultyEntry1);
         }
 
         FactionTemplateEntry const* factionTemplate = sFactionTemplateStore.LookupEntry(cInfo-&gt;faction_A);
@@ -1032,11 +1032,11 @@ void ObjectMgr::LoadCreatures()
     }
 
     // build single time for check creature data
-    std::set&lt;uint32&gt; heroicCreatures;
+    std::set&lt;uint32&gt; difficultyCreatures1;
     for(uint32 i = 0; i &lt; sCreatureStorage.MaxEntry; ++i)
         if(CreatureInfo const* cInfo = sCreatureStorage.LookupEntry&lt;CreatureInfo&gt;(i))
-            if(cInfo-&gt;HeroicEntry)
-                heroicCreatures.insert(cInfo-&gt;HeroicEntry);
+            if(cInfo-&gt;DifficultyEntry1)
+                difficultyCreatures1.insert(cInfo-&gt;DifficultyEntry1);
 
     // build single time for check spawnmask
     std::map&lt;uint32,uint32&gt; spawnMasks;
@@ -1095,9 +1095,9 @@ void ObjectMgr::LoadCreatures()
         if (data.spawnMask &amp; ~spawnMasks[data.mapid])
             sLog.outErrorDb(&quot;Table `creature` have creature (GUID: %u) that have wrong spawn mask %u including not supported difficulty modes for map (Id: %u).&quot;,guid, data.spawnMask, data.mapid );
 
-        if(heroicCreatures.find(data.id)!=heroicCreatures.end())
+        if(difficultyCreatures1.find(data.id)!=difficultyCreatures1.end())
         {
-            sLog.outErrorDb(&quot;Table `creature` have creature (GUID: %u) that listed as heroic template (entry: %u) in `creature_template`, skipped.&quot;,guid, data.id );
+            sLog.outErrorDb(&quot;Table `creature` have creature (GUID: %u) that listed as difficulty 1 template (entry: %u) in `creature_template`, skipped.&quot;,guid, data.id );
             continue;
         }
 </diff>
      <filename>src/game/ObjectMgr.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
 #ifndef __REVISION_NR_H__
 #define __REVISION_NR_H__
- #define REVISION_NR &quot;8730&quot;
+ #define REVISION_NR &quot;8731&quot;
 #endif // __REVISION_NR_H__</diff>
      <filename>src/shared/revision_nr.h</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 #ifndef __REVISION_SQL_H__
 #define __REVISION_SQL_H__
  #define REVISION_DB_CHARACTERS &quot;required_8721_01_characters_guild&quot;
- #define REVISION_DB_MANGOS &quot;required_8726_01_mangos_spell_proc_event&quot;
+ #define REVISION_DB_MANGOS &quot;required_8731_01_mangos_creature_template&quot;
  #define REVISION_DB_REALMD &quot;required_8728_01_realmd_account&quot;
 #endif // __REVISION_SQL_H__</diff>
      <filename>src/shared/revision_sql.h</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>59c2e3fb146b7f7e32533e87846590c298e69aea</id>
    </parent>
  </parents>
  <author>
    <name>VladimirMangos</name>
    <email>vladimir@getmangos.com</email>
  </author>
  <url>http://github.com/mangos/mangos/commit/9bb8813d9c14a0e4d7c6f4e1071b5d8cdc89a0e6</url>
  <id>9bb8813d9c14a0e4d7c6f4e1071b5d8cdc89a0e6</id>
  <committed-date>2009-10-24T20:23:00-07:00</committed-date>
  <authored-date>2009-10-24T20:13:39-07:00</authored-date>
  <message>[8731] Restore difficulty 1 spawn use for creatures with special difficulty 1 versions.

* Rename creature template `heroic_entry` =&gt; `difficulty_entry_1`
  Possible need add 2 more fields for 2-3
* Use 2 more EventAI EFLAG_* flags for 2-3 difficulty support, update checks.
* Update area trigger code.

Note: support for specialized creature version for difficulties 2-3 not added yet
      and will be used same as difficulty 1 mode.

TODO: Rename area triggers heroickey/etc fields ?</message>
  <tree>a1213145e458684adc2662f605b592f678533efa</tree>
  <committer>
    <name>VladimirMangos</name>
    <email>vladimir@getmangos.com</email>
  </committer>
</commit>
