Entschuldige, womöglich ist ein Fehler drinnen. Ich hab nur leider grad keine Zeit es durchzutesten, aber von der Logik her stimmt es. Solltest du weitere Fragen haben oder Probleme mit dem Code, einfach schreiben.
// SetPVarString(giveplayerid, "PlayerTicketStrafe", strafe);
// SetPVarString(giveplayerid, "PlayerTicketGrund", grund);
#include <a_samp>
#include <ocmd>
#include <sscanf2>
#define TICKET_DISTANCE 25.0
// Farben
#define COLOR_GREY (0xAFAFAFAA)
#define COLOR_GREEN (0x33AA33AA)
#define COLOR_RED (0xAA3333AA)
#define COLOR_ORANGE (0xFF9900AA)
#define COLOR_LIGHTRED (0xFF6347AA)
#define COLOR_BLUE (0x33CCFFAA)
#define COLOR_LIGHTBLUE (0x33CCFFAA)
#define COLOR_LIGHTGREEN (0x9ACD32AA)
#define COLOR_YELLOW (0xFFFF00AA)
#define COLOR_WHITE (0xFFFFFFAA)
ocmd:accept(playerid, params[])
{
new new_params[128],
error[128];
// --- AB HIER KOMPLIZIERTE (eigentlich nicht) ABFRAGE NACH EINEM ZWISCHEN PARAMTER ---
// Finde in den Paramter das erste Leerzeichen
if(strfind(params," ",false)!=-1) {
// Lagere ab dem Leerzeichen die Parameter in 'new_params'
strmid(new_params,params,strfind(params, " ", false)+1,strlen(params));
// Lösche von 'params' alle Parameter, bis auf den ersten
strdel(params,strfind(params, " ", false),strlen(params));
}
// Wenn keine Paramtereingabe erfolgt ist...
if(strlen(params) < 1) {
SendClientMessage(playerid,COLOR_GREY,"VERWENDUNG: /accept [Objekt]");
return SendClientMessage(playerid,COLOR_GREY,"* Mögliche Objekte: ticket");
}
// Wenn die Option 'ticket' gewählt worden ist
if(!strcmp(params,"ticket",true)) {
new price = GetPVarInt(playerid,"PlayerTicketPrice"),
copid = GetPVarInt(playerid,"PlayerTicketCopID"),
Float:PlayerPos[3],
grund[32],
copname[MAX_PLAYER_NAME],
playername[MAX_PLAYER_NAME];
GetPlayerName(copid,copname,MAX_PLAYER_NAME); // Lagere Namen vom Wachmann
GetPlayerName(playerid,playername,MAX_PLAYER_NAME); // Lagere Namen von Spieler, der das Ticket bezahlen muss
GetPVarString(playerid,"PlayerTicketGrund",grund,sizeof(grund)); // Lagere den Grund für das Ticket
GetPlayerPos(playerid,PlayerPos[0],PlayerPos[1],PlayerPos[2]); // Speichere die Position vom Spieler, der das Ticket bezahlen muss
// Wenn beim Spieler kein Ticketpreis gespeichert ist, so muss er auch kein Ticket zahlen, oder? >:D
if(price < 0) format(error,sizeof(error)," Sie haben keinen Ticket erhalten, zum bezahlen...");
// Wenn der Wachmann nicht mehr am Server ist, so sei kulant und lösche das Ticket
if(!IsPlayerConnected(copid)) {
format(error,sizeof(error)," Der Wachmann ist nicht mehr auf dem Server, weßhalb Ihr Ticket gelöscht wird...");
DeletePVar(playerid,"PlayerTicketPrice");
}
// Wenn der Wachmann nicht in der Nähe ist...
if(!IsPlayerInRangeOfPoint(playerid,TICKET_DISTANCE,PlayerPos[0],PlayerPos[1],PlayerPos[2])) format(error,sizeof(error)," Sie sind nicht in der Nähe vom Wachmann %s(%d)...", copname, copid);
// Wenn der Spieler das Geld Bar nicht aufbringen kann
if(GetPlayerMoney(playerid) < price) format(error,sizeof(error)," Sie haben keine %d$ um das Ticket zu bezahlen...", price);
GivePlayerMoney(playerid,-price); // Ziehe das Ticketpreis vom Spieler, der das Ticket bezahlen muss (Logisch oder? xD)
GivePlayerMoney(copid,price); // Gebe dem Wachmann den Ticketpreis (Schmiergeld)
// Ausgabe der Meldung für den gewählten Spieler (Wer? Wieviel? Warum?)
format(error,sizeof(error),"* Spieler %s(%d) hat das Ticket von %d$ mit dem Grund %s bezahlt.", playername, playerid, price, grund);
SendClientMessage(copid,COLOR_ORANGE,error);
SendClientMessage(copid,COLOR_WHITE,"INFO: Schreiben Sie (/accept ticket) um das Ticket zu bezahlen.");
// Ausgabe der Meldung für den Wachmann, der diesen Befehl ausführt (Wer? Wieviel? Warum?)
format(error,sizeof(error),"* Sie haben dem Wachmann %s(%d) das Ticket um %d$ für den Grund '%s' bezahlt.", copname, copid, price, grund);
SendClientMessage(playerid,COLOR_ORANGE,error);
return 1;
}
// Fehlermeldung, wenn der Parameter nicht mit einem vorhandenen übereinstimmt
SendClientMessage(playerid,COLOR_GREY,"VERWENDUNG: /accept [Objekt]");
SendClientMessage(playerid,COLOR_GREY,"* Mögliche Objekte: ticket");
return true;
}
ocmd:ahelp(playerid,params[])
{
new giveplayerid,
grund[32], // string, wo der Grund eingelagert wird
Float:PlayerPos[3], // array für Positionsablagerung
error[128], // string, wo der fehler vorhanden ist (wenn es einen gibt)
giveplayername[MAX_PLAYER_NAME], // name vom gewählten spieler
playername[MAX_PLAYER_NAME], // name vom spieler, der diesen Befehl ausführt
price; // variable für ticketpreis
// Empfangen der eingegeben Paramter über 'sscanf'
if(!sscanf(params,"uds[32]",giveplayerid,price,grund)) return SendClientMessage(playerid,COLOR_GREY,"VERWENDUNG: /ticket [SpielerID/Name] [TicketPreis] [Grund]");
// Allgemeine Abfrage-Informationen
GetPlayerPos(playerid,PlayerPos[0],PlayerPos[1],PlayerPos[2]); // Position vom Spieler, der diesen Befehl ausführt
GetPlayerName(playerid,playername,MAX_PLAYER_NAME); // Name von Spieler, der diesen Befehl ausführt
GetPlayerName(giveplayerid,giveplayername,MAX_PLAYER_NAME); // Name von gewählten Spieler (giveplayerid)
// Sofern der gewählte Spieler nicht verbunden ist...
if(!IsPlayerConnected(giveplayerid)) format(error,sizeof(error)," Spieler ist nicht mit dem Server verbunden...");
// Sofern der gewählte Spieler nicht in der Nähe vom Spieler (der diesen Befehl ausführt) ist
if(!IsPlayerInRangeOfPoint(giveplayerid,TICKET_DISTANCE,PlayerPos[0],PlayerPos[1],PlayerPos[2])) format(error,sizeof(error)," Spieler %s(%d) ist nicht in Ihrer Nähe...", giveplayername, giveplayerid);
// Sofern der gewählte Spieler bereits einen Ticket bezahlen muss...
if(GetPVarInt(giveplayerid,"PlayerTicketPrice") > 0) format(error,sizeof(error)," Spieler %s(%d) muss bereits eine Ticketstrafe von %d$ bezahlen...", giveplayername, giveplayerid, GetPVarInt(giveplayerid,"PlayerTicketPrice"));
// Wenn der string-'error' einen Inhalt (Fehler) enthält, so gebe Ihn aus und brich den Befehl ab.
if(strlen(error)) {
return SendClientMessage(playerid,COLOR_GREY,error); // Ausgabe der Fehlermeldung
}
SetPVarInt(giveplayerid,"PlayerTicketPrice",price); // Speichere den Ticketpreis für den gewählten Spieler (giveplayerid)
SetPVarString(giveplayerid,"PlayerTicketGrund",grund); // Speichere den Ticketgrund für den gewählten Spieler (giveplayerid)
// Ausgabe der Meldung für den gewählten Spieler (Wer? Wieviel? Warum?)
format(error,sizeof(error),"* Wachmann %s(%d) schreibt Ihnen ein Ticket von %d$ mit dem Grund %s.", playername, playerid, price, grund);
SendClientMessage(giveplayerid,COLOR_ORANGE,error);
SendClientMessage(giveplayerid,COLOR_WHITE,"INFO: Schreiben Sie (/accept ticket) um das Ticket zu bezahlen.");
// Ausgabe der Meldung für den Wachmann, der diesen Befehl ausführt (Wer? Wieviel? Warum?)
format(error,sizeof(error),"* Sie haben %s(%d) ein Ticket um %d$ für den Grund '%s' geschrieben.", giveplayername, giveplayerid, price, grund);
SendClientMessage(playerid,COLOR_ORANGE,error);
return 1;
}
//EDIT: Habe es nun mim Compiler getestet und Fehler ausgemerzt.