daily pastebin goal
77%
SHARE
TWEET

Untitled

a guest Aug 9th, 2011 110 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. struct MANGOS_DLL_DECL instance_trial_of_the_crusader : public BSWScriptedInstance
  2. {
  3.     instance_trial_of_the_crusader(Map* pMap) : BSWScriptedInstance(pMap) {
  4.     Difficulty = pMap->GetDifficulty();
  5.     Initialize();
  6.     }
  7.  
  8.     uint32 m_auiEncounter[MAX_ENCOUNTERS+1];
  9.     uint32 m_auiEventTimer;
  10.     uint32 m_auiEventNPCId;
  11.     uint32 m_auiNorthrendBeasts;
  12.     uint8 Difficulty;
  13.     std::string m_strInstData;
  14.     bool needsave;
  15.  
  16.     uint32 m_uiDataDamageFjola;
  17.     uint32 m_uiDataDamageEydis;
  18.     uint32 m_uiValkyrsCasting;
  19.  
  20.     uint32 m_uiTributeChest1;
  21.     uint32 m_uiTributeChest2;
  22.     uint32 m_uiTributeChest3;
  23.     uint32 m_uiTributeChest4;
  24.  
  25.     uint32 m_auiCrusadersCount;
  26.  
  27.     void Initialize()
  28.     {
  29.         for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
  30.                 m_auiEncounter[i] = NOT_STARTED;
  31.  
  32.                 m_auiEncounter[0] = 0;
  33.                 m_auiEncounter[7] = 50;
  34.                 m_auiEncounter[8] = 0;
  35.  
  36.         m_auiNorthrendBeasts = NOT_STARTED;
  37.         m_auiEventTimer = 1000;
  38.         m_auiCrusadersCount = 6;
  39.         needsave = false;
  40.     }
  41.  
  42.     bool IsEncounterInProgress() const
  43.     {
  44.         for(uint8 i = 1; i < MAX_ENCOUNTERS-2 ; ++i)
  45.             if (m_auiEncounter[i] == IN_PROGRESS) return true;
  46.  
  47.         return false;
  48.     }
  49.  
  50.     void OnPlayerEnter(Player *m_player)
  51.     {
  52.         if (Difficulty == RAID_DIFFICULTY_10MAN_HEROIC || Difficulty == RAID_DIFFICULTY_25MAN_HEROIC)
  53.         {
  54.             m_player->SendUpdateWorldState(UPDATE_STATE_UI_SHOW,1);
  55.             m_player->SendUpdateWorldState(UPDATE_STATE_UI_COUNT, GetData(TYPE_COUNTER));
  56.         }
  57.     }
  58.  
  59.     bool IsRaidWiped()
  60.     {
  61.         Map::PlayerList const &players = instance->GetPlayers();
  62.  
  63.         for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
  64.         {
  65.             if(Player* pPlayer = i->getSource())
  66.             {
  67.                 if(pPlayer->isAlive())
  68.                 return false;
  69.             }
  70.         }
  71.         return true;
  72.     }
  73.  
  74.     void OnCreatureCreate(Creature* pCreature)
  75.     {
  76.         if (!pCreature)
  77.             return;
  78.         m_mNpcEntryGuidStore[pCreature->GetEntry()] = pCreature->GetObjectGuid();
  79.     }
  80.  
  81.     void OnObjectCreate(GameObject *pGo)
  82.     {
  83.         if (!pGo)
  84.             return;
  85.         m_mGoEntryGuidStore[pGo->GetEntry()] = pGo->GetObjectGuid();
  86.     }
  87.  
  88.     void SetData(uint32 uiType, uint32 uiData)
  89.     {
  90.         switch(uiType)
  91.         {
  92.         case TYPE_STAGE:    m_auiEncounter[0] = uiData; break;
  93.         case TYPE_BEASTS:   m_auiEncounter[1] = uiData; break;
  94.         case TYPE_JARAXXUS: m_auiEncounter[2] = uiData; break;
  95.         case TYPE_CRUSADERS:if (uiData == FAIL && (m_auiEncounter[3] == FAIL || m_auiEncounter[3] == NOT_STARTED))
  96.                             m_auiEncounter[3] = NOT_STARTED;
  97.                             else
  98.                                 m_auiEncounter[3] = uiData;
  99.                             if (uiData == DONE)
  100.                             {
  101.                                uint32 uiCacheEntry = GO_CRUSADERS_CACHE_10;
  102.  
  103.                                switch (instance->GetDifficulty())
  104.                                {
  105.                                    case RAID_DIFFICULTY_10MAN_HEROIC:
  106.                                        uiCacheEntry = GO_CRUSADERS_CACHE_10_H;
  107.                                        break;
  108.                                    case RAID_DIFFICULTY_25MAN_NORMAL:
  109.                                        uiCacheEntry = GO_CRUSADERS_CACHE_25;
  110.                                        break;
  111.                                    case RAID_DIFFICULTY_25MAN_HEROIC:
  112.                                        uiCacheEntry = GO_CRUSADERS_CACHE_25_H;
  113.                                        break;
  114.                                }
  115.                                if (GameObject* pChest = GetSingleGameObjectFromStorage(uiCacheEntry))
  116.                                    if (!pChest->isSpawned())
  117.                                        pChest->SetRespawnTime(7*DAY);
  118.                             };
  119.                             break;
  120.         case TYPE_CRUSADERS_COUNT:  if (uiData == 0) --m_auiCrusadersCount;
  121.                                          else m_auiCrusadersCount = uiData;
  122.                                     break;
  123.         case TYPE_VALKIRIES: if (m_auiEncounter[4] == SPECIAL && uiData == SPECIAL) uiData = DONE;
  124.                              m_auiEncounter[4] = uiData; break;
  125.         case TYPE_LICH_KING: m_auiEncounter[5] = uiData; break;
  126.         case TYPE_ANUBARAK:  m_auiEncounter[6] = uiData;
  127.                             if (uiData == DONE) {
  128.                             if (Difficulty == RAID_DIFFICULTY_10MAN_HEROIC)
  129.                             {
  130.                                 if ( m_auiEncounter[7] >= 25) m_uiTributeChest1 = GO_TRIBUTE_CHEST_10H_25;
  131.                                 if ( m_auiEncounter[7] >= 45) m_uiTributeChest2 = GO_TRIBUTE_CHEST_10H_45;
  132.                                 if ( m_auiEncounter[7] >= 49) m_uiTributeChest3 = GO_TRIBUTE_CHEST_10H_50;
  133.                                 m_uiTributeChest4 = GO_TRIBUTE_CHEST_10H_99;
  134.                             }
  135.                             if (Difficulty == RAID_DIFFICULTY_25MAN_HEROIC){
  136.                                 if ( m_auiEncounter[7] >= 25) m_uiTributeChest1 = GO_TRIBUTE_CHEST_25H_25;
  137.                                 if ( m_auiEncounter[7] >= 45) m_uiTributeChest2 = GO_TRIBUTE_CHEST_25H_45;
  138.                                 if ( m_auiEncounter[7] >= 49) m_uiTributeChest3 = GO_TRIBUTE_CHEST_25H_50;
  139.                                 m_uiTributeChest4 = GO_TRIBUTE_CHEST_25H_99;
  140.                             }
  141.                             // Attention! It is (may be) not off-like, but  spawning all Tribute Chests is real
  142.                             // reward for clearing TOC instance
  143.                             if (m_uiTributeChest1)
  144.                               if (GameObject* pChest1 = GetSingleGameObjectFromStorage(m_uiTributeChest1))
  145.                                 if (pChest1 && !pChest1->isSpawned()) pChest1->SetRespawnTime(7*DAY);
  146.                             if (m_uiTributeChest2)
  147.                               if (GameObject* pChest2 = GetSingleGameObjectFromStorage(m_uiTributeChest2))
  148.                                 if (pChest2 && !pChest2->isSpawned()) pChest2->SetRespawnTime(7*DAY);
  149.                             if (m_uiTributeChest3)
  150.                               if (GameObject* pChest3 = GetSingleGameObjectFromStorage(m_uiTributeChest3))
  151.                                 if (pChest3 && !pChest3->isSpawned()) pChest3->SetRespawnTime(7*DAY);
  152.                             if (m_uiTributeChest4)
  153.                               if (GameObject* pChest4 = GetSingleGameObjectFromStorage(m_uiTributeChest4))
  154.                                 if (pChest4 && !pChest4->isSpawned()) pChest4->SetRespawnTime(7*DAY);
  155.                             };
  156.         break;
  157.         case TYPE_COUNTER:   m_auiEncounter[7] = uiData; uiData = DONE; break;
  158.         case TYPE_EVENT:     m_auiEncounter[8] = uiData; uiData = NOT_STARTED; break;
  159.         case TYPE_EVENT_TIMER:      m_auiEventTimer = uiData; uiData = NOT_STARTED; break;
  160.         case TYPE_NORTHREND_BEASTS: m_auiNorthrendBeasts = uiData; break;
  161.         case DATA_HEALTH_FJOLA:     m_uiDataDamageFjola = uiData; uiData = NOT_STARTED; break;
  162.         case DATA_HEALTH_EYDIS:     m_uiDataDamageEydis = uiData; uiData = NOT_STARTED; break;
  163.         case DATA_CASTING_VALKYRS:  m_uiValkyrsCasting = uiData; uiData = NOT_STARTED; break;
  164.         }
  165.  
  166.         if (IsEncounterInProgress())
  167.         {
  168.             DoCloseDoor(GetData64(GO_WEST_PORTCULLIS));
  169.             DoCloseDoor(GetData64(GO_NORTH_PORTCULLIS));
  170. //            DoCloseDoor(GetData64(GO_SOUTH_PORTCULLIS));
  171.         }
  172.         else
  173.         {
  174.             DoOpenDoor(GetData64(GO_WEST_PORTCULLIS));
  175.             DoOpenDoor(GetData64(GO_NORTH_PORTCULLIS));
  176. //            DoOpenDoor(GetData64(GO_SOUTH_PORTCULLIS));
  177.         };
  178.  
  179.         if (uiData == FAIL && uiType != TYPE_STAGE
  180.                            && uiType != TYPE_EVENT
  181.                            && uiType != TYPE_COUNTER
  182.                            && uiType != TYPE_EVENT_TIMER)
  183.         { if (IsRaidWiped()) { --m_auiEncounter[7];
  184.                                needsave = true;
  185.                              }
  186.                                uiData = NOT_STARTED;
  187.         }
  188.  
  189.         if ((uiData == DONE && uiType != TYPE_STAGE
  190.                            && uiType != TYPE_EVENT
  191.                            && uiType != TYPE_EVENT_TIMER)
  192.                            || needsave == true)
  193.         {
  194.             OUT_SAVE_INST_DATA;
  195.  
  196.             std::ostringstream saveStream;
  197.  
  198.             for(uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
  199.                 saveStream << m_auiEncounter[i] << " ";
  200.  
  201.             m_strInstData = saveStream.str();
  202.  
  203.             SaveToDB();
  204.             OUT_SAVE_INST_DATA_COMPLETE;
  205.         needsave = false;
  206.         }
  207.     }
  208.  
  209.     uint32 GetData(uint32 uiType)
  210.     {
  211.         switch(uiType)
  212.         {
  213.             case TYPE_STAGE:     return m_auiEncounter[0];
  214.             case TYPE_BEASTS:    return m_auiEncounter[1];
  215.             case TYPE_JARAXXUS:  return m_auiEncounter[2];
  216.             case TYPE_CRUSADERS: return m_auiEncounter[3];
  217.             case TYPE_VALKIRIES: return m_auiEncounter[4];
  218.             case TYPE_LICH_KING: return m_auiEncounter[5];
  219.             case TYPE_ANUBARAK:  return m_auiEncounter[6];
  220.             case TYPE_COUNTER:   return m_auiEncounter[7];
  221.             case TYPE_EVENT:     return m_auiEncounter[8];
  222.             case TYPE_DIFFICULTY:   return Difficulty;
  223.             case TYPE_NORTHREND_BEASTS:    return m_auiNorthrendBeasts;
  224.             case TYPE_EVENT_TIMER:  return m_auiEventTimer;
  225.             case TYPE_CRUSADERS_COUNT:  return m_auiCrusadersCount;
  226.             case TYPE_EVENT_NPC: switch (m_auiEncounter[8])
  227.                                  {
  228.                                  case 110:
  229.                                  case 140:
  230.                                  case 150:
  231.                                  case 200:
  232.                                  case 205:
  233.                                  case 210:
  234.                                  case 300:
  235.                                  case 305:
  236.                                  case 310:
  237.                                  case 400:
  238.                                  case 666:
  239.                                  case 1010:
  240.                                  case 1180:
  241.                                  case 2000:
  242.                                  case 2030:
  243.                                  case 3000:
  244.                                  case 3001:
  245.                                  case 3060:
  246.                                  case 3061:
  247.                                  case 3090:
  248.                                  case 3091:
  249.                                  case 3100:
  250.                                  case 3110:
  251.                                  case 4000:
  252.                                  case 4010:
  253.                                  case 4015:
  254.                                  case 4040:
  255.                                  case 4050:
  256.                                  case 5000:
  257.                                  case 5005:
  258.                                  case 5020:
  259.                                  case 6000:
  260.                                  case 6005:
  261.                                  case 6010:
  262.                                  m_auiEventNPCId = NPC_TIRION;
  263.                                  break;
  264.  
  265.                                  case 5010:
  266.                                  case 5030:
  267.                                  case 5040:
  268.                                  case 5050:
  269.                                  case 5060:
  270.                                  case 5070:
  271.                                  case 5080:
  272.                                  m_auiEventNPCId = NPC_LICH_KING_1;
  273.                                  break;
  274.  
  275.                                  case 130:
  276.                                  case 132:
  277.                                  case 2020:
  278.                                  case 3080:
  279.                                  case 3051:
  280.                                  case 3071:
  281.                                  case 4020:
  282.                                  m_auiEventNPCId = NPC_RINN;
  283.                                  break;
  284.  
  285.                                  case 120:
  286.                                  case 122:
  287.                                  case 2010:
  288.                                  case 3050:
  289.                                  case 3070:
  290.                                  case 3081:
  291.                                  case 4030:
  292.                                  m_auiEventNPCId = NPC_GARROSH;
  293.                                  break;
  294.  
  295.                                  case 1110:
  296.                                  case 1120:
  297.                                  case 1130:
  298.                                  case 1132:
  299.                                  case 1134:
  300.                                  case 1135:
  301.                                  case 1140:
  302.                                  case 1142:
  303.                                  case 1144:
  304.                                  case 1145:
  305.                                  case 1150:
  306.                                  case 1160:
  307.                                  m_auiEventNPCId = NPC_FIZZLEBANG;
  308.                                  break;
  309.  
  310.                                  default:
  311.                                  m_auiEventNPCId = NPC_TIRION;
  312.                                  break;
  313.  
  314.                                  };
  315.                                  return m_auiEventNPCId;
  316.  
  317.         case DATA_HEALTH_FJOLA: return m_uiDataDamageFjola;
  318.         case DATA_HEALTH_EYDIS: return m_uiDataDamageEydis;
  319.         case DATA_CASTING_VALKYRS: return m_uiValkyrsCasting;
  320.         }
  321.         return 0;
  322.     }
  323.  
  324.     const char* Save()
  325.     {
  326.         return m_strInstData.c_str();
  327.     }
  328.  
  329.     void Load(const char* strIn)
  330.     {
  331.         if (!strIn)
  332.         {
  333.             OUT_LOAD_INST_DATA_FAIL;
  334.             return;
  335.         }
  336.  
  337.         OUT_LOAD_INST_DATA(strIn);
  338.  
  339.         std::istringstream loadStream(strIn);
  340.  
  341.         for(uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
  342.         {
  343.             loadStream >> m_auiEncounter[i];
  344.  
  345.             if (m_auiEncounter[i] == IN_PROGRESS)
  346.                 m_auiEncounter[i] = NOT_STARTED;
  347.         }
  348.         m_auiEncounter[TYPE_EVENT] = 0;
  349.         m_auiEncounter[TYPE_STAGE] = 0;
  350.  
  351.         OUT_LOAD_INST_DATA_COMPLETE;
  352.  
  353.     }
  354. };
  355.  
  356. InstanceData* GetInstanceData_instance_trial_of_the_crusader(Map* pMap)
  357. {
  358.     return new instance_trial_of_the_crusader(pMap);
  359. }
  360.  
  361. void AddSC_instance_trial_of_the_crusader()
  362. {
  363.     Script *newscript;
  364.     newscript = new Script;
  365.     newscript->Name = "instance_trial_of_the_crusader";
  366.     newscript->GetInstanceData = &GetInstanceData_instance_trial_of_the_crusader;
  367.     newscript->RegisterSelf();
  368. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top