Changeset 178 for trunk/src/bindings
- Timestamp:
- 11/19/08 13:43:40 (17 years ago)
- Location:
- trunk/src/bindings/scripts/scripts/zone/black_temple
- Files:
-
- 3 modified
-
boss_illidan.cpp (modified) (22 diffs)
-
boss_reliquary_of_souls.cpp (modified) (3 diffs)
-
instance_black_temple.cpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp
r158 r178 1 1 /* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> 2 * This program is free software; you can redistribute it and/or modify3 * it under the terms of the GNU General Public License as published by4 * the Free Software Foundation; either version 2 of the License, or5 * (at your option) any later version.6 *7 * This program is distributed in the hope that it will be useful,8 * but WITHOUT ANY WARRANTY; without even the implied warranty of9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the10 * GNU General Public License for more details.11 *12 * You should have received a copy of the GNU General Public License13 * along with this program; if not, write to the Free Software14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA15 */2 * This program is free software; you can redistribute it and/or modify 3 * it under the terms of the GNU General Public License as published by 4 * the Free Software Foundation; either version 2 of the License, or 5 * (at your option) any later version. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software 14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 15 */ 16 16 17 17 /* ScriptData … … 383 383 uint64 GlaiveGUID[2]; 384 384 385 std::list<uint64> ParasiteTargets; // for safety, do not use Unit*386 387 385 void Reset(); 388 386 … … 434 432 void Aggro(Unit *who) 435 433 { 434 m_creature->setActive(true); 436 435 DoZoneInCombat(); 437 436 } … … 502 501 m_creature->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE ); 503 502 } 504 }505 506 void AddParasiteTarget(uint64 targetGUID)507 {508 for(std::list<uint64>::iterator tIter = ParasiteTargets.begin(); tIter != ParasiteTargets.end(); tIter++)509 {510 if(*tIter == targetGUID)511 return;512 }513 ParasiteTargets.push_back(targetGUID);514 515 if(Phase == PHASE_NORMAL || Phase == PHASE_NORMAL_2 || Phase == PHASE_NORMAL_MAIEV)516 Timer[EVENT_PARASITE_CHECK] += 1000;517 503 } 518 504 … … 563 549 case 1://lift off 564 550 m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); 565 //m_creature->GetMotionMaster()->Clear(false);566 551 m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT); 567 //m_creature->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());568 552 m_creature->StopMoving(); 569 553 DoYell(SAY_TAKEOFF, LANG_UNIVERSAL, NULL); … … 572 556 break; 573 557 case 2://move to center 574 //m_creature->GetMotionMaster()->Clear(false);575 //m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);576 558 m_creature->GetMotionMaster()->MovePoint(0, CENTER_X + 5, CENTER_Y, CENTER_Z); //+5, for SPELL_THROW_GLAIVE bug 577 //m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);578 559 Timer[EVENT_FLIGHT_SEQUENCE] = 0; 579 560 break; … … 615 596 break; 616 597 case 6://fly to hover point 617 //m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);618 598 m_creature->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z); 619 //m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);620 599 Timer[EVENT_FLIGHT_SEQUENCE] = 0; 621 600 break; 622 601 case 7://return to center 623 //m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);624 602 m_creature->GetMotionMaster()->MovePoint(0, CENTER_X, CENTER_Y, CENTER_Z); 625 //m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);626 603 Timer[EVENT_FLIGHT_SEQUENCE] = 0; 627 604 break; … … 642 619 break; 643 620 case 9://land 644 //m_creature->GetMotionMaster()->Clear(false);645 621 m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT); 646 //m_creature->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());647 622 m_creature->StopMoving(); 648 623 m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND); … … 664 639 DoResetThreat(); 665 640 m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); 666 //m_creature->GetMotionMaster()->Clear();667 641 m_creature->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE ); 668 642 EnterPhase(PHASE_NORMAL_2); … … 724 698 void UpdateAI(const uint32 diff) 725 699 { 726 if((!m_creature->SelectHostilTarget() ||!m_creature->getVictim()) && Phase < PHASE_TALK_SEQUENCE)700 if((!m_creature->SelectHostilTarget() && !m_creature->getVictim()) && Phase < PHASE_TALK_SEQUENCE) 727 701 return; 728 702 729 703 Event = EVENT_NULL; 730 704 for(uint32 i = 1; i <= MaxTimer[Phase]; i++) 705 { 731 706 if(Timer[i]) 732 707 if(Timer[i] <= diff) … … 736 711 } 737 712 else Timer[i] -= diff; 738 739 switch(Phase) 713 } 714 715 switch(Phase) 716 { 717 case PHASE_NORMAL: 718 if(HPPCT(m_creature) < 65) 719 EnterPhase(PHASE_FLIGHT_SEQUENCE); 720 break; 721 722 case PHASE_NORMAL_2: 723 if(m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30) 724 EnterPhase(PHASE_TALK_SEQUENCE); 725 break; 726 727 case PHASE_NORMAL_MAIEV: 728 if(m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 1) 729 EnterPhase(PHASE_TALK_SEQUENCE); 730 break; 731 732 case PHASE_TALK_SEQUENCE: 733 if(Event == EVENT_TALK_SEQUENCE) 734 HandleTalkSequence(); 735 break; 736 737 case PHASE_FLIGHT_SEQUENCE: 738 if(Event == EVENT_FLIGHT_SEQUENCE) 739 HandleFlightSequence(); 740 break; 741 742 case PHASE_TRANSFORM_SEQUENCE: 743 if(Event == EVENT_TRANSFORM_SEQUENCE) 744 HandleTransformSequence(); 745 break; 746 } 747 748 if(m_creature->IsNonMeleeSpellCasted(false)) 749 return; 750 751 if(Phase == PHASE_NORMAL || Phase == PHASE_NORMAL_2 || Phase == PHASE_NORMAL_MAIEV && !m_creature->HasAura(SPELL_CAGED, 0)) 752 { 753 switch(Event) 754 { 755 //PHASE_NORMAL 756 case EVENT_BERSERK: 757 DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL); 758 DoPlaySoundToSet(m_creature, SOUND_ENRAGE); 759 DoCast(m_creature, SPELL_BERSERK, true); 760 Timer[EVENT_BERSERK] = 5000;//The buff actually lasts forever. 761 break; 762 763 case EVENT_TAUNT: 740 764 { 741 case PHASE_NORMAL: 742 if(HPPCT(m_creature) < 65) 743 EnterPhase(PHASE_FLIGHT_SEQUENCE); 744 break; 745 746 case PHASE_NORMAL_2: 747 if(m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30) 748 EnterPhase(PHASE_TALK_SEQUENCE); 749 break; 750 751 case PHASE_NORMAL_MAIEV: 752 if(m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 1) 753 EnterPhase(PHASE_TALK_SEQUENCE); 754 break; 755 756 case PHASE_TALK_SEQUENCE: 757 if(Event == EVENT_TALK_SEQUENCE) 758 HandleTalkSequence(); 759 break; 760 761 case PHASE_FLIGHT_SEQUENCE: 762 if(Event == EVENT_FLIGHT_SEQUENCE) 763 HandleFlightSequence(); 764 break; 765 766 case PHASE_TRANSFORM_SEQUENCE: 767 if(Event == EVENT_TRANSFORM_SEQUENCE) 768 HandleTransformSequence(); 769 break; 765 uint32 random = rand()%4; 766 char* yell = RandomTaunts[random].text; 767 uint32 soundid = RandomTaunts[random].sound; 768 if(yell) 769 DoYell(yell, LANG_UNIVERSAL, NULL); 770 if(soundid) 771 DoPlaySoundToSet(m_creature, soundid); 770 772 } 771 772 if(m_creature->IsNonMeleeSpellCasted(false)) 773 return; 774 775 if(Phase == PHASE_NORMAL || Phase == PHASE_NORMAL_2 || Phase == PHASE_NORMAL_MAIEV && !m_creature->HasAura(SPELL_CAGED, 0)) 773 Timer[EVENT_TAUNT] = 32000; 774 break; 775 776 case EVENT_SHEAR: 777 DoCast(m_creature->getVictim(), SPELL_SHEAR); 778 Timer[EVENT_SHEAR] = 25000 + (rand()%16 * 1000); 779 break; 780 781 case EVENT_FLAME_CRASH: 782 DoCast(m_creature->getVictim(), SPELL_FLAME_CRASH); 783 Timer[EVENT_FLAME_CRASH] = 35000; 784 break; 785 786 case EVENT_PARASITIC_SHADOWFIEND: 776 787 { 777 switch(Event) 778 { 779 //PHASE_NORMAL 780 case EVENT_BERSERK: 781 DoYell(SAY_ENRAGE, LANG_UNIVERSAL, NULL); 782 DoPlaySoundToSet(m_creature, SOUND_ENRAGE); 783 DoCast(m_creature, SPELL_BERSERK, true); 784 Timer[EVENT_BERSERK] = 5000;//The buff actually lasts forever. 785 break; 786 787 case EVENT_TAUNT: 788 { 789 uint32 random = rand()%4; 790 char* yell = RandomTaunts[random].text; 791 uint32 soundid = RandomTaunts[random].sound; 792 if(yell) 793 DoYell(yell, LANG_UNIVERSAL, NULL); 794 if(soundid) 795 DoPlaySoundToSet(m_creature, soundid); 796 } 797 Timer[EVENT_TAUNT] = 32000; 798 break; 799 800 case EVENT_SHEAR: 801 DoCast(m_creature->getVictim(), SPELL_SHEAR); 802 Timer[EVENT_SHEAR] = 25000 + (rand()%16 * 1000); 803 break; 804 805 case EVENT_FLAME_CRASH: 806 DoCast(m_creature->getVictim(), SPELL_FLAME_CRASH); 807 Timer[EVENT_FLAME_CRASH] = 35000; 808 break; 809 810 case EVENT_PARASITIC_SHADOWFIEND: 811 { 812 Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1); 813 if(!target) target = m_creature->getVictim(); 814 if(target->GetTypeId() == TYPEID_PLAYER && !target->HasAura(SPELL_PARASITIC_SHADOWFIEND, 0)) 815 { 816 target->CastSpell(target, SPELL_PARASITIC_SHADOWFIEND, true); // do not miss 817 ParasiteTargets.push_back(target->GetGUID()); 818 Timer[EVENT_PARASITE_CHECK] += 1000; // do not check immediately 819 } 820 Timer[EVENT_PARASITIC_SHADOWFIEND] = 40000; 821 } 822 break; 823 824 case EVENT_PARASITE_CHECK: 825 for(std::list<uint64>::iterator tIter = ParasiteTargets.begin(); tIter != ParasiteTargets.end();) 826 { 827 Unit* target = Unit::GetUnit((*m_creature), *tIter); 828 if(!target || !target->HasAura(SPELL_PARASITIC_SHADOWFIEND, 0)) 829 { 830 if(target && target->isAlive()) 831 target->CastSpell(target, SPELL_SUMMON_PARASITICS, true); 832 std::list<uint64>::iterator tIter2 = tIter; 833 ++tIter; 834 ParasiteTargets.erase(tIter2); 835 } 836 else 837 ++tIter; 838 } 839 if(ParasiteTargets.empty()) 840 Timer[EVENT_PARASITE_CHECK] = 0; 841 else 842 Timer[EVENT_PARASITE_CHECK] = 1000; 843 break; 844 845 case EVENT_DRAW_SOUL: 846 DoCast(m_creature->getVictim(), SPELL_DRAW_SOUL); 847 Timer[EVENT_DRAW_SOUL] = 55000; 848 break; 849 850 //PHASE_NORMAL_2 851 case EVENT_AGONIZING_FLAMES: 852 DoCast(SelectUnit(SELECT_TARGET_RANDOM,0), SPELL_AGONIZING_FLAMES); 853 Timer[EVENT_AGONIZING_FLAMES] = 0; 854 break; 855 856 case EVENT_TRANSFORM_NORMAL: 857 EnterPhase(PHASE_TRANSFORM_SEQUENCE); 858 break; 859 860 //PHASE_NORMAL_MAIEV 861 case EVENT_ENRAGE: 862 DoCast(m_creature, SPELL_ENRAGE); 863 Timer[EVENT_ENRAGE] = 0; 864 break; 865 866 default: 867 break; 868 } 869 DoMeleeAttackIfReady(); 788 Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 1, 200, true); 789 if(!target) target = m_creature->getVictim(); 790 if(target) 791 m_creature->CastSpell(target, SPELL_PARASITIC_SHADOWFIEND, true); 792 }break; 793 794 case EVENT_PARASITE_CHECK: 795 Timer[EVENT_PARASITE_CHECK] = 0; 796 break; 797 798 case EVENT_DRAW_SOUL: 799 DoCast(m_creature->getVictim(), SPELL_DRAW_SOUL); 800 Timer[EVENT_DRAW_SOUL] = 55000; 801 break; 802 803 //PHASE_NORMAL_2 804 case EVENT_AGONIZING_FLAMES: 805 DoCast(SelectUnit(SELECT_TARGET_RANDOM,0), SPELL_AGONIZING_FLAMES); 806 Timer[EVENT_AGONIZING_FLAMES] = 0; 807 break; 808 809 case EVENT_TRANSFORM_NORMAL: 810 EnterPhase(PHASE_TRANSFORM_SEQUENCE); 811 break; 812 813 //PHASE_NORMAL_MAIEV 814 case EVENT_ENRAGE: 815 DoCast(m_creature, SPELL_ENRAGE); 816 Timer[EVENT_ENRAGE] = 0; 817 break; 818 819 default: 820 break; 821 } 822 DoMeleeAttackIfReady(); 823 } 824 825 if(Phase == PHASE_FLIGHT) 826 { 827 switch(Event) 828 { 829 case EVENT_FIREBALL: 830 DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_FIREBALL); 831 Timer[EVENT_FIREBALL] = 3000; 832 break; 833 834 case EVENT_DARK_BARRAGE: 835 DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_DARK_BARRAGE); 836 Timer[EVENT_DARK_BARRAGE] = 0; 837 break; 838 839 case EVENT_EYE_BLAST: 840 CastEyeBlast(); 841 Timer[EVENT_EYE_BLAST] = 0; 842 break; 843 844 case EVENT_MOVE_POINT: 845 Phase = PHASE_FLIGHT_SEQUENCE; 846 Timer[EVENT_FLIGHT_SEQUENCE] = 0;//do not start Event when changing hover point 847 for (uint8 i = 0; i <= rand()%3; i++) 848 { 849 HoverPoint++; 850 if(HoverPoint > 3) 851 HoverPoint = 0; 870 852 } 871 872 if(Phase == PHASE_FLIGHT) 873 { 874 switch(Event) 875 { 876 case EVENT_FIREBALL: 877 DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_FIREBALL); 878 Timer[EVENT_FIREBALL] = 3000; 879 break; 880 881 case EVENT_DARK_BARRAGE: 882 DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_DARK_BARRAGE); 883 Timer[EVENT_DARK_BARRAGE] = 0; 884 break; 885 886 case EVENT_EYE_BLAST: 887 CastEyeBlast(); 888 Timer[EVENT_EYE_BLAST] = 0; 889 break; 890 891 case EVENT_MOVE_POINT: 892 Phase = PHASE_FLIGHT_SEQUENCE; 893 Timer[EVENT_FLIGHT_SEQUENCE] = 0;//do not start Event when changing hover point 894 for (uint8 i = 0; i <= rand()%3; i++) 895 { 896 HoverPoint++; 897 if(HoverPoint > 3) 898 HoverPoint = 0; 899 } 900 m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); 901 m_creature->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z); 902 m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT); 903 break; 904 905 default: 906 break; 907 } 908 } 909 910 if(Phase == PHASE_DEMON) 911 { 912 switch(Event) 913 { 914 case EVENT_SHADOW_BLAST: 915 m_creature->GetMotionMaster()->Clear(false); 916 if(!m_creature->IsWithinDistInMap(m_creature->getVictim(), 50)||!m_creature->IsWithinLOSInMap(m_creature->getVictim())) 917 m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), 30); 918 else 919 m_creature->GetMotionMaster()->MoveIdle(); 920 DoCast(m_creature->getVictim(), SPELL_SHADOW_BLAST); 921 Timer[EVENT_SHADOW_BLAST] = 4000; 922 break; 923 case EVENT_SHADOWDEMON: 924 DoCast(m_creature, SPELL_SUMMON_SHADOWDEMON); 925 Timer[EVENT_SHADOWDEMON] = 0; 926 Timer[EVENT_FLAME_BURST] += 10000; 927 break; 928 case EVENT_FLAME_BURST: 929 DoCast(m_creature, SPELL_FLAME_BURST); 930 Timer[EVENT_FLAME_BURST] = 15000; 931 break; 932 case EVENT_TRANSFORM_DEMON: 933 EnterPhase(PHASE_TRANSFORM_SEQUENCE); 934 break; 935 default: 936 break; 937 } 938 } 853 m_creature->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z); 854 break; 855 856 default: 857 break; 858 } 859 } 860 861 if(Phase == PHASE_DEMON) 862 { 863 switch(Event) 864 { 865 case EVENT_SHADOW_BLAST: 866 m_creature->GetMotionMaster()->Clear(false); 867 if(!m_creature->IsWithinDistInMap(m_creature->getVictim(), 50)||!m_creature->IsWithinLOSInMap(m_creature->getVictim())) 868 m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), 30); 869 else 870 m_creature->GetMotionMaster()->MoveIdle(); 871 DoCast(m_creature->getVictim(), SPELL_SHADOW_BLAST); 872 Timer[EVENT_SHADOW_BLAST] = 4000; 873 break; 874 case EVENT_SHADOWDEMON: 875 DoCast(m_creature, SPELL_SUMMON_SHADOWDEMON); 876 Timer[EVENT_SHADOWDEMON] = 0; 877 Timer[EVENT_FLAME_BURST] += 10000; 878 break; 879 case EVENT_FLAME_BURST: 880 DoCast(m_creature, SPELL_FLAME_BURST); 881 Timer[EVENT_FLAME_BURST] = 15000; 882 break; 883 case EVENT_TRANSFORM_DEMON: 884 EnterPhase(PHASE_TRANSFORM_SEQUENCE); 885 break; 886 default: 887 break; 888 } 889 } 939 890 } 940 891 }; 941 892 942 893 /********************************** End of Illidan AI ******************************************/ 943 944 //This is used to sort the players by distance in preparation for being charged by the flames.945 struct TargetDistanceOrder : public std::binary_function<const Unit, const Unit, bool>946 {947 const Unit* MainTarget;948 TargetDistanceOrder(const Unit* Target) : MainTarget(Target) {};949 // functor for operator ">"950 bool operator()(const Unit* _Left, const Unit* _Right) const951 {952 return (MainTarget->GetDistance(_Left) > MainTarget->GetDistance(_Right));953 }954 };955 894 956 895 struct TRINITY_DLL_DECL flame_of_azzinothAI : public ScriptedAI … … 973 912 void ChargeCheck() 974 913 { 975 // Get the Threat List 976 std::list<HostilReference *> m_threatlist = m_creature->getThreatManager().getThreatList(); 977 978 if(!m_threatlist.size()) return; // He doesn't have anyone in his threatlist, useless to continue 979 980 std::list<Unit *> targets; 981 std::list<HostilReference *>::iterator itr = m_threatlist.begin(); 982 for( ; itr!= m_threatlist.end(); ++itr) //store the threat list in a different container 983 { 984 Unit *target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid()); 985 if(target && target->isAlive() && target->GetTypeId() == TYPEID_PLAYER && target->GetPositionZ()>350) //only on alive players 986 targets.push_back(target); 987 } 988 989 if (!targets.size()) 990 return; 991 992 //Sort the list of players 993 targets.sort(TargetDistanceOrder(m_creature)); 994 //Resize so we only get the furthest target 995 targets.resize(1); 996 997 Unit* target = (*targets.begin()); 914 Unit* target = SelectUnit(SELECT_TARGET_FARTHEST, 0, 200, false); 998 915 if(target && (!m_creature->IsWithinDistInMap(target, FLAME_CHARGE_DISTANCE))) 999 916 { … … 1129 1046 m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 0); // Database sometimes has strange values.. 1130 1047 m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); 1048 m_creature->setActive(false); 1131 1049 } 1132 1050 … … 1185 1103 void BeginChannel() 1186 1104 { 1105 m_creature->setActive(true); 1106 1187 1107 float x, y, z; 1188 1108 if(GETGO(Gate, GateGUID)) … … 1528 1448 m_creature->InterruptNonMeleeSpells(false); 1529 1449 m_creature->GetMotionMaster()->Clear(false); 1530 //m_creature->GetMotionMaster()->MoveIdle();1531 1450 m_creature->AttackStop(); 1532 1451 m_creature->SetUInt64Value(UNIT_FIELD_TARGET, IllidanGUID); … … 1558 1477 m_creature->InterruptNonMeleeSpells(false); 1559 1478 m_creature->GetMotionMaster()->Clear(false); 1560 //m_creature->GetMotionMaster()->MoveIdle();1561 1479 m_creature->Relocate(x, y, z); 1562 1480 m_creature->SendMonsterMove(x, y, z, 0, 0, 0); … … 1840 1758 if(!m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND, 0)) 1841 1759 { 1842 m_creature->getVictim()->CastSpell(m_creature->getVictim(), SPELL_PARASITIC_SHADOWFIEND, true); //do not stack 1843 if(GETCRE(Illidan, IllidanGUID)) 1844 ((boss_illidan_stormrageAI*)Illidan->AI())->AddParasiteTarget(m_creature->getVictim()->GetGUID()); 1760 m_creature->getVictim()->CastSpell(m_creature->getVictim(), SPELL_PARASITIC_SHADOWFIEND, true, 0, 0, IllidanGUID); //do not stack 1845 1761 } 1846 1762 m_creature->AttackerStateUpdate(m_creature->getVictim()); … … 1937 1853 }; 1938 1854 1939 struct TRINITY_DLL_DECL blazeAI : public ScriptedAI1940 {1941 blazeAI(Creature *c) : ScriptedAI(c) {Reset();}1942 1943 uint32 BlazeTimer;1944 uint32 DespawnTimer;1945 1946 void Reset()1947 {1948 BlazeTimer = 3000;1949 DespawnTimer = 60000; // Spell duration = 1 min1950 //((TemporarySummon*)m_creature)->Summon(TEMPSUMMON_TIMED_DESPAWN, 0, false);1951 }1952 1953 void Aggro(Unit *who) {}1954 void AttackStart(Unit* who) { }1955 void MoveInLineOfSight(Unit *who){ }1956 1957 void UpdateAI(const uint32 diff)1958 {1959 if(BlazeTimer)1960 if(BlazeTimer <= diff)1961 {1962 DoCast(m_creature, SPELL_BLAZE_EFFECT);//duration 60s1963 BlazeTimer = 0;1964 }else BlazeTimer -= diff;1965 1966 if(DespawnTimer < diff)1967 {1968 m_creature->SetVisibility(VISIBILITY_OFF);1969 m_creature->setDeathState(JUST_DIED);1970 }else DespawnTimer -= diff;1971 }1972 };1973 1974 struct TRINITY_DLL_DECL flamecrashAI : public ScriptedAI1975 {1976 flamecrashAI(Creature *c) : ScriptedAI(c) {Reset();}1977 1978 uint32 DespawnTimer;1979 1980 void Reset()1981 {1982 DoCast(m_creature, SPELL_FLAME_CRASH_EFFECT);//duration inf1983 DespawnTimer = 120000; // summon spell duration1984 }1985 1986 void Aggro(Unit *who) {}1987 void AttackStart(Unit *who) { }1988 void MoveInLineOfSight(Unit *who){ }1989 1990 void UpdateAI(const uint32 diff)1991 {1992 if(DespawnTimer < diff)1993 {1994 m_creature->SetVisibility(VISIBILITY_OFF);1995 m_creature->setDeathState(JUST_DIED);1996 }else DespawnTimer -= diff;1997 }1998 };1999 2000 1855 struct TRINITY_DLL_DECL blade_of_azzinothAI : public ScriptedAI 2001 1856 { … … 2070 1925 FlightCount = 0; 2071 1926 TransformCount = 0; 2072 2073 ParasiteTargets.clear();2074 1927 2075 1928 m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 21135); … … 2081 1934 2082 1935 m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true); 1936 m_creature->setActive(false); 2083 1937 } 2084 1938 … … 2378 2232 } 2379 2233 2380 CreatureAI* GetAI_flamecrash(Creature *_Creature)2381 {2382 return new flamecrashAI (_Creature);2383 }2384 2385 2234 CreatureAI* GetAI_demonfire(Creature *_Creature) 2386 2235 { 2387 2236 return new demonfireAI (_Creature); 2388 }2389 2390 CreatureAI* GetAI_blaze(Creature *_Creature)2391 {2392 return new blazeAI (_Creature);2393 2237 } 2394 2238 … … 2450 2294 2451 2295 newscript = new Script; 2452 newscript->Name="mob_flame_crash";2453 newscript->GetAI = GetAI_flamecrash;2454 m_scripts[nrscripts++] = newscript;2455 2456 newscript = new Script;2457 2296 newscript->Name="mob_demon_fire"; 2458 2297 newscript->GetAI = GetAI_demonfire; 2459 m_scripts[nrscripts++] = newscript;2460 2461 newscript = new Script;2462 newscript->Name="mob_blaze";2463 newscript->GetAI = GetAI_blaze;2464 2298 m_scripts[nrscripts++] = newscript; 2465 2299 -
trunk/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp
r90 r178 635 635 } 636 636 637 void SelectSpiteTarget(uint32 num, float max_range = 999)638 {639 if(!num) return;640 641 CellPair p(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY()));642 Cell cell(p);643 cell.data.Part.reserved = ALL_DISTRICT;644 cell.SetNoCreate();645 646 std::list<Unit *> tempUnitMap;647 648 {649 Trinity::AnyAoETargetUnitInObjectRangeCheck u_check(m_creature, m_creature, max_range);650 Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck> searcher(tempUnitMap, u_check);651 652 TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck>, WorldTypeMapContainer > world_unit_searcher(searcher);653 TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck>, GridTypeMapContainer > grid_unit_searcher(searcher);654 655 CellLock<GridReadGuard> cell_lock(cell, p);656 cell_lock->Visit(cell_lock, world_unit_searcher, *(m_creature->GetMap()));657 cell_lock->Visit(cell_lock, grid_unit_searcher, *(m_creature->GetMap()));658 }659 660 std::list<Unit*>::iterator itr;661 while(tempUnitMap.size() && SpiteTargetGUID.size() < num)662 {663 itr = tempUnitMap.begin();664 advance(itr, rand()%tempUnitMap.size());665 SpiteTargetGUID.push_back((*itr)->GetGUID());666 tempUnitMap.erase(itr);667 }668 669 for(itr = tempUnitMap.begin(); itr != tempUnitMap.end(); ++itr)670 (*itr)->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);671 m_creature->CastSpell(m_creature, SPELL_SPITE_TARGET, true); // must true672 for(itr = tempUnitMap.begin(); itr != tempUnitMap.end(); ++itr)673 (*itr)->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);674 }675 676 637 void UpdateAI(const uint32 diff) 677 638 { … … 701 662 { 702 663 DoCast(m_creature->getVictim(), SPELL_SOUL_SCREAM); 703 SoulScreamTimer = 10000;664 SoulScreamTimer = 9000 + rand()%2000; 704 665 if(!(rand()%3)) 705 666 { … … 711 672 if(SpiteTimer < diff) 712 673 { 713 if(!SpiteTargetGUID.empty()) 714 { 715 for (std::list<uint64>::iterator itr = SpiteTargetGUID.begin(); itr != SpiteTargetGUID.end(); ++itr) 716 { 717 if(Unit* target = Unit::GetUnit(*m_creature, *itr)) 718 { 719 target->RemoveAurasDueToSpell(SPELL_SPITE_TARGET); 720 m_creature->CastSpell(target, SPELL_SPITE_DAMAGE, true); 721 } 722 } 723 SpiteTargetGUID.clear(); 724 SpiteTimer = 24000; 725 } 726 else 727 { 728 SelectSpiteTarget(3); 729 SpiteTimer = 6000; 730 DoYell(ANGER_SAY_SPEC,LANG_UNIVERSAL,NULL); 731 DoPlaySoundToSet(m_creature, ANGER_SOUND_SPEC); 732 } 674 DoCast(m_creature, SPELL_SPITE_TARGET); 675 SpiteTimer = 30000; 676 DoYell(ANGER_SAY_SPEC,LANG_UNIVERSAL,NULL); 677 DoPlaySoundToSet(m_creature, ANGER_SOUND_SPEC); 733 678 }else SpiteTimer -= diff; 734 679 -
trunk/src/bindings/scripts/scripts/zone/black_temple/instance_black_temple.cpp
r90 r178 1 1 /* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> 2 * This program is free software; you can redistribute it and/or modify3 * it under the terms of the GNU General Public License as published by4 * the Free Software Foundation; either version 2 of the License, or5 * (at your option) any later version.6 *7 * This program is distributed in the hope that it will be useful,8 * but WITHOUT ANY WARRANTY; without even the implied warranty of9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the10 * GNU General Public License for more details.11 *12 * You should have received a copy of the GNU General Public License13 * along with this program; if not, write to the Free Software14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA15 */2 * This program is free software; you can redistribute it and/or modify 3 * it under the terms of the GNU General Public License as published by 4 * the Free Software Foundation; either version 2 of the License, or 5 * (at your option) any later version. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software 14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 15 */ 16 16 17 17 /* ScriptData … … 56 56 uint64 IllidanStormrage; 57 57 58 uint16 BossKilled;58 uint16 BossKilled; 59 59 60 60 uint64 NajentusGate; 61 61 uint64 MainTempleDoors; 62 uint64 ShadeOfAkamaDoor;63 uint64 CommonDoor;//Teron64 uint64 TeronDoor;65 uint64 GuurtogDoor;66 uint64 MotherDoor;67 uint64 TempleDoor;//Befor mother68 uint64 CouncilDoor;69 uint64 SimpleDoor;//council62 uint64 ShadeOfAkamaDoor; 63 uint64 CommonDoor;//Teron 64 uint64 TeronDoor; 65 uint64 GuurtogDoor; 66 uint64 MotherDoor; 67 uint64 TempleDoor;//Befor mother 68 uint64 CouncilDoor; 69 uint64 SimpleDoor;//council 70 70 uint64 IllidanGate; 71 71 uint64 IllidanDoor[2]; 72 73 72 74 73 uint32 Encounters[ENCOUNTERS]; … … 89 88 IllidanStormrage = 0; 90 89 91 BossKilled = 0;90 BossKilled = 0; 92 91 93 92 NajentusGate = 0; 94 93 MainTempleDoors = 0; 95 ShadeOfAkamaDoor= 0;96 CommonDoor = 0;//teron97 TeronDoor = 0;98 GuurtogDoor = 0;99 MotherDoor = 0;100 TempleDoor = 0;101 SimpleDoor = 0;//Bycouncil102 CouncilDoor = 0;94 ShadeOfAkamaDoor= 0; 95 CommonDoor = 0;//teron 96 TeronDoor = 0; 97 GuurtogDoor = 0; 98 MotherDoor = 0; 99 TempleDoor = 0; 100 SimpleDoor = 0;//Bycouncil 101 CouncilDoor = 0; 103 102 IllidanGate = 0; 104 103 IllidanDoor[0] = 0; … … 119 118 void OpenDoor(uint64 DoorGUID, bool open) 120 119 { 121 if(((InstanceMap*)instance)->GetPlayers().size()) 122 if(Player* first = ((InstanceMap*)instance)->GetPlayers().front()) 123 if(GameObject *Door = GameObject::GetGameObject(*first, DoorGUID)) 124 Door->SetUInt32Value(GAMEOBJECT_STATE, open ? 0 : 1); 125 } 126 127 void CloseDoor(uint64 DoorGUID, bool close) 128 { 129 if(((InstanceMap*)instance)->GetPlayers().size()) 130 if(Player* first = ((InstanceMap*)instance)->GetPlayers().front()) 131 if(GameObject *Door = GameObject::GetGameObject(*first, DoorGUID)) 132 Door->SetUInt32Value(GAMEOBJECT_STATE, close ? 1 : 0); 133 } 134 135 120 if(GameObject *Door = instance->GetGameObjectInMap(DoorGUID)) 121 Door->SetUInt32Value(GAMEOBJECT_STATE, open ? 0 : 1); 122 } 123 124 void CloseDoor(uint64 DoorGUID, bool close) 125 { 126 if(GameObject *Door = instance->GetGameObjectInMap(DoorGUID)) 127 Door->SetUInt32Value(GAMEOBJECT_STATE, close ? 1 : 0); 128 } 136 129 137 130 void OnCreatureCreate(Creature *creature, uint32 creature_entry) … … 139 132 switch(creature_entry) 140 133 { 141 case 22887: Najentus = creature->GetGUID(); break;142 case 23089: Akama = creature->GetGUID(); break;143 case 22990: Akama_Shade = creature->GetGUID(); break;144 case 22841: ShadeOfAkama = creature->GetGUID(); break;145 case 22898: Supremus = creature->GetGUID(); break;146 case 22917: IllidanStormrage = creature->GetGUID(); break;147 case 22949: GathiosTheShatterer = creature->GetGUID(); break;148 case 22950: HighNethermancerZerevor = creature->GetGUID(); break;149 case 22951: LadyMalande = creature->GetGUID(); break;150 case 22952: VerasDarkshadow = creature->GetGUID(); break;151 case 23426: IllidariCouncil = creature->GetGUID(); break;152 case 23499: BloodElfCouncilVoice = creature->GetGUID(); break;134 case 22887: Najentus = creature->GetGUID(); break; 135 case 23089: Akama = creature->GetGUID(); break; 136 case 22990: Akama_Shade = creature->GetGUID(); break; 137 case 22841: ShadeOfAkama = creature->GetGUID(); break; 138 case 22898: Supremus = creature->GetGUID(); break; 139 case 22917: IllidanStormrage = creature->GetGUID(); break; 140 case 22949: GathiosTheShatterer = creature->GetGUID(); break; 141 case 22950: HighNethermancerZerevor = creature->GetGUID(); break; 142 case 22951: LadyMalande = creature->GetGUID(); break; 143 case 22952: VerasDarkshadow = creature->GetGUID(); break; 144 case 23426: IllidariCouncil = creature->GetGUID(); break; 145 case 23499: BloodElfCouncilVoice = creature->GetGUID(); break; 153 146 } 154 147 } … … 158 151 switch(go->GetEntry()) 159 152 { 160 case 185483: // Gate past Naj'entus (at the entrance to Supermoose's courtyards)161 NajentusGate = go->GetGUID();break;162 case 185882: // Main Temple Doors - right past Supermoose (Supremus)163 MainTempleDoors = go->GetGUID();break;164 case 185478:165 ShadeOfAkamaDoor = go->GetGUID();break;166 case 185480:167 CommonDoor = go->GetGUID();break;168 case 186153:169 TeronDoor = go->GetGUID();break;170 case 185892:171 GuurtogDoor = go->GetGUID();break;172 case 185479:173 TempleDoor = go->GetGUID();break;174 case 185482:175 MotherDoor = go->GetGUID();break;176 case 185481:177 CouncilDoor = go->GetGUID();break;178 case 186152://used by council179 SimpleDoor = go->GetGUID();break;180 case 185905: // Gate leading to Temple Summit181 IllidanGate = go->GetGUID();182 go->SetUInt32Value(GAMEOBJECT_FLAGS,GO_FLAG_NODESPAWN+GO_FLAG_INTERACT_COND);183 break;184 case 186261: // Right door at Temple Summit185 IllidanDoor[0] = go->GetGUID();186 go->SetUInt32Value(GAMEOBJECT_FLAGS,GO_FLAG_NODESPAWN+GO_FLAG_INTERACT_COND);187 break;188 case 186262: // Left door at Temple Summit189 IllidanDoor[1] = go->GetGUID();190 go->SetUInt32Value(GAMEOBJECT_FLAGS,GO_FLAG_NODESPAWN+GO_FLAG_INTERACT_COND);191 break;153 case 185483: // Gate past Naj'entus (at the entrance to Supermoose's courtyards) 154 NajentusGate = go->GetGUID();break; 155 case 185882: // Main Temple Doors - right past Supermoose (Supremus) 156 MainTempleDoors = go->GetGUID();break; 157 case 185478: 158 ShadeOfAkamaDoor = go->GetGUID();break; 159 case 185480: 160 CommonDoor = go->GetGUID();break; 161 case 186153: 162 TeronDoor = go->GetGUID();break; 163 case 185892: 164 GuurtogDoor = go->GetGUID();break; 165 case 185479: 166 TempleDoor = go->GetGUID();break; 167 case 185482: 168 MotherDoor = go->GetGUID();break; 169 case 185481: 170 CouncilDoor = go->GetGUID();break; 171 case 186152://used by council 172 SimpleDoor = go->GetGUID();break; 173 case 185905: // Gate leading to Temple Summit 174 IllidanGate = go->GetGUID(); 175 go->SetUInt32Value(GAMEOBJECT_FLAGS,GO_FLAG_NODESPAWN+GO_FLAG_INTERACT_COND); 176 break; 177 case 186261: // Right door at Temple Summit 178 IllidanDoor[0] = go->GetGUID(); 179 go->SetUInt32Value(GAMEOBJECT_FLAGS,GO_FLAG_NODESPAWN+GO_FLAG_INTERACT_COND); 180 break; 181 case 186262: // Left door at Temple Summit 182 IllidanDoor[1] = go->GetGUID(); 183 go->SetUInt32Value(GAMEOBJECT_FLAGS,GO_FLAG_NODESPAWN+GO_FLAG_INTERACT_COND); 184 break; 192 185 } 193 186 } … … 197 190 switch(identifier) 198 191 { 199 case DATA_HIGHWARLORDNAJENTUS: return Najentus;200 case DATA_AKAMA: return Akama;201 case DATA_AKAMA_SHADE: return Akama_Shade;202 case DATA_SHADEOFAKAMA: return ShadeOfAkama;203 case DATA_SUPREMUS: return Supremus;204 case DATA_ILLIDANSTORMRAGE: return IllidanStormrage;205 case DATA_GATHIOSTHESHATTERER: return GathiosTheShatterer;206 case DATA_HIGHNETHERMANCERZEREVOR: return HighNethermancerZerevor;207 case DATA_LADYMALANDE: return LadyMalande;208 case DATA_VERASDARKSHADOW: return VerasDarkshadow;209 case DATA_ILLIDARICOUNCIL: return IllidariCouncil;210 case DATA_GAMEOBJECT_NAJENTUS_GATE: return NajentusGate;211 case DATA_GAMEOBJECT_ILLIDAN_GATE: return IllidanGate;212 case DATA_GAMEOBJECT_ILLIDAN_DOOR_R: return IllidanDoor[0];213 case DATA_GAMEOBJECT_ILLIDAN_DOOR_L: return IllidanDoor[1];214 case DATA_GAMEOBJECT_SUPREMUS_DOORS: return MainTempleDoors;215 case DATA_BLOOD_ELF_COUNCIL_VOICE: return BloodElfCouncilVoice;192 case DATA_HIGHWARLORDNAJENTUS: return Najentus; 193 case DATA_AKAMA: return Akama; 194 case DATA_AKAMA_SHADE: return Akama_Shade; 195 case DATA_SHADEOFAKAMA: return ShadeOfAkama; 196 case DATA_SUPREMUS: return Supremus; 197 case DATA_ILLIDANSTORMRAGE: return IllidanStormrage; 198 case DATA_GATHIOSTHESHATTERER: return GathiosTheShatterer; 199 case DATA_HIGHNETHERMANCERZEREVOR: return HighNethermancerZerevor; 200 case DATA_LADYMALANDE: return LadyMalande; 201 case DATA_VERASDARKSHADOW: return VerasDarkshadow; 202 case DATA_ILLIDARICOUNCIL: return IllidariCouncil; 203 case DATA_GAMEOBJECT_NAJENTUS_GATE: return NajentusGate; 204 case DATA_GAMEOBJECT_ILLIDAN_GATE: return IllidanGate; 205 case DATA_GAMEOBJECT_ILLIDAN_DOOR_R: return IllidanDoor[0]; 206 case DATA_GAMEOBJECT_ILLIDAN_DOOR_L: return IllidanDoor[1]; 207 case DATA_GAMEOBJECT_SUPREMUS_DOORS: return MainTempleDoors; 208 case DATA_BLOOD_ELF_COUNCIL_VOICE: return BloodElfCouncilVoice; 216 209 } 217 210 … … 223 216 switch(type) 224 217 { 225 case DATA_HIGHWARLORDNAJENTUSEVENT: Encounters[0] = data; break;226 case DATA_SUPREMUSEVENT: Encounters[1] = data; break;227 case DATA_SHADEOFAKAMAEVENT: Encounters[2] = data; break;228 case DATA_TERONGOREFIENDEVENT: Encounters[3] = data; break;229 case DATA_GURTOGGBLOODBOILEVENT: Encounters[4] = data; break;230 case DATA_RELIQUARYOFSOULSEVENT: Encounters[5] = data; break;231 case DATA_MOTHERSHAHRAZEVENT: Encounters[6] = data; break;232 case DATA_ILLIDARICOUNCILEVENT: Encounters[7] = data; break;233 case DATA_ILLIDANSTORMRAGEEVENT: Encounters[8] = data; break;218 case DATA_HIGHWARLORDNAJENTUSEVENT: Encounters[0] = data; break; 219 case DATA_SUPREMUSEVENT: Encounters[1] = data; break; 220 case DATA_SHADEOFAKAMAEVENT: Encounters[2] = data; break; 221 case DATA_TERONGOREFIENDEVENT: Encounters[3] = data; break; 222 case DATA_GURTOGGBLOODBOILEVENT: Encounters[4] = data; break; 223 case DATA_RELIQUARYOFSOULSEVENT: Encounters[5] = data; break; 224 case DATA_MOTHERSHAHRAZEVENT: Encounters[6] = data; break; 225 case DATA_ILLIDARICOUNCILEVENT: Encounters[7] = data; break; 226 case DATA_ILLIDANSTORMRAGEEVENT: Encounters[8] = data; break; 234 227 } 235 228 236 229 if(data == DONE) 237 {230 { 238 231 SaveToDB(); 239 BossKilled++;240 }241 CheckInstanceStatus();242 } 243 244 void CheckInstanceStatus()245 {246 if(BossKilled >= 6)247 OpenDoor(TempleDoor, true);248 if(Encounters[0] == DONE)249 OpenDoor(NajentusGate, true);250 if(Encounters[2] == IN_PROGRESS)251 CloseDoor(ShadeOfAkamaDoor, true);252 else OpenDoor(ShadeOfAkamaDoor, true);253 if(Encounters[3] == IN_PROGRESS)254 {255 CloseDoor(TeronDoor, true);256 CloseDoor(CommonDoor, true);257 }else{258 OpenDoor(TeronDoor, true);259 OpenDoor(CommonDoor, true);260 }261 if(Encounters[4] == DONE)262 OpenDoor(GuurtogDoor, true);263 if(Encounters[6] == DONE)264 OpenDoor(MotherDoor, true);265 if(Encounters[7] == IN_PROGRESS)266 {267 CloseDoor(CouncilDoor, true);268 CloseDoor(SimpleDoor, true);269 }else{270 OpenDoor(CouncilDoor, true);271 OpenDoor(SimpleDoor, true);272 }273 }232 BossKilled++; 233 } 234 CheckInstanceStatus(); 235 } 236 237 void CheckInstanceStatus() 238 { 239 if(BossKilled >= 6) 240 OpenDoor(TempleDoor, true); 241 if(Encounters[0] == DONE) 242 OpenDoor(NajentusGate, true); 243 if(Encounters[2] == IN_PROGRESS) 244 CloseDoor(ShadeOfAkamaDoor, true); 245 else OpenDoor(ShadeOfAkamaDoor, true); 246 if(Encounters[3] == IN_PROGRESS) 247 { 248 CloseDoor(TeronDoor, true); 249 CloseDoor(CommonDoor, true); 250 }else{ 251 OpenDoor(TeronDoor, true); 252 OpenDoor(CommonDoor, true); 253 } 254 if(Encounters[4] == DONE) 255 OpenDoor(GuurtogDoor, true); 256 if(Encounters[6] == DONE) 257 OpenDoor(MotherDoor, true); 258 if(Encounters[7] == IN_PROGRESS) 259 { 260 CloseDoor(CouncilDoor, true); 261 CloseDoor(SimpleDoor, true); 262 }else{ 263 OpenDoor(CouncilDoor, true); 264 OpenDoor(SimpleDoor, true); 265 } 266 } 274 267 275 268 uint32 GetData(uint32 type) … … 277 270 switch(type) 278 271 { 279 case DATA_HIGHWARLORDNAJENTUSEVENT: return Encounters[0];280 case DATA_SUPREMUSEVENT: return Encounters[1];281 case DATA_SHADEOFAKAMAEVENT: return Encounters[2];282 case DATA_TERONGOREFIENDEVENT: return Encounters[3];283 case DATA_GURTOGGBLOODBOILEVENT: return Encounters[4];284 case DATA_RELIQUARYOFSOULSEVENT: return Encounters[5];285 case DATA_MOTHERSHAHRAZEVENT: return Encounters[6];286 case DATA_ILLIDARICOUNCILEVENT: return Encounters[7];287 case DATA_ILLIDANSTORMRAGEEVENT: return Encounters[8];272 case DATA_HIGHWARLORDNAJENTUSEVENT: return Encounters[0]; 273 case DATA_SUPREMUSEVENT: return Encounters[1]; 274 case DATA_SHADEOFAKAMAEVENT: return Encounters[2]; 275 case DATA_TERONGOREFIENDEVENT: return Encounters[3]; 276 case DATA_GURTOGGBLOODBOILEVENT: return Encounters[4]; 277 case DATA_RELIQUARYOFSOULSEVENT: return Encounters[5]; 278 case DATA_MOTHERSHAHRAZEVENT: return Encounters[6]; 279 case DATA_ILLIDARICOUNCILEVENT: return Encounters[7]; 280 case DATA_ILLIDANSTORMRAGEEVENT: return Encounters[8]; 288 281 } 289 282 … … 320 313 std::istringstream stream(in); 321 314 stream >> Encounters[0] >> Encounters[1] >> Encounters[2] >> Encounters[3] 322 >> Encounters[4] >> Encounters[5] >> Encounters[6] >> Encounters[7]323 >> Encounters[8];315 >> Encounters[4] >> Encounters[5] >> Encounters[6] >> Encounters[7] 316 >> Encounters[8]; 324 317 for(uint8 i = 0; i < ENCOUNTERS; ++i) 325 318 if(Encounters[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead.
![(please configure the [header_logo] section in trac.ini)](/TrinityCore/trac.cgi/chrome/site/your_project_logo.png)