Mache einen neuen Thread auf, und poste dort den Server Log, sowie den MySQL Log.
Beiträge von Jeffry
-
-
C
Alles anzeigenCMD:test123(playerid,params[]) { TogglePlayerControllable(playerid,0 ); SetPlayerSkin(playerid, 300); SetTimerEx("UnfreezePlayer", 5000, false, "i", playerid); return 1; } forward UnfreezePlayer(playerid); public UnfreezePlayer(playerid) { TogglePlayerControllable(playerid, 1); return 1; } -
Habe den Code 1:1 kopiert, bei mir klappt es.
Setzt du es vielleicht irgendwo wieder zurück, dass man wieder einsteigen kann? An dem Code liegt es auf jeden Fall nicht, der ist korrekt und funktioniert.
-
Steht der Code vor oder nach dem Erstellen der Fahrzeuge? Er muss nämlich danach stehen.
Versuche es alternativ mal, indem du die Fahrzeuge mit CreateVehicle erstellst. -
Wenn die Daten korrekt sind, und die Datenbank existiert, dann wende dich an den Support deines Hosts. Dann fehlen dem User gegebenenfalls Berechtigungen.
-
Der MySQL Log wird vom Plugin erstellt, den siehst du im gleichen Verzeichnis wie den Server Log.
Das mysql_static.so solltest du nicht entfernen. Füge das wieder ein.
-
Nimm das mysql.so aus der server.cfg und poste dann was im MySQL Log steht, wenn der Code ausgeführt wird, der nicht klappt.
-
Das liegt daran, dass du, wenn der Spieler ein Admin ist, die Aktion doppelt ausführst. Mache es so:
C
Alles anzeigenocmd:changername(playerid,params[]) { if(PI[playerid][pLeader] >= 1 || PI[playerid][pAdmin] >= 3) { new str[128]; if(PI[playerid][pAdmin] >= 3) { new rang,name[25],fraktion; if(sscanf(params,"dds[25]",fraktion,rang,name))return SCM(playerid,frot,"[FEHLER]: /changername [fraktion] [Rang] [Name]"); if(rang > 5 || rang < 1)return SCM(playerid,frot,"[FEHLER]: Der Rang muss zwischen 1 und 5 liegen!"); if(strlen(name) > 20)return SCM(playerid,frot,"[FEHLER]: Der Name darf maximal 20 Zeichen lang sein!"); if(rang == 1)format(FI[fraktion][rname1],25,name); else if(rang == 2)format(FI[fraktion][rname2],25,name); else if(rang == 3)format(FI[fraktion][rname3],25,name); else if(rang == 4)format(FI[fraktion][rname4],25,name); else if(rang == 5)format(FI[fraktion][rname5],25,name); format(str,sizeof(str),"Der Admin %s hat den Namen des Ranges %d auf %s geändert!",GPlayerName(playerid),rang,name); SendFrakMessage(fraktion,str); } else { new rang,name[25],frakid = PI[playerid][pLeader]; if(sscanf(params,"ds[25]",rang,name))return SCM(playerid,frot,"[FEHLER]: /changername [Rang] [Name]"); if(rang > 5 || rang < 1)return SCM(playerid,frot,"[FEHLER]: Der Rang muss zwischen 1 und 5 liegen!"); if(strlen(name) > 20)return SCM(playerid,frot,"[FEHLER]: Der Name darf maximal 20 Zeichen lang sein!"); if(rang == 1)format(FI[frakid][rname1],25,name); else if(rang == 2)format(FI[frakid][rname2],25,name); else if(rang == 3)format(FI[frakid][rname3],25,name); else if(rang == 4)format(FI[frakid][rname4],25,name); else if(rang == 5)format(FI[frakid][rname5],25,name); format(str,sizeof(str),"Der Leader %s hat den Namen des Ranges %d auf %s geändert!",GPlayerName(playerid),rang,name); SendFrakMessage(frakid,str); } return 1; } SCM(playerid,frot,"[FEHLER]: Du hast nicht den nötigen Fraktions/Admin Rang"); return 1; } -
Hier ist der JOIN an der falschen Stelle, da musst du es über ein normales SELECT machen.
C
Alles anzeigenpublic OnHousesLoad() { new num_rows = cache_get_row_count(), query[128]; if(!num_rows)return 1; for(new i = 0; i < num_rows; i++) { new id = getFreeHausID(); new string[24]; hInfo[id][h_x] = cache_get_field_content_float(i, "h_x", dbhandle); hInfo[id][h_y] = cache_get_field_content_float(i, "h_y", dbhandle); hInfo[id][h_z] = cache_get_field_content_float(i, "h_z", dbhandle); if(hInfo[id][h_x] == 0 && hInfo[id][h_y] == 0 && hInfo[id][h_z] == 0)continue; hInfo[id][ih_x] = cache_get_field_content_float(i, "ih_x", dbhandle); hInfo[id][ih_y] = cache_get_field_content_float(i, "ih_y", dbhandle); hInfo[id][ih_z] = cache_get_field_content_float(i, "ih_z", dbhandle); hInfo[id][h_interior] = cache_get_field_content_int(i, "h_interior", dbhandle); hInfo[id][h_besitzerID] = cache_get_field_content_int(i, "h_besitzerID", dbhandle); format(query, sizeof(query), "SELECT username FROM user WHERE id='%d'", hInfo[id][h_besitzerID]); mysql_pquery(dbhandle, query, "LoadHousesBesitzer", "d", id); } return 1; }Dann mit:
Cforward LoadHousesBesitzer(id); public LoadHousesBesitzer(id) { new num_rows = cache_get_row_count(); if(!num_rows)return 1; cache_get_field_content(0, "username", hInfo[id][h_besitzer], dbhandle, MAX_PLAYER_NAME); return 1; }
Beachte, dass du h_besitzerID im enum und in der Tabelle für die Häuser hinzufügen musst, außerdem muss da drin die ID gespeichert werden, die der User in der user-Tabelle hat (um ihn zu finden). -
Deine Werteübergabe ist falsch, du gibst Arrays in eine Normale Variable, somit wird nur ein Zeichen, welches keinen Sinn macht, gespeichert.
Achte auch darauf, dass OnGameModeExit nicht aufgerufen wird, wenn du die Konsole nur schließt ( X ).Mache es so:
C
Alles anzeigenstock SaveFraks() { new query[512]; for(new i=0;i<sizeof(FI);i++) { mysql_format(db_handle,query,sizeof(query),"UPDATE fraktionen SET name = '%e', kasse = %d, gehalt1 = %d, gehalt2 = %d, gehalt3 = %d, gehalt4 = %d, gehalt5 = %d, rname1 = '%e', rname2 = '%e', rname3 = '%e', rname4 = '%e', rname5 = '%e', frakmsg = '%e' WHERE id = %d", FI[i][f_name],FI[i][f_kasse],FI[i][gehalt1],FI[i][gehalt2],FI[i][gehalt3],FI[i][gehalt4],FI[i][gehalt5],FI[i][rname1],FI[i][rname2],FI[i][rname3],FI[i][rname4],FI[i][rname5],FI[i][frakmsg],FI[i][f_id]); mysql_pquery(db_handle,query); } return 1; }
Sollte es weiterhin nicht klappen, lasse dir mit einem print das Query ausgeben und schaue in den MySQL Log, ob sich dort Fehler befinden.
Poste die beiden Logs gegebenenfalls, aber bitte in einem neuen Thread, da dieser Thread für kleine Scriptingfragen ist, und MySQL Debugging gehört da bei Weitem nicht mehr dazu. -
Dann sollte es eigentlich zurück gesetzt werden, außer du setzt es irgendwo wieder hoch.
Prüfe da mal alle Stellen, ob du es irgendwo auf true setzt, außer in dem Befehl.
Poste gegebenenfalls alle Codes, in denen das Array vorkommt. -
Setze bei beiden Callbacks mal einen print hin und schaue ob der print im Server Log steht, wenn du den Server verlässt/betrittst.
Wenn nicht, dann wird das Callback gar nicht aufgerufen. -
Hast du mal versucht, es bei OnPlayerConnect zu false zu setzen?
-
Setze es zu false.
true = drin
false = nicht drin -
-
C
Alles anzeigenocmd:exit(playerid,params[]) { for(new i=0; i<sizeof(bInfo); i++) // > zu < geändert { if(GetPlayerVirtualWorld(playerid)!=i)continue; // 1 zu i geändert if(!IsPlayerInRangeOfPoint(playerid,2,bInfo[i][b_ix],bInfo[i][b_iy],bInfo[i][b_iz]))continue; SetPlayerPos(playerid,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z]); SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid,0); return 1; } return 1; }Und auch hier nochmal der Hinweis:
Lasst diese Vollzitate, die machen keinen Sinn! Der Text steht doch genau drüber, warum muss man ihn dann nochmal zig-fach zitieren? -
Füge die streamer.inc in dein Serververzeichnis /pawno/includes ein.
Dann öffne die pawno.exe aus /pawno/ und wähle dort "Öffnen".
Wähle dort deinen Gamemode aus und kompiliere ihn. Dann sollte das Kompilieren wieder klappen, möglicherweise löst das auch den anderen Fehler, wenn nicht, sag Bescheid und poste den Server Log. -
Was tut denn nicht? Siehst du die Nachrichten?
-
Siehst du die SendClientMessages?
-
Wie gesagt, die Codes musst du natürlich anpassen, wie du es haben willst.
Wenn man in einem Fahrzeug als Fahrer sein muss, dann:Cif(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du musst in einem Fahrzeug sein.");
Das sind minimale Anpassungen, die jeder anders haben will, daher habe ich das weg gelassen.