Beiträge von TheHondaTuner

    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 :(

    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;
    }

    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;
    }

    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 :(

    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;
    }

    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?

    Hey Leute. Sitze seit Stunden an diesem Problem.
    Folgende Zeile:



    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","i",carid);

    return 1;
    }




    die variable "carid" wird mit zu "carsavedtodb" übergeben. Leider geht die playerid verloren, die muss aber unbedingt mit. wenn ich nun einfach " ... carid,playerid);" mache, funktioiert es nicht, gibt einen error im mysql.log


    Wie Muss diese zeile aussehen, wenn ich 2 variablen mitnehmen will??
    Bitte helft mir, sitze seit stunden da drann und krieg es nicht hingebastelt ;(

    Ich möchte per command abfrage, welche autos man kaufen kann. (Soll dann per SendClienMessage in den chat)
    Dazu habe ich bereits Autos mit preis und name sowie id "im script"



    new buyablevehicles1[][BuyAbleVehicleInfo] =
    {
    {410, "Manana", 3000},
    {404, "Perennial", 2000},
    {466, "Glendale", 2000},
    {474, "Hermes", 3500},
    {478, "Walton", 1800},
    {531, "Tractor", 1800},
    {542, "Clover", 5500},
    {543, "Sadler", 2300},
    {549, "Tampa", 2500},
    {604, "crappy Glendale", 1300},
    {605, "crappy Sadler", 999}
    };


    Wie muss die SendClientMessage dazu gestalten?

    ok ERLEDIGT
    das die fehlermeldung war irreführend, problem lag wo anders


    Tag mismatch?! Bitte hilfe >.> bei zeile "format(query ...


    BoughtOwnedCar(playerid,carid) // auto kaufen{ new query[256]; format(query,sizeof(query),"INSERT INTO cars (OwnerID,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",pInfo[playerid][id_db],cInfo[carid][carmodel],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]); mysql_function_query(dbhandle,query,true,"carsavedtoDB","i",carid); return 1;}

    Hey Leute. Hat jemand eine Idee wie man es sinnvoll anstellt, wenn ein Business "components" generieren soll? (Öl Rafinerie generiert Öl als Spitze der wirtschaftskette)
    Ich denke mal man braucht einen Timer, fragt dann ab wieviel components das Business hat, addiert etwas dazu und speichert? Timer unter gamemodeinit?
    Oder gibt es eine andere Ausführung?


    Wenn ich


    SetTimerEx("GenerateComponents", 5000, true, "i", playerid);Bleibt es dann bei playerid? Ich möchte dass immer Sprit generiert wird, nicht nur wenn jemand online ist.Und wenn ich jetzt die GenrateComponents public mache, muss ich ja die Businesses abfragen. Da bräuchte ich auch Hilfe.Hab das Business system nach einem Tut gemacht. Die Abfrage bei commands (buy sell..) durch spieler sieht so aus:new name[MAX_PLAYER_NAME];
    new string[256];
    GetPlayerName(playerid, name,sizeof(name));
    for(new i=0; i<sizeof(bsInfo); i++)
    {
    if(!bsInfo[i][bs_id])continue;
    if(!IsPlayerInRangeOfPoint(playerid,5,
    bsInfo[i][bs_x],bsInfo[i][bs_y],bsInfo[i][bs_z]))continue;
    if(!strlen(bsInfo[i][bs_owner]))continue;
    {
    if(!strcmp(bsInfo[i][bs_owner],name, true))
    {
    format(string, sizeof(string), "[Business INFO]: According to the latest stocktaking the Storage holds %i Units of Compnents" , bsInfo[i][bs_compo]);
    SendClientMessage(playerid, COLOR_SYSTEM, string);
    }

    }

    }
    Jetzt habe ich zB "bs_type" also ob das ein Supermarkt oder halt ne Raffinerier ist. Wie muss das geändert werden, damit es nicht die IDs durchgeht und den namen sucht, sondern nur die Business typ 6 nimmt?!

    Kann mir jemand sagen, warum mein kleiner Text (hinweis auf fehlenden Führerschein) alles nachfolgende "killt"? Der text für die Rentcars erscheind zumindest nichtmehr



    if(newstate == PLAYER_STATE_DRIVER)
    {
    new vm = GetVehicleModel( vehicleid );
    if( vm == 581 || vm == 522 || vm == 461 || vm == 521 || vm == 523 || vm == 463 || vm == 586 || vm == 468 )
    {
    if(PlayerInfo[playerid][pBikelic] == 0)
    {
    SendClientMessage(playerid, COLOR_SYSTEM, "You do not have a Motorcycle license, if you are spotted, you might get fined!");
    }
    }


    ...........................



    if((vehicleid >= 122) && (vehicleid <= 124)) // Carset5
    {
    if(VRented[vehicleid] == 0)
    {
    format(string, sizeof(string), "~g~Wang's Vehicle Renter~n~~n~~w~This vehicle can be rented for ~g~$%d~w~~n~To rent this vehicle type /rentvehicle", CarSet5);
    InfoBoxForPlayer(playerid, string);
    TogglePlayerControllable(playerid, 0);
    CanEnter[playerid][vehicleid] = 1;
    }
    }

    EDIT:


    So, hab das mal aus dem /engine befehl genommen und versucht einzeln zu verpacken..


    Also nun habe ich ein simples problem. Weis aber nicht was ich tun muss.. :D


    Wenn man im Fahrschulauto ist, soll nach start des Motors die Checkpoints kommen.


    Steigtman in das Auto, fragt der script ab ob motor an oder aus. Ist natürlich aus und der script soll weitermachen wenn motor an


    ABER


    er fragt nur einmal ab! Nur beim einsteigen, danach passiert nix mehr. Wie muss ich das mit den return uws machen? Oder wie mache ich es, dass ständig abgefragt wird ob motor an oder aus?


    Du solltest zuerst GetVehicleParamsEx verwenden und dann if(light == 0) abfragen. :)



    So ich hab das jetzt so gemacht:






    Bei engine so ähnlich.
    Nun ist es so, dass er beim ersten versiuch Motor oder licht anzu machen, es erst versucht auszumachen(ist aber ja schon aus!)
    Danach funkti9niert es dann richtig, dh an, aus an aus ... etc.
    Woran liegt das?

    Hi,


    Ich habe das Problem, dass ich die Commands ( /lights und /engine) immer doppelt eingeben muss..
    Das heisst, Auto aus: /engine -> Auto an. erneut /engine "starts engine" -> auto immernoch an (anstatt das es wieder ausgeht :( nochmals engine: Auto aus. erneut engine: "turns off the engine" obwohl er schon aus ist!






    Das Problem besteht, seit ich meien scriptvorlage vom freeze prizip bei/engine auf wirkliches engine an/aus umgestellt habe :(