Manche mögen es so und manche so.
Ich würde sagen, mache doch beides und lass deine Spieler dann entscheiden welchen sie benutzen möchten (/tacho -> Option 1 = Analog / Option 2 = Digial). So kann man es auch nach Belieben wechseln und du kannst vorgeben, welches Fahrzeug vielleich nur einen Analogen Tacho besitzen kann (falls gewünscht).
Beiträge von Jeffry
-
-
Ich bezweifle, dass es da wirklich sinnvolle Systeme gibt, aber schau dir mal diese an:
http://forum.sa-mp.com/showthread.php?p=1426017
http://forum.sa-mp.com/showthread.php?t=293056
http://forum.sa-mp.com/showthread.php?t=371469 -
Hast du möglicherweise irgendeinen Code am Laufen, der die Ausführung des Callbacks verhindert?
Setze mal einen print hin und schaue ob der kommt.
Wenn nicht, versuche es mal auf einem komplett leeren Server (neu herunterladen, dieses Callback einfügen im grandlarc Gamemode und dann starten).Wenn es dann geht, dann verhindert irgendein Code den du im Server hast die Ausführung des Callbacks.
-
Wie klickst du denn auf die Karte?
Linke oder rechte Maustaste? Du musst die rechte nehmen (die die den roten Punkt setzt). -
-
-
Du kannst den Befehl so schreiben, das ist übersichtlicher:
C
Alles anzeigenif(strcmp(cmd, "/todo", true) == 0) { new len = strlen(cmd) + 1; if(gPlayerLogged[playerid] == 0) return SendClientMessage(playerid, COLOR_GREY, " Du bist noch nicht Eingeloggt !"); if(PlayerInfo[playerid][pMuted] == 1) return SendClientMessage(playerid, TEAM_CYAN_COLOR, " Du kannst nicht sprechen, du bist gemutet !"); if(!strlen(cmdtext[len])) return SendClientMessage(playerid, 0xDCDCDCFF, "NUTZUNG: /todo [text]"); GetPlayerName(playerid, sendername, sizeof(sendername)); if(PlayerInfo[playerid][pAdmin] == 3) format(string, sizeof(string), "Moderator %s: %s", sendername, cmdtext[len]); else if(PlayerInfo[playerid][pAdmin] == 4) format(string, sizeof(string), "Administrator %s: %s", sendername, cmdtext[len]); else if(PlayerInfo[playerid][pAdmin] == 5) format(string, sizeof(string), "SuperAdministrator %s: %s", sendername, cmdtext[len]); else if(PlayerInfo[playerid][pAdmin] == 6) format(string, sizeof(string), "ServerManager %s: %s", sendername, cmdtext[len]); else if(PlayerInfo[playerid][pAdmin] == 7) format(string, sizeof(string), "ProjektLeiter %s: %s", sendername, cmdtext[len]); else return 1; SendClientMessage(playerid, 0xDCDCDCFF, "Du hast folgende Nachricht in die ToDo-Liste eingetragen:"); SendClientMessage(playerid, 0xDCDCDCFF, string); Log("todo.txt",string); return 1; }Und den Befehl für die Liste dann so:
C
Alles anzeigenif(strcmp(cmd, "/todoliste", true) == 0) { SendClientMessage(playerid, 0xFFFFFFFF, "To-Do-Liste:"); new File:rfile, str[145]; if((rfile = fopen("todo.txt", io_read))) { while(fread(rfile, str)) { for(new i = 0, j = strlen(str); i < j; i++) if(str[i] == '\n' || str[i] == '\r') str[i] = '\0'; SendClientMessage(playerid, 0xFFFFFFFF, str); } fclose(rfile); } return 1; }
@Tusk : In deinem stock fehlt fclose. -
Ein return 1, sonst kommt, dass der Befehl nicht existiert.
C
Alles anzeigenocmd:kopfgelder(playerid, params[]) { if(PlayerInfo[playerid][p_AuftragID] != -1) return SendClientMessage(playerid, COLOR_GREY, "Du hast bereits einen Auftrag angenommen."); new str[145]; for(new i=0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) && PlayerInfo[i][p_LoggedIn] != true)continue; if(PlayerInfo[i][p_Kopfgeld] > 0 && PlayerInfo[i][p_KopfgeldID] == -1) { format(str, sizeof(str), "Spieler: %s - ID: %d - Kopfgeld: %d\n%s", GetName(i), i, PlayerInfo[i][p_Kopfgeld], str); ShowPlayerDialog(playerid, DIALOG_KOPFGELDER, DIALOG_STYLE_LIST, "Kopfgelder", str, "Annehmen", "Schließen"); } } return 1; }Habe es oben auch hinzugefügt.
-
Das geht dann, das ist ja im scriptfiles Ordner.
Zeige bitte, wie du es in die Datei schreibst, anhand dessen kann man dann sagen, wie du es ausgeben lassen kannst. -
C
Alles anzeigenocmd:kopfgeld(playerid, params[]) { new kopfgeld; if(sscanf(params, "ud", pID, kopfgeld))return SendClientMessage(playerid, COLOR_GREY, "Benutze: /kopfgeld [Spieler-ID] [Kopfgeld]"); if(!IsPlayerConnected(pID) || PlayerInfo[pID][p_LoggedIn] == false)return SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist Offline."); if(kopfgeld < 3500)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dem Spieler kein Kopfgeld unter $3.500 geben."); if(kopfgeld > 100000)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dem Spieler kein Kopfgeld über $100.000 geben."); if(PlayerInfo[pID][p_Kopfgeld] + kopfgeld > 100000)return SendClientMessage(playerid, COLOR_GREY, "Das Kopfgeld vom Spieler darf nicht über $100.000 liegen."); if(PlayerInfo[pID][p_KopfgeldID] != -1) return SendClientMessage(playerid, COLOR_GREY, "Auf diesen Spieler hat bereits jemand einen Auftrag angenommen."); PlayerInfo[pID][p_Kopfgeld] = PlayerInfo[pID][p_Kopfgeld] +kopfgeld; new str[145]; for(new i=0; i < MAX_PLAYERS; i++) { format(str, sizeof(str), "%s hat ein neuen Auftrag abgegeben.", GetName(playerid)); SendClientMessage(i, COLOR_BROWN, str); } SendClientMessage(playerid, COLOR_LIGHTBLUE, "[SERVICE] Dein Auftrag wurde an die Hitmen Agency weitergeleitet."); return 1; } ocmd:kopfgelder(playerid, params[]) { if(PlayerInfo[playerid][p_AuftragID] != -1) return SendClientMessage(playerid, COLOR_GREY, "Du hast bereits einen Auftrag angenommen."); new str[145]; for(new i=0; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i) && PlayerInfo[i][p_LoggedIn] != true)continue; if(PlayerInfo[i][p_Kopfgeld] > 0 && PlayerInfo[i][p_KopfgeldID] == -1) { format(str, sizeof(str), "Spieler: %s - ID: %d - Kopfgeld: %d\n%s", GetName(i), i, PlayerInfo[i][p_Kopfgeld], str); ShowPlayerDialog(playerid, DIALOG_KOPFGELDER, DIALOG_STYLE_LIST, "Kopfgelder", str, "Annehmen", "Schließen"); } } return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == DIALOG_KOPFGELD) { new counter = -1; if(!response) return 1; for(new i=0; i < MAX_PLAYERS; i++) { if(PlayerInfo[i][p_Kopfgeld] > 0 && PlayerInfo[i][p_KopfgeldID] == -1) { counter++; if(counter == listitem) { new str[145]; format(str, sizeof(str), "Du hast %s für $%d angenommen, erledige ihn!", GetName(i), PlayerInfo[i][p_Kopfgeld]); SendClientMessage(playerid, 0x8D2705FF, str); format(str, sizeof(str), "** ( Hitmen %s hat %s für $%d angenommen )**", GetName(playerid), GetName(i), PlayerInfo[i][p_Kopfgeld]); SendFraktionsMessage(11, 0x8D2705FF, str); PlayerInfo[i][p_KopfgeldID] = playerid; PlayerInfo[playerid][p_AuftragID] = i; break; } } } return 1; } return 0; }
Als neue enum-Felder brauchst du dann:
Bei OnPlayerConnect bzw. beim Login musst du beide auf -1 setzen.CPlayerInfo[playerid][p_Kopfgeld] = 0; PlayerInfo[playerid][p_AuftragID] = -1; PlayerInfo[playerid][p_KopfgeldID] = -1;
Bei OnPlayerDisconnect:C
Alles anzeigenif(PlayerInfo[playerid][p_KopfgeldID] != -1) { //Auftragnehmer informieren, wenn Opfer den Server verlässt. new pID = PlayerInfo[playerid][p_KopfgeldID]; new str[145]; format(str, sizeof(str), "%s ist offline gegangen!", GetName(playerid)); SendClientMessage(pID, 0x8D2705FF, str); PlayerInfo[pID][p_AuftragID] = -1; } if(PlayerInfo[playerid][p_AuftragID] != -1) { //Opfer wieder in die Liste setzen, wenn Auftragnehmer den Server verlässt. new pID = PlayerInfo[playerid][p_AuftragID]; PlayerInfo[pID][p_KopfgeldID] = -1; }Bei OnPlayerDeath:
C
Alles anzeigenif(killerid != INVALID_PLAYER_ID) { if(PlayerInfo[playerid][p_KopfgeldID] == killerid) { new str[145]; format(str, sizeof(str), "Du hast %s getötet und bekommst $%d!", GetName(playerid), PlayerInfo[playerid][p_Kopfgeld]); SendClientMessage(killerid, 0x8D2705FF, str); GivePlayerMoney(killerid, PlayerInfo[playerid][p_Kopfgeld]); PlayerInfo[killerid][p_AuftragID] = -1; PlayerInfo[playerid][p_Kopfgeld] = 0; PlayerInfo[playerid][p_KopfgeldID] = -1; } } -
Du kannst nur auf Dateien innerhalb des "scriptfiles" Ordners zugreifen, oder mit dem FileManager Plugin innerhalb des ganzen Server Ordners.
Auf eine Datei die im GTA Verzeichnis eines Spielers liegt kannst du nicht zugreifen. -
Angenommen Spieler A setzt 10k auf Spieler B. Darf nun Spieler C auch nochmal 10k auf Spieler B setzen? Wenn ja, darf er das auch noch, nachdem Spieler D den Auftrag angenommen hat, oder nur solange, bis jemand den Auftrag angenommen hat?
-
Aber mehrere Spieler dürfen einen Hitman auf denselben Spieler setzen?
-
Das ist mir klar, nur wenn Spieler A 10k setzt und Spieler B 20k setzt, und Spieler C und D jeweils den Auftrag annehmen, geht das, oder darf es nur einen Spieler geben, der einen Auftrag auf den Spieler annehmen kann?
-
Ich suche ein SQLite (Kein MySQL) Register/Login System mit Enums.
Ihr könnt mich darüber per PN anschreiben, nicht hier im Thread.Warum über PN? Ein Forum funktioniert nicht durch PNs, daher:
Tutorial: http://forum.sa-mp.com/showthread.php?t=449536
System: SQLite Basic Register/LoginOder hier ein etwas komplizierteres Tutorial: http://forum.sa-mp.com/showthread.php?t=278188
Ich hab immernoch Probleme..
Dir fehlt die SpielerName Funktion.
-
Können zwei oder mehr verschiedene Aufträge auf einen Spieler angesetzt werden?
-
Wenn du 0 returnst, dann wird Schaden verhindert.
Hier eine archivierte Version: http://web.archive.org/web/201…m/wiki/OnPlayerWeaponShotDebugge gegebenenfalls mal dein OnPlayerWeaponShot, ob das return 1 überhaupt erreicht wird, oder ob es einen Fehler zuvor hat.
-
Das schreibst du einfach so in deinen Befehl rein. Und dort wo Mach was steht schreibst du das rein, was der Befehl machen soll.
-
Der Command Prozessor spielt für die Abfrage keine Rolle, du kannst da jeden verwenden.
-
Dann erstelle bitte mal einen neuen Thread und poste dort den Code davon.
Möglicherweise hast du auch das Limit erreicht.