Ahh, moment. Ich sehe grade du hast auch ein print hinter die if Abfrage gesetzt. Daher wird der Timer immer gleich gekillt, deshalb wird die 13 auch nicht ausgegeben.
Entferne bitte alle prints und diese Zeile:
ReshowTypeDialog(playerid);
Ahh, moment. Ich sehe grade du hast auch ein print hinter die if Abfrage gesetzt. Daher wird der Timer immer gleich gekillt, deshalb wird die 13 auch nicht ausgegeben.
Entferne bitte alle prints und diese Zeile:
ReshowTypeDialog(playerid);
Hmm, also das Problem ist, dass die Variablen nicht angelegt werden können, das ist ein Problem was hin und wieder vorkommt bei PAWN, einen wirklich Grund dafür gibt es aber nicht, denn bei mir klappt es ja.
Versuche es mal so:
new g_string[1024];
stock ReshowTypeDialog(playerid)
{
new dialogid, style, caption[64], button1[32], button2[32]; print("ReshowTypeDialog1");
dialogid = GetPVarInt(playerid, "t_dialogid");print("ReshowTypeDialog2");
style = GetPVarInt(playerid, "t_style");print("ReshowTypeDialog3");
GetPVarString(playerid, "t_caption", caption, sizeof(caption));print("ReshowTypeDialog4");
GetPVarString(playerid, "t_string", g_string, sizeof(g_string));print("ReshowTypeDialog5");
GetPVarString(playerid, "t_button1", button1, sizeof(button1));print("ReshowTypeDialog6");
GetPVarString(playerid, "t_button2", button2, sizeof(button2));print("ReshowTypeDialog7");
ShowPlayerDialog(playerid, dialogid, style, caption, g_string, button1, button2);print("ReshowTypeDialog8");
return 1;
}
Auch keine Nachricht mit vielen Zahlen?
Füge bitte mal folgendes unter deine Includes ein:
#pragma dynamic 100000
Klappt es dann, bzw. ändert sich etwas?
In deinem Compiler steh ganz sicher nichts drin?
Suche bitte mal nach #pragma dynamic in deinem Code.
Findest du da was?
Das Problem liegt in "ReshowTypeDialog".
Mache dort bitte das Gleiche und poste es dann nochmal so.
Setze den Print bitte mal als erstes in den Timer, nicht nach ganz unten.
Wenn er dort ausgeführt wird, setze ihn immer weiter runter, bis er nicht mehr ausgeführt wird. Markiere dann die Zeile, die als letztes noch korrekt ausgeführt wird.
Also ich habe anscheinend GetPlayerName vergessen..
Unter anderem. Vor allem aber hat das format gefehlt, daher der Absturz, da Platzhalter (%s, %d, ...) nicht in SendClientMessage möglich sind.
Hier fehlt nach wie vor das format:
SendClientMessage(playerid,COLOR_GREY,"Du hast %s eine Reparatur anfrage gesendet!");
Passe das an zu:
GetPlayerName(pID, name, MAX_PLAYER_NAME);
format(str, sizeof(str), "Du hast %s eine Reparatur anfrage gesendet!", name);
SendClientMessage(playerid,COLOR_GREY,str);
SendClientMessage(pID,COLOR_GREY,"Der Spieler %s möchte dir eine Reparatur anbieten.");
Zu
new str[145];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
format(str, sizeof(str), "Der Spieler %s möchte dir eine Reparatur anbieten.", str);
SendClientMessage(pID,COLOR_GREY,str);
Gleiches Prinzip für diese Nachricht:
SendClientMessage(playerid,COLOR_GREY,"Du hast %s eine Reparatur anfrage gesendet!");
Das ist es ja, gar nichts. weder ein Warning noch ein Error.
Wird der Timer DialogTypeTimer aufgerufen? Setze dort mal einen Print und schaue ob der ausgegeben wird.
könnte man das ganze auch als SendClientMessage verpacken?
Nein, das geht leider nicht.
Hast du im Compiler irgendwelche Meldungen?
Zum Beispiel Warnungen oder Meldungen bezüglich Header Size etc.?
eine Funktion hatte womit der Dialog aussah als wenn man gerade "Live" Tippen würde
Du meinst wahrscheinlich das hier?
Code dazu:
//©Jeffry - 01.12.2016
#include <a_samp>
#pragma dynamic 10000
new pTypeTimer[MAX_PLAYERS] = {-1,...};
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/dialog")) TypePlayerDialog(playerid, 5142, DIALOG_STYLE_MSGBOX, "Test", "Diese Nachricht wird sich nach und nach aufbauen.\nAuch der Zeilenumbruch funktioniert.\n\nEnde =)", "Ok", "");
return 0;
}
public OnPlayerDisconnect(playerid, reason)
{
if(pTypeTimer[playerid] != -1) KillTimer(pTypeTimer[playerid]);
pTypeTimer[playerid] = -1;
return 1;
}
stock TypePlayerDialog(playerid, dialogid, style, caption[], string[], button1[], button2[])
{
if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) return 0;
if(pTypeTimer[playerid] != -1) KillTimer(pTypeTimer[playerid]);
new str[3];
format(str, sizeof(str), "%c", string[0]);
ShowPlayerDialog(playerid, dialogid, style, caption, str, button1, button2);
if(string[1] == '\0' || !strlen(string[1])) return 0;
SetPVarInt(playerid, "t_dialogid", dialogid);
SetPVarInt(playerid, "t_style", style);
SetPVarString(playerid, "t_caption", caption);
SetPVarString(playerid, "t_string", str);
SetPVarString(playerid, "t_rest", string[1]);
SetPVarString(playerid, "t_button1", button1);
SetPVarString(playerid, "t_button2", button2);
pTypeTimer[playerid] = SetTimerEx("DialogTypeTimer", 120, 1, "d", playerid);
return 1;
}
forward DialogTypeTimer(playerid);
public DialogTypeTimer(playerid)
{
new dialogid, style, caption[64], string[1024], rest[1024], button1[32], button2[32];
dialogid = GetPVarInt(playerid, "t_dialogid");
style = GetPVarInt(playerid, "t_style");
GetPVarString(playerid, "t_caption", caption, sizeof(caption));
GetPVarString(playerid, "t_string", string, sizeof(string));
GetPVarString(playerid, "t_rest", rest, sizeof(rest));
GetPVarString(playerid, "t_button1", button1, sizeof(button1));
GetPVarString(playerid, "t_button2", button2, sizeof(button2));
new str[1024];
//Ein Buchstabe hinzufügen
format(str, sizeof(str), "%s%c", string, rest[0]);
ShowPlayerDialog(playerid, dialogid, style, caption, str, button1, button2);
SetPVarString(playerid, "t_string", str);
//Den hinzugefügten Buchstabe aus dem Rest entfernen
SetPVarString(playerid, "t_rest", rest[1]);
if(rest[1] == '\0' || !strlen(rest[1]))
{
if(pTypeTimer[playerid] != -1) KillTimer(pTypeTimer[playerid]);
pTypeTimer[playerid] = -1;
}
ReshowTypeDialog(playerid);
return 1;
}
stock ReshowTypeDialog(playerid)
{
new dialogid, style, caption[64], string[1024], button1[32], button2[32];
dialogid = GetPVarInt(playerid, "t_dialogid");
style = GetPVarInt(playerid, "t_style");
GetPVarString(playerid, "t_caption", caption, sizeof(caption));
GetPVarString(playerid, "t_string", string, sizeof(string));
GetPVarString(playerid, "t_button1", button1, sizeof(button1));
GetPVarString(playerid, "t_button2", button2, sizeof(button2));
ShowPlayerDialog(playerid, dialogid, style, caption, string, button1, button2);
return 1;
}
//©Jeffry - 01.12.2016
In OnDialogResponse kann so abgefragt werden, ob der Dialog vollständig da ist:
if(pTypeTimer[playerid] != -1)
{
//Dialog nicht vollständig, warte ab und zeige aktuellen Stand an
ReshowTypeDialog(playerid);
return 1;
}
Nun, mit sizeof wird das ja anscheinend nicht, erhalte mit jeglicher Methode nur Errors.
Das geht so leider nicht.
Was du machen kannst ist, das Array bis zum Maximum mit Nullen aufzufüllen.
new Float:array[][] = {
{1.0, 2.0, 3.0, 0.0}, // 3 Floats
{5.0, 6.0, 7.0, 5.0}, // 4 Floats
//.. usw
};
Die Anzahl der Werte pro Zeile kannst du dann mit einer Schleife herausfinden, indem du bis zu sizeof(array[]) zählst, wie viele Zahlen nicht null sind.
Der Link funktioniert aber bei mir nicht, deshalb die frage
Nutze das Crashdetect Plugin, nativechecker ist nicht mehr zu empfehlen.
http://forum.sa-mp.com/showthread.php?t=262796
Das hat mit den Leerzeichen nichts zu tun, die spielen keine Rolle.
Das Callback OnPlayerCommandText wird in dem Gamemode wahrscheinlich gar nicht aufgerufen, Grund dafür könnte ein verwendeter Command Prozessor (z. B. zcmd) sein, der die Ausführung verhindert, oder ein Filterscript.
Kann man die Bools noch weiter kürzen? Will so wenig Ressourcen wie möglich verbrauchen und zeilensparend arbeiten.
Du könntest es so schreiben:
if(!IsPlayerInRangeOfPoint(playerid, 10.0, 1260.3502, -1698.7749, 13.2889)) return SendClientMessage(playerid,dunkelrot,"Du bist zu weit entfernt!");
if(pInfo[playerid][Fraktion] != 1) return SendClientMessage(playerid,dunkelrot,"Du bist kein Polizist!");
lspdschranke = !lspdschranke;
MoveObject(LSPDSchranke,1260.3502+(8*_:lspdschranke), -1698.7749, 13.2889,4);
if(lspdschranke) SendClientMessage(playerid,dunkelgrün,"Schranke geöffnet!");
else SendClientMessage(playerid,dunkelrot,"Schranke geschlossen!");
Zeile 3 tauscht praktisch immer den Wert zum Gegenteil (wenn true, dann false und andersherum). MoveObject nimmt die +8 nur dann, wenn das bool true (1) ist. Das "_:" entfernt den "bool" Tag, damit true als 1 interpretiert wird, sonst gibt es einen Tag Mismatch.
Die Nachrichten sollten klar sein.
Performance-technisch ändert das aber nicht wirklich was, es wird eher schlechter, da bei MoveObject eine Rechenoperation dazu kommt.
Zeilen-mäßig hast du natürlich weniger.
Ganz übertrieben kannst du es auch so schreiben:
if(!IsPlayerInRangeOfPoint(playerid, 10.0, 1260.3502, -1698.7749, 13.2889)) return SendClientMessage(playerid,dunkelrot,"Du bist zu weit entfernt!");
if(pInfo[playerid][Fraktion] != 1) return SendClientMessage(playerid,dunkelrot,"Du bist kein Polizist!");
MoveObject(LSPDSchranke,1260.3502+(8*_:(lspdschranke = !lspdschranke)), -1698.7749, 13.2889,4);
SendClientMessage(playerid, (lspdschranke) ? (dunkelgrün) : (dunkelrot), (lspdschranke) ? ("Schranke geöffnet!") : ("Schranke geschlossen!"));
Das ist dann aber nicht mehr auf den ersten Blick lesbar.
ah ok jetzt geht es hast du vieleicht die ganzen imcludes die der bracuht finde paar nicht
Stimmt, die Include nutzt das y_hooks, das macht wenig Sinn.
Mache es wie folgt:
Füge den Code der in "Hook:paynspray_OnPlayerUpdate(playerid)" steht (Zeile 5 bis 34) in deinem Gamemode in OnPlayerUpdate ein.
Lösche dann Zeile 1 bis 37 aus der Include und schreibe die Include dann oben in deinen Gamemode hin.
Dass wenn ich im Gebäude (Interior) bin ich mit der Enter Taste nicht rauskommen kann.
Sicher, dass die Koordinaten an denen du stehst die richtigen sind?
Ingame passiert nichts wenn ich den befehl eingebe
Versuche es so:
CMD:restart(playerid, params[])
{
new time;
LoginCheck(playerid);
LevelCheck(playerid, 5);
if(sscanf(params, "I(0)", time))
{
SendClientMessage(playerid, COLOR_RED, "/restart [Restart Timer(optional)");
return SendClientMessage(playerid, -1, "Tipp: Trage als Timer nichts ein für einen schnellen Restart");
}
if(time < 10 && time !=0) return SendClientMessage(playerid, COLOR_RED, "Der Restart kann nicht unter 10min dauern.");
return 1;
}
Ein Restart wird dadurch aber nicht durchgeführt, davon steht ja nichts im Code.
Wenn du also eine Zahl größer gleich 10 eingibst, passiert logischerweise gar nichts.
Bei beiden Werten etwas weniger, z.B.:
pTextHUD[playerid][1] = CreatePlayerTextDraw(playerid,480.000000, 2.000000, "00:00");
Warum bei Y nur 6 angegeben sind ist mir aber etwas unklar. Versuche einfach mal die Zahlen zu ändern, dann siehst du ja wohin es geht.
Das Feld ist insgesamt 640x480 groß, darin bewegt sich das Textdraw.
0/0 ist dabei links oben und 6400/480 ist rechts unten.
Hallo ich habe das Gleiche Problem nur der link funktioniert nicht mehr kann mir da jemand helfen
Bei mir gehen beide Links.
Link im SA-MP.com Forum: http://forum.sa-mp.com/showthread.php?t=360865
Dieser verweist auf Pastebin: https://pastebin.com/zX96D4dA
Welcher Link geht bei dir nicht?
Hast du die Anpassung nach meinem Edit übernommen? Wenn nicht, kopiere bitte den Code von oben nochmal.
Entschuldige die späte Antwort, ich hatte unter der Woche leider keine Zeit.
Habe noch ne Frage wie kann ich das so machen wenn ich aus dem taxi der duty ist austeige und ein anderen nehme das da der dialog kommt und der andere taxi wieder zurück spawnt wie kann ich das machen MfG Lui
Dann musst du den Code hierzu anpassen:
if(IsVehicleATaxi(vehicleid))
{
if(Spieler[playerid][pJob] != 17)
{
TextDrawShowForPlayer(playerid,InfoSign);
PlayerTextDrawSetString(playerid,INFOdraw[playerid][2],"~r~Info:~w~~n~Du besitzt nicht den jeweiligen Job.");
PlayerTextDrawShow(playerid,INFOdraw[playerid][2]);
SetTimerEx("HideInfoBox",3000,0,"i",playerid);
return RemovePlayerFromVehicle(playerid);
}
printf("pTaxiDuty: %d", Spieler[playerid][pTaxiDuty]);
if(Spieler[playerid][pTaxiDuty] == 0)
{
Spieler[playerid][pTaxiVeh] = vehicleid;
ShowPlayerDialog(playerid, DIALOG_TAXIPICE, DIALOG_STYLE_INPUT, "{FFFF00}Taxi - Preis festlegen", "{FFFFFF}Lege den Preis für die Taxifahrt fest:", "Ok", "Abbrechen");
}
else if(vehicleid != Spieler[playerid][pTaxiVeh])
{
SetVehicleToRespawn(Spieler[playerid][pTaxiVeh]);
Spieler[playerid][pTaxiVeh] = vehicleid;
ShowPlayerDialog(playerid, DIALOG_TAXIPICE, DIALOG_STYLE_INPUT, "{FFFF00}Taxi - Preis festlegen", "{FFFFFF}Lege den Preis für die Taxifahrt fest:", "Ok", "Abbrechen");
}
}
Im enum noch "pTaxiVeh" aufnehmen.
EDIT:
Habe den Code nochmal ausgebessert, bitte so verwenden.