blob: 9120092410ae404cc4f54df90c9530004a0b84e1 [file] [log] [blame]
#pragma strong_types, save_types, rtt_checks
#pragma no_clone, no_inherit, no_shadow
inherit "std/npc";
#define DELAY 60
#define MAXWAY 30
#include <properties.h>
#include <language.h>
#include <moving.h>
#include "/secure/questmaster.h"
protected void create()
{
::create();
SetProp(P_NAME,"Wanderer");
set_living_name("orakel");
SetProp(P_GENDER, MALE);
SetProp(P_SHORT,"Ein alter Wanderer");
SetProp(P_LONG,
"Ein uralter Wanderer mit einem langen Hirtenmantel und einem Hirtenstab.\n");
AddId(({"wanderer","hirte","orakel"}));
create_default_npc( 19 );
SetProp(P_MAX_HP, 5000);
SetProp(P_HP, 5000);
SetProp(P_GENDER,MALE);
SetProp(P_ALIGN, 1000);
SetProp(P_XP, 1000);
SetProp(P_HANDS, ({" mit seinem Hirtenstab", 50, ({DT_BLUDGEON})}) );
SetProp(P_NO_ATTACK, 1);
SetProp(P_REJECT, ({ REJECT_GIVE, Name(WER) + " sagt: Danke, aber das "
"brauche ich nicht.\n" }) );
call_out("lauf", DELAY);
// Sollte eigentlich ueber das `info'-System laufen ;(
AddCmd( ({"frag","frage"}), "frag" );
}
static int frag(mixed str)
{
int i,j,geredet;
mixed *quests;
mixed tmp;
if (!str) return 0;
str = this_player()->_unparsed_args(1);
str = old_explode(str," ");
if ( !sizeof(str) ) return 0;
if ( !id(str[0]) ) return 0;
if (sizeof(str)<3 || (str[1]!="nach" && str[1]!="ueber"))
{
tell_object(this_player(),"Der Wanderer sagt: Ich versteh dich nicht.\n");
return 1;
}
geredet=0;
str=implode(str[2..]," ");
quests=QM->QueryQuests();
if (str=="aufgabe" || str=="aufgaben" || str=="abenteuer" || str=="quests"
|| str == "quest")
{
tell_object(this_player(),"Der Wanderer sagt: Folgende Aufgaben gibt "
"es hier:\n");
quests[0] = sort_array(quests[0], #'>);
for (i=0;i<sizeof(quests[0]);i++)
{
tell_object(this_player(),quests[0][i]);
if (this_interactive()->QueryQuest(quests[0][i]))
tell_object(this_player()," [hast Du schon geloest]");
tell_object(this_player(),"\n");
}
return 1;
}
for (i=0;i<sizeof(quests[0]);i++)
{
if (member(old_explode(lower_case(quests[0][i])," "),str)>=0
|| strstr(lower_case(quests[0][i]), str)>=0)
{
tmp=quests[0][i]+"? Dazu kann ich Dir folgendes sagen: ";
tmp+=quests[1][i][3];
tmp=old_explode(break_string(tmp,60),"\n");
geredet=1;
for (j=0;j<sizeof(tmp);j++)
tell_object(this_player(),"Der Wanderer sagt: "+tmp[j]+"\n");
}
}
if (!geredet)
tell_object(this_player(),"Der Wanderer sagt: "+capitalize(str)+
"? Interessiert mich nicht!\n");
return 1;
}
void lauf()
{
int i, ok;
// wenn keine Environment, dann laeuft das Ding einfach nicht.
if ( !objectp(environment()) )
return;
mapping liste = environment()->QueryProp(P_EXITS);
string *dirs = m_indices(liste);
string *dirs2 = ({ });
for (i=0;i<sizeof(liste);i++)
if (!catch(ok=liste[dirs[i]]->QueryProp(P_ORAKEL)) && ok)
dirs2 += ({ dirs[i] });
if (sizeof(dirs2))
{
i=random(sizeof(dirs2));
command_me(dirs2[i]);
}
call_out("lauf",DELAY);
}