blob: 4667fd3eb3c998aa3bd8b1f97c1227ea425abbad [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001P_FISH
2******
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005NAME
6====
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 P_FISH "fish"
MG Mud User88f12472016-06-24 23:31:02 +02009
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra953f9972017-02-18 15:37:36 +010011DEFINIERT IN
12============
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra953f9972017-02-18 15:37:36 +010014 /sys/fishing.h
MG Mud User88f12472016-06-24 23:31:02 +020015
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017BESCHREIBUNG
18============
MG Mud User88f12472016-06-24 23:31:02 +020019
Zesstra953f9972017-02-18 15:37:36 +010020 Enthaelt Einstellungen zu allem, was mit Fischen zu tun hat.
21 Kann in Fischen, Raeumen und Koedern gesetzt werden. Die verfuegbaren
22 Optionen und Funktionsweisen sind in den nachfolgenden Abschnitten
23 aufgefuehrt.
MG Mud User88f12472016-06-24 23:31:02 +020024
Zesstra953f9972017-02-18 15:37:36 +010025 Fische:
26 *******
27 Die Property legt zusaetzliche Eigenschaften fest:
28
29 F_NOROTTEN
30 Fisch fault nicht; ggf. sollte hier auch gleich F_NOHEAL gesetzt
31 werden, weil sonst eine unverderbliche tragbare Tanke erzeugt wuerde.
Arathorn3f62a4b2020-03-09 23:36:45 +010032 Wenn sie verderben koennen, beginnen Fische nach 10 min zu verderben
33 und werden danach alle 2 Minuten schlechter, d.h. reduzieren ihren
34 Heilwert. Nach vier Schritten ist ein Fisch komplett vergammelt.
Zesstra953f9972017-02-18 15:37:36 +010035 F_NOTHUNGRY
36 Fisch frisst Koeder nur, wenn er auch wirklich nachher an der Angel
37 haengt. Ist er zu schwer fuer die Angel und reisst ab, bleibt der
38 Koeder erhalten.
39 F_REPLACE
Arathornccb98f62018-08-29 21:48:11 +020040 Fisch soll sich beim Einholen der Angel verwandeln, technisch:
41 wenn er geclont und in die Angel bewegt wurde. Hierzu ist die
42 Funktion ReplaceFish() im Fisch zu definieren, die sich um die
43 Verwandlung kuemmert (z.B. Monster clonen und Fisch zerstoeren,
44 Beispiel siehe unten).
Zesstra953f9972017-02-18 15:37:36 +010045 F_NOHEAL
Arathorn3f62a4b2020-03-09 23:36:45 +010046 Fisch heilt nicht bei Verzehr.
47 Wenn er heilt, ist die Heilung ist abhaengig vom Gewicht des Fisches
48 und limitiert auf den Wertebereich 0-40 LP. Der maximale Heilwert
49 ist bei 1280 g Gewicht erreicht und skaliert in Schritten von 32 g
50 linear. Pro LP, der geheilt wird, muss der Spieler Platz fuer 3
51 Food haben (ueber eat_food() realisiert). Die Heilung wird ueber
52 buffer_hp() mit einer Rate von 5 LP pro Heartbeat.
Zesstra953f9972017-02-18 15:37:36 +010053
54 Raum (OPTIONAL):
55 ****************
56 Legt die Fischdichte des Gewaessers fest. Der eingestellte Wert wirkt
57 sich auf die Wartezeit aus, die der Angler verbringen muss, bis ein
58 Fisch anbeisst. Berechnung im Detail (alle Zahlenwerte in Sekunden):
59 - Basis-Wartezeit: delay = 80
60 - Die Werte von P_FISH von Raum und Koeder werden addiert:
61 summe = raum->QueryProp(P_FISH) + koeder->QueryProp(P_FISH)
62 -> positive Werte (Bonus) werden auf 60 begrenzt und mit Zufalls-
63 komponente von <delay> abgezogen:
64 delay -= random(summe)
65 -> negative Werte (Malus) werden auf -300 begrenzt und mit Zufalls-
66 komponente auf <delay> aufgeschlagen:
67 delay += random(-summe)
68
69 Zusaetzlich wird ein weiterer Malus auf die Wartezeit faellig, falls
70 P_WATER in der Angel und/oder P_WATER im Koeder nicht zum aktuellen
71 Gewaesser passen. Der Malus betraegt jeweils 60+random(60) Sekunden.
72
Zesstra953f9972017-02-18 15:37:36 +010073 Der Standardwert fuer P_FISH im Raum ist 0 und bedeutet 100 % Bestand.
74 Positive Werte erhoehen die Dichte, negative senken sie. Positive Werte
75 sollten nicht >100 sein.
76
77 Sofern sich die Werte fuer P_FISH in den empfohlenen Grenzen bewegen,
78 koennen Abzuege fuer falsches Gewaesser ueblicherweise kaum durch
79 Boni auf Angel oder Koeder kompensiert werden. Ausserdem ist zu
80 bedenken, dass es keine Boni fuer richtige Gewaesserwahl gibt.
81
Zesstra953f9972017-02-18 15:37:36 +010082 Koeder (OPTIONAL):
83 ******************
84 Ein Koeder kann mittels P_FISH die Fischdichte modifizieren, um hierueber
85 ein besseres Beissen der Fische zu simulieren (reduziert die Wartezeit
86 beim Angeln, siehe oben unter "Raum"). Wenn also der Raum einen Wert
87 von -100 gesetzt hat und der Koeder +100, entspricht die Fischdichte im
88 Gewaesser wieder dem Normalwert.
89
90
Arathornccb98f62018-08-29 21:48:11 +020091BEISPIEL
92========
93
94 protected void create() {
95 [...]
96 SetProp(P_FISH, F_REPLACE);
97 [...]
98 }
99
100 // ReplaceFish() wird per call_out() mit Funktionsnamen (d.h. als String)
101 // gerufen, daher muss die Sichtbarkeit public oder static sein.
102 static void ReplaceFish() {
103 tell_object(this_player(), break_string("Der Katzenhai glitscht Dir
104 "aus der Hand und streift seine Haut ab. Vor Dir steht eine "
105 "niedliche, schwarze Katze!", 78));
106 tell_room(environment(this_player()), break_string(
107 this_player()->Name(WEM)+" glitscht ein Katzenhai aus der Hand "
108 "und streift seine Haut ab. Ueberraschend steht eine niedliche, "
109 "schwarze Katze vor Dir!", 78));
110 object monster = clone_object("/d/irgendwo/irgendwer/mon/haikatze");
111 monster->move(environment(TP), M_GO|M_SILENT);
112 remove();
113 }
114
115
Zesstra953f9972017-02-18 15:37:36 +0100116SIEHE AUCH
117==========
118
Arathorn3f62a4b2020-03-09 23:36:45 +0100119 Properties: P_WATER, P_FOOD
120 Basisobjekte: /std/items/fishing/fish.c, /std/items/fishing/haken.c
121 /std/items/fishing/koeder.c /std/items/fishing/angel.c
122 Methoden: GetAquarium(L), eat_food(), buffer_hp()
Zesstra953f9972017-02-18 15:37:36 +0100123
Arathorn3f62a4b2020-03-09 23:36:45 +0100124Zuletzt geaendert: 2020-Mar-09, Arathorn