LoG script hat 385k zeiln
ca. 75k inkl. Objekte
LoG script hat 385k zeiln
ca. 75k inkl. Objekte
Bisher habe ich noch nichts von so einer Funktion gehört.
Du kannst aber das ganze mit EditObject Ingame auf die höhe bearbeiten:
In deinem Command CreateObject einer Variable zuweisen:
new object;
object = CreateObject(1337, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
Dann EditObject aktivieren:
EditObject(playerid, object);
Und jetzt einfach die Z höhe anpassen
Danach mit
CancelEdit(playerid);
das ganze abbrechen
format(query, 500, "UPDATE samp_players SET Passwort = '%d', `Level`= '%d' WHERE Name = '%s'",
PlayerInfo[playerid][pKey],
PlayerInfo[playerid][pLevel],
PlayerName[playerid]
//etc..);
mysql_query(query);
Ich habe dir doch schon ein Beispiel genannt du musst das ganze einfach mit deinen Variablen noch ergänzen, wir können nicht alles für dich machen versuche es einfach mal und wenn du nicht weiterkommst bzw. es nicht funktioniert dann melde dich nochmal hier und ich schaue wie ich dir helfen kann.
Was soll die [0] am ende bewirken bzw. für was brauchst du diese? (VehicleTank[GetVehicleModel(i)-400][0])
Und setz mal das ganze an das komplette Ende von OnGameModeInit oder machs unter OnVehicleSpawn und Respawne alle Autos bei OnGameModeInit
Da es schon Spät ist und nicht wirklich Lust habe die einzelenen Sachen zu Suchen mache ich dir ein Beispiel ohne die Funktionen nochmal nach zu Schauen:
if(newkey == 262144)
{
if(IfIsPlayerInAnyVehicle)
{
new tatu;
tatu = CreateObject(19419, 0.0, 0.0, 0.0);
AttachObjectToVehicle(tatu, GetPlayerVehicleID(playerid), 0.0, 0.0, 1.0, 0.0, 0.0, 0.0);
}
}
Aber um ehrlich zu sein wenn du dich etwas angestrengt hättest und die die geposteten Seiten von Martino richtig durchgelesen hättest, hättest du das geschafft egal ob Anfänger oder nicht.
du musst auch deine URL vom Server nehmen und nicht von samp4you..
Weißt du vielleicht wann es genau laggt (z.b. beim Speichern, Befehl ausführen etc.)?
Und es könnte zu 70% an deiner Speicher Methode liegen da du dann sehr viele querys ausführt könntest du auch noch vielleicht Sagen wo du überall SavePlayer(playerid) ausführst?
Und du sollst es so bald wie möglich das Speichern umschreiben in:
format(query, 500, "UPDATE samp_players SET Passwort = '%d', `Level`= '%d' WHERE Name = '%s'",
PlayerInfo[playerid][pKey],
PlayerInfo[playerid][pLevel],
PlayerName[playerid]
//etc..);
mysql_query(query);
So führst du für einen Spieler dann nur einen query aus und im End Effekt müsste es um die hälfte weniger laggen
Du musst es ohne "," Komma benutzen.
Also es kann durchaus daran liegen da du mit MySql Speicherst und wenn du die Funktion mysql_SetString etc. (aus maddins Tutorial) benutzt zum Speichern kann durchaus dies die Laggs verursachen da du nur für eine Variable einen Query öffnest und bei ca. 40-50 Variablen die du Speicherst * ca.10 Spieler kann es wirklich zu sehr massiven Laggs führen, aber nur wenn du auch diese Funktion benutzt.
Falls du es mit ocmd willst:
ocmd:tocor(playerid,params[])
{
new text[128], string2[128], Float:X, Float:Y, Float:Z;
if//Deine Adminabfrage
{
if(sscanf(params,"fff",X, Y, Z))return SendClientMessage(playerid,FARBE,"Benutze: /tocor [X] [Y] [Z]");
format(text,sizeof(text),"Du hast dich zu Folgenden Koordinaten Teleportiert: X: %f Y: %f Z:%f", X, Y ,Z);
SendClientMessage(playerid, GRAU, text);
SetPlayerPos(playerid, X, Y, Z);
}
return 1;
}
OKay, also ich sehe nicht wirklich etwas, jetzt würde ich dich bitten, such dein komplettes Script ab nach SetTimer- und Ex, wo überall nach der Timer länge (nach den ms) true oder 1 steht (alle Timer die sich wiederholen) und schau dir dann mal die publics von diesen an, vielleicht ist dort ein riesiger Code und wie Speicherst du die Spieler dini oder mysql?
Also ehrlich gesagt weiß ich nicht wirklich was du für ein Problem hast, aber ist das nicht dieser Cleo mit dem man sich ans LSPD etc portet und dann alle Autos auf eine Stelle stellt damit man wenn man dort in die nähe kommt und es viele Autos sind heftigst laggt?
Zwei Globale Variablen erstellen
new LastDriver[MAX_VEHICLES];
new CarBestizer[MAX_VEHICLES];
Dann bei OnPlayerStateChange:
new LetzterFahrer[24];
format(LetzterFahrer, sizeof(LetzterFahrer), "%s", SpielerName(playerid));
LastDriver[GetPlayerVehicleID(playerid)] = LetzterFahrer;
Dann um den Autos einer Fraktion zuzuweisen müsstest du die Autos beim Starten vom Server entweder einmal Respawnen und dann Abfragen wenn ein Auto beim Spawnen von der Fraktion oder der es ist in die Variable CarBesitzer[vehicleid]; eintragen lassen oder bei OnGameModeinit mithilfe von einer Schleife (für jeder Fraktion eine) dann zuweisen welcher Fraktion das Auto gehört z.b.:
for(new i = 0; i < sizeof(Deine Definierung der Autos z.b. (LSPDCars)); i++)
{
new Besitzer[24];
format(Besitzer, sizeof(Besitzer), "LSPD");
CarBesitzer[GetPlayerVehicleID(playerid)] = Besitzer;
}
(Dies ist ein Beispiel für OnGameModeInit)
Und um dann das ganze anzeigen zu lassen:
if(strcmp(cmdtext, "/look", true) == 0)
{
new String[128];
format(String,sizeof(String),"Fahrzeugbesitzer: %s\nLetzter Fahrer: %s", CarBesitzer[GetPlayerVehicleID(playerid)], LastDriver[GetPlayerVehicleID(playerid)] );
SendClientMessage(playerid, DEINE_FARBE, String);
return 1;
}
(Diesen Befehl kann man nur in einem Auto ausführen so wie er jetzt ist)
Bei deinem Spieler Speichern Funktion eine Abfrage machen ob er in der Prüfung ist und dann auf 0 Setzen:
if(//Deine Variable == 3)
{
//Deine Variable auf 0 Setzen
}
Nunja, manchmal passiert so etwas aus Unerklärlichen Gründen ich hatte damals wie ich angefangen habe zu Scripten auf meinem pc das Script immer getestet und wie ich es dann mal auf einem Linux Server laufen lassen wollte hat es überhaupt nicht mehr funktioniert, obwohl alles auf'm Windows pc Tip Top funktioniert hat. Die beste möglichkeit so etwas vorzubeugen ist einfach auf dem Zukünftigen Betriebssystem wo man das Script zukünftig laufen lassen will alles zu Testen.
Hast du zu viele Objekte an einem Ort, ich weiß nicht mehr genau aber es können maximal 500 (?) Objekte in der Reichweite vom Spieler Geladen werden, dies könnte dann im End Effekt dein Problem sein.
Um so etwas zu vermeiden solltest du nicht alles auf einmal machen sondern wenn du eine Funktion eingebaut hast erstmal Kompilieren und schauen ob Warnings oder Errors kommen wenn nicht weiter machen, diese Methode dauert länger ist aber dafür besser um Fehler schneller zu Finden.
Und schau mal wie bei dir Ist Spieler in Fraktion definiert ist (enum oder PVar), es könnte aber auch ein Klammerfehler sein..
Goldkiller hat schon recht den wenn einem Spieler die Nachricht gesendet wird hört die Schleife auf und das ist doch dein Problem das manche Spieler die Nachricht nicht bekommen oder?
Ich glaube er meint die Positionen, da er keine Lust hat 1.5k Positionen zu Speichern oder?
Wenn ja, du brauchst mindestens die Positionen anderest kannst du es vergessen.
Also um auszugeben wer die Arena betritt musst du Strings (und Format) benutzen:
Falls du den Stock SpielerName(playerid) hast:
new EingangsString[65];
format(EingangsString, sizeof(EingangsString), "%s hat die Paintball Arena betreten.", SpielerName(playerid));
SendClientMessageToAll(DEINE FARBE, EingangsString);
Falls du den Stock nicht hast:
new PaintballEnterName[MAX_PLAYER_NAME+1],EingangsString[100];
GetPlayerName(playerid,PaintballEnterName, sizeof(PaintballEnterName));
format(EingangsString, sizeof(EingangsString), "%s hat die Paintball Arena betreten.", );
SendClientMessageToAll(DEINE FARBE, EingangsString);
Zur Erklärung mit dem %s etc.
%s bedeutet du willst einen String ausgeben also z.b. in diesem Fall einen Namen
%i bedeutet das du einen Integer ausgeben willst also z.b. 1
%d bedeutet das du eine Dezimalzahl ausgeben willst
%f bedeutet das du einen Float ausgeben willst z.b. Koordinaten 5.9423
Das [100] hinter dem EingangsString bedeutet wie lang der String ist, niemals zu lange String erstellen, in deinem Fall wäre der String 24 Zeichen (Maximale länge vom Spielernamen) + der Text "hat die Paintball Arena betreten" (34 Zeichen) also wären es insgesammt 58 Zeichen bei solchen Zahlen aber am besten immer aufrunden und ca. 5 Zeichen extra dazu machen da man sich doch vielleicht manchmal verzählt oder sowas in der Art.
Ich will jetzt hier nicht lange herum Reden, lese dir einfach noch das: http://wiki.sa-mp.com/wiki/Format durch mit etwas Englisch Kenntnissen versteht du den Rest auch noch.