Ok.
Jetzt die Frage wie du die Nummer, die auf der Nummerntafel angezeigt wird, vergibst. Wie machst du das?
Bekommt jedes dieser PlayerAuto's die Nummer für das Nummernschild?
Wenn ja, könnte man einfach die Nummer nehmen, mit der es in der Datei steht (auto_xxx)?
Wenn nein, welche Nummer bekommt es dann, und woher/wie?
Beiträge von Jeffry
-
-
In deinem SavePlayerCar kannst du das Query kleiner machen, so viel brauchst du nicht an Speicher zu reservieren.
zu:
Der Befehl muss so geändert werden:C
Alles anzeigenocmd:setplate(playerid,params[]) { if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid,C_Error,"Du bist nicht der Fahrer!"); new plate[35], string[145]; new vehid = GetPlayerVehicleID(playerid); if (sscanf(params, "s[20]", plate)) return SendClientMessage(playerid,-1,"/setplate [plate]"); if (strlen(plate) > 20 || strlen(plate) < 1) return SendClientMessage(playerid,-1," /setplate [plate] (länge 0-20)"); for(new i=0; i<sizeof(cInfo); i++) { if(cInfo[i][id_x] == vehid) { format(string,sizeof(string),"Das Kennzeichen wurde auf %s erfolgreich geändert.",plate); SetVehicleNumberPlate(vehid, plate); SetVehicleToRespawn(vehid); format(cInfo[i][kennzeichen],16,plate); savePlayerCar(i); SendClientMessage(playerid,C_Blau,"Dein Kennzeichen wurde gespeichert."); return 1; } } return SendClientMessage(playerid, 0xFF0000FF, "Fehler, Fahrzeug kein cInfo Fahrzeug."); }
Sonst greifst du mit der vehicleid auf den Index zu, und das ist falsch. -
Das kann man so nicht direkt sagen, weil es gibt viele Möglichkeiten wie man das realisieren kann, abhängig davon, wie die Fahrzeuge verwaltet werden.
Dazu müsste man erst mal wissen:
- Wie werden die Fahrzeuge erstellt?
- Können Fahrzeuge gelöscht werden? Wenn ja, wird die Nummer wieder frei?
- Haben gegebenenfalls entfernte Fahrzeuge (an Spieler gebunden?) auch ein Nummernschild?
- Werden die Nummernschilder am Fahrzeug gespeichert, oder können die nach dem Server-Restart anders sein?
- Welche Fahrzeuge bekommen ein Nummernschild?Außerdem, sofern die Nummernschilder gespeichert werden:
- Welches Speichersystem nutzt du (MySQL, SQLite, Dateien, ...)?Erst wenn man das alles weiß, kann man wirklich sagen, wie es am sinnvollsten zu realisieren wäre.
-
Das ist egal, da das Array schon so ist, braucht es das enum nicht mehr zwangsweise.
Debugge es bitte mal so:
C
Alles anzeigenCOMMAND:givereport(playerid,params[]) { if(ImTutorial[playerid] != 0)return SendClientMessage(playerid,GRAU,"Du kannst keine Befehle nutzen,da du im Tutorial bist."); if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt!"); if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1)return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back"); new string[500],selectitem = Spieler[playerid][pReportSelect],pID = Spieler[playerid][pReportPartner],adminid,headerstring[64]; if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,GRAU,"Du bist kein "#SERVERTAG" Teammitglied./Du hast nicht den jeweiligen Adminrang."); if(Spieler[playerid][pAtReport] == 0)return SendClientMessage(playerid,GRAU,"In keinem Report tätig."); if(sscanf(params,"u",adminid))return SendClientMessage(playerid,WRONGCMD,"BENUTZE: /givereport [playerid/Name]"); if(!IsPlayerConnected(adminid))return SendClientMessage(playerid,GRAU,"Der angegebene Spieler ist nicht eingeloggt!"); if(GetPVarInt(adminid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Der angegebene Spieler ist nicht eingeloggt!"); if(IsPlayerNPC(adminid))return SendClientMessage(playerid,GRAU,"Das kannst du nicht!"); if(!isPlayerAnAdmin(adminid,1))return SendClientMessage(playerid,GRAU,"Der Spieler ist Du bist kein "#SERVERTAG" Teammitglied./Du hast nicht den jeweiligen Adminrang."); if(Spieler[adminid][pAtReport] != 0)return SendClientMessage(playerid,GRAU,"Spieler ist bereits in einem Report tätig."); printf("selectitem: %d | pID: %d", selectitem, pID); for(new i=0;i<30;i++) { printf("i: %d | ReportListitem: %d == pID: %d", i, ReportListitem[i][rID][selectitem], pID); if(ReportListitem[i][rID][selectitem] == pID) { printf("Wird weitergeleitet."); format(string,sizeof(string),"[SUPPORT] %s %s hat deinen Report an %s %s weitergeleitet.",Adminrang(playerid),Spieler[playerid][pName],Adminrang(adminid),Spieler[adminid][pName]); SendClientMessage(pID,REPORTANDAFKCOLOR,string); SendClientMessage(playerid,REPORTANDAFKCOLOR,"[SUPPORT] Report erfolgreich weitergeleitet"); format(string,sizeof(string),"%s hat den Report von %s an %s weitergeleitet.",Spieler[playerid][pName],Spieler[pID][pName],Spieler[adminid][pName]); SendAdminMessage(REPORTACCEPTCOLOR,string); Spieler[adminid][pAtReport] = 1; Spieler[pID][pReportPartner] = adminid; Spieler[adminid][pReportPartner] = pID; if(ReportLabel[adminid]) Delete3DTextLabel(ReportLabel[adminid]); ReportLabel[adminid] = Create3DTextLabel("Reportbearbeitung",REPORTANDAFKCOLOR,30.0,40.0,50.0,MAX_STREAM_NAME_DISTANCE,0,1); Attach3DTextLabelToPlayer(ReportLabel[adminid],adminid,0.0,0.0,0.4); format(headerstring,sizeof(headerstring),"Report %s:",Spieler[pID][pName]); Spieler[playerid][Reports]--; Spieler[adminid][Reports]++; Spieler[playerid][pReportPartner] = -1; Spieler[playerid][pAReport] = 0; Spieler[playerid][pAtReport] = 0; Delete3DTextLabel(ReportLabel[playerid]); return 1; } } printf("Nichts gefunden."); return SendClientMessage(playerid,GRAU,"Es ist ein Fehler aufgetreten.(/sreport)"); }
Dann poste was im Server Log steht. Prüfe gegebenenfalls gleich, ob die Werte die im Server Log stehen korrekt sind (du weißt ja was du ausgewählt hast), oder nicht. -
Schau dir dieses Tutorial an, das wird dir sicher helfen:
[jTuT] Fraktions-Fahrzeug-System mit MySQL R39-2Es bezieht sich zwar auf Fahrzeuge, aber das lässt sich ja analog für Häuser anwenden, indem du einfach Häuser anstatt Fahrzeuge erstellst, und die Variablen entsprechend benennst.
-
Hier habe ich mal eine Funktion gepostet die das macht:
Nützliche Codeschnipsel -
Das kannst du mit einem Textdraw Editor deiner Wahl machen.
Beispiel: http://forum.sa-mp.com/showthread.php?t=543002
Zahl erscheint nur kurz und verschwindet.
Erstelle bitte einen Thread und poste dort nochmal den ganzen Code, da das keine kleine Frage mehr ist.
Prüfe vorher, ob du das Textdraw auch wirklich nirgends aus Versehen löschst. -
jedoch zeit er mir, zb. das SetPlayerCamaraPos und CamaraLookAt nicht an, auch der Spieler wird nicht auf den Felsen in LV gesetzt.
Das geht dann so gar nicht.
Dann musst du den Spieler erst Spawnen (OnPlayerRequestClass: SetSpawnInfo & SpawnPlayer). Dann bei OnPlayerSpawn: SetPlayerPos, SetPlayerCameraPos, ... .
Im Spectate-Modus siehst du deinen Avatar nicht. -
Wie sieht deine ReportListitem Deklaration (new) und das enum dazu aus?
-
Du rufst j_SetPlayerWantedLevel auf, dein stock heißt aber s_SetPlayerWantedLevel.
-
Nimm das SetPlayerPos und das SetPlayerFacingAngle raus.
Das SetSpawnInfo schreibst du dort rein, mit den Koordinaten von SetPlayerPos und SetPlayerFacingAngle.
-
Das musst du nach TogglePlayerSpectating machen.
Poste gegebenenfalls mal deinen Code.SetSpawnInfo brauchst du aber auch bei TogglePlayerSpectating, sobald das beendet wird, wird die gleiche Aktion ausgeführt, wie die die SpawnPlayer macht, sprich du wirst gekickt, wenn du SetSpawnInfo nicht zuvor nutzt.
-
Du muzsst den Spieler direkt nachdem er das Passwort eingegeben hat Spawnen lassen.
Nein, denn genau dadurch kommt der Fehler, dass die Verbindung geschlossen wird.
Das funktioniert leider nicht, sobald ich das Ausführe steht bei mir, Server Closed the Connection.
Nutze http://wiki.sa-mp.com/wiki/SetSpawnInfo vor dem Ausführen der Funktion.
[wiki]SetSpawnInfo[/wiki]
-
Wie sieht denn der Befehl aus?
-
Der startet alle 12 Sekunden neu, das ist wahrscheinlich ein Timer der da aufgerufen wird.
Prüfe mal, ob du da was hast, das in dem Zeitraum aufgerufen wird. -
-
Du musst für Streamer Objekte das Callback OnPlayerSelectDynamicObject nutzen.
Außerdem müssen alle Funktionen die auf das Objekt zugreifen die Streamer Funktionen sein, also IsValidObject kannst du da zum Beispiel nicht verwenden, sondern musst IsValidDynamicObject nutzen.
-
Du musst eine Schleife nutzen:
C
Alles anzeigen//Der behfehl ocmd:automat(playerid,params[]) { for(new i=0; i<sizeof(ATMS); i++) { if(IsPlayerInRangeOfPoint(playerid,10,ATMS[i][atmx],ATMS[i][atmy],ATMS[i][atmz])) { if(GetPVarInt(playerid,"pin")==0) { ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_INPUT,"Automat","Du hast noch kein Bankkonto erstelle dir eins bitte gib hier dein Pin ein und merke ihn dir gut!!!","weiter","Abbrechren"); } else { ShowPlayerDialog(playerid,DIALOG_BANK1,DIALOG_STYLE_LIST,"Automat","Ueberweisen\nAbheben\nEinzahlen","weiter","Abbrechren"); } return 1; } } return SendClientMessage(playerid,ROT,"Du bist nicht am einem Automat"); } -
Lade dir die aktuelle Version des Streamer Plugins herunter.
http://forum.sa-mp.com/showthread.php?t=102865 -
Lade dir das crashdetect Plugin herunter und füge es in deinen Server ein. Dann poste was im Server Log steht, wenn du den Server startest.
http://forum.sa-mp.com/showthread.php?t=262796