// This file is part of UNItopia Mudlib.
// ----------------------------------------------------------------
// File:        /room/bsp/bsp6.c
// Description: Einfuehrungskurs - Raum 6
// Author:      Unbekannt.
// Modified by:

inherit "/i/room";

#include <stats.h>
//	In stats.h sind die Status-Werte fuer Kraft (STAT_STR), 
//	Geschlicklichkeit (STAT_DEX), Ausdauer (STAT_CON) und 
//	Intelligenz (STAT_INT) definiert.
//	Diese Werte werden sowohl fuer die Waffe als auch fuer die 
//	Ruestung benoetigt -
//	also wird diese Datei hier mit #include dem Sourcecode beigefuegt.
//	(Da dort nur Konstanten-Definitionen enthalten und keine
//	Funktionen, werden sie mit include und NICHT mit inherit in den
//      Sourcecode integriert.)

void reset() {
   if(!present("kampfaxt",this_object()))
   {
//	Wenn sich kein Objekt mit der ID 'kampfaxt' im Raum befindet, wird
//	der folgende Programmblock ausgefuehrt...

      object axt;
//	Eine Variable axt als Objekt deklarieren (wie gehabt)...

      axt = clone_object("/obj/nahkampf_waffe");
//	Eine Kampfaxt ist zweifelsohne eine Nahkampfwaffe. Alternativ
//	gibt es auch noch Schuss- und Defensivwaffen (Schilde). Mehr zu
//	diesen Waffentypen im Verzeichnis /doc/funktionsweisen/waffen.

      axt->set_name("Kampfaxt");
      axt->set_gender("weiblich");
      axt->set_id( ({"axt","kampfaxt"}) );
      axt->set_adjektiv("handlich");
//	Damit erhaelt die Axt das Adjektiv handlich. Naeheres ueber 
//	Adjektive siehe /doc/funktionsweisen/grammatik/adjektiv

      axt->set_long(
	 "Eine handliche Kampfaxt. Der blutverkrustete "
	 "Eisenkopf laesst ein paar eindeutige Rueckschluesse auf den "
	 "Verwendungszweck dieser Axt zu... zum Faellen von Baeumen "
	 "wurde sie jedenfalls nicht gemacht!");
//	Die Namensgebung und Beschreibung ist analog zu derjenigen bei
//	Monstern (siehe Beispielraum Nr. 5). Praktisch alle Objekte
//	enthalten diese Aufrufe.
//	Man kann diese Beschreibungen auch in eigenen Programmen abfragen:
//	obj->query_name() liefert z.B. den Namen des Objektes obj zurueck
//	(sofern es einen hat). Die weiteren Abfrage-Funktionen lauten
//	query_short(), query_long() und id(). Die Funktion von id()
//	ist hier eine Ausnahme, siehe '? id' (in der Enzyklopaedie).

      axt->set_weight(2);
//	Mit dieser Funktion wird der Axt ein Gewicht von 2 Einheiten
//	zugewiesen. Alle Objekte die /i/move.c inheriten 
//	bekommen auf diese Art ein Gewicht. Das Gewicht entscheidet  vor
//	allem darueber, wieviel ein Spieler tragen kann. Man kann das
//	Gewicht aber auch selbst abfragen mit obj->query_weight(), wobei
//	obj in diesem Fall das Objekt ist, von dem man das Gewicht wissen
//	moechte.

      axt->set_damage(4, 9);
//	Mit set_damage() kann man den Schaden setzen, der mit dieser
//	Waffe verursacht werden kann. Der erste Wert kann von Anfaengern
//	erreicht werden, der zweite von erfahrenen Spielern. Bei Defensiv-
//	Waffen setzt diese Funktion uebrigens die Staerke des Schutzes!
//	Welche Waffenstaerke hier einzutragen ist, erfaehrt man unter
//	/doc/richtlinien/waffen/schlagkraft .

      axt->set_used_stats( ({STAT_STR, STAT_STR, STAT_DEX}) );
//	Hiermit setzt man die fuer dieses Waffe benoetigten Faehigkeiten.
//	Die Variablen STAT_STR etc. sind im Include-File stats.h definiert,
//	welches zu Beginn dazugelinkt wurde. Fuer die Axt wird hier 2/3
//	Staerke und 1/3 Geschicklichkeit als ausschlaggebend definiert.
//	Diese Werte entscheiden dann (nach ihrer Gewichtung) ob ein
//	Spieler trifft und wie gut ein Spieler trifft.

      axt->set_skill_path( ({"skill", "offensiv", "scharf", "axt"}) );
//	Hier wird der Skill-Pfad fuer die Axt gesetzt. Durch den Kampf
//	mit dieser Waffe soll ja die Erfahrung mit der Axt steigen.  Diese
//	Funktion gibt an, welche Erfahrung benutzt und gesteigert wird.
//	Eine Liste mit allen moeglichen Skill-Pfaden findet man in
//	/doc/richtlinien/skills .

      axt->set_life(350);
//	Hiermit wird festgelegt, wie viele Schlaege die Axt unbeschadet
//	uebersteht. Nach jedem Schlag wird dieser Wert um 1 erniedrigt.
//	Nach 350 Schlaegen ist dieser Wert hier Null und die Axt zerbricht.
//	Mit diesem Aufruf kann eine Waffe auch wieder repariert werden
//	(doch das fuehrt hier zu weit).

      axt->set_broken_message("CRUNSCH!!!\n");
//	Diese Textmeldung wird ausgegeben, wenn die Axt schliesslich
//	zerbricht. Man beachte: Die Meldung wird mit \n abgeschlossen.

      axt->set_value(40, 230);
//	Setzt den Wert der Axt in Taler. Der erste Integer ist der Wert
//	der Axt im beschaedigten Zustand, der zweite Integer ist der Wert
//	im neuen Zustand. Der aktuelle Wert wird aus dem aktuellen Bruch-
//	Wert (siehe set_life()) errechnet. Es haette hier auch nur
//	axt->set_value(230) genuegt - das Programm haette den zweiten
//	Wert selbst errechnet (dieser ware allerdings nicht gleich 40!).

      axt->move(this_object());
//	Schliesslich muss man die Axt noch in den Raum bewegen...
   }
}

void create() {
   set_short("Beispielraum Nr. 6");
   set_long("Du bist im Beispielraum Nr. 6 des Einfuehrungskurses fuer "
   "Goetter. Mit\ndem Zauberstab-Kommando 'zmore hier' kannst Du den "
   "Quellcode von diesem\nRaum ansehen. In diesem Raum wird eine Waffe "
   "gemacht (dieser Objekttyp\nwird wohl sehr oft benoetigt). Eine "
   "Ruestung gibt es im Sueden.\n");
   set_exits( ({"bsp7", "bsp5"}) , ({"sueden" , "norden"}) );
   add_type("teleport_rein_verboten", 1);
   reset();
//	Die Gegenstaende werden im reset() gemacht - sie sollen ja immer
//	wieder auftauchen, auch wenn sie jemand entfernt hat.

}
