Hallo,ich habe mir ein kleines Hitmansystem gemacht aber es ist buggy...
Der Hitman bekommt sein geld einfach nicht...
ocmd:contract(playerid,params[])
{
new pID, geld;
new string[64], string1[64];
if(!sscanf(params, "ui", pID, geld))
format(string, sizeof(string),"Sie haben auf %s %s$ Kopfgeld gesetzt!",pID,geld);
format(string1, sizeof(string1),"Auf %s wurde %s$ Kopfgeld Gesetzt!",pID,geld);
for(new i=0;i<GetMaxPlayers();i++){
if(IsPlayerConnected(i)){
if(PlayerInfo[i][pMember] == 9){
SendClientMessage(i,GRUEN,string1);
SendClientMessage(playerid,GRUEN,string);
PlayerInfo[pID][pKopfgeld] = geld;
GivePlayerMoney(playerid, -geld);
SpielerSpeichern(pID);
}
}
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new string[128];
format(string, sizeof(string),"Sie wurden von %s Getötet",SpielerName(killerid));
SendClientMessage(playerid,ROT,string);
if(PlayerInfo[killerid][pMember] == 9)
{
if(PlayerInfo[playerid][pKopfgeld] >= 1)
{
new kopfgeld;
kopfgeld = PlayerInfo[playerid][pKopfgeld];
SendClientMessage(killerid,GRUEN,"Auf den Spieler war ein Kopfgeld ausgesetzt");
GivePlayerMoney(killerid, kopfgeld);}}
return 1;
}
Hitmansystem BUGGT
- Mr.Soap
- Geschlossen
- Erledigt
-
-
Du musst das geld ja auch irgendswo Abspeichern oder nicht ?
-
Wird es doch:
stock SpielerSpeichern(playerid)
{
if(GetPVarInt(playerid,"loggedin")==1)
{
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
dini_IntSet(Spielerdatei,"Konto",PlayerInfo[playerid][pKonto]);
dini_IntSet(Spielerdatei,"AdminLevel",PlayerInfo[playerid][pAdmin]);
dini_IntSet(Spielerdatei,"Fraktion",PlayerInfo[playerid][pMember]);
dini_IntSet(Spielerdatei,"Leader",PlayerInfo[playerid][pLeader]);
dini_IntSet(Spielerdatei,"Rank",PlayerInfo[playerid][pRank]);//Rang ist nicht Member
dini_IntSet(Spielerdatei,"Baned",PlayerInfo[playerid][pBan]);
dini_IntSet(Spielerdatei,"Autoschein",PlayerInfo[playerid][pCarlic]);
dini_IntSet(Spielerdatei,"Motorradschein",PlayerInfo[playerid][pBikelic]);
dini_IntSet(Spielerdatei,"Flugschein",PlayerInfo[playerid][pFlylic]);
dini_IntSet(Spielerdatei,"LKW-Schein",PlayerInfo[playerid][pLKWlic]);
dini_IntSet(Spielerdatei,"Kopfgeld",PlayerInfo[playerid][pKopfgeld]);
dini_IntSet(Spielerdatei,"Spawn",PlayerInfo[playerid][pSpawn]);
dini_IntSet(Spielerdatei,"timeban",GetPVarInt(playerid,"timeban"));
dini_IntSet(Spielerdatei,"PayDay",GetPVarInt(playerid,"PayDay")); //dini_IntSet bedeutet das er eine Zahl in die Name.txd datei eintragen soll, in der Zeile PayDay, GetPVar, damit gibt er die Zahl die er dann speichert.
dini_IntSet(Spielerdatei,"Respektpunkte",GetPVarInt(playerid,"Respektpunkte"));//hier das selbe für monate
dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));}
return 1;
} -
-
-
So sieht meins aus:
if(isFraktion(killerid,1))//Wenn der Killer in Hitman ist
{
if(GetPVarInt(playerid,"Belohnung")>1)//Wenn eine Belohnung von über 1$ ausgesetzt wurde //Muss bei dem Befehl gesetzt werden (pID)
{
GivePlayerMoney(killerid,GetPVarInt(playerid,"Belohnung"));//Geld wird bezahlt
SetPVarInt(playerid,"Belohnung",0);//Kopfgeld wird resettet
SendClientMessage(killerid,Grau,"** Auftrag erfolgreich **");//Nachricht
SendClientMessage(playerid,Grau,"** Ein Hitman hat deinen Kopfgeld gelöscht.");//Nachricht
}
} -
Das ist übrigens auch noch falsch.
Wir haben auch einen p(a)wn bbcode.
format(string, sizeof(string),"Sie haben auf %i %i$ Kopfgeld gesetzt!",pID,geld);
format(string1, sizeof(string1),"Auf %i wurde %i Kopfgeld Gesetzt!",pID,geld);
Er ließt nie den Namen aus,daher bringt auch nur die ID etwas.ocmd:contract(playerid,params[])
{
new pID, geld;
new string[64], string1[64];
if(!sscanf(params, "ui", pID, geld))
format(string, sizeof(string),"Sie haben auf %s %s$ Kopfgeld gesetzt!",pID,geld);
format(string1, sizeof(string1),"Auf %s wurde %s$ Kopfgeld Gesetzt!",pID,geld);
for(new i=0;i<GetMaxPlayers();i++){
if(IsPlayerConnected(i)){
if(PlayerInfo[i][pMember] == 9){
SendClientMessage(i,GRUEN,string1);
SendClientMessage(playerid,GRUEN,string);
PlayerInfo[pID][pKopfgeld] = geld;
GivePlayerMoney(playerid, -geld);
SpielerSpeichern(pID);
}
}
}
return 1;
}
Wozu ist dort die Schleife gut ? Zumindest sollten folgende Instruktionen nicht in der Schleife passieren:
PlayerInfo[pID][pKopfgeld] = geld;
GivePlayerMoney(playerid, -geld);
SpielerSpeichern(pID);
Das Kopfgeld wird eigentlich immer erhöht und nicht fest gesetzt.
Setzt du auf einen Spieler ein Kopfgeld von 10000$ und ich danach auf 50$,wird dein Kopfgeld überschrieben. Ist sicherlich nicht Sinn der Sache.
Bevor du bei OnPlayerDeath mit der Variable killerid arbeiten möchtest,solltest du sie auf INVALID_PLAYER_ID überprüfen. Es besteht ja die Möglichkeit,dass es ein Selbstmord war.
Ich weiss auch nicht was folgendes bewirken soll:
if(!sscanf(params, "ui", pID, geld))
Du brichst dort den Befehl nicht mal ab,falls es falsche Eingaben gab. Genau genommen überprüfst du auf nichts. -
Gold.. die Schleife ist für die Meldung aller Hitmans
-
Naja, Team/Fraktionsnachrichten würde ich durch eine extra Funktion schicken lassen. Habe ja geschrieben was in der Schleife keinen Sinn macht:
Zitat
for(new i=0;i<GetMaxPlayers();i++){
if(IsPlayerConnected(i)){
if(PlayerInfo[i][pMember] == 9){
SendClientMessage(i,GRUEN,string1);
SendClientMessage(playerid,GRUEN,string); // <-- das hier ( ist mir erst jetzt aufgefallen )
PlayerInfo[pID][pKopfgeld] = geld; // <-- das
GivePlayerMoney(playerid, -geld); // <-- das
SpielerSpeichern(pID); // <-- das
}
}
} -
breadfish.de
Hat das Thema geschlossen.