Beitrag von malE ()
Dieser Beitrag wurde vom Autor gelöscht ().
Können zwei oder mehr verschiedene Aufträge auf einen Spieler angesetzt werden?
Man kann soviel Kopfgeld auf ein Spieler setzen wie man lustig ist, solange bei dem Spieler die Variable PlayerInfo[pID][p_Kopfgeld] nicht über 100000 ist.
Da z.B die Abfrage bei dem Befehl /kopfgeld
Das ist mir klar, nur wenn Spieler A 10k setzt und Spieler B 20k setzt, und Spieler C und D jeweils den Auftrag annehmen, geht das, oder darf es nur einen Spieler geben, der einen Auftrag auf den Spieler annehmen kann?
Achso. Ne es soll nur einen erlaubt sein den Auftrag anzunehmen.
Aber mehrere Spieler dürfen einen Hitman auf denselben Spieler setzen?
Tschuldigung aber ich verstehe die Frage nicht.
Angenommen Spieler A setzt 10k auf Spieler B. Darf nun Spieler C auch nochmal 10k auf Spieler B setzen? Wenn ja, darf er das auch noch, nachdem Spieler D den Auftrag angenommen hat, oder nur solange, bis jemand den Auftrag angenommen hat?
Nur solange bis Spieler B von einem Hitmen Mitglied angenommen wurde.
ocmd:kopfgeld(playerid, params[])
{
new kopfgeld;
if(sscanf(params, "ud", pID, kopfgeld))return SendClientMessage(playerid, COLOR_GREY, "Benutze: /kopfgeld [Spieler-ID] [Kopfgeld]");
if(!IsPlayerConnected(pID) || PlayerInfo[pID][p_LoggedIn] == false)return SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist Offline.");
if(kopfgeld < 3500)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dem Spieler kein Kopfgeld unter $3.500 geben.");
if(kopfgeld > 100000)return SendClientMessage(playerid, COLOR_GREY, "Du kannst dem Spieler kein Kopfgeld über $100.000 geben.");
if(PlayerInfo[pID][p_Kopfgeld] + kopfgeld > 100000)return SendClientMessage(playerid, COLOR_GREY, "Das Kopfgeld vom Spieler darf nicht über $100.000 liegen.");
if(PlayerInfo[pID][p_KopfgeldID] != -1) return SendClientMessage(playerid, COLOR_GREY, "Auf diesen Spieler hat bereits jemand einen Auftrag angenommen.");
PlayerInfo[pID][p_Kopfgeld] = PlayerInfo[pID][p_Kopfgeld] +kopfgeld;
new str[145];
for(new i=0; i < MAX_PLAYERS; i++)
{
format(str, sizeof(str), "%s hat ein neuen Auftrag abgegeben.", GetName(playerid));
SendClientMessage(i, COLOR_BROWN, str);
}
SendClientMessage(playerid, COLOR_LIGHTBLUE, "[SERVICE] Dein Auftrag wurde an die Hitmen Agency weitergeleitet.");
return 1;
}
ocmd:kopfgelder(playerid, params[])
{
if(PlayerInfo[playerid][p_AuftragID] != -1) return SendClientMessage(playerid, COLOR_GREY, "Du hast bereits einen Auftrag angenommen.");
new str[145];
for(new i=0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) && PlayerInfo[i][p_LoggedIn] != true)continue;
if(PlayerInfo[i][p_Kopfgeld] > 0 && PlayerInfo[i][p_KopfgeldID] == -1)
{
format(str, sizeof(str), "Spieler: %s - ID: %d - Kopfgeld: %d\n%s", GetName(i), i, PlayerInfo[i][p_Kopfgeld], str);
ShowPlayerDialog(playerid, DIALOG_KOPFGELDER, DIALOG_STYLE_LIST, "Kopfgelder", str, "Annehmen", "Schließen");
}
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_KOPFGELD)
{
new counter = -1;
if(!response) return 1;
for(new i=0; i < MAX_PLAYERS; i++)
{
if(PlayerInfo[i][p_Kopfgeld] > 0 && PlayerInfo[i][p_KopfgeldID] == -1)
{
counter++;
if(counter == listitem)
{
new str[145];
format(str, sizeof(str), "Du hast %s für $%d angenommen, erledige ihn!", GetName(i), PlayerInfo[i][p_Kopfgeld]);
SendClientMessage(playerid, 0x8D2705FF, str);
format(str, sizeof(str), "** ( Hitmen %s hat %s für $%d angenommen )**", GetName(playerid), GetName(i), PlayerInfo[i][p_Kopfgeld]);
SendFraktionsMessage(11, 0x8D2705FF, str);
PlayerInfo[i][p_KopfgeldID] = playerid;
PlayerInfo[playerid][p_AuftragID] = i;
break;
}
}
}
return 1;
}
return 0;
}
Alles anzeigen
Als neue enum-Felder brauchst du dann:
Bei OnPlayerConnect bzw. beim Login musst du beide auf -1 setzen.
PlayerInfo[playerid][p_Kopfgeld] = 0;
PlayerInfo[playerid][p_AuftragID] = -1;
PlayerInfo[playerid][p_KopfgeldID] = -1;
Bei OnPlayerDisconnect:
if(PlayerInfo[playerid][p_KopfgeldID] != -1)
{
//Auftragnehmer informieren, wenn Opfer den Server verlässt.
new pID = PlayerInfo[playerid][p_KopfgeldID];
new str[145];
format(str, sizeof(str), "%s ist offline gegangen!", GetName(playerid));
SendClientMessage(pID, 0x8D2705FF, str);
PlayerInfo[pID][p_AuftragID] = -1;
}
if(PlayerInfo[playerid][p_AuftragID] != -1)
{
//Opfer wieder in die Liste setzen, wenn Auftragnehmer den Server verlässt.
new pID = PlayerInfo[playerid][p_AuftragID];
PlayerInfo[pID][p_KopfgeldID] = -1;
}
Alles anzeigen
Bei OnPlayerDeath:
if(killerid != INVALID_PLAYER_ID)
{
if(PlayerInfo[playerid][p_KopfgeldID] == killerid)
{
new str[145];
format(str, sizeof(str), "Du hast %s getötet und bekommst $%d!", GetName(playerid), PlayerInfo[playerid][p_Kopfgeld]);
SendClientMessage(killerid, 0x8D2705FF, str);
GivePlayerMoney(killerid, PlayerInfo[playerid][p_Kopfgeld]);
PlayerInfo[killerid][p_AuftragID] = -1;
PlayerInfo[playerid][p_Kopfgeld] = 0;
PlayerInfo[playerid][p_KopfgeldID] = -1;
}
}
Alles anzeigen
Ein return 1, sonst kommt, dass der Befehl nicht existiert.
ocmd:kopfgelder(playerid, params[])
{
if(PlayerInfo[playerid][p_AuftragID] != -1) return SendClientMessage(playerid, COLOR_GREY, "Du hast bereits einen Auftrag angenommen.");
new str[145];
for(new i=0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) && PlayerInfo[i][p_LoggedIn] != true)continue;
if(PlayerInfo[i][p_Kopfgeld] > 0 && PlayerInfo[i][p_KopfgeldID] == -1)
{
format(str, sizeof(str), "Spieler: %s - ID: %d - Kopfgeld: %d\n%s", GetName(i), i, PlayerInfo[i][p_Kopfgeld], str);
ShowPlayerDialog(playerid, DIALOG_KOPFGELDER, DIALOG_STYLE_LIST, "Kopfgelder", str, "Annehmen", "Schließen");
}
}
return 1;
}
Alles anzeigen
Habe es oben auch hinzugefügt.
Alles klar danke! Nachdem ich es nachher getestet habe, werde ich das Thema als erledigt markieren.