diff options
author | Reid <reidyaro@gmail.com> | 2016-12-03 22:56:42 +0100 |
---|---|---|
committer | gumi <mekolat@users.noreply.github.com> | 2016-12-21 13:57:39 -0500 |
commit | e07d2768399dc4eef5d8eaea54dc356abd18ec44 (patch) | |
tree | 9c6ab5e46f9ff35ead8dbc6addaa5571db96d6c5 | |
parent | b387e53583285ac86f2c19377144fb5ec3b1b8ad (diff) | |
download | clientdata-e07d2768399dc4eef5d8eaea54dc356abd18ec44.tar.gz clientdata-e07d2768399dc4eef5d8eaea54dc356abd18ec44.tar.bz2 clientdata-e07d2768399dc4eef5d8eaea54dc356abd18ec44.tar.xz clientdata-e07d2768399dc4eef5d8eaea54dc356abd18ec44.zip |
Improve the riddle script, fix the fact that the riddle didn't work with a translated answer.
-rw-r--r-- | npc/001-1/qpid.txt | 49 | ||||
-rw-r--r-- | npc/functions/riddle.txt | 75 | ||||
-rw-r--r-- | npc/scripts.conf | 1 |
3 files changed, 78 insertions, 47 deletions
diff --git a/npc/001-1/qpid.txt b/npc/001-1/qpid.txt index c6a4eb0a..2fd12c80 100644 --- a/npc/001-1/qpid.txt +++ b/npc/001-1/qpid.txt @@ -6,50 +6,6 @@ 001-1,65,116,0 script Q'Pid#001-1 NPC_QPID,{ - function verify_riddle_answer { - .@answer$ = getarg (0); - .@good$ = getarg (1); - .@good_translated$ = l(getarg(1)); - - .@size_answer = getstrlen (.@answer$); - .@size_good = getstrlen (.@good$); - .@size_good_translated = getstrlen (.@good_translated$); - - if (.@size_answer > .@size_good) - { - .@max = (.@size_answer > .@size_good_translated) - ? .@size_answer - : .@size_good_translated; - } - else - { - .@max = (.@size_good > .@size_good_translated) - ? .@size_good - : .@size_good_translated; - } - - for (.@j = 0; .@j < .@max; .@j++) - { - if (strtolower (charat (.@answer$, .@j)) == charat (.@good$, .@j)) - { - .@k++; - } - if (strtolower (charat (.@answer$, .@j)) == charat (.@good_translated$, .@j)) - { - .@k_translated++; - } - } - .@k *= 10; - .@k_translated *= 10; - .@size_good *= 7; - .@size_good_translated *= 7; - if (.@k >= .@size_good || .@k_translated >= .@size_good_translated) - { - return 1; - } - return 0; - } - function riddle_enigma { speech 5, l("Ok fine, you have up to 3 tries, here is the riddle:"), @@ -64,7 +20,7 @@ input .@answer$; .@i++; - if (verify_riddle_answer (.@answer$, "life")) + if (riddlevalidation (.@answer$, "life", l("life"))) { speech 5, l("Oh..."), @@ -104,7 +60,7 @@ break; } - } while (1); + } while (true); return; } @@ -212,4 +168,3 @@ OnInit: .distance = 3; end; } - 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; +} diff --git a/npc/scripts.conf b/npc/scripts.conf index f1c91046..05e563e5 100644 --- a/npc/scripts.conf +++ b/npc/scripts.conf @@ -35,6 +35,7 @@ "npc/functions/time.txt", "npc/functions/asklanguage.txt", "npc/functions/game-rules.txt", +"npc/functions/riddle.txt", // quest debug "npc/functions/quest-debug/functions.txt", |