Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/obj/wanderer.c b/obj/wanderer.c
new file mode 100644
index 0000000..9120092
--- /dev/null
+++ b/obj/wanderer.c
@@ -0,0 +1,113 @@
+#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);
+}