blob: 9120092410ae404cc4f54df90c9530004a0b84e1 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001#pragma strong_types, save_types, rtt_checks
2#pragma no_clone, no_inherit, no_shadow
3
4inherit "std/npc";
5
6#define DELAY 60
7#define MAXWAY 30
8
9#include <properties.h>
10#include <language.h>
11#include <moving.h>
12#include "/secure/questmaster.h"
13
14protected void create()
15{
16 ::create();
17 SetProp(P_NAME,"Wanderer");
18 set_living_name("orakel");
19 SetProp(P_GENDER, MALE);
20 SetProp(P_SHORT,"Ein alter Wanderer");
21 SetProp(P_LONG,
22 "Ein uralter Wanderer mit einem langen Hirtenmantel und einem Hirtenstab.\n");
23 AddId(({"wanderer","hirte","orakel"}));
24 create_default_npc( 19 );
25 SetProp(P_MAX_HP, 5000);
26 SetProp(P_HP, 5000);
27 SetProp(P_GENDER,MALE);
28 SetProp(P_ALIGN, 1000);
29 SetProp(P_XP, 1000);
30 SetProp(P_HANDS, ({" mit seinem Hirtenstab", 50, ({DT_BLUDGEON})}) );
31 SetProp(P_NO_ATTACK, 1);
32 SetProp(P_REJECT, ({ REJECT_GIVE, Name(WER) + " sagt: Danke, aber das "
33 "brauche ich nicht.\n" }) );
34 call_out("lauf", DELAY);
35 // Sollte eigentlich ueber das `info'-System laufen ;(
36 AddCmd( ({"frag","frage"}), "frag" );
37}
38
39static int frag(mixed str)
40{
41 int i,j,geredet;
42 mixed *quests;
43 mixed tmp;
44
45 if (!str) return 0;
46 str = this_player()->_unparsed_args(1);
47 str = old_explode(str," ");
48 if ( !sizeof(str) ) return 0;
49 if ( !id(str[0]) ) return 0;
50 if (sizeof(str)<3 || (str[1]!="nach" && str[1]!="ueber"))
51 {
52 tell_object(this_player(),"Der Wanderer sagt: Ich versteh dich nicht.\n");
53 return 1;
54 }
55 geredet=0;
56 str=implode(str[2..]," ");
57 quests=QM->QueryQuests();
58 if (str=="aufgabe" || str=="aufgaben" || str=="abenteuer" || str=="quests"
59 || str == "quest")
60 {
61 tell_object(this_player(),"Der Wanderer sagt: Folgende Aufgaben gibt "
62 "es hier:\n");
63 quests[0] = sort_array(quests[0], #'>);
64 for (i=0;i<sizeof(quests[0]);i++)
65 {
66 tell_object(this_player(),quests[0][i]);
67 if (this_interactive()->QueryQuest(quests[0][i]))
68 tell_object(this_player()," [hast Du schon geloest]");
69 tell_object(this_player(),"\n");
70 }
71 return 1;
72 }
73 for (i=0;i<sizeof(quests[0]);i++)
74 {
75 if (member(old_explode(lower_case(quests[0][i])," "),str)>=0
76 || strstr(lower_case(quests[0][i]), str)>=0)
77 {
78 tmp=quests[0][i]+"? Dazu kann ich Dir folgendes sagen: ";
79 tmp+=quests[1][i][3];
80 tmp=old_explode(break_string(tmp,60),"\n");
81 geredet=1;
82 for (j=0;j<sizeof(tmp);j++)
83 tell_object(this_player(),"Der Wanderer sagt: "+tmp[j]+"\n");
84 }
85 }
86 if (!geredet)
87 tell_object(this_player(),"Der Wanderer sagt: "+capitalize(str)+
88 "? Interessiert mich nicht!\n");
89 return 1;
90}
91
92void lauf()
93{
94 int i, ok;
95
96 // wenn keine Environment, dann laeuft das Ding einfach nicht.
97 if ( !objectp(environment()) )
98 return;
99
100 mapping liste = environment()->QueryProp(P_EXITS);
101 string *dirs = m_indices(liste);
102 string *dirs2 = ({ });
103 for (i=0;i<sizeof(liste);i++)
104 if (!catch(ok=liste[dirs[i]]->QueryProp(P_ORAKEL)) && ok)
105 dirs2 += ({ dirs[i] });
106
107 if (sizeof(dirs2))
108 {
109 i=random(sizeof(dirs2));
110 command_me(dirs2[i]);
111 }
112 call_out("lauf",DELAY);
113}