Beiträge von BreadScript

    Hallo liebe Brotfische,


    ich versuche akutell mit Visual Basic 2010 einen Keybinder zu erstellen komme aber aktuell an meine grenzen. Mir wird folgender Fehler aktuell angezeigt


    Code
    Ein Aufruf an die PInvoke-Funktion "ProjektName!ProjektName.Form1::AddChatMessage" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.


    Weiß einer wo sich mein Fehler befindet ? Hier einmal der gesamte Code


    Das erstellen ist denke ich mal Richtig. Dennoch kann ich mich ja auch irren daher einmal der Code



    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]!=0)continue;
    GetPlayerName(playerid,PlayerInfo[p_id][pName],MAX_PLAYER_NAME);
    cInfo[i][besitzer]=PlayerInfo[playerid][pLeader];
    cInfo[i][c_x]=x;
    cInfo[i][c_y]=y;
    cInfo[i][c_z]=z;
    cInfo[i][c_r]=r;
    cInfo[i][color1]=1;
    cInfo[i][color2]=1;
    cInfo[i][model]=modelid;
    cInfo[i][fraktion] = PlayerInfo[playerid][pLeader];
    cInfo[i][id_x] = CreateVehicle(modelid,x,y,z,r,-1,-1,-1,0);
    new string[128];
    format(string,sizeof(string),"Das Auto %i wurde erstellt.",GetVehicleFriendlyName(cInfo[i][id_x]));
    SendClientMessage(playerid,COLOR_RED,string);
    saveCarToDBFrak(playerid,i);
    return 1;
    }

    for(new i=0; i<sizeof(cInfo); i++){ if(cInfo[i][id_x]==0) continue; if(cInfo[i][id_x] != GetVehicleTrailer(veh)) continue; cInfo[i][c_gespeert] = 1; cInfo[i][c_x] = 2245.3259; cInfo[i][c_y] = 2007.7205; cInfo[i][c_z] = 10.5474; if(cInfo[i][fraktion]==1) { SendClientMessage(playerid,-1,"Fraktionsfahrzeug."); } else { SendClientMessage(playerid,-1,"Privatfahrzeug."); } return true;}

    Else ist in dem Fall schwachsinnig bzw die falsche Abfrage. Da nicht ausgerechnet das Fahrzeug auch ein Privat Fahrzeug ist. Beispiel CreateVehicle für Jobs.

    Hallo,


    gerne würde ich nun Abfragen wollen ob es sich um ein Fraktionsfahrzeug handelt oder eben um ein Privat Fahrzeug. Leider bin ich da bisher ohne Erfolg.



    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]==0) continue;
    if(cInfo[i][id_x] != GetVehicleTrailer(veh)) continue;
    cInfo[i][c_gespeert] = 1;
    cInfo[i][c_x] = 2245.3259;
    cInfo[i][c_y] = 2007.7205;
    cInfo[i][c_z] = 10.5474;
    if(cInfo[i][fraktion]==1)
    {
    SendClientMessage(playerid,-1,"Fraktionsfahrzeug.");
    }
    if(cInfo[i][fraktion]==0)
    {
    SendClientMessage(playerid,-1,"Privatfahrzeug.");
    }




    }

    Er erkennt aktuell nur Privatfahrzeuge. Was müsste ich anders machen ?



    enum carEnum{
    id_x,
    model,
    besitzer,
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_r,
    c_gespeert,
    db_id,
    color1,
    color2,
    key,
    g_preis,
    fraktion



    }

    Dann musst du es so schreiben:
    for(new i=0; i<sizeof(cInfo); i++){ if(cInfo[i][id_x] == 0) continue; if(cInfo[i][id_x] != GetVehicleTrailer(veh)) continue; if(isEventVehicle[cInfo[i][id_x]] == 1) return SendClientMessage(playerid,-1,"Event Fahrzeuge können nicht abgeschleppt werden."); cInfo[i][c_gespeert] = 1; DestroyVehicle(cInfo[i][id_x]); cInfo[i][id_x]=0; break;}

    Führt leider nicht zu dem gewünschten Erfolg. Es gibt im Grunde keine Verbesserung. Das Return wird weiterhin nicht aufgerufen.

    Aktuell wie folgt



    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]==0) continue;
    if(cInfo[i][id_x] != GetVehicleTrailer(veh)) continue;
    cInfo[i][c_gespeert] = 1;
    DestroyVehicle(cInfo[i][id_x]);
    cInfo[i][id_x]=0;
    if(isEventVehicle[i] == 1) return SendClientMessage(playerid,-1,"Event Fahrzeuge können nicht abgeschleppt werden.");
    }

    Hallo, gerne möchte ich nun Abfragen ob ich am Haken ein Event Fahrzeug habe oder nicht (TowCar).
    Leider scheitert es bei der Abfrage. Das Fahrzeug wird wie folgt erstellt



    ocmd:eventcar(playerid,params[])
    {
    if(isAdmin(playerid,5))
    {
    new eventcarid;
    if(sscanf(params,"i",eventcarid)) return SendClientMessage(playerid,COLOR_RED,"/createeventcar [CAR ID]");
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    new veh = CreateVehicle(eventcarid, x+4, y, z,0, -1, -1, -1);
    SetVehicleNumberPlate(veh,"EVENTCAR");
    isEventVehicle[veh] = 1;
    }
    else
    {
    return SendClientMessage(playerid,-1,"Dieser Befehl konnte nicht gefunden werden");
    }
    return 1;
    }


    Mit
    if(isEventVehicle[i] == 1)
    versuche ich bisher abzufragen ob es ein Event Fahrzeug ist. Allerdings sagt er mir dauerhaft dass es dies nicht ist obwohl es eines der Fahrzeuge ist.


    Was ist in der Abfrage falsch ?

    Wird der genannte Wert in der MySQL Datenbank gespeichert?
    mach den befehl /save und dann /parken dann guck unter Ducoments\GTA SA User Files\SAMP\saves.txt (oder so war das)


    Danach überprüfst du die Coordinaten, ob die gesetzt wurden.
    Wenn das nicht klappt Gib die Coordinaten, sowie die DB_ID aus, damit die in der Konsole ausgegeben wird.

    Die Positionen werden einwandfrei gespeichert in der Datenbank. Nur ohne Restart / Relog befindet sich das Fahrzeug nie an der neuen Position.

    Das macht er hier bereits:

    Wo setzt du denn das Fahrzeug auf die geparkte Position nachdem es zerstört wurde?Du musst es bei OnVehicleSpawn natürlich auch an die richtige Position setzen.

    Ich möchte nicht, dass es geparkt wird sobald es zerstört ist. Sofern ich den Befehl /parken eingebe und das Fahrzeug danach zerstöre spawnt es noch am alten platz und nicht am neuen

    Du liest doch sicherlich irgendwo auf die Position aus - beim Starten des GMs z.b.
    Du musst natürlich noch die Positions Variablen in deinem Script aktualisieren auf die neue Position.
    Zeig uns mal dein Fahrzeug Enum (Wo du es lädst) und wie Leon bereits schrieb, einmal OnVehicleDeath.

    enum carEnum{
    id_x,
    model,
    besitzer,
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_r,
    c_gespeert,
    db_id,
    color1,
    color2,
    color3,
    key,
    g_preis,
    fraktion



    }

    Nichts was den Parken Befehl beeinträchtigen sollte



    public OnVehicleDeath(vehicleid, killerid)
    {
    if(isEventVehicle[vehicleid] == 1) {
    DestroyVehicle(vehicleid);
    }
    return 1;
    }

    Guten Tag liebe Brotfische,


    aktuell habe ich mal wieder ein Problem bei meinem Parken Befehl. Sobald das Fahrzeug kaputt geht wird dieses nicht an die neue Position gespawnt. Hat jemand eine Idee woran dies liegt ?


    Einmal der Parkbefehl als Code



    for(new id = 0; id < sizeof(cInfo); id++)
    {
    if(cInfo[id][id_x] == veh)
    {



    if(cInfo[id][fraktion] == PlayerInfo[playerid][pMember])
    {
    GetVehiclePos(cInfo[id][id_x],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z]);
    GetVehicleZAngle(cInfo[id][id_x],cInfo[id][c_r]);
    new query[256];
    format(query,sizeof(query),"UPDATE fautos SET x='%f',y='%f',z='%f',r='%f' WHERE id='%i'",cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],cInfo[id][db_id]);
    mysql_pquery(handle, query);
    return SendClientMessage(playerid,COLOR_RED,"Ab sofort findest du dieses Fraktionsfahrzeug hier.");
    }
    else
    {
    return SendClientMessage(playerid,COLOR_RED,"Du besitzt keinen Schlüssel für dieses Fahrzeugs");
    }
    }
    }

    Ich scheine bei der Umsetzung zu doof zu sein. Ich versteh es irgendwie nicht. Mag es ggf. einer für eine kleine Entlohnung für mich umsetzen ?


    Push

    Also du brauchst eine Seite wo du dann neue Check-boxen hinzufügen kannst oder dementsprechend. ((Beispiel) Mit ID, Name, Fahrzeug, Select)
    Diese Seite oder das Formular fügt dann in der Datenbank (Beispiel) "Fahrzeug Checkboxen" dementsprechend den Eintrag hinzu.


    Die Seite welche die Check-boxen auflisten soll muss dann bei jedem neuen Aufruf die aktuellen Einträge aus der Datenbank auslesen und je nach Fahrzeug auflisten.
    Ist das so c.a richtig verstanden und formuliert ?

    Diese Aussage trifft langsam dem zu was ich möchte. Es sollen nicht nur die neuen Werte die angeklickt wurden dem entsprechenden Fahrzwug angezeigt werden sondern alle. Das heißt wir erstellen für einen BMW eine neue Mängelzugehörigkeit wie z.b "Steinschlag in der Windschutzscheibe". Für den BMW haben wir alles eingetragen. Nun soll es an einen VW gehen. Dieser hat auch einen Steinschlag in der Windschutzscheibe. Nun möchte ich nicht für dass nächste Fahrzeug erneut den Wert erstellen sondern Ihn nur anklicken können.


    Also im Grunde


    Mängel erstellt = Soll für jedes Fahrzeug angezeigt werden.


    Natürlich soll die Auswahl der Checkoxmängel nur für ein bestimmtes Fahrzeug sein und nicht für alle.

    Ich habe im Anhang nun ein Bild angefügt welches dass ganze vielleicht etwas besser beschreibt. Im Bild gibt es aktuelle Mängel die man in einer Checkbox auswählen kann und speichern kann. Nach dem erneuten aufrufen werden die vorher gespeicherten Daten als angeklickt markiert.


    Nun möchte ich aber nicht, alle möglichen Mängel die es gibt dort aufschlüsseln (Fest im Code) sondern die möglichkeit haben, sobald ein Mangel entsteht diesen über die Datenbank flexibel hinzuzufügen ohne die PHP Datei anfassen zu müssen.

    Ich glaube, in diesem Video ist dein Vorhaben ganz gut beschrieben, sollte ich deine Pläne richtig aufgefasst haben.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    So wie ich es im schnell Durchlauf verstehe muss ich die Werte aber Hardcodet in die PHP Datein einbinden. Und genau dass will ich nicht. Ich möchte einfach eine Kategorie erstellen die ohne Bearbeiten der PHP Datei dann angezeigt werden und als Checkbox gefüllt werden können.