Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/items/fishing/fischwaage.c b/items/fishing/fischwaage.c
new file mode 100644
index 0000000..00e2dd4
--- /dev/null
+++ b/items/fishing/fischwaage.c
@@ -0,0 +1,179 @@
+// Aenderungshistorie:
+// 25.07.2015, Amaryllis: QueryFish implementiert, AddFishFood an/von Fraggle adaptiert
+
+inherit "/std/container";
+
+#include <moving.h>
+#include <fishing.h>
+#include <language.h>
+#include <properties.h>
+#include <defines.h>
+#include <money.h>
+
+#define TP this_player()
+#define BS(x) break_string(x, 78)
+
+private int good_price, bad_price, FAC, FOC, DIV;
+private int waagen_preis_faktor=4; // Um wieviel teurer als in Laeden wird
+ // der Fisch verkauft / Im Fisch wird durch
+ // 4 geteilt, das wird hier wieder ausgeglichen.
+
+private int get_price();
+private void RemoveFish();
+
+// Amaryllis, 25.07.2015: QueryFish "quick and dirty" reingehackt,
+// damits funktioniert. Kann man sicher besser machen...
+private int QueryFish(object ob); // wird hier im Objekt in PreventInsert verwendet
+
+private int QueryFish(object ob) {
+ return (objectp(ob))&&(ob->id(FISCH_ID));
+}
+
+private int SetFactors(int good_value, int bad_value) {
+ FAC=good_value;
+ FOC=bad_value;
+ DIV=100;
+ if(!(FAC && FOC && DIV))
+ SetFactors(100,50);
+ return 1;
+}
+
+protected void create() {
+ if (!clonep(this_object())) return;
+ ::create();
+ SetFactors(100,50); //100% fuer frische, 50% fuer alte Fische
+ SetProp(P_NAME, "Fischwaage");
+ AddId(({"waage","fischwaage"}));
+ SetProp(P_GENDER, FEMALE);
+ SetProp(P_SHORT, "Eine Fischwaage");
+ SetProp(P_LONG,
+ "Eine sehr genaue Fischwaage mit einem grossen Zeiger. Du kannst\n"
+ "Deine Beute drauflegen, den Zeiger ablesen und, sofern Du mit\n"
+ "dem Preis einverstanden bist, die Verkaufsglocke laeuten.\n");
+ SetProp(P_DEST_PREPOSITION, "auf");
+ SetProp(P_SOURCE_PREPOSITION, "von");
+ SetProp(P_MATERIAL, MAT_MISC_METAL);
+ SetProp(P_TRANSPARENT, 1);
+ SetProp(P_NOGET, 1);
+ SetProp(P_MAX_WEIGHT, 10000);
+ SetProp(P_WEIGHT, 5000);
+
+ AddDetail(({"zeiger"}), BS(
+ "Der Zeiger besteht aus Metall. Du kannst ihn ablesen, wenn Du "
+ "genau wissen willst, was Dein Fang wert ist."));
+ AddDetail(({"fang","beute"}), function string (string key) {
+ return BS(sizeof(all_inventory())?"Du schaust zufrieden auf die Beute, "
+ "die auf der Waage liegt. Welcher Preis sich dafuer wohl erzielen "
+ "laesst?":"Du muesstest erst einmal etwas drauflegen.");
+ });
+ AddReadDetail(({"zeige","zeiger ab"}), function string (string key) {
+ int current_weight = query_weight_contents();
+ get_price();
+ return
+ "Du schaust auf den grossen Zeiger der Waage, der erstaunlicherweise\n"
+ "nicht nur das Gewicht, sondern auch den Preis anzeigt.\n"
+ "Der Zeiger steht auf "+
+ (current_weight?current_weight+" Gramm.\n":"Null.\n")+
+ (good_price?good_price+" Goldmuenzen fuer fangfrischen Fisch.\n":"")+
+ (bad_price?bad_price+" Goldmuenzen fuer etwas aelteren Fisch.\n":"");
+ });
+ AddDetail(({"glocke"}), BS(
+ "An der Waage befindet sich eine kleine Glocke die Du laeuten kannst, "
+ "um den Inhalt der Waage zu verkaufen. Und warte damit nicht zu lange, "
+ "je aelter der Fisch, desto niedriger der Preis!"));
+
+ AddCmd("laeute&glocke|verkaufsglocke","cmd_laeute",
+ "Was willst Du denn laeuten?");
+}
+
+static int cmd_laeute(string str, mixed *param) {
+ tell_room(ME, TP->Name()+" laeutet eine kleine Glocke an der Fischwaage.",
+ ({TP}));
+ tell_object(TP, "Du laeutest die Glocke, um Deine Ware zu verkaufen.\n");
+ foreach(object ob: all_inventory(ME)) {
+ if ( !ob->id(FISCH_ID) ) {
+ tell_object(TP,
+ "Auf der Waage liegt nicht nur Fisch!\n"
+ "Du solltest nicht versuchen, hier zu betruegen!\n");
+ tell_room(ME, TP->Name()+" macht sich hier gerade unbeliebt.\n",({TP}));
+ return 1;
+ }
+ if ( ob->QueryQuality()<=0 ) {
+ tell_object(TP, "Auf der Waage liegt alter, gammliger Fisch.\n"
+ "Den kannst Du nicht verkaufen!\n");
+ tell_room(ME, TP->Name()+" macht sich hier gerade unbeliebt.\n",({TP}));
+ return 1;
+ }
+ }
+
+ int price=get_price();
+ if( !price ) {
+ tell_object(TP,
+ "Du solltest Deine Beute erstmal auf die Waage legen!\n");
+ return 1;
+ }
+ tell_object(TP, "Du erhaeltst "+price+" Goldmuenzen fuer Deinen Fisch.\n");
+ tell_room(ME, TP->Name()+" erhaelt haufenweise Geld fuer "+
+ TP->QueryPossPronoun(MALE, WEN)+" Fisch.\n",({TP}));
+ //ZZ: AddMoney() gibt die werte von move() zurueck, d.h. !=0 geht nicht.
+ if (this_player()->AddMoney(price) != MOVE_OK) {
+ object money=clone_object(GELD);
+ tell_object(TP, BS(
+ "Du kannst das Geld nicht mehr tragen. Es faellt klimpernd zu "
+ "Boden."));
+ money->SetProp(P_AMOUNT, price);
+ money->move(environment(ME), M_MOVE_ALL|M_PUT);
+ }
+ RemoveFish();
+ return 1;
+}
+
+private int get_price() {
+ int preis, preis_von_diesem;
+ int gewicht;
+
+ good_price = 0;
+ bad_price = 0;
+
+ foreach(object ob : all_inventory(ME)) {
+ preis_von_diesem = ob->QueryProp(P_VALUE);
+ if(ob->QueryQuality()>2)
+ good_price += preis_von_diesem*FAC/DIV;
+ else
+ bad_price +=preis_von_diesem *FOC/DIV;
+ }
+
+ good_price *= waagen_preis_faktor;
+ bad_price *= waagen_preis_faktor;
+ return (good_price + bad_price);
+}
+
+int PreventInsert(object obj) {
+// if( objectp(obj) && obj->QueryFish() )
+ if( objectp(obj) && QueryFish(obj) )
+ return ::PreventInsert(obj);
+ write("Das ist eine Fischwaage! Und keine Waage fuer "+obj->name(WEN)+
+ ".\n");
+ return 1;
+}
+
+#define ETO environment(this_object())
+
+private void RemoveFish() {
+ string pubname = ETO->GetPub();
+ object pub;
+
+ if ( stringp(pubname) )
+ pub = load_object(pubname);
+ else
+ pub = ETO;
+
+ foreach(object ob : all_inventory(ME)) {
+ // pub->AddFishFood(ob);
+ // Amaryllis, 25.07.2015: Angepasst wegen AddFishFood von Fraggle
+ pub->AddFishFood(ob->name(WER,0),ob->QueryProp(P_WEIGHT),ob->QueryQuality());
+ ob->remove();
+ }
+}
+
+#undef ETO