Guten Abend.
Da zu einem guten Script auch die Dynamische Flexibilität gehört, möchte ich heute anhand eines kleines Beispiels erklären, wie man Ingame - ohne dass man das Pickup manuell (statisch) ins Script einfügt - erstellen kann.
Ziel
Ziel ist, wie oben schon gesagt, das dynamische Erstellen eines Pickups. Wir verwenden dazu den Befehl '/createpickup <pickupid> <pickuptype>'.
Was wir brauchen
Ich werde in diesem Tutorial mit MySQL arbeiten, da man so ganz einfach Ingame die Pickups in der Datenbank verwalten kann.
Ein Tutorial, wie man MySQL installiert, gibt es hier
Des Weitern werde ich mit 'ocmd' & 'sscanf' arbeiten (-> sowohl beim speichern & laden, als auch bei dem command ).
Beide Plugins gibt es public zum downloaden.
Außerdem verwende ich zum Verwalten der Datenbank "XAMPP & phpmyadmin"
Dann fangen wir mal an..
Einrichten der Tabelle
Zuallerst müssen wir eine neue Tabelle in unserer MySQL Datenbank anlegen. Ich nenne sie mal "Pickups".
Nun müssen wir die Anzahl der Spalten angeben.
Dazu schauen wir uns die native 'CreatePickup' an.
CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld)
Wir brauchen also 6 Spalten, richtig? Nein. Wir brauchen noch eine weitere, da wir später auf die einzelnen Pickups in der DB zugreifen wollen und somit für jedes Pickup eine eigene ID brauchen.
Das ganze sieht nach dem Erstellen dann so aus.
Nun müssen wir die Zeilen füllen.
In die 1. Zeile kommt die eindeutige ID (meinetwegen auch Identität), die wir mit 'AI'(=Auto-increment) autmatisch hochzählen lassen.
D.h : Wenn pro Eintrag wird die ID erhöht, sodass jedes Pickup eine eigene ID hat.
ID ist ein Integer, deswegen stellen wir bei 'TYP' 'INT' ein.
Bei Länge/Werte schreiben wir eine 3 rein. Diese steht für die einzelnen Ziffern. (123 = 3 Ziffern, 12 = 2 Ziffern usw)
Da diese Var immer automatisch hochgezählt werden wollen, setzen wir noch einen Haken bei 'A_I'
Nun müssen wir die verbleibenden Zeilen füllen. Dafür tragen wir einfach die Paramter, die in der native 'CreatePickup' gefordert werden, in die einzelnen Zeilen ein.
Hier dürfen wir nicht mehr 'A_I' verwenden.
Zudem sollte man bei der X, Y & Z Achse den Typ auf "Float" umstellen.
Sollte dann ungefähr so aussehen.
Nun ist die Tabelle vollständig erstellt & wir können uns dem Scripte widmen.
Scripting
Dafür erstellen wir uns das Grundgerüst des Commands
{
Soweit, so gut. Nun müssen wir ein paar Variablen deklarieren.
{
new modelid,//Modelid des Pickups. 1240 ist z.b ein Herz
Float:pos[3],//damit wir wissen, wo das Pickup erstellt werden soll
ptype;//Pickuptype. 1 ist z.b 'immer sichtbar', 0 'nicht sichtbar'
Jetzt kommt die gewohnte sscanf-Abfrage, ob alle Parameter angegeben wurden.
Nun werden wir das Pickup erstellen. Dazu brauchen wir die Position des Spielers.
Jetzt wird das Pickup erstellt
Das Pickup sollte nun sichtbar sein.
Jetzt müssen wir es in unsere Tabelle eintragen.
Dazu verwenden wir 'INSERT INTO'
format(query,sizeof(query),"INSERT INTO Pickups(`model`,`type`,`x`,`y`,`z`,`vw`) VALUES ('%d','%d','%f','%f','%f')",modelid,ptype,pos[0],pos[1],pos[2],GetPlayerVirtualWorld(playerid));
Erklärung dazu sollte in dem oben genannten Thread sein.
Nun müssen wir den Query noch abschicken.
Die Daten sollten nun in unsere Tabelle eingetragen worden sein.
Somit hätten wir den ersten Teil des Tutorial abgeschlossen. Der 2. Teil - das Laden des Pickups - wird im Laufe des nächsten Tages folgen.
Bis dahin
Beste Grüße
Manniac
p.s: ich habe versucht, das ganze so übersichtlich wie möglich zu gestalten. Sollte es Verbesserungsvorschläge geben, immer her damit. Ich freue mich auf konstruktive Kritik