Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* $Id: Jukebox.cpp 181 2009-12-31 04:24:55Z sausage $
- * EOSERV is released under the zlib license.
- * See LICENSE.txt for more info.
- */
- #include "handlers.h"
- #include "map.hpp"
- #include "npc.hpp"
- CLIENT_F_FUNC(Law)
- {
- PacketBuilder reply;
- switch (action)
- {
- case PACKET_REQUEST: // Marriage or divorce request
- {
- if (this->player->character->npc_type == ENF::Law)
- {
- unsigned char action = reader.GetChar();
- /*int session = */reader.GetInt();
- reader.GetByte(); // ?
- std::string partner = reader.GetEndString();
- switch (action)
- {
- case LAW_ACTION_MARRIAGE:
- {
- if (!this->player->character->partner.empty())
- {
- reply.SetID(PACKET_LAW, PACKET_REPLY);
- reply.AddChar(LAW_ALREADY_MARRIED);
- }
- else if (this->player->character->HasItem(1) < static_cast<int>(this->server->world->config["LawMarriageCost"]))
- {
- reply.SetID(PACKET_LAW, PACKET_REPLY);
- reply.AddChar(LAW_NO_GOLD);
- }
- else
- {
- this->player->character->DelItem(1, static_cast<int>(this->server->world->config["LawMarriageCost"]));
- reply.SetID(PACKET_LAW, PACKET_REPLY);
- reply.AddChar(LAW_FIANCE);
- reply.Reset();
- reply.SetID(PACKET_ITEM, PACKET_STOCK);
- reply.AddShort(1);
- reply.AddThree(this->player->character->HasItem(1));
- CLIENT_SEND(reply);
- this->player->character->fiance = partner;
- }
- CLIENT_SEND(reply);
- }
- break;
- case LAW_ACTION_DIVORCE:
- {
- if (this->player->character->partner.empty())
- {
- reply.SetID(PACKET_LAW, PACKET_REPLY);
- reply.AddChar(LAW_NOT_MARRIED);
- CLIENT_SEND(reply);
- }
- else if (this->player->character->partner != partner)
- {
- reply.SetID(PACKET_LAW, PACKET_REPLY);
- reply.AddChar(LAW_INVALID_FIANCE);
- CLIENT_SEND(reply);
- }
- else if (this->player->character->HasItem(1) < static_cast<int>(this->server->world->config["LawDivorceCost"]))
- {
- reply.SetID(PACKET_LAW, PACKET_REPLY);
- reply.AddChar(LAW_NO_GOLD);
- CLIENT_SEND(reply);
- }
- else
- {
- if (this->server->world->CharacterExists(partner))
- {
- this->player->character->DelItem(1, static_cast<int>(this->server->world->config["LawDivorceCost"]));
- Character *divorced = this->server->world->GetCharacter(partner);
- if (divorced)
- {
- PacketBuilder builder(PACKET_LAW, PACKET_REPLY);
- builder.AddChar(LAW_DIVORCED);
- divorced->player->client->SendBuilder(builder);
- divorced->partner = "";
- }
- else
- {
- this->server->world->db.Query("UPDATE `characters` SET `partner` = '' WHERE `name` = '$'", partner.c_str());
- }
- reply.SetID(PACKET_LAW, PACKET_REPLY);
- reply.AddChar(LAW_FIANCE);
- CLIENT_SEND(reply);
- reply.Reset();
- reply.SetID(PACKET_ITEM, PACKET_STOCK);
- reply.AddShort(1);
- reply.AddThree(this->player->character->HasItem(1));
- CLIENT_SEND(reply);
- this->player->character->partner = "";
- }
- }
- }
- break;
- }
- }
- }
- break;
- case PACKET_OPEN: // Talked to a lawyer
- {
- short id = reader.GetShort();
- UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc)
- {
- if (npc->index == id && npc->Data()->type == ENF::Law)
- {
- this->player->character->npc = *npc;
- this->player->character->npc_type = ENF::Law;
- reply.SetID(PACKET_LAW, PACKET_OPEN);
- reply.AddInt(0); // Session token
- CLIENT_SEND(reply);
- break;
- }
- }
- }
- break;
- default:
- return false;
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement