Am besten postest du mal deine lade funktion und dazu hin ein ausschnitt vom laden aus der mysql log
Beiträge von IPrototypeI
-
-
das ganze wird via timer gemacht und erstmal die runde ausgelesen und die anzahl der checkpoint wo die jeweilige person durch ist und die distance zu dem jeweiligen checkpoint
danach werden noch die jeweilige ermittelte ergebnisse für jeden spieler abgeprüft.
so zufrieden -
Ich glaub einfach wirst du es mit der include wohl nicht haben
http://forum.sa-mp.com/showthread.php?t=426109//edit
Hier noch eine erklärung sogar
http://ysi.wikia.com/wiki/Library:YSI%5Cy_races -
Also mir gefällts eigentlich :o
Wenn du meine anderen Designs gesehen hättest
wüsstest du auch warum .. Aber naja okay ,
danke für dein Feedback . Und ich werde mich
mal an was einfaches machen .Das soll jetzt auf keinenfall angreiflich sein ich zeig dir mal ein beispiel:
Das war mein Anfang
auch nicht wirklich das wahre in meinen Augen und dann hab ich mich mal daran gemacht einfach von mehreren Designen ein Element was mir gefallen hat
zu übernehmen und einen eigenen touch rein zu bringenund dann sah das ganze auch ihrgend wan auch so aus, aber momentan bezieh ich mich eher auf grafik rips xD aber das ist nebensächlich
ist nicht fertigAm besten ist auch teilweise wenn du personen hast die einen einigermaßen angemessenen geschmack haben und die frägst was die davon halten hab ich auch gemacht, anfangs musste ich mit der kritik leben das die
designs scheiße waren aber nun gut ihrgend wann hat sich das auch geändert. -
Das einzigste gute an dem design wäre der background aber der rest nicht obwohl die container sind auch noch zu gebrauchen im main bereich.
1. Dein header ist überladen und durch das Userpanel wird der größte teil verdeckt probier dich mal eher an was schlichtem.
Mir ist und bleibt es eine rätsel wie es leute gut finden können auch die farbwahl ist auch nicht das gelbe vom ei.
Ich gebe dir mal ein tipp such dir ihrgend ein design erstmal raus was dir gefällt und versuch ihm dein eigenen tatsch mit zu geben weil sowas gefällt doch einem doch selbst nicht. -
Mag sein , ich stelle mich Dumm an, aber ich habe leider 0 Ahnung von diesem System möchte es aber gerne Haben Stur eben :D, Wie macht man das genau mit dem SSCANF denn?
Ich erklär dir das ganze mal
enum SpielerDaten
{
pName[MAX_PLAYER_NAME],
pLevel,
pAlter,
pGeld,
pBundesland,
pAdmin,
pKills,
pTode,
Float:pHealth,
pPerso,
pCarLic,
pBikeLic,
pFlyLic,
pWaffenLic,
pTruckLic,
pBan,
pWarn,
pLeader[11],
pRang[28],
pFraktion[24],
pStory,
pMember
};
sscanf("260|PuSchKiiNX|Test123|1|1|0|0|50|0|0|0|0|0|0|0|0|0||||1|88|0","p<|>e<{i}s["#MAX_PLAYER_NAME"]{s[128]}dddddddfdddddddds[11]s[28]s[24]dd>",SpielerInfo[playerid]);an dem code
zum einen werden die ganzen buchstaben und zeichen in was gesplittet werden soll specifer genannt.
p<|> bedeutet das der string gesplittet werden soll sobald dieses | zeichen vorhanden ist das geht auch mit kommas p<,>.
so die standart specifer solltest du kennen
i,d => Integer
f => Float
l => bool wert als true /false bei bool:bla;
s[x] => string x steht für eine zahl die string länge ist das x hier also
new string[10] würde so aussehen s[10] du kannst auch die länge des defines rein hauen sieh eoben.
e<> bedeutet das es dem entsprechenden enum entlang gesplittet wird.
daher muss die reihenfolge der specifer auch gleich dem des enums entsprechen haben wir oben.
a<i>[x] gibt es auch ein array aus integer
beispiel
new array[5]; wäre a<i>[5]
das gilt nicht für string hier da gibt es auch wieder ein bestimmtes specifer.
so das wäre hier mal eine grobe erklärung weiter erklärungen findest du hier
http://forum.sa-mp.com/showthread.php?t=120356
ahja mit den Klammern { } wird dafür gesorgt das der wert übersprungen wird
beispiel: 11,12,10 auf {ii}i soll an var1,var2,var3 übergeben werden durch das splitten
jetzt 11 und 12 übersprungen und var1 hat den wert 10
nun kann man mit -i- zum beispiel auch die reihenfolge des enums überspringen
11,12,10 auf i-i-i an var1,var2,var3
so hat var1 = 11 var2 = 0 wurde übersprungen var3 = 12 und 10 geht jetzt leer aus//edit
wozu sscanf genutzt wird ist ganz einfach zum splitten von string es ist eine bessere alternative zu strok und den split funktionen wo mal geschrieben wurden
explode mein ich -
Natürlich kann es nicht speichern weil du wieder das scheiß komma drinnen hast
und
sscanf(str,"ddds[24]s[24]ddfds[11]ddddddds[12]s[12]s[13]ds[12]",SetPlayerScore(playerid,SpielerInfo[playerid][pLevel]),
das soll wohl ein scherz sein ? -
Von was für einer Menge reden wir hier...?mfg.
http://forum.sa-mp.com/showthread.php?t=305158&page=2
http://forum.sa-mp.com/showthread.php?t=169462&page=3Nun gut man sollte beachten das es so aussieht wenn leute SQLite benutzen die keine Ahnung haben daher ist es besser die include von Slice zusätzlich noch zu nutzen.
Jedoch denk ich wenn du 100 oder 1000 mal 1000 Autos ausließt speicherst oder einträgst wird SQLite auch nachgeben aber mann sollte schon alles einsetzen was so im möglichen von den mysql plugin her ist.
Aber ein eigenen Test habe ich noch nicht gemacht ich hab es nur gehört das kannst du mit strcat und memcpy vergleichen das eine ist bei einem größeren string schneller als das andere.
Zu dem kannst noch hin schreiben das ich das auch vom lieben MyU habe -
Um hier ihrgend wie einiger massen helfen zu können bräuchte man die datenbank struktur es sei den du hast bei deinem update query keine felder ausgelassen da du wieder
werte überspringst -
Dein Enum muss genauso in der Reihenfolge strukturiert sein, wie du die Spalten ausliest per SSCANF.
LG
Nein nur wenn man den specifer e benutz und siehst du in seinem code ein e
wen dein string so aussehen würde würde es gehen jedoch ist das bei dir nicht der fall passwort wird bei dir in ein integer rein gehauen
wie der name auch und richtung ende wird es auch nochmal kritisch da versteh ich auch nicht laut deinem enum warum du dort strings verwendest.sscanf("260|PuSchKiiNX|test123|1|1|0|0|50|0|0|0|0|0|0|0|0|0|0|0|1|88|0","p<|>{i}s[24]s[130]ddddfdddddddddddddd",
SpielerInfo[playerid][pName],
SpielerInfo[playerid][pPasswort],
SpielerInfo[playerid][pLevel],
SpielerInfo[playerid][pGeld],
SpielerInfo[playerid][pKills],
SpielerInfo[playerid][pTode],
SpielerInfo[playerid][pHealth],
SpielerInfo[playerid][pPerso],
SpielerInfo[playerid][pCarLic],
SpielerInfo[playerid][pBikeLic],
SpielerInfo[playerid][pFlyLic],
SpielerInfo[playerid][pAdmin],
SpielerInfo[playerid][pBan],
SpielerInfo[playerid][pWarn],
SpielerInfo[playerid][pWaffenLic],
SpielerInfo[playerid][pLeader],
SpielerInfo[playerid][pRang],
SpielerInfo[playerid][pFraktion],
SpielerInfo[playerid][pStory],
SpielerInfo[playerid][pAlter],
SpielerInfo[playerid][pBundesland]);
printf("%s %d",SpielerInfo[playerid][pName],SpielerInfo[playerid][pAlter]);
das ganze kannst du so leicht überprüfen einfach unter main oder OnGameModeInit//edit zu dem ist mir gerade aufgefallen du lässt elmente wie zum beispiel Fraktion als string speichern und ließt das auch als string aus in deinem enum sieht das wiederrum anders aus dort steht das als integer drinne genau so wie beim rang
-
Die hat keine Lust runter zu zählen.
natürlich nicht was für eine dumme Frage die bleibt konstant wnen du diese nicht änderst was auch nicht nötig ist wenn man das ergebnis was man ausließt vergleicht -
Hoffe doch du meinst das
und dann noch das enum dazu wäre auch nicht schlecht
-
PuSchKiiN_x3 ich meinte danach noch dein select query und das jeweilige enum nicht vergessen.
bezüglich zum splitten -
ocmd:premium(playerid,params[])
{
new pID,dauer;
new timestamp,str[128];if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
timestamp = gettime();
new sekunden= dauer * 7*24*60*60;
timestamp += sekunden;
format(str,sizeof(str),"Blabla hat %d Wochen Premium",dauer);
SendClientMessageToAll(ROT,str);
mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
SavePlayer(pID);
return 1;
}Sie Sequenz war falsch.
edit:
new sekunden= dauer * 7*24*60*60;
macht aus den angegebenen Wochen (dauer)
z.B.
1 Woche = 7 Tage = 168 Stunden = 10080 Minuten = 604800 Sekunden
Und wir brauchen ja Sekunden für den Timestampocmd:premium(playerid,params[])
{
new pID,dauer;
new timestamp,str[128];
if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
new sekunden= dauer * 7*24*60*60;
timestamp = gettime() + sekunden;
format(str,128,"Blabla hat %d Wochen Premium",dauer);
SendClientMessageToAll(ROT,str);
mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
return 1;
}warum erst speichern und danach gleich nochmal ?
-
Alles anzeigen
du meinst speichern
zu dem PuSchKiiN_x3 lass einfach mal was laden und poste das query lass es dir ausgeben oder nehme das aus der mysql_log.
zu dem noch dein enum welches SpielerInfo als index dient -
Zu dem solltest du das nicht einfügen das war nur ein beispiel. Das du damit noch nie gearbeitet hast.
Time = Zeit = gettime
PlusMinute = + 1 Minute = + 60 -
Hier bitte nicht vergessen beim importieren die Zeichenkodierung auf utf-8 stellen
-
gettime() gibt die die zahl in sekunden wieder welche seit dem datum oben genannt verstrichen ist um da jetzt die zeit hinzuzurechen einfach das addieren
beispiel
new TimePlusMinute = gettime() + 60; -
Das ganze geht auch via mysql
dazu braucht auch die spaltedie richtige einstellung
SQL`PremiumTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' // beim erstellen der tabelle die jeweilige einstellung
die reihen folge kann man auch ändern.Danach kann man wenn der spieler sich einloggt das ganze noch überprüfen entweder mit einem weiteren query ob die jeweilige zeit größer ist sollte ein ergebnis zurück kommen
dan hat er noch premium also schon wieder beim einloggen mit NOW() überprüfen.
oder direkt im query -
Wenn du schon die tabellen über das skript erstellen willst gibt es da auch eine MySQL Log sofern man mysql_debug auf true hat bei einem anderen mysql plugin auch abweichbar
dort werden die fehler ausgeben. Du hast weitaus mehr als 500 Zeichen einfach mal in einen großen string packen und mit strlen das ganze ausgeben lassen also die länge.