blob: f32b75d177db5ca3acee0af672348d9d332996e2 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001#pragma strong_types
2#pragma save_types
3#pragma range_check
4#pragma no_clone
MG Mud User88f12472016-06-24 23:31:02 +02005
6#include <wizlevels.h>
7#include <reputation.h>
8
9private mapping reputations = ([ ]);
10
11/*
12 * Argumente:
13 * repid = Reputation-ID im Repmaster
14 * value = Wert um den die Reputation geaendert werden soll,
15 * positiv oder negativ
16 * silent = Keine Std-Meldung ausgeben
17 *
18 * Return:
19 * REP_RET_WRONGARGS = Falsche Argumente
20 * REP_RET_INACTIVE = Rep inaktiv (kann derzeit nicht geaendert werden)
21 * REP_RET_INVALIDUID = Unzulaessie UID
22 * REP_RET_ALREADYMAX = Rep bereits maximum / minimum
23 * REP_RET_INVALIDREP = Reputation nicht vorhanden
24 *
25 * REP_RET_SUCCESS = Reputation wurde veraendert
26 * REP_RET_SUCCESSCUT = Reputation wurde auf Min / Max veraendert
27 */
28public varargs int ChangeReputation(string repid, int value,
29 int silent) {
Arathornb3051452021-05-13 21:13:03 +020030 string changemsg;
31 int newval;
32 mapping rep;
MG Mud User88f12472016-06-24 23:31:02 +020033
34 if(!intp(value) || !value || !stringp(repid) || !sizeof(repid))
35 return REP_RET_WRONGARGS;
36 if(!mappingp(rep = REPMASTER->GetReputationData(repid)))
37 return REP_RET_INVALIDREP;
38 if(!(rep["flags"] & REP_FLAG_ACTIVE))
39 return REP_RET_INACTIVE;
40 if(REPMASTER->CheckValidUid(repid, previous_object()) < 1)
41 return REP_RET_INVALIDUID;
42 if(reputations[repid] >= REP_MAXIMUM || reputations[repid] <= REP_MINIMUM)
43 return REP_RET_ALREADYMAX;
44
45 if(reputations[repid] + value > REP_MAXIMUM)
46 newval = reputations[repid] + value - REP_MAXIMUM;
47 else if(reputations[repid] - value < REP_MINIMUM)
48 newval = reputations[repid] + value + REP_MINIMUM;
49
50 if(!silent &&
51 stringp(changemsg = REPMASTER->GetDefaultChangeMsg(repid,
52 newval || value)))
53 tell_object(this_object(), changemsg);
54
55 reputations[repid] += newval || value;
56
57 return newval ? REP_RET_SUCCESSCUT : REP_RET_SUCCESS;
58}
59
60/*
61 * Argumente:
62 * repid = Reputation-ID im Repmaster
63 *
64 * Return:
65 * 0 = Reputation noch nicht veraendert / enthalten
66 * !0 = Reputationswert
67 */
68public int GetReputation(string repid) { return reputations[repid]; }
69
70/*
71 * Return:
72 * Mappingkopie aller gespeicherten Reputationswert
73 */
74public mapping GetReputations() { return copy(reputations); }