EXP Block Item?

11/25/2015 15:21 volcomboy1#1
Hey Epvpers!

Mal ne Frage:

Unzwar hab ich mittlerweile auf paar Servern ein "Exp Block Item" gefunden o: Nun is meine Frage wie man das einfügt?! Wenn ich das so mache in den SHN's wie die Server das haben funktioniert das leider nicht wie gewünscht :( Habe von einem anderen DEV erfahren das es womöglich an der SQL liegt da dort ein Eintrag fehlt... Weiß jemand wie das funktioniert und wäre so nett mir das zu erklären? :handsdown:

LG volci ^-^
11/25/2015 18:57 fanke2250#2
Auf Odin kannst du es eig vergessen xD
Ist ein Item vom CN/HK Server :)
11/25/2015 19:08 EpicFight#3
Quote:
Originally Posted by fanke2250 View Post
Auf Odin kannst du es eig vergessen xD
Ist ein Item vom CN/HK Server :)
Auf Odin geht es auch, wie ich es ihm schon sagte per SQL :D
11/26/2015 06:32 хαrvα#4
Quote:
Originally Posted by EpicFight View Post
Auf Odin geht es auch, wie ich es ihm schon sagte per SQL :D
Du weißt ja anscheinend wie es geht. Wieso sagst du es ihm dann nicht einfach?
Hätte gesagt Bau einen XP Booster ein mit so hohen Prozenten, sodass du nurnoch 1xp bekommst. Nur ne Theorie.
11/26/2015 12:40 EpicFight#5
Habe es ihm aufm TS erklärt ^^ einfach sagen wenn item blabla genutzt wird soll nexp etc nicht mehr geupdatet werden.
11/26/2015 16:50 *Kaito#6
Halt die fresse epic.

Vergiss es habe ich schon versucht über sql mit "einfach sagen wenn blabla item genutzt kein nexp" das geht aus dem grund nich weil es nicht in echtzeit reagiert. Das einzige was sofort reagiert ist ne funktion mit der man das auction house bei odin addet aber da will ich jetzt hier nich so drauf eingehen.
11/26/2015 17:15 EpicFight#7
Deswegen soll er auch datetime einbauen .. Es geht per SQL ;)
11/26/2015 20:31 volcomboy1#8
Ähm ja will hier keine Streiterei oder so verursachen D: nur das hilft mir net weiter epic is ja schön und gut das du es mir gesagt hast wie es geht xD nur ich bin kein dev also keine ahnung wie oder wo ich das in die SQL eintrage... xD und da sicher vllt. paar andere auch das problem haben werden oder bereits haben wäre nen kleines tut dafür wirklich praktisch ^-^ danke schonma :D

ps: ja xarva das mit den übertriebenen exp funktioniert leider nicht :( hab die EffectValue schon auf 65000 gestellt aber dann kriegt man immer noch mehr exp als 1 D; aber wäre keine schlechte idee gewesen xD
11/26/2015 21:59 EpicFight#9
Um
Quote:
Originally Posted by volcomboy1 View Post
Ähm ja will hier keine Streiterei oder so verursachen D: nur das hilft mir net weiter epic is ja schön und gut das du es mir gesagt hast wie es geht xD nur ich bin kein dev also keine ahnung wie oder wo ich das in die SQL eintrage... xD und da sicher vllt. paar andere auch das problem haben werden oder bereits haben wäre nen kleines tut dafür wirklich praktisch ^-^ danke schonma :D

ps: ja xarva das mit den übertriebenen exp funktioniert leider nicht :( hab die EffectValue schon auf 65000 gestellt aber dann kriegt man immer noch mehr exp als 1 D; aber wäre keine schlechte idee gewesen xD
Wie ich schon mal gesagt habe bin Emu DB gewohnt habe ja nix mehr mit Odin auf der platte. Man muss quasi sagen das er wenn das item genutzt wird die Spalte nexp mit mehr aktualisieren soll, aber man muss sich dann nochmal eine extra Tabelle erstellen wo man eintragwn kann wann das item genutzt und bis wann damit danach ja wieder exp bekommt ^^
//
// UPDATE nExp FROM tCharcater
// SELECT aktiviert, abgelaufen FROM tExpBlock
// UPDATE nExp FROM tCharacter
//

Gerade keine Zeit um genauer zu schauen, oben ist quasi ein denk Anstoß. Wenn Item ExpBloxk1h genutzt wird soll er nExp nicht mehr aktualisieren und gleichzeitig in z.b. tExpBlock spalte aktiviert das datetime eintragen, dann muss man noch eine query machen damit man wenn es abgelaufen ist wieder exp bekommt. Also brauch man 2 datetime Spalten
11/26/2015 23:20 D0n!#10
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.