Beiträge von Templer

    //EDIT:


    Ja und was ist, wenn er doch die SpielerKamera bewegen möchte, wenn er gefreezt ist? Hah? Also BasiDerGamer hör ned auf 8D, er richtet sich nur monoton an SAMP Wiki!


    Meine Empfehlung:


    Zum Einfrieren
    ApplyAnimation(playerid,"CAR","Sit_relaxed",2.5,1,1,1,1,90000000);


    Zum Lösen
    ClearAnimations(playerid);


    und er ist gefreezt und kann trotzdem die Kamera bewegen ^^

    #define DIALOG_Einzahlen (2)


    #define COLOR_GREY (0xAFAFAFAA)


    public OnPlayerCommandText(playerid,cmdtext[])
    {
    if(strcmp(cmdtext,"/Einzahlen",true)==0)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, 1481.5714,-1759.4701,17.5313))
    {
    ShowPlayerDialog(playerid,DIALOG_Einzahlen,DIALOG_STYLE_INPUT,"Einzahlen","Wie viel möchten sie einzahlen","Bestätigen","Abbrechen");
    return 1;
    }
    }
    return 0;
    }


    public OnDialogResponse(playerid,dialogid,listitem,response,inputtext[])
    {
    if(dialogid == DIALOG_Einzahlen)
    {
    if(!response) return true; //Spieler hat auf "Abbrechen" gedrückt.
    new geld=strval(inputtext);
    if(!strlen(inputtext)) return ShowPlayerDialog(playerid,DIALOG_Einzahlen,DIALOG_STYLE_INPUT,"Ihre Eingabe ist nicht korrekt, bitte geben Sie eine gültige Zahl ein!\n\nWieviel möchten Sie einzahlen?","Bestätigen","Zurück");
    if(GetPlayerMoney(playerid)<geld) return ShowPlayerDialog(playerid,DIALOG_Einzahlen,DIALOG_STYLE_INPUT,"Sie haben nicht soviel Geld mit ihnen, bitte geben Sie einen realistischen Betrag an!\n\nWieviel möchten Sie einzahlen?","Bestätigen","Zurück");
    if(geld<0||geld>99999999) return ShowPlayerDialog(playerid,DIALOG_Einzahlen,DIALOG_STYLE_INPUT,"Bitte gehen Sie mit dem Betrag nicht niedriger als 1$ oder höher als 99999999$!\n\nWieviel möchten Sie einzahlen?","Bestätigen","Zurück");
    SetPVarInt(playerid,"SpielerBank",GetPVarInt(playerid,"SpielerBank")+geld);
    format(string,sizeof(string),"Sie haben %d$ in Ihr Bankkonto eingezahlt. SALDO: %d$",geld,GetPVarInt(playerid,"SpielerBank"));
    return SendClientMessage(playerid,0xFFAA00FF,FormatString);
    }
    return 1;
    }

    So 8D, da hat der junge Mann hier recht. Wie man sieht sind die älteren schon überfordert ne? ^^


    Nebenbei Bassi gute Idee, hab schon so kompliziert gedacht mit Schleifen und allem Mögliche, aber nein du schlagst es mit einem einzigen Befehl ^^ Auch wenn dann wirklich jeder den countdown sieht, was etwas nervig ist, aber eher Ansichtssache ^^

    Danke mir hätte nur das einfache format gereicht ^^


    Also höchstwahrscheinlich liegt es dann am


    new car = gLastCar[playerid];


    wichtig ist nur, dass bei OnPlayerStateChange wenn der Spieler in ein Fahrzeug als Fahrer oder Passant einsteigt, dass der Wert gLastCar auf das derzeitige Fahrzeug setzt bzw. ist ein Fehler aufgetreten, aber um dies zu umgehen machst du folgendes:


    else if(strcmp(x_job,"refill",true) == 0)
    {
    if(RefillOffer[playerid] >= 999) return SendClientMessage(playerid, COLOR_GREY, "Keiner hat dir angeboten deinen Benzin aufzufüllen !");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_GREY, "Du sitzt in keinem Fahrzeug, welches du auftanken lassen möchtest !");
    if(!IsPlayerConnected(RefillOffer[playerid])) return SendClientMessage(playerid,COLOR_GREY,"Der Mechaniker ist nichtmehr auf dem Server !");
    if(GetPlayerMoney(playerid) < RefillPrice[playerid]) return SendClientMessage(playerid, COLOR_GREY, "Du kannst dir den Benzin nicht leisten !");
    GetPlayerName(RefillOffer[playerid], giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    new car = GetPlayerVehicleID(playerid),fuel;
    format(string, sizeof(string), "* Du hast %d% Benzin für %d€ vom Mechaniker %s bekommen.",fuel,RefillPrice[playerid],giveplayer);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* Du hast %s's Fahrzeug mit %d% Benzin gefüllt. Du bekommst die %d€ zu deinem nächsten Gehalt.",sendername,fuel,RefillPrice[playerid]);
    SendClientMessage(RefillOffer[playerid], COLOR_LIGHTBLUE, string);
    PlayerInfo[RefillOffer[playerid]][pPayCheck] += RefillPrice[playerid];
    GivePlayerMoney(playerid, -RefillPrice[playerid]);
    if(Gas[car] < 110) { Gas[car] += fuel; }
    RefillOffer[playerid] = 999;
    RefillPrice[playerid] = 0;
    return 1;
    }


    abner dann ist das auftanken nur mehr möglich, wenn der Spieler der das Angebot erhält im Fahrzeug sitzt. Der Mechaniker muss nicht im Fahrzeug sitzen.

    So hier bitte, eine kleine Lösung für deinen Wunsch


    forward RaceTimerForPlayer(playerid);


    public RaceTimerForPlayer(playerid)
    {
    new string[64],count=GetPVarInt(playerid,"RaceCountDown");
    if(count==0) {format(string,sizeof(string),"~g~GO~b~GO~r~GO~y~GO"); DeletePVar(playerid,"RaceCountDown");}
    else {format(string,sizeof(string),"... %d ...",count); SetPVarInt(playerid,"RaceCountDown",count-1); SetTimerEx("RaceTimerForPlayer",1000,false,"d",playerid);}
    GameTextForPlayer(playerid,string,1000,3);
    }


    public OnPlayerCommandText(playerid,cmdtext[])
    {
    if(!strcmp(cmdtext,"/startcountdown",false))
    {
    SetPVarInt(playerid,"RaceCountDown",5); //Wieviele Sekunden runterzählen sollen
    SetTimerEx("RaceTimerForPlayer",1000,false,"d",playerid);
    return GameTextForPlayer(playerid,"~y~Countdown ~g~gestartet ~w~...",1000,3);
    }
    return 0;
    }

    füge mal oberhalb der Meldung "Das Nummernschild ist vorhanden" folgendes ein und gebe mir dann den Serverlog auszug.


    printf("Überprüfe Nummernschild: %s %s",FahrzeugInfo[i][Nummernschild],Schild);

    Eine eher leichtere Möglichkeit wäre, dass du dir Funktionen erstellst, die definieren ob das Fahrzeug ein Boot ist oder nicht usw.


    Beispiel:


    IsABoat(carid)
    {
    if(GetVehicleModel(carid)==472||GetVehicleModel(carid)==473||GetVehicleModel(carid)==493||GetVehicleModel(carid)==595||GetVehicleModel(carid)==484||GetVehicleModel(carid)==430||GetVehicleModel(carid)==453||GetVehicleModel(carid)==452||GetVehicleModel(carid)==446||GetVehicleModel(carid)==454) return true;
    return false;
    }


    zwar ist das nicht die beste Variante, aber zum verstehen ist es gut ^^, andernfalls kannst du den obigen Code umwandeln, indem du folgendes machst:


    new BoatDef[]={472.473,493,595,484,430,453,452,446,454};
    IsABoat(vehicleid)
    {
    for(new boat;boat!=sizeof(BoatDef);boat++) if(GetVehicleModel(vehicleid)==BoatDef[boat]) return true
    return false;
    }


    und das könnte man noch umfassender machen, aber mehr Möglichkeiten poste ich jetzt nichtmehr xD

    Sollte passen ^^ Hoffe ich mal, weil dein Codeinzug bissl blöd ist.


    enum FahrzeugInf
    {
    Fahrzeugerstellen,
    FahrzeugID,
    Fahrzeugmodel,
    Farbe1,
    Farbe2,
    Float:x,
    Float:y,
    Float:z,
    Float:facing,
    Nummernschild[10],
    }
    new FahrzeugInfo[MAX_Fahrzeuge][FahrzeugInf];


    dcmd_fahrzeugerstellen(playerid,params[])
    {
    new Schild[10],string[128],model,farbe1,farbe2,Name[MAX_PLAYER_NAME],Float:X,Float:Y,Float:Z,Float:F;
    if(IsPlayerAnAdmin(playerid,Adminrang[Adminlevel_FahrzeugErstellen]))
    {
    if(SpielerInfo[playerid][Admineingeloggt]==1)
    {
    if(sscanf(params,"iiis",model,farbe1,farbe2,Schild)) return SendClientMessage(playerid,Weiß,"Verwendung: /fahrzeugerstellen [Model] [Farbe1] [Farbe2] [Nummernschild]");
    new ID=FreieFahrzeugIDrausfinden();
    if(IsPlayerInAnyVehicle(playerid))
    {
    new VID= GetPlayerVehicleID(playerid);
    GetVehiclePos(VID,X,Y,Z);
    GetVehicleZAngle(VID,F);
    }
    else
    {
    GetPlayerPos(playerid,X,Y,Z);
    GetPlayerFacingAngle(playerid,F);
    }
    GetPlayerName(playerid,Name,sizeof Name);
    format(string,sizeof (string),"Admin %s hat Fahrzeugmodel: %i erstellt",Name,model);
    Admintextspeichern(string);
    for(new i;i<MAX_Fahrzeuge;i++)
    {
    if(strcmp(FahrzeugInfo[i][Nummernschild],Schild,false)!=0) continue;
    return SendClientMessage(playerid,Rot,"Das Nummernschild ist schon vorhanden bitte wählen Sie eine andere Nummer.");
    }
    format(string,sizeof(string),"INSERT INTO fahrzeug (FahrzeugID) VALUES ('%i')",ID);
    mysql_query(string);
    mysql_free_result();
    FahrzeugInfo[ID][Fahrzeugmodel]=model;
    FahrzeugInfo[ID][x]=X;
    FahrzeugInfo[ID][y]=Y;
    FahrzeugInfo[ID][z]=Z;
    FahrzeugInfo[ID][facing]=F;
    FahrzeugInfo[ID][Farbe1]=farbe1;
    FahrzeugInfo[ID][Farbe2]=farbe2;
    format(FahrzeugInfo[ID][Nummernschild],10,Schild);
    FahrzeugInfo[ID][Fahrzeugerstellen]=CreateVehicle(FahrzeugInfo[ID][Fahrzeugmodel],FahrzeugInfo[ID][x],FahrzeugInfo[ID][y],FahrzeugInfo[ID][z],FahrzeugInfo[ID][facing],FahrzeugInfo[ID][Farbe1],FahrzeugInfo[ID][Farbe2],0);
    SetVehicleNumberPlate(FahrzeugInfo[ID][Fahrzeugerstellen],FahrzeugInfo[ID][Nummernschild]);
    SendClientMessage(playerid,Hellgrün,"Fahrzeug wurde erfolgreich erstellt.");
    GetPlayerName(playerid,Name,sizeof Name);
    format(string,sizeof (string),"Admin %s hat Auto %i erstellt",SName,ID);
    Admintextspeichern(string);
    return 1;
    }
    else SendClientMessage(playerid,Rot,NichtAdminEingeloggt);
    }
    else SendClientMessage(playerid,Rot,KeinAdmin);
    return 1;
    }

    Nun du musst bei der Abfrage natürlich zuerst abfragen lassen, was für ein Fahrzeug das überhaupt ist, also ob es ein Boot, PKW, LKW oder was auch immer du haben willst. (Hilfe: GetVehicleModel)


    Nebenbei auch dann für jeden spezielle Fahrzeugart nen speziellen Schein einfügen ^^ Also für Boot einen Bootsschein und Co. ...


    Solltest du jedoch weitere Hilfe benötigen, dann kann ich dir ruhig näheres erklären ^^, aber mal schaun ob du so alleine draufkommst.

    Rust, dass kannst du vergessen. Du hast deine Variable "Carlist" höchstwahrscheinlich so definiert:


    new Carlist[MAX_PLAYERS][ahCar];, aber wenn du wirklich diese Definition verstehen würdest, könntest du ablesen, dass nur für jeden Spieler ein Fahrzeug abgespeichert wird.


    Theorethisch müsstest du daraus sogar ein 3 dimensionales-Array machen, also


    new Carlist[MAX_PLAYERS][ahCar][MaxVeh];
    aber das verbraucht zumal unmäßig an unnötigen Arbeitsspeicher, außer der Hoster hat dich ganz lieb xD, und du müsstest dann auch noch ÜBERALL im Script jedes Carlist um ein Array erweitern und dann auch noch unsinnige an Abfragen machen, ob Slot 0 belegt ist oder Slot 1 und wenn du MaxVeh auch noch auf 3 oder 10 setzen würdest, dann kannst dir die Kugel geben xD


    Wenn du ein Autoscript haben willst, was mehr als 2 Fahrzeuge unterstützt dann richte dich nach


    new Carlist[MAX_VEHICLES][ahCar];


    und du speicherst dann halt noch zusätzlich zu jeder Fahrzeug ID den Fahrzeugbesitzer als String (Spielernamen) oder als Unique SpielerID (welche nicht von Samp bei OnPlayerConnect gesetzt wird)


    Nebenbei ist auch zu beachten, dass die MAX_VEHICLES definition für Carlist NICHTS mit der VehicleID von GetPlayerVehicleID oder CreateVehicle oder einer sonstigen SAMP Funktion, was VehicleID´s wiedergibt.


    Also, ich will natürlich hier nicht dir alles erklären, wie du ein neues Autohaus machst, aber wenn du es versuchen willst, dann wirst du bissl brauchen und du kannst mich gerne in ICQ hinzufügen und mich nach Scriptfragen fragen, aber ich mach dir sicher kein eigenes Fahrzeugsystem ^^


    Ich kenne bereits einen, der von deiner Methode umgestiegen ist und nach sehr viel Kopfschmerzen und paar Fragen, die er mir gestellt hat ^^, hat er es endlich lösen können ^^.


    Ich sag das nur, damit du nicht den Anreiz, nachdem du dir den obigen Text durchgelesen hast, dazu verlierst ^^.

    Hast du ein Tacho? Hächstwahrscheinlich ja ^^, dann bitte zeig mir vom Tacho die Zeile mit


    format


    oder du kannst mir gleich zeigen, womit du den Tank abliest, also wie die Variable bei dir heißt.

    Woha Junge, ich glaube du verwirrst dich total mit den Datentypen Zahl, Gleitkommazahl und Text xD Bitte zeig mir die Definition (new) von "FahrzeugInfo" mit enum Struktur und bitte zeig mir den gesamten Code von deinem Problembereich. Sonst kann ich dir schwer helfen und raten ist nicht mein Ding ^^