#include "handlers.hpp" #include "character.hpp" #include "map.hpp" #include "npc.hpp" #include "chat.hpp" namespace Handlers { void Priest_Accept(Character *character, PacketReader &reader) { (void)character; (void)reader; if (character->npc_type == ENF::Priest && character->npc->marriage && character->npc->marriage->partner[1] == character) { character->npc->marriage->request_accepted = true; character->npc->marriage->last_execution = Timer::GetTime() + util::to_int(character->world->config["WeddingStartDelay"]); character->npc->ShowDialog(character->world->i18n.Format("wedding_wait", util::to_string(static_cast<int>(character->world->config["WeddingStartDelay"])))); character->npc->marriage->state = 1; PacketBuilder reply; reply.SetID(PACKET_MUSIC, PACKET_PLAYER); reply.AddShort(util::to_int(character->world->config["WeddingMusic"])); UTIL_FOREACH(character->map->characters, character) { character->Send(reply); } } } void Priest_Use(Character *character, PacketReader &reader) { (void)character; (void)reader; if (character->npc_type == ENF::Priest && character->npc->marriage) { if (character->npc->marriage->partner[0] == character) { character->npc->marriage->partner_accepted[0] = true; character->npc->marriage->partner[0]->map->Msg(character, character->world->i18n.Format("wedding_ido")); } if (character->npc->marriage->partner[1] == character) { character->npc->marriage->partner_accepted[1] = true; character->npc->marriage->partner[1]->map->Msg(character, character->world->i18n.Format("wedding_ido")); } } } void Priest_Request(Character *character, PacketReader &reader) { if (character->npc_type == ENF::Priest) { reader.GetInt(); reader.GetByte(); Character *partner = character->world->GetCharacter(reader.GetEndString()); if (!partner || partner == character || partner->map != character->map) { PacketBuilder reply; reply.SetID(PACKET_PRIEST, PACKET_REPLY); reply.AddChar(PRIEST_PARTNER_MAP); character->Send(reply); } else if (!partner->partner.empty()) { PacketBuilder reply; reply.SetID(PACKET_PRIEST, PACKET_REPLY); reply.AddChar(PRIEST_PARTNER_ALREADY_MARRIED); character->Send(reply); } else if (partner->paperdoll[Character::Armor] != util::to_int(character->world->config[(partner->gender == GENDER_FEMALE ? "WeddingArmorFemale" : "WeddingArmorMale")])) { PacketBuilder reply; reply.SetID(PACKET_PRIEST, PACKET_REPLY); reply.AddChar(PRIEST_PARTNER_CLOTHES); partner->Send(reply); } else if (character->fiance != util::ucfirst(util::lowercase(partner->name)) || partner->fiance != util::ucfirst(util::lowercase(character->name))) { PacketBuilder reply; reply.SetID(PACKET_PRIEST, PACKET_REPLY); reply.AddChar(PRIEST_NO_PREMISSION); character->Send(reply); } else { partner->npc = character->npc; partner->npc_type = ENF::Priest; partner->npc->marriage = new NPC_Marriage(); partner->npc->marriage->partner[0] = character; partner->npc->marriage->partner[1] = partner; PacketBuilder builder(PACKET_PRIEST, PACKET_REQUEST); builder.AddShort(1); builder.AddString(character->name); partner->Send(builder); } } } void Priest_Open(Character *character, PacketReader &reader) { short id = reader.GetShort(); UTIL_FOREACH(character->map->npcs, npc) { if (npc->index == id && npc->Data()->type == ENF::Priest) { character->npc = npc; character->npc_type = ENF::Priest; if (character->fiance.empty()) { npc->ShowDialog(character->world->i18n.Format("WeddingNoPartner")); break; } if (character->paperdoll[Character::Armor] != util::to_int(character->world->config[(character->gender == GENDER_FEMALE ? "WeddingArmorFemale" : "WeddingArmorMale")]) || util::to_int(character->world->config[(character->gender == GENDER_FEMALE ? "WeddingArmorFemale" : "WeddingArmorMale")]) == 0) { PacketBuilder reply; reply.SetID(PACKET_PRIEST, PACKET_REPLY); reply.AddChar(PRIEST_CLOTHES); character->Send(reply); } else if (character->level < util::to_int(character->world->config["WeddingLevelNeeded"])) { PacketBuilder reply; reply.SetID(PACKET_PRIEST, PACKET_REPLY); reply.AddChar(PRIEST_UNEXPERIENCED); character->Send(reply); } else { PacketBuilder reply; reply.SetID(PACKET_PRIEST, PACKET_OPEN); reply.AddInt(0); character->Send(reply); } break; } } } PACKET_HANDLER_REGISTER(PACKET_PRIEST) Register(PACKET_ACCEPT, Priest_Accept, Playing); Register(PACKET_USE, Priest_Use, Playing); Register(PACKET_REQUEST, Priest_Request, Playing); Register(PACKET_OPEN, Priest_Open, Playing); PACKET_HANDLER_REGISTER_END() }