[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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 Capture ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Hat sich geklärt, muss "buf" ja auch wieder clearen, ich Idiot xD ().
  • Situation: Ich will mein Frakauto parken, kriege aber immer nur die Datenbank-ID 1 raus, obwohl ich mich in dem Auto befinde, welches die Datenkbank-ID 3 hat.
    Hab mir mal nen kleinen Befehl geschrieben, um zu schauen ob es klappt.

    ocmd:fparkinfo(playerid,params[])
    {
    for(new i=0;i<sizeof(fcInfo);i++)
    {
    if(!fcInfo[i][id_x])continue;
    new string[64];
    format(string,sizeof(string),"FDB_ID: %i",fcInfo[i][fdb_id]);
    SendClientMessage(playerid,CLR_YELLOW,string);
    //?
    }
    return 1;
    }

    Ich bin mir sicher, dass es daran liegt wo das ? ist. Ich weiß nämlich nicht, was ich dort hinmachen muss. Mache ich nichts hin, geht er alle 2 Frakautos durch und gibt mir die beiden IDs statt einem. Mache ich ein break, geht er wahrscheinlich immer nur das erste Auto durch, weswegen ich immer nur die ID1 kriege. Bei continue macht er es wie beim 1sten Fall. Bei return 1; geht er sowieso nur das erste Auto durch. Was muss also dahin? Ich bin ratlos... Ist bestimmt ganz einfach.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Du musst prüfen, ob die ID in der Variable der entspricht, in der du sitzt:
    ocmd:fparkinfo(playerid,params[])
    {
    new id = GetPlayerVehicleID(playerid);
    for(new i=0;i<sizeof(fcInfo);i++)
    {
    if(fcInfo[i][id_x] != id)continue;
    new string[64];
    format(string,sizeof(string),"FDB_ID: %i",fcInfo[i][fdb_id]);
    SendClientMessage(playerid,CLR_YELLOW,string);
    //?
    }
    return 1;
    }

  • Ich habe ein Problem, bitte um Hilfe...


    Ich habe ein Script, wenn ich den Starte, ist der Gamemode auf ''Uknown'' Was ist da das Problem?...


    Log:

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hallo, ich möchte Spieler die PickUps aufheben bestimmte Waffen geben, aber wie frage ich ab welche Model ID aufgehoben wurde damit ich die entsprechende Waffe geben kann?


    So werden die PickUps erstellt



    new RandomWeaponsIDs[] =
    {
    346, 347, 348, 349, 350, 351, 352, 353, 355, 356, 357, 358, 365, 372, 341, 335
    };




    stock DropWeapon(amount)
    {
    //Zwischenspeichern des RandomPos Arrays um darin zu arbeiten
    new Float:tmp[sizeof(RandomPos)][3];
    tmp = RandomPos;

    //Werte deklarieren
    new r,w,count = sizeof(RandomPos);

    //Schleife für die Anzahl der Waffen die erstellt werden sollen
    for(new i = 0; i < amount; i++)
    {
    //Zufallswerte generieren
    r = random(count);
    w = random(sizeof(RandomWeaponsIDs));

    //Pickup an der gefundenen Position erstellen
    eventweapon[i] = CreateDynamicPickup(RandomWeaponsIDs[w], 19, tmp[r][0], tmp[r][1], tmp[r][2]);
    //Den gefundenen Ort aus dem tmp-Array entfernen, indem
    //alle nachfolgenden Orte eins nach vorne gezogen werden (=keine doppelten Orte)
    for(new j = r; j < count - 1; j++)
    {
    tmp[j][0] = tmp[j+1][0];
    tmp[j][1] = tmp[j+1][1];
    tmp[j][2] = tmp[j+1][2];
    }
    count--;
    }
    return 1;
    }


    Und so werden sie aufgehoben



    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new i = 0; i < MAX_PLAYERS; i++) {
    if(eventweapon[i] == pickupid) {
    //Wie mit GivePlayerWeapon abfragen welches Pickup Model aufgehoben wurde um die entsprechende Waffe zu geben?
    DestroyPickup(eventweapon[i]);
    eventweapon[i] = -1;



    return 1;
    }
    }
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Das Array so:
    new RandomWeaponsIDs[][2] =
    {
    {346, WEAPON_ID},
    {347, WEAPON_ID},
    {348, WEAPON_ID},
    {349, WEAPON_ID},
    {350, WEAPON_ID},
    {351, WEAPON_ID},
    {352, WEAPON_ID},
    {353, WEAPON_ID},
    {355, WEAPON_ID},
    {356, WEAPON_ID},
    {357, WEAPON_ID},
    {358, WEAPON_ID},
    {365, WEAPON_ID},
    {372, WEAPON_ID},
    {341, WEAPON_ID},
    {335, WEAPON_ID}
    };
    Ersetze hier jeweils WEAPON_ID mit der ID der Waffe (https://wiki.sa-mp.com/wiki/Weapons).


    Die beiden Arrays:
    new eventweapon[200] = {-1,...}; //200 = Maximale Anzahl
    new eventmodel[200] = {-1,...};


    eventweapon[i] = CreateDynamicPickup(RandomWeaponsIDs[w], 19, tmp[r][0], tmp[r][1], tmp[r][2]);
    zu:
    new idx = GetFreeEventPID();
    if(idx == -1) return print("Error: Maximale Anzahl an Event-Waffen erreicht.");
    eventweapon[idx] = CreateDynamicPickup(RandomWeaponsIDs[w][0], 19, tmp[r][0], tmp[r][1], tmp[r][2]);
    eventmodel[idx] = RandomWeaponsIDs[w][1];


    Das hier hinzufügen:
    stock GetFreeEventPID();
    {
    for(new i = 0; i < sizeof(eventweapon); i++)
    {
    if(eventweapon[i] == -1) return i;
    }
    return -1;
    }


    Und beim Aufnehmen:
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new i = 0; i < sizeof(eventweapon); i++)
    {
    if(eventweapon[i] == pickupid)
    {
    DestroyPickup(eventweapon[i]);
    eventweapon[i] = -1;
    GivePlayerWeapon(playerid, eventmodel[i], 100);
    eventmodel[i] = -1;
    return 1;
    }
    }
    return 1;
    }

  • @Jeffry


    Danke erstmal, nur habe ich ein kleines Problem.


    Sobald ich alles starte, wird mir "Unknown Command" angezeigt, Event wird trotzdem gestartet nur werden keine PickUps erstellt.


    So schaut der Befehl aktuell aus.



    CMD:estart(playerid,params[])
    {



    new emessage[124];

    EventStarted = true;
    format(emessage, sizeof(emessage),"{%06x}%s {FFFFFF}has started an Event. Use /ejoin to join the Event!", GetPlayerColor(playerid) >>> 8,SpielerName(playerid));
    SendClientMessageToAll(-1, emessage);
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    DestroyDynamicPickup(eventweapon[i]);
    }
    DropWeapon(10);
    return 1;



    }


    Mit freundlichen Grüßen
    JustMe.77 8)

    Einmal editiert, zuletzt von JustMe.77 ()

  • Wird jemand aus dem Error log schlau?



    betrifft folgende Zeile:


    createFrakCar(fID,fahCars[id][fmodel],fahInfo[id][fs_x],fahInfo[id][fs_y],fahInfo[id][fs_z],fahInfo[id][fs_r],fcInfo[id][ffarbe]);
    Das ist die Zeile in OnDialogResponse, was er mit ?? meint weiß ich nicht.

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • fahCars habe ich momentan als Array:



    new fahCars[][fchInfoEnum] = {
    {596,2148.3457,-1148.2457,24.0449,268.3922,50}, // POLICE LSPD CAR PLATZ: 22
    {599,2148.1140,-1143.2367,24.5964,269.6135,50}, // POLICE RANGER PLATZ: 24
    {523,2148.1277,-1138.4258,25.1168,267.9870,50}, // POLICE HPV PLATZ: 25
    {497,2148.8813,-1133.8751,25.1917,267.8968,50}, // POLICE MAVERICK PLATZ: 26
    {411,2147.9229,-1203.5190,23.4772,269.6615,50} // INFERNUS PLATZ: 1
    };


    entsprechende Enum (falls gebraucht)


    Was noch wissenswert wäre: Ich kann mir immer nur das LSPD-Auto (also die 596) erfolgreich kaufen. Will ich mir eins der anderen Fraktcars kaufen, kriege ich diese Fehlermeldung.


    //Edit:
    Habe noch ein detaillierteres Bild gemacht.

    die dialogid=9 ist das hier:


    Die ganzen prints waren nur zu Testzwecken, bin schon etwas länger an dem Problem :rolleyes:
    Die Funktion:

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

    Einmal editiert, zuletzt von #S. ()

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