Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #
- /* $Id: Locker.cpp 182 2010-01-08 10:35:27Z 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(Priest)
- #
- {
- #
- PacketBuilder reply;
- #
- switch (action)
- #
- {
- #
- case PACKET_ACCEPT: // Player accepting marriage proposal
- #
- {
- #
- if (this->state < EOClient::Playing) return false;
- #
- #
- if (this->player->character->npc_type != ENF::Priest || !this->player->character->npc->marriage ||
- #
- this->player->character->npc->marriage->partner[1] != this->player->character)
- #
- return false;
- #
- #
- this->player->character->npc->marriage->request_accepted = true;
- #
- this->player->character->npc->marriage->last_execution = Timer::GetTime() + util::to_int(this->server->world->config["WeddingStartDelay"]);
- #
- this->player->character->npc->ShowDialog("Very well, the ceremony will start in 20 seconds.");
- #
- this->player->character->npc->marriage->state = 1;
- #
- #
- reply.SetID(PACKET_MUSIC, PACKET_PLAYER);
- #
- reply.AddShort(util::to_int(this->server->world->config["WeddingMusic"]));
- #
- UTIL_PTR_LIST_FOREACH(this->player->character->map->characters, Character, character)
- #
- {
- #
- character->player->client->SendBuilder(reply);
- #
- }
- #
- }
- #
- break;
- #
- #
- case PACKET_USE: // Player accepting marriage ("Yes, I do")
- #
- {
- #
- if (this->state < EOClient::Playing) return false;
- #
- #
- if (this->player->character->npc_type != ENF::Priest || !this->player->character->npc->marriage)
- #
- return false;
- #
- #
- if (this->player->character->npc->marriage->partner[0] == this->player->character)
- #
- {
- #
- this->player->character->npc->marriage->partner_accepted[0] = true;
- #
- this->player->character->map->Msg(this->player->character, "Yes, I do.", true);
- #
- }
- #
- else if (this->player->character->npc->marriage->partner[1] == this->player->character)
- #
- {
- #
- this->player->character->npc->marriage->partner_accepted[1] = true;
- #
- this->player->character->map->Msg(this->player->character, "Yes, I do.", true);
- #
- }
- #
- }
- #
- break;
- #
- #
- case PACKET_REQUEST: // Requesting a marriage
- #
- {
- #
- if (this->state < EOClient::Playing) return false;
- #
- #
- if (this->player->character->npc_type != ENF::Priest)
- #
- return false;
- #
- #
- reader.GetInt(); // Session token
- #
- reader.GetByte();
- #
- Character *partner = this->server->world->GetCharacter(reader.GetEndString());
- #
- #
- if (!partner || partner == this->player->character || partner->map != this->player->character->map)
- #
- {
- #
- reply.SetID(PACKET_PRIEST, PACKET_REPLY);
- #
- reply.AddChar(PRIEST_PARTNER_MAP);
- #
- }
- #
- else if (!partner->partner.empty())
- #
- {
- #
- reply.SetID(PACKET_PRIEST, PACKET_REPLY);
- #
- reply.AddChar(PRIEST_PARTNER_ALREADY_MARRIED);
- #
- }
- #
- else if (partner->paperdoll[Character::Armor] != util::to_int(this->server->world->config[(partner->gender == GENDER_FEMALE ? "WeddingArmorFemale" : "WeddingArmorMale")]))
- #
- {
- #
- reply.SetID(PACKET_PRIEST, PACKET_REPLY);
- #
- reply.AddChar(PRIEST_PARTNER_CLOTHES);
- #
- }
- #
- else if (this->player->character->npc->marriage)
- #
- {
- #
- reply.SetID(PACKET_PRIEST, PACKET_REPLY);
- #
- reply.AddChar(PRIEST_BUSY);
- #
- }
- #
- else if (this->player->character->fiance != partner->name || partner->name != this->player->character->fiance)
- #
- {
- #
- reply.SetID(PACKET_PRIEST, PACKET_REPLY);
- #
- reply.AddChar(PRIEST_NO_PREMISSION);
- #
- }
- #
- else
- #
- {
- #
- partner->npc = this->player->character->npc;
- #
- partner->npc_type = ENF::Priest;
- #
- #
- partner->npc->marriage = new NPC_Marriage();
- #
- partner->npc->marriage->partner[0] = this->player->character;
- #
- partner->npc->marriage->partner[1] = partner;
- #
- #
- PacketBuilder builder(PACKET_PRIEST, PACKET_REQUEST);
- #
- builder.AddShort(1); // Ask apollo what this is
- #
- builder.AddString(this->player->character->name);
- #
- partner->player->client->SendBuilder(builder);
- #
- }
- #
- CLIENT_SEND(reply);
- #
- }
- #
- break;
- #
- #
- case PACKET_OPEN: // Talked to a priest
- #
- {
- #
- if (this->state < EOClient::Playing) return false;
- #
- #
- short id = reader.GetShort();
- #
- #
- UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc)
- #
- {
- #
- if (npc->index == id && npc->Data()->type == ENF::Priest)
- #
- {
- #
- this->player->character->npc = *npc;
- #
- this->player->character->npc_type = ENF::Priest;
- #
- #
- if (!this->player->character->partner.empty())
- #
- {
- #
- break;
- #
- }
- #
- if (npc->marriage)
- #
- {
- #
- reply.SetID(PACKET_PRIEST, PACKET_REPLY);
- #
- reply.AddChar(PRIEST_BUSY);
- #
- }
- #
- else if (this->player->character->paperdoll[Character::Armor] != util::to_int(this->server->world->config[(this->player->character->gender == GENDER_FEMALE ? "WeddingArmorFemale" : "WeddingArmorMale")]) ||
- #
- util::to_int(this->server->world->config[(this->player->character->gender == GENDER_FEMALE ? "WeddingArmorFemale" : "WeddingArmorMale")]) == 0)
- #
- {
- #
- reply.SetID(PACKET_PRIEST, PACKET_REPLY);
- #
- reply.AddChar(PRIEST_CLOTHES);
- #
- }
- #
- else if (this->player->character->level < util::to_int(this->server->world->config["WeddingLevelNeeded"]))
- #
- {
- #
- reply.SetID(PACKET_PRIEST, PACKET_REPLY);
- #
- reply.AddChar(PRIEST_UNEXPERIENCED);
- #
- }
- #
- else
- #
- {
- #
- reply.SetID(PACKET_PRIEST, 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