Hitmansystem BUGGT

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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;
    }

  • 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;
    }




  • Oben bei ocmd:contract solltest du auch mal das Geld als integer machen und nicht als string.

    PHP
    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);


    daraus sollte das werden:

    PHP
    format(string, sizeof(string),"Sie haben auf %s %i$ Kopfgeld gesetzt!",pID,geld);
    format(string1, sizeof(string1),"Auf %s wurde %i Kopfgeld Gesetzt!",pID,geld);
  • 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
    }
    }

  • Oben bei ocmd:contract solltest du auch mal das Geld als integer machen und nicht als string.

    PHP
    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);


    daraus sollte das werden:

    PHP
    format(string, sizeof(string),"Sie haben auf %s %i$ Kopfgeld gesetzt!",pID,geld);
    format(string1, sizeof(string1),"Auf %s wurde %i Kopfgeld Gesetzt!",pID,geld);


    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 :)

    Falsche Freunde: Fragen nach Kippen !
    Wahre Freunde: Sind der Grund, warum du keine Kippen hast !
    Falsche Freunde: Nennen deine Eltern Frau/Herr !
    Wahre Freunde: Nennen deine Eltern Mom/Dad !
    Falsche Freunde: Holen dich aus dem Knast und sagen dir, was getan hast, war falsch !
    Wahre Freunde: Sitzen in der Zelle neben dir und sagen: Scheiße...wir haben‘s verkackt...war aber verdammt lustig ! :P
    Falsche Freunde: Haben dich noch nie weinen sehen !
    Wahre Freunde: Weinen mit dir !
    Falsche Freunde: Werden dich stehen lassen, wenn die Menge das tut !
    Wahre Freunde: Werden der kompletten Menge den Arsch treten, die dich stehen gelassen hat ! c:
    Falsche Freunde: Bleiben für ne Weile !
    Wahre Freunde: Bleiben ein Leben lang !
    Falsche Freunde: Werden die Person, die Scheiße über dich erzählt, blöd vollabern !
    Wahre Freunde: Werden sie einfach ausknocken !
    Falsche Freunde: Werden das hier ignorieren !
    Wahre Freunde: Es Kopieren !

  • Naja, Team/Fraktionsnachrichten würde ich durch eine extra Funktion schicken lassen. Habe ja geschrieben was in der Schleife keinen Sinn macht: