blob: 792c386910a049cf50ed9f438fd968b1df0a0aaf [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) {
30 string uid, changemsg; int newval; mapping rep;
31
32 if(!intp(value) || !value || !stringp(repid) || !sizeof(repid))
33 return REP_RET_WRONGARGS;
34 if(!mappingp(rep = REPMASTER->GetReputationData(repid)))
35 return REP_RET_INVALIDREP;
36 if(!(rep["flags"] & REP_FLAG_ACTIVE))
37 return REP_RET_INACTIVE;
38 if(REPMASTER->CheckValidUid(repid, previous_object()) < 1)
39 return REP_RET_INVALIDUID;
40 if(reputations[repid] >= REP_MAXIMUM || reputations[repid] <= REP_MINIMUM)
41 return REP_RET_ALREADYMAX;
42
43 if(reputations[repid] + value > REP_MAXIMUM)
44 newval = reputations[repid] + value - REP_MAXIMUM;
45 else if(reputations[repid] - value < REP_MINIMUM)
46 newval = reputations[repid] + value + REP_MINIMUM;
47
48 if(!silent &&
49 stringp(changemsg = REPMASTER->GetDefaultChangeMsg(repid,
50 newval || value)))
51 tell_object(this_object(), changemsg);
52
53 reputations[repid] += newval || value;
54
55 return newval ? REP_RET_SUCCESSCUT : REP_RET_SUCCESS;
56}
57
58/*
59 * Argumente:
60 * repid = Reputation-ID im Repmaster
61 *
62 * Return:
63 * 0 = Reputation noch nicht veraendert / enthalten
64 * !0 = Reputationswert
65 */
66public int GetReputation(string repid) { return reputations[repid]; }
67
68/*
69 * Return:
70 * Mappingkopie aller gespeicherten Reputationswert
71 */
72public mapping GetReputations() { return copy(reputations); }