void world_execute_weddings(void *world_void)
{
World *world = static_cast<World *>(world_void);
double now = Timer::GetTime();
UTIL_FOREACH(world->maps, map)
{
UTIL_FOREACH(map->npcs, npc)
{
if (npc->marriage && npc->marriage->request_accepted)
{
if (!npc->marriage->partner[0] || !npc->marriage->partner[1])
{
npc->ShowDialog(world->i18n.Format("wedding_error"));
npc->marriage = 0;
continue;
}
else if (!npc->marriage->partner[0]->online || !npc->marriage->partner[1]->online)
{
npc->ShowDialog(world->i18n.Format("wedding_missingpartner"));
npc->marriage = 0;
continue;
}
else if (npc->marriage->partner[0]->map != npc->map || npc->marriage->partner[1]->map != npc->map)
{
npc->ShowDialog(world->i18n.Format("wedding_missingpartner"));
npc->marriage = 0;
continue;
}
else if ((npc->marriage->state == 5 && npc->marriage->partner_accepted[0]) || (npc->marriage->state == 8 && npc->marriage->partner_accepted[1]))
{
++npc->marriage->state;
}
else if (npc->marriage->last_execution + (util::to_int(world->config["PriestDialogInterval"])) <= now)
{
switch (npc->marriage->state)
{
case 1:
{
npc->ShowDialog(world->i18n.Format("wedding_text1", util::ucfirst(npc->marriage->partner[0]->name), util::ucfirst(npc->marriage->partner[1]->name)));
++npc->marriage->state;
}
break;
case 2:
{
npc->ShowDialog(world->i18n.Format("wedding_text2"));
++npc->marriage->state;
}
break;
case 3:
{
npc->ShowDialog(world->i18n.Format("wedding_doyou", util::ucfirst(npc->marriage->partner[0]->name), util::ucfirst(npc->marriage->partner[1]->name)));
++npc->marriage->state;
}
break;
case 4:
{
PacketBuilder builder(PACKET_PRIEST, PACKET_REPLY);
builder.AddChar(PRIEST_REQUEST);
npc->marriage->partner[0]->player->client->Send(builder);
++npc->marriage->state;
}
break;
case 5:
{
++npc->marriage->state;
}
break;
case 6:
{
npc->ShowDialog(world->i18n.Format("wedding_doyou", util::ucfirst(npc->marriage->partner[1]->name), util::ucfirst(npc->marriage->partner[0]->name)));
++npc->marriage->state;
}
break;
case 7:
{
PacketBuilder builder(PACKET_PRIEST, PACKET_REPLY);
builder.AddChar(PRIEST_REQUEST);
npc->marriage->partner[1]->player->client->Send(builder);
++npc->marriage->state;
}
break;
case 8:
{
++npc->marriage->state;
}
break;
case 9:
{
npc->ShowDialog(world->i18n.Format("wedding_ring1"));
++npc->marriage->state;
}
break;
case 10:
{
PacketBuilder builder(PACKET_ITEM, static_cast<PacketAction>(26));
builder.AddShort(util::to_int(world->config["WeddingRing"]));
builder.AddThree(1);
for (int i = 0; i < 2; ++i)
{
npc->marriage->partner[i]->AddItem(util::to_int(world->config["WeddingRing"]), 1);
npc->marriage->partner[i]->player->client->Send(builder);
}
++npc->marriage->state;
}
case 11:
{
npc->ShowDialog(world->i18n.Format("wedding_ring2"));
++npc->marriage->state;
}
break;
case 12:
{
int effect = util::to_int(util::explode(',', world->config["WeddingEffects"])[0]);
for (int i = 0; i < 2; ++i)
npc->marriage->partner[i]->Effect(effect);
npc->ShowDialog(world->i18n.Format("wedding_finish1", util::ucfirst(npc->marriage->partner[0]->name), util::ucfirst(npc->marriage->partner[1]->name)));
++npc->marriage->state;
}
break;
case 13:
{
int effect = util::to_int(util::explode(',', world->config["WeddingEffects"])[1]);
for (int i = 0; i < 2; ++i)
npc->marriage->partner[i]->Effect(effect);
++npc->marriage->state;
}
break;
case 14:
{
npc->ShowDialog(world->i18n.Format("wedding_finish2"));
PacketBuilder reply;
reply.SetID(PACKET_JUKEBOX, PACKET_USE);
reply.AddShort(util::rand(7, 20));
UTIL_FOREACH(npc->marriage->partner[0]->map->characters, character)
{
character->player->client->Send(reply);
}
int effect = util::to_int(util::explode(',', world->config["WeddingEffects"])[2]);
for (int i = 0; i < 2; ++i)
npc->marriage->partner[i]->Effect(effect);
npc->marriage->partner[0]->partner = npc->marriage->partner[1]->name;
npc->marriage->partner[0]->fiance = "";
npc->marriage->partner[1]->partner = npc->marriage->partner[0]->name;
npc->marriage->partner[1]->fiance = "";
npc->marriage = 0;
}
break;
default:
Console::Err("Invalid state for marriage ceremony.");
npc->marriage = 0;
}
if (npc->marriage)
npc->marriage->last_execution = Timer::GetTime();
}
}
}
}
}