Beiträge von Jeffry
-
-
Das kannst du so machen:
C
Alles anzeigenforward SaveFBaseLocks(); public SaveFBaseLocks() { new coordsstring[64]; new File:file2=fopen("FBase.ini",io_write); format(coordsstring,sizeof(coordsstring),"%i\r\n",bsenter); fwrite(file2,coordsstring); format(coordsstring,sizeof(coordsstring),"%i\r\n",wasAnderes); fwrite(file2,coordsstring); //... fclose(file2); print("[SAVE] FBase.ini wurde gespeichert."); return 1; } -
-
Die Erstellung des Textdraws machst du bei OnPlayerConnect, da es ja für den Spieler erstellt wird, und das muss es erst, wenn der Spieler online ist.
-
Code 1 passt, du hast den Tag (PlayerText: ) ja schon bei der Deklaration (new).
-
Ja, ändere es mal wieder zurück und poste dann nochmal den aktuellen Code.
Beschreibe dazu bitte ganz genau, was du machst und was das Problem ist, möglicherweise hatte ich das falsch verstanden. -
Das kannst du dann so machen:
C
Alles anzeigenforward LoadFBaseLocks(); public LoadFBaseLocks() { if(!fexist("FBase.ini")) return print("FBase.ini konnte nicht geladen werden, da die Datei fehlt."); new arrCoords[64], File:file; if((file=fopen("FBase.ini",io_read))) { fread(file,arrCoords); for(new i = 0, j = strlen(arrCoords); i < j; i++) if(arrCoords[i] == '\n' || arrCoords[i] == '\r') arrCoords[i] = '\0'; bsenter=strval(arrCoords); fread(file,arrCoords); for(new i = 0, j = strlen(arrCoords); i < j; i++) if(arrCoords[i] == '\n' || arrCoords[i] == '\r') arrCoords[i] = '\0'; wasAnderes=strval(arrCoords); //... fclose(file); print("[LOAD]: FBase.ini wurde erfolgreich geladen."); } printf("Fertig."); return 1; }
In der Datei schreibst du die Variablen dann einfach untereinander, also:
Daher auch diese Schleife mit \r und \n, damit der Zeilenumbruch nicht in der Variable steht.Alternativ kannst du das fread auch in eine while-Schleife packen, je nach dem was du vor hast.
-
Wenn der Text für jeden Spieler ein anderer sein soll, ja, für dieses Textdraw dann.
Das musst du dann als PlayerTextDraw erstellen: http://wiki.sa-mp.com/wiki/CreatePlayerTextDrawUnd auch die entsprechenden Einstellungsfunktionen (PlayerTextDrawColor, ... [siehe unten im Link]) nutzen.
-
Hm...was ist denn, wenn du es so schreibst?
C
Alles anzeigenforward LoadFBaseLocks(); public LoadFBaseLocks() { printf("LoadFBaseLocks aufgerufen."); if(!fexist("FBase.ini")) return print("FBase.ini konnte nicht geladen werden, da die Datei fehlt."); new arrCoords[64], File:file; printf("Ok"); if((file=fopen("FBase.ini",io_read))) { printf("Geöffnet."); fread(file,arrCoords); printf("str: %s", arrCoords); bsenter=strval(arrCoords); printf("bsenter: %d", bsenter); fclose(file); print("[LOAD]: FBase.ini wurde erfolgreich geladen."); } printf("Fertig."); return 1; }Nur mal testweise.
Schreibe in die Datei wieder nur "33", also ohne das Komma.
Klappt es dann? -
Du solltest jetzt aber in der Lage sein, den /elock Befehl zu verwenden, um die Objekte zu entfernen.
An dem Code, den du gepostet hast, kann ich nicht nachvollziehen, warum die Objekte zu Beginn schon da sind (Serverstart?), daher versuche es erst mal mit dem elock Befehl, die müssten dan weg gehen, dann kannst du den countdown starten, der die Objekte erstellt. -
Du musst eben im Hinterkopf behalten, dass alles was rein PAWN Code ist nur auf einem einzigen Kern laufen kann, selbst wenn du 8 Kerne á 3,5 GHz hast, dann kann nur ein Kern verwendet werden.
Das beste ist, wenn man es ausgeglichen hält, heißt nicht nur alles auf die CPU hauen, aber auch nicht nur alles auf den RAM packen. -
C
CMD:ecountdown(playerid,params[]) //Starts a countdown, after the countdown the Doors will be locked. (There is no command yet to unlock the doors). { if(countTimer != -1) return SendClientMessage(playerid, RED, "ERROR: Countdown is already enabled."); if(!params[0]) return SendClientMessage(playerid, 0xFF0055FF, "Type in a time."); if(status) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nicht unlocked."); new time = strval(params); if(time < 10 || time > 500) return SendClientMessage(playerid, RED, "Type in a time from 10 to 500.."); countTimer = SetTimerEx("CountDownObjekte", 1000, false, "dd", playerid, time); return 1; }C
Alles anzeigenforward CountDownObjekte(playerid, count); public CountDownObjekte(playerid, count) { count--; if(count <= 0) { KillTimer(countTimer); countTimer = -1; for(new i=0; i<MAX_PLAYERS; i++) PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0); //GO - Sound gObj[0] = CreateObject(1498,1866.485,-2496.830,5047.411,0.000,0.000,36.199,300.000); SetObjectMaterial( gObj[0], 0, 5150, "wiresetc_las2", "ganggraf01_LA_m", 0); SetObjectMaterialText(gObj[0], "LOCKED", 0, 50, "Calibri", 15, 1, -65536, 0, 1); gObj[1] = CreateObject(1498,1841.824,-2495.508,5047.339,0.000,0.000,335.900,300.000); SetObjectMaterial( gObj[1], 0, 5150, "wiresetc_las2", "ganggraf01_LA_m", 0); SetObjectMaterialText(gObj[1], "LOCKED", 0, 50, "Calibri", 15, 1, -65536, 0, 1); GameTextForAll( "Go!" , 1000, 3 ); status = true; return 1; } new str[16]; format(str, sizeof(str), "%d", count); GameTextForAll( str, 5000, 4 ); for(new i=0; i<MAX_PLAYERS; i++) PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0); //Timer - Sound countTimer = SetTimerEx("CountDownObjekte", 1000, false, "dd", playerid, count); return 1; }
Und die Deklaration:Versuche es dann so.
-
1.6 ist als Höhe zu wenig. Versuche es mit 16.00.
-
Das kannst du nicht vergleichen.
Die Variable benötigt Arbeitsspeicher und die Schleife geht auf die CPU.Was allerdings grundsätzlich Sinn macht ist, die 500 von MAX_PLAYERS auf die tatsächliche Anzahl der Slots zu reduzieren, das spart massiv Arbeitsspeicher, vor allem wenn du gar nicht 500 Slots nutzt.
-
Mache bitte einen separaten Thread auf und poste dort nochmal den aktualisierten Code und erkläre, wie es dazu kommt, dass die Tore von Anfang an geschlossen sind.
-
Schau mal in den Includes nach.
-
Ich kann zwar nicht ganz nachvollziehen was du vor hast, aber ja, das wäre dann so.
-
Das ist doch immer noch 0 (Zeile 3).
Schau dir den Code an, den ich in Post #4 gepostet habe. -
Nimm das hier aus dem elock Befehl raus:
static bool:status;
und schreibe es unter die Includes als:
new bool:status;Dann kannst du in dem countdown Befehl abfragen:
PS: Es wäre wesentlich sinnvoller, wenn du einen eigenen Thread erstellst, weil das keine kleinen Fragen mehr sind, mit so viel Code. -
Deine TextDrawTextSize (X) ist 0, sprich das Textdraw hat keine anklickbare Breite.
Versuche es so:
Gegebenenfalls musst du die Werte noch anpassen, die sind nur geschätzt.Grundsätzlich musst du die Größe das anklickbaren Bereiches mit TextDrawTextSize anpassen. wiki.sa-mp.com/wiki/TextDrawTextSize Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches. Der Y Wert ist die geschätzte Höhe.
Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist TextDrawTextSize-X = 120 + 64 = 184.
Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre TextDrawTextSize-Y = 24.