[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
  • @timm462f:


    Versuch das mal so:



    Ich hätte auch eine Frage, ich bekomme es einfach nicht hin auszurechnen und abzufragen ob der Spieler unter einem Fahrzeug ist...


    Code:

    Sobald ich auf dem Auto stehe oder neben dem Auto stehe funktioniert das.
    Habe sogar versucht mit der Funktion PlayerToPoint. Ich vermute ich habe wieder einen kleinen Denkfehler...
    Kann mir einer bitte helfen?

  • <Bilder>

    Ah, da dort die Zeit noch dabei steht war der String zu klein.
    Versuche es so:
    ocmd:spielerinfo(playerid,params[])
    {
    new str[145], name[MAX_PLAYER_NAME], lastjoin[11], gebannt;
    if(sscanf(params, "s", name)) return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");

    mysql_real_escape_string(name,name);
    format(str, sizeof(str),"SELECT LastJoin, Gebannt FROM `accounts` WHERE `Name`='%s'",name);
    mysql_query(str);
    mysql_store_result();
    if(mysql_num_rows() == 0)
    {
    mysql_free_result();
    return SendClientMessage(playerid,ROT,"Spieler existiert nicht.");
    }
    mysql_fetch_field("LastJoin",lastjoin);
    mysql_fetch_field("Gebannt",str);
    gebannt = strval(str);
    mysql_free_result();

    format(str, sizeof(str), "Der Spieler %s war zuletzt am Spieler: %s",name,lastjoin);
    SendClientMessage(playerid, 0xFFFFFFFF, str);
    if(gebannt != 0) SendClientMessage(playerid, 0xFFFFFFFF,"Der Spieler ist gebannt.");
    else SendClientMessage(playerid, 0xFFFFFFFF,"Der Spieler ist nicht gebannt.");
    return 1;
    }



    @J0a9
    Unter dem Auto? Direkt drunter liegend?

  • Ich bin momentan dabei eine FKasse zu machen und habe in meiner DB einen neuen Eintrag "fraktkasse" mit "besitzer" und "fkasse" gemacht, allerdings weiß ich nicht mehr weiter.

    new fInfo[][fraktEnum] = {
    {"Zivilist", 1108.7543, -1796.4539, 16.5938, 88.3845, 0, 0, CLR_WHITE},
    {"LSPD", 254.2813, 78.9334, 1003.6406, 180.7323, 6, 0, CLR_BLUE}};


    loadFrakKasse(fraktid)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM fraktkasse WHERE besitzer='%i'",//?);
    mysql_function_query(dbhandle,query,true,"OnFrakKasseLoad","i",//?);
    return 1;
    }

    Weißt pawn der Fraktion automatisch eine ID zu? Weil im fraktEnum habe ich keine ID gespeichert. Falls es automatisch sein sollte, wie kann ich jetzt bei loadFrakKasse die ID der entsprechenden Fraktion in die DB schreiben, wenn sie ja theoretisch nirgends gespeichert ist?

    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

  • Was genau meinst du?
    Die IDs wären hier der Index im Array, also:
    new fInfo[][fraktEnum] = {
    {"Zivilist", 1108.7543, -1796.4539, 16.5938, 88.3845, 0, 0, CLR_WHITE}, //ID 0
    {"LSPD", 254.2813, 78.9334, 1003.6406, 180.7323, 6, 0, CLR_BLUE} //ID 1
    };


    Somit kannst du bei deinem ? oben einfach "frakid" einfügen.
    loadFrakKasse rufst du dann für alle Indizies (0 - 1) auf.

  • Immer noch das gleich Problem wie vorher das die Zeit da steht

    Komisch. Möglicherweise ein Fehler im Plugin.
    Versuche es so zu umgehen:
    ocmd:spielerinfo(playerid,params[])
    {
    new str[145], name[MAX_PLAYER_NAME], lastjoin[64], gebannt;
    if(sscanf(params, "s", name)) return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");

    mysql_real_escape_string(name,name);
    format(str, sizeof(str),"SELECT LastJoin, Gebannt FROM `accounts` WHERE `Name`='%s'",name);
    mysql_query(str);
    mysql_store_result();
    if(mysql_num_rows() == 0)
    {
    mysql_free_result();
    return SendClientMessage(playerid,ROT,"Spieler existiert nicht.");
    }
    format(str, sizeof(str), "Der Spieler %s war zuletzt online am:",name);
    mysql_fetch_field("LastJoin",lastjoin);
    format(str, sizeof(str), "%s %s", str, lastjoin);
    SendClientMessage(playerid, 0xFFFFFFFF, str);

    mysql_fetch_field("Gebannt",str);
    gebannt = strval(str);
    mysql_free_result();

    if(gebannt != 0) SendClientMessage(playerid, 0xFFFFFFFF,"Der Spieler ist gebannt.");
    else SendClientMessage(playerid, 0xFFFFFFFF,"Der Spieler ist nicht gebannt.");
    return 1;
    }

  • Ja, das Fahrzeug ist auf einer Hebebühne oben und der Spieler ist dann unter dem Fahrzeug, sprich liegend

    Versuche es so:
    new id = GetClosestVehicleID(playerid, 500);
    if(id != INVALID_VEHICLE_ID)
    {
    new Float:X, Float:Y, Float:Z;
    new Float:px, Float:py, Float:pz;
    GetVehiclePos(id);
    GetPlayerPos(playerid, px, py, pz);
    if(IsPlayerInRangeOfPoint(playerid, 3.0, X, Y, Z - 2.0) && pz < Z) //Die - 2.0 eventuell anpassen
    {
    SendClientMessage(playerid, COLOR_WHITE, "Super Funktioniert :)");
    return 1;
    }
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Du bist nicht in der Nähe eines Fahrzeuges.");

  • Ok das habe ich verstanden, aber woher weiß dann loadFrakKasse was fraktid ist? Ich hab die Variable immerhin noch nie benutzt.

    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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • loadFrakKasse(fraktid)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM fraktkasse WHERE besitzer='%i'",frakid);
    mysql_function_query(dbhandle,query,true,"OnFrakKasseLoad","i",frakid);
    return 1;
    }


    Und dann woanders, zum Beispiel bei OnGameModeInit:
    loadFrakKasse(0);
    loadFrakKasse(1);
    Oder:
    for(new i = 0; i < sizeof(fInfo); i++) loadFrakKasse(i);

  • Irgendwo habe ich noch einen Fehler beim Laden.
    Habe bei OnGameModeInit mir mal printen lassen was der Eintrag ist damit ich nicht immer auf den Server muss.

    for(new i=0;i<sizeof(fInfo);i++)
    {
    loadFrakKasse(i);
    printf("LSPD hat %i$ in der FKasse.",fInfo[i][f_kasse]);
    }

    Allerdings gibt er mir immer 0$ an.
    Meine beiden Funktionen:

    public OnFrakKasseLoad(frakid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0;i<num_rows;i++)
    {
    fInfo[frakid][f_kasse]=cache_get_field_content_int(i,"fkasse",dbhandle);
    }
    return 1;
    }


    loadFrakKasse(frakid)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM fraktkasse WHERE fraktionsid='%i'",frakid);
    mysql_function_query(dbhandle,query,true,"OnFrakKasseLoad","i",frakid);
    return 1;
    }

    Warum ist bei mir immer der pwn code linksbündig? lmao

    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 darfst den print erst in OnFrakKasseLoad ausgeben lassen, am besten vor dem return 1 darin.


    Zwecks dem Code:
    Du musst den Code über den "Quellcode" Editor posten (erster BB Button (Kästchen vor den Pfeilen)).
    Oder du nimmst den </> Button und wählst C-Code.

  • Funktioniert alles einwandfrei, dankeschön!
    In meiner DB gibt mir MySQL die Info: "Die aktuelle Markierung enthält keine eindeutige („unique“) Spalte." Das verwehrt mir das Bearbeiten , löschen der Spalten usw. Ich denke mal dass da noch irgendein Eintrag mit AI rein muss, aber den brauche ich ja gar nicht. Kann ich das irgendwie umgehen? Oder kann ich da einfach eine neue Spalte mit AI reinhauen und einfach nichts damit machen, ohne dass es Probleme gibt?

    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

  • Ich hoffe jemand opfert nochmal Zeit für mich ^^ .
    Bekomme den Error "error 035: argument type mismatch (argument 3)" in folgender Zeile:
    //createFrakCar(frakid,modelid,Float:x,Float:y,Float:z,Float:r,f_farbe) Die Parameter für die Funktion
    createFrakCar(fID,fahCars[id][fmodel],fahInfo[fs_x],fahInfo[fs_y],fahInfo[fs_z],fahInfo[fs_r],fcInfo[id][ffarbe]);

    Alles was damit zu tun hat:

    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

  • Bisschen den Thread spammen ^^ Naja dafür ist er ja immerhin da.
    Beim /fpark Befehl kann ich immer nur die Position vom ersten Auto speichern, das 2te wird nicht gespeichert.

    //Auszug aus /fpark
    new vID=GetVehicleModel(GetPlayerVehicleID(playerid));
    new fID=pInfo[playerid][fraktion];
    for(new i=0;i<sizeof(fcInfo);i++)
    {
    printf("vID ist %i und fmodel ist %i",vID,fcInfo[i][fmodel]); // Das waren nur ein paar Überprüfungsversuche ob alles klappt
    printf("fID ist %i und fbesitzer ist %i",fID,fcInfo[i][fbesitzer]);
    if(vID==fcInfo[i][fmodel] && fID==fcInfo[i][fbesitzer])
    {
    GetVehiclePos(fcInfo[i][id_x],fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z]);
    GetVehicleZAngle(fcInfo[i][id_x],fcInfo[i][fc_r]);
    new query[256];
    format(query,sizeof(query),"UPDATE fraktautos SET x='%f',y='%f',z='%f',r='%f' WHERE besitzer='%i' AND id='%i'",fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z],fcInfo[i][fc_r],fID,fcInfo[i][fdb_id]);
    mysql_function_query(dbhandle,query,false,"","");
    SendClientMessage(playerid,CLR_BLUE,"Erfolgreich umgeparkt. Euer Fraktauto wird nun immer hier spawnen!");

    Ich hätte auch noch eine Frage ob das eine gute Weise ist abzufragen, ob 1. die vID die gleiche wie in der DB ist und ob die fID vom Spieler die gleiche ist wie in der DB der Besitzer, oder ob das viel besser geht.

    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

  • Ich hätte auch noch eine Frage ob das eine gute Weise ist abzufragen, ob 1. die vID die gleiche wie in der DB ist und ob die fID vom Spieler die gleiche ist wie in der DB der Besitzer, oder ob das viel besser geht.

    Mache es über die vehicleid, also so:
    //Auszug aus /fpark
    new id=GetPlayerVehicleID(playerid);
    new vID=GetVehicleModel(id);
    new fID=pInfo[playerid][fraktion];
    for(new i=0;i<sizeof(fcInfo);i++)
    {
    printf("vID ist %i und fmodel ist %i",vID,fcInfo[i][fmodel]); // Das waren nur ein paar Überprüfungsversuche ob alles klappt
    printf("fID ist %i und fbesitzer ist %i",fID,fcInfo[i][fbesitzer]);
    if(id==fcInfo[i][id_x])
    {
    GetVehiclePos(fcInfo[i][id_x],fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z]);
    GetVehicleZAngle(fcInfo[i][id_x],fcInfo[i][fc_r]);
    new query[256];
    format(query,sizeof(query),"UPDATE fraktautos SET x='%f',y='%f',z='%f',r='%f' WHERE besitzer='%i' AND id='%i'",fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z],fcInfo[i][fc_r],fID,fcInfo[i][fdb_id]);
    mysql_function_query(dbhandle,query,false,"","");
    SendClientMessage(playerid,CLR_BLUE,"Erfolgreich umgeparkt. Euer Fraktauto wird nun immer hier spawnen!");


    Dann sollte auch das beschriebene Problem nicht mehr auftreten.

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