Hallo,
Ich habe das Ticketsystem von Scriptor genommen.
Dies habe ich auf mysql umgeschrieben, da es einbisschen schneller ist.
Nun habe ic hdas Problem das es nur für ID 0 Klappt.
Also der normale User muss ID 0 sein sonst kann man das Ticket nicht benutzen.
Also es komtm die Meldung das Der User ein Ticket erstellt hat.
In der MySQL Tabelle ist dieser Eintrag auch zufinden.
Hier der Code:
dcmd_sup(playerid,params[])
{
new text[256];
if(sscanf(params,"s",text))
{
SendClientMessage(playerid, COLOR_GREY,"[Benutzung]: /sup [text]");
}
else
{
if(TicketAngenommen[playerid] == 0)
{
new pname[MAX_PLAYER_NAME],string[128];
GetPlayerName(playerid,pname,sizeof pname);
if(!mysql_CheckTicket(playerid) && TicketZeile[playerid] == 0) // Wenn noch kein Ticket existiert und auch die TicketZeile auf 0 ist.
{
new adminmeldung[128];
format(adminmeldung, sizeof(adminmeldung), "%s hat ein Support-Ticket geschrieben", pname);
SendAdminMessage(COLOR_YELLOW, adminmeldung);
SupportTicket[playerid] = 1;
TicketZeile[playerid] = 1;
ticket(pname,text);
TicketZeile[playerid] = 1;
SendClientMessage(playerid, COLOR_YELLOW, "[SUPPORT] Du hast ein Ticket mit folgendem Text geöffnet:");
format(string, sizeof(string), "%s", text);
SendClientMessage(playerid, COLOR_YELLOW, string);
SendClientMessage(playerid, COLOR_YELLOW, "[SUPPORT]Warte bis es ein Supporter annimmt!");
return 1;
}
else if(TicketZeile[playerid] == 1) // Wenn das Ticket bereits 3 Zeilen hat
{
SendClientMessage(playerid, COLOR_YELLOW, "[SUPPORT] Dein Ticket ist bereits randgefüllt!");
return 1;
}
}
if(TicketAngenommen[playerid] == 1) // Zum direkten Antworten per /sup , wenn das Ticket angenommen wurde.
{
if(PlayerInfo[playerid][pAdmin] >= 1)
{
new pID = DeinSupport[playerid];
new antwort[128], antwort2[128], DerFragende[MAX_PLAYER_NAME], DerSup[MAX_PLAYER_NAME];
GetPlayerName(playerid, DerFragende, sizeof (DerFragende));
GetPlayerName(pID, DerSup, sizeof (DerSup));
format(antwort, sizeof (antwort),"--> %s", text);
SendClientMessage(playerid, COLOR_YELLOW, antwort);
format(antwort2, sizeof (antwort2), "Supporter/Admin %s schrieb: %s", DerFragende, text);
SendClientMessage(pID, COLOR_YELLOW, antwort2);
}
else
{
new pID = DeinSupport[playerid];
new antwort[128], antwort2[128], DerFragende[MAX_PLAYER_NAME], DerSup[MAX_PLAYER_NAME];
GetPlayerName(playerid, DerFragende, sizeof (DerFragende));
GetPlayerName(pID, DerSup, sizeof (DerSup));
format(antwort, sizeof (antwort),"--> %s", text);
SendClientMessage(playerid, COLOR_YELLOW, antwort);
format(antwort2, sizeof (antwort2), "%s schrieb: %s", DerFragende, text);
SendClientMessage(pID, COLOR_YELLOW, antwort2);
}
}
}
return 1;
}
dcmd_taketicket(playerid,params[])
{
new pID;
new string[256],mitteilung[128] , DerPlayer[MAX_PLAYER_NAME], DerAdmin[MAX_PLAYER_NAME];
if(sscanf(params,"u",pID))
{
return SendClientMessage(playerid, COLOR_GREY,"[Benutzung]: /taketicket [id]");
}
new pname[MAX_PLAYERS];
GetPlayerName(pID,pname,sizeof pname);
if(mysql_CheckTicket(pID)) // Ob ein Ticket existiert! bzw. Datei-Abfrage
{
if(PlayerInfo[playerid][pAdmin] >= 1) // Ob der Spieler ein Supporter ist!
{
if(TicketAngenommen[pID] == 0)
{
string = mysql_GetString("tickets", "Text", "Name", pname);
GetPlayerName(pID, DerPlayer, sizeof(DerPlayer));
GetPlayerName(playerid, DerAdmin, sizeof(DerAdmin));
format(string, sizeof(string), "%s schrieb folgende Supportnachricht:", DerPlayer);
SendClientMessage(playerid, COLOR_YELLOW, string);
SendClientMessage(playerid, COLOR_YELLOW, "Du kannst per /sup sofort mit ihm schreiben!");
format(mitteilung, sizeof(mitteilung), "[SUPPORT] %s hat dein Support Ticket geöffnet. Du kannst nun per /sup direkt mit ihm schreiben!",DerAdmin);
SendClientMessage(pID, COLOR_YELLOW, mitteilung);
DeinSupport[pID] = playerid; // Der persönliche Supporter wird gesetzt , um die Antworten an ihn weiterzuleiten
TicketAngenommen[pID] = 1;
TicketAngenommen[playerid] = 1;
DeinSupport[playerid] = pID;
}
}
}
return 1;
}
dcmd_deleteticket(playerid, params[])
{
new pID;
if(sscanf(params,"u",pID)){
return SendClientMessage(playerid, COLOR_GREY,"[Benutzung]: /deleteticket [id]");
}
new pname[MAX_PLAYERS];
GetPlayerName(pID,pname,sizeof pname);
if(mysql_CheckTicket(pID)) // Ob ein Ticket offen ist
{
if(PlayerInfo[playerid][pAdmin] >= 1) // Ob der Spieler befugt ist
{
new string[128], DerSup[MAX_PLAYER_NAME];
GetPlayerName(playerid, DerSup, sizeof(DerSup));
DeleteTicket(pID);
format(string, sizeof(string), "%s hat dein Ticket gelöscht", DerSup);
SendClientMessage(pID, COLOR_YELLOW, string);
SendClientMessage(playerid, COLOR_YELLOW, "Erfolgreich gelöscht");
TicketZeile[pID] = 0;
TicketAngenommen[pID] = 0;
DeinSupport[pID] = 0;
SupportTicket[pID] = 0;
TicketAngenommen[playerid] = 0;
DeinSupport[playerid] = 0;
}
}
return 1;
}
dcmd_giveticket(playerid, params[])
{
new pID, adminid;
if(sscanf(params,"uu",pID,adminid))
{
return SendClientMessage(playerid, COLOR_GREY,"[Benutzung]: /giveticket [ticketid] [adminid]");
}
if(!IsPlayerConnected(adminid)) // Ob die angegebene ID online ist.
{
return SendClientMessage(playerid, COLOR_GREY,"Admin nicht online");
}
if(PlayerInfo[adminid][pAdmin] == 0) // Ob die angegebene ID Admin ist
{
return SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist kein Admin");
}
if(TicketAngenommen[adminid] == 1) // Ob die angegebene ID Admin ist
{
return SendClientMessage(playerid, COLOR_GREY, "Der Admin bearbeitet bereits ein Ticket!");
}
new pname[MAX_PLAYERS];
GetPlayerName(pID,pname,sizeof pname);
if(!mysql_CheckTicket(pID)) // Ob ein Ticket besteht
{
return SendClientMessage(playerid, COLOR_GREY,"Die ID hat kein offenes Ticket");
}
new NeuerAdmin[MAX_PLAYER_NAME], AlterAdmin[MAX_PLAYER_NAME], Fragender[MAX_PLAYER_NAME];
GetPlayerName(playerid, AlterAdmin , sizeof(AlterAdmin));
GetPlayerName(adminid, NeuerAdmin, sizeof(NeuerAdmin));
GetPlayerName(pID, Fragender , sizeof(Fragender));
TicketAngenommen[adminid] = 1;
DeinSupport[adminid] = DeinSupport[playerid];
TicketAngenommen[playerid] = 0;
DeinSupport[playerid] = 0;
DeinSupport[pID] = adminid;
new string2[128], string3[128], string4[256];
format(string2, sizeof(string2), "[SUPPORT] %s hat dein Ticket an %s weitergegeben.", AlterAdmin, NeuerAdmin);
SendClientMessage(pID, COLOR_YELLOW, string2);
SendClientMessage(playerid, COLOR_YELLOW, "Erfolgreich weitergeleitet");
format(string3, sizeof(string3), "[SUPPORT] %s hat dir %s´s Ticket gegeben. Er schrieb folgendes:", AlterAdmin, Fragender);
string4 = mysql_GetString("tickets", "Text", "Name", pname);
SendClientMessage(adminid, COLOR_YELLOW, string3);
SendClientMessage(adminid, COLOR_YELLOW, string4);
return 1;
}
dcmd_tickets(playerid, params[])
{
#pragma unused params
if(PlayerInfo[playerid][pAdmin] >= 1)
{
SendClientMessage(playerid, COLOR_YELLOW, "Die angezeigten Tickets können mit /taketicket angenommen werden");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(SupportTicket[i] == 1)
{
if(TicketAngenommen[i] == 0)
{
new string[128], DerSpieler[MAX_PLAYER_NAME];
GetPlayerName(i, DerSpieler, sizeof(DerSpieler));
format(string, sizeof(string), "ID: %d Name: %s", i, DerSpieler);
SendClientMessage(playerid, COLOR_GREY, string);
}
}
}
}
return 1;
}
stock DeleteTicket(playerid)
{
new query[256];
new pname[MAX_PLAYERS];
GetPlayerName(playerid,pname,sizeof pname);
if(mysql_CheckTicket(playerid))
{
format(query,sizeof(query),"DELETE FROM `tickets` WHERE `Name`='%s'",pname);
mysql_query(query);
}
return true;
}
stock mysql_CheckTicket(playerid)
{
new Query[128],Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
mysql_real_escape_string(Name, Name);
format(Query, sizeof(Query), "SELECT * FROM tickets WHERE Name = '%s'", Name);
mysql_query(Query);
mysql_store_result();
return mysql_num_rows();
}
stock ticket(nickname[MAX_PLAYER_NAME],Text[256])
{
new query[256];
format(query,sizeof(query),"INSERT INTO tickets (Name,Text) VALUES ('%s','%s')",
nickname,
Text);
mysql_query(query);
mysql_free_result();
}
gelöscht werden die Tickets aber auch wenn der Spieler Disconnectet jedoch nicht per Befehl.
mfg
//edit Aber bei ID 0 funktioniert alles so wie es soll, jedoch sobald wir das mit anderen ID's testen bugged es
//edit ich kann die befehle noch nutzen also das da steht wie ich sie benutzen muss, jedoch wenn ich dort eine zahl > 0 eingebe passsiert rein garnichts.
//ich rbacuhe leider immernoch hilfe...