Beitrag von Dr. Frauenarzt ()
Dieser Beitrag wurde vom Autor gelöscht ().
Danke @Kaliber
habe es nicht 1:1 uebernommen weil ich es irgendwie nicht ganz verstanden habe
Habe es daher als Denkanstoss genommen, hoffe mein Erzeugniss ist auch halbwegs effizient
stock TeamsAlive(bool:value)
{
new i=0,count=0;
while(i<TEAMSIZE)
{
if(GetTeamCount(i) > 0)
{
count++;
}
i++;
}
if(bool:value == false)//Returns the amount of remaining teams
return count;
if(bool:value == true && count == 1)//Returns the ID of the remaining team
return i;
}
stock isEnd()
{
switch(TeamsAlive(false))
{
case 0:
{
SendClientMessageToAll(COLOR_WHITE,"SERVER: All teams have been wiped. No one has won the game!");
}
case 1:
{
switch(TeamsAlive(true))
{
case FIRST_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FIRST_TEAM_COLOR_TAG);
}
}
case SECOND_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",SECOND_TEAM_COLOR_TAG);
}
}
#if defined TEAMSIZE
#if TEAMSIZE >= 3
case THIRD_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",THIRD_TEAM_COLOR_TAG);
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
case FOURTH_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FOURTH_TEAM_COLOR_TAG);
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
case FIFTH_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FIFTH_TEAM_COLOR_TAG);
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
case SIXTH_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",SIXTH_TEAM_COLOR_TAG);
}
}
#endif
#endif
}
printf("Total game time: %d",totaltime);
SendRconCommand("gmx");
}
default:
{
}
}
}
OnPlayerSpawn
if(GetPlayerCount() >= 2)
{
isEnd();
}
stock GetPlayerCount()
{
new counter=0,k=0;
LOOP:do
{
if(!IsPlayerConnected(k) || IsPlayerNPC(k))
goto LOOP;
}
counter++;
}
while( k < MAX_PLAYERS );
return counter;
}
Alles anzeigen
Jedoch meckert der Compiler dass TeamsAlive ein value returnen soll ![]()
[list=1][*]stock TeamsAlive(bool:value)
[*]{
[*] new i=0,count=0;
[*] while(i<TEAMSIZE)
[*] {
[*] if(GetTeamCount(i) > 0)
[*] {
[*] count++;
[*] }
[*] i++;
[*] }
[*] if(bool:value == false)
[*]{
[*] return count;
[*]}
[*] if(bool:value == true && count == 1)
[*]{
[*]return i;
[*]}
[*]}
[*]
[/list]
Danke @Kaliber
habe es nicht 1:1 uebernommen weil ich es irgendwie nicht ganz verstanden habe
![]()
Habe es daher als Denkanstoss genommen, hoffe mein Erzeugniss ist auch halbwegs effizient
CAlles anzeigenstock TeamsAlive(bool:value) { new i=0,count=0; while(i<TEAMSIZE) { if(GetTeamCount(i) > 0) { count++; } i++; } if(bool:value == false)//Returns the amount of remaining teams return count; if(bool:value == true && count == 1)//Returns the ID of the remaining team return i; } stock isEnd() { switch(TeamsAlive(false)) { case 0: { SendClientMessageToAll(COLOR_WHITE,"SERVER: All teams have been wiped. No one has won the game!"); } case 1: { switch(TeamsAlive(true)) { case 0: { for(new i;i<MAX_PLAYERS;i++) { SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FIRST_TEAM_COLOR_TAG); } } case 1: { for(new i;i<MAX_PLAYERS;i++) { SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",SECOND_TEAM_COLOR_TAG); } } #if defined TEAMSIZE #if TEAMSIZE >= 3 case 2: { for(new i;i<MAX_PLAYERS;i++) { SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",THIRD_TEAM_COLOR_TAG); } } #endif #endif #if defined TEAMSIZE #if TEAMSIZE >= 4 case 3: { for(new i;i<MAX_PLAYERS;i++) { SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FOURTH_TEAM_COLOR_TAG); } } #endif #endif #if defined TEAMSIZE #if TEAMSIZE >= 5 case 4: { for(new i;i<MAX_PLAYERS;i++) { SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FIFTH_TEAM_COLOR_TAG); } } #endif #endif #if defined TEAMSIZE #if TEAMSIZE == 6 case 5: { for(new i;i<MAX_PLAYERS;i++) { SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",SIXTH_TEAM_COLOR_TAG); } } #endif #endif } printf("Total game time: %d",totaltime); SendRconCommand("gmx"); } default: { } } }Jedoch meckert der Compiler dass TeamsAlive ein value returnen soll
Was genau hast du da geaendert?
if(bool:value == false)//Returns the amount of remaining teams
return count;
zu
]if(bool:value == false)//Returns the amount of remaining teams
{
return count;
}
und genauso mit
if(bool:value == true && count == 1)
return i;
zu
if(bool:value == true && count == 1)
{
return i;
}
Alles anzeigenif(bool:value == false)//Returns the amount of remaining teamsreturn count;
zu
]if(bool:value == false)//Returns the amount of remaining teams{return count;}
und genauso mit
if(bool:value == true && count == 1)return i;
zu
if(bool:value == true && count == 1){return i;}
Das habe ich schon zuvor probiert, gibt leider den gleichen Fehler
Ich ueberlege gerade, ist es eventuell sinvoller nen rekursiven Aufruf der Funktion TeamAlives zu machen? Also den Teil ab TeamAlives(true) in TeamAlives reinzupacken und dann mit switch(count) zu arbeiten?
Also so?
stock TeamsAlive(bool:value)
{
new i=0,count=0;
while(i<TEAMSIZE)
{
if(GetTeamCount(i) > 0)
{
count++;
}
i++;
}
if(bool:value == false)//Returns the amount of remaining teams
switch(count)
{
case 1:
{
switch(TeamsAlive(true))
{
case FIRST_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FIRST_TEAM_COLOR_TAG);
}
}
case SECOND_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",SECOND_TEAM_COLOR_TAG);
}
}
#if defined TEAMSIZE
#if TEAMSIZE >= 3
case THIRD_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",THIRD_TEAM_COLOR_TAG);
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
case FOURTH_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FOURTH_TEAM_COLOR_TAG);
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
case FIFTH_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",FIFTH_TEAM_COLOR_TAG);
}
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
case SIXTH_TEAM:
{
for(new i;i<MAX_PLAYERS;i++)
{
SendClientMessageEx(i,COLOR_WHITE,"SERVER: All remaining teams have been wiped. Team %s {FFFFFF}has won the game!",SIXTH_TEAM_COLOR_TAG);
}
}
#endif
#endif
}
}
}
if(bool:value == true && count == 1)//Returns the ID of the remaining team
return i;
}
Alles anzeigen
CMD:load(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
if(IsPlayerInRangeOfPoint(playerid, 5.0, 2185.9954,-2262.5286,13.5721))
{
if(GetVehicleModel(vehicleid) == 428)
{
new string[128], int;
if(sscanf(params, "i", int))return SendClientMessage(playerid, COLOR_GREY, "{247BA6}* Benutze {33AA33}/load [Menge]");
if(!(Spieler[playerid][pFraktion] == 14))return SendClientMessage(playerid, COLOR_RED, "Du bist kein Member der Transport GmbH.");
if(int < 1 || int > 50000)return SendClientMessage(playerid, COLOR_RED, "Du kannst nur maximal 50000 Produkte aufladen.");
new money = int*4;
if(GetMoney(playerid) < money)return SendClientMessage(playerid, COLOR_GREY, ERROR_MONEY);
if((int+Vehicle[vehicleid][vehProds]) > 50000)return SendClientMessage(playerid, COLOR_RED, "Du kannst nur maximal 50000 Materialien aufladen.");
Vehicle[vehicleid][vehProds] += int;
GiveMoney(playerid, -money);
SendClientMessage(playerid, COLOR_WHITE,"{21DD00}Ladung: Materialien");
format(string, sizeof(string), "{21DD00}Menge: %d/50000", Vehicle[vehicleid][vehProds], money);
SendClientMessage(playerid, COLOR_WHITE, string);
}
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, -14.7640,-277.4165,5.4297))
{
if(GetVehicleModel(vehicleid) == 515 || GetVehicleModel(vehicleid) == 514)
{
if(GetVehicleModel(GetVehicleTrailer(vehicleid)) == 435)
{
new string[128], int;
if(sscanf(params, "i", int))return SendClientMessage(playerid, COLOR_GREY, "{247BA6}* Benutze {33AA33}/load [Menge]");
if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "** Du befindest dich in keinem Lieferwagen.");
if(!(Spieler[playerid][pFraktion] == 14))return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Member der Transport GmbH.");
if(int < 1 || int > 200)return SendClientMessage(playerid, COLOR_GREY, "** Du kannst nur maximal 200 Produkte aufladen.");
new money = int*40;
if(GetMoney(playerid) < money)return SendClientMessage(playerid, COLOR_GREY, ERROR_MONEY);
if((int+Vehicle[vehicleid][vehProds]) > 200)return SendClientMessage(playerid, COLOR_GREY, "** Du kannst nur maximal 200 Produkte aufladen.");
Vehicle[vehicleid][vehProds] += int;
GiveMoney(playerid, -money);
SendClientMessage(playerid, COLOR_WHITE,"{21DD00}Ladung: Produkte");
format(string, sizeof(string), "{21DD00}Menge: %d/200", Vehicle[vehicleid][vehProds]);
SendClientMessage(playerid, COLOR_WHITE, string);
}
}
}
else if(IsPlayerInRangeOfPoint(playerid, 2.0, 264.9876,1392.1984,10.2901))
{
if(GetVehicleModel(vehicleid) == 515 || GetVehicleModel(vehicleid) == 514)
{
if(GetVehicleModel(GetVehicleTrailer(vehicleid)) == 584)
{
new string[128], int;
if(sscanf(params, "i", int))return SendClientMessage(playerid, COLOR_GREY, "{247BA6}* Benutze {33AA33}/load [Menge]");
if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "** Du befindest dich in keinem Tanker.");
if(!(Spieler[playerid][pFraktion] == 14))return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Member der Transport GmbH.");
if(int < 1 || int > 2500)return SendClientMessage(playerid, COLOR_GREY, "** Du kannst nur maximal 2500 Liter aufladen.");
new money = int*15;
if(GetMoney(playerid) < money)return SendClientMessage(playerid, COLOR_GREY, ERROR_MONEY);
if((int+Vehicle[GetVehicleTrailer(vehicleid)][vehProds]) > 2500)return SendClientMessage(playerid, COLOR_GREY, "** Du kannst nur maximal 2500 Liter aufladen.");
Vehicle[GetVehicleTrailer(vehicleid)][vehProds] += int;
GiveMoney(playerid, -money);
SendClientMessage(playerid, COLOR_WHITE,"{21DD00}Ladung: Benzin");
format(string, sizeof(string), "{21DD00}Liter: %d/2500", Vehicle[GetVehicleTrailer(vehicleid)][vehProds]);
SendClientMessage(playerid, COLOR_WHITE, string);
}
}
}
return 1;
}
Alles anzeigen
Hallo habe ich bei
if(GetVehicleModel(vehicleid) == 515 || GetVehicleModel(vehicleid) == 514)
{
if(GetVehicleModel(GetVehicleTrailer(vehicleid)) == 584)
{
was falsch gemacht? weil Produkte kann ich laden aber wen ich benzin laden will geht das nicht warum :/?
Wo hostest du ?
Auf Windows geht es aber auf Linux nicht
Ich hoste auf Windows & Linux jenachdem wie ich in dem moment lust habe und von wo aus ich arbeite. Ich kann dir sicher sagen, es funktioniert auch bei Linux.
Gibt dir die Server.log nicht irgendwas aus bzw die mysql.log ?
Nein es wird nichts weiter ausgegeben in der Server.log und mysql.log kommt garnichts
Ich hoste bei Samp4you
CMD:sup(playerid, params[])
{
new input[90], text[96], string[128];
if(!IsLoggedIn(playerid))return 1;
if(sscanf(params, "s[90]", input))return SendClientMessage(playerid, COLOR_GREY, "Benutze /sup [Nachricht]");
new bool:isOnline;
for(new i=0;i<GetMaxPlayers();i++)
{
if(IsPlayerConnected(i) && Spieler[i][pLoggedIn])
{
if(Spieler[i][pAdmin] > 0)
{
isOnline = true;
}
}
}
if(!isOnline)
{
SendClientMessage(playerid, COLOR_GREY, "Derzeit ist kein Team Mitglied online.");
return 1;
}
// CREATE SUPPORT TICKET
if(GetTicketCount() > MAX_REPORTS)return SendClientMessage(playerid, COLOR_GREY, "Die Team Mitglieder haben momentan zuviele Tickets. Schreibe in einigen Minuten ein neues Ticket!");
if(Spieler[playerid][pReportAktiv] != 0)return SendClientMessage(playerid, COLOR_GREY, "Du bist bereits in einem aktiven Report oder hast ein Ticket erstellt!");
SendClientMessage(playerid, COLOR_GREEN, "Du hast ein Support-Ticket abgeschickt. Bitte gedulde dich nun einen moment.");
format(string, sizeof(string), "%s hat ein Support-Ticket erstellt! (/areport)", GetName(playerid));
SendAdminMessage(COLOR_GREEN, string);
format(string, sizeof(string), "Support-Ticket: "COLOR_HEX_WHITE"%s", input);
SendClientMessage(playerid, COLOR_GREEN, string);
Spieler[playerid][pReportAktiv] = 1;
new ticket = GetFreeTicket();
gSupport[ticket][ticketCreated] = true;
format(gSupport[ticket][ticketMessage], 90, input);
gSupport[ticket][ticketSender] = playerid;
gSupport[ticket][ticketAdmin] = INVALID_PLAYER_ID;
gSupport[ticket][ticketType] = 1;
format(string, sizeof(string), "Offene Tickets: ~g~%d", GetTicketCount());
for(new i=0;i<GetMaxPlayers();i++)
{
if(IsLoggedIn(i))
{
if(Spieler[i][pAdminDuty] == 1)
{
PlayerTextDrawSetString(i, pTextSupport[i][2], string);
}
}
}
if(Spieler[playerid][pReportAktiv] == 1)
{
for(new i=0;i<MAX_REPORTS;i++)
{
if(gSupport[i][ticketCreated])
{
if(gSupport[i][ticketSender] == playerid && Spieler[playerid][pAdmin] == 0)
{
if(gSupport[i][ticketAdmin] != INVALID_PLAYER_ID)
{
if(IsPlayerConnected(gSupport[i][ticketAdmin]))
{
strdel(text, 0, 1);
format(string, sizeof(string), "{21DD00}(( %s: %s ))", GetName(playerid), text);
SendClientMessage(gSupport[i][ticketAdmin], COLOR_WHITE, string);
SendClientMessage(playerid, COLOR_WHITE, string);
return 0;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "* Dein Gegenüber ist offline. Das Ticket wurde gelöscht.");
gSupport[i][ticketAdmin] = INVALID_PLAYER_ID;
gSupport[i][ticketSender] = INVALID_PLAYER_ID;
gSupport[i][ticketCreated] = false;
gSupport[i][ticketType] = 0;
strdel(gSupport[i][ticketMessage], 0, 90);
return 0;
}
}
}
else if(gSupport[i][ticketAdmin] == playerid && Spieler[playerid][pAdmin] > 0)
{
if(gSupport[i][ticketSender] != INVALID_PLAYER_ID)
{
if(IsPlayerConnected(gSupport[i][ticketSender]))
{
strdel(text, 0, 1);
format(string, sizeof(string), "{21DD00}(( %s: %s ))", GetName(playerid), text);
SendClientMessage(gSupport[i][ticketSender], COLOR_WHITE, string);
SendClientMessage(playerid, COLOR_WHITE, string);
return 0;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Dein Gegenüber ist offline. Das Ticket wurde gelöscht.");
gSupport[i][ticketAdmin] = INVALID_PLAYER_ID;
gSupport[i][ticketSender] = INVALID_PLAYER_ID;
gSupport[i][ticketCreated] = false;
gSupport[i][ticketType] = 0;
strdel(gSupport[i][ticketMessage], 0, 90);
for(new a=0;a<GetMaxPlayers();a++)
{
if(Spieler[a][pLoggedIn]){
if(Spieler[a][pAdminDuty] == 1)
{
format(string, sizeof(string), "Offene Tickets: ~g~%d", GetTicketCount());
PlayerTextDrawSetString(a, pTextSupport[a][2], string);
}
}
}
return 0;
}
}
}
}
}
}
return 1;
}
Alles anzeigen
Hallo,
Sorry das ich Privat störe habe ein Problem bei /sup das man nicht antworten kann wen man ein Report annimmt.
das heißt man schreibt ja /sup (Sein Problem) wen der admin den report anngenommen hat das man per /sup antworten kann.
CodeAlles anzeigenCMD:sup(playerid, params[]) { new input[90], text[96], string[128]; if(!IsLoggedIn(playerid))return 1; if(sscanf(params, "s[90]", input))return SendClientMessage(playerid, COLOR_GREY, "Benutze /sup [Nachricht]"); new bool:isOnline; for(new i=0;i<GetMaxPlayers();i++) { if(IsPlayerConnected(i) && Spieler[i][pLoggedIn]) { if(Spieler[i][pAdmin] > 0) { isOnline = true; } } } if(!isOnline) { SendClientMessage(playerid, COLOR_GREY, "Derzeit ist kein Team Mitglied online."); return 1; } // CREATE SUPPORT TICKET if(GetTicketCount() > MAX_REPORTS)return SendClientMessage(playerid, COLOR_GREY, "Die Team Mitglieder haben momentan zuviele Tickets. Schreibe in einigen Minuten ein neues Ticket!"); if(Spieler[playerid][pReportAktiv] != 0)return SendClientMessage(playerid, COLOR_GREY, "Du bist bereits in einem aktiven Report oder hast ein Ticket erstellt!"); SendClientMessage(playerid, COLOR_GREEN, "Du hast ein Support-Ticket abgeschickt. Bitte gedulde dich nun einen moment."); format(string, sizeof(string), "%s hat ein Support-Ticket erstellt! (/areport)", GetName(playerid)); SendAdminMessage(COLOR_GREEN, string); format(string, sizeof(string), "Support-Ticket: "COLOR_HEX_WHITE"%s", input); SendClientMessage(playerid, COLOR_GREEN, string); Spieler[playerid][pReportAktiv] = 1; new ticket = GetFreeTicket(); gSupport[ticket][ticketCreated] = true; format(gSupport[ticket][ticketMessage], 90, input); gSupport[ticket][ticketSender] = playerid; gSupport[ticket][ticketAdmin] = INVALID_PLAYER_ID; gSupport[ticket][ticketType] = 1; format(string, sizeof(string), "Offene Tickets: ~g~%d", GetTicketCount()); for(new i=0;i<GetMaxPlayers();i++) { if(IsLoggedIn(i)) { if(Spieler[i][pAdminDuty] == 1) { PlayerTextDrawSetString(i, pTextSupport[i][2], string); } } } if(Spieler[playerid][pReportAktiv] == 1) { for(new i=0;i<MAX_REPORTS;i++) { if(gSupport[i][ticketCreated]) { if(gSupport[i][ticketSender] == playerid && Spieler[playerid][pAdmin] == 0) { if(gSupport[i][ticketAdmin] != INVALID_PLAYER_ID) { if(IsPlayerConnected(gSupport[i][ticketAdmin])) { strdel(text, 0, 1); format(string, sizeof(string), "{21DD00}(( %s: %s ))", GetName(playerid), text); SendClientMessage(gSupport[i][ticketAdmin], COLOR_WHITE, string); SendClientMessage(playerid, COLOR_WHITE, string); return 0; } else { SendClientMessage(playerid, COLOR_GREY, "* Dein Gegenüber ist offline. Das Ticket wurde gelöscht."); gSupport[i][ticketAdmin] = INVALID_PLAYER_ID; gSupport[i][ticketSender] = INVALID_PLAYER_ID; gSupport[i][ticketCreated] = false; gSupport[i][ticketType] = 0; strdel(gSupport[i][ticketMessage], 0, 90); return 0; } } } else if(gSupport[i][ticketAdmin] == playerid && Spieler[playerid][pAdmin] > 0) { if(gSupport[i][ticketSender] != INVALID_PLAYER_ID) { if(IsPlayerConnected(gSupport[i][ticketSender])) { strdel(text, 0, 1); format(string, sizeof(string), "{21DD00}(( %s: %s ))", GetName(playerid), text); SendClientMessage(gSupport[i][ticketSender], COLOR_WHITE, string); SendClientMessage(playerid, COLOR_WHITE, string); return 0; } else { SendClientMessage(playerid, COLOR_GREY, "Dein Gegenüber ist offline. Das Ticket wurde gelöscht."); gSupport[i][ticketAdmin] = INVALID_PLAYER_ID; gSupport[i][ticketSender] = INVALID_PLAYER_ID; gSupport[i][ticketCreated] = false; gSupport[i][ticketType] = 0; strdel(gSupport[i][ticketMessage], 0, 90); for(new a=0;a<GetMaxPlayers();a++) { if(Spieler[a][pLoggedIn]){ if(Spieler[a][pAdminDuty] == 1) { format(string, sizeof(string), "Offene Tickets: ~g~%d", GetTicketCount()); PlayerTextDrawSetString(a, pTextSupport[a][2], string); } } } return 0; } } } } } } return 1; }Hallo,
Sorry das ich Privat störe habe ein Problem bei /sup das man nicht antworten kann wen man ein Report annimmt.
das heißt man schreibt ja /sup (Sein Problem) wen der admin den report anngenommen hat das man per /sup antworten kann.
Du hast da relativ weit oben im Code das hier stehen:
if(Spieler[playerid][pReportAktiv] != 0)return SendClientMessage(playerid, COLOR_GREY, "Du bist bereits in einem aktiven Report oder hast ein Ticket erstellt!");
So wie ich das sehe kommst du sobald du ein Ticket erstellt hat nurmehr bis zu dieser Zeile weil er dann ein return macht.
Mach am besten vor "// CREATE SUPPORT TICKET" if(Spieler[playerid][pReportAktiv] == 0) { /** ... Ticket erstellen **/ } dann kommst du auch zu dem unteren Teil.
Du hast da relativ weit oben im Code das hier stehen:if(Spieler[playerid][pReportAktiv] != 0)return SendClientMessage(playerid, COLOR_GREY, "Du bist bereits in einem aktiven Report oder hast ein Ticket erstellt!");
So wie ich das sehe kommst du sobald du ein Ticket erstellt hat nurmehr bis zu dieser Zeile weil er dann ein return macht.
Mach am besten vor "// CREATE SUPPORT TICKET" if(Spieler[playerid][pReportAktiv] == 0) { /** ... Ticket erstellen **/ } dann kommst du auch zu dem unteren Teil.
Meinst du so?
CMD:sup(playerid, params[])
{
new input[90], text[96], string[128];
if(!IsLoggedIn(playerid))return 1;
if(sscanf(params, "s[90]", input))return SendClientMessage(playerid, COLOR_GREY, "Benutze /sup [Nachricht]");
new bool:isOnline;
for(new i=0;i<GetMaxPlayers();i++)
{
if(IsPlayerConnected(i) && Spieler[i][pLoggedIn])
{
if(Spieler[i][pAdmin] > 0)
{
isOnline = true;
}
}
}
if(!isOnline)
{
SendClientMessage(playerid, COLOR_GREY, "Derzeit ist kein Team Mitglied online.");
return 1;
}
if(Spieler[playerid][pReportAktiv] == 0)
{
// CREATE SUPPORT TICKET
if(GetTicketCount() > MAX_REPORTS)return SendClientMessage(playerid, COLOR_GREY, "Die Team Mitglieder haben momentan zuviele Tickets. Schreibe in einigen Minuten ein neues Ticket!");
SendClientMessage(playerid, COLOR_GREEN, "Du hast ein Support-Ticket abgeschickt. Bitte gedulde dich nun einen moment.");
format(string, sizeof(string), "%s hat ein Support-Ticket erstellt! (/areport)", GetName(playerid));
SendAdminMessage(COLOR_GREEN, string);
format(string, sizeof(string), "Support-Ticket: "COLOR_HEX_WHITE"%s", input);
SendClientMessage(playerid, COLOR_GREEN, string);
Spieler[playerid][pReportAktiv] = 1;
new ticket = GetFreeTicket();
gSupport[ticket][ticketCreated] = true;
format(gSupport[ticket][ticketMessage], 90, input);
gSupport[ticket][ticketSender] = playerid;
gSupport[ticket][ticketAdmin] = INVALID_PLAYER_ID;
gSupport[ticket][ticketType] = 1;
format(string, sizeof(string), "Offene Tickets: ~g~%d", GetTicketCount());
for(new i=0;i<GetMaxPlayers();i++)
{
if(IsLoggedIn(i))
{
if(Spieler[i][pAdminDuty] == 1)
{
PlayerTextDrawSetString(i, pTextSupport[i][2], string);
}
}
}
if(Spieler[playerid][pReportAktiv] == 1)
{
for(new i=0;i<MAX_REPORTS;i++)
{
if(gSupport[i][ticketCreated])
{
if(gSupport[i][ticketSender] == playerid && Spieler[playerid][pAdmin] == 0)
{
if(gSupport[i][ticketAdmin] != INVALID_PLAYER_ID)
{
if(IsPlayerConnected(gSupport[i][ticketAdmin]))
{
strdel(text, 0, 1);
format(string, sizeof(string), "{21DD00}(( %s: %s ))", GetName(playerid), text);
SendClientMessage(gSupport[i][ticketAdmin], COLOR_WHITE, string);
SendClientMessage(playerid, COLOR_WHITE, string);
return 0;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "* Dein Gegenüber ist offline. Das Ticket wurde gelöscht.");
gSupport[i][ticketAdmin] = INVALID_PLAYER_ID;
gSupport[i][ticketSender] = INVALID_PLAYER_ID;
gSupport[i][ticketCreated] = false;
gSupport[i][ticketType] = 0;
strdel(gSupport[i][ticketMessage], 0, 90);
return 0;
}
}
}
else if(gSupport[i][ticketAdmin] == playerid && Spieler[playerid][pAdmin] > 0)
{
if(gSupport[i][ticketSender] != INVALID_PLAYER_ID)
{
if(IsPlayerConnected(gSupport[i][ticketSender]))
{
strdel(text, 0, 1);
format(string, sizeof(string), "{21DD00}(( %s: %s ))", GetName(playerid), text);
SendClientMessage(gSupport[i][ticketSender], COLOR_WHITE, string);
SendClientMessage(playerid, COLOR_WHITE, string);
return 0;
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Dein Gegenüber ist offline. Das Ticket wurde gelöscht.");
gSupport[i][ticketAdmin] = INVALID_PLAYER_ID;
gSupport[i][ticketSender] = INVALID_PLAYER_ID;
gSupport[i][ticketCreated] = false;
gSupport[i][ticketType] = 0;
strdel(gSupport[i][ticketMessage], 0, 90);
for(new a=0;a<GetMaxPlayers();a++)
{
if(Spieler[a][pLoggedIn]){
if(Spieler[a][pAdminDuty] == 1)
{
format(string, sizeof(string), "Offene Tickets: ~g~%d", GetTicketCount());
PlayerTextDrawSetString(a, pTextSupport[a][2], string);
}
}
}
return 0;
}
}
}
}
}
}
}
return 1;
}
Alles anzeigen
Kann man Queues in PAWN realisieren? Wuerde damit gerne ein Report/Support/PM System bauen
@Dr. Frauenarzt Jap. Funktioniert?
@Dr. Frauenarzt Jap. Funktioniert?
case DIALOG_AREPORT:
{
if(response)
{
new i = listitem, string[128];
if(!gSupport[i][ticketCreated])return SendClientMessage(playerid, COLOR_GREY, "Das Ticket ist leer, wähle ein anderes aus!");
if(gSupport[i][ticketAdmin] != INVALID_PLAYER_ID)return SendClientMessage(playerid, COLOR_GREY, "Das Ticket wird bereits bearbeitet.");
if(Spieler[playerid][pReportAktiv] == 1)return SendClientMessage(playerid, COLOR_GREY, "Du hast bereits einen aktiven Support!");
format(string, sizeof(string), "Dein Ticket (%s) wurde von %s angenommen.", GetTicketName(gSupport[i][ticketType]), GetName(playerid));
SendClientMessage(gSupport[i][ticketSender], COLOR_GREEN, string);
format(string, sizeof(string), "Wenn du ein "COLOR_HEX_WHITE"!"COLOR_HEX_GREEN" vor deinen Text schreibst, kannst du mit %s schreiben.", GetName(playerid));
SendClientMessage(gSupport[i][ticketSender], COLOR_GREEN, string);
Spieler[playerid][pReportAktiv] = 1;
gSupport[i][ticketAdmin] = playerid;
format(string, sizeof(string), "Ticket von %s (ID: %d): %s", GetName(gSupport[i][ticketSender]), gSupport[i][ticketSender], gSupport[i][ticketMessage]);
SendClientMessage(playerid, COLOR_GREEN, string);
SendClientMessage(playerid, COLOR_GREEN, "Schreibe nun mit ihm, indem du ein "COLOR_HEX_WHITE"!"COLOR_HEX_GREEN" vor den Text setzt.");
SendClientMessage(playerid, COLOR_GREEN, "Mit /creport schließt du das Ticket.");
SendClientMessage(playerid, COLOR_GREEN, "Mit /reportback legst du das Ticket zurück.");
return 1;
}
}
Alles anzeigen
es steht dann das ich in ein Aktiven SUpport bin. wen ich das weg mache also ausklammer und mit /sup antworten möchte geht es nicht
Wo liegt hier der Fehler? Betroffene Zeile markiert.
case DIALOG_TAFELEINSTEXT:
{
if(response)
{
if(strlen(inputtext) && strlen(inputtext) > 60)
{
new string[128];
new wtafel = TafelID[playerid];
new text = strval(inputtext);
if(!IsPlayerInRangeOfPoint(playerid,50.0,Werbetafeln[wtafel][wtafelx],Werbetafeln[wtafel][wtafely],Werbetafeln[wtafel][wtafelz]))return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an der angegebenen Werbetafel!");
format(string,sizeof(string),"Du hast den Text der Werbetafel %i auf '%s' umgeändert.",wtafel,text);
SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
strmid(Werbetafeln[wtafel][wtafeltext],text,0,strlen(text),sizeof(text)); // <-- Fehlerzeile
DestroyDynamicObject(Werbetafelobject[wtafel]);
Werbetafelobject[wtafel] = CreateDynamicObject(Werbetafeln[wtafel][wtafelobjectid],Werbetafeln[wtafel][wtafelx],Werbetafeln[wtafel][wtafely],Werbetafeln[wtafel][wtafelz],Werbetafeln[wtafel][wtafelxrot],Werbetafeln[wtafel][wtafelyrot],Werbetafeln[wtafel][wtafelzrot]);
SetDynamicObjectMaterialText(Werbetafelobject[wtafel],Werbetafeln[wtafel][wtafeltmindex],Werbetafeln[wtafel][wtafeltext],Werbetafeln[wtafel][wtafeltmsize],Werbetafeln[wtafel][wtafeltfonts],Werbetafeln[wtafel][wtafeltfontsize],Werbetafeln[wtafel][wtafeltbold],Werbetafeln[wtafel][wtafeltfontcolor],Werbetafeln[wtafel][wtafeltbackcolor],Werbetafeln[wtafel][wtafeltaligment]);
}
}
}
@Dr. Frauenarzt willst du da dein eigenes Ticket annehmen?
Weil der der das Ticket sendet bekommt die Variable pReportActive auf 1 gesetzt. Und wenn diese auf 1 ist (weil du zum Beispiel gerade ein Ticket gesendet hast) kannst du selbst das Ticket nicht annehmen.
@Speezy du gibst für "new text" keine länge an (zb "new text[28]") was man ja glaub ich in SA:MP machen muss damit das ein String ist oder?