Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2010
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.89 KB | None | 0 0
  1. #
  2. /* $Id: Locker.cpp 182 2010-01-08 10:35:27Z sausage $
  3. #
  4.  * EOSERV is released under the zlib license.
  5. #
  6.  * See LICENSE.txt for more info.
  7. #
  8.  */
  9. #
  10.  
  11. #
  12. #include "handlers.h"
  13. #
  14.  
  15. #
  16. #include "map.hpp"
  17. #
  18. #include "npc.hpp"
  19. #
  20.  
  21. #
  22. CLIENT_F_FUNC(Priest)
  23. #
  24. {
  25. #
  26.         PacketBuilder reply;
  27. #
  28.         switch (action)
  29. #
  30.         {
  31. #
  32.             case PACKET_ACCEPT: // Player accepting marriage proposal
  33. #
  34.             {
  35. #
  36.                 if (this->state < EOClient::Playing) return false;
  37. #
  38.  
  39. #
  40.                 if (this->player->character->npc_type != ENF::Priest || !this->player->character->npc->marriage ||
  41. #
  42.                  this->player->character->npc->marriage->partner[1] != this->player->character)
  43. #
  44.                 return false;
  45. #
  46.  
  47. #
  48.             this->player->character->npc->marriage->request_accepted = true;
  49. #
  50.             this->player->character->npc->marriage->last_execution = Timer::GetTime() + util::to_int(this->server->world->config["WeddingStartDelay"]);
  51. #
  52.             this->player->character->npc->ShowDialog("Very well, the ceremony will start in 20 seconds.");
  53. #
  54.             this->player->character->npc->marriage->state = 1;
  55. #
  56.  
  57. #
  58.             reply.SetID(PACKET_MUSIC, PACKET_PLAYER);
  59. #
  60.             reply.AddShort(util::to_int(this->server->world->config["WeddingMusic"]));
  61. #
  62.             UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character)
  63. #
  64.             {
  65. #
  66.                 character->player->client->SendBuilder(reply);
  67. #
  68.             }
  69. #
  70.             }
  71. #
  72.             break;
  73. #
  74.  
  75. #
  76.                 case PACKET_USE: // Player accepting marriage ("Yes, I do")
  77. #
  78.                 {
  79. #
  80.                     if (this->state < EOClient::Playing) return false;
  81. #
  82.  
  83. #
  84.             if (this->player->character->npc_type != ENF::Priest || !this->player->character->npc->marriage)
  85. #
  86.                 return false;
  87. #
  88.  
  89. #
  90.             if (this->player->character->npc->marriage->partner[0] == this->player->character)
  91. #
  92.             {
  93. #
  94.                 this->player->character->npc->marriage->partner_accepted[0] = true;
  95. #
  96.                 this->player->character->map->Msg(this->player->character, "Yes, I do.", true);
  97. #
  98.             }
  99. #
  100.             else if (this->player->character->npc->marriage->partner[1] == this->player->character)
  101. #
  102.             {
  103. #
  104.                 this->player->character->npc->marriage->partner_accepted[1] = true;
  105. #
  106.                 this->player->character->map->Msg(this->player->character, "Yes, I do.", true);
  107. #
  108.             }
  109. #
  110.                 }
  111. #
  112.                 break;
  113. #
  114.  
  115. #
  116.         case PACKET_REQUEST: // Requesting a marriage
  117. #
  118.                 {
  119. #
  120.                     if (this->state < EOClient::Playing) return false;
  121. #
  122.  
  123. #
  124.             if (this->player->character->npc_type != ENF::Priest)
  125. #
  126.                 return false;
  127. #
  128.  
  129. #
  130.                     reader.GetInt(); // Session token
  131. #
  132.                     reader.GetByte();
  133. #
  134.                     Character *partner = this->server->world->GetCharacter(reader.GetEndString());
  135. #
  136.  
  137. #
  138.                     if (!partner || partner == this->player->character || partner->map != this->player->character->map)
  139. #
  140.                     {
  141. #
  142.                         reply.SetID(PACKET_PRIEST, PACKET_REPLY);
  143. #
  144.                 reply.AddChar(PRIEST_PARTNER_MAP);
  145. #
  146.                     }
  147. #
  148.                     else if (!partner->partner.empty())
  149. #
  150.                     {
  151. #
  152.                         reply.SetID(PACKET_PRIEST, PACKET_REPLY);
  153. #
  154.                 reply.AddChar(PRIEST_PARTNER_ALREADY_MARRIED);
  155. #
  156.                     }
  157. #
  158.                     else if (partner->paperdoll[Character::Armor] != util::to_int(this->server->world->config[(partner->gender == GENDER_FEMALE ? "WeddingArmorFemale" : "WeddingArmorMale")]))
  159. #
  160.                     {
  161. #
  162.                         reply.SetID(PACKET_PRIEST, PACKET_REPLY);
  163. #
  164.                         reply.AddChar(PRIEST_PARTNER_CLOTHES);
  165. #
  166.                     }
  167. #
  168.                     else if (this->player->character->npc->marriage)
  169. #
  170.             {
  171. #
  172.                 reply.SetID(PACKET_PRIEST, PACKET_REPLY);
  173. #
  174.                 reply.AddChar(PRIEST_BUSY);
  175. #
  176.             }
  177. #
  178.             else if (this->player->character->fiance != partner->name || partner->name != this->player->character->fiance)
  179. #
  180.             {
  181. #
  182.                 reply.SetID(PACKET_PRIEST, PACKET_REPLY);
  183. #
  184.                         reply.AddChar(PRIEST_NO_PREMISSION);
  185. #
  186.             }
  187. #
  188.                     else
  189. #
  190.                     {
  191. #
  192.                         partner->npc = this->player->character->npc;
  193. #
  194.                         partner->npc_type = ENF::Priest;
  195. #
  196.  
  197. #
  198.                         partner->npc->marriage = new NPC_Marriage();
  199. #
  200.                         partner->npc->marriage->partner[0] = this->player->character;
  201. #
  202.                         partner->npc->marriage->partner[1] = partner;
  203. #
  204.  
  205. #
  206.                 PacketBuilder builder(PACKET_PRIEST, PACKET_REQUEST);
  207. #
  208.                 builder.AddShort(1); // Ask apollo what this is
  209. #
  210.                 builder.AddString(this->player->character->name);
  211. #
  212.                 partner->player->client->SendBuilder(builder);
  213. #
  214.                     }
  215. #
  216.                     CLIENT_SEND(reply);
  217. #
  218.                 }
  219. #
  220.                 break;
  221. #
  222.  
  223. #
  224.                 case PACKET_OPEN: // Talked to a priest
  225. #
  226.                 {
  227. #
  228.                         if (this->state < EOClient::Playing) return false;
  229. #
  230.  
  231. #
  232.                         short id = reader.GetShort();
  233. #
  234.  
  235. #
  236.                         UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc)
  237. #
  238.                         {
  239. #
  240.                                 if (npc->index == id && npc->Data()->type == ENF::Priest)
  241. #
  242.                                 {
  243. #
  244.                                         this->player->character->npc = *npc;
  245. #
  246.                                         this->player->character->npc_type = ENF::Priest;
  247. #
  248.  
  249. #
  250.                                         if (!this->player->character->partner.empty())
  251. #
  252.                                         {
  253. #
  254.                                             break;
  255. #
  256.                                         }
  257. #
  258.                                         if (npc->marriage)
  259. #
  260.                                         {
  261. #
  262.                         reply.SetID(PACKET_PRIEST, PACKET_REPLY);
  263. #
  264.                         reply.AddChar(PRIEST_BUSY);
  265. #
  266.                                         }
  267. #
  268.                     else if (this->player->character->paperdoll[Character::Armor] != util::to_int(this->server->world->config[(this->player->character->gender == GENDER_FEMALE ? "WeddingArmorFemale" : "WeddingArmorMale")]) ||
  269. #
  270.                              util::to_int(this->server->world->config[(this->player->character->gender == GENDER_FEMALE ? "WeddingArmorFemale" : "WeddingArmorMale")]) == 0)
  271. #
  272.                     {
  273. #
  274.                         reply.SetID(PACKET_PRIEST, PACKET_REPLY);
  275. #
  276.                         reply.AddChar(PRIEST_CLOTHES);
  277. #
  278.                     }
  279. #
  280.                     else if (this->player->character->level < util::to_int(this->server->world->config["WeddingLevelNeeded"]))
  281. #
  282.                     {
  283. #
  284.                         reply.SetID(PACKET_PRIEST, PACKET_REPLY);
  285. #
  286.                         reply.AddChar(PRIEST_UNEXPERIENCED);
  287. #
  288.                     }
  289. #
  290.                     else
  291. #
  292.                     {
  293. #
  294.                         reply.SetID(PACKET_PRIEST, PACKET_OPEN);
  295. #
  296.                         reply.AddInt(0); // Session token
  297. #
  298.                     }
  299. #
  300.                                         CLIENT_SEND(reply);
  301. #
  302.  
  303. #
  304.                                         break;
  305. #
  306.                                 }
  307. #
  308.                         }
  309. #
  310.                 }
  311. #
  312.                 break;
  313. #
  314.  
  315. #
  316.                 default:
  317. #
  318.                         return false;
  319. #
  320.         }
  321. #
  322.  
  323. #
  324.         return true;
  325. #
  326. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement