ChangeReputation
FUNKTION:
     public varargs int ChangeReputation(string repid, int value, int silent)

DEFINIERT IN:
     /std/player/reputation.c

ARGUMENTE:
     repid
       Jede neue Reputationsgruppe muss anfangs mit einer eindeutigen ID von 
       einem EM in den Reputationsmaster eingetragen werden. Danach kann man 
       ueber die eindeutige ID <repid> auf sie zugreifen.
     value
       Der Wert, um den die Reputation geaendert werden soll. Positive Werte 
       erhoehen die Reputation, negative verschlechtern sie.
     silent
       Ein optionales Flag. Falls gesetzt, wird keine Standardmeldung ueber 
       die Reputationsaenderung an den Spieler ausgegeben. Man koennte dann 
       eigene Meldungen ausgeben.

BESCHREIBUNG:
     Vor der Aenderung wird ein Check auf die UID des ausfuehrenden Objektes
     ausgefuehrt, "fremde" Reputationen darf man somit nicht veraendern.
     Man kann aber selbstverstaendlich in begruendeten Faellen mit dem
     zustaendigen Magier/Regionsmagier sprechen, ob man ebenfalls Zugriff
     erhaelt. Eingetragen wird dies schlussendlich durch einen EM.

RUeCKGABEWERT:
     REP_RET_SUCCESS    Reputation wurde veraender.
     REP_RET_SUCCESSCUT Reputation wurde auf Min / Max veraendert
     REP_RET_WRONGARGS  Falsche Argumente fuer ChangeRep()
     REP_RET_INVALIDUID Unzulaessige UID / keine Zugriffsrechte
     REP_RET_ALREADYMAX Reputation bereits Max / Min
     REP_RET_INACTIVE   Reputation momentan inaktiv
     REP_RET_INVALIDREP Reputation nicht vorhanden

BEISPIELE:
     s. reputation

SIEHE AUCH:
     reputation
     GetReputation(), GetReputations()

ZULETZT GEAeNDERT:
06.04.2009, Zesstra
