summaryrefslogtreecommitdiff
path: root/npc/functions/lockpicks.txt
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2018-09-06 13:26:30 -0300
committerJesusaves <cpntb1@ymail.com>2018-09-06 13:26:30 -0300
commit74812206e5fafeeaf5d873c0cd4a6735d918956f (patch)
tree694dbbbca804b16bb6355b33f95c4be472a872c8 /npc/functions/lockpicks.txt
parent2bf931dd55f19973a616247313d199b761b938c7 (diff)
downloadserverdata-74812206e5fafeeaf5d873c0cd4a6735d918956f.tar.gz
serverdata-74812206e5fafeeaf5d873c0cd4a6735d918956f.tar.bz2
serverdata-74812206e5fafeeaf5d873c0cd4a6735d918956f.tar.xz
serverdata-74812206e5fafeeaf5d873c0cd4a6735d918956f.zip
Airlia + Lockpick alpha
Diffstat (limited to 'npc/functions/lockpicks.txt')
-rw-r--r--npc/functions/lockpicks.txt88
1 files changed, 88 insertions, 0 deletions
diff --git a/npc/functions/lockpicks.txt b/npc/functions/lockpicks.txt
new file mode 100644
index 000000000..df17d4c67
--- /dev/null
+++ b/npc/functions/lockpicks.txt
@@ -0,0 +1,88 @@
+// TMW2/LoF Script
+// Author:
+// Jesusalva
+// Description:
+// Lockpicking core
+
+// Important variables:
+// THIEF_EXP
+// Experience on Thief Tree
+// THIEF_RANK
+// Position on the Thief Tree
+
+// LockPicking(num_pins, max_pins, prize)
+// Returns 0 upon failure, 1 upon success
+// Closes script if an error happen or if you give up / cannot try.
+//
+// The 'next' is upon script responsability
+// Maximum pin number is infinite. Maximum Pin Positiors range from 2~5.
+// If you fail, you can end up having to start again. If you fail too much,
+// you'll be caught!
+function script LockPicking {
+ // If you don't have a LockPick, you can't do this (useless)
+ if (!countitem(Lockpicks)) {
+ mesc l("You need a @@ to try this.", getitemlink(Lockpicks)), 1;
+ close;
+ }
+
+ .@d=getarg(0,1);
+ .@m=getarg(1,3);
+ .@p=getarg(2,100);
+
+ // Invalid Argument (kill script)
+ if (.@d < 1 || .@m < 2 || .@m > 5)
+ end;
+
+ // You must be rank (number of locks - 1) to try
+ if (THIEF_RANK < .@d) {
+ mesc l("This lock is beyond your current capacity."), 1;
+ close;
+ }
+
+ // Create @pins array (the answer)
+ for (.@i=0; .@i < .@d;.@i++)
+ @pins[.@i] = rand(1,.@m);
+
+ // Check if you'll try to open it.
+ mesc l("This lock is simple, maybe with your thief skills can manage. But beware, you can end up in jail!");
+ mesc l("Will you try to unlock it?");
+ if (askyesno() == ASK_NO)
+ close;
+
+ // Setup your attempt
+ delitem Lockpicks, 1;
+ @pos=0;
+ mesc l("You insert the hook pick inside the lock, and, without applying any tension, you discover there are only @@ pins to set.", .@d);
+
+ // You have as many attempts as pins and appliable strenghts.
+ // Each thief rank grants you an extra attempt.
+ // Each pin takes one attempt.
+ // It's not multiplied, so 3 pins with 3 positions: 6 chances, 9 possibilities.
+ // Remember if you fail, all previous pins will be cleared (@pos)
+ for (.@i=0; .@i < (.@d+.@m+THIEF_RANK) ; .@i++) {
+ mesc l("You are trying to open the @@th pin. What to do?", @pos+1);
+ menuint
+ rif(.@m <= 4, l("Apply no pressure")), 1,
+ rif(.@m <= 2, l("Apply soft pressure")), 2,
+ rif(.@m <= 1, l("Apply normal pressure")), 3,
+ rif(.@m <= 3, l("Apply strong pressure")), 4,
+ rif(.@m <= 5, l("Apply very strong pressure")), 5,
+ l("Give up!"), 0;
+
+ if (!@menuret)
+ close;
+
+ // Is your guess correct?
+ if (@pins[@pos] == @menuret) {
+ mesc l("*click*");
+ @pos+=1;
+ } else {
+ mesc l("This didn't work.");
+ }
+
+ if (@pos > .@d)
+ return 1;
+ }
+
+ return 0;
+}