Beiträge von Goldkiller

    Ja,das geht.
    Vorher müsstest du aber das Format umwandeln. Den das MTA.map Format kann man in SA:MP nicht ohne Änderungen der Formatierung einfach übernehmen.


    Zu der Frage mit 'Include'.
    #include macht ja nichts Anderes,als an diese Stelle alles aus der Datei zu kopieren ( Kann man sich jedenfalls so vorstellen ).


    Zitat

    //map.pwn oder map.inc
    CreateObject( .... );
    CreateObject( .... );
    AddStaticVehicle( ... );


    // Dein Hauptscript.
    public OnGamemodeInit() {
    #include <map>
    }

    Würde dann beim kompilieren dazu werden:


    // Dein Hauptscript.
    public OnGamemodeInit() {
    //map.pwn oder map.inc
    CreateObject( .... );
    CreateObject( .... );
    AddStaticVehicle( ... );
    }

    Zeig die zugehörige DCMD-Zeile unter OnPlayerCommandText,sonst kann man nicht sagen,ob der Fehler nicht schon dort liegt.
    Wieso fängst du überhaupt bei h = 1 an zu zählen in der Schleife ?


    Zitat

    EDIT: Fehler behoben, neue Frage


    Das heisst :/ ?

    Mach es lieber nochmal neu. switch/ case verwendest du irgendwie ... komisch.


    switch / case


    Für die Abfrage des richtigen DIALOG's solltest du lieber direkt if / else if verwenden.
    Man kann auch alles über switch/case machen,wirkt meiner Meinung nach aber unübersichtlich. So könnte es aussehene, wenn du nur switch/case verwendest.
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid) {
    case DIALOG_ONE: {
    switch(response) {
    case 0: {
    }
    case 1: {
    switch(listitem) {
    case 0: {
    }
    case 1: {
    }
    case 2: {
    }
    case 3: {
    }
    case 4: {
    }
    }
    }
    }
    }
    case DIALOG_TWO: {
    }
    }

    return 1;
    }


    else switch(dialogid==DIALOG_HANDWAFFEN)//HIER IST DER FEHLER!!!!
    Das geht auch nicht, deswegen bekommst du eine Fehlermeldung. Ließ nochmal, wie switch/case funktioniert.

    Zitat

    Das Problem bei beispiel B ist, das du da nur die ModelID abfragst. Wenn du jetzt z.b 2 mal nen Sultan hast, kannst du diese durch die abfrage nicht voneinander unterscheiden, deshalbnimmt man normalerweise die vehicle id die bei CreateVehicle zurück gegeben wird.


    Hat er doch sowieso :-0.


    Was du dort hasst fassen hier einige eher unter dem Begriff dynamisch. Fallbeispiel a) ist relativ hardcoded mit 20 <= vehicleid <= 25. Typisches Godfather Beispiel.
    Resourcenschonender wäre Beispielsweise in Beiden Fällen folgendes:
    // a)
    new
    vehicleid;
    vehicleid = GetPlayerVehicleID(playerid);
    if( vehicleid >= 20 && vehicleid <= 25)


    // b)
    new
    vehicleid;
    vehicleid = GetPlayerVehicleID(playerid);
    for(new h = 0; h < sizeof(Auto); h++) // Angenommen Auto hat mehr als einen Eintrag.
    {
    if( vehicleid == Auto[h])

    oha das ist ja schon nicht mehr normal das ist ja das reinste puzzel. da find eich nun mal so garnicht durch.


    hat jemand nicht so eine Lösung ? die einfach und leicht zu verstehen ist. bzw den code ohne extra "stock" oder "public" ect.


    Du bewegst dich in die falsche Richtung. Aber ich komme mal deinem Wunsch nach ;).
    ConvertSecEx(secs,&sec,&min,&hour,&day) {
    new
    rest;
    sec = 0;
    min = 0;
    hour = 0;
    day = 0;
    day = (secs / (60*60*24));
    rest = (secs % (60*60*24));
    hour = (rest / (60*60));
    rest = (rest % (60*60));
    min = (rest / 60);
    sec = (rest % 60);
    return 1;
    }
    Kein stock,kein public. Funktionieren tut es dennoch :)

    Hab den Teil mit den Publisher gar nicht mitbekommen. Da sind ja auch nette Angebote bei. Hatte mir bei den Angeboten gestern ( oder vorgestern ? ) TestDriveUnlimited 2 für 5€ gekauft.

    Pawno ist schon mal nicht PAWN .
    PAWN ist die Sprache, Pawno die IDE. Kannst auch in Notepad schreiben. Dann wäre die Sprache immernoch PAWN, Notepad die IDE.


    Zitat

    Gibts davon auch noch eine Andere Möglichkeit weil ich verstehe von dem da Unten nur bahnhof xD


    Was verstehst du denn nicht ? In dem Code ist mehr Mathe als wirkliches Verständnis von Scripten / Programmierung verlangt.

    Ist im Ansatz schon ganz richtig. Ich empfehle dir dennoch, solche Rechnung lieber einzelnt durchzuführen. Da behält man leichter den Überblick.
    Hatte dazu mal eine Funktion irgendwo hier im Forum gepostet, ConvertSec. Hab die aber nochmal für dich ausgebuddelt.
    stock ConvertSec(secs,&sec,&min,&hour) {
    new
    rest;
    sec = 0;
    min = 0;
    hour = 0;
    hour = (secs / (60*60));
    rest = (secs % (60*60));
    min = (rest / 60);
    sec = (rest % 60);
    return 1;
    }


    Der Teil für Tage fehlt allerdings.Da sieht du,wie der Ablauf wäre. Man fängt bei der Größten Einheit an ( Stunden ) , rechnet dann immer runter.
    Wenn ich mich nicht vertue, sollte es so korrekt auch auf Tage aufteilen.
    stock ConvertSecEx(secs,&sec,&min,&hour,&day) {
    new
    rest;
    sec = 0;
    min = 0;
    hour = 0;
    day = 0;
    day = (secs / (60*60*24));
    rest = (secs % (60*60*24));
    hour = (rest / (60*60));
    rest = (rest % (60*60));
    min = (rest / 60);
    sec = (rest % 60);
    return 1;
    }


    //Edit:Hab es mal getest:
    new
    _converts[4],
    _secs;
    _secs = ( 4 * 60 * 60 * 24 ) + ( 6 * 60 * 60 ) + (32 * 60 ) + 5;
    ConvertSecEx( _secs , _converts[0] , _converts[1] , _converts[2] , _converts[3]);
    printf("Tage: %d Stunden: %d Minuten: %d Sekunden: %d",_converts[3],_converts[2],_converts[1],_converts[0]);

    Ausgabe ist richtig.

    Den Befehl hast du dir aber schlecht zusammen kopiert.
    Les dir am besten mal ein Tutorial zu der Nutzung von SSCANF durch.Du willst wahrschein den Befehl so aussehen lassen:
    /CHECK < Spieler >
    Daher,schau dir folgenden Link an.Alle drei Teile.
    http://forum.sa-mp.de/san-andr…-commands-mit-parametern/



    Die Nutzung von GetPlayerWeaponData ist auch falsch.Schau dir den Artikel im Wiki an.
    http://wiki.sa-mp.com/wiki/GetPlayerWeaponData



    Ich könnte dir die Lösung natürlich auch einfach vormachen, nur sollst du es ja selber lernen bzw probieren ;) .

    Du hast es definitiv nicht verstanden.
    Ich habe den Code doch schon für die vorgemacht,wie es richtig wäre.
    new Vehicle,mietenIndex = -1;
    for(new j = 0 ; j < sizeof(mieten); j++) {
    if( Vehicle == mieten[j] ) {mietenIndex = j;continue;
    }
    SendClientMessage(playerid,ROT,"Du SItzt in Kein MietCar");
    return 1;
    }
    Das ist wieder totaler Blödsinn. Du hast weder verstanden,was der Sinn hinter dem ist,was ich geschrieben / vorgemacht habe, noch was das return eigentlich bedeutet.
    Grundlagen fehlen dir sicherlich.


    Ich mach es aber nochmal deutlicher.


    new
    Vehicle,
    mietenIndex = -1; // leer
    Vehicle = GetPlayerVehicleID(playerid);
    for(new j = 0 ; j < sizeof(mieten); j++) {
    if( Vehicle == mieten[j] ) {
    mietenIndex = j;
    continue; // Wir können aus der Schleife springen. Denn wir haben bereits einen gültigen Eintrag gefunden
    }
    }
    if( mietenIndex == -1 ) {
    // kein mieten-Fahrzeug!
    SendClientMessage(playerid,ROT,"Du SItzt in Kein MietCar");
    }
    else {
    // sitzt in einem mieten-Fahrzeug

    // Hier warst du zumindest richtig.
    }

    for(new i2 = 0; i2 < sizeof(mieten); i2++)//von hier
    {
    new Vehicle = GetPlayerVehicleID(playerid);
    if(Vehicle == mieten[i2]) return SendClientMessage(playerid,ROT,"Du sitzt auf Keinem MietCar");//bist hier

    So solltest du es nicht machen. Erstmal solltest du einmalig die VehicleID beziehen außerhalb der Schleife, da es unnötigist ist,die ID immer neu zu beziehen.Wird sich sowieso nicht zum Zeitpunkt des Aufrufes nicht geändert haben bzw ändern.


    Dein Problem ist,dass du alle Einträge von mieten[] überprüfst, sobald aber der Spieler in irgendeinem der mieten-Fahrzeuge nicht sitzt,bricht die Schleife ab. Du müsstest aber die Schleife vorher einmalig durchgehen und schauen,ob der Spieler in irgendeinem der mieten-Fahrzeuge sitzt.


    Könnte so aussehen:
    new
    Vehicle,
    mietenIndex = -1; // leer
    Vehicle = GetPlayerVehicleID(playerid);
    for(new j = 0 ; j < sizeof(mieten); j++) {
    if( Vehicle == mieten[j] ) {
    mietenIndex = j;
    continue; // Wir können aus der Schleife springen. Denn wir haben bereits einen gültigen Eintrag gefunden
    }
    }
    if( mietenIndex == -1 ) {
    // kein mieten-Fahrzeug!
    }
    else {
    // sitzt in einem mieten-Fahrzeug
    }

    Wie rufst du denn Login() auf ?



    //...
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);


    printf("key = '%s' dini_Get('%s','Passwort') = '%s'",key,Spielerdatei, dini_Get(Spielerdatei,"Passwort") ); // Wir debuggen mal .


    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    //...

    Was wird dir dort ausgegeben? Denn wenn alle Passwörter funktionieren,dann ist entweder key oder der String,der von dini_Get zurückgegeben wird , leer.

    Zitat

    Das einzige Problem ist die "Abfrage" : wenn nur noch eine Person


    im Interior übrigbleibt [Nur dieser soll ja auch die Gewinnersummer bekommen].


    Eine Schleife die durch alle Spieler geht und zählt,wieviele im Interior noch sind. Zählst du nur einen, dann haben wir wohl einen Gewinner,richtig?

    new winner,i,count;
    for(new i ; i < MAX_PLAYERS; i++)
    if(GetPlayerInterior(i) == 5)
    count++;
    winner = i;
    }
    }
    if(count == 1) printf("Gewinner ist Spieler mit der ID %d",winner);


    Zitat

    Eine weitere wäre das nur der, welcher als erstes ins Ziel kommt gewinnt.


    Willst du ein Rennen erstellen ? Ich bezweifel nämlich,dass du überhaupt schon eine Grundlage für sowas selbst gemacht hast. Denn sonst wäre klar, du müsstest das bei OnPlayerEnter(Race)Checkpoint machen.


    Zitat

    wenn ich ein Event starte
    -> soll ein Dialog mit der Frage "ob er am Event teilnehmen
    möcht" kommen
    [geht das überhaupt ein Dialog an alle?]


    Wieso sollte es nicht möglich sein ? Eine Schleife erstellen und einfach allen anzeigen.

    Füg mal bei der Umfrage die österreichischen Bundesländer und die Kantone der Schweizen Eidgenossenschaft hinzu.


    Zur Frage:
    Oberösterreich FTW!


    Man kann nur bis zu 20. Auswahlmöglichkeiten in einer Umfrage haben. Hab trotzdem mal die Schweiz und Österreich zusätzlich eingefügt.
    Nord-Rhein-Westfahlen ist jetzt Nordrhein-Westfahlen und Badem-Württemberg Baden-Württemberg.


    NRW,Hagen

    Liegt daran,dass du dort auch die Farbe in RGBA hast.


    0xD7000062
    62 - Das ist die Transparanz. Angenommen du hast einen Roten Hintergrund und wählst eine Farbe aus, nehmen wir einfach mal Blau.Setzt du Blau jetzt aber als nicht 100% deckend ( sondern etwas Transparent , 0xFF oder 255 ), dann scheint das Rot hinter dem Blau durch.
    Die Farbe solltest du wählen, während die RGBA Wert auf FF bzw 255 steht.
    Kannst aber auch einfach nur RGB Tabellen / Picker benutzen.
    http://www.colorschemer.com/online.html