Naja, bei dem langen Code ist das relativ schwer. Ich würde anfangen, zu prüfen, ob die Schleife überhaupt komplett durchläuft, oder ob sie sich irgendwo aufhängt, das heißt du printest am Anfang der Schleife für jeden Spieler-Index "beginn für ID %d" und am Ende "Ende von ID %d". Wenn du dann ingame feststellst, dass jemand den PayDay nicht korrekt bekommen hat, kannst du im Log nachschauen, ob für die ID das Ende erreicht wurde. Wenn nicht, dann sprengst du wohl irgendwo ein Array, dann musst du weiter suchen, Variablen-Werte ausgeben lassen, zwischen Beginn und Ende....und so weiter. Du musst du praktisch an den Fehler hinarbeiten.
Das kann durchaus eine Weile dauern, aber das ist die beste Möglichkeit was zu finden.
Beiträge von Jeffry
-
-
Da hilft eigentlich nur debuggen: [ SCRIPTING ] Debugnachrichten
Dazu kannst du auch noch das crashdetect Plugin laufen lassen, vielleicht kann dir das ja noch helfen.Aber in so einem langen Code einen Fehler zu finden, der nicht immer auftritt ist ohne debuggen fast unmöglich.
-
Zielen: http://wiki.sa-mp.com/wiki/GetPlayerTargetPlayer
Z: http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange mit KEY_YES.PS: Mich schreibt man mit einem e.
-
Dort wo das Haus verkauft wird:
Haus[h_id][haus_lock] = 1;
Danach dann den format Teil und dann das Label aktualisieren. -
Ja,
Du kannst es auch so schreiben:
LinkVehicleToInterior(CreateVehicle(...), 1);
Dann sparst du dir die Variable.Oder über ein Array und einen Loop:
new alleAutos[10], i;
alleAutos[i] = CreateVehicle(...); i++;
alleAutos[i] = CreateVehicle(...); i++;
alleAutos[i] = CreateVehicle(...); i++;
//...
for(new v=0; v<sizeof(alleAutos); v++) LinkVehicleToInterior(alleAutos[v], 1);Aber ja, jedes Fahrzeug, welches du dort haben willst, muss in Interior 1 verlinkt werden.
-
Wie gesagt, normalerweise löschen sich Ordner nicht von selbst. Mit FileZilla sollte es da ebenfalls keine Probleme geben, das nutze ich schon seit Jahren und kann dir versichern, dass das einwandfrei funktioniert, zumindest in dem Bereich.
Wird denn der Ordner erst gelöscht, wenn du den Server startest, oder ist der sofort wieder weg, nachdem du ihn erstellt hast, aber den Server noch gar nicht gestartet hast?Wie bereits erwähnt, kannst du auch mal beim Support deines Hosters nachfragen, ob das Problem bekannt ist, vielleicht fehlen dir ja auch nur ein paar Rechte.
-
@Slider: Wenn das Plugin nicht richtig geladen wird, dann steht da nur "Failed.", das steht dann auch genau so im Server Log.
Chax: Hast du dein Glück schon mal mit dem crashdetect Plugin versucht, was wird da geprintet? Und wenn das nichts hilft, mit dem nativechecker Plugin?
Ich hoffe, du hast das Plugin auch im plugins Ordner. -
new query[256];
if(listitem == 0) format(query,sizeof(query),"UPDATE user SET geschlecht='maennlich' WHERE name = '%s'",SpielerName(playerid));
else format(query,sizeof(query),"UPDATE user SET geschlecht='weiblich' WHERE name = '%s'",SpielerName(playerid));
mysql_function_query(dbhandle,query,false,"",""); -
Also, als erstes mal:
if(sDatei[playerid][pLeader] == 3 || 4 || 5 || 6 || 7 || 8 || 9 || 14)
Das geht so nicht.Mach das so:
if((sDatei[playerid][pLeader] >= 3 && sDatei[playerid][pLeader] <= 9) || sDatei[playerid][pLeader] == 14)Zu dem Problem, dass der Befehl nicht existiert, da tippe ich darauf, dass du ein Array sprengst. (Spieler nicht online? / sscanf spinnt mal wieder?)
Um das herauszufinden, debugge bitte deinen Code und poste dir Ergebnisse, samt debuggtem Code: [ SCRIPTING ] Debugnachrichten -
new vehicleid = CreateVehicle(...);
LinkVehicleToInterior(vehicleid, 1);Dann siehst du die Fahrzeuge dort.
-
Da mehr Speicher reserviert wird, verbraucht es hinsichtlich der Größe des Skripts mehr Arbeitsspeicher.
Aber ich kann dich beruhigen, das merkst du bei heutigen Maschinen nicht mehr, denn ob dein Server 100 MB RAM oder 500 MB RAM verbraucht ist relativ egal, da die meisten Server 8, 16, oder mehr GB haben. Wenn du bei einem Host einen Gameserver gemietet hast, dann vielleicht eher, aber auch da sollte das kein Problem sein, da ein Verbrauch von 300-500 MB eigentlich völlig ok ist, mehr zu schaffen ist schon relativ schwer. -
strcat ist von dem Ressourcenverbrauch her besser als format.
ABER:
Da du hier nur 3 Zusammenfügungen hast, macht das für dich keinen Unterschied. Den merkst du erst, wenn du 1000 oder 10000 oder noch mehr Zusammenfügungen auf einmal machst. Bei deinen 3'en macht das ein paar Mikrosekunden aus, das ist praktisch nicht messbar. Es ist also relativ egal welches der beiden du hier verwendest. -
Naja da er es immer wieder Formatiert wird letztes ende nur diese Zeile ausgeführt (In mysql_query)
Nein, schau dir doch mal seinen Code an, der ist so aufgebaut:
new string[128];
format(string, sizeof(string), "Hallo");
format(string, sizeof(string), "%s Welt!", string);
print(string);
//print gibt aus: "Hallo Welt!"Du kannst zwar auch strcat verwenden, aber das würde hier nichts ändern.
-
Weil so überschreibt er den Query nur!
Nein, er fügt es doch vorne an.Schalte den mysql_debug bzw mysql_log an, und poste dann was im Log geprintet wird, wenn du diese Funktion ausführst. Es könnte sein, dass das Query zu kurz ist, oder dass eine Spalte die du angegeben hast nicht existiert.
-
Nexos:
Du brauchst keine Schleife.
Deine Schleife würde nur für alle Cops die bereits im Server sind das MapIcon nochmal setzen.public OnPlayerConnect(playerid)
{
//Wichtig: Nach dem Login!!
if(IsPlayerCop(playerid))
{
SetPlayerMapIcon(playerid, 30, 0.0, 0.0, 0.0, 30, 0, MAPICON_LOCAL);
}
return 1;
}public OnPlayerDisconnect(playerid, reason)
{
if(IsPlayerCop(playerid))
{
RemovePlayerMapIcon(playerid, 30);
}
return 1;
}stock IsPlayerCop(spielerid)
{
//Abfrage ob Spieler ein Cop ist
return 1;
} -
Passiert das nachdem du einen Server Neustart via GMX gemacht hast?
Grundsätzlich liegt es daran, dass sich die IDs der Textdraws überschneiden, das kann entweder daran liegen, dass das Limit erreicht ist, oder daran, dass bestimmte Textdraws nicht richtig (zum Beispiel doppelt) gelöscht werden, oder die Variable beim Löschen nicht zurückgesetzt wird, und das Textdraw dann nochmals zu einem späteren Zeitpunkt gelöscht wird, von einem anderen FS/GM aus.Du solltest alles was du im Server hast, bezüglich Textdraws, genau überprüfen und entsprechend absichern. Gegebenenfalls auch Debugs einfügen.
Die IDs von Textdraws siehst du so:printf("ID von meinTextdraw: %d", _:meinTextdraw);
-
printf("checking frak = %d", frakid);
zu:
printf("checking frak = %d", frakid);
printf("Frak Bank: %0.2f / %0.2f / %0.2f" ,FrakInfo[frakid][BankX],FrakInfo[frakid][BankY],FrakInfo[frakid][BankZ]);
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
printf("Pos: %0.2f / %0.2f / %0.2f" ,x,y,z);Dann siehst du die Positionen und kannst es selbst prüfen.
-
if(newbie[playerid]) return DestroyVehicle(newbie[playerid]),newbie[playerid]=0;
zu:
if(newbie[playerid])
{
DestroyVehicle(newbie[playerid]);
newbie[playerid]=0;
return 1;
}oder:
if(newbie[playerid]) return DestroyVehicle(newbie[playerid]),newbie[playerid]=0,1;Wie es dir lieber ist. Ich bevorzuge die erste Variante, weil man nicht alles in eine Zeile schreiben sollte.
-
Bist du auch an der richtigen Position und in der richtigen Fraktion?
Debug dir den Code mal, was wird geprintet?if(newkeys & KEY_SECONDARY_ATTACK)
{
print("Key erkannt");
for(new frakid=1;frakid<MAX_FRAKTION;frakid++)
{
printf("checking frak = %d", frakid);
if(IsPlayerInRangeOfPoint(playerid,2.0,FrakInfo[frakid][BankX],FrakInfo[frakid][BankY],FrakInfo[frakid][BankZ]))
{
printf("In range @ %d -> case %d", frakid, PlayerDaten[playerid][pFraktion]);
switch(PlayerDaten[playerid][pFraktion])
{
case 1:
{
ShowPlayerDialog(playerid, DIALOG_LSPDBANK,DIALOG_STYLE_LIST,"LSPD Kasse","Geld Einzahlen\nGeld Abheben\nKontostand","Okay","Abbrechen");
}
case 2:
{}
case 3:
{
ShowPlayerDialog(playerid, DIALOG_GSFBANK,DIALOG_STYLE_LIST,"Fraktionsbank der Grove Street","Geld Einzahlen\nGeld Abheben\nMats Importieren\nMats Exportieren\nKokain Importieren\nKokain Exportieren\nHeroin Importieren\nHeroin Exportieren\nHaschisch Imporiteren\nHaschisch Exportieren\nKontostand","Okay","Abbrechen");
}
case 4:
{
ShowPlayerDialog(playerid, DIALOG_YAKUZABANK,DIALOG_STYLE_LIST,"Yakuza Bank","Geld Einzahlen\nGeld Abheben\nMats Importieren\nMats Exportieren\nKokain Importieren\nKokain Exportieren\nLSD Importieren\nLSD Exportieren\nHaschisch Imporiteren\nHaschisch Exportieren\nKontostand","Okay","Abbrechen");
}
}
}
}
} -
Trotzdem bringt dir die Addressierung von 0 auf an nichts wenn du den Index über die FahrzeugID festlegst, dann ist der Index 0 auch vollständig 0.
Natürlich, aber das macht er ja gar nicht.
Ist ja auch egal, passt ja jetzt. Zurück zum eigentlichen Problem:Chax: Wie hast du DIALOG_AUTOKAUFEN definiert? Falls es größer als 32767 ist, mach es kleiner.
Und ebenfalls:
format(string,sizeof(string),"Name: %s\nPreis: %i$\nSteuerklasse: %i\nPremium: %s",CarName[GetVehicleModel(GetPlayerVehicleID(playerid))-400],AutoHausAutoInfo[i][ahaPreis],AutoHausAutoInfo[i][ahaKlasse],"Nein");
zu:
format(string,sizeof(string),"Name: %s\nPreis: %i$\nSteuerklasse: %i\nPremium: %s",CarName[GetVehicleModel(vehicleid)-400],AutoHausAutoInfo[i][ahaPreis],AutoHausAutoInfo[i][ahaKlasse],"Nein");