Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2015
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 38.29 KB | None | 0 0
  1. #include "ScriptPCH.h"
  2. #include "BattlegroundMgr.h"
  3. #include "DisableMgr.h"
  4. #include "Group.h"
  5.  
  6. class challenge_commands : public CommandScript
  7. {
  8. public:
  9. challenge_commands() : CommandScript("challenge_commands") { }
  10.  
  11. ChatCommand* GetCommands() const
  12. {
  13. static ChatCommand challengeCreateCommandTable[] =
  14. {
  15. { "1c1", SEC_MODERATOR, false, &HandleChallengeCreate1x1Command, "", NULL },
  16. { "2c2", SEC_MODERATOR, false, &HandleChallengeCreate2x2Command, "", NULL },
  17. { "3c3", SEC_MODERATOR, false, &HandleChallengeCreate3x3Command, "", NULL },
  18. //{ "5c5", SEC_MODERATOR, false, &HandleChallengeCreate5x5Command, "", NULL },
  19. { NULL, 0, false, NULL, "", NULL }
  20. };
  21.  
  22. static ChatCommand challengeCommandTable[] =
  23. {
  24. { "crear", SEC_MODERATOR, false, NULL, "", challengeCreateCommandTable },
  25. { "aceptar", SEC_PLAYER, false, &HandleChallengeAcceptCommand, "", NULL },
  26. //{ "rechazar", SEC_PLAYER, false, &HandleChallengeRechazarCommand, "", NULL },
  27. { "modo", SEC_PLAYER, false, &HandleChallengeModeCommand, "", NULL },
  28. { "1c1", SEC_PLAYER, false, &HandleChallenge1x1Command, "", NULL },
  29. { "2c2", SEC_PLAYER, false, &HandleChallenge2x2Command, "", NULL },
  30. { "3c3", SEC_PLAYER, false, &HandleChallenge3x3Command, "", NULL },
  31. //{ "5c5", SEC_PLAYER, false, &HandleChallenge5x5Command, "", NULL },
  32. { "on", SEC_PLAYER, false, &HandleChallengeOnCommand, "", NULL },
  33. { "off", SEC_PLAYER, false, &HandleChallengeOffCommand, "", NULL },
  34. { NULL, 0, false, NULL, "", NULL }
  35. };
  36.  
  37. static ChatCommand commandTable[] =
  38. {
  39. { "challenge", SEC_PLAYER, false, NULL, "", challengeCommandTable },
  40. { NULL, 0, false, NULL, "", NULL }
  41. };
  42. return commandTable;
  43. }
  44.  
  45. static bool HandleChallengeModeCommand(ChatHandler* handler, const char* args)
  46. {
  47. if (!args)
  48. {
  49. handler->PSendSysMessage("Cambia el modo de aceptar los retos, una breve descripción:\n .challenge modo 0: Todo reto que se te haga te preguntará antes si quieres aceptarlo mediante el comando .challenge aceptar\n .challenge modo 1: Todo reto que se te haga será automáticamente aceptado y saldrá el aviso de unirse a Arenas.");
  50. handler->SetSentErrorMessage(true);
  51. return false;
  52. }
  53.  
  54. ChallengeOption *option = handler->GetSession()->GetPlayer()->challengeData->options;
  55.  
  56. switch (args[0])
  57. {
  58. case '1':
  59. if (option->mode != 1)
  60. {
  61. option->mode = 1;
  62. option->changed = true;
  63. }
  64. break;
  65. case '0':
  66. if (option->mode != 0)
  67. {
  68. option->mode = 0;
  69. option->changed = true;
  70. }
  71. break;
  72. default:
  73. handler->PSendSysMessage("Valor incorrecto, solo puedes poner 0 ó 1. \nExplicación: \nCambia el modo de aceptar los retos, una breve descripción:\n .challenge modo 0: Todo reto que se te haga te preguntará antes si quieres aceptarlo mediante el comando .challenge aceptar\n .challenge modo 1: Todo reto que se te haga será automáticamente aceptado y saldrá el aviso de unirse a Arenas.");
  74. handler->SetSentErrorMessage(true);
  75. return false;
  76. }
  77.  
  78. handler->PSendSysMessage("Modo cambiado.");
  79. return true;
  80. }
  81.  
  82. static bool HandleChallengeOnCommand(ChatHandler* handler, const char* /*args*/)
  83. {
  84. ChallengeOption *option = handler->GetSession()->GetPlayer()->challengeData->options;
  85. if (!option->enable)
  86. {
  87. option->enable = true;
  88. option->changed = true;
  89. }
  90.  
  91. handler->PSendSysMessage("Retos habilitado.");
  92. return true;
  93. }
  94.  
  95. static bool HandleChallengeOffCommand(ChatHandler* handler, const char* /*args*/)
  96. {
  97. ChallengeOption *option = handler->GetSession()->GetPlayer()->challengeData->options;
  98. if (option->enable)
  99. {
  100. option->enable = false;
  101. option->changed = true;
  102. }
  103.  
  104. handler->PSendSysMessage("Retos deshabilitado.");
  105. return true;
  106. }
  107.  
  108. static bool HandleChallengeAcceptCommand(ChatHandler* handler, const char* /*args*/)
  109. {
  110. Player* chr = handler->GetSession()->GetPlayer();
  111. if(!chr)
  112. return false;
  113.  
  114. uint64 challengerGuid = chr->challengeData->challenger;
  115. if (!challengerGuid)
  116. {
  117. handler->PSendSysMessage("No tienes un contrincante.");
  118. handler->SetSentErrorMessage(true);
  119. return false;
  120. }
  121.  
  122. Player *challenger = ObjectAccessor::FindPlayer(challengerGuid);
  123. if (!challenger)
  124. {
  125. handler->PSendSysMessage("No se puede encontrar un contrincante, quizás esté Offline.");
  126. handler->SetSentErrorMessage(true);
  127. return false;
  128. }
  129.  
  130. if(chr->isInCombat() || chr->isInFlight() || chr->GetMap()->IsBattlegroundOrArena() || chr->HasStealthAura() || chr->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH) || chr->isDead())
  131. {
  132. handler->PSendSysMessage("No puedes hacer eso en este momento (estás en combate, volando, en BG o Arena, sigilo o muerto).");
  133. handler->SetSentErrorMessage(true);
  134. return false;
  135. }
  136.  
  137. if(chr->GetZoneId() == 14)
  138. {
  139. handler->PSendSysMessage("No puedes aceptar retos estando en la Zona PvP.");
  140. handler->SetSentErrorMessage(true);
  141. return false;
  142. }
  143.  
  144. if (!sChallengeMgr->InviteGroupsToArena(chr, challenger, (ArenaChallengeType)chr->challengeData->challengeType))
  145. {
  146. handler->PSendSysMessage("No puedes unirte a la cola.");
  147. handler->SetSentErrorMessage(true);
  148. return false;
  149. }
  150.  
  151. return true;
  152. }
  153.  
  154. /*static bool HandleChallengeRechazarCommand(ChatHandler* handler, const char* args)
  155. {
  156. Player *player = handler->GetSession()->GetPlayer();
  157. uint64 challengerGuid = handler->GetSession()->GetPlayer()->challengeData->challenger;
  158. Player *challenger = ObjectAccessor::FindPlayer(challengerGuid);
  159.  
  160. if (!challengerGuid || !challenger || !player)
  161. {
  162. handler->PSendSysMessage("No hay ningún contrincante.");
  163. handler->SetSentErrorMessage(true);
  164. return false;
  165. }
  166.  
  167. if(player->challengeData)
  168. {
  169. player->CleanChallengeData();
  170. ChatHandler(player).PSendSysMessage("La oferta para el reto ha sido rechazada.");
  171. }
  172.  
  173. if(challenger->challengeData)
  174. {
  175. challenger->CleanChallengeData();
  176. ChatHandler(challenger).PSendSysMessage("La oferta para el reto ha sido rechazada.");
  177. }
  178.  
  179. return true;
  180. }*/
  181.  
  182. static bool HandleChallenge1x1Command(ChatHandler* handler, const char* args)
  183. {
  184. Player *target = NULL;
  185. Player *player = handler->GetSession()->GetPlayer();
  186.  
  187. if (!handler->extractPlayerTarget((char*)args, &target))
  188. {
  189. handler->PSendSysMessage("No se puede encontrar al jugador.");
  190. handler->SetSentErrorMessage(true);
  191. return false;
  192. }
  193.  
  194. if(player->isInCombat() || player->isInFlight() || player->GetMap()->IsBattlegroundOrArena() || player->HasStealthAura() || player->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH) || player->isDead())
  195. {
  196. handler->PSendSysMessage("No puedes hacer eso en este momento.");
  197. handler->SetSentErrorMessage(true);
  198. return false;
  199. }
  200.  
  201. if(player->GetZoneId() == 14)
  202. {
  203. handler->PSendSysMessage("No puedes retar a nadie estando en la Zona PvP.");
  204. handler->SetSentErrorMessage(true);
  205. return false;
  206. }
  207.  
  208. if (!target->challengeData->options->enable)
  209. {
  210. handler->PSendSysMessage("El jugador no tiene habilitados los retos.");
  211. handler->SetSentErrorMessage(true);
  212. return false;
  213. }
  214.  
  215. if ((!player->GetGroup() || player->GetGroup()->GetMembersCount() != ARENA_CHALLENGE_TYPE_1v1 ||
  216. !target->GetGroup() || target->GetGroup()->GetMembersCount() != ARENA_CHALLENGE_TYPE_1v1) && ARENA_CHALLENGE_TYPE_1v1 != ARENA_CHALLENGE_TYPE_1v1)
  217. {
  218. handler->PSendSysMessage("Cantidad de jugadores incorrecta o no están en el mismo grupo.");
  219. handler->SetSentErrorMessage(true);
  220. return false;
  221. }
  222.  
  223. if (target->challengeData->options->mode == 0)
  224. {
  225. if (!sChallengeMgr->MakeChallengeOffer(player, target, (ArenaChallengeType)ARENA_CHALLENGE_TYPE_1v1))
  226. {
  227. handler->PSendSysMessage("No puedes unirte a la cola.");
  228. handler->SetSentErrorMessage(true);
  229. return false;
  230. }
  231.  
  232. //Creamos los colores custom
  233. //Colores retado
  234. char* color_clase_retado;
  235. switch (target->getClass())
  236. {
  237. case CLASS_WARRIOR:
  238. color_clase_retado = "|CFFC79C6E";
  239. break;
  240. case CLASS_DEATH_KNIGHT:
  241. color_clase_retado = "|CFFC41F3B";
  242. break;
  243. case CLASS_DRUID:
  244. color_clase_retado = "|CFFFF7D0A";
  245. break;
  246. case CLASS_HUNTER:
  247. color_clase_retado = "|CFFABD473";
  248. break;
  249. case CLASS_MAGE:
  250. color_clase_retado = "|CFF69CCF0";
  251. break;
  252. case CLASS_PALADIN:
  253. color_clase_retado = "|CFFF58CBA";
  254. break;
  255. case CLASS_PRIEST:
  256. color_clase_retado = "|CFFFFFFFF";
  257. break;
  258. case CLASS_ROGUE:
  259. color_clase_retado = "|CFFFFF569";
  260. break;
  261. case CLASS_SHAMAN:
  262. color_clase_retado = "|CFF0070DE";
  263. break;
  264. case CLASS_WARLOCK:
  265. color_clase_retado = "|CFF9482C9";
  266. break;
  267. }
  268.  
  269. handler->PSendSysMessage("Has retado a %s%s|r. Espera 20 segundos mientras toma una decisión.", color_clase_retado, target->GetName());
  270. }
  271. else
  272. {
  273. if (!sChallengeMgr->InviteGroupsToArena(player, target, (ArenaChallengeType)ARENA_CHALLENGE_TYPE_1v1))
  274. {
  275. handler->PSendSysMessage("No puedes unirte a la cola.");
  276. handler->SetSentErrorMessage(true);
  277. return false;
  278. }
  279. }
  280.  
  281. return true;
  282. }
  283.  
  284. static bool HandleChallenge2x2Command(ChatHandler* handler, const char* args)
  285. {
  286. Player *target = NULL;
  287. Player *player = handler->GetSession()->GetPlayer();
  288.  
  289. if (!handler->extractPlayerTarget((char*)args, &target))
  290. {
  291. handler->PSendSysMessage("No se puede encontrar al jugador.");
  292. handler->SetSentErrorMessage(true);
  293. return false;
  294. }
  295.  
  296. if(player->isInCombat() || player->isInFlight() || player->GetMap()->IsBattlegroundOrArena() || player->HasStealthAura() || player->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH) || player->isDead())
  297. {
  298. handler->PSendSysMessage("No puedes hacer eso en este momento.");
  299. handler->SetSentErrorMessage(true);
  300. return false;
  301. }
  302.  
  303. if(player->GetZoneId() == 14)
  304. {
  305. handler->PSendSysMessage("No puedes retar a nadie estando en la Zona PvP.");
  306. handler->SetSentErrorMessage(true);
  307. return false;
  308. }
  309.  
  310. if (!target->challengeData->options->enable)
  311. {
  312. handler->PSendSysMessage("El jugador no tiene habilitados los retos.");
  313. handler->SetSentErrorMessage(true);
  314. return false;
  315. }
  316.  
  317. if ((!player->GetGroup() || player->GetGroup()->GetMembersCount() != ARENA_CHALLENGE_TYPE_2v2 ||
  318. !target->GetGroup() || target->GetGroup()->GetMembersCount() != ARENA_CHALLENGE_TYPE_2v2) && ARENA_CHALLENGE_TYPE_2v2 != ARENA_CHALLENGE_TYPE_2v2)
  319. {
  320. handler->PSendSysMessage("Cantidad de jugadores incorrecta o no están en el mismo grupo.");
  321. handler->SetSentErrorMessage(true);
  322. return false;
  323. }
  324.  
  325. if (target->challengeData->options->mode == 0)
  326. {
  327. if (!sChallengeMgr->MakeChallengeOffer(player, target, (ArenaChallengeType)ARENA_CHALLENGE_TYPE_2v2))
  328. {
  329. handler->PSendSysMessage("No puedes unirte a la cola.");
  330. handler->SetSentErrorMessage(true);
  331. return false;
  332. }
  333.  
  334. //Creamos los colores custom
  335. //Colores retado
  336. char* color_clase_retado;
  337. switch (target->getClass())
  338. {
  339. case CLASS_WARRIOR:
  340. color_clase_retado = "|CFFC79C6E";
  341. break;
  342. case CLASS_DEATH_KNIGHT:
  343. color_clase_retado = "|CFFC41F3B";
  344. break;
  345. case CLASS_DRUID:
  346. color_clase_retado = "|CFFFF7D0A";
  347. break;
  348. case CLASS_HUNTER:
  349. color_clase_retado = "|CFFABD473";
  350. break;
  351. case CLASS_MAGE:
  352. color_clase_retado = "|CFF69CCF0";
  353. break;
  354. case CLASS_PALADIN:
  355. color_clase_retado = "|CFFF58CBA";
  356. break;
  357. case CLASS_PRIEST:
  358. color_clase_retado = "|CFFFFFFFF";
  359. break;
  360. case CLASS_ROGUE:
  361. color_clase_retado = "|CFFFFF569";
  362. break;
  363. case CLASS_SHAMAN:
  364. color_clase_retado = "|CFF0070DE";
  365. break;
  366. case CLASS_WARLOCK:
  367. color_clase_retado = "|CFF9482C9";
  368. break;
  369. }
  370.  
  371. handler->PSendSysMessage("Has retado a %s%s|r. Espera 20 segundos mientras toma una decisión.", color_clase_retado, target->GetName());
  372. }
  373. else
  374. {
  375. if (!sChallengeMgr->InviteGroupsToArena(player, target, (ArenaChallengeType)ARENA_CHALLENGE_TYPE_2v2))
  376. {
  377. handler->PSendSysMessage("No puedes unirte a la cola.");
  378. handler->SetSentErrorMessage(true);
  379. return false;
  380. }
  381. }
  382.  
  383. return true;
  384. }
  385.  
  386. static bool HandleChallenge3x3Command(ChatHandler* handler, const char* args)
  387. {
  388. Player *target = NULL;
  389. Player *player = handler->GetSession()->GetPlayer();
  390.  
  391. if (!handler->extractPlayerTarget((char*)args, &target))
  392. {
  393. handler->PSendSysMessage("No se puede encontrar al jugador.");
  394. handler->SetSentErrorMessage(true);
  395. return false;
  396. }
  397.  
  398. if(player->isInCombat() || player->isInFlight() || player->GetMap()->IsBattlegroundOrArena() || player->HasStealthAura() || player->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH) || player->isDead())
  399. {
  400. handler->PSendSysMessage("No puedes hacer eso en este momento.");
  401. handler->SetSentErrorMessage(true);
  402. return false;
  403. }
  404.  
  405. if(player->GetZoneId() == 14)
  406. {
  407. handler->PSendSysMessage("No puedes retar a nadie estando en la Zona PvP.");
  408. handler->SetSentErrorMessage(true);
  409. return false;
  410. }
  411.  
  412. if (!target->challengeData->options->enable)
  413. {
  414. handler->PSendSysMessage("El jugador no tiene habilitados los retos.");
  415. handler->SetSentErrorMessage(true);
  416. return false;
  417. }
  418.  
  419. if ((!player->GetGroup() || player->GetGroup()->GetMembersCount() != ARENA_CHALLENGE_TYPE_3v3 ||
  420. !target->GetGroup() || target->GetGroup()->GetMembersCount() != ARENA_CHALLENGE_TYPE_3v3) && ARENA_CHALLENGE_TYPE_3v3 != ARENA_CHALLENGE_TYPE_3v3)
  421. {
  422. handler->PSendSysMessage("Cantidad de jugadores incorrecta o no están en el mismo grupo.");
  423. handler->SetSentErrorMessage(true);
  424. return false;
  425. }
  426.  
  427. if (target->challengeData->options->mode == 0)
  428. {
  429. if (!sChallengeMgr->MakeChallengeOffer(player, target, (ArenaChallengeType)ARENA_CHALLENGE_TYPE_3v3))
  430. {
  431. handler->PSendSysMessage("No puedes unirte a la cola.");
  432. handler->SetSentErrorMessage(true);
  433. return false;
  434. }
  435.  
  436. //Creamos los colores custom
  437. //Colores retado
  438. char* color_clase_retado;
  439. switch (target->getClass())
  440. {
  441. case CLASS_WARRIOR:
  442. color_clase_retado = "|CFFC79C6E";
  443. break;
  444. case CLASS_DEATH_KNIGHT:
  445. color_clase_retado = "|CFFC41F3B";
  446. break;
  447. case CLASS_DRUID:
  448. color_clase_retado = "|CFFFF7D0A";
  449. break;
  450. case CLASS_HUNTER:
  451. color_clase_retado = "|CFFABD473";
  452. break;
  453. case CLASS_MAGE:
  454. color_clase_retado = "|CFF69CCF0";
  455. break;
  456. case CLASS_PALADIN:
  457. color_clase_retado = "|CFFF58CBA";
  458. break;
  459. case CLASS_PRIEST:
  460. color_clase_retado = "|CFFFFFFFF";
  461. break;
  462. case CLASS_ROGUE:
  463. color_clase_retado = "|CFFFFF569";
  464. break;
  465. case CLASS_SHAMAN:
  466. color_clase_retado = "|CFF0070DE";
  467. break;
  468. case CLASS_WARLOCK:
  469. color_clase_retado = "|CFF9482C9";
  470. break;
  471. }
  472.  
  473. handler->PSendSysMessage("Has retado a %s%s|r. Espera 20 segundos mientras toma una decisión.", color_clase_retado, target->GetName());
  474. }
  475. else
  476. {
  477. if (!sChallengeMgr->InviteGroupsToArena(player, target, (ArenaChallengeType)ARENA_CHALLENGE_TYPE_3v3))
  478. {
  479. handler->PSendSysMessage("No puedes unirte a la cola.");
  480. handler->SetSentErrorMessage(true);
  481. return false;
  482. }
  483. }
  484.  
  485. return true;
  486. }
  487.  
  488. /*static bool HandleChallenge5x5Command(ChatHandler* handler, const char* args)
  489. {
  490. return ChallengeForBracket(handler, args, ARENA_CHALLENGE_TYPE_5v5);
  491. }*/
  492.  
  493. /*static bool ChallengeForBracket(ChatHandler* handler, const char* args, uint8 type)
  494. {
  495. Player *target = NULL;
  496. Player *player = handler->GetSession()->GetPlayer();
  497.  
  498. if (!handler->extractPlayerTarget((char*)args, &target))
  499. {
  500. handler->PSendSysMessage("No se puede encontrar al jugador.");
  501. handler->SetSentErrorMessage(true);
  502. return false;
  503. }
  504.  
  505. if(player->isInCombat() || player->isInFlight() || player->GetMap()->IsBattlegroundOrArena() || player->HasStealthAura() || player->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH) || player->isDead())
  506. {
  507. handler->PSendSysMessage("No puedes hacer eso en este momento.");
  508. handler->SetSentErrorMessage(true);
  509. return false;
  510. }
  511.  
  512. if(player->GetZoneId() == 14)
  513. {
  514. handler->PSendSysMessage("No puedes retar a nadie estando en la Zona PvP.");
  515. handler->SetSentErrorMessage(true);
  516. return false;
  517. }
  518.  
  519. if (!target->challengeData->options->enable)
  520. {
  521. handler->PSendSysMessage("El jugador no tiene habilitados los retos.");
  522. handler->SetSentErrorMessage(true);
  523. return false;
  524. }
  525.  
  526. if ((!player->GetGroup() || player->GetGroup()->GetMembersCount() != type ||
  527. !target->GetGroup() || target->GetGroup()->GetMembersCount() != type) && type != ARENA_CHALLENGE_TYPE_1v1)
  528. {
  529. handler->PSendSysMessage("Cantidad de jugadores incorrecta o no están en el mismo grupo.");
  530. handler->SetSentErrorMessage(true);
  531. return false;
  532. }
  533.  
  534. if (target->challengeData->options->mode == 0)
  535. {
  536. if (!sChallengeMgr->MakeChallengeOffer(handler->GetSession()->GetPlayer(), target, (ArenaChallengeType)type))
  537. {
  538. handler->PSendSysMessage("No puedes unirte a la cola.");
  539. handler->SetSentErrorMessage(true);
  540. return false;
  541. }
  542.  
  543. //Creamos los colores custom
  544. //Colores retado
  545. char* color_clase_retado;
  546. switch (target->getClass())
  547. {
  548. case CLASS_WARRIOR:
  549. color_clase_retado = "|CFFC79C6E";
  550. break;
  551. case CLASS_DEATH_KNIGHT:
  552. color_clase_retado = "|CFFC41F3B";
  553. break;
  554. case CLASS_DRUID:
  555. color_clase_retado = "|CFFFF7D0A";
  556. break;
  557. case CLASS_HUNTER:
  558. color_clase_retado = "|CFFABD473";
  559. break;
  560. case CLASS_MAGE:
  561. color_clase_retado = "|CFF69CCF0";
  562. break;
  563. case CLASS_PALADIN:
  564. color_clase_retado = "|CFFF58CBA";
  565. break;
  566. case CLASS_PRIEST:
  567. color_clase_retado = "|CFFFFFFFF";
  568. break;
  569. case CLASS_ROGUE:
  570. color_clase_retado = "|CFFFFF569";
  571. break;
  572. case CLASS_SHAMAN:
  573. color_clase_retado = "|CFF0070DE";
  574. break;
  575. case CLASS_WARLOCK:
  576. color_clase_retado = "|CFF9482C9";
  577. break;
  578. }
  579.  
  580. handler->PSendSysMessage("Has retado a %s%s|r. Espera 20 segundos mientras toma una decisión.", color_clase_retado, target->GetName());
  581. }
  582. else
  583. {
  584. if (!sChallengeMgr->InviteGroupsToArena(handler->GetSession()->GetPlayer(), target, (ArenaChallengeType)type))
  585. {
  586. handler->PSendSysMessage("No puedes unirte a la cola.");
  587. handler->SetSentErrorMessage(true);
  588. return false;
  589. }
  590. }
  591.  
  592. return true;
  593. }*/
  594.  
  595. static bool HandleChallengeCreate1x1Command(ChatHandler* handler, const char* args)
  596. {
  597. return ChallengeCreateForBracket(handler, args, ARENA_CHALLENGE_TYPE_1v1);
  598. }
  599.  
  600. static bool HandleChallengeCreate2x2Command(ChatHandler* handler, const char* args)
  601. {
  602. std::string sargs = args;
  603. Tokens playersTokens(sargs, ' ');
  604. if (playersTokens.size() != 4)
  605. {
  606. handler->PSendSysMessage("Se necesitan como mínimo 4 nombres de jugadores.");
  607. handler->SetSentErrorMessage(true);
  608. return false;
  609. }
  610.  
  611. Player *player1 = sObjectMgr->GetPlayer(playersTokens[0]);
  612. Player *player2 = sObjectMgr->GetPlayer(playersTokens[1]);
  613. Player *player3 = sObjectMgr->GetPlayer(playersTokens[2]);
  614. Player *player4 = sObjectMgr->GetPlayer(playersTokens[3]);
  615.  
  616. if (!player1)
  617. {
  618. handler->PSendSysMessage("No se puede encontrar al jugador 1.");
  619. handler->SetSentErrorMessage(true);
  620. return false;
  621. }
  622.  
  623. if (!player2)
  624. {
  625. handler->PSendSysMessage("No se puede encontrar al jugador 2.");
  626. handler->SetSentErrorMessage(true);
  627. return false;
  628. }
  629.  
  630. if (!player3)
  631. {
  632. handler->PSendSysMessage("No se puede encontrar al jugador 3.");
  633. handler->SetSentErrorMessage(true);
  634. return false;
  635. }
  636.  
  637. if (!player4)
  638. {
  639. handler->PSendSysMessage("No se puede encontrar al jugador 4.");
  640. handler->SetSentErrorMessage(true);
  641. return false;
  642. }
  643.  
  644. if ((!player1->GetGroup() || player1->GetGroup()->GetMembersCount() != 2 ||
  645. !player2->GetGroup() || player2->GetGroup()->GetMembersCount() != 2 ||
  646. !player3->GetGroup() || player3->GetGroup()->GetMembersCount() != 2 ||
  647. !player4->GetGroup() || player4->GetGroup()->GetMembersCount() != 2) && !ARENA_CHALLENGE_TYPE_2v2)
  648. {
  649. handler->PSendSysMessage("Algún jugador (o todos) no están en grupo o su grupo es mayor a 2 jugadores.");
  650. handler->SetSentErrorMessage(true);
  651. return false;
  652. }
  653.  
  654. if(!player1->IsInSameGroupWith(player2))
  655. {
  656. handler->PSendSysMessage("Los jugadores 1 y 2 no están en el mismo grupo.");
  657. handler->SetSentErrorMessage(true);
  658. return false;
  659. }
  660.  
  661. if(!player3->IsInSameGroupWith(player4))
  662. {
  663. handler->PSendSysMessage("Los jugadores 3 y 4 no están en el mismo grupo.");
  664. handler->SetSentErrorMessage(true);
  665. return false;
  666. }
  667.  
  668. if (!sChallengeMgr->InviteGroupsToArena(player1, player3, (ArenaChallengeType)ARENA_CHALLENGE_TYPE_2v2))
  669. {
  670. handler->PSendSysMessage("Alguno de los 4 participantes está en cola de Arenas o BG, diles que salgan de cola.");
  671. handler->SetSentErrorMessage(true);
  672. return false;
  673. }
  674.  
  675. char* color_clase_player1;
  676. switch (player1->getClass())
  677. {
  678. case CLASS_WARRIOR:
  679. color_clase_player1 = "|CFFC79C6E";
  680. break;
  681. case CLASS_DEATH_KNIGHT:
  682. color_clase_player1 = "|CFFC41F3B";
  683. break;
  684. case CLASS_DRUID:
  685. color_clase_player1 = "|CFFFF7D0A";
  686. break;
  687. case CLASS_HUNTER:
  688. color_clase_player1 = "|CFFABD473";
  689. break;
  690. case CLASS_MAGE:
  691. color_clase_player1 = "|CFF69CCF0";
  692. break;
  693. case CLASS_PALADIN:
  694. color_clase_player1 = "|CFFF58CBA";
  695. break;
  696. case CLASS_PRIEST:
  697. color_clase_player1 = "|CFFFFFFFF";
  698. break;
  699. case CLASS_ROGUE:
  700. color_clase_player1 = "|CFFFFF569";
  701. break;
  702. case CLASS_SHAMAN:
  703. color_clase_player1 = "|CFF0070DE";
  704. break;
  705. case CLASS_WARLOCK:
  706. color_clase_player1 = "|CFF9482C9";
  707. break;
  708. }
  709.  
  710. char* color_clase_player2;
  711. switch (player2->getClass())
  712. {
  713. case CLASS_WARRIOR:
  714. color_clase_player2 = "|CFFC79C6E";
  715. break;
  716. case CLASS_DEATH_KNIGHT:
  717. color_clase_player2 = "|CFFC41F3B";
  718. break;
  719. case CLASS_DRUID:
  720. color_clase_player2 = "|CFFFF7D0A";
  721. break;
  722. case CLASS_HUNTER:
  723. color_clase_player2 = "|CFFABD473";
  724. break;
  725. case CLASS_MAGE:
  726. color_clase_player2 = "|CFF69CCF0";
  727. break;
  728. case CLASS_PALADIN:
  729. color_clase_player2 = "|CFFF58CBA";
  730. break;
  731. case CLASS_PRIEST:
  732. color_clase_player2 = "|CFFFFFFFF";
  733. break;
  734. case CLASS_ROGUE:
  735. color_clase_player2 = "|CFFFFF569";
  736. break;
  737. case CLASS_SHAMAN:
  738. color_clase_player2 = "|CFF0070DE";
  739. break;
  740. case CLASS_WARLOCK:
  741. color_clase_player2 = "|CFF9482C9";
  742. break;
  743. }
  744.  
  745. char* color_clase_player3;
  746. switch (player3->getClass())
  747. {
  748. case CLASS_WARRIOR:
  749. color_clase_player3 = "|CFFC79C6E";
  750. break;
  751. case CLASS_DEATH_KNIGHT:
  752. color_clase_player3 = "|CFFC41F3B";
  753. break;
  754. case CLASS_DRUID:
  755. color_clase_player3 = "|CFFFF7D0A";
  756. break;
  757. case CLASS_HUNTER:
  758. color_clase_player3 = "|CFFABD473";
  759. break;
  760. case CLASS_MAGE:
  761. color_clase_player3 = "|CFF69CCF0";
  762. break;
  763. case CLASS_PALADIN:
  764. color_clase_player3 = "|CFFF58CBA";
  765. break;
  766. case CLASS_PRIEST:
  767. color_clase_player3 = "|CFFFFFFFF";
  768. break;
  769. case CLASS_ROGUE:
  770. color_clase_player3 = "|CFFFFF569";
  771. break;
  772. case CLASS_SHAMAN:
  773. color_clase_player3 = "|CFF0070DE";
  774. break;
  775. case CLASS_WARLOCK:
  776. color_clase_player3 = "|CFF9482C9";
  777. break;
  778. }
  779.  
  780. char* color_clase_player4;
  781. switch (player4->getClass())
  782. {
  783. case CLASS_WARRIOR:
  784. color_clase_player4 = "|CFFC79C6E";
  785. break;
  786. case CLASS_DEATH_KNIGHT:
  787. color_clase_player4 = "|CFFC41F3B";
  788. break;
  789. case CLASS_DRUID:
  790. color_clase_player4 = "|CFFFF7D0A";
  791. break;
  792. case CLASS_HUNTER:
  793. color_clase_player4 = "|CFFABD473";
  794. break;
  795. case CLASS_MAGE:
  796. color_clase_player4 = "|CFF69CCF0";
  797. break;
  798. case CLASS_PALADIN:
  799. color_clase_player4 = "|CFFF58CBA";
  800. break;
  801. case CLASS_PRIEST:
  802. color_clase_player4 = "|CFFFFFFFF";
  803. break;
  804. case CLASS_ROGUE:
  805. color_clase_player4 = "|CFFFFF569";
  806. break;
  807. case CLASS_SHAMAN:
  808. color_clase_player4 = "|CFF0070DE";
  809. break;
  810. case CLASS_WARLOCK:
  811. color_clase_player4 = "|CFF9482C9";
  812. break;
  813. }
  814.  
  815. sWorld->SendAllWorldText("Se ha creado un Challenge de 2c2 entre: %s%s|r - %s%s|r VS %s%s|r - %s%s|r", color_clase_player1, player1->GetName(), color_clase_player2, player2->GetName(), color_clase_player3, player3->GetName(), color_clase_player4, player4->GetName());
  816. return true;
  817. }
  818.  
  819. static bool HandleChallengeCreate3x3Command(ChatHandler* handler, const char* args)
  820. {
  821. std::string sargs = args;
  822. Tokens playersTokens(sargs, ' ');
  823. if (playersTokens.size() != 6)
  824. {
  825. handler->PSendSysMessage("Se necesitan como mínimo 6 nombres de jugadores.");
  826. handler->SetSentErrorMessage(true);
  827. return false;
  828. }
  829.  
  830. Player *player1 = sObjectMgr->GetPlayer(playersTokens[0]);
  831. Player *player2 = sObjectMgr->GetPlayer(playersTokens[1]);
  832. Player *player3 = sObjectMgr->GetPlayer(playersTokens[2]);
  833. Player *player4 = sObjectMgr->GetPlayer(playersTokens[3]);
  834. Player *player5 = sObjectMgr->GetPlayer(playersTokens[4]);
  835. Player *player6 = sObjectMgr->GetPlayer(playersTokens[5]);
  836.  
  837. if (!player1)
  838. {
  839. handler->PSendSysMessage("No se puede encontrar al jugador 1.");
  840. handler->SetSentErrorMessage(true);
  841. return false;
  842. }
  843.  
  844. if (!player2)
  845. {
  846. handler->PSendSysMessage("No se puede encontrar al jugador 2.");
  847. handler->SetSentErrorMessage(true);
  848. return false;
  849. }
  850.  
  851. if (!player3)
  852. {
  853. handler->PSendSysMessage("No se puede encontrar al jugador 3.");
  854. handler->SetSentErrorMessage(true);
  855. return false;
  856. }
  857.  
  858. if (!player4)
  859. {
  860. handler->PSendSysMessage("No se puede encontrar al jugador 4.");
  861. handler->SetSentErrorMessage(true);
  862. return false;
  863. }
  864.  
  865. if (!player5)
  866. {
  867. handler->PSendSysMessage("No se puede encontrar al jugador 5.");
  868. handler->SetSentErrorMessage(true);
  869. return false;
  870. }
  871.  
  872. if (!player6)
  873. {
  874. handler->PSendSysMessage("No se puede encontrar al jugador 6.");
  875. handler->SetSentErrorMessage(true);
  876. return false;
  877. }
  878.  
  879. if ((!player1->GetGroup() || player1->GetGroup()->GetMembersCount() != 3 ||
  880. !player2->GetGroup() || player2->GetGroup()->GetMembersCount() != 3 ||
  881. !player3->GetGroup() || player3->GetGroup()->GetMembersCount() != 3 ||
  882. !player4->GetGroup() || player4->GetGroup()->GetMembersCount() != 3 ||
  883. !player5->GetGroup() || player5->GetGroup()->GetMembersCount() != 3 ||
  884. !player6->GetGroup() || player6->GetGroup()->GetMembersCount() != 3) && !ARENA_CHALLENGE_TYPE_3v3)
  885. {
  886. handler->PSendSysMessage("Algún jugador (o todos) no están en grupo o su grupo es mayor o menor a 3 jugadores.");
  887. handler->SetSentErrorMessage(true);
  888. return false;
  889. }
  890.  
  891. if(!player1->IsInSameGroupWith(player2) || !player1->IsInSameGroupWith(player3) || !player2->IsInSameGroupWith(player3))
  892. {
  893. handler->PSendSysMessage("Algunos de los jugadores 1, 2 o 3 no está en grupo con los demás.");
  894. handler->SetSentErrorMessage(true);
  895. return false;
  896. }
  897.  
  898. if(!player4->IsInSameGroupWith(player5) || !player4->IsInSameGroupWith(player6) || !player5->IsInSameGroupWith(player6))
  899. {
  900. handler->PSendSysMessage("Algunos de los jugadores 4, 5 o 6 no está en grupo con los demás.");
  901. handler->SetSentErrorMessage(true);
  902. return false;
  903. }
  904.  
  905. if (!sChallengeMgr->InviteGroupsToArena(player1, player4, (ArenaChallengeType)ARENA_CHALLENGE_TYPE_3v3))
  906. {
  907. handler->PSendSysMessage("Alguno de los 6 participantes está en cola de Arenas o BG, diles que salgan de cola.");
  908. handler->SetSentErrorMessage(true);
  909. return false;
  910. }
  911.  
  912. char* color_clase_player1;
  913. switch (player1->getClass())
  914. {
  915. case CLASS_WARRIOR:
  916. color_clase_player1 = "|CFFC79C6E";
  917. break;
  918. case CLASS_DEATH_KNIGHT:
  919. color_clase_player1 = "|CFFC41F3B";
  920. break;
  921. case CLASS_DRUID:
  922. color_clase_player1 = "|CFFFF7D0A";
  923. break;
  924. case CLASS_HUNTER:
  925. color_clase_player1 = "|CFFABD473";
  926. break;
  927. case CLASS_MAGE:
  928. color_clase_player1 = "|CFF69CCF0";
  929. break;
  930. case CLASS_PALADIN:
  931. color_clase_player1 = "|CFFF58CBA";
  932. break;
  933. case CLASS_PRIEST:
  934. color_clase_player1 = "|CFFFFFFFF";
  935. break;
  936. case CLASS_ROGUE:
  937. color_clase_player1 = "|CFFFFF569";
  938. break;
  939. case CLASS_SHAMAN:
  940. color_clase_player1 = "|CFF0070DE";
  941. break;
  942. case CLASS_WARLOCK:
  943. color_clase_player1 = "|CFF9482C9";
  944. break;
  945. }
  946.  
  947. char* color_clase_player2;
  948. switch (player2->getClass())
  949. {
  950. case CLASS_WARRIOR:
  951. color_clase_player2 = "|CFFC79C6E";
  952. break;
  953. case CLASS_DEATH_KNIGHT:
  954. color_clase_player2 = "|CFFC41F3B";
  955. break;
  956. case CLASS_DRUID:
  957. color_clase_player2 = "|CFFFF7D0A";
  958. break;
  959. case CLASS_HUNTER:
  960. color_clase_player2 = "|CFFABD473";
  961. break;
  962. case CLASS_MAGE:
  963. color_clase_player2 = "|CFF69CCF0";
  964. break;
  965. case CLASS_PALADIN:
  966. color_clase_player2 = "|CFFF58CBA";
  967. break;
  968. case CLASS_PRIEST:
  969. color_clase_player2 = "|CFFFFFFFF";
  970. break;
  971. case CLASS_ROGUE:
  972. color_clase_player2 = "|CFFFFF569";
  973. break;
  974. case CLASS_SHAMAN:
  975. color_clase_player2 = "|CFF0070DE";
  976. break;
  977. case CLASS_WARLOCK:
  978. color_clase_player2 = "|CFF9482C9";
  979. break;
  980. }
  981.  
  982. char* color_clase_player3;
  983. switch (player3->getClass())
  984. {
  985. case CLASS_WARRIOR:
  986. color_clase_player3 = "|CFFC79C6E";
  987. break;
  988. case CLASS_DEATH_KNIGHT:
  989. color_clase_player3 = "|CFFC41F3B";
  990. break;
  991. case CLASS_DRUID:
  992. color_clase_player3 = "|CFFFF7D0A";
  993. break;
  994. case CLASS_HUNTER:
  995. color_clase_player3 = "|CFFABD473";
  996. break;
  997. case CLASS_MAGE:
  998. color_clase_player3 = "|CFF69CCF0";
  999. break;
  1000. case CLASS_PALADIN:
  1001. color_clase_player3 = "|CFFF58CBA";
  1002. break;
  1003. case CLASS_PRIEST:
  1004. color_clase_player3 = "|CFFFFFFFF";
  1005. break;
  1006. case CLASS_ROGUE:
  1007. color_clase_player3 = "|CFFFFF569";
  1008. break;
  1009. case CLASS_SHAMAN:
  1010. color_clase_player3 = "|CFF0070DE";
  1011. break;
  1012. case CLASS_WARLOCK:
  1013. color_clase_player3 = "|CFF9482C9";
  1014. break;
  1015. }
  1016.  
  1017. char* color_clase_player4;
  1018. switch (player4->getClass())
  1019. {
  1020. case CLASS_WARRIOR:
  1021. color_clase_player4 = "|CFFC79C6E";
  1022. break;
  1023. case CLASS_DEATH_KNIGHT:
  1024. color_clase_player4 = "|CFFC41F3B";
  1025. break;
  1026. case CLASS_DRUID:
  1027. color_clase_player4 = "|CFFFF7D0A";
  1028. break;
  1029. case CLASS_HUNTER:
  1030. color_clase_player4 = "|CFFABD473";
  1031. break;
  1032. case CLASS_MAGE:
  1033. color_clase_player4 = "|CFF69CCF0";
  1034. break;
  1035. case CLASS_PALADIN:
  1036. color_clase_player4 = "|CFFF58CBA";
  1037. break;
  1038. case CLASS_PRIEST:
  1039. color_clase_player4 = "|CFFFFFFFF";
  1040. break;
  1041. case CLASS_ROGUE:
  1042. color_clase_player4 = "|CFFFFF569";
  1043. break;
  1044. case CLASS_SHAMAN:
  1045. color_clase_player4 = "|CFF0070DE";
  1046. break;
  1047. case CLASS_WARLOCK:
  1048. color_clase_player4 = "|CFF9482C9";
  1049. break;
  1050. }
  1051.  
  1052. char* color_clase_player5;
  1053. switch (player5->getClass())
  1054. {
  1055. case CLASS_WARRIOR:
  1056. color_clase_player5 = "|CFFC79C6E";
  1057. break;
  1058. case CLASS_DEATH_KNIGHT:
  1059. color_clase_player5 = "|CFFC41F3B";
  1060. break;
  1061. case CLASS_DRUID:
  1062. color_clase_player5 = "|CFFFF7D0A";
  1063. break;
  1064. case CLASS_HUNTER:
  1065. color_clase_player5 = "|CFFABD473";
  1066. break;
  1067. case CLASS_MAGE:
  1068. color_clase_player5 = "|CFF69CCF0";
  1069. break;
  1070. case CLASS_PALADIN:
  1071. color_clase_player5 = "|CFFF58CBA";
  1072. break;
  1073. case CLASS_PRIEST:
  1074. color_clase_player5 = "|CFFFFFFFF";
  1075. break;
  1076. case CLASS_ROGUE:
  1077. color_clase_player5 = "|CFFFFF569";
  1078. break;
  1079. case CLASS_SHAMAN:
  1080. color_clase_player5 = "|CFF0070DE";
  1081. break;
  1082. case CLASS_WARLOCK:
  1083. color_clase_player5 = "|CFF9482C9";
  1084. break;
  1085. }
  1086.  
  1087. char* color_clase_player6;
  1088. switch (player6->getClass())
  1089. {
  1090. case CLASS_WARRIOR:
  1091. color_clase_player6 = "|CFFC79C6E";
  1092. break;
  1093. case CLASS_DEATH_KNIGHT:
  1094. color_clase_player6 = "|CFFC41F3B";
  1095. break;
  1096. case CLASS_DRUID:
  1097. color_clase_player6 = "|CFFFF7D0A";
  1098. break;
  1099. case CLASS_HUNTER:
  1100. color_clase_player6 = "|CFFABD473";
  1101. break;
  1102. case CLASS_MAGE:
  1103. color_clase_player6 = "|CFF69CCF0";
  1104. break;
  1105. case CLASS_PALADIN:
  1106. color_clase_player6 = "|CFFF58CBA";
  1107. break;
  1108. case CLASS_PRIEST:
  1109. color_clase_player6 = "|CFFFFFFFF";
  1110. break;
  1111. case CLASS_ROGUE:
  1112. color_clase_player6 = "|CFFFFF569";
  1113. break;
  1114. case CLASS_SHAMAN:
  1115. color_clase_player6 = "|CFF0070DE";
  1116. break;
  1117. case CLASS_WARLOCK:
  1118. color_clase_player6 = "|CFF9482C9";
  1119. break;
  1120. }
  1121.  
  1122. sWorld->SendAllWorldText("Se ha creado un Challenge de 3c3 entre: %s%s|r - %s%s|r - %s%s|r VS %s%s|r - %s%s|r - %s%s|r", color_clase_player1, player1->GetName(), color_clase_player2, player2->GetName(), color_clase_player3, player3->GetName(), color_clase_player4, player4->GetName(), color_clase_player5, player5->GetName(), color_clase_player6, player6->GetName());
  1123. return true;
  1124. }
  1125.  
  1126. /*static bool HandleChallengeCreate5x5Command(ChatHandler* handler, const char* args)
  1127. {
  1128. return ChallengeCreateForBracket(handler, args, ARENA_CHALLENGE_TYPE_5v5);
  1129. }*/
  1130.  
  1131. static bool ChallengeCreateForBracket(ChatHandler* handler, const char* args, uint8 type)
  1132. {
  1133. std::string sargs = args;
  1134. Tokens playersTokens(sargs, ' ');
  1135. if (playersTokens.size() != 2)
  1136. {
  1137. handler->PSendSysMessage("Se necesitan como mínimo 2 argumentos.");
  1138. handler->SetSentErrorMessage(true);
  1139. return false;
  1140. }
  1141.  
  1142. Player *player1 = sObjectMgr->GetPlayer(playersTokens[0]);
  1143. Player *player2 = sObjectMgr->GetPlayer(playersTokens[1]);
  1144.  
  1145. if (!player1 || !player2)
  1146. {
  1147. handler->PSendSysMessage("No se puede encontrar a algún jugador.");
  1148. handler->SetSentErrorMessage(true);
  1149. return false;
  1150. }
  1151.  
  1152. if ((!player1->GetGroup() || player1->GetGroup()->GetMembersCount() != type ||
  1153. !player2->GetGroup() || player2->GetGroup()->GetMembersCount() != type) && type != ARENA_CHALLENGE_TYPE_1v1)
  1154. {
  1155. handler->PSendSysMessage("Cantidad de jugadores incorrecta.");
  1156. handler->SetSentErrorMessage(true);
  1157. return false;
  1158. }
  1159.  
  1160. if (!sChallengeMgr->InviteGroupsToArena(player1, player2, (ArenaChallengeType)type))
  1161. {
  1162. handler->PSendSysMessage("No puedes unirte a la cola.");
  1163. handler->SetSentErrorMessage(true);
  1164. return false;
  1165. }
  1166.  
  1167. return true;
  1168. }
  1169. };
  1170.  
  1171. void AddSC_challenge_script()
  1172. {
  1173. new challenge_commands();
  1174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement