Code:
1. // compiles on latest824 rev :) Enjoy
2.
3.
4.
5. #include "StdAfx.h"
6. #include "Setup.h"
7.
8. #ifdef WIN32
9. #pragma warning(disable:4305)// warning C4305: 'argument' : truncation from 'double' to 'float'
10. #endif
11.
12.
13. class SCRIPT_DECL WarpNPC : public GossipScript
14. {
15. public:
16. void GossipHello(ObjectPointer Ob, PlayerPointer Plr, bool AutoSend);
17. void GossipSelectOption(ObjectPointer Ob, PlayerPointer Plr, uint32 Id, uint32 IntId, const char * Code);
18. void GossipEnd(ObjectPointer Ob, PlayerPointer Plr);
19. void Destroy()
20. {
21. delete this;
22. }
23. };
24. void WarpNPC::GossipHello(ObjectPointer Ob, PlayerPointer Plr, bool AutoSend)
25. {
26. GossipMenu *Menu;
27. objmgr.CreateGossipMenuForPlayer(&Menu, Ob->GetGUID(), 1, Plr);
28. if(Plr->getLevel() < 10)
29. {
30. Menu->AddItem(2, "You must be a level 10 to use this teleporter.");
31. }else{
32. if(Plr->getRace()== 10||Plr->getRace()== 2||Plr->getRace()== 6||Plr->getRace()== 8||Plr->getRace()== 5)
33. {Menu->AddItem(0, "Horde Cities", 1);}else{Menu->AddItem(1, "Alliance Cities", 2);}
34. Menu->AddItem(2, "Azeroth Instances", 3);
35. Menu->AddItem(3, "Outland Instances", 4);
36. Menu->AddItem(4, "- WotLK Locations", 5);
37. }
38. if(AutoSend)
39. Menu->SendTo(Plr);
40. }
41.
42. void WarpNPC::GossipSelectOption(ObjectPointer Ob, PlayerPointer Plr, uint32 Id, uint32 IntId, const char * Code)
43. {
44. CreaturePointer pCreature = (Ob->GetTypeId()==TYPEID_UNIT) ?TO_CREATURE(Ob):NULLCREATURE;
45. if(pCreature==NULL)
46. return;
47.
48. GossipMenu * Menu;
49. switch(IntId)
50. {
51. case 0:
52. GossipHello(Ob, Plr, true);
53. break;
54.
55. case 1: // Horde Cities
56. {
57. objmgr.CreateGossipMenuForPlayer(&Menu, Ob->GetGUID(), 1, Plr);
58. Menu->AddItem(5, "Silvermoon", 6);
59. Menu->AddItem(5, "Orgrimmar", 7);
60. Menu->AddItem(5, "Thunder Bluff", 8);
61. Menu->AddItem(5, "Undercity", 9);
62.
63. Menu->SendTo(Plr);
64. }
65. break;
66.
67.
68. case 2: // Alliance Cities
69. {
70. objmgr.CreateGossipMenuForPlayer(&Menu, Ob->GetGUID(), 1, Plr);
71. Menu->AddItem(5, "The Exodar", 10);
72. Menu->AddItem(5, "Stormwind", 11);
73. Menu->AddItem(5, "Ironforge", 12);
74. Menu->AddItem(5, "Darnassus", 13);
75.
76. Menu->SendTo(Plr);
77. }
78. break;
79.
80. case 3: // Azeroth Instances
81. {
82. objmgr.CreateGossipMenuForPlayer(&Menu, Ob->GetGUID(), 1, Plr);
83. Menu->AddItem(5, "Shadowfang Keep", 14);
84. Menu->AddItem(5, "Scarlet Monastery", 15);
85. Menu->AddItem(5, "Zul'Farrak", 16);
86. Menu->AddItem(5, "Stratholme", 27);
87. Menu->AddItem(5, "Scholomance", 17);
88. Menu->AddItem(5, "Blackrock Spire", 18);
89. Menu->AddItem(5, "Onyxia's Lair", 19);
90. Menu->AddItem(5, "Molten Core", 20);
91. Menu->AddItem(5, "Zul'Gurub", 21);
92. Menu->AddItem(5, "Karazhan", 22);
93. Menu->AddItem(5, "Ahn'Qirai 20", 23);
94. Menu->AddItem(5, "Ahn'Qirai 40", 24);
95. Menu->AddItem(5, "Naxxramas", 25);
96. Menu->AddItem(5, "Caverns of Time", 26);
97.
98. Menu->SendTo(Plr);
99. }
100. break;
101. case 4: // Outland Instances
102. {
103. objmgr.CreateGossipMenuForPlayer(&Menu, Ob->GetGUID(), 1, Plr);
104. Menu->AddItem(0, "Outland Raids", 100);
105. Menu->AddItem(5, "Hellfire Ramparts", 28);
106. Menu->AddItem(5, "The Blood Furnace", 29);
107. Menu->AddItem(5, "The Shattered Halls", 30);
108. Menu->AddItem(5, "The Underbog", 31);
109. Menu->AddItem(5, "The Slave Pens", 32);
110. Menu->AddItem(5, "The Steamvault", 33);
111. Menu->AddItem(5, "Mana-Tombs", 34);
112. Menu->AddItem(5, "Auchenai Crypts", 35);
113. Menu->AddItem(5, "Sethekk Halls", 36);
114. Menu->AddItem(5, "Shadow Labyrinth", 37);
115. Menu->AddItem(5, "The Mechanar", 38);
116. Menu->AddItem(5, "The Botanica", 39);
117. Menu->AddItem(5, "The Arcatraz", 40);
118.
119. Menu->SendTo(Plr);
120. }
121. break;
122.
123. case 100: // Outland Raids
124. {
125. objmgr.CreateGossipMenuForPlayer(&Menu, Ob->GetGUID(), 1, Plr);
126. Menu->AddItem(5, "Magtheridon's Lair", 41);
127. Menu->AddItem(5, "Serpentshrine Cavern", 42);
128. Menu->AddItem(5, "Gruul's Lair", 43);
129. Menu->AddItem(5, "The Eye", 44);
130. Menu->AddItem(5, "Black Temple", 45);
131.
132. Menu->SendTo(Plr);
133. }
134. break;
135. case 5: // World of the Lich King Locations
136. {
137. objmgr.CreateGossipMenuForPlayer(&Menu, Ob->GetGUID(), 1, Plr);
138. Menu->AddItem(5, "Dalaran City", 46);
139. Menu->AddItem(5, "Deathknight Hold", 47);
140. Menu->AddItem(5, "Icecrown", 48);
141. Menu->AddItem(5, "Zuldrak", 49);
142. Menu->AddItem(5, "Stormwind Docks", 50);
143. Menu->AddItem(5, "Valgarde - - Alliance Mall", 51);
144. Menu->AddItem(5, "Valliance Keep - Alliance", 52);
145. Menu->AddItem(5, "Vengeance Landing - - Horde Mall", 53);
146. Menu->AddItem(5, "Warsong Hold - Horde", 54);
147. Menu->SendTo(Plr);
148. }
149. break;
150. case 6://Silvermoon
151. {
152. Plr->EventTeleport(530, 9400.486328, -7278.376953, 14.206780);
153. }break;
154.
155. case 7://Orgrimmar
156. {
157. Plr->EventTeleport(1, 1371.068970, -4370.801758, 26.052483);
158. }break;
159.
160. case 8://ThunderBluff
161. {
162. Plr->EventTeleport(1, -1304.569946, 205.285004, 68.681396);
163. }
164. break;
165.
166. case 9://Undercity
167. {
168. Plr->EventTeleport(0, 2050.203125, 285.650604, 56.994549);
169. }
170. break;
171.
172. case 10: //Exodar
173. {
174. Plr->EventTeleport(530, -4072.202393, -12014.337891, -1.277277);
175. }
176. break;
177.
178. case 11: //Stormwind
179. {
180. Plr->EventTeleport(0, -9100.480469, 406.950745, 92.594185);
181. }
182. break;
183.
184. case 12: //Ironforge
185. {
186. Plr->EventTeleport(0, -5028.265137, -825.976563, 495.301575);
187. }
188. break;
189.
190. case 13: //Darnassus
191. {
192. Plr->EventTeleport(1, 9985.907227, 1971.155640, 1326.815674);
193. }
194. break;
195.
196. case 14: // Shadowfang Keep
197. {
198. Plr->EventTeleport(0, -234.495087, 1561.946411, 76.892143);
199. }
200. break;
201. case 15: // Scarlet Monastery
202. {
203. Plr->EventTeleport(0, 2870.442627, -819.985229, 160.331085);
204. }
205. break;
206. case 16: // Zul'Farrak
207. {
208. Plr->EventTeleport(1, -6797.278809, -2903.917969, 9.953360);
209. }
210. break;
211. case 21: // Zul'Gurub
212. {
213. Plr->EventTeleport(0, -11919.073242, -1202.459374, 92.298744);
214. }
215. break;
216. case 23: // Ahn'Qirai 20
217. {
218. Plr->EventTeleport(1, -8394.730469, 1485.658447, 21.038563);
219. }
220. break;
221. case 24: // Ahn'Qirai 40
222. {
223. Plr->EventTeleport(1, -8247.316406, 1970.156860, 129.071472);
224. }
225. break;
226. case 20: // Molten Core
227. {
228. // Plr->EventTeleport(0, -7515.409668, -1045.369629, 182.301208);
229. Plr->EventTeleport(409, 1089.6, -470.19, -106.41);
230. }
231. break;
232. case 19: // Onyxia
233. {
234. // Plr->EventTeleport(1, -4708.491699, -3727.672363, 54.535076);
235. Plr->EventTeleport(249, 30.0, -64.0, -5.0);
236. }
237. break;
238. case 25: // Naxxramas
239. {
240. // Plr->EventTeleport(0, 3132.915283, -3731.012939, 138.658371);
241. Plr->EventTeleport(533, 3006.06, -3436.72, 293.891);
242. }
243. break;
244. case 17: //Scholomance
245. {
246. Plr->EventTeleport(0, 1267.468628, -2556.651367, 94.127983);
247. }
248. break;
249. case 27: //Stratholme
250. {
251. Plr->EventTeleport(0, 3359.111572, -3380.8444238, 144.781860);
252. }break;
253. case 18: // Black Rock Spire
254. {
255. Plr->EventTeleport(0, -7527.129883, -1224.997437, 285.733002);
256. }break;
257. case 22: // Kharazan
258. {
259. // Plr->EventTeleport(0, -11122.913086, -2014.498779, 47.079350);
260. Plr->EventTeleport(532, -11087.3, -1977.47, 49.6135);
261.
262. }break;
263. case 26: // Caverns of Times
264. {
265. Plr->EventTeleport(1, -8519.718750, -4297.542480, -208.441376);
266. }break;
267.
268. case 28: // Hellfire Ramparts
269. {
270. Plr->EventTeleport(530, -360.670990, 3071.899902, -15.097700);
271. }break;
272. case 29: // The Blood Furnace
273. {
274. Plr->EventTeleport(530, -303.506012, 3164.820068, 31.742500);
275. }break;
276. case 30: // The Shattered Halls
277. {
278. Plr->EventTeleport(530, -311.083527, 3083.291748, -3.745923);
279. }break;
280. case 31: // The Underbog
281. {
282. Plr->EventTeleport(530, 777.088989, 6763.450195, -72.062561);
283. }break;
284. case 32: // The Slave Pens
285. {
286. Plr->EventTeleport(530, 719.507996, 6999.339844, -73.074303);
287. }break;
288. case 33: // The Steamvault
289. {
290. Plr->EventTeleport(530, 816.590027, 6934.669922, -80.544601);
291. }break;
292. case 34: // Mana-Tombs
293. {
294. Plr->EventTeleport(530, -3079.810059, 4943.040039, -101.046997);
295. }break;
296. case 35: // Auchenai Crypts
297. {
298. Plr->EventTeleport(530, -3361.959961, 5225.770020, -101.047997);
299. }break;
300. case 36: // Sethekk Halls
301. {
302. Plr->EventTeleport(530, -3362.219971, 4660.410156, -101.049004 );
303. }break;
304. case 37: // Shadow Labyrinth
305. {
306. Plr->EventTeleport(530, -3645.060059, 4943.620117, -101.047997);
307. }break;
308. case 38: // The Mechanar
309. {
310. Plr->EventTeleport(530, 2862.409912, 1546.089966, 252.158691);
311. }break;
312. case 39: // The Botanica
313. {
314. Plr->EventTeleport(530, 3413.649902, 1483.319946, 182.837997);
315. }break;
316. case 40: // The Arcatraz
317. {
318. Plr->EventTeleport(530, 3311.598145, 1332.745117, 505.557251);
319. }break;
320.
321. case 41: // Magtheridon's Lair
322. {
323. Plr->EventTeleport(530, -313.678986, 3088.350098, -116.501999);
324. }break;
325. case 42: // Serpentshrine Cavern
326. {
327. Plr->EventTeleport(530, 830.542908, 6865.445801, -63.785503);
328. }break;
329. case 43: // Gruul's Lair
330. {
331. Plr->EventTeleport(530, 3549.424072, 5179.854004, -4.430779);
332. }break;
333. case 44: // The Eye
334. {
335. Plr->EventTeleport(530, 3087.310059, 1373.790039, 184.643005);
336. }break;
337. case 45: // Black Temple
338. {
339. Plr->EventTeleport(564, 97.0894, 1001.96, -86.8798 );
340. }break;
341. case 46://Dalaran City
342. {
343. Plr->EventTeleport(571, 5797.79, 629.402, 647.406);
344. }break;
345.
346. case 47://Deathknight Hold
347. {
348. Plr->EventTeleport(609, 2358.31, -5671.61, 426.004);
349. }break;
350.
351. case 48://Icecrown
352. {
353. Plr->EventTeleport(571, 7105.61, 2091.7, 622.529);
354. }break;
355. case 49://Zuldrak
356. {
357. Plr->EventTeleport(571, 5520.02, -3602.05, 362.706);
358. }break;
359. case 50://Stormwind Docks
360. {
361. Plr->EventTeleport(0, -8634, 940, 100);
362. }break;
363. case 51://Valgarde - Alliance - Mall
364. {
365. Plr->EventTeleport(571, 590, -5095, 6);
366. }break;
367. case 52://Valliance Keep - Alliance
368. {
369. Plr->EventTeleport(571, 2469, 6212, 174);
370. }break;
371. case 53://Vengeance Landing - Horde - Mall
372. {
373. Plr->EventTeleport(571, 1983, -6220, 8);
374. }break;
375. case 54://Warsong Hold - Horde
376. {
377. Plr->EventTeleport(571, 2469, 6212, 174);
378. }break;
379. }
380. };
381.
382. void WarpNPC::GossipEnd(ObjectPointer Ob, PlayerPointer Plr)
383. {
384. GossipScript::GossipEnd(Ob, Plr);
385. }
386.
387. void SetupWarpNPC(ScriptMgr * mgr)
388. {
389. GossipScript * gs = (GossipScript*) new WarpNPC();
390. mgr->register_gossip_script(90001, gs);
391. }