Advertisement
Guest User

Untitled

a guest
Sep 4th, 2012
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.63 KB | None | 0 0
  1. #include "handlers.hpp"
  2.  
  3. #include "../character.hpp"
  4. #include "../map.hpp"
  5. #include "../npc.hpp"
  6. #include "../util.hpp"
  7.  
  8. namespace Handlers
  9. {
  10.     void Law_Request(Character *character, PacketReader &reader)
  11.     {
  12.         if (character->npc_type == ENF::Law)
  13.         {
  14.             LawAction action = static_cast<LawAction>(reader.GetChar());
  15.  
  16.             reader.GetInt();
  17.             reader.GetByte();
  18.  
  19.             std::string partner = reader.GetEndString();
  20.  
  21.             switch (action)
  22.             {
  23.                 case LAW_ACTION_MARRIAGE:
  24.                 {
  25.                     if (!character->partner.empty())
  26.                     {
  27.                         PacketBuilder reply;
  28.                         reply.SetID(PACKET_MARRIAGE, PACKET_REPLY);
  29.                         reply.AddChar(LAW_ALREADY_MARRIED);
  30.                         character->Send(reply);
  31.                     }
  32.                     else
  33.                     {
  34.                         if (character->HasItem(1) >= int(character->world->config["LawMarriageCost"]))
  35.                         {
  36.                             character->DelItem(1, int(character->world->config["LawMarriageCost"]));
  37.  
  38.                             PacketBuilder reply;
  39.                             reply.SetID(PACKET_MARRIAGE, PACKET_REPLY);
  40.                             reply.AddChar(LAW_FIANCE);
  41.                             character->Send(reply);
  42.  
  43.                             reply.Reset();
  44.                             reply.SetID(PACKET_ITEM, PACKET_OBTAIN);
  45.                             reply.AddShort(1);
  46.                             reply.AddThree(character->HasItem(1));
  47.                             character->Send(reply);
  48.  
  49.                             character->fiance = util::ucfirst(util::lowercase(partner));
  50.                         }
  51.                         else
  52.                         {
  53.                             PacketBuilder reply;
  54.                             reply.SetID(PACKET_MARRIAGE, PACKET_REPLY);
  55.                             reply.AddChar(LAW_NO_GOLD);
  56.                             character->Send(reply);
  57.                         }
  58.                     }
  59.                 }
  60.                 break;
  61.  
  62.                 case LAW_ACTION_DIVORCE:
  63.                 {
  64.                     if (character->partner.empty())
  65.                     {
  66.                         PacketBuilder reply;
  67.                         reply.SetID(PACKET_MARRIAGE, PACKET_REPLY);
  68.                         reply.AddChar(LAW_NOT_MARRIED);
  69.                         character->Send(reply);
  70.                     }
  71.                     else if (character->partner != partner)
  72.                     {
  73.                         PacketBuilder reply;
  74.                         reply.SetID(PACKET_MARRIAGE, PACKET_REPLY);
  75.                         reply.AddChar(LAW_INVALID_FIANCE);
  76.                         character->Send(reply);
  77.                     }
  78.                     else if (character->HasItem(1) < int(character->world->config["LawDivorceCost"]))
  79.                     {
  80.                         PacketBuilder reply;
  81.                         reply.SetID(PACKET_MARRIAGE, PACKET_REPLY);
  82.                         reply.AddChar(LAW_NO_GOLD);
  83.                         character->Send(reply);
  84.                     }
  85.                     else
  86.                     {
  87.                         if (character->world->CharacterExists(partner))
  88.                         {
  89.                             character->DelItem(1, int(character->world->config["LawDivorceCost"]));
  90.                             Character *divorced = character->world->GetCharacter(partner);
  91.  
  92.                             character->Save();
  93.  
  94.                             if (divorced)
  95.                             {
  96.                                 PacketBuilder builder(PACKET_MARRIAGE, PACKET_REPLY);
  97.                                 builder.AddChar(LAW_DIVORCED);
  98.                                 divorced->Send(builder);
  99.  
  100.                                 divorced->partner = "";
  101.                             }
  102.                             else
  103.                             {
  104.                                 character->world->db.Query("UPDATE `characters` SET `partner` = ''  WHERE `name` = '$'", partner.c_str());
  105.                             }
  106.  
  107.                             PacketBuilder reply;
  108.                             reply.SetID(PACKET_MARRIAGE, PACKET_REPLY);
  109.                             reply.AddChar(LAW_FIANCE);
  110.                             character->Send(reply);
  111.  
  112.                             reply.Reset();
  113.                             reply.SetID(PACKET_ITEM, PACKET_OBTAIN);
  114.                             reply.AddShort(1);
  115.                             reply.AddThree(character->HasItem(1));
  116.                             character->Send(reply);
  117.  
  118.                             character->partner = "";
  119.                         }
  120.                     }
  121.                 }
  122.                 break;
  123.             }
  124.         }
  125.     }
  126.  
  127.     void Law_Open(Character *character, PacketReader &reader)
  128.     {
  129.         short id = reader.GetShort();
  130.  
  131.         UTIL_FOREACH(character->map->npcs, npc)
  132.         {
  133.             if (npc->index == id && npc->Data()->type == ENF::Law)
  134.             {
  135.                 character->npc = npc;
  136.                 character->npc_type = ENF::Law;
  137.  
  138.                 PacketBuilder reply;
  139.                 reply.SetID(PACKET_MARRIAGE, PACKET_OPEN);
  140.                 reply.AddInt(0);
  141.                 character->Send(reply);
  142.  
  143.                 break;
  144.             }
  145.         }
  146.     }
  147.  
  148.     PACKET_HANDLER_REGISTER(PACKET_MARRIAGE)
  149.         Register(PACKET_REQUEST, Law_Request, Playing);
  150.         Register(PACKET_OPEN, Law_Open, Playing);
  151.     PACKET_HANDLER_REGISTER_END()
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement