// TMW-2 Script
// Evol functions.
// Author:
// 4144
// Jesusalva
// Description:
// Functions for marriage
// check is player is near marriage npc
// args:
// 0 - player name
// returns:
// true if player located near npc.
function script marriagecheckname {
.@name$ = getarg(0);
if (.@name$ == "")
{
// no other registrand
return false;
}
.@id = getcharid(0, .@name$);
.@accoundId = getcharid(3, .@name$);
if (isloggedin(.@accoundId, .@id) == false)
{
// registrant not logged in
return false;
}
getmapxy(.@mapname$, .@x, .@y, 0, .@name$);
if (.@mapname$ != strnpcinfo(4))
{
// registrant on other map
return false;
}
if (distance(.@x, .@y, .x, .y) > .distance)
{
// registrant too far
return false;
}
return true;
}
// return player name registered with same gender like attached player
function script getmarriageregistrant {
if (Sex)
{
.@name$ = getvariableofnpc(.maleName$, strnpcinfo(3));
}
else
{
.@name$ = getvariableofnpc(.femaleName$, strnpcinfo(3));
}
return .@name$;
}
// return registered marriage partner name
function script getmarriagepartner {
if (Sex)
{
.@name$ = getvariableofnpc(.femaleName$, strnpcinfo(3));
}
else
{
.@name$ = getvariableofnpc(.maleName$, strnpcinfo(3));
}
if (marriagecheckname(.@name$))
return .@name$;
return "";
}
// register attached player as partner for marriage
function script marriageregisterself {
if (Sex)
{
set getvariableofnpc(.maleName$, strnpcinfo(3)), strcharinfo(0);
set getvariableofnpc(.maleName_partner$, strnpcinfo(3)), "";
}
else
{
set getvariableofnpc(.femaleName$, strnpcinfo(3)), strcharinfo(0);
set getvariableofnpc(.femaleName_partner$, strnpcinfo(3)), "";
}
return;
}
// return player name what was accepted by partner
function script getmarriagepartneraccepted {
if (Sex)
{
.@name$ = getvariableofnpc(.femaleName_partner$, strnpcinfo(3));
}
else
{
.@name$ = getvariableofnpc(.maleName_partner$, strnpcinfo(3));
}
return .@name$;
}
// return true if partner present near and partner accepted you
function script ismarriagepartneraccepted {
.@partner$ = getmarriagepartner();
if (.@partner$ == "")
return false;
if (readparam(Sex, strcharinfo(0)) == readparam(Sex, .@partner$)) {
// Blame Jesusalva. I am sensing various other possible bugs. Let's play safe.
return false;
}
.@name$ = getmarriagepartneraccepted();
if (.@name$ == strcharinfo(0))
return true;
return false;
}
// accept for attached player his/her partner
// args:
// 0 - partner name
function script marriageacceptpartner {
.@name$ = getarg(0);
if (Sex)
{
set getvariableofnpc(.maleName_partner$, strnpcinfo(3)), .@name$;
}
else
{
set getvariableofnpc(.femaleName_partner$, strnpcinfo(3)), .@name$;
}
return;
}
function script askmarry {
speech l("Do you want to marry @@?", getarg(0));
if (askyesno() == ASK_YES)
return true;
return false;
}
// start marriage registration process
function script marriageregister {
.@partner$ = getmarriagepartner();
if (.@partner$ == "")
{ // no partner registered
speech l("Ok I add your name... @@...", strcharinfo(0));
marriageregisterself();
next;
speech lg("Now wait for your partner, then talk to me again.");
npctalk l("@@ waits for their loved one.", strcharinfo(0));
close;
}
else
{ // partner already registered
if (askmarry(.@partner$) == true)
{
marriageregisterself();
marriageacceptpartner(.@partner$);
npctalk3 l("@@ registered for marriage and accepted partner @@!", strcharinfo(0), .@partner$);
npctalk3 l("Waiting for @@...", .@partner$);
close;
}
else
{
close;
}
}
return;
}
// remove all marriage registations
function script marriageclear {
set getvariableofnpc(.maleName$, strnpcinfo(3)), "";
set getvariableofnpc(.femaleName$, strnpcinfo(3)), "";
set getvariableofnpc(.maleName_partner$, strnpcinfo(3)), "";
set getvariableofnpc(.femaleName_partner$, strnpcinfo(3)), "";
return;
}
// do actual marriage
function script domarriage {
.@name$ = strcharinfo(0);
.@partner$ = getarg(0);
if (marriage(.@partner$))
{
speech l("You got married to @@!", .@partner$);
mapannounce "009-1", l("@@ and @@ just got married!", .@name$, .@partner$), bc_map;
specialeffect 6;
}
else
{
speech l("Marriage failed.");
}
marriageclear();
return;
}
// marry main code
function script marriagemarry {
.@registrant$ = getmarriageregistrant();
if (marriagecheckname(.@registrant$) == true)
{
if (.@registrant$ == strcharinfo(0))
{
if (ismarriagepartneraccepted())
{
.@partner$ = getmarriagepartner();
if (marriagecheckname(.@partner$) == false)
{
speech l("Partner not ready.");
}
else if (askmarry(.@partner$) == true)
{
domarriage(.@partner$);
}
}
else
{
speech l("You already registered. Waiting for your partner...");
}
}
else
{
speech l("Sorry, I'm busy with other registrations."),
l("Come after a little while.");
}
close;
}
speech l("What can I do for you?");
switch (select(l("I want to register for marriage."),
l("Nothing")))
{
case 1:
marriageregister;
break;
case 2:
break;
}
return;
}
// divorce main code
function script marriagedivorce {
speech l("What can I do for you?");
switch (select(l("I want to divorce."),
l("Nothing")))
{
case 1:
speech lg("Are you sure? It costs 800 GP.");
if (askyesno() == ASK_YES)
{
if (Zeny < 800)
return;
if (divorce()) {
Zeny=Zeny-800;
speech l("You are now divorced!");
npctalk l("@@ divorced!", strcharinfo(0));
}
else
{
speech l("Divorce error!");
}
}
break;
case 2:
break;
}
return;
}
// main function for marriage
function script marriagemain {
if (Sex > 1)
{
speech l("Sorry, I can't help you. Go away!");
close;
}
if (getpartnerid() != 0)
{ // have partner
marriagedivorce();
}
else
{ // no partner
marriagemarry();
}
return;
}
// check registration list by timer
function script marriagecheck {
.@name$ = getvariableofnpc(.maleName$, strnpcinfo(3));
if (.@name$ != "" && marriagecheckname(.@name) == false)
{
set getvariableofnpc(.maleName$, strnpcinfo(3)), "";
set getvariableofnpc(.maleName_partner$, strnpcinfo(3)), "";
}
.@name$ = getvariableofnpc(.femaleName$, strnpcinfo(3));
if (.@name$ != "" && marriagecheckname(.@name) == false)
{
set getvariableofnpc(.femaleName$, strnpcinfo(3)), "";
set getvariableofnpc(.femaleName_partner$, strnpcinfo(3)), "";
}
}