Du kannst dir als Referenz diesen Code anschauen, oder gegebenenfalls verwenden, falls er mit der neuesten Version noch kompatibel ist:
http://forum.sa-mp.com/showthread.php?t=477781
Beiträge von Jeffry
-
-
Ja jetzt nach dem printen ja
Dann hat es sich wohl über Nacht von selbst behoben

Hatte ich auch schon, dass etwas was am ersten Tag nicht ging am anderen Tag plötzlich, ohne dass man etwas daran geändert hat, ging. Umso besser!
Falls nochmals Probleme auftreten sollten, sage einfach Bescheid (am besten du postest dann die Prints gleich dazu). -
Hier klappt es, aber gestern wo bestandene Tickets vorhanden waren ging es nicht...
Also klappt es nun komplett ohne Probleme?
-
Lasse es dir mal so ausgeben, für ein Ticket, bei dem es nicht geht:
if(dialogid == DIALOG_TICKET_LOESCHEN)
{
printf("DIALOG_TICKET_LOESCHEN");
if(response)
{
if(!IsNumeric(inputtext))
{
SendClientMessage(playerid, COLOR_WHITE, "{FF7A7A}FEHLER{FFFFFF}: Bitte Ticket-ID eingeben um löschen zu können!");
new str1[100];
format(str1, sizeof(str1), "{FFFFFF}Möchtest du dieses Ticket löschen?\n{FF7A7A}Hinweis{FFFFFF}: Ticket-ID eingeben um löschen zu können.");
ShowPlayerDialog(playerid, DIALOG_TICKET_LOESCHEN, DIALOG_STYLE_INPUT, "Support Ticket {6DCCFF}löschen",str1, "Ausführen", "Beenden");
}
else
{
printf("Eingabe: %s", inputtext);
new txt = strval(inputtext);
for(new i = 0; i < sizeof(TicketInfo); i++)
{
printf("i: %d / t_id: %d / txt: %d", i, TicketInfo[i][t_id], txt);
if(TicketInfo[i][t_id] == txt)
{
printf("Absender: %s", TicketInfo[i][t_absender]);
printf("ID: %d", GetPlayerIdFromName(TicketInfo[i][t_absender]));
PlayerNeedsHelp[GetPlayerIdFromName(TicketInfo[i][t_absender])] = 0;
//printf("Eingabe: %i", txt);
//printf("Vor dem löschen: %i", TicketInfo[i][t_id]);
TicketInfo[i][t_id] = 0;
//printf("ID löschen: %i", TicketInfo[i][t_id]);
new query[156];
format(query, sizeof(query), "DELETE FROM `ingameticket` WHERE id='%i'", txt);
print(query);
mysql_function_query(dbhandle, query, true, "LoadTickets", "");
SendClientMessage(playerid, COLOR_WHITE, "Du hast das Ticket {9FFF92}erfolgreich{FFFFFF} gelöscht!");
return 1;
}
}
SendClientMessage(playerid, COLOR_WHITE, "{FF7A7A}Falsche{FFFFFF} Ticket-ID angabe!"); //Aus der Schleife geholt
return 1;
}
}
else SendClientMessage(playerid, COLOR_WHITE, "{FF7A7A}Abgebrochen{FFFFFF}.");
}Was steht dann in Server Log?
-
ocmd:makeadmin(playerid, params[])
{
new pID, a_level, string[128];if(sInfo[playerid][alevel] < 4)return SendClientMessage(playerid,COLOR_RED,"Dein Adminrang ist zu niedrig.");
if(sscanf(params, "ui", pID, a_level))return SendClientMessage(playerid, COLOR_YELLOW, "INFO: /makeadmin [playerid] [rang]");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_RED,"Dieser Spieler ist nicht online.");format(string, sizeof(string), "Admin %s hat dein Adminlevel auf %i geändert.", SpielerName(playerid), a_level);
SendClientMessage(pID, COLOR_LIGHTBLUE, string);format(string, sizeof(string), "Du hast %s Adminlevel auf %i geändernt.", SpielerName(pID), a_level);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
sInfo[pID][alevel] = a_level;
savePlayer(pID);
return 1;
}Zusammen mit dem Stock SpielerName natürlich.
-
printf("ID: %i", TicketInfo[i][t_id]);
Siehst du diesen Print im Server Log, wenn du den Server startest?
Es ist mir sonst irgendwie unerklärlich, denn es ist ja ein und derselbe Code, der ausgeführt wird. Kann ja nicht sein, dass er einmal funktioniert, und einmal nicht.
Kannst du deine GetPlayerIdFromName Funktion noch posten? Möglicherweise liegt es daran.
-
Genau, das würde dann so aussehen. Die Schleife mit dem Array Durchlauf durch string sollte daher nur bei Dialogen verwendet werden, da die keine Tilden zur Formatierung nutzen (außer man will Tilden im Text haben, dann muss man sich ein anderes Zeichen suchen).
Für Textdraws benötigt man keine "Übersetzung", das kann 1:1 aus der Datenbank gelesen werden, daher darf man für einen String der im Textdraw genutzt wird die Schleife nicht voranstellen (in einem Textdraw gibt es keine Formatierung mit Backslash).
Ich denke das ist was du meinst, dass man die Tilde nicht als Zeilenumbruch Platzhalter nutzen darf, wenn sie anderweitig verwendet werden soll.
-
Wobei du bei ~ (Tilde) wegen den Color Codes aufpassen musst, falls du iwann mal vorhast, Text von Textdraws oder ähnliches zu speichern

Das spielt eigentlich keine Rolle, da bei Textdraws mit ~n~ ein Zeilenumbruch gemacht wird, daher darf die obige Routine gar nicht an der Stelle eingefügt werden, wenn der Text für ein Textdraw bestimmt ist.

-
Das liegt daran, dass dies als zwei Zeichen erkannt wird.
Es gibt aber einen Trick:In deiner Datenbank:
ZitatDieser Zeilenumbruch~wird nun beachtet.
Code:
for(new i=0; i<strlen(string); i++) if(string[i] == '~') string[i] = '\n';
ShowPlayerDialog(playerid,DIALOG_INFO,DIALOG_STYLE_MSGBOX,"Info",string,"Schließen","");string = der Wert aus der Datenbankspalte in der der Text steht.
-
Wenn ich den Server restarte und Tickets noch vorhanden sind kann ich die danach nicht mehr löschen, sprich nur die Ticket-ID's die neu hinzugefügt wurden...
Komisch. Kannst du mal die aktuelle Version des Codes posten, mit dem du die Tickets lädst, sowie den Code, mit dem du ein Ticket erstellst?
-
Du hast keinen User angegeben.
Nutze am besten den User root ohne ein Kennwort, das sollte standardmäßig auf localhost klappen.
-
Dann poste bitte mal was der MySQL Log dir ausgibt, wenn du den Server betrittst (vorher leeren).
-
Bei OnPlayerConnect kann kein Dialog angezeigt werden.
Nutze dafür OnPlayerRequestClass, füge dort den Code von OnPlayerConnect ein.Du kannst auch nach diesem Tutorial vorgehen, das bezieht sich auf die neuste Version des MySQL Plugins: [jTuT] MySQL R39-3 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)
-
if(!IsPlayerInRangeOfPoint(playerid,5.0,219.4720,-226.6486,1.7786)) return SendClientMessage(playerid, 0xFF0000FF, "Du bist nicht im Hacking Stern!");
Die playerid und der Range haben gefehlt. -
Ja, nach der Abfrage-Zeile.
Die Abfrage muss so aussehen:
if(!IsPlayerInRangeOfPoint(playerid, 5.0, 219.4720,-226.6486,1.7786)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist hier falsch."); -
ich kann dir beide Script's mal ltschicken mit den Datenbanken
Das kannst du machen, ich werde aber erst am Wochenende dazu kommen, das zu testen. Reicht dir das?
Ich will aber nicht unbedingt eine Ältere Version nutzen
Hast du es trotzdem mal versucht? Wenn nicht, versuche es einfach mal, vielleicht bringt es was.
-
Ja, so.
Die "..." musst du natürlich mit den entsprechenden Daten ersetzen (Koordinaten und Nachricht).
-
Nein, am besten vor:
SendClientMessage(playerid, COLOR_ALLDEPT, "Du fängst an zu Hacken, bleib 2 Minuten im Auto.");Dort:
if(!IsPlayerInRangeOfPoint(...)) return ...Ich gebe es auch zu das ich nicht so gut bin beim Scripten sorry das ich so viele Fragen stelle
Das ist absolut kein Problem, dafür ist das Forum ja da! Du darfst gerne so viele Fragen stellen wie du möchtest und wir helfen dir immer gerne!
-
Und die defines aus dem include kann ich dann direkt im Gamemode verwenden ohne vorher was zu machen oder?
Du musst deine Include im Gamemode (am besten ganz oben) inkludieren:
#include <deineInclude>Müssen die Includes in den pawno include Ordner oder der im Server Ordner?
Die legst du am besten in /pawno/include/ ab. Oder in einem Unterordner davon.
-
Kann das Filterscript auch mit dem Gamemode Daten austauschen bzw. kommunizieren?
Ja, hiermit: https://wiki.sa-mp.com/wiki/CallRemoteFunction
Die kann man sozusagen nutzen, um den Gamemode auch in gewisser Weise aufzuräumen und den Code dann in die Includes verlagern und vom Gamemode aus drauf zugreifen?
Korrekt. Wenn du zum Beispiel 200 Farb-Defines hast, dann kannst du die da rein packen.
Oder wenn du eben Funktionen hast, die du in mehreren Codes (GM/FS) nutzen willst.