Noch Frage bzgl Kennzeichen und Dialog

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
  • Hallöle, hab wieder ein Problem.
    Ich wollte das Kennzeichen System in Dialog umändern, aber jetzt folgendes..
    - Wenn ich /kennzeichen machen und alles eingebe, bekomme ich den Dialog anstatt der Player dem das Fahrzeug gehört.
    - Das Kennzeichen wird der CarID nicht zu geschrieben.



    case AUTO_KENNZEICHEN:
    {
    if(response)
    {
    kzanfrage();
    return 1;
    }
    else
    {
    SendClientMessage(playerid,-1,"Das Kennzeichen wurde dir nicht zu geschrieben!");
    return 1;
    }
    }


    CMD:kennzeichen(playerid,params[])
    {
    new string[128],veh = GetPlayerVehicleID(playerid),id = getSlotID(veh),kspreis,ksz,pID,str[28];
    if(sscanf(params,"iii",sCarInfo[id][VehID],kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");
    if(sInfo[playerid][pFraktion] != 1)return SendClientMessage(playerid,-1,"Du bist nicht im Ordnungsamt");
    if(!IsPlayerInRangeOfPoint(playerid,5.0,919.3960,-1264.7429,15.1719))return SendClientMessage(playerid,-1,"Hinweis: Du bist nicht beim TÜV (Ordnungsamt Base)");
    for(new i; i < MAX_VEHICLES; i++){
    if(strcmp(sCarInfo[i][CarSchildName],str)) return SendClientMessage(playerid,-1,"Hinweis: Das Kennzeichen gibt es schon!");
    }
    if(kspreis > 100000 || kspreis < 1) return SendClientMessage(playerid,-1,"Hinweis: Maximal nur 100.000$");
    if(sCarInfo[id][CarSchild])return SendClientMessage(playerid,-1,"Hinweis: Das Auto besitzt schon ein Kennschild!");
    if(kspreis > GetPlayerMoney(pID))return SendClientMessage(playerid,-1,"Hinweis: Soviel Geld hat der Spieler nicht!");
    sscanf(sCarInfo[id][sName],"u",pID);
    format(string,sizeof string,"Der Ordnungsbeamte %s will dir ein Kennzeichen anbieten.\nDies Kostet: %i\nKennzeichen-Name: DSZ-%i",SpielerName(playerid),kspreis,ksz);
    ShowPlayerDialog(pID, AUTO_KENNZEICHEN, DIALOG_STYLE_MSGBOX, "Kennzeichen - Antrag",string,"Annehmen","Ablehnen");
    return 1;
    }
    stock kzanfrage()
    {
    new pID,veh = GetPlayerVehicleID(pID),id = getSlotID(veh),kspreis,ksz,str[28];
    sscanf(sCarInfo[id][sName],"u",pID);
    //GetVehiclePos(sCarInfo[id][VehID],Pos[0],Pos[1],Pos[2]);
    SetVehicleToRespawn(sCarInfo[id][VehID]);
    sCarInfo[id][CarSchild] = 1;
    format(str,sizeof(str),"DSZ-%i",ksz);
    SetVehicleNumberPlate(sCarInfo[id][VehID],str);
    GivePlayerMoney(pID, -kspreis);
    SetVehiclePos(sCarInfo[id][VehID],909.2155,-1262.9668,14.4228);
    SendClientMessage(pID,-1,"Dein Fahrzeug hat ein Nummerschild bekommen.");
    saveCar(sCarInfo[id][VehID]);
    return 1;
    }

    Ich hoffe auf Hilfe, danke im voraus.


    Grüße

  • Poste mal die "getSlotID" Funktion und ein die Funktion mit der du ein solches Auto erstellst.

    Aber wenn ich es mit dem Befehl mache, klappt es fast ja ^^



    stock getSlotID(vehicleid)
    {
    new i;
    for(; i != MAX_VEHICLES; ++i)if(sCarInfo[i][VehID] == vehicleid)return i;
    return -1;
    }


    stock CreatePlayerCar(playerid,modelid, Float:X, Float:Y, Float:Z, Float:A, repPreis, kaufPreis){
    new id = getFreeSlot();
    if(id == -1)return SendClientMessage(playerid,-1,"Du kannst dir kein Auto kaufen das Limit ist erreicht.");
    sCarInfo[id][CarModelID] = modelid;
    sCarInfo[id][pCarPos_X] = X;
    sCarInfo[id][pCarPos_Y] = Y;
    sCarInfo[id][pCarPos_Z] = Z;
    sCarInfo[id][pCarPos_A] = A;
    sCarInfo[id][reppreis] = repPreis;
    sCarInfo[id][VKPreis] = kaufPreis;
    sCarInfo[id][CarTank] = 100.0;
    strcat(sCarInfo[id][sName],PlayerName(playerid),MAX_PLAYER_NAME);
    new query[256];
    format(query,256,"INSERT INTO `autos` (`Name`,`ModelID`,`AutoX`,`AutoY`,`AutoZ`, `AutoA`,`ReparaturPreis`, `VKPreis`, `CarTank`) VALUES ( '%s', %d, %f , %f, %f, %f, %d, %d, %f);",PlayerName(playerid),sCarInfo[id][CarModelID],sCarInfo[id][pCarPos_X],sCarInfo[id][pCarPos_Y],sCarInfo[id][pCarPos_Z],sCarInfo[id][pCarPos_A],sCarInfo[id][reppreis],sCarInfo[id][VKPreis],sCarInfo[id][CarTank]);
    mysql_query(query);
    sCarInfo[id][CarID] = mysql_insert_id();
    sCarInfo[id][VehID] = CreateVehicle(sCarInfo[id][CarModelID],sCarInfo[id][pCarPos_X],sCarInfo[id][pCarPos_Y],sCarInfo[id][pCarPos_Z],sCarInfo[id][pCarPos_A],0,0,-1);
    PutPlayerInVehicle(playerid,sCarInfo[id][VehID],0);
    return 1;
    }

  • Ok, das ist richtig so. Dann ändere
    new string[128],veh = GetPlayerVehicleID(playerid),id = getSlotID(veh),kspreis,ksz,pID,str[28];
    if(sscanf(params,"iii",sCarInfo[id][VehID],kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");


    Zu
    new string[128],id ,kspreis,ksz,pID,str[28];
    if(sscanf(params,"iii",id,kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");


    Du gibst die ID ein, da musst du sie nicht suchen.


  • Und woran weiß er dann genau in welchem Slot das Kennzeichen gespeichert werden muss?

  • Macht für mich immer noch keinen wirklich praktikablen Sinn, aber gut.


    new string[128],veh,id,kspreis,ksz,pID,str[28];
    if(sscanf(params,"iii",veh,kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");
    id = getSlotID(veh);


    Damit müsste er die VehicleID eingeben, die dann die SlotID sucht.

  • Macht für mich immer noch keinen wirklich praktikablen Sinn, aber gut.


    new string[128],veh,id,kspreis,ksz,pID,str[28];
    if(sscanf(params,"iii",veh,kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");
    id = getSlotID(veh);


    Damit müsste er die VehicleID eingeben, die dann die SlotID sucht.

    Aber veh wurde bei mir hier für benutzt ...
    veh = GetPlayerVehicleID(playerid)

  • Ist mir klar, nur das ist falsch da du damit die ID des Vehikels des Spielers abfragst, der den Befehl eingibt, und das willst du ja nicht.


    Außerdem macht es keinen Sinn, GetPlayerVehicleID UND einen Parameter zu nutzen, entweder sind beide gleich, was einen unnötig macht, oder sie sind unterschiedlich, was falsch ist.


    Also die Frage: Was soll der Befehl eigentlich machen und was genau soll man eingeben als Parameter?
    Was ist das Ziel der Eingabe des Befehls?

  • Ist mir klar, nur das ist falsch da du damit die ID des Vehikels des Spielers abfragst, der den Befehl eingibt, und das willst du ja nicht.


    Außerdem macht es keinen Sinn, GetPlayerVehicleID UND einen Parameter zu nutzen, entweder sind beide gleich, was einen unnötig macht, oder sie sind unterschiedlich, was falsch ist.


    Also die Frage: Was soll der Befehl eigentlich machen und was genau soll man eingeben als Parameter?
    Was ist das Ziel der Eingabe des Befehls?

    Also ich erkläre das jetzt so:
    Spieler xy gibt "/kennzeichen <carid> <preis> <kennzeichen>" ein sprich "/kennzeichen <2> <1000> <1339>"
    So, dann kriegt Spieler yx ein Dialog wo drin steht "Der Ordnungsbeamte %s will dir ein Kennzeichen anbieten.\nDies Kostet: %i\nKennzeichen-Name: DSZ-%i"
    Sollte er den "Antrag" annehmen (also Spieler yx) so kriegt das Auto von Spieler yx das Kennzeichen auf sein Car.
    Wenn der ablehnt, dann halt nicht, ich hoffe ich habe mich deutlich ausgedrückt ^^

  • yx = der Spieler der Auto 2 hat nehme ich an.


    "carid" ist welches nun?


    => sCarInfo[id][CarID]
    => sCarInfo[id][VehID]
    => sCarInfo[id][...]


    Die "2" die der Spieler eingibt, welche der obigen Variablen beinhaltet diese 2? Wenn keine davon, welche dann?

  • "sCarInfo[id][VehID]"
    und wie ich sehe wäre das ja die Variable "veh"...

  • Also, das sagte ich doch bereits vorher:


    new string[128],veh,id,kspreis,ksz,pID,str[28];
    if(sscanf(params,"iii",veh,kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");
    id = getSlotID(veh);


    Und nein, es ist nicht GetPlayerVehicleID, denn das würde die ID vom Auto von Spieler xy zurückgeben, und das wollen wir ja nicht.


    Probier das so mal aus.

  • Also das Kennzeichen wird nicht gesettet ... also denke ich auch das iwas da fehlt ..

  • Kann es ja auch nicht, weil du wahrscheinlich hier immer noch das gleiche Problem hast:


    stock kzanfrage()


    In der Funktion nimmst du IMMER die Vehicleid von playerid 0.
    Das versteht sich eigentlich von selbst, da es ja fast der gleiche Code ist.



    Das wird sich aber wohl nur mit einer Hilfsvariablen realisieren lassen, da, so wie das aussieht, das über drei Ecken geht.
    Poste dann jetzt eben noch den Code mit dem du dieses stock aufrufst.




    EDIT:
    Wenn du den Code so hast wie ich mir das denke, dann:
    Unter die includes
    new savedID[MAX_PLAYERS];


    Beim Befehl, bevor du den Dialog anzeigst:
    savedID[pID] = id;


    stock Aufruf
    kzanfrage( savedID[playerid] );


    Das stock
    stock kzanfrage(veh)
    {
    new pID,id = getSlotID(veh),kspreis,ksz,str[28];
    sscanf(sCarInfo[id][sName],"u",pID);
    //GetVehiclePos(sCarInfo[id][VehID],Pos[0],Pos[1],Pos[2]);
    SetVehicleToRespawn(sCarInfo[id][VehID]);
    sCarInfo[id][CarSchild] = 1;
    format(str,sizeof(str),"DSZ-%i",ksz);
    SetVehicleNumberPlate(sCarInfo[id][VehID],str);
    GivePlayerMoney(pID, -kspreis);
    SetVehiclePos(sCarInfo[id][VehID],909.2155,-1262.9668,14.4228);
    SendClientMessage(pID,-1,"Dein Fahrzeug hat ein Nummerschild bekommen.");
    saveCar(sCarInfo[id][VehID]);
    return 1;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()


  • Dann kommen wir zum Code, er sieht nun so aus wie Jeffry es gesagt hat.

    CMD:kennzeichen(playerid,params[])
    {
    new string[128],veh,id,kspreis,ksz,pID,str[28];
    if(sscanf(params,"iii",veh,kspreis,ksz)) return SendClientMessage(playerid,-1,"Verwende: /kennzeichen [CarID] [Preis] [KennschildName (1-4 Zahlen)]");
    id = getSlotID(veh);
    if(sInfo[playerid][pFraktion] != 1)return SendClientMessage(playerid,-1,"Du bist nicht im Ordnungsamt");
    if(!IsPlayerInRangeOfPoint(playerid,5.0,919.3960,-1264.7429,15.1719))return SendClientMessage(playerid,-1,"Hinweis: Du bist nicht beim TÜV (Ordnungsamt Base)");
    for(new i; i < MAX_VEHICLES; i++){
    if(strcmp(sCarInfo[i][CarSchildName],str)) return SendClientMessage(playerid,-1,"Hinweis: Das Kennzeichen gibt es schon!");
    }
    if(kspreis > 100000 || kspreis < 1) return SendClientMessage(playerid,-1,"Hinweis: Maximal nur 100.000$");
    if(sCarInfo[id][CarSchild])return SendClientMessage(playerid,-1,"Hinweis: Das Auto besitzt schon ein Kennschild!");
    if(kspreis > GetPlayerMoney(pID))return SendClientMessage(playerid,-1,"Hinweis: Soviel Geld hat der Spieler nicht!");
    savedID[pID] = id;
    sscanf(sCarInfo[id][sName],"u",pID);
    format(string,sizeof string,"Der Ordnungsbeamte %s will dir ein Kennzeichen anbieten.\nDies Kostet: %i\nKennzeichen-Name: DSZ-%i",SpielerName(playerid),kspreis,ksz);
    ShowPlayerDialog(pID, AUTO_KENNZEICHEN, DIALOG_STYLE_MSGBOX, "Kennzeichen - Antrag",string,"Annehmen","Ablehnen");
    return 1;
    }


    stock kzanfrage(veh)
    {
    new pID,id = getSlotID(veh),kspreis,ksz,str[28];
    sscanf(sCarInfo[id][sName],"u",pID);
    //GetVehiclePos(sCarInfo[id][VehID],Pos[0],Pos[1],Pos[2]);
    SetVehicleToRespawn(sCarInfo[id][VehID]);
    sCarInfo[id][CarSchild] = 1;
    format(str,sizeof(str),"DSZ-%i",ksz);
    SetVehicleNumberPlate(sCarInfo[id][VehID],str);
    GivePlayerMoney(pID, -kspreis);
    SetVehiclePos(sCarInfo[id][VehID],909.2155,-1262.9668,14.4228);
    SendClientMessage(pID,-1,"Dein Fahrzeug hat ein Nummerschild bekommen.");
    saveCar(sCarInfo[id][VehID]);
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen