Zum durchsetzen der vielleicht bald gueltigen neuen Spielregeln fehlt bis
jetzt ein mehr oder weniger automatisiertes Strafkonzept. Ich habe deshalb
mal einen Penalty-Demon gebastelt, der eigentlich nur eine Datenbank ist:
/secure/penaltyd.c
/secure/penalty.h
Das Teil besteht im Moment im Grunde nur aus 3 public methoden:
int AddPenalty(mixed player,int type,int duration,string reason,int flags);
Hiermit kann man eine Strafe hinzufuegen (vergeben). Geht nur fuer Erzmagier
und wird vollstaendig gelogt. Die Strafen summieren sich, also neue Strafen
werden auf die alten aufaddiert, wenn sie noch nicht abgelaufen waren.
Argumente:
player - Spielerobjekt oder Spieler-UID
type - eine integer id aus penalty.h die den Straftyp qualifiziert
duration - die Zeitdauer, die die Strafe (ab sofort) gelten soll in Sekunden
wenn hier -1 angegeben wird, zaehlt die Strafe unbegrenzt lang
reason - der Grund fuer die Strafe, das dient nur der Nachvollziehbarkeit
flags - momentan unnuetz (0), aber hier kann man spaeter auch Strafen
fuer eine ganze Zweitiefamilie verhaengen oder so
Rueckgabewerte:
<-1 - Argumentfehler
0 - fehlende Berechtigung
-1 oder >0 - Strafdauer
int QueryPenalty(mixed player, int type);
Damit kann man die Strafe abfragen. Gibt kein Mindestlevel dafuer.
Argumente:
player - Spielerobjekt oder Spieler-UID
type - eine integer id aus penalty.h die den Straftyp qualifiziert
Rueckgabewerte:
0 - fehlende Berechtigung
-1 oder >0 - Strafdauer
string QueryPenaltyName(int type);
Damit kann man sich den Straftyp quasi im Klartext geben lassen. Fuers
log oder diverse Ausgaben etc. Dabei wird nicht die Strafe zurueckgegeben,
sondern die Aktion, die dann nicht mehr moeglich ist, etwa:
- "Forschungspunkte finden"
- "Zaubertraenke finden"
- "Kerben erhalten"
- "Schankhaeuser betreten"
Argumente:
type - eine integer id aus penalty.h die den Straftyp qualifiziert
Rueckgabewerte:
String - wie gesagt, die mit Strafe belegte Aktion
Was nun noch fehlt, ist ne Amnestie-Funktion UND natuerlich muss das in all
die Stellen der Lib eingebaut werden, wo die Aktion stattfindet.
public varargs int QueryAllPenalties(mixed player)
Gibt alle Strafen eines Spielers 'player' oder alle Strafen aller Spieler
(wenn players==0) als Kopie des internen Mappings zurueck.
Argumente:
player - Spielerobjekt oder Spieler-UID oder 0
Rueckgabewerte:
mapping - Kopie des internen Mappings fuer diesen oder alle Spieler
0 - keine Strafe fuer diesen Spieler angemeldet
public int RemovePenalty(mixed player, int type)
Entfernet eine einzelne Strafe von einem Spieler, analog AddPenalty.
Argumente:
player - Spielerobjekt oder Spieler-UID
type - eine integer id aus penalty.h die den Straftyp qualifiziert
Rueckgabewerte:
1 - Erfolg
0 - keine Berechtigung oder keine Strafe fuer diesen Spieler bekannt
public varargs int RemoveAllPenalties(mixed player)
Entfernt alle Strafen eines Spielers oder alle Strafen aller Spieler
(Amnestie). Beiden Varianten rufen rekursiv RemovePenalty() auf.
Argumente:
player - Spielerobjekt oder Spieler-UID oder 0
Rueckgabewerte:
1 - Erfolg
0 - keine Berechtigung oder keine Strafe fuer diesen Spieler bekannt
|