From 1fe25d35152dbe2dcb1f451d9fb48641ef9c9a5e Mon Sep 17 00:00:00 2001
From: Jesusaves <cpntb1@ymail.com>
Date: Tue, 3 Jul 2018 00:01:42 -0300
Subject: Sketch for pipelines - Party Dungeon Master

---
 npc/008-0/_import.txt   |  1 +
 npc/008-0/master.txt    | 83 +++++++++++++++++++++++++++++++++++++++++++++++++
 npc/functions/timer.txt | 11 +++++++
 3 files changed, 95 insertions(+)
 create mode 100644 npc/008-0/master.txt

(limited to 'npc')

diff --git a/npc/008-0/_import.txt b/npc/008-0/_import.txt
index abdaecd6e..b4c32c2d9 100644
--- a/npc/008-0/_import.txt
+++ b/npc/008-0/_import.txt
@@ -2,3 +2,4 @@
 // This file is generated automatically. All manually added changes will be removed when running the Converter.
 "npc/008-0/_mobs.txt",
 "npc/008-0/_warps.txt",
+"npc/008-0/master.txt",
diff --git a/npc/008-0/master.txt b/npc/008-0/master.txt
new file mode 100644
index 000000000..875789a27
--- /dev/null
+++ b/npc/008-0/master.txt
@@ -0,0 +1,83 @@
+// TMW-2 Script
+// Author:
+//  Jesusalva
+// Description:
+//  This NPC serves no purpose currently. She is here to make Tulimshar more crowded.
+
+008-0,47,63,0	script	Party Master	NPC_BRGUARD_SWORD,{
+    mesn;
+    if (getcharid(1) > 0) {
+	    mesq l("You're in the \"@@\" party, very good!", getpartyname(getcharid(1)));
+        next;
+    } else {
+        mesq l("I protect a dungeon for PARTIES. You're not on a party, get moving.");
+        close;
+    }
+
+    mesn;
+    mesq l("I protect a very dangerous dungeon, and it is so dangerous, that only parties can go in.");
+    next;
+    if (strcharinfo(0) != getpartyleader(getcharid(1))) goto L_NotYou;
+    mesn;
+    mesq l("There are five floors, and they're all very dangerous. But there are riches to be found.");
+    next;
+    mesn;
+    mesq l("You also can't stay there forever! You will have 25 minutes to entirely clear it out and defeat the last boss.");
+    next;
+    // Get info about your party, and backup it
+    getpartymember(getcharid(1));
+	.@count = $@partymembercount;
+	copyarray(.@name$[0], $@partymembername$[0], $@partymembercount);
+	copyarray(.@aid[0], $@partymemberaid[0], $@partymembercount);
+	copyarray(.@cid[0], $@partymembercid[0], $@partymembercount);
+    .@count_online=0;
+
+    if (.@count < 3 && !$@GM_OVERRIDE) goto L_TooSmall;
+    mesn;
+    mesc l("Are you and your party ready?", 1);
+    if (askyesno() != ASK_YES)
+        close;
+
+    // Loop though party to see if you can start
+	for (.@i = 0; .@i < .@count; ++.@i) {
+        // Online?
+		if (isloggedin(.@aid[.@i], .@cid[.@i])) {
+            getmapxy(.@m$, .@x, .@y, 0, .@name$[.@i]));
+            // Here?
+            if (.@m$ == .map$)
+    			.@count_online++;
+        }
+    }
+
+    // How many are logged in and here?
+    if (.@count_online < 3 && !$@GM_OVERRIDE) goto L_TooSmall;
+
+    // Warp everyone and add timers
+    partytimer("008-0", 1000, "Party Master::OnStart", getcharid(1));
+    warpparty("003-1", 41, 48, getcharid(1), "008-0", true);
+    close;
+
+L_NotYou:
+    mesn;
+    mesq l("If you bring me @@, your party leader, I can let you in.", getpartyleader(getcharid(1)));
+    close;
+
+L_TooSmall:
+    mesn;
+    mesq l("However, I need to see at least three volunteers here, to allow you in.");
+    close;
+
+OnStart:
+    @pmloop=0;
+OnLoop:
+    @pmloop+=1;
+    if (@pmloop < 1500)
+        addtimer(1000, "Party Master::OnLoop");
+    close;
+
+OnInit:
+    .sex = G_MALE;
+    .distance = 5;
+    end;
+}
+
diff --git a/npc/functions/timer.txt b/npc/functions/timer.txt
index e79070f3b..1b5fa8c57 100644
--- a/npc/functions/timer.txt
+++ b/npc/functions/timer.txt
@@ -54,3 +54,14 @@ function	script	mapdeltimer	{
     }
     return .@i;
 }
+
+// partytimer("<map>", <tick>, "<npc>::<event>", partyid)
+function	script	partytimer	{
+    .@c = getunits(BL_PC, .@players, false, getarg(0));
+    for (.@i = 0; .@i < .@c; .@i++) {
+        if (getcharid(2, strcharinfo(0,"",.@players[.@i]) ) == getarg(3))
+            addtimer(getarg(1), getarg(2), .@players[.@i]);
+    }
+    return .@i;
+}
+
-- 
cgit v1.2.3-70-g09d2