Die Rotation kann nicht -1000.0 betragen..
Denn es geht nur bis 359 und fängt dann wieder bei 0 an. bzw -359 und 0
Ändere diesen Wert einfach mal auf 0.0 um zu gucken ob es funktioniert.
Die Rotation kann nicht -1000.0 betragen..
Denn es geht nur bis 359 und fängt dann wieder bei 0 an. bzw -359 und 0
Ändere diesen Wert einfach mal auf 0.0 um zu gucken ob es funktioniert.
Ich denke mal dein Datenbank ist nach so einem Prinzip aufgebaut:
Wenn du nun den Namen in der WHERE Anweisung benutzt, sucht er die komplette Datenbank nach dem namen ab, auch wenn schon einer gefunden wurde, da es möglich ist im Feld Name, doppelte Werte also zweimal z.B. User1 abspeichern lässt.
Wenn du nun aber die ID in der WHERE Anweisung benutzt, dann gibt es diese ID nur einmal. Denn wenn deine Datenbank so eingestellt ist wie auf meinem Screen, kannst du eine ID nicht doppelt eintragen. Daher weiß MySQL auch genau, es gibt diesen Wert nur einmal und muss nicht alles miteinander vergleichen.
Daher funktioniert das so schneller.
Also einfach beim Registrieren die ID gleich auslesen lassen, und dann immer die ID benutzen beim Updaten.
format(query,128,"INSERT INTO `accounts` (Name) VALUES ('%s')",username);
mysql_query(query);
PlayerInfo[playerid][pID] = mysql_insert_id();
Kleines Beispiel wie es im Register stock aussehen könnte.
Natürlich ändert sich die ID nicht, daher brauch man sie nicht abspeichern lassen bei jedem Disconnect. Sondern nur beim Connecten (Einloggen) auslesen.
Ich kann mich vielleicht in der erklärung bischen vertun aber so wurde es mir mal erzählt, ich weiß aufjedenfall das es per ID schneller als per Namen geht
Ich hoffe ich konnte helfen.
Mit freundlichen Grüßen,
Zunno
Man braucht sich aber keinen RFI schutz einbauen, wenn man in seinen PHP Scripten keine $_GET Varriabeln verwendet oder liege ich da falsch?
Ja wobei die ID sollte schon als PRIMERY KEY difiniert sein.
Dadurch weiß die Datenbank auch: "Hey das ist ein Wert den kann es nur einmal in der Datenbank geben."
Und sucht demnach auch nicht weiter wenn er einen Wert gefunden hat.
Und vergleicht auch nicht wie bei der Varriante mit dem Namen die ganzen Werte mit einander.
Daher spart das schon ziemlich viel Zeit beim Updaten von Daten.
Als ich meine Account immer mit der MySQL WHERE Name = 'Name' geupdatet habe, hat es bei mir auch gelaggt. Ein Account hat 20.000 ms zum speichern gebraucht (20 sek).
Meine Lösung: Datenbank ID beim Login auslesen lassen. Und dann per Datenbank ID Updaten.
anstatt
Probiers aus
Zudem ist es auch kein großer Zeitaufwand den Abstand ein wenig zu vergrößern.
Das ist eine Arbeit von ner Minute
@PsyNet: Falsch, das standart Filterscript speichert dies nicht ab, es gibt nur den fertigen Code für SetPlayerAttachedObject in der Konsole aus.
Und warum nicht selber machen? Ist doch auch nicht schwer
Naja so ohne weiteres speichert der nix ab und gibt dir auch keine Kordinaten aus.
Diese Funktion brauchst du:
http://wiki.sa-mp.com/wiki/EditAttachedObject
Alles weitere ist in dem Artikel beschrieben.
Versuch es mal mit STRG + Pfeiltasten bzw STRG + Bild Hoch / Runter.
Ist bei jedem Objekt ein wenig verschieden.
ZitatLangsamer als MySQL wird es sicherlich nicht sein. Lade mal einen GF Acc per MySQL System ... Der Server lalalalalagt wie sau.
Naja, wenn man natürlich nicht mit MySQL umgehen kann, ist klar das ein Server dan laggt
War auch mein anfangs problem
Aber zum Tutorial: Ist auf jedenfall hilfreich wenn man z.B. Filterscripts erstellen möchte, welche man releasen will.
Und man doch eine recht schnelle Verarbeitung von Daten haben möchte. Wozu Dini und co nicht zugehören.
Mfg Zunno
Goldkiller hatte mir auf diese Frage mal geantwortet gehabt, weil mich das auch gewundert hatte und ich das auch noch nicht kannte.
Hier ist der Link zu seinem Beitrag: Hier klicken
mach oben mal ein
forward Float:mysql_GetFloat(Table[], Field[], Where[], Is[]);
hin.
Damit sollte der Fehler verschwinden
MFG, Zunno
stock mysql_GetFloat(Table[], Field[], Where[], Is[])
zu stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
Falls dann errors kommen, oben das hin:
forward Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
Mit freundlichen Grüßen,
[GSF]Zunno
Ich bezweifle aber das dein Vor und Nachname nur aus Zahlen besteht.
Warum benutzt du also SetPVarInt?
Du wurdest doch schon darauf hingewiesen wie man Strings in PVars speichert.
Dominik.
1. Nein du musst das Callback OnQueryEnd nennen.
2. Du kannst in dem Callback natürlich ein anderes aufrufen, klar warum nicht.
3. Natürlich kannst du deine MySQL Funktionen die "INSERT, UPDATE oder DELETE" ausführen, umschreiben so das diese Multi Threaded sind.
Zu 3, 4 und 5 ist zu beachten das es sich hier um StrickenKids MySQL Plugin handelt und nicht um das von BlueG.
Daher können die Funktionen von Maddins Tutorial auch nicht kompatible mit diesem Plugin sein.
Gruß, Zunno
du wirst immer gekickt. nur es gibt denn bug, das er dich nicht direkt kickt sondern du immer reconnectest. guck also unter onplayerconnect
bei was alles gekickt wird.
Allgemein deine Abfragen sind komisch...
Warum 7 mal else if(fische == 0)
natürlich führt er dir dann nur das erste "else if(fische == 0)" aus.
Guten Abend,
Ich muss sagen, gutes Tutorial, benutze diese Methode auch schon länger und bin zufrieden.
Jedoch würde ich zum Tutorial noch dazu schreiben das dies nur auf StrickenKids MySQL Plugin bezogen ist, da bei BlueG alles wieder ein wenig anders ist.
Lg, Zunno
stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
Falls dann noch ein Warning kommt, mach oben noch
forward Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
hin.
Lg, Zunno
CMD:bauszahlen(playerid,params[])
{
for(new b=0;b<MAX_BIZ;b++)
{
if(IsPlayerInRangeOfPoint(playerid,5,bInfo[b][PosX],bInfo[b][PosY],bInfo[b][PosZ]))
{
new Money;
new BizDatei[64];
format(BizDatei,sizeof(BizDatei),"/Biz/%d.txt",inBiz[playerid]);
new kasse=dini_Int(BizDatei,"Kasse");
if(sscanf(params,"u",Money))return SendClientMessage(playerid,ROT,"Fehler: /bauszahlen [anzahl]");
{
if(strcmp(bInfo[b][Besitzer],SpielerName(playerid),false)==0)
if (Money >= dini_Int(BizDatei,"Kasse")) return SendClientMessage(playerid,ROT,"Du hast nicht soviel Geld in der Kasse!");
{
GivePlayerMoney(playerid,Money);
dini_IntSet(BizDatei,"Kasse",kasse-Money);
KillBiz(b);
LoadBiz(b);
}
}
}
return 1;
}
return 1;
}
So sollte es funktionieren
Du musst die Schleife ja auch beenden, wenn du an einem Biz stehst. Daher das return 1 in der schleife.