KONZEPT:
Bestenliste der Gilden
AUTOR:
Archon@Wunderland (21.06.2000)
EINLEITUNG:
Damit nicht jede einzelne Gilde eine eigene Bestenliste erstellen
muss, gibt es ab sofort einen Deamon. Dieser erzeugt einmal pro
Tag automatisch eine Bestenliste fuer jede angemeldete Gilde.
Bei der Erstellung werden automatisch alle Gildenskills
beruecksichtigt.
WIE KANN MAN DIESEN DEAMON NUTZEN?
Zuerst einmal muss die Gilde angemeldet sein. (D.h. sie muss in
ALL_GUILDS - home.h stehen.) Ist dies der Fall, erfolgt durch das
Setzen von bestimmten Properties, die im folgenden erklaert
werden, die Erstellung der Liste automatisch.
DIE PROPERTIES
Um den Deamon zu nutzen, muss man zuerst <daemon/bestenliste.h>
includen. Danach stehen folgende Properties zur Verfuegung:
P_TOPLIST_WANTLIST
Soll fuer die Gilde eine Liste erstellt werden? Werte: (0/1)
Bsp: SetProp(P_TOPLIST_WANTLIST,1);
P_TOPLIST_OUTPUT
Da der Deaemon die Ausgabe der Liste nicht selber uebernehmen
kann, erwartet der Deamon eine Funktion, an die er die fertige
Liste uebergeben kann. Die Funktion erhaelt eine Liste der
Form: ({ ({ DATA_ARRAY }) }).
Welche Funktion erhaelt die erstellte Liste? Werte: (0/closure)
Bsp: SetProp(P_TOPLIST_OUTPUT,#'TopListenOutput);
mit der Funktion: public void TopListenOutput(mixed *list)
P_TOPLIST_CALCULATE
Der Deamon berechnet fuer jeden Spieler einen Skillwert. Dieser
entsteht als Summe seines Koennens in jedem Skill. Mit Setzen
dieses Properties kann man Einfluss auf diesen Wert nehmen. Die
Funktion erhaelt einen Array der Form: ({ DATA_ARRAY })
Soll Einfluss auf die Berechnung genommen werden? (0/closure)
Bsp: SetProp(P_TOPLIST_CALCULATE,#'Calculate);
mit der Funktion: public int Calculate(mixed *array)
P_TOPLIST_ADDSPELLS
Sollen weitere Nicht-Gildenskills beruecksichtigt werden?
Werte: (0/string/array von strings)
Bsp: SetProp(P_TOPLIST_ADDSPELLS,({"ruestung","fluchtrichtung"}));
WIE SIEHT DER DATAARRAYS AUS?
Die Daten eines Spielers werden in einem Array gespeichert.
Um auf die Elemente des Arrays zuzugreifen, stehen folgende
Properties zur Verfuegung:
(ACHTUNG! Nur mit diesen Properties auf den Array zugreifen!)
LISTPLAYERNAME - der Name des Spielers
LISTPUNKTE - die berechneten Punkte (hier ggf. eigene setzen)
LISTGENDER - das Geschlecht
LISTSEER - "" oder "Seher"
LISTGILDENLEVEL - das Gildenlevel
LISTLEVEL - das normale Level
LISTAGE - wie alt ist der Spieler?
LISTLAST - wann war der Spieler das letzte mal da?
LISTXP - XPs
LISTGXP - Giga-XPs
LISTQP - QPs
LISTEP - EPs
LISTZT - Zts
LISTINT - aktueller Int-Wert
LISTMAXINT - maximaler Int-Wert
LISTSTR - aktueller Str-Wert
LISTMAXSTR - maximaler Str-Wert
LISTDEX - aktueller Dex-Wert
LISTMAXDEX - maximaler Dex-Wert
LISTCON - aktueller Con-Wert
LISTMAXCON - maximaler Con-Wert
LISTRACE - Rassenbezeichnung (noch nicht gesetzt!)
LISTPROCENT - bei Ausgabe Procent gegenueber dem Besten
Ein Beispiel:
-------------
#include <deamon/bestenliste.h>
//Hier wird der berechnete Wert gewichtet nach Gildenlevel und Anwesenheit
public int Calculate(mixed *list)
{
float gewichtet;
int monate;
if (list[LISTGILDENLEVEL]<1) { gewichtet=1.0; }
else { gewichtet=1.0+list[LISTGILDENLEVEL]/10.0; }
monate=((time_jetzt-list[LISTLAST])/2592000)-1;
if (monate>9) monate=9;
if (monate) gewichtet=gewichtet-monate/10.0;
return (int)((float)list[LISTPUNKTE]*gewichtet);
}
//Die Liste wird in ein File geschrieben
public void TopListenOutput(mixed *list)
{
int x,j,i;
rm("/gilden/magiekundige/save/magiekundigen.gen");
for (((x=sizeof(list))>LISTMAX?j=LISTMAX:j=x),i=0;i<j;i++)
{
write_file("/gilden/magiekundige/save/magiekundigen.gen",
sprintf("%2d %-15s %2d %2d %6.2f %6s %10s\n",
i+1, capitalize(list[i][LISTPLAYERNAME]), list[i][LISTGILDENLEVEL],
list[i][LISTLEVEL], list[i][LISTPROCENT], list[i][LISTSEER], list[i][LISTRACE]));
}
}
void create()
{
...
SetProp(P_TOPLIST_WANTLIST,1);
SetProp(P_TOPLIST_OUTPUT,#'TopListenOutput);
SetProp(P_TOPLIST_CALCULATE,#'Calculate);
SetProp(P_TOPLIST_ADDSPELLS,({"ruestung","fluchtrichtung"}));
...
}
SIEHE AUCH:
P_GUILD_SKILLS, P_GUILD_LEVEL, P_GUILD_LEVELS, P_GUILD_TITLES,
P_LEVEL
|