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 /npc/functions | |
parent | b387e53583285ac86f2c19377144fb5ec3b1b8ad (diff) | |
download | serverdata-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.txt | 75 |
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; +} |