Contract funkt. nicht

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
  • Beitrag von The Sensei ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: sry verkuckt ().
  • Hallo leute
    ich habe ein Problem
    undzwar der contract befehl geht eing. schon gut aber er wird nicht gespeichert es kommen nur die bei den nachrichten Du hast einem Hitman den Auftrag zur Beseitigung von test für $10000000 erteilt und
    [INFO] Auftragsänderung | Zielperson: Test | Neues Kopfgeld: $10000000
    @Jeffry

    ocmd:contract(playerid,params[])
    {
    new pID,Menge,playername[MAX_PLAYER_NAME],string[400];
    if(sscanf(params,"ui",pID,Menge)) return SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /contract [PlayerID/PlayerName] [Kopfgeldmenge]");
    if(Menge < 10000 || Menge > 10000000) { SendClientMessage(playerid, COLOR_GREY, " Die Vertragssumme muss mindestens $10000, aber nicht mehr als $10000000 betragen!"); return 1; }
    if(!IsPlayerLoggedIn(pID)) return SendClientMessage(playerid, COLOR_GRAD2, "Der Spieler ist nicht Online!");
    if(GetPlayerMoney(playerid) >= Menge)
    {
    if(PlayerInfo[playerid][pLevel] < 3)return SendClientMessage(playerid, COLOR_GRAD1, "Du musst mindestens Level 3 haben, um einen Auftrag zu erstellen.");
    if(PlayerInfo[pID][pLevel] < 3)return SendClientMessage(playerid, COLOR_GRAD1, "Die Person, die du in Auftrag geben möchtest, steht noch unter Neulingsschutz!");
    if(GetPlayerFaction(playerid) == 8)return SendClientMessage(playerid, COLOR_GRAD1, "Hitmans können keine Aufträge geben.");
    if(pID == playerid) { SendClientMessage(playerid, COLOR_GREY, "Du kannst dich nicht selber unter Vertrag nehmen!"); return 1; }
    if(IsPlayerOnContractList(pID) != -1)
    {
    new i = IsPlayerOnContractList(pID);
    GetPlayerName(pID,playername,sizeof playername);
    GivePlayerMoney(playerid, -Menge);
    Contracts[i][cMenge]+=Menge;
    format(string, sizeof(string), "* Du hast einem Hitman den Auftrag zur Beseitigung von %s für $%d erteilt.",playername, Menge);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "[INFO] Auftragsänderung | Zielperson: %s | Neues Kopfgeld: $%d",playername, Contracts[i][cMenge]);
    SendFamilyMessage(8, COLOR_YELLOW, string);
    }
    else
    {
    if(GetFreeConSlot() != -1)
    {
    new i = GetFreeConSlot();
    GetPlayerName(pID,playername,sizeof playername);
    GivePlayerMoney(playerid, -Menge);
    Contracts[i][cMenge]=Menge;
    format(Contracts[i][cName],32,"%s",playername);
    format(string, sizeof(string), "* Du hast einem Hitman den Auftrag zur Beseitigung von %s für $%d erteilt.",playername, Menge);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "[INFO] Neuer Auftrag | Zielperson: %s | Kopfgeld: $%d",playername, Menge);
    SendFamilyMessage(8, COLOR_YELLOW, string);
    }
    else SendClientMessage(playerid,COLOR_RED,"Im Moment können keine Aufträge mehr angenommen werden. Versuche es später noch einmal!");
    }
    }
    else SendClientMessage(playerid,COLOR_RED,"Soviel Geld hast du nicht auf der Hand!");
    return 1;
    }

    Einmal editiert, zuletzt von TimeLine ()

  • Also erstmal kannst Du das was bei GetFreeConSlot() rauskommt in Zeile 26 eine Zeile weiter drueber in einer Variable speichern und dann diese Variable in Zeile 26 und 28 verwenden um einfach das doppelte durchlaufen von irgendeiner Schleife zu sparen.


    Zum eigentlichen Problem: Wir brauchen die Stelle wo der Contract gespeichert wird. Der Contract Befehl nuetzt mir recht wenig wenn das Problem am Speichern liegt.

  • Also erstmal kannst Du das was bei GetFreeConSlot() rauskommt in Zeile 26 eine Zeile weiter drueber in einer Variable speichern und dann diese Variable in Zeile 26 und 28 verwenden um einfach das doppelte durchlaufen von irgendeiner Schleife zu sparen.


    Zum eigentlichen Problem: Wir brauchen die Stelle wo der Contract gespeichert wird. Der Contract Befehl nuetzt mir recht wenig wenn das Problem am Speichern liegt.

    meinst du dieses ?

    stock SaveContract(ccID)
    {
    new queryy[1049];
    format(queryy,sizeof(queryy),"UPDATE `contracts` SET `Name` = '%s', `Menge` = '%d' WHERE `ID` = '%d'",Contracts[ccID][cName],Contracts[ccID][cMenge],ccID);
    mysql_query(queryy);
    return 1;
    }

  • Wo wird SaveContract ausgeführt?

    Hier glaub ich :(

    if(dialogid == DIALOG_CONTRACTS_2)
    {
    if(response)
    {
    switch(listitem)
    {
    case 0:
    {
    if(IsPlayerNameOnline(Contracts[UsedConSlot[playerid]][cName]) == -1)
    {
    ShowPlayerContractList(playerid);
    SendClientMessage(playerid,COLOR_RED,"Dieser Spieler ist zurzeit nicht Online!");
    return 1;
    }
    Contracts[UsedConSlot[playerid]][cBearbeitet]=playerid;
    UseContract[playerid]=UsedConSlot[playerid];
    new stringg[400];
    format(stringg,sizeof stringg,"{FF8200}[CONTRACT]{FFFFFF} Du hast den {FF8200}Auftrag{FFFFFF}, den Spieler {FF8200}%s{FFFFFF} für {FF8200}$%d{FFFFFF} zu töten!",Contracts[UsedConSlot[playerid]][cName],Contracts[UsedConSlot[playerid]][cMenge]);
    SendClientMessage(playerid,COLOR_WHITE,stringg);
    }
    case 1:
    {
    if(IsPlayerNameOnline(Contracts[UsedConSlot[playerid]][cName]) == -1)
    {
    Contracts[UsedConSlot[playerid]][cMenge]=0;
    Contracts[UsedConSlot[playerid]][cBearbeitet]=-1;
    format(Contracts[UsedConSlot[playerid]][cName],32,"Keiner");
    SaveContract(UsedConSlot[playerid]);
    UseContract[playerid]=-1;
    UsedConSlot[playerid]=-1;
    SendClientMessage(playerid,COLOR_WHITE,"{FF8200}[CONTRACT]{FFFFFF} Du hast den {FF8200}Auftrag{FFFFFF} erfolgreich {FF8200}gelöscht{FFFFFF}!");
    return 1;
    }
    if(UseContract[playerid] != UsedConSlot[playerid])
    {
    ShowPlayerContractList(playerid);
    SendClientMessage(playerid,COLOR_RED,"Du kannst den Auftrag nur löschen, wenn du ihn selbst ausführst!");
    return 1;
    }
    Contracts[UsedConSlot[playerid]][cMenge]=0;
    Contracts[UsedConSlot[playerid]][cBearbeitet]=-1;
    format(Contracts[UsedConSlot[playerid]][cName],32,"Keiner");
    SaveContract(UsedConSlot[playerid]);
    UseContract[playerid]=-1;
    UsedConSlot[playerid]=-1;
    SendClientMessage(playerid,COLOR_WHITE,"{FF8200}[CONTRACT]{FFFFFF} Du hast den {FF8200}Auftrag{FFFFFF} erfolgreich {FF8200}gelöscht{FFFFFF}!");
    }
    }
    }
    else
    {
    ShowPlayerContractList(playerid);
    }
    }
    if(dialogid == DIALOG_CONTRACTS_1)
    {
    if(response)
    {
    UsedConSlot[playerid]=listitem;
    if(!strcmp(Contracts[listitem][cName],"Keiner",true))
    {
    ShowPlayerContractList(playerid);
    SendClientMessage(playerid,COLOR_RED,"Dieser Slot ist zurzeit nicht benutzt! Wähle einen anderen!");
    return 1;
    }
    /*if(IsPlayerNameOnline(Contracts[listitem][cName]) == -1)
    {
    ShowPlayerContractList(playerid);
    SendClientMessage(playerid,COLOR_RED,"Dieser Spieler ist zurzeit nicht Online!");
    return 1;
    }*/
    if(Contracts[listitem][cBearbeitet] != -1 && UseContract[playerid] != listitem)
    {
    SendClientMessage(playerid,COLOR_RED,"Dieser Auftrag wird bereits von einem Hitman bearbeitet!");
    ShowPlayerContractList(playerid);
    return 1;
    }
    if(UseContract[playerid] != -1 && UseContract[playerid] != listitem)
    {
    SendClientMessage(playerid,COLOR_RED,"Bitte kümmere dich erst um deinen eigenen Auftrag!");
    ShowPlayerContractList(playerid);
    return 1;
    }
    if(UseContract[playerid] != -1 && UseContract[playerid] != listitem)
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast deinen Auftrag Abgebrochen und kannst andere Bearbeiten!");
    ShowPlayerContractList(playerid);
    Contracts[UsedConSlot[playerid]][cBearbeitet]=-1;
    SaveContract(UsedConSlot[playerid]);
    UseContract[playerid]=-1;
    return 1;
    }
    ShowPlayerDialog(playerid,DIALOG_CONTRACTS_2,DIALOG_STYLE_LIST,"Auftrag Menü","Auftrag ausführen\nAuftrag löschen\nAuftrag Abbrechen","Nehmen","Zurueck");
    }
    }

    if(dialogid == DIALOG_CONTRACTS)
    {
    if(response)
    {
    switch(listitem)
    {
    case 0:
    {
    ShowPlayerContractList(playerid);
    }
    case 1:
    {
    ShowPlayerDialog(playerid,DIALOG_CONTRACTS_3,DIALOG_STYLE_LIST,"Bestellungsliste","(1) ($5000) Deagle (200 Schuss)\n(2) ($7500) Shotgun (100 Schuss)\n(3) ($15000) M4 (500 Schuss)\n(4) ($15000) AK47 (500 Schuss)\n(5) ($9500) MP5 (1000 Schuss)\n(6) ($50000) Scharfschützengewehr (100 Schuss)\n(7) ($15000) Messer\n(7) ($2500) Rüstung\n(9) ($75000) Komplette Ausrüstung","Bestellen","Zurueck");
    }
    }
    }
    }
    if(dialogid == DIALOG_CONTRACTS_3)
    {
    if(response)
    {
    if(GetPlayerMoney(playerid) < PaketKosten[listitem+1][pkKosten]) return SendClientMessage(playerid,COLOR_RED,"Soviel Geld hast du nicht auf der Hand!");
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Du hast ein Packet angefordert. Es wird an deinem Hauptquatier abgeliefert.");
    WaffenBestellt[playerid] = listitem+1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_CONTRACTS,DIALOG_STYLE_LIST,"Hitman Dialog","Aufträge\nBestellungen","Weiter","Beenden");
    }
    }