LoGD Standardrelease steht hier zum Download zur Verfügung!
<?php
/* *******************
The riddling gnome was written by Joe Naylor
Feel free to use this any way you want to, but please give credit where due.
Version 1.1ger
******************* */
if (!isset($session)) exit();
//** Used to remove extra words from the beginning and end of a string
// Note that string will be converted to lowercase
function filterwords($string)
{
$string = strtolower($string);
//Words to remove
$filterpre = array (
"a",
"an",
"and",
"the",
"my",
"your",
"someones",
"someone's",
"someone",
"his",
"her",
"ein",
"eine",
"der",
"die",
"das",
"s");
//Letters to take off the end
$filterpost = array (
"s",
"ing",
"ed");
//split in to array of words
$filtstr = explode(" ", trim($string));
foreach ($filtstr as $key => $filtstr1)
$filtstr[$key] = trim($filtstr1);
//pop off word if found in $filterpre
foreach ($filtstr as $key => $filtstr1)
foreach ($filterpre as $filterpre1)
if (!strcasecmp($filtstr1, $filterpre1))
$filtstr[$key] = "";
//trim off common word endings
foreach ($filtstr as $key => $filtstr1)
foreach ($filterpost as $filterpost1)
if (strlen($filtstr) > strlen($filterpost1))
if (!strcasecmp(substr($filtstr1, -1*strlen($filterpost1)), $filterpost1))
$filtstr[$key] = substr($filtstr1, 0, strlen($filterstr)-strlen($filterpost1));
//rebuild filtered input
$string = implode("", $filtstr);
return $string;
}
if ($HTTP_GET_VARS[op]==""){
output("`BAuf einem umgefallenen Baumstamm sitzt ein Kobold mit sruppigem Haar und grinst dich breit an. `1\"Komm, komm, komm. Ich werde dir einen Gefallen tun, wenn du mein Rätsel lösen kannst.\" `Bspricht er dich
mit piepsiger Stimme an und so langsam hast du das Gefühl, dass dieser Wald vor Rätselkobolden nur so wimmelt. Er verfällt kurz in ein leicht irre klingendes Kichern, dann sieht er dich mit seinen glitzernden Augen an.`n`n
Willst du mal wieder Rätselraten spielen oder hast du besseres zu tun?`n`n");
output("<a href=forest.php?op=yes>Ja</a>`n", true);
output("<a href=forest.php?op=no>Nein</a>`n", true);
addnav("Ja","forest.php?op=yes");
addnav("Nein","forest.php?op=no");
addnav("","forest.php?op=yes");
addnav("","forest.php?op=no");
if ($session[user][specialinc]!="riddles.php"){
$session[user][specialmisc]=NULL;
}
$session[user][specialinc]="riddles.php";
}else if($HTTP_GET_VARS[op]=="yes"){
//if ($HTTP_POST_VARS[guess]==NULL){
if ($_GET['subop']!="answer"){
$session[user][specialinc]="riddles.php";
$rid = $session[user][specialmisc];
if (!strpos($rid, "Riddle")) {
$sq1 = "SELECT * FROM riddles ORDER BY rand(".e_rand().")";
}else{
$rid = substr($rid, -1*(strlen($rid)-6)); // 6 letters in "Riddle"
$sq1 = "SELECT * FROM riddles WHERE id=$rid";
}
$result = db_query($sq1) or die(db_error(LINK));
$riddle = db_fetch_assoc($result);
$session[user][specialmisc]="Riddle" . $riddle[id];
output("`BVor Freude reibt er sich die Hände und stellt dir dann sein Rätsel:`n`n");
output("`1\"$riddle[riddle]\"`n`n");
output("`BWas meinst du?");
output("<form action='forest.php?op=yes&subop=answer' method='POST'><input name='guess'><input type='submit' class='button' value='Rate'></form>",true);
addnav("","forest.php?op=yes&subop=answer");
}else{
$rid = substr($session[user][specialmisc], 6);
$sq1 = "SELECT * FROM riddles WHERE id=$rid";
$result = db_query($sq1) or die(db_error(LINK));
$riddle = db_fetch_assoc($result);
//*** Get and filter correct answer
$answer = explode(";", $riddle[answer]); //there can be more than one answer in the database, seperated by semicolons (;)
foreach($answer as $key => $answer1) {
//changed "" to " " below, I believe this is the correct implementation.
$answer[$key] = preg_replace("/[^[:alpha:]]/"," ",$answer1);
$answer[$key] = filterwords($answer1);
}
//*** Get and filter players guess
$guess = $HTTP_POST_VARS[guess];
// $guessdebug = $guess; // This is only for debugging, see below when the answer is wrong.
$guess = preg_replace("/[^[:alpha:]]/"," ",$guess);
$guess = filterwords($guess);
$correct = 0;
//changed to 2 on the levenshtein just for compassion's sake :-) --MightyE
foreach($answer as $answer1)
if (levenshtein($guess,$answer1) <= 2) //Allow one letter to be off to compensate for silly spelling mistakes
$correct = 1;
if ($correct) {
output("`n`BDer Kobold blinzelt dich an und flucht dann in einer seltsamen Sprache, die du nicht verstehen kannst.`n
`1\"Du hast es! Du hast mein Rätsel gelöst.\"`B zischt er dann aufgebracht. `n");
output("`1\"Hier hast du deinen doofen Preis.\"`n`n");
// It would be nice to have some more consequences
$rand = e_rand(1, 10);
switch ($rand){
case 1:
case 2:
case 3:
case 4:
output("`uEr gibt dir einen Edelstein!");
$session[user][gems]++;
//debuglog("gained 1 gem from the riddle master");
break;
case 5:
case 6:
case 7:
output("`uEr gibt dir zwei Edelsteine!");
$session[user][gems]+=2;
//debuglog("gained 2 gems from the riddle master");
break;
case 8:
case 9:
output("`BEr murmelt wieder irgendwelche unverständlichen Worte und ist dann verschwunden.");
output("`n`n`&Du erhältst einen zusätzlichen Waldkampf!");
$session[user][turns]++;
break;
case 10:
output("`BEr greift in einen Beutel an seinem Gürtel und wirft dir etwas Erde ins Gesicht und murmelt komische Worte.`n`n");
if ($session[user][specialty]) {
output("Als du den Dreck aus deinem Gesicht entfernt hast, fühlst du dich etwas anders.`n");
increment_specialty();
}else{
output("Als du den Dreck aus deinem Gesicht entfernt hast, fühlst du dich etwas erfahrener.");
output("`n`n`&Du erhältst ein paar Erfahrungspunkte!");
$session[user][experience] += $session[user][level] * 10;
}
break;
}
}else{
/* ************
This saves the wrong answers in a database table, so I can review them
from time to time and debug my answer interpretation code. You
don't need to run this unless you're doing something like that. */
// $answer1 = implode (" ", $answer);
// $sq1 = "INSERT INTO riddledebug (id,answer,guess,date,player) VALUES ($rid,'$riddle[answer]','$guessdebug',NOW(),{$session[user][acctid]})";
// $result = db_query($sq1);
/***************/
output("`n`BDer merkwürdige Kobold gackert vor Freund und tänzelt dann auf dem Baumstamm herum. `1\"Das war nicht die Lösung!\" `Bruft er lachend immer und immer wieder und so verziehst du dich ganz schnell wieder.");
// It would be nice to have some more consequences
$rand = e_rand(1, 6);
switch ($rand){
case 1:
case 2:
case 3:
output("`BAls du den Kobold schon hinter dir gelassen hast, fällt dir auf, dass dir etwas Gold fehlt.");
output("`n`n`GDu hast Gold verloren!");
$gold = e_rand(1, $session[user][level]*10);
if ($gold > $session['user']['gold'])
$gold = $session['user']['gold'];
$session[user][gold] -= $gold;
//debuglog("lost $gold gold to the riddlemaster");
case 4:
case 5:
output("`BDas hämische Gekicher hat dich etwas demotiviert.");
output("`n`n`&Du verlierst einen Waldkampf!");
if ($session[user][turns]>0) $session[user][turns]--;
break;
case 6:
output("`BVor Wut, dass du das Rätsel nicht lösen konntest, stampfst du durch den Wald und übersiehst einen tiefhängenden Ast, der dir einen Kratzer auf der Stirn verpasst.");
output("`n`n`uDu verlierst einen Charmepunkt!");
if ($session[user][charm]>0) $session[user][charm]--;
break;
}
}
$session[user][specialinc]="";
$session[user][specialmisc]="";
}
}else if($HTTP_GET_VARS[op]=="no"){
output("`n`BDu hast genug von Rätselkobolden und gehst einfach weiter. ");
$session[user][specialinc]="";
$session[user][specialmisc]="";
}
?>