Guest User

Untitled

a guest
Jun 24th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 29.08 KB | None | 0 0
  1. #include "ScriptPCH.h"
  2. #include "karazhan.h"
  3.  
  4. #define ALLI_CREATURE_FACTION 1690
  5. #define HORDE_CREATURE_FACTION 1689
  6. #define DUST_COVERED_CHEST  185119
  7.  
  8. #define GOSSIP_POSSES "Ich übernehme!" //need correction
  9.  
  10. #define EVENT_START "Lasst uns Schach spielen!"
  11. #define NPC_ATTACK_RADIUS 7
  12.  
  13. #define SAY_AT_EVENT_START "Sehr gutw. Lasst das Spiel beginnen."
  14. #define SOUND_START 10338
  15.  
  16. #define SAY_LOSE_KNIGHT_P "Yes...all according to plan."
  17. #define SOUND_KNIGHT_LOSE_P 10349
  18. #define SAY_LOSE_KNIGHT_M "Ja... natürlich."
  19. #define SOUND_KNIGHT_LOSE_M 10350
  20.  
  21. #define SAY_LOSE_PAWN_P_1 "A transparent stratagem."
  22. #define SOUND_LOSE_PAWN_P_1 10339
  23. #define SAY_LOSE_PAWN_P_2 "Sehen wir mal."
  24. #define SOUND_LOSE_PAWN_P_2 10340
  25. #define SAY_LOSE_PAWN_P_3 "Ah, the wheels have begun to turn."
  26. #define SOUND_LOSE_PAWN_P_3 10341
  27. #define SAY_LOSE_PAWN_M_1 "Hmm."
  28. #define SOUND_LOSE_PAWN_M_1 10342
  29. #define SAY_LOSE_PAWN_M_2 "Egal!"
  30. #define SOUND_LOSE_PAWN_M_2 10344
  31. #define SAY_LOSE_PAWN_M_3 "Interesting."
  32. #define SOUND_LOSE_PAWN_M_3 10343
  33.  
  34. #define SAY_LOSE_QUEEN_P "Now it gets interesting."
  35. #define SOUND_LOSE_QUEEN_P 10351
  36. #define SAY_LOSE_QUEEN_M "Ahh, I should have known."
  37. #define SOUND_LOSE_QUEEN_M 10352
  38.  
  39. #define SAY_LOSE_BISHOP_P "The slightest loss of concentration is all it takes."
  40. #define SOUND_LOSE_BISHOP_P 10347
  41. #define SAY_LOSE_BISHOP_M "A necessary sacrifice."
  42. #define SOUND_LOSE_BISHOP_M 10348
  43.  
  44. #define SAY_LOSE_ROOK_P "Foolish! Very foolish!"
  45. #define SOUND_LOSE_ROOK_P 10345
  46. #define SAY_LOSE_ROOK_M "A minor concern."
  47. #define SOUND_LOSE_ROOK_M 10346
  48.  
  49. #define SAY_PLAYER_CHECK "And so, the end draws near."
  50. #define SOUND_PLAYER_CHECK 10353
  51. #define SAY_MEDIVH_CHECK "As it should be."
  52. #define SOUND_MEDIVH_CHECK 10354
  53.  
  54. #define SAY_PLAYER_WIN "And so it ends."
  55. #define SOUND_PLAYER_WIN 10355
  56. #define SAY_MEDIVH_WIN "Nothing less than perfection will do."
  57. #define SOUND_MEDIVH_WIN 10356
  58.  
  59. #define SAY_MEDIVH_CHEAT_1 "Perhaps a change is in order."
  60. #define SOUND_MEDIVH_CHEAT_1 //10357
  61. #define SAY_MEDIVH_CHEAT_2 "Time for an alternative scenario."
  62. #define SOUND_MEDIVH_CHEAT_2 10358
  63. #define SAY_MEDIVH_CHEAT_3 "One must not become too complacent."
  64. #define SOUND_MEDIVH_CHEAT_3 10359
  65.  
  66. #define SPELL_HAND_OF_MEDIVH 39339 //berserk spell
  67. #define SPELL_FURY_OF_MEDIVH 39383 //aoe spell
  68. //and we have another cheat medivh heals the target to max.(m_creature->sethealth(m_creature->getmaxhealth()))
  69.  
  70. #define TRIGGER_ID 22519
  71.  
  72. #define NPC_MEDIVH 16816
  73.  
  74. #define NPC_PAWN_H 17469
  75. #define NPC_PAWN_A 17211
  76.  
  77. #define NPC_KNIGHT_H 21748
  78. #define NPC_KNIGHT_A 21664
  79.  
  80. #define NPC_QUEEN_H 21750
  81. #define NPC_QUEEN_A 21683
  82.  
  83. #define NPC_BISHOP_H 21747
  84. #define NPC_BISHOP_A 21682
  85.  
  86. #define BISHOP_HEAL_H 37456
  87. #define BISHOP_HEAL_A 37455
  88.  
  89. #define NPC_ROOK_H 21726
  90. #define NPC_ROOK_A 21160
  91.  
  92. #define NPC_KING_H 21752
  93. #define NPC_KING_A 21684
  94.  
  95. #define SPELL_MOVE_1 37146
  96. #define SPELL_MOVE_2 30012
  97. #define SPELL_MOVE_3 37144
  98. #define SPELL_MOVE_4 37148
  99. #define SPELL_MOVE_5 37151
  100. #define SPELL_MOVE_6 37152
  101. #define SPELL_MOVE_7 37153
  102.  
  103. #define SPELL_CHANGE_FACING 30284
  104. #define SPELL_MOVE_MARKER 32261
  105.  
  106. #define SEARCH_RANGE 5
  107.  
  108. class move_trigger : public CreatureScript
  109. {
  110. public:
  111.     move_trigger() : CreatureScript("move_trigger") { }
  112.  
  113.     CreatureAI* GetAI(Creature* creature) const
  114.     {
  115.         return new move_triggerAI(creature);
  116.     }
  117.  
  118.     struct move_triggerAI : public ScriptedAI
  119.     {
  120.         move_triggerAI(Creature* c) : ScriptedAI(c)
  121.         {
  122.             instance = c->GetInstanceScript();
  123.         }
  124.  
  125.         InstanceScript* instance;
  126.         uint32 search_time;
  127.         Unit *unit_on_me;
  128.        
  129.         void Reset()
  130.         {
  131.             search_time = 4500;//imho better with movementinformation but possedai override scriptedai.dont work with movementinformation
  132.             unit_on_me = NULL;
  133.         }
  134.        
  135.         void Aggro(Unit *){}
  136.         void UpdateAI(const uint32 diff)
  137.            
  138.         //haxx?
  139.         {
  140.             if(instance->GetData(TYPE_CHESS) != IN_PROGRESS)
  141.                 return;
  142.             if(unit_on_me != NULL)
  143.             {
  144.                 if(search_time < diff )
  145.             {
  146.             if(m_creature->GetDistance2d(unit_on_me) != 0 || unit_on_me->isAlive())
  147.             {
  148.                 unit_on_me = NULL;
  149.             }
  150.  
  151.             search_time = 500;
  152.         }
  153.         else search_time -= diff;
  154.     }
  155. }
  156.  
  157. void SpellHit(Unit *caster,const SpellEntry *spell)
  158. {
  159.     if(spell->Id == SPELL_CHANGE_FACING)
  160.         caster->SetInFront(m_creature);
  161.     if(spell->Id == SPELL_MOVE_1 || spell->Id == SPELL_MOVE_2 || spell->Id == SPELL_MOVE_3
  162.         || spell->Id == SPELL_MOVE_4 || spell->Id == SPELL_MOVE_5 || spell->Id == SPELL_MOVE_6
  163.         || spell->Id == SPELL_MOVE_7)
  164.     {
  165.         if(unit_on_me != NULL)
  166.             return;
  167.         caster->GetMotionMaster()->Clear();
  168.         caster->GetMotionMaster()->MovePoint(0,m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());
  169.         unit_on_me = caster;
  170.         DoCast(m_creature,SPELL_MOVE_MARKER);
  171.     }
  172. }
  173. };
  174.  
  175. class chess_npc : public CreatureScript
  176. {
  177. public:
  178.     chess_npc() : CreatureScript("chess_npc") { }
  179.  
  180.     CreatureAI* GetAI(Creature* creature) const
  181.     {
  182.         return new chess_npcAI(creature);
  183.     }
  184.  
  185.     struct chess_npcAI : public ScriptedAI
  186.     {
  187.         Creature *npc_medivh;
  188.         bool sendedtohome;
  189.         bool isInGame;
  190.         bool canmove;
  191.         uint32 original_faction_of_player;
  192.         Unit *creaturecharmer;
  193.         uint64 medivhGUID;
  194.         InstanceScript* pInstance;
  195.         uint32 healtimer;
  196.         uint32 move_timer;
  197.         std::list<Unit *> PossibleMoveUnits;
  198.         uint64 playerGUID;
  199.  
  200.     void MoveInLineOfSight(Unit *who)
  201.     {
  202.         if (Creature->getVictim() && who->isTargetableForAttack() && ( creature->IsHostileTo( who )) && who->isInAccessiblePlaceFor(m_creature) )
  203.         {
  204.             if (!m_creature->canFly() && m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
  205.                 return;
  206.  
  207.             if( m_creature->IsWithinDistInMap(who, NPC_ATTACK_RADIUS) && m_creature->IsWithinLOSInMap(who) && isInGame)
  208.             {
  209.                 who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
  210.                 AttackStart(who);
  211.                 playerGUID = who->GetGUID();
  212.             }
  213.         }
  214.     }
  215.     void Aggro(Unit *Unit)
  216.     {
  217.         ImageGUID = pInstance->GetData64(DATA_IMAGE_OF_MEDIVH);
  218.         npc_medivh = (Creature*)Unit::GetUnit(*m_creature,ImageGUID);
  219.         Player* player = Unit::GetPlayer(playerGUID);
  220.         if(npc_medivh && player)
  221.         {
  222.                
  223.  
  224.             if (player->GetTeam() == ALLIANCE)
  225.             {
  226.                 if(m_creature->GetEntry() == NPC_KING_H)
  227.                 {
  228.                     npc_medivh->Say(SAY_MEDIVH_CHECK,LANG_UNIVERSAL,NULL);
  229.                 }
  230.                 else if(m_creature->GetEntry() == NPC_KING_A)
  231.                 {
  232.                     npc_medivh->Say(SAY_PLAYER_CHECK,LANG_UNIVERSAL,NULL);
  233.                 }
  234.             }
  235.             else
  236.             {
  237.                 if(m_creature->GetEntry() == NPC_KING_A)
  238.                 {
  239.                     npc_medivh->Say(SAY_MEDIVH_CHECK,LANG_UNIVERSAL,NULL);
  240.                 }
  241.                 else if(m_creature->GetEntry() == NPC_KING_H)
  242.                 {
  243.                     npc_medivh->Say(SAY_PLAYER_CHECK,LANG_UNIVERSAL,NULL);
  244.                 }
  245.             }
  246.         }
  247.     }
  248.  
  249.     void Reset()
  250.     {
  251.         healtimer = 7000;
  252.         sendedtohome = false;
  253.         isInGame = true;
  254.         canmove = true;
  255.         move_timer = 3000; //we wait 3s with move
  256.         creature->setActive(true);
  257.         playerGUID = 0;
  258.     }
  259.     void JustRespawned(){
  260.         //not finally - just a presentation - need 32place two side of chesstable
  261.         float angle = creature->GetOrientation();
  262.         float pos_x = -11066;
  263.         float pos_y = -1898;
  264.         int move_lenght = 2*rand()%10;
  265.         float new_x = pos_x + move_lenght * cos(angle);
  266.         float new_y = pos_y + move_lenght * sin(angle);
  267.         m_creature->Relocate(new_x,new_y,221,2.24);
  268.         m_creature->CombatStop();
  269.         m_creature->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NOT_SELECTABLE);
  270.     }
  271.     void JustDied(Unit *Killer)
  272.     {
  273.         isInGame = false;
  274.         creature->setActive(false);
  275.         creature->Respawn();
  276.     }
  277.     void OnPossess(bool Apply)
  278.     {
  279.         if(Apply)
  280.         {
  281.             original_faction_of_player = creature->GetCharmer()->getFaction();
  282.             creaturecharmer = m_creature->GetCharmer();
  283.             //very big haxx imho, need fix in posses patch(make creature attackable by *_Creature_faction)
  284.             Player* player = Unit::GetPlayer(playerGUID);
  285.             if (!player)
  286.                 return;
  287.             if(player->GetTeam() == ALLIANCE)
  288.             {
  289.                 m_creature->setFaction(ALLI_CREATURE_FACTION);
  290.                 creaturecharmer->setFaction(ALLI_CREATURE_FACTION);
  291.             }
  292.             else
  293.             {
  294.                 m_creature->setFaction(HORDE_CREATURE_FACTION);
  295.                 creaturecharmer->setFaction(HORDE_CREATURE_FACTION);
  296.             }
  297.         }
  298.         else
  299.         {
  300.             creaturecharmer->setFaction(original_faction_of_player);
  301.         }
  302.  
  303.     }
  304.     void KilledUnit(Unit* victim)
  305.     {
  306.         ImageGUID = pInstance->GetData64(DATA_IMAGE_OF_MEDIVH);
  307.         npc_medivh = (Creature*)Unit::GetUnit(*creature,ImageGUID);
  308.         Player* player = Unit::GetPlayer(playerGUID);
  309.         if(!npc_medivh || !player)
  310.             return;
  311.  
  312.         if(player->GetTeam() == HORDE)
  313.         {
  314.             switch(victim->GetEntry())
  315.             {
  316.                 case NPC_ROOK_H: npc_medivh->Say(SAY_LOSE_ROOK_P,LANG_UNIVERSAL,NULL);break;
  317.                 case NPC_ROOK_A: npc_medivh->Say(SAY_LOSE_ROOK_M,LANG_UNIVERSAL,NULL);break;
  318.                 case NPC_QUEEN_H: npc_medivh->Say(SAY_LOSE_QUEEN_P,LANG_UNIVERSAL,NULL);break;
  319.                 case NPC_QUEEN_A: npc_medivh->Say(SAY_LOSE_QUEEN_M,LANG_UNIVERSAL,NULL);break;
  320.                 case NPC_BISHOP_H: npc_medivh->Say(SAY_LOSE_BISHOP_P,LANG_UNIVERSAL,NULL);break;
  321.                 case NPC_BISHOP_A: npc_medivh->Say(SAY_LOSE_BISHOP_M,LANG_UNIVERSAL,NULL);break;
  322.                 case NPC_KNIGHT_H: npc_medivh->Say(SAY_LOSE_KNIGHT_P,LANG_UNIVERSAL,NULL);break;
  323.                 case NPC_KNIGHT_A: npc_medivh->Say(SAY_LOSE_KNIGHT_M,LANG_UNIVERSAL,NULL);break;
  324.                 case NPC_PAWN_H:
  325.                 switch(rand()%3)
  326.                 {
  327.                 case 0:npc_medivh->Say(SAY_LOSE_PAWN_P_1,LANG_UNIVERSAL,NULL);break;
  328.                 case 1:npc_medivh->Say(SAY_LOSE_PAWN_P_2,LANG_UNIVERSAL,NULL);break;
  329.                 case 2:npc_medivh->Say(SAY_LOSE_PAWN_P_3,LANG_UNIVERSAL,NULL);break;
  330.                 }
  331.                 break;
  332.                 case NPC_PAWN_A:
  333.                 switch(rand()%2)
  334.                 {
  335.                 case 0:npc_medivh->Say(SAY_LOSE_PAWN_M_1,LANG_UNIVERSAL,NULL);break;
  336.                 case 1:npc_medivh->Say(SAY_LOSE_PAWN_M_2,LANG_UNIVERSAL,NULL);break;
  337.                 }
  338.                 break;
  339.                 case NPC_KING_H:
  340.                 npc_medivh->Say(SAY_MEDIVH_WIN,LANG_UNIVERSAL,NULL);
  341.                 pInstance->SetData(TYPE_CHESS,FAIL);
  342.                 break;
  343.                 case NPC_KING_A:
  344.                 npc_medivh->Say(SAY_PLAYER_WIN,LANG_UNIVERSAL,NULL);
  345.                 pInstance->SetData(TYPE_CHESS,DONE);
  346.                 npc_medivh->SummonGameObject(DUST_COVERED_CHEST,-11058,-1903,221,2.24,0,0,0,0,7200000);
  347.                 break;
  348.                 default:
  349.                 break;
  350.             }
  351.         }
  352.         else
  353.         {
  354.             switch(victim->GetEntry())
  355.             {
  356.                 case NPC_ROOK_A: npc_medivh->Say(SAY_LOSE_ROOK_P,LANG_UNIVERSAL,NULL);break;
  357.                 case NPC_ROOK_H: npc_medivh->Say(SAY_LOSE_ROOK_M,LANG_UNIVERSAL,NULL);break;
  358.                 case NPC_QUEEN_A: npc_medivh->Say(SAY_LOSE_QUEEN_P,LANG_UNIVERSAL,NULL);break;
  359.                 case NPC_QUEEN_H: npc_medivh->Say(SAY_LOSE_QUEEN_M,LANG_UNIVERSAL,NULL);break;
  360.                 case NPC_BISHOP_A: npc_medivh->Say(SAY_LOSE_BISHOP_P,LANG_UNIVERSAL,NULL);break;
  361.                 case NPC_BISHOP_H: npc_medivh->Say(SAY_LOSE_BISHOP_M,LANG_UNIVERSAL,NULL);break;
  362.                 case NPC_KNIGHT_A: npc_medivh->Say(SAY_LOSE_KNIGHT_P,LANG_UNIVERSAL,NULL);break;
  363.                 case NPC_KNIGHT_H: npc_medivh->Say(SAY_LOSE_KNIGHT_M,LANG_UNIVERSAL,NULL);break;
  364.                 case NPC_PAWN_A:
  365.                 switch(rand()%3)
  366.                 {
  367.                 case 0:npc_medivh->Say(SAY_LOSE_PAWN_P_1,LANG_UNIVERSAL,NULL);break;
  368.                 case 1:npc_medivh->Say(SAY_LOSE_PAWN_P_2,LANG_UNIVERSAL,NULL);break;
  369.                 case 2:npc_medivh->Say(SAY_LOSE_PAWN_P_3,LANG_UNIVERSAL,NULL);break;
  370.                 }
  371.                 case NPC_PAWN_H:
  372.                 switch(rand()%2)
  373.                 {
  374.                 case 0:npc_medivh->Say(SAY_LOSE_PAWN_M_1,LANG_UNIVERSAL,NULL);break;
  375.                 case 1:npc_medivh->Say(SAY_LOSE_PAWN_M_2,LANG_UNIVERSAL,NULL);break;
  376.                 }
  377.                 break;
  378.                 case NPC_KING_A:
  379.                 npc_medivh->Say(SAY_MEDIVH_WIN,LANG_UNIVERSAL,NULL);
  380.                 pInstance->SetData(TYPE_CHESS,FAIL);
  381.                 break;
  382.                 case NPC_KING_H:
  383.                 npc_medivh->Say(SAY_PLAYER_WIN,LANG_UNIVERSAL,NULL);
  384.                 pInstance->SetData(TYPE_CHESS,DONE);
  385.                 npc_medivh->SummonGameObject(DUST_COVERED_CHEST,-11058,-1903,221,2.24,0,0,0,0,7200000);
  386.                 break;
  387.                 default:
  388.                 break;
  389.             }
  390.         }
  391.         if(victim->isPossessed())
  392.         {
  393.             victim->RemoveCharmAuras();
  394.         }      
  395.  
  396.     }
  397.     std::list<Unit*> FindPossibleMoveUnits()
  398.     {
  399.         //need argument for strafe/forwardmove
  400.         CellPair p(Trinity::ComputeCellPair(m_creature->GetPositionX(), creature->GetPositionY()));
  401.         Cell cell(p);
  402.         cell.data.Part.reserved = ALL_DISTRICT;
  403.         cell.SetNoCreate();
  404.  
  405.         std::list<Unit*> pList;
  406.         std::list<Unit*> returnList;
  407.         float range = GetStrafeLenght(m_creature->GetEntry())*SEARCH_RANGE;
  408.  
  409.         Trinity::AnyUnitInObjectRangeCheck u_check(creature,range);
  410.         Trinity::UnitListSearcher<Trinity::AnyUnitInObjectRangeCheck> searcher(pList, u_check);
  411.         TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyUnitInObjectRangeCheck>, GridTypeMapContainer >  grid_unit_searcher(searcher);
  412.  
  413.         CellLock<GridReadGuard> cell_lock(cell, p);
  414.         cell_lock->Visit(cell_lock, grid_unit_searcher, *(m_creature->GetMap()));
  415.         for(std::list<Unit *>::iterator itr = pList.begin(); itr != pList.end();itr++)
  416.     {
  417.         if((*itr)->GetEntry() != TRIGGER_ID)
  418.         {
  419.             continue;
  420.         }
  421.         returnList.push_back((*itr));
  422.         pList.clear();
  423.         return returnList;
  424.     }
  425.  
  426.     int GetStrafeLenght(uint32 Entry)
  427.     {
  428.         if(Entry == NPC_QUEEN_H ||Entry == NPC_QUEEN_A)
  429.             return 2;
  430.         return 1;
  431.     }
  432.     void UpdateAI(const uint32 diff)
  433.     {
  434.  
  435.         if(pInstance->GetData(DATA_CHESS_EVENT) == DONE || pInstance->GetData(DATA_CHESS_EVENT) == FAIL)
  436.         {
  437.             if(m_creature->isInCombat())
  438.                 m_creature->CombatStop();          
  439.  
  440.             if(m_creature->isPossessed())
  441.                 m_creature->RemoveCharmAuras();
  442.  
  443.             if(m_creature->HasFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NOT_SELECTABLE))
  444.                 m_creature->RemoveFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NOT_SELECTABLE);
  445.  
  446.             if(!sendedtohome)
  447.             {
  448.                 m_creature->GetMotionMaster()->Clear();
  449.                 m_creature->GetMotionMaster()->MoveTargetedHome();
  450.                 sendedtohome = true;
  451.             }
  452.         }
  453.         if(pInstance->GetData(DATA_CHESS_EVENT) != IN_PROGRESS)
  454.             return;
  455.  
  456.         if(sendedtohome) //for fail
  457.         {
  458.             sendedtohome = false;
  459.         }
  460.         if(!isInGame)
  461.             return;
  462.  
  463.         if(!m_creature->isPossessed())
  464.         {
  465.             if(!canmove)
  466.             {
  467.                 if(move_timer < diff)
  468.                 {
  469.                     canmove = true;
  470.                     move_timer = 6000;
  471.                     move_timer -= diff;
  472.                 }
  473.             }
  474.  
  475.             if(!m_creature->getVictim())
  476.             {
  477.                 if(!canmove)
  478.                     return;
  479.  
  480.                 PossibleMoveUnits = FindPossibleMoveUnits();
  481.                 if(PossibleMoveUnits.empty())
  482.                     return;
  483.                 std::list<Unit*>::iterator i = PossibleMoveUnits.begin();
  484.                 advance ( i ,rand()%PossibleMoveUnits.size());
  485.                 DoCast((*i),SPELL_MOVE_1);
  486.                 canmove = false;
  487.             }
  488.  
  489.             switch(m_creature->GetEntry())
  490.             {
  491.                 case NPC_ROOK_A:break;
  492.                 case NPC_ROOK_H:break;
  493.                 case NPC_QUEEN_A:break;
  494.                 case NPC_QUEEN_H:break;
  495.                 case NPC_BISHOP_A:
  496.                 if(healtimer <= diff)
  497.                 {
  498.                     Unit *target = DoSelectLowestHpFriendly(25,5000); //dont select player controlled unit
  499.                     if(target)
  500.                     DoCast(target,BISHOP_HEAL_A);
  501.                     healtimer = 21000;
  502.                 }
  503.                 else healtimer -= diff;
  504.                 break;
  505.                 case NPC_BISHOP_H:
  506.                 if(healtimer <= diff)
  507.                 {
  508.                     Unit *target = DoSelectLowestHpFriendly(25,5000); //dont select player controlled unit
  509.                     if(target)
  510.                     DoCast(target,BISHOP_HEAL_H);
  511.                     healtimer = 21000;
  512.                 }
  513.                 else healtimer -= diff;
  514.                 break;
  515.                 case NPC_KNIGHT_A:break;
  516.                 case NPC_KNIGHT_H:break;
  517.                 case NPC_PAWN_A:break;
  518.                 case NPC_PAWN_H:break;
  519.                 case NPC_KING_A:break;
  520.                 case NPC_KING_H:break;
  521.                 default:
  522.                 break;
  523.             }
  524.             if(m_creature->getVictim() || !m_creature->IsWithinDistInMap(m_creature->getVictim(), NPC_ATTACK_RADIUS))
  525.             {
  526.                 m_creature->CombatStop();
  527.                 return;
  528.             }
  529.         }
  530.  
  531.         DoMeleeAttackIfReady();
  532.     }
  533. };
  534.  
  535. bool GossipHello_chess_npc(Player* player, Creature* _Creature)
  536. {
  537.     InstanceScript* pInstance = ((InstanceScript*)_Creature->GetInstanceScript());
  538.  
  539.     if(pInstance->GetData(TYPE_CHESS) != IN_PROGRESS)
  540.         return true;
  541.     if(player->GetTeam() == ALLIANCE && _Creature->getFaction() != ALLI_CREATURE_FACTION)
  542.         return true;
  543.     if(player->GetTeam() == HORDE && _Creature->getFaction() != HORDE_CREATURE_FACTION)
  544.         return true;
  545.     if(!_Creature->isPossessedByPlayer())
  546.          player->ADD_GOSSIP_ITEM(0, GOSSIP_POSSES, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
  547.          player->SEND_GOSSIP_MENU(8990, _Creature->GetGUID());
  548.     return true;
  549. }
  550.  
  551. bool GossipSelect_chess_npc(Player* player, Creature* _Creature, uint32 sender, uint32 action)
  552. {
  553.     if(action == GOSSIP_ACTION_INFO_DEF + 1)
  554.     {
  555.         _Creature->SetCharmedOrPossessedBy(player, true);
  556.         //player->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_DISABLE_MOVE);
  557.         //_Creature->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_DISABLE_MOVE);
  558.     }
  559.  
  560.     player->CLOSE_GOSSIP_MENU();
  561.     return true;
  562. }
  563.  
  564. bool GossipHello_npc_echo_of_medivh(Player* player, Creature* _Creature)
  565. {
  566.     InstanceScript* pInstance = ((InstanceScript*)_Creature->GetInstanceScript());
  567.     if(pInstance->GetData(TYPE_CHESS) == FAIL)
  568.     {
  569.         pInstance->SetData(TYPE_CHESS,NOT_STARTED);
  570.     }
  571.     if(pInstance->GetData(TYPE_CHESS) == DONE) //for testing
  572.     {
  573.         pInstance->SetData(TYPE_CHESS,NOT_STARTED);
  574.     }
  575.  
  576.     if(pInstance->GetData(TYPE_CHESS) != NOT_STARTED)
  577.         return true;
  578.  
  579.     player->ADD_GOSSIP_ITEM(0, EVENT_START, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
  580.     player->SEND_GOSSIP_MENU(8990, _Creature->GetGUID());
  581.     //_Creature->GetNpcTextId()
  582.     return true;
  583. }
  584.  
  585. bool GossipSelect_npc_echo_of_medivh(Player* player, Creature* _Creature, uint32 sender, uint32 action)
  586. {
  587.     InstanceScript* pInstance = ((InstanceScript*)_Creature->GetInstanceScript());
  588.  
  589.     if(action == GOSSIP_ACTION_INFO_DEF + 1)
  590.     {
  591.         _Creature->Say(SAY_AT_EVENT_START,LANG_UNIVERSAL,NULL);
  592.         pInstance->SetData(TYPE_CHESS,IN_PROGRESS);
  593.         //pInstance->SetData(CHESS_EVENT_TEAM,player->GetTeam());
  594.         _Creature->GetMotionMaster()->MoveConfused();
  595.         //player->TeleportTo(-11054.032,-1909.979,229.626,2.190);
  596.     }
  597.  
  598.     player->CLOSE_GOSSIP_MENU();
  599.     return true;
  600. }
  601.  
  602. void AddSC_chess_event()
  603. {
  604.     new chess_npc();
  605.     new npc_echo_of_medivh();
  606.     new chess_move_trigger();
  607. }
  608. /*
  609. UPDATE creature_template SET spell3=37462, spell4=37465 WHERE entry=21683;
  610. UPDATE creature_template SET spell2=37148, spell3=37471, spell4=37474 WHERE entry=21684;
  611. UPDATE creature_template SET spell2=37152, spell3=37455, spell4=37459 WHERE entry=21682;
  612. UPDATE creature_template SET spell1=30284, spell2=37144, spell3=37453, spell4=37498 WHERE entry=21664;
  613. UPDATE creature_template SET spell2=37151, spell3=37427, spell4=37432 WHERE entry=21160;
  614. UPDATE creature_template SET spell2=37146, spell3=37406, spell4=37414 WHERE entry=17211;
  615. UPDATE creature_template SET spell3=37472, spell4=37476 WHERE entry=21752;
  616. UPDATE creature_template SET spell3=37463, spell4=37461 WHERE entry=21750;
  617. UPDATE creature_template SET spell2=37152, spell3=37456, spell4=37461 WHERE entry=21747;
  618. UPDATE creature_template SET spell1=30284, spell2=37144, spell3=37454, spell4=37502 WHERE entry=21748;
  619. UPDATE creature_template SET spell2=37151, spell3=37434, spell4=37428 WHERE entry=21726;
  620. UPDATE creature_template SET spell2=37146, spell3=37413, spell4=37416 WHERE entry=17469;
  621.  
  622. update creature_template set scriptname = "chess_npc" where entry in (17469,17211,21748,21664,21750,21683,21747,21682,21726,21160,21752,21684);
  623. update creature_template set scriptname = "npc_echo_of_medivh" where entry = 16816;
  624. update creature_template set scriptname = "chess_move_trigger" where entry = 22519;
  625.  
  626. INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `DeathState`, `MovementType`) VALUES (NULL, 16816, 532, 1, 0, 0, -11074, -1853.28, 220.667, 3.84199, 7200, 0, 0, 50000, 0, 0, 0);
  627.  
  628. Triggers
  629.  
  630. UPDATE creature SET position_x = '-11089.131836', position_y = '-1841.463867', position_z = '221.070999', orientation = '5.734146' WHERE guid = '1523302';
  631. DELETE FROM creature WHERE guid = '1523981';
  632. INSERT INTO creature VALUES (1523981,22519,532,1,0,0,-11078.3,-1848.74,220.668,5.41802,25,0,0,8,0,0,0);
  633. DELETE FROM creature WHERE guid = '1523983';
  634. INSERT INTO creature VALUES (1523983,22519,532,1,0,0,-11074.1,-1853.58,220.668,5.41802,25,0,0,8,0,0,0);
  635. DELETE FROM creature WHERE guid = '1523985';
  636. INSERT INTO creature VALUES (1523985,22519,532,1,0,0,-11070.8,-1857.51,220.668,5.41802,25,0,0,8,0,0,0);
  637. DELETE FROM creature WHERE guid = '1523987';
  638. INSERT INTO creature VALUES (1523987,22519,532,1,0,0,-11067.3,-1861.65,220.668,5.41802,25,0,0,8,0,0,0);
  639. DELETE FROM creature WHERE guid = '1523989';
  640. INSERT INTO creature VALUES (1523989,22519,532,1,0,0,-11063.7,-1865.84,220.668,3.81895,25,0,0,8,0,0,0);
  641. DELETE FROM creature WHERE guid = '1523991';
  642. INSERT INTO creature VALUES (1523991,22519,532,1,0,0,-11059.8,-1870.83,220.668,2.84192,25,0,0,8,0,0,0);
  643. DELETE FROM creature WHERE guid = '1523993';
  644. INSERT INTO creature VALUES (1523993,22519,532,1,0,0,-11057.6,-1874.61,220.668,5.64108,25,0,0,8,0,0,0);
  645. DELETE FROM creature WHERE guid = '1523995';
  646. INSERT INTO creature VALUES (1523995,22519,532,1,0,0,-11054.6,-1878.95,220.668,5.78481,25,0,0,8,0,0,0);
  647. DELETE FROM creature WHERE guid = '1523997';
  648. INSERT INTO creature VALUES (1523997,22519,532,1,0,0,-11057.8,-1882.23,220.668,4.60357,25,0,0,8,0,0,0);
  649. DELETE FROM creature WHERE guid = '1523999';
  650. INSERT INTO creature VALUES (1523999,22519,532,1,0,0,-11060.7,-1878.66,220.668,3.86529,25,0,0,8,0,0,0);
  651. DELETE FROM creature WHERE guid = '1524001';
  652. INSERT INTO creature VALUES (1524001,22519,532,1,0,0,-11064,-1874.8,220.668,2.27464,25,0,0,8,0,0,0);
  653. DELETE FROM creature WHERE guid = '1524003';
  654. INSERT INTO creature VALUES (1524003,22519,532,1,0,0,-11067.7,-1870.41,220.668,2.27464,25,0,0,8,0,0,0);
  655. DELETE FROM creature WHERE guid = '1524005';
  656. INSERT INTO creature VALUES (1524005,22519,532,1,0,0,-11070.8,-1866.71,220.668,2.27464,25,0,0,8,0,0,0);
  657. DELETE FROM creature WHERE guid = '1524007';
  658. INSERT INTO creature VALUES (1524007,22519,532,1,0,0,-11070.8,-1866.71,220.668,2.27464,25,0,0,8,0,0,0);
  659. DELETE FROM creature WHERE guid = '1524009';
  660. INSERT INTO creature VALUES (1524009,22519,532,1,0,0,-11074.7,-1862.17,220.668,2.27464,25,0,0,8,0,0,0);
  661. DELETE FROM creature WHERE guid = '1524011';
  662. INSERT INTO creature VALUES (1524011,22519,532,1,0,0,-11078.4,-1857.76,220.668,2.27464,25,0,0,8,0,0,0);
  663. DELETE FROM creature WHERE guid = '1524013';
  664. INSERT INTO creature VALUES (1524013,22519,532,1,0,0,-11082,-1853.61,220.668,2.27464,25,0,0,8,0,0,0);
  665. DELETE FROM creature WHERE guid = '1524015';
  666. INSERT INTO creature VALUES (1524015,22519,532,1,0,0,-11085.3,-1855.97,220.668,2.65478,25,0,0,8,0,0,0);
  667. DELETE FROM creature WHERE guid = '1524017';
  668. INSERT INTO creature VALUES (1524017,22519,532,1,0,0,-11082.7,-1859.65,220.668,5.33141,25,0,0,8,0,0,0);
  669. DELETE FROM creature WHERE guid = '1524019';
  670. INSERT INTO creature VALUES (1524019,22519,532,1,0,0,-11079.6,-1864.03,220.668,5.33141,25,0,0,8,0,0,0);
  671. DELETE FROM creature WHERE guid = '1524021';
  672. INSERT INTO creature VALUES (1524021,22519,532,1,0,0,-11075.6,-1869.63,220.668,5.33141,25,0,0,8,0,0,0);
  673. DELETE FROM creature WHERE guid = '1524023';
  674. INSERT INTO creature VALUES (1524023,22519,532,1,0,0,-11072.5,-1873.48,220.668,5.45394,25,0,0,8,0,0,0);
  675. DELETE FROM creature WHERE guid = '1524025';
  676. INSERT INTO creature VALUES (1524025,22519,532,1,0,0,-11069.4,-1877.84,220.668,5.83485,25,0,0,8,0,0,0);
  677. DELETE FROM creature WHERE guid = '1524027';
  678. INSERT INTO creature VALUES (1524027,22519,532,1,0,0,-11066.3,-1881.92,220.668,6.2464,25,0,0,8,0,0,0);
  679. DELETE FROM creature WHERE guid = '1524029';
  680. INSERT INTO creature VALUES (1524029,22519,532,1,0,0,-11062.2,-1886.33,220.668,5.39896,25,0,0,8,0,0,0);
  681. DELETE FROM creature WHERE guid = '1524031';
  682. INSERT INTO creature VALUES (1524031,22519,532,1,0,0,-11066,-1889.75,220.668,3.75669,25,0,0,8,0,0,0);
  683. DELETE FROM creature WHERE guid = '1524033';
  684. INSERT INTO creature VALUES (1524033,22519,532,1,0,0,-11069.5,-1885.3,220.668,2.2393,25,0,0,8,0,0,0);
  685. DELETE FROM creature WHERE guid = '1524035';
  686. INSERT INTO creature VALUES (1524035,22519,532,1,0,0,-11072.8,-1881.1,220.668,2.2393,25,0,0,8,0,0,0);
  687. DELETE FROM creature WHERE guid = '1524037';
  688. INSERT INTO creature VALUES (1524037,22519,532,1,0,0,-11076.5,-1876.47,220.668,2.2393,25,0,0,8,0,0,0);
  689. DELETE FROM creature WHERE guid = '1524039';
  690. INSERT INTO creature VALUES (1524039,22519,532,1,0,0,-11079.3,-1872.86,220.668,2.2393,25,0,0,8,0,0,0);
  691. DELETE FROM creature WHERE guid = '1524041';
  692. INSERT INTO creature VALUES (1524041,22519,532,1,0,0,-11082.8,-1868.5,220.668,2.2393,25,0,0,8,0,0,0);
  693. DELETE FROM creature WHERE guid = '1524043';
  694. INSERT INTO creature VALUES (1524043,22519,532,1,0,0,-11086.6,-1864.39,220.668,2.17882,25,0,0,8,0,0,0);
  695. DELETE FROM creature WHERE guid = '1524045';
  696. INSERT INTO creature VALUES (1524045,22519,532,1,0,0,-11090.3,-1860.19,220.668,2.33983,25,0,0,8,0,0,0);
  697. DELETE FROM creature WHERE guid = '1524047';
  698. INSERT INTO creature VALUES (1524047,22519,532,1,0,0,-11094.8,-1863.03,220.668,3.57369,25,0,0,8,0,0,0);
  699. DELETE FROM creature WHERE guid = '1524049';
  700. INSERT INTO creature VALUES (1524049,22519,532,1,0,0,-11091.4,-1866.6,220.668,5.12564,25,0,0,8,0,0,0);
  701. DELETE FROM creature WHERE guid = '1524051';
  702. INSERT INTO creature VALUES (1524051,22519,532,1,0,0,-11087.7,-1870.88,220.668,4.99919,25,0,0,8,0,0,0);
  703. DELETE FROM creature WHERE guid = '1524053';
  704. INSERT INTO creature VALUES (1524053,22519,532,1,0,0,-11084.8,-1875.5,220.668,5.41388,25,0,0,8,0,0,0);
  705. DELETE FROM creature WHERE guid = '1524055';
  706. INSERT INTO creature VALUES (1524055,22519,532,1,0,0,-11080.7,-1880.27,220.668,5.41388,25,0,0,8,0,0,0);
  707. DELETE FROM creature WHERE guid = '1524057';
  708. INSERT INTO creature VALUES (1524057,22519,532,1,0,0,-11077.4,-1884.23,220.668,5.41388,25,0,0,8,0,0,0);
  709. DELETE FROM creature WHERE guid = '1524059';
  710. INSERT INTO creature VALUES (1524059,22519,532,1,0,0,-11074.2,-1888.1,220.668,5.32199,25,0,0,8,0,0,0);
  711. DELETE FROM creature WHERE guid = '1524061';
  712. INSERT INTO creature VALUES (1524061,22519,532,1,0,0,-11071,-1892.7,220.668,5.32199,25,0,0,8,0,0,0);
  713. DELETE FROM creature WHERE guid = '1524063';
  714. INSERT INTO creature VALUES (1524063,22519,532,1,0,0,-11075.2,-1896.22,220.668,4.93793,25,0,0,8,0,0,0);
  715. DELETE FROM creature WHERE guid = '1524065';
  716. INSERT INTO creature VALUES (1524065,22519,532,1,0,0,-11078.9,-1892.13,220.668,2.29899,25,0,0,8,0,0,0);
  717. DELETE FROM creature WHERE guid = '1524067';
  718. INSERT INTO creature VALUES (1524067,22519,532,1,0,0,-11081.5,-1888.96,220.668,2.15055,25,0,0,8,0,0,0);
  719. DELETE FROM creature WHERE guid = '1524069';
  720. INSERT INTO creature VALUES (1524069,22519,532,1,0,0,-11084.8,-1883.69,220.668,2.35554,25,0,0,8,0,0,0);
  721. DELETE FROM creature WHERE guid = '1524071';
  722. INSERT INTO creature VALUES (1524071,22519,532,1,0,0,-11088.2,-1879.71,220.668,2.24951,25,0,0,8,0,0,0);
  723. DELETE FROM creature WHERE guid = '1524073';
  724. INSERT INTO creature VALUES (1524073,22519,532,1,0,0,-11092.5,-1874.34,220.668,2.24951,25,0,0,8,0,0,0);
  725. DELETE FROM creature WHERE guid = '1524075';
  726. INSERT INTO creature VALUES (1524075,22519,532,1,0,0,-11095.2,-1870.99,220.668,2.24951,25,0,0,8,0,0,0);
  727. DELETE FROM creature WHERE guid = '1524077';
  728. INSERT INTO creature VALUES (1524077,22519,532,1,0,0,-11098.7,-1866.69,220.668,2.24951,25,0,0,8,0,0,0);
  729. DELETE FROM creature WHERE guid = '1524079';
  730. INSERT INTO creature VALUES (1524079,22519,532,1,0,0,-11103.7,-1869.11,220.668,3.68443,25,0,0,8,0,0,0);
  731. DELETE FROM creature WHERE guid = '1524081';
  732. INSERT INTO creature VALUES (1524081,22519,532,1,0,0,-11099.7,-1873.42,220.668,5.28979,25,0,0,8,0,0,0);
  733. DELETE FROM creature WHERE guid = '1524083';
  734. INSERT INTO creature VALUES (1524083,22519,532,1,0,0,-11096.5,-1878.36,220.668,5.28979,25,0,0,8,0,0,0);
  735. DELETE FROM creature WHERE guid = '1524085';
  736. INSERT INTO creature VALUES (1524085,22519,532,1,0,0,-11093.2,-1881.88,220.668,4.65519,25,0,0,8,0,0,0);
  737. DELETE FROM creature WHERE guid = '1524087';
  738. INSERT INTO creature VALUES (1524087,22519,532,1,0,0,-11089.8,-1886.71,220.668,5.3212,25,0,0,8,0,0,0);
  739. DELETE FROM creature WHERE guid = '1524089';
  740. INSERT INTO creature VALUES (1524089,22519,532,1,0,0,-11086.8,-1891.13,220.668,5.3212,25,0,0,8,0,0,0);
  741. DELETE FROM creature WHERE guid = '1524091';
  742. INSERT INTO creature VALUES (1524091,22519,532,1,0,0,-11083.2,-1895.54,220.668,4.9984,25,0,0,8,0,0,0);
  743. DELETE FROM creature WHERE guid = '1524093';
  744. INSERT INTO creature VALUES (1524093,22519,532,1,0,0,-11080.1,-1900.17,220.668,5.50185,25,0,0,8,0,0,0);
  745. DELETE FROM creature WHERE guid = '1524095';
  746. INSERT INTO creature VALUES (1524095,22519,532,1,0,0,-11082.9,-1902.83,220.668,3.9122,25,0,0,8,0,0,0);
  747. DELETE FROM creature WHERE guid = '1524097';
  748. INSERT INTO creature VALUES (1524097,22519,532,1,0,0,-11085.8,-1899.68,220.668,2.41287,25,0,0,8,0,0,0);
  749. DELETE FROM creature WHERE guid = '1524099';
  750. INSERT INTO creature VALUES (1524099,22519,532,1,0,0,-11089.9,-1895.41,220.668,2.29978,25,0,0,8,0,0,0);
  751. DELETE FROM creature WHERE guid = '1524101';
  752. INSERT INTO creature VALUES (1524101,22519,532,1,0,0,-11094.3,-1890.5,220.668,2.29978,25,0,0,8,0,0,0);
  753. DELETE FROM creature WHERE guid = '1524103';
  754. INSERT INTO creature VALUES (1524103,22519,532,1,0,0,-11097.1,-1886.43,220.668,2.31705,25,0,0,8,0,0,0);
  755. DELETE FROM creature WHERE guid = '1524105';
  756. INSERT INTO creature VALUES (1524105,22519,532,1,0,0,-11100.5,-1881.81,220.668,2.46314,25,0,0,8,0,0,0);
  757. DELETE FROM creature WHERE guid = '1524107';
  758. INSERT INTO creature VALUES (1524107,22519,532,1,0,0,-11103.5,-1877.88,220.668,2.22124,25,0,0,8,0,0,0);
  759. DELETE FROM creature WHERE guid = '1524109';
  760. INSERT INTO creature VALUES (1524109,22519,532,1,0,0,-11107.4,-1873.91,220.668,2.43565,25,0,0,8,0,0,0);
  761.  
  762. */
Add Comment
Please, Sign In to add comment