Zu und für Spam verwarnt, tschüss.
Beiträge von Goldkiller
-
-
Ich lösch die Beiträge nicht aus langeweile ... . Entweder ihr bleibt beim Thema oder lasst das Posten sein .
//Edit:
Spoiler anzeigen
Die letzen Beiträge waren doch nur eine Diskussion vom Petersdom mit den Blitzen.Spoiler anzeigen Langsam wird mir doch ein bisschen Mulmig... gibt es vieleicht doch sowas wie Gott?
Spoiler anzeigen
Jo,klar ... -
Der Thread bleibt vorerst geschlossen.
Die Gründe wurden leider genannt. Personenbezogene Daten waren ( leider ) im Downloadpaket enthalten. Problematisch ist es,da diese im Klartext abgelegt waren.
Ich empfehle Jedem User der auf diesem Server ( GTA: Suchtis RP ) gespielt hat, sein Passwort umgehend zu ändern, sofern er/sie das Passwort ( welches auf diesem Server genutzt wurde ) mehrfach nutzt ( Mail - Konto , Soziale Netzwerke , Foren o.Ä. ).
Keiner kann euch nämlich versichern,dass die Daten nicht jetzt schon missbraucht werden.Eine Stellungnahme von dir ( @Jony bzw @WhiteCube ) wäre wirklich notwendig.
Nachtrag:
Thread bleibt mit Einverständnis des Erstellers geschlossen. -
Strg + Leertaste , dann öffnet sich das Menu ( Zumindest bei PAWNO ) .
-
[...]
ich denke mal irgendein admin hats auf mich abgesehen.. (goldkiller oder dt sniper)
Danke für die Anschuldigung, ich war es dennoch nicht. Nur weil du von mir mal verwarnt wurdest, hab ich es nicht auf dich abgesehen . -
Ihr habt beide dennoch das wirkliche Problem übersehen. Der Dateipfad ist falsch:
dini_IntSet("/Accounts/%s.ini"
Es funktioniert nicht mit %s so wie du wahrscheinlich möchtest. Du möchtest wahrscheinlich <Spielername>.ini öffnen, dazu müsstest du vorher den String ( Dateipfad ) formatieren.
In diesem Tutorial findest du die Lösung unter der Funktion AdminSpeichern(). -
//Edit
habe es dir nochmal reccourcen freundlicher geschrieben
stock LoadInfoBox(playerid)
{
new Second,Minute,Hour,Day,Month,Year,String[10],EndEnd[50];
format(String,10,"%02d:",Hour);strcat(EndEnd,String);
format(String,10,"%02d:",Minute);strcat(EndEnd,String);
format(String,10,"%02d",Second);strcat(EndEnd,String);
TextdrawSetString(InfoBoxTime,EndEnd);
// <-- Hier hättest du unbedingt EndEnd leeren müssen.Du überschreibst es immer bzw erweiterst den String
format(String,10,"%02d:",Day);strcat(EndEnd,String);
format(String,10,"%02d:",Month);strcat(EndEnd,String);
format(String,10,"%d",Year);strcat(EndEnd,String);
TextdrawSetString(InfoBoxDate,EndEnd);
return 1;
}
Dann hättest du auch gleich alles in einem Schritt machen können.
new Second,Minute,Hour,Day,Month,Year,String[16 /* 11 würde auch reichen */];
gettime(Hour,Minute,Second); // <-- Nicht vergessen
getdate(Year,Month,Day); // <-- Nicht vergessenformat(String,sizeof(String),"%02d:%02d:%2d",Hour,Minute,Second);
TextdrawSetString(InfoBoxTime,String);
format(String,sizeof(String),"%02d.%02d.%2d",Day,Month,Year); // < DD.MM.YYYY , nicht DD:MM:YYYY
TextdrawSetString(InfoBoxDate,String); -
Du stellst dich dann aber ganz schön faul an. Man findet tonnenweise Erklärungen,wie das funktioniert. Ich selber bin kein Experte auf dem Gebiet, will dir daher auch keine falschen Informationen geben. Dennoch findest du hier eine Erklärung der Funktionen:
ZitatThese statements provide control over use of transactions:
START TRANSACTION or BEGIN start a new transaction.
COMMIT commits the current transaction, making its changes permanent.
ROLLBACK rolls back the current transaction, canceling its changes.
SET autocommit disables or enables the default autocommit mode for the current session.
Warum man es machen sollte,steht hier:ZitatBy default, MySQL runs with autocommit mode enabled. This means that as soon as you execute a statement that updates (modifies) a table, MySQL stores the update on disk to make it permanent. The change cannot be rolled back.
bzw:
Standardmäßig läuft MySQL im Autocommit-Modus. Das bedeutet, dass, sobald eine Anweisung ausgeführt wird, die eine Tabelle aktualisiert (also ändert), MySQL diese Änderung auf Festplatte speichert.
Ich wüsste wirklich nicht,wieso ich dir die Erklärungen nochmal schreiben sollte obwohl es sie schon super gibt .
Du brauchst das auch nicht unbedingt.Wenn es dir zu kompliziert ist,dann lass es lieber.
Der Trick mit dem Dummy Query müsstest du mit oder ohne Transaction sowieso nutzen. -
Dann versuch es mal mit dem Deutschen Dokumentation:
http://dev.mysql.com/doc/refman/5.1/de/commit.htmlZitat//Edit: Du menist ich sende die Now() Anfrage, nach allen Accountspeicherungen,
und sobald diese ausgeführt ist, startet der Server?
So ähnlich.Du kannst von mir aus auch "SELECT 1" machen, macht keinen Unterschied.
Wenn du weisst dass diese Dummy Anfrage durchgeführt wurde ( SELECT NOW() ) ,dann sind auch alle Anfragen die davor waren durchgeführt worden ( Accountspeicherung ) .
Es geht nicht um das Ergebnis der Abfrage. Es geht lediglich darum,ob die Abfrage durchgeführt wurde.Was du dann mit der Erkenntnis machst,dass alle Querys durchgeführt wurden, ist dann dir überlassen.
ZitatWo wir schonmal dabei sind: Was ist schneller? Gettime bzw. gettdate oder das ganze
über MySQL: Now(), UNIX_TIMESTAMP() etc.
Da kann ich dir keine gute Antwort drauf geben.//Edit:
Wichtig:
Das klappt aber auch nur,wenn alle Querys in der Reihenfolge abgearbeitet werden in der sie an den Server gesendet wurden. -
Du kannst dir auch mal "Transactions" ansehen:
http://dev.mysql.com/doc/refman/5.5/en/commit.htmlZitatBy default, MySQL runs with autocommit mode enabled. This means that as soon as you execute a statement that updates (modifies) a table, MySQL stores the update on disk to make it permanent. The change cannot be rolled back.
Das brauchst du ja nicht unbedingt.ZitatBei einer Endround sollen zuerst alle Accounts gespeichert werden.
Erst dann soll die Endround erfolgen (Rcon: "gmx").
Dadurch, dass mehrere Threads eröffnet werden, kann nicht geprüft werden,
wann denn alle Accounts gespeichert werden.
Für den Fall die Querys werden in der Reihenfolge abgehandelt, in der sie an die Datenbank gesendet wurden, kannst du auch einfach eine Dummy Anfrage machen.
Zum Beispiel:
Wenn diese durchgeführt wurde ( extra Thread natürlich ) , dann machst du den gmx per rcon. Sollte doch dein letztes Problem lösen. -
Zitat
Was zur Hölle ist das ? -
Mh, ich tendiere mal auf zu viel "copy und paste".
Zitatif(Spieler[i][Wanteds] >=1)
Was ist denn hier mit.Ließt du dort etwa auch die Wanteds aus der Spielerdatei aus oder direkt aus der Variable ?
Meinst du nicht,es würde
format(string,sizeof(string),"%s - %d Wanteds", SpielerName(i), /* HIER */ );
auch klappen ? -
Warum willst du denn überhaupt die Wanteds aus der Spielerdatei laden ? Du kannst doch auch einfach "Spieler[i][Wanteds]" nutzen.
format(string,sizeof(string),"%s - %d Wanteds", SpielerName(i), /* dini_Int(Playerdatei,"Wanteds") -- Hier macht doch der direkte Zugriff auf Wanteds mehr Sinn */ );
Übrigens ist der Code mega schlecht eingerückt in deinem Beitrag.
-
Als erstes mal der Threadtitel.
Meinst du der ist Sinnvoll für dein Problem gewählt ?ZitatCOMMAND:vagosrc(playerid,params[])
{
if(!IsPlayerAnLeader(playerid,9))return SCM(playerid,FARBE_WARNING,"Du bist kein Leader");
for(new i=0; i<sizeof(vagoscar); i++)
{
if(!IsValidVehicle(i))continue;
if(!IsVehicleUnused(i))continue;
SetVehicleToRespawn(i);
SCM(playerid,FARBE_GRAU,"Du hast erfolgreich alle Vagos-Fraktionsautos respawnt!");
}
return 1;
}
Bist du dir sicher,dass du immer i als VEHICLEID nutzen solltest oder vllt nicht doch lieber vagoscar[i] ? Du schaust am Besten mal nach,wie man durch die einzelnen Einträge eines Arrays eine Schleife laufen lässt.
Auch solltest du die ClientMessage lieber außerhalb der Schleife senden. -
Mich würde mal ein Bild von dem Ped in 3DMax o.Ä. interessieren.Ich fand nämlich früher einen Ped zu riggen ( Sorry,ich weiss das Deutsche Wort dafür nicht mehr ... ) extrem schwierig.
Könntest du auch mal CJ als Referenz neben die Modelle stellen ? Irgendwie wirken die ein wenig klein in meinen Augen. -
Natürlich ist das möglich.
Ich erspar dir mal die Erklärung, denn dich interessiert bestimmt nur die "Funktion" dafür.
stock GetColorCodeFromHex(hexColor)
{
new
string[9]
;
format(string, sizeof(string), "{%06x}", hexColor >>> 8);
return string;
}
Die Funktion ist nicht von mir. Ich glaube sie ist von Slice aus dem off. sa-mp Forum.Du könntest dann sowas machen:
format(string,sizeof(string),"Achtung: %sDieser Textteil ist in COLOR_RED",GetColorCodeFromHex(COLOR_RED));
Du musst natürlich COLOR_RED haben.Auch muss es im RGBA Format sein , bsp 0xFF0000FF ( Das letzte FF fällt sowieso innerhalb der Funktion Weg,deswegen >>> 8 ). -
Also das ist ja mal ein Scherz -.-
Ist es nicht.
http://pastebin.com/dbDnUMY1Ungefähr bei einer ID von 100 und niedriger ist deine Methode schneller als MAX_PLAYERS ohne Veränderung zu nutzen.
Selbst eine Anpassung von MAX_PLAYERS macht mehr Sinn als die Nutzung deiner "Verbesserung",leider.
Spoiler anzeigen Man sollte sowieso MAX_PLAYERS an seine Anzahl an Slots anpassen. Ist sonst nur Verschwendung. -
Zitat
gibt diese Funktion die höchste spielerid auf dem Server wieder, dies macht die Schleifen erheblich schneller und
ressourcenschonender
Was ist "erheblich" schneller ? 1ms auf 100.000.000 Durchläufen ? Die Wortwahl ist mMn total irreführend.
Das Gleiche gilt für "Ressourcenschonender". Ich bin auch der Meinung,dass du es nur geschrieben hast damit man hier eine Art
"Wow" Effekt entsteht.Unerfahrene Scripter werden durch so eine Wortwahl fehlgelenkt. Denn bei den Schleifen anzusetzen um sein Script
zu optimieren ist nicht der richtige Punkt. Auch gibt es Fälle,bei denen deine Methode sogar langsamer ist als die Nutzung von MAX_PLAYERS.Es ist auch keine Neuheit und sowas gibt es bereits um Welten besser von anderen Autoren.
Übrigens:
for(new i , j = GetID() ; i < j; i++)
So wäre es theoretisch noch schneller.ZitatWie du sagst, man bräuchte eine weitere Schleife um jetzt auf die genaue Anzahl der Spieler wieder zu stoßen, ich finde
allerdings, dass ist irrelevant da ein sehr naher Wert denke ich mal völlig ausreicht
Ja genau...sehr naher Wert völlig ausreicht .
Denn mit extra Funktion eine Schleife bis 498 durchzuführen ist ja auch wirklich besser als eine Schleife die immer bis 499 geht .. .Punktewertung lasse ich aus,würde nämlich nicht positiv ausfallen.
-
Die Diskussion hab ich hier ja gar nicht mitbekommen ... .
Warum ist die AMX größe eigentlich mit Stock größer ?
Aber gutes Tutorial
MFG Arendium
Nein ?
Für mich ist #1 " *.AMX Größe ( 582 Bytes (582 Bytes) ) " kleiner als #2 " *.AMX Größe ( 588 Bytes (588 Bytes) ) ".
Im Beispiel #3 und #4 sind die Größen identisch, denn dort wird in Beiden Fällen die Funktion nicht eingebunden in das Endprodukt. -
"so hab ichs probiert, klappt aber nicht"
Solche Aussagen sind immer sehr dürftig. Damit kann keiner wirklich was Anfagen.
Was klappt denn nicht ? Hast du mal das SQL Kommando testweise manuell ausprobiert ?Hättest du letzteres getan,hättest du gesehen,dass dein SQL Kommando nicht richtig aufgebaut wurde.
Zitatformat(query, sizeof(query), "INSERT INTO `ADMCMD-Log` (`Admin`,`Befehl`,`Uhrzeit``Bemerkung1`,`Bemerkung2`,`Bemerkung3`) VALUES ('%s','%s','%d','%s','%s','%s')", name, command, datetime, bem1, bem2, bem3);
Bist du dir wirklich sicher,dass du %d als Platzhalter für "%d-%d-%d %d:%d:%d" ( datetime ) nehmen kannst ? Denk nochmal drüber nach.
Spoiler anzeigen Wahrscheinlich nicht,sonst hätte ich es nicht geschrieben.
Abgesehen davon, du hättest auch einfach NOW() nehmen können.
Klappt es dann immernoch nicht,dann lässt du dir am besten query mal per print() ausgeben und testest es manuell per phpMyAdmin o.Ä. .