Per Datenbank könnte es folgendermaßen aussehen:
Als erstes solltest du ein Item adden welches ähnlich solcher Items funktioniert die letzten
endes in der Datenbank in der Tabelle "tCharacterChargedBuffer" gespeichert werden.
Dies sind in der regel alle Items die auch in der ChargedEffect.shn angegeben werden wie z.B. eine
"EXP Booster Card".
Wir geben dem neuem Item jetzt mal beispielhaft die den "Handle" (siehe "Chargedeffect.shn") "2048".
Beim verwendeten effect musst du etwas überlegen, welcher sich dort anbietet ohne in Konflikt mit
anderen "Buffs" zu geraten.
Als nächstes wäre es angebracht eine neue Prozedur in der Datenbank zu erzeugen, die dazu benutzt
werden kann zu checken ob ein Character ein Item mit dem "Handle" 2048 aktiviert hat.
Dieser Prozedur muss prinzipiell nur ein Wert übergeben werden für den Check, nämlich die "nCharNo",
die Prozedur selbst würde nun mittels der "nCharNo" z.B. einen select in der Tabelle "tChargedBuffer"
anhand der "nCharNo" und des "Handles" 2048 ausführen und im Fall eines gefundenen Datensatzes z.B.
1 ansonsten 0 zurückgeben. Mehr brauch da ansich nicht geschehen.
Der nächste schritt währe nun alle Prozeduren ausfindig zu machen, welche in irgendeiner Art den Datensatz
des Characters (Tabelle "tCharacter") erneuern, speziell jene die für das erneuern der EXP und des Levels
zuständig sind.
Einen Überblick bekommt man übrigens indem man (verwendung des Microsoft SQL Server Management Studios)
einen rechtsklick auf diese Tabelle macht und im Kontextmenü "Abhängigkeiten anzeigen" klickt.
Im sich öfnenden Dialog werden nun rechts 2 Radiobuttons angezeigt, bei Aktivierung des oberen
"Objekte, die von[tCharacter] abhängig sind" werden in dem darunter liegenden Listenfeld dann alle Objekte
angezeigt die auf diese Tabelle zugreifen.
Der letzte schritt ist nun sich all jene Prozeduren die ein update des Levels oder der EXP bewirken dahingehend
abzuändern, dass diese unsere neuerstellte Prozedur ausführen und je nach rückgabewert dann entweder
das Lvl und die EXP unberührt lassen, oder halt normal weiterarbeiten und ein update vollziehen.
Je nach Prozedur kann es sein das dort nur EXP oder Level hinzugefügt werden, aber auch das dass derzeitige
Level und/oder EXP geschrieben werden sollen.
Also dort das Level und die EXP einfach auf 0 zu setzen ist nicht unbedingt das gelbe vom Ei und muss je nach
Prozedur eventuell gesondert behandelt werden.
Das alles ist natürlich dann eine rein Serverseitige geschichte, der Spieler bekommt keinerlei feedback und würde
Clientseitig immernoch weiter leveln können bzw. EXP bekommen wenn er ein solches Item aktiviert hätte was
natürlich dann auch bedeuten würde das weitere anpassungen nötig wären um z.b. zu verhindern das ein Char
auf meinetwegen lvl 100 levelt, Jobchange macht, sich alle neuen skills kauft und dann nach einem relogg wieder
auf Level 60 z.b. steht mit jedoch allen Skills die er zuvor noch gelernt hat oder ü60 Waffen/Rüstungen die er
angelegt hat. Und da liegt dann am ende der Hase im Pfeffer da nicht alles über die DB zu regeln ist.
Soweit so gut, Gedanken machen musst du dir nun selbst machn ob es den Aufwand wert ist es auf diesem Wege
"fehlerfrei" zum laufen zu bekommen und vorallem in wie fern du bereit bist dich mit der SQL Syntax auseinanderzusetzen.
Ich hoffe mal das du und andere etwas mit diesem/dieser Beispiel/Anleitung anfangen kannst/können,
das fertige Produkt werde ich jedenfalls nicht einfach so entwickeln und hier Posten da ich selbst momentan keinen
Bedarf daran habe und das schon einige Stunden "Arbeit" bedeutet, mal abgesehen von den oben genannten Problemen
die dann auftreten könnten. ;)
Davon abgesehen ist es wohl effektiver sich eine art Filter zu schreiben welcher genau jene Pakete abfängt die für das
Level/EXP update zuständig sind und diese dann jenachdem ob ein solches item Aktiv ist, Check würde dann auch wieder
mittels unserer Prozedur oder Hardcoded gehen, verwirft, abändert und weiterleitet oder halt durchlässt.
Auch das bedarf allerdings einiger Recherche und ist nicht mal eben gemacht. ;)
Gruß D0n!
Nachtrag: Nen Datumscheck wäre natürlich auch noch nötig um sicherzustellen das bei Ablauf des Items auch direkt wieder EXP gegeben werden da die Tabelle erst beim Logout von abgelaufenen Items befreit wird.