[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
  • OAmtTestTimer zu OAmtTestTimer[playerid]
    Selbe mit OAmtTest
    Vor Zeile 4011 kommt folgendes:


    public OAmtTimerTest(playerid);


    //Handy

    C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\German\gamemodes\GTA.pwn(4010) : error 025: function heading differs from prototype



    public OAmtTimerTest(playerid);




    Habe ich auch nie gesehn? was soll das bewirken ?
    wen ich ; davorsetze nimmt er kein new string[64]; bei den anderen mehr an

  • Kann mir jemand sagen was hier wieder schief läuft?
    Ich kaufe ein Auto und setze pInfo[playerid][pVehicle1ID] auf die entsprechende AutoID.
    Frage ich eine zeile später pInfo[playerid][pVehicle1ID] ab, passt alles.



    gebe ich nun den cmd test ein, um pInfo[playerid][pVehicle1ID] abzufragen, ist es immer 0. (führt dann zu fehler da er die richtige stelle mit 0 überschreibt wenn ma nsich ausloggt)





    public carsavedtoDB(playerid,carid)
    {
    cInfo[carid][id_db]=cache_insert_id(dbhandle);
    pInfo[playerid][pVehicle1ID] = cInfo[carid][id_db];
    pInfo[playerid][pSQLid] = playerid;
    savePlayerVehicles(playerid);
    new string2[128];
    format(string2,sizeof(string2),"CARSAVEDTODB:::::playerid:[%i] id_db:[%i] pInfo[psvehicleID] = [%i]",playerid,cInfo[carid][id_db],pInfo[playerid][pVehicle1ID]);
    SendClientMessageToAll(COLOR_RED,string2);
    return 1;
    }



    werden sachen aus dem public nicht an anderer stelle übernommen?! Was muss ich anpassen?

  • Datenbank wird erstellt. Es wird sogar dort die OwnedVehicle1 gespeichert! Nur leider wird diese wieder beim logout überschrieben, gut. ich könnte das aus dem save bei logout nehmen, aber dann kann man unendlich viele autos kaufen wenn man sich nicht neu einloggt...




    BoughtOwnedCar(playerid,carid) // auto kaufen
    {
    new query[256];
    format(query,sizeof(query),"INSERT INTO cars (ownerID,model,Fuel,x,y,z,r) VALUES ('%i','%i','%i','%f','%f','%f','%f')",playerid,cInfo[carid][carmodel],20,cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_function_query(dbhandle,query,true,"carsavedtoDB","ii",playerid,carid); //speichert id jetzt, playerid wird übergeben, pSQLid nicht
    return 1;
    }




    zuvor kommt allerdings erst createownedcar ..




    CreateOwnedCar(playerid,modelid,cc1,cc2) // auto kaufen
    //CreateOwnedCar(pID,mID,Float:x,Float:y,Float:z,Float:r) // auto kaufen
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]!=0)continue;
    cInfo[i][owner]=pInfo[playerid][pSQLid];
    cInfo[i][carmodel]=modelid;

    new rand = random(sizeof(RandomCarDealer1Spawn));
    //SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], RandomReSpawn[rand][0], RandomReSpawn[rand][1], RandomReSpawn[rand][2], RandomReSpawn[rand][3],0,0,0,0,0,0 );
    cInfo[i][carcolor1]=cc1;
    cInfo[i][carcolor2]=cc2;
    cInfo[i][c_x]=RandomCarDealer1Spawn[rand][0];
    cInfo[i][c_y]=RandomCarDealer1Spawn[rand][1];
    cInfo[i][c_z]=RandomCarDealer1Spawn[rand][2];
    cInfo[i][c_r]=RandomCarDealer1Spawn[rand][3];
    cInfo[i][id_x] = CreateVehicle(modelid,RandomCarDealer1Spawn[rand][0],RandomCarDealer1Spawn[rand][1],RandomCarDealer1Spawn[rand][2],RandomCarDealer1Spawn[rand][3],cc1,cc2,-1);
    new string[128];
    format(string,sizeof(string),"übergebene variablen modelid:[%i] x:[%f] y:[%f] playerid:[%i]",modelid,RandomCarDealer1Spawn[rand][0],RandomCarDealer1Spawn[rand][1],playerid);
    SendClientMessageToAll(COLOR_RED,string);
    BoughtOwnedCar(playerid,i);
    return 1;
    }
    return 1;
    }

    • Offizieller Beitrag

    Nur leider wird diese wieder beim logout überschrieben

    Das bedeutet, wenn du ein Auto kauft und dein CMD benutzt klappt alles soweit, aber soweit du dich reloggst ist die Variable auf 0?


    Wenn das so ist, dann wird die Variable entweder vor dem Logout auf 0 gesetzt oder nicht richtig gespeichert.
    Es kann auch sein, dass beim laden etwas falsch läuft.

  • Ich habe ja überall abfragen mit meldung im chat.
    Bei savecartoDB setzte ich "pInfo[playerid][pVehicle1ID] = cInfo[carid][id_db];"
    Eine Zeile danach frage ich ab, ob das geklappt hat -> ja
    von dort aus, speicher ich das in die Datenbank. -> klappt


    Nun kann ich mit einem command /test das pInfo[playerid][pVehicle1ID] abfragen. ergebnis: NULL.
    kauft man ein Auto wird ebenfalls abgerfagt -> ich kann unendlich oft ein auto kaufen, das letzte wid überschrieben.


    Also irgendwie kommt das pInfo[playerid][pVehicle1ID] = cInfo[carid][id_db]; nicht aus dem savecartodb raus! es wird nur an dieser stelle im script übernommen. Frage ich es woanders ab, kommt immer null.
    Würde ich mich ausloggen (speichern beim ausloggen deaktiviert) dann wäre beim nächstenlogin pInfo[playerid][pVehicle1ID] korrekt, da es dann aus der datenbank ausgelesen wird.


    Liegt das an falschen return? oder wo ist der utnerschied mit public oder nicht public? Ich habe leider keine ahnung davon :(

  • per cmd



    ocmd:test2(playerid)
    {
    new string[256];
    format(string, sizeof(string), "[veh INFO]: owned vehicle id %i " , pInfo[playerid][pVehicle1ID]);
    SendClientMessage(playerid, COLOR_SYSTEM, string);
    return 1;
    }



    beim auto kaufen



    ocmd:vbuy(playerid,params[]) // auto kaufen
    {
    new mID,pID,cc1,cc2;
    if(sscanf(params,"iii",mID,cc1,cc2))return SendClientMessage(playerid,COLOR_RED,"INFO: /vbuy [Model Number] [Color 1] [Color 2]");
    for(new i=0; i<sizeof(bsInfo); i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,20,bsInfo[i][bs_x],bsInfo[i][bs_y],bsInfo[i][bs_z]))continue;
    {
    if(pInfo[playerid][pVehicle1ID] < 1) // nur EIN auto
    {
    if(bsInfo[i][bs_type]==11)
    {
    if(mID==410||mID==404||mID==466||mID==474||mID==478||mID==531||mID==542||mID==543||mID==549||mID==604||mID==605)
    {
    pID = pInfo[playerid][pSQLid];
    CreateOwnedCar(pID,mID,cc1,cc2);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Invalid Vehicle Number!");
    return 1;
    }




    }
    if(bsInfo[i][bs_type]==15)
    {



    }
    else
    {
    SendClientMessage(playerid, WHITE,"This is no cardealer.");
    return 1;
    }
    }
    else SendClientMessage(playerid, WHITE,"You already own a vehicle");
    return 1;
    }
    }
    return 1;
    }

    • Offizieller Beitrag

    if(!IsPlayerInRangeOfPoint(playerid,20,bsInfo[i][bs_x],bsInfo[i][bs_y],bsInfo[i][bs_z]))continue;
    {

    Das klappt so nicht. Entweder:
    if(IsPlayerInRangeOfPoint(playerid,20,bsInfo[i][bs_x],bsInfo[i][bs_y],bsInfo[i][bs_z])){


    oder


    if(!IsPlayerInRangeOfPoint(playerid,20,bsInfo[i][bs_x],bsInfo[i][bs_y],bsInfo[i][bs_z])) continue;

  • Moin


    Habe vor bei mir den Score und die Tode eines Spielers zu speichern.
    Wie kriege ich das hin?
    Habe mich mit dem File Functions Tutorial im SA-MP Wiki beschaeftigt, und das scheint ja genauso zu funktionieren wie die file.h Bibliothek in C.


    Jedoch hat mich das Tutorial nicht so sehr weitergebracht da es scheinbar sehr viele Nachteil beim Gebrauch von file gibt.


    Kann jemand eventuell einen kleinen Beispielcode schreiben, mit welchem ich beim Disconnect des Spielers Kills und Score speichere, und beim Connect wieder auslese? Am besten mit Spielername als Dateiname oder aehnlich.
    Waere super wenn jemand da was schreiben koennte, gibt schliesslich soviele Includes um Dateien zu schreiben, vielleicht kennt jemand ja das "beste".


    Zu Speichern und zu Lesen sind die Arrays PKills[MAX_PLAYERS]; und PScore[MAX_PLAYERS] mit PScore[playerid] = GetPlayerScore(playerid);

  • Es wird nicht überschrieben. Beim einloggen wird es aus der datenbank geladen (=0)
    Dann wird es beim autokauf,nachdem das auto generiert wurde auf die autoid gesetzt. den rest vom script juckt es halt eifnach nicht. -___-


    saveplayervehicle:



    savePlayerVehicles(playerid)
    {
    new query[1024];
    format(query,sizeof(query),"UPDATE players SET OwnedVehicle1='%i', OwnedVehicle2='%i' WHERE id='%i'",pInfo[playerid][pVehicle1ID],pInfo[playerid][pVehicle2ID], pInfo[playerid][pSQLid]);
    mysql_function_query(dbhandle,query,false,"","");
    print("player VEHICLES save");
    return 1;
    }

    • Offizieller Beitrag

    WHERE id='%i'


    Sicher das es funktioniert?


    pInfo[playerid][pSQLid] = playerid;


    Denn hier weißt du die Spieler-ID der Variable zu.


    Ebenfalls:


    Zitat

    wird es aus der datenbank geladen (=0)

    Verstehe ich das richtig, beim laden wird die Variable auf 0 geschrieben? Oder sollte das nur ein Smiley sein :D

  • Das speichern funktioniert! in der Datenbank steht bei OwnedVehicle1 genau die Zahl, die das auto in der cars datenbank als ID hat. (bis zum logout)


    das sqlid =playerid hab ich gemacht, damit das funktioniert.


    Beim laden wird nur geladen, wenn man einen account erstellt ist die Stelle leer, also 0. loggt man sich ein und hat nie ein Auto gekauft, wird 0 geladen. Das soll ja auch so sein.
    Nachdem kaufen soll es ja die die autoid bekommen und beim ausloggen soll die dann stehen.
    (zwischen speichern bei saveplayercar funktioniert ja, nur wenn man sich ausloggt und regulär speichert wird abgefragt -> 0 und dann mit 0 überschrieben-.. ist ja nur das resultat dass es nie ausserhalb der carsavedtodb sich ändert :(

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