summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-03-19 19:20:55 +0300
committerAndrei Karas <akaras@inbox.ru>2016-03-19 19:21:53 +0300
commit975e6d81790ae847b10f31dc65060d08ac51702b (patch)
tree153e0f092fb9e1587b5fd1b68045b1d77593f18c /npc
parent2d945f268a10c710067cac8992840c15b06e6824 (diff)
downloadserverdata-975e6d81790ae847b10f31dc65060d08ac51702b.tar.gz
serverdata-975e6d81790ae847b10f31dc65060d08ac51702b.tar.bz2
serverdata-975e6d81790ae847b10f31dc65060d08ac51702b.tar.xz
serverdata-975e6d81790ae847b10f31dc65060d08ac51702b.zip
Add initial version of marriage script. Missing divorce and missing time checks.
Diffstat (limited to 'npc')
-rw-r--r--npc/functions/marriage.txt234
-rw-r--r--npc/scripts.conf1
-rw-r--r--npc/test/_import.txt1
-rw-r--r--npc/test/npcmarriage.txt17
4 files changed, 253 insertions, 0 deletions
diff --git a/npc/functions/marriage.txt b/npc/functions/marriage.txt
new file mode 100644
index 00000000..673ce620
--- /dev/null
+++ b/npc/functions/marriage.txt
@@ -0,0 +1,234 @@
+// Evol functions.
+// Author:
+// 4144
+// 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)
+ {
+ // registrand 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;
+ .@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 (select(l("Yes"), l("No")) == 1)
+ 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 l("Now wait your partner, and talk with me again");
+ npctalk l("@@ registered for marriage. Waiting for partner...", strcharinfo(0));
+ close;
+ }
+ else
+ { // partner already registered
+ if (askmarry(.@partner$) == true)
+ {
+ marriageregisterself();
+ marriageacceptpartner(.@partner$);
+ npctalk l("@@ registered for marriage and accepted partner @@!", strcharinfo(0), .@partner$);
+ npctalk 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 was married to @@!", .@partner$);
+ npctalk l("@@ and @@ just married!", .@name$, .@partner$);
+ }
+ else
+ {
+ npctalk l("Marriage failed.");
+ }
+ marriageclear();
+ return;
+}
+
+// main function for marriage
+function script marriagemain {
+ if (Sex > 1)
+ {
+ speech l("Sorry i can't help you. Go away!");
+ close;
+ }
+
+ .@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. Wait for your partner.");
+ }
+ }
+ else
+ {
+ speech l("Sorry I busy with other registrations"),
+ l("Come after some time.");
+ }
+ close;
+ }
+
+ speech l("What a can do for you?");
+ switch (select(l("I want register for marriage"),
+ l("Nothing")))
+ {
+ case 1:
+ marriageregister;
+ case 2:
+ break;
+ }
+ return;
+}
diff --git a/npc/scripts.conf b/npc/scripts.conf
index de6db6b3..cee9409d 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -15,6 +15,7 @@ npc: npc/functions/goodbye.txt
npc: npc/functions/hammocks.txt
npc: npc/functions/harbours.txt
npc: npc/functions/inventoryplace.txt
+npc: npc/functions/marriage.txt
npc: npc/functions/npcmove.txt
npc: npc/functions/masks.txt
npc: npc/functions/openbook.txt
diff --git a/npc/test/_import.txt b/npc/test/_import.txt
index 54f17ef6..e51002ba 100644
--- a/npc/test/_import.txt
+++ b/npc/test/_import.txt
@@ -7,5 +7,6 @@ npc: npc/test/npc2.txt
npc: npc/test/npc3.txt
npc: npc/test/npc4.txt
npc: npc/test/npc5.txt
+npc: npc/test/npcmarriage.txt
npc: npc/test/test1.txt
npc: npc/test/test2.txt
diff --git a/npc/test/npcmarriage.txt b/npc/test/npcmarriage.txt
new file mode 100644
index 00000000..32b0751b
--- /dev/null
+++ b/npc/test/npcmarriage.txt
@@ -0,0 +1,17 @@
+// Evol scripts.
+// Authors:
+// 4144
+// Description:
+// npc marriage
+
+test,25,14,0 script marriage1 NPC_PLAYER,{
+ // debug
+ mes .maleName$;
+ mes .femaleName$;
+
+ marriagemain();
+ close;
+OnInit:
+ .sex = G_MALE;
+ .distance = 3;
+}