maks110 Posted July 9, 2014 Posted July 9, 2014 (edited) Создаю эту тему специально для тех нытиков, которые постоянно пишут сообщения типо: "когда будет 548?" или "где 12 обнова?" Тут я предоставлю рабочий скрипт для инста - Яма Сарона, что бы наглядно показать все то, что нужно проделать гм'ам скорее всего с нуля, да бы с этого вышел хоть какой-то толк ТЫК- 1. diff --git a/src/server/scripts/Northrend/ FrozenHalls/PitOfSaron/ instance_pit_of_saron.cpp b/src/server/ scripts/Northrend/FrozenHalls/PitOfSaron/ instance_pit_of_saron.cpp 2. --- a/src/server/scripts/Northrend/ FrozenHalls/PitOfSaron/ instance_pit_of_saron.cpp 3. +++ b/src/server/scripts/Northrend/ FrozenHalls/PitOfSaron/ instance_pit_of_saron.cpp 4. @@ -41,12 +41,15 @@ 5. _jainaOrSylvanas1GUID = 0; 6. _jainaOrSylvanas2GUID = 0; 7. _teamInInstance = 0; 8. + _tyrannusEventStart = NOT_STARTED; 9. } 10. 11. void OnPlayerEnter(Player* player) 12. { 13. if (!_teamInInstance) 14. _teamInInstance = player->GetTeam(); 15. + if(GetData (DATA_TYRANNUS_START) != DONE) 16. + SetData (DATA_TYRANNUS_START, IN_PROGRESS); 17. } 18. 19. void OnCreatureCreate(Creature* creature) 20. @@ -198,6 +201,8 @@ 21. { 22. case DATA_TEAM_IN_INSTANCE: 23. return _teamInInstance; 24. + case DATA_TYRANNUS_START: 25. + return _tyrannusEventStart; 26. default: 27. break; 28. } 29. @@ -231,7 +236,12 @@ 30. 31. return 0; 32. } 33. - 34. + 35. + void SetData(uint32 type, uint32 data) 36. + { 37. + if(type == DATA_TYRANNUS_START) 38. + _tyrannusEventStart = data; 39. + } 40. std::string GetSaveData() 41. { 42. OUT_SAVE_INST_DATA; 43. @@ -288,6 +298,7 @@ 44. uint64 _jainaOrSylvanas2GUID; 45. 46. uint32 _teamInInstance; 47. + uint8 _tyrannusEventStart; 48. }; 49. 50. InstanceScript* GetInstanceScript (InstanceMap* map) const 51. 52. 53. 54. 55. diff --git a/src/server/scripts/Northrend/ FrozenHalls/PitOfSaron/pit_of_saron.cpp b/ src/server/scripts/Northrend/FrozenHalls/ PitOfSaron/pit_of_saron.cpp 56. --- a/src/server/scripts/Northrend/ FrozenHalls/PitOfSaron/pit_of_saron.cpp 57. +++ b/src/server/scripts/Northrend/ FrozenHalls/PitOfSaron/pit_of_saron.cpp 58. @@ -306,6 +306,700 @@ 59. } 60. }; 61. 62. +/* 63. +Script Complete: 100% 64. +Name: Start Pit Of Saron 65. +Author: Cemak 66. +*/ 67. +enum SAYTyrranusEvent 68. +{ 69. + SAY_TYRRANUS_1 = -1658074, 70. + SAY_TYRRANUS_2 = -1658075, 71. + SAY_TYRRANUS_3 = -1658078, 72. + SAY_TYRRANUS_4 = -1658082, 73. + 74. + SAY_SYLVANAS_1 = -1658076, 75. + SAY_SYLVANAS_2 = -1658080, 76. + SAY_SYLVANAS_3 = -1658085, 77. + SAY_SYLVANAS_4 = -1658087, 78. + 79. + SAY_JAINA_1 = -1658077, 80. + SAY_JAINA_2 = -1658081, 81. + SAY_JAINA_3 = -1658084, 82. + SAY_JAINA_4 = -1658086, 83. + 84. + SAY_SOUND = 16750, 85. +}; 86. + 87. +enum SPELLSTyrranusEvent 88. +{ 89. + SPELL_NECROMANTIC_POWER = 69347, 90. + SPELL_DEATH_ARMY_VISUAL = 67693, 91. + SPELL_BLIZZARD_JAINA = 70132, 92. + SPELL_ICE_LANCE_JAINA = 70464, 93. + SPELL_SHADOW_BOLT_SYLVANAS = 70512, 94. + SPELL_MULTI_SHOT_SYLVANAS = 70513, 95. +}; 96. + 97. +struct startPosition 98. +{ 99. + uint32 entry[2]; 100. + Position movePosition; 101. +} startPositions[] = 102. +{ 103. + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 445.286f, 214.251f, 528.71f, 0.375996f } }, 104. + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 447.246f, 208.189f, 528.71f, 0.0264938f } }, 105. + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 437.81f, 231.115f, 528.708f, 0.525224f } }, 106. + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 437.444f, 225.798f, 528.712f, 0.36029f } }, 107. + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 438.941f, 221.784f, 528.708f, 0.30924f } }, 108. + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 440.384f, 216.785f, 528.71f, 0.203211f } }, 109. + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 441.479f, 211.472f, 528.709f,0.203211f } }, 110. + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 443.986f, 222.103f, 528.709f,6.27373f } }, 111. + { { NPC_CHAMPION_1_ALLIANCE, NPC_CHAMPION_1_HORDE }, { 448.944f, 204.945f, 528.709f,0.0258984f } }, 112. + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 446.613f, 211.37f, 528.709f,0.360472f } }, 113. + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 442.647f, 204.635f, 528.707f,0.0887308f } }, 114. + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 435.054f, 207.61f, 528.707f,0.173361f } }, 115. + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 434.568f, 210.389f, 528.707f,0.173361f } }, 116. + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 443.458f, 226.623f, 528.709f,0.232266f } }, 117. + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_2_HORDE }, { 435.593f, 204.535f, 528.728f,0.173361f } }, 118. + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_3_HORDE }, { 442.47f, 208.153f, 528.706f,0.259756f } }, 119. + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_3_HORDE }, { 441.333f, 233.866f, 528.709f,0.255828f } }, 120. + { { NPC_CHAMPION_2_ALLIANCE, NPC_CHAMPION_3_HORDE }, { 442.124f, 230.78f, 528.709f,0.244047f } }, 121. + 122. + { { NPC_KORLAEN, NPC_KORALEN }, { 432.386f, 212.979f, 528.709f, 0.237168f } }, 123. + { { NPC_ELANDRA, NPC_KILARA }, { 431.65f, 216.976f, 528.709f, 0.20104f } }, 124. + { { NPC_JAINA_PART1, NPC_SYLVANAS_PART1 }, { 438.84f, 213.502f, 528.709f, 0.1900f } }, 125. + 126. + { { 0, 0 }, { 0.0f, 0.0f, 0.0f, 0.0f } } 127. +}; 128. + 129. +class pitofsaron_start : public CreatureScript 130. +{ 131. +public: 132. + pitofsaron_start() : CreatureScript ("pitofsaron_start") { } 133. + 134. + CreatureAI* GetAI(Creature* pCreature) const 135. + { 136. + return new pitofsaron_startAI (pCreature); 137. + } 138. + 139. + struct pitofsaron_startAI : public ScriptedAI 140. + { 141. + pitofsaron_startAI(Creature *c) : ScriptedAI© 142. + { 143. + instance = c->GetInstanceScript (); 144. + Reset(); 145. + } 146. + 147. + void Reset() 148. + { 149. + StartPhase = 0; 150. + StartTimer = 5000; 151. + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); 152. + me->SetReactState (REACT_PASSIVE); 153. + event = true; 154. + } 155. + 156. + void UpdateAI(const uint32 diff) 157. + { 158. + if(instance->GetData (DATA_TYRANNUS_START) == IN_PROGRESS && event) 159. + { 160. + if (StartTimer 161. + { 162. + switch (StartPhase) 163. + { 164. + case 0: 165. + if (Creature* sTyrannus = me->FindNearestCreature (NPC_TYRANNUS_EVENTS, 50.0f, true)) 166. + { 167. + sTyrannus- >SetFlying(true); 168. + DoScriptText(SAY_TYRRANUS_1, sTyrannus); 169. + 170. + int32 entryIndex; 171. + if (instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) 172. + entryIndex = 0; 173. + else 174. + entryIndex = 1; 175. + 176. + Position spawnPoint = {427.36f, 212.636f, 529.47f, 6.2564f}; 177. + 178. + for (int8 i = 0; startPositions.entry[entryIndex] != 0; ++i) 179. + { 180. + if (Creature* summon = me->SummonCreature (startPositions.entry[entryIndex], spawnPoint, TEMPSUMMON_DEAD_DESPAWN)) 181. + summon- >GetMotionMaster()->MovePoint(0, startPositions.movePosition); 182. + } 183. + } 184. + ++StartPhase; 185. + StartTimer = 5000; 186. + break; 187. + case 1: 188. + if (Creature* sTyrannus = me->FindNearestCreature (NPC_TYRANNUS_EVENTS, 50.0f, true)) 189. + DoScriptText(SAY_TYRRANUS_2, sTyrannus); 190. + ++StartPhase; 191. + StartTimer = 15000; 192. + break; 193. + case 2: 194. + if(me->GetEntry () == NPC_SYLVANAS_PART1) 195. + DoScriptText(SAY_SYLVANAS_1, me); 196. + else if(me- >GetEntry() == NPC_JAINA_PART1) 197. + DoScriptText(SAY_JAINA_1, me); 198. + 199. + if (instance- >GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) 200. + { 201. + GetCreatureListWithEntryInGrid(Champion1, me, NPC_CHAMPION_1_ALLIANCE, 150.0f); 202. + for (std::list::iterator itr = Champion1.begin(); itr != Champion1.end(); + +itr) 203. + { 204. + Creature *sChampions = *itr; 205. + if (! sChampions) 206. + continue; 207. + 208. + if (sChampions->isAlive()) 209. + if (Creature* sNecrolyte = me- >FindNearestCreature(367880, 150.0f, true)) 210. + { 211. + sChampions->Attack(sNecrolyte, true); 212. + sChampions->GetMotionMaster()->MoveChase (sNecrolyte); 213. + } 214. + } 215. + 216. + GetCreatureListWithEntryInGrid(Champion2, me, NPC_CHAMPION_2_ALLIANCE, 150.0f); 217. + for (std::list::iterator itr = Champion2.begin(); itr != Champion2.end(); + +itr) 218. + { 219. + Creature *sChampions = *itr; 220. + if (! sChampions) 221. + continue; 222. + 223. + if (sChampions->isAlive()) 224. + if (Creature* sNecrolyte = me- >FindNearestCreature(36788, 150.0f, true)) 225. + { 226. + sChampions->Attack(sNecrolyte, true); 227. + sChampions->GetMotionMaster()->MoveChase (sNecrolyte); 228. + } 229. + } 230. + } 231. + else 232. + { 233. + GetCreatureListWithEntryInGrid(Champion1, me, NPC_CHAMPION_1_HORDE, 150.0f); 234. + for (std::list::iterator itr = Champion1.begin(); itr != Champion1.end(); + +itr) 235. + { 236. + Creature *sChampions = *itr; 237. + if (! sChampions) 238. + continue; 239. + 240. + if (sChampions->isAlive()) 241. + if (Creature* sNecrolyte = me- >FindNearestCreature(367880, 150.0f, true)) 242. + { 243. + sChampions->Attack(sNecrolyte, true); 244. + sChampions->GetMotionMaster()->MoveChase (sNecrolyte); 245. + } 246. + } 247. + 248. + GetCreatureListWithEntryInGrid(Champion2, me, NPC_CHAMPION_2_HORDE, 150.0f); 249. + for (std::list::iterator itr = Champion2.begin(); itr != Champion2.end(); + +itr) 250. + { 251. + Creature *sChampions = *itr; 252. + if (! sChampions) 253. + continue; 254. + 255. + if (sChampions->isAlive()) 256. + if (Creature* sNecrolyte = me- >FindNearestCreature(36788, 150.0f, true)) 257. + { 258. + sChampions->Attack(sNecrolyte, true); 259. + sChampions->GetMotionMaster()->MoveChase (sNecrolyte); 260. + } 261. + } 262. + 263. + GetCreatureListWithEntryInGrid(Champion3, me, NPC_CHAMPION_3_HORDE, 150.0f); 264. + for (std::list::iterator itr = Champion3.begin(); itr != Champion3.end(); + +itr) 265. + { 266. + Creature *sChampions = *itr; 267. + if (! sChampions) 268. + con - - - Добавлено - - - жаль, половина только прогрузилась Edited July 9, 2014 by maks110 2
Ярило Posted July 9, 2014 Posted July 9, 2014 Спасибо, только это работа разработчиков а не гмов. p.s. Думал скрипт куда больше, учитывая кол-во символов на строчку...
Волчер Posted July 9, 2014 Posted July 9, 2014 Создаю эту тему специально для тех нытиков, которые постоянно пишут сообщения типо: "когда будет 548?" или "где 12 обнова?" Тут я предоставлю рабочий скрипт для инста - Яма Сарона, что бы наглядно показать все то, что нужно проделать гм'ам скорее всего с нуля, да бы с этого вышел хоть какой-то толк ТЫК- - - - Добавлено - - - жаль, половина только прогрузилась Тi думаєш після цього скiглії прiпiнять пiсати колi 5.4.8? )) Наївнiй))
Сэра Posted July 9, 2014 Posted July 9, 2014 Учитывая, что ГМы не занимаются ядром игры... В общем, надо бы убрать код под спойлер.
maks110 Posted July 9, 2014 Author Posted July 9, 2014 (edited) А чем вам разработчик не гейм мастер? Ну я же не говорю: "ТИТАН пачени инст!!!" Edited July 9, 2014 by maks110
Royal Posted July 9, 2014 Posted July 9, 2014 А чем вам разработчик не гейм мастер? Мб тем, что их вообще вы в игре не увидите никогда?) Да и на форуме некоторых тоже.)
Волчер Posted July 9, 2014 Posted July 9, 2014 Мб тем, что их вообще вы в игре не увидите никогда?) Да и на форуме некоторых тоже.) Я в игре титана с зилиусом вижу то не часто ... а из Администраторов только куклу в игре пару раз видел и всё...
maks110 Posted July 10, 2014 Author Posted July 10, 2014 а из Администраторов только куклу в игре пару раз видел и всё... А кукла жe не администратор :crazy:
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now