blob: 6e1ac20995aec1114cb263e126fd353ae611544a [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001THEMA:
2 Reputationen
3
4
5ALLGEMEINE BESCHREIBUNG:
6 Man kann bei einer Gruppierung/Volk/Partei/etc. Ruf gewinnen oder verlieren
7 und somit entweder deren Respekt erlangen oder auf ihrer Abschussliste
8 landen.
9
10 Am Beispiel der Goblins im Walddorf Skoga: Dort gibt es das Freie Volk, das
11 aus seinem Heimatdorf vertrieben wurde, und die Goblins, welche das Dorf
12 besetzt haben. Hilft man einer Seite, baut man Ruf auf und erhaelt
13 beispielsweise Zugang zu Heilstellen und speziellen Items, waehrend die
14 andere Seite zunehmend misstrauisch reagiert und einen schlussendlich ohne
15 zu fragen attackiert.
16
17 Es muessen nicht immer mehrere Seiten involviert sein. Auch eine einzelne
18 Partei ist denkbar, der man helfen kann und in deren Laeden/Kneipen man mit
19 steigendem Ruf z.B. Verguenstigungen, mehr Informationen, Bonusitems und
20 Aehnliches erhaelt.
21
22 Denkbar ist es auch, das Ganze zu vernetzen. Beispielsweise koennte ein
23 Verwandter eines Mitglieds von obengenanntem Freien Volk vor den Angriffen
24 ins Polargebiet umgezogen sein, aber von des Spielers Heldentaten gehoert
25 haben und ihm so freundlicher gesonnen sein.
26
27
28METHODEN (s. a. einzelne Manpages):
29
30 int ChangeReputation(string repid, int value, int silent)
31 Die Funktion ist in jedem Spielerobjekt vordefiniert.
32 Vor der Aenderung wird ein Check auf die UID des ausfuehrenden Objektes
33 ausgefuehrt, "fremde" Reputationen darf man somit nicht veraendern.
34 Man kann aber selbstverstaendlich in begruendeten Faellen mit dem
35 zustaendigen Magier/Regionsmagier sprechen, ob man ebenfalls Zugriff
36 erhaelt. Eingetragen wird dies schlussendlich durch einen EM.
37
38
39 int GetReputation(string repid)
40 Ebenfalls im Spielerobjekt vordefiniert. Liefert den aktuellen Wert der
41 angegebenen Reputation zurueck.
42
43
44 mapping GetReputations()
45 Ebenso vordefiniert. Liefert ein Mapping aller im Spieler gespeicherten
46 Reputationen und ihrer Werte zurueck.
47
48
49BEISPIELE:
50
51 // Eine kleine Aufgabe fuer das "Freie Volk" bringt dem Spieler etwas
52 // Ansehen.
53
54 void QuestGeloest(object pl) {
55 // Silent, wir geben eine eigene Meldung aus.
56 pl->ChangeReputation("freiesvolk", 250, 1);
57
58 tell_object(pl, "Du befreist einen Gefangenen. Das freie Volk wird es "
59 "Dir danken.\n");
60 }
61
62 // Ein NPC des "Schaedlspalta-Klans". Wenn er getoetet wird, verlieren die
63 // toetenden Spieler Ruf bei dieser Fraktion.
64
65 #include <properties.h>
66
67 inherit "/std/npc.c";
68
69 void create() {
70 npc::create();
71 SetProp(P_SHORT, "Ein Goblin des Schaedlspalta-Klans");
72 ...
73 }
74
75 varargs void die(int poison, int ext) {
76 object *enemies;
77 int value;
78 // Begleit-NPCs brauchen keine Reputation
79 enemies = filter(PresentEnemies(), #'interactive);
80 // 50 Reputationsabzug pro Kill, aufgeteilt auf alle Gegner
81 value = -50 / sizeof(enemies);
82 foreach(object pl : enemies) {
83 pl->ChangeReputation("schaedlspalta", value);
84 // Optional koennte ihre "Feindfraktion" das gutheissen:
85 // pl->ChangeReputation("freiesvolk", abs(value));
86 }
87 return npc::die(poison, ext);
88 }
89
90 // Jeder beteiligte Feind kriegt nun eine Meldung, die in etwa lauten
91 // koennte: "Dein Ansehen beim Schaedlspalta-Klan hat sich etwas
92 // verschlechtert." Der NPC koennte nun Spieler automatisch angreifen,
93 // sobald ihr Ruf zu tief gesunken ist:
94
95 #include <reputation.h>
96
97 void init() {
98 npc::init();
99 if(objectp(this_player()) && !IsEnemy(this_player()) &&
100 this_player()->GetReputation("schaedlspalta") <= REP_DISLIKED)
101 InsertEnemy(this_player());
102 }
103
104 // Ein NPC rueckt bestimmte Informationen erst raus, sobald das Ansehen
105 // des Spielers hoch genug ist:
106
107 #include <properties.h>
108 #include <reputation.h>
109
110 inherit "/std/npc.c";
111
112 string InfoGeheimplan();
113
114 void create() {
115 npc::create();
116 SetProp(P_SHORT, "Der Kommandant des freien Volkes");
117 ...
118 AddInfo("geheimplan", #'InfoGeheimplan, "sagt: ");
119 }
120
121 string InfoGeheimplan() {
122 if(this_player()->GetReputation("freiesvolk") < REP_TRUSTED)
123 return "Das geht Dich ueberhaupt nichts an!";
124 return "Nun, ich vertraue Dir. Also, heute um Mitternacht ... ... ...";
125 }
126
127 // Pruefung der (wichtigsten) Rueckgabewerte:
128
129 #include <reputations.h>
130
131 void QuestGeloest(object pl) {
132 string msg;
133
134 // Sonstige Meldungen
135 ...
136
137 switch(pl->ChangeReputation("freiesvolk", 500, 1)) {
138 // Reputation bereits Max
139 case REP_RET_ALREADYMAX:
140 msg = "Dein Ansehen beim freien Volk kann sich nicht mehr weiter "
141 "verbessern.";
142 break;
143 // Reputation waere hoeher als Max geworden, daher auf Max gesetzt
144 case REP_RET_SUCCESSCUT:
145 msg = "Dein Ansehen beim freien Volk hat sich etwas verbessert, "
146 "aber weiter steigern kannst Du es nicht mehr.";
147 break;
148 // Reputation erfolgreich geaendert
149 case REP_RET_SUCCESS:
150 msg = "Dein Ansehen beim freien Volk hat sich etwas verbessert.";
151 break;
152 default:
153 // Technischer Fehler
154 break;
155 }
156
157 if(stringp(msg) && strlen(msg))
158 tell_object(pl, break_string(msg, 78));
159 }
160
161SIEHE AUCH:
162
163LETZTE AENDERUNG:
164 2009-22-03, 12:30:00 von Nibel