Wie funktioniert ein Laden ? Hier werden nur Laeden diskutiert, die Objekte an- und wieder verkaufen, reine Verkaufs-Laeden sind ja in der programmierung weniger problematisch. So ein Laden ist eine sehr komplexe Sache, man sollte sich lieber den bereits vorhandenen Laden /room/laden/*.c kopieren und ihn entsprechend abaendern. 1. Grundlegende Eigenschaften von Laeden a. Raeume Ein Laden besteht in der Regel aus dem fuer Spieler zugaenglichen Verkaufsraum und den nur fuer Goetter zugaenglichen Lagerraeumen. b. Ankauf Beim Ankauf eines Objektes soll zuerst in ihm gefragt werden, ob es zum Handeln gedacht ist. Dies geschieht, indem im Objekt die Routine int query_sellable() aufgerufen wird. Nur wenn darauf 1 zurueckgeliefert wird, darf damit gehandelt werden. Nun wird der Wert des Objektes mittels der Routine int query_value() in der BASIS-WAEHRUNG TALER festgestellt. Will man andere Waehrungen verwenden, so sollte man diesen Wert erst anhand eines eigenen Wechselkurses umrechnen. Daraufhin wird das Objekt in einen der Lagerraeume transferiert, /obj/money geclont, dessen Waehrung und Menge gesetzt und in den Spieler transferiert. c. Verkauf Zum Verkauf stehen alle Objekte, die sich in einem Lagerraum des Ladens befinden. Die Ueberpruefung von query_sellable() sollte auch hier stattfinden. Der Preis, um den die Waren verkauft werden, ist frei aushandelbar, im Allgemeinen liegen sie jedoch um ca das Doppelte ueber dem Einkaufs- Preis (Wechselkurs beachten!). Falls der Spieler genugend Geld der entsprechenden Waehrung bei sich hat, festzustellen zB mit money = present(waehrungs_name,this_player()); wieviel = (int)money->query_money(); zieht man dem Spieler mit add_money(-preis); das Geld ab und transferiert ihm die Ware zu. 2. Funktion von /room/laden/verkaufsraum.c Alle benoetigten Routinen sind in den Inherit-File /i/money/shopping und /i/money/exchange ausgelagert; es muessen nur noch im create() diverse Setze-Routinen aufgerufen werden. a. Lagerraeume Um die Anzahl der Objekte pro Raum moeglichst gering zu halten, werden die verschiedenen Waren in verschiedenen Raeumen gelagert. Beispielsweise werden Waffen in einem anderen Raum gelagert als Ruestungen oder Kleidungen. Mit set_store_room(string *kommando, string *file_name, string *routine) werden I. die Kommandos mit denen ein Spieler einen Teil des Angebotes listen oder kaufen kann, II. die Raeume in denen die jeweiligen Angebotsgruppen gelagert werden, III. und die Routinen mit denen geprueft wird in welche Gruppe ein Objekt gehoert, festgelegt. Hierbei ist zu beachten, dass die Reihenfolge der Tests bei einer Ware genau die ist, in der die Routinen angegeben werden. Dies bedeutet, dass der letzte Test immer zutreffen muss, damit auf jeden Fall ein Raum gefunden wird, in dem die Waren dann landet. (Am sinnvollsten ist hier wohl die routine 'query_value') Man kann eigene Raeume machen, in denen die Waren abgelegt werden, oder man kann durchaus auch die Lagerraeume des /room/laden/verkaufsraum (/room/laden/waffen|sonstiges|ruestungen|kleidungen) hier verwenden, da hierdurch das Angebot an Waren fuer die Spieler steigt. Wenn das Angebot in dem Laden selbst gross genug ist, sollten eigene Lagerraeume verwendet werden. b. Waehrung Die Waehrung, mit der im Laden gehandelt wird, kann mit der Routine set_valuta(string waehrungs_name_einzahl) gesetzt werden. Den Wechselkurs gibt man mit folgenden Routinen an: set_valuta_tafel(string *Waehrungs-Namen-Einzahl) set_valutas_tafel(string *Waehrungs-Namen-Mehrzahl) set_kurs_tafel(int *kurse) Naeheres siehe /doc/funktionsweisen/handel/wechselkurs. Damit der Laden funktioniert, muss auf jeden Fall eine Minimal- Kurs-Tabelle gesetzt werden: Wenn die Waehrung des Ladens "taler" ist: set_valuta_tafel( ({"taler"}) ); set_valutas_tafel( ({"taler"}) ); set_kurs_tafel( ({ 1000 }) ); und wenn sie zB "zorkmid" heisst: set_valuta_tafel( ({"taler", "zorkmid" }) ); set_valutas_tafel( ({"taler", "zorkmids"}) ); set_kurs_tafel( ({ 1000, 2000 }) ); c. Preis-Limit Den hoechsten Preis, den der Laden fuer ein Objekt zahlt, kann mit set_max_value(int limit) gesetzt werden. d. Kommandos - wert - verkaufe - verkaufe alles - fuer jedes Kommando das gesetzt wird: - - - kaufe e. Limit fuer die listenden Kommandos Es ist ein Limit vorgegeben, das vor 'Too long evaluation'-Fehlern schuetzen sollte. Eine Aenderung diese Wertes ist nicht mehr vorgesehen.