Bei Repair mit Dialog antworten.

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
  • Hey, ich habe ein kleines Problem mit dem Dialog:


    ocmd:repair(playerid,params[])
    {
    new pID,Preis,string[128];
    new Float:x,Float:y,Float:z;
    if(isPlayerJob(playerid,1))
    {
    if(sscanf(params,"ui",pID,Preis)) return SendClientMessage(playerid,blau,"Benutze: /repair [ID/Name] [Preis]");
    if(IsPlayerInVehicle(playerid,552))//Wenn er im MechaCar ist
    {
    GetPlayerPos(playerid,x,y,z);
    if(IsPlayerInRangeOfPoint(pID,5,x,y,z))//Ob der Spieler in der Nähe des Mechanikers ist
    {
    format(string,sizeof(string),"%s hat dir eine Anfrage zum Repairen gegeben.\nDer Preis beträgt %i.",SpielerName(playerid),Preis);
    ShowPlayerDialog(pID,DIALOG_REPAIR,DIALOG_STYLE_MSGBOX,"Repair-Anfrage",string,"Annehmen","Ablehnen");
    }
    else SendClientMessage(playerid,rot,"Der Spieler ist nicht in deiner Nähe.");
    }
    else SendClientMessage(playerid,rot,"Du bist nicht im Mechaniker Wagen.");
    }
    else SendClientMessage(playerid,rot,"Du bist kein Mechaniker!");
    return 1;
    }


    Wenn der Player diesesn Command macht, soll der Spieler der Angefragt wird den Dialog bekommen.
    Wenn er es annimmt soll der Spieler das Geld bekommen, sowie eine Message, der Spieler der die Anfrage bekommt nur eine Message.
    Sollte der Angefragte die Anfrage jedoch verneinen sollen beide eine Message bekommen.


    MfG


    Andre_R

    Back to the roots!

  • Ja, es wird dem anderem Spieler den Dialog angezeigt,


    aber man kann es ja nicht machen, bei OnDialogResponse, das wenn man den Dielog bekommt dass die Person, die den /repair gemacht hat das Geld und die Message bekommt, oder=?

    Back to the roots!

  • Wie der vorposter gesagt hat kann man das, du musst nur die nötigen informationen speichern.

    //Oben zu den anderen
    new MechanikerID[MAX_PLAYERS];
    new NutzungsPreis[MAX_PLAYERS];
    //unter ShowPlayerDialog
    //der User mit der playerid (also der der den Dienst anbietet) wird für den nutzer pID der es annehmen muss gespeichert.
    MechanikerID[pID] = playerid;
    NutzungsPreis[pID] = Preis;
    //Unter DialogResponse
    if(dialogid == DIALOG_REPAIR && response == 1) //Annehmen
    {
    GivePlayerMoney(playerid,-NutzungsPreis[playerid]);
    GivePlayerMoney(MechanikerID[playerid],NutzungsPreis[playerid]);
    //Nachricht das er angenommen hat an den Mechaniker:
    SendClientMessage(MechanikerID[playerid],Farbe," ");
    //An den User normal mit playerid
    //RepairKram,was auch immer du da willst
    }
    else if(dialogid == DIALOG_REPAIR && response == 0) //Abgelehnt
    {
    //Nachricht das er abgelehnt hat an den Mechaniker:
    SendClientMessage(MechanikerID[playerid],Farbe," ");
    //An den User normal mit playerid
    }

  • Okay, teste ich gleich, würde es vlt. auch so per PVar gehen?


    ocmd:repair(playerid,params[])
    {
    new pID,Preis,string[128];
    new Float:x,Float:y,Float:z;
    if(isPlayerJob(playerid,1))
    {
    if(sscanf(params,"ui",pID,Preis)) return SendClientMessage(playerid,blau,"Benutze: /repair [ID/Name] [Preis]");
    if(IsPlayerInVehicle(playerid,552))//Wenn er im MechaCar ist
    {
    GetPlayerPos(playerid,x,y,z);
    if(IsPlayerInRangeOfPoint(pID,5,x,y,z))//Ob der Spieler in der Nähe des Mechanikers ist
    {
    SetPVarInt(pID,"MechaPerson",playerid);
    SetPVarInt(pID,"MechaPreis",Preis);
    format(string,sizeof(string),"%s hat dir eine Anfrage zum Repairen gegeben.\nDer Preis beträgt %i $.",SpielerName(playerid),Preis);
    ShowPlayerDialog(pID,DIALOG_REPAIR,DIALOG_STYLE_MSGBOX,"Repair-Anfrage",string,"Annehmen","Ablehnen");
    }
    else SendClientMessage(playerid,rot,"Der Spieler ist nicht in deiner Nähe.");
    }
    else SendClientMessage(playerid,rot,"Du bist nicht im Mechaniker Wagen.");
    }
    else SendClientMessage(playerid,rot,"Du bist kein Mechaniker!");
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REPAIR)
    {
    new pID = GetPVarInt(playerid,"MechaPerson");
    new Preis = GetPVarInt(playerid,"MechaPreis");
    if(response==0)
    {
    SendClientMessage(playerid,blau,"Du hast das Angebot abgelehnt.");
    SendClientMessage(pID,blau,"Der Spieler hat dein Angebot abgelehnt.");
    DeletePVar(playerid,"MechaPerson");
    DeletePVar(playerid,"MechaPreis");
    }
    if(response==1)
    {
    new vehid = GetPlayerVehicleID(playerid);
    SendClientMessage(playerid,gruen,"Du hast das Angebot angenommen.");
    SendClientMessage(pID,gruen,"Der Spieler hat dein Angebot angenommen.");
    SetVehicleHealth(vehid,1000);
    GivePlayerMoney(playerid,-Preis);
    GivePlayerMoney(pID,Preis);
    DeletePVar(playerid,"MechaPerson");
    DeletePVar(playerid,"MechaPreis");
    }
    }
    return 1;
    }

    Back to the roots!