summaryrefslogtreecommitdiff
path: root/npc/functions
diff options
context:
space:
mode:
authorReid <reidyaro@gmail.com>2016-12-03 22:56:42 +0100
committergumi <mekolat@users.noreply.github.com>2016-12-21 13:57:39 -0500
commite07d2768399dc4eef5d8eaea54dc356abd18ec44 (patch)
tree9c6ab5e46f9ff35ead8dbc6addaa5571db96d6c5 /npc/functions
parentb387e53583285ac86f2c19377144fb5ec3b1b8ad (diff)
downloadserverdata-e07d2768399dc4eef5d8eaea54dc356abd18ec44.tar.gz
serverdata-e07d2768399dc4eef5d8eaea54dc356abd18ec44.tar.bz2
serverdata-e07d2768399dc4eef5d8eaea54dc356abd18ec44.tar.xz
serverdata-e07d2768399dc4eef5d8eaea54dc356abd18ec44.zip
Improve the riddle script, fix the fact that the riddle didn't work with a translated answer.
Diffstat (limited to 'npc/functions')
-rw-r--r--npc/functions/riddle.txt75
1 files changed, 75 insertions, 0 deletions
diff --git a/npc/functions/riddle.txt b/npc/functions/riddle.txt
new file mode 100644
index 00000000..688a56db
--- /dev/null
+++ b/npc/functions/riddle.txt
@@ -0,0 +1,75 @@
+// Evol functions.
+// Authors:
+// Reid
+//
+// Description:
+// Riddle enigma validator
+//
+// Arguments
+// 0 PC answer
+// 1 English correct answer
+// 2 Translated correct answer
+
+// TODO: levenshtein(), similar_text(), and maybe even soundex()
+
+function script riddlevalidation {
+ .@answer$ = strtolower (getarg (0));
+ .@good$ = strtolower (getarg (1));
+ .@good_translated$ = strtolower (getarg (2));
+
+ .@size_answer = getstrlen (.@answer$);
+ .@size_good = getstrlen (.@good$);
+ .@size_good_translated = getstrlen (.@good_translated$);
+
+ .@max = max (.@size_answer, .@size_good_translated, .@size_good);
+
+ // Input is too long.
+ if (.@max > 20)
+ {
+ return false;
+ }
+
+ .@size_good *= 70;
+ .@size_good_translated *= 70;
+
+ for (.@i = 0; .@i < .@max; .@i++)
+ {
+ .@correct = 0;
+ .@correct_translated = 0;
+
+ for (.@k = .@k_translated = .@j = .@i; .@j < .@max; .@j++)
+ {
+ if (charat (.@answer$, .@j) == charat (.@good$, .@k))
+ {
+ .@correct++;
+ .@k++;
+ }
+ else
+ {
+ .@correct--;
+ }
+
+ if (charat (.@answer$, .@j) ==
+ charat (.@good_translated$, .@k_translated))
+ {
+ .@correct_translated++;
+ .@k_translated++;
+ }
+ else
+ {
+ .@correct_translated--;
+ }
+ }
+ // if 70% of the word is correct
+ .@correct *= 100;
+ .@correct_translated *= 100;
+
+ if (.@correct >= .@size_good ||
+ .@correct_translated >= .@size_good_translated)
+ {
+ return true;
+ }
+ }
+
+ return false;
+}