Beiträge von Decoder

    Ich würde dir empfehlen, hier im Forum ein paar Grundlegende Tutorials durchzulesen.
    Ist ja keine dauerhafte Lösung, wenn du bei jedem command erstmal nachfragen musst, wie man das macht.


    Du solltest dir immer ein paar Fragen stellen
    -Werden parameter benötigt?


    ja-> Such nach Tutorials mit sscanf
    nein-> Was soll der Command können
    ->Ist es ein komplexes System?
    ja-> Überblick erstellen
    nein-> Soweit wie möglich versuchen, den command zu scripten.

    Hi,


    mein NPC connected, jedoch wird er kurze Zeit später wieder gekickt.
    Codes:
    ocmd:story(playerid,params[])
    {
    #pragma unused params
    switch(PlayerData[playerid][pLang])
    {
    case 0://german
    {
    ClearChat(playerid);
    SCM(playerid,-1," ***..");
    SCM(playerid,-1," *** ");
    SCM(playerid,-1," ****");
    CreateDialogBox(playerid);
    UpdateDialogBox(playerid,"~r~***.");
    SCM(playerid,-1," ***");
    SCM(playerid,-1," *******");
    CreateQuestBox(playerid);
    UpdateQuestBox(playerid,"~y~***");
    SetPlayerCheckpoint(playerid,-765.2651,1627.2670,27.1172,4);
    MissionCP[playerid]=1;
    ConnectNPC("Mission1","DRIntro");
    PlayerPlaySound(playerid,1058,0,0,0);
    }
    case 1://english
    {
    ClearChat(playerid);
    SCM(playerid,-1," ***..");
    SCM(playerid,-1," *** PM");
    SCM(playerid,-1,"***.");
    CreateDialogBox(playerid);
    UpdateDialogBox(playerid,"***");
    SCM(playerid,-1," *****y **");
    SCM(playerid,-1," ** T*****");
    CreateQuestBox(playerid);
    UpdateQuestBox(playerid,"~y***");
    SetPlayerCheckpoint(playerid,-765.2651,1627.2670,27.1172,4);
    ConnectNPC("Mission1","DRIntro");
    MissionCP[playerid]=1;
    PlayerPlaySound(playerid,1058,0,0,0);
    }
    }
    return 1;
    }
    public OnPlayerRequestClass(playerid, classid)
    {
    if(IsPlayerNPC(playerid))return 1;
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }
    public OnPlayerConnect(playerid)
    {
    GetPlayerName(playerid,SName[playerid],MAX_PLAYER_NAME);
    if(IsPlayerNPC(playerid))return 1;
    return 1;
    }

    public OnPlayerSpawn(playerid)
    {
    if(IsPlayerNPC(playerid))
    {
    new npcname[64];
    GetPlayerName(playerid,npcname,64);
    if(!strcmp(npcname,"Mission1",true))
    {
    SetPlayerPos(playerid,-738.1842,1648.0729,27.4358);
    SetPlayerSkin(playerid,33);
    SpawnPlayer(playerid);
    return 1;
    }
    }


    return 1;
    }


    Grüße Decoder


    #edit,


    Ich habe die einzelnen Schritte printen lassen, er kommt nichtmal bis OnPlayerSpawn bzw SetPlayerPos

    Hatte es ja vorher mit sscanf, allerdings war der float ebenfalls 0.0000


    enum Tankstelleninfo
    {
    id,
    owner[MAX_PLAYER_NAME],
    Float:iconx,
    Float:icony,
    Float:iconz,
    Float:kx,
    Float:ky,
    Float:kz,
    literpreis,
    buypreis,
    vorrat,
    owned
    }
    new Tanke[MAX_TANKE][Tankstelleninfo];


    Hier mal ein Ausschnitt aus meiner Debug Datei

    SQL
    [01:11:20] CMySQLHandler::Query(SELECT * FROM tankstellen) - Successfully executed.[01:11:20] >> mysql_store_result( Connection handle: 1 )[01:11:20] CMySQLHandler::StoreResult() - Result was stored.[01:11:20] >> mysql_fetch_row_format( Connection handle: 1 )[01:11:20] CMySQLHandler::FetchRow() - Return: 2|0|Niemand|1961.75|1343.11|15.3746|0|0|0|25000|0|0|0[01:11:20] >> mysql_fetch_row_format( Connection handle: 1 )


    Hier mal meine geprinteten results

    SQL
    2|0|Niemand|1961.75|1343.11|15.3746|0|0|0|25000|0|0|0       result1[01:12:52] 2|0|Niemand|1961.75|1343.11|15.3746|0|0|0|25000|0|0|0|         result2[01:12:52]  0.000000 <-Float via pos[0]


    Wo ich die Prints eingefügt habe
    Spoiler anzeigen
    stock LoadTankstellen()
    {

    Spoiler anzeigen
    new result[500],idx;
    format(result, 128, "SELECT * FROM tankstellen");
    print(result);
    new ttid,ow[MAX_PLAYER_NAME],Float:pos[3],Float:i[3],bp,v,lp,ond;
    mysql_query(result);
    mysql_store_result();
    //new string[256];
    while(mysql_fetch_row_format(result, "|"))
    {
    print(result);
    strins(result, "|", strlen(result));
    new oldi=0;
    new count=0;
    for(new t=0; t<strlen(result); t++)
    {
    if(result[t]=='|')
    {
    count++;
    new tmpstring[sizeof(result)]; tmpstring=result;
    strdel(tmpstring, t, strlen(tmpstring));
    strdel(tmpstring, 0, oldi+1);

    switch(count)
    {
    case 1: ttid = strval(tmpstring);
    case 2: format(ow, sizeof(ow), "%s", tmpstring);
    case 3: pos[0] = floatstr(tmpstring);
    case 4: pos[1] = floatstr(tmpstring);
    case 5: pos[2] = floatstr(tmpstring);
    case 6: i[0] = floatstr(tmpstring);
    case 7: i[1] = floatstr(tmpstring);
    case 8: i[2] = floatstr(tmpstring);
    case 9: bp = strval(tmpstring);
    case 10: v = strval(tmpstring);
    case 11: lp = strval(tmpstring);
    case 12: ond = strval(tmpstring);

    }

    oldi=t;
    }

    }
    print(result);
    Tanke[idx][id] = ttid;
    Tanke[idx][owner] = ow;
    Tanke[idx][buypreis] = bp;
    Tanke[idx][iconx] = pos[0];
    Tanke[idx][icony] = pos[1];
    Tanke[idx][iconz] = pos[2];
    Tanke[idx][kx] = i[0];
    Tanke[idx][ky] = i[1];
    Tanke[idx][kz] = i[2];
    CreatePickup(1272,1,Tanke[idx][iconx],Tanke[idx][icony],Tanke[idx][iconz],0);

    Spoiler anzeigen
    printf(" %f ", pos[0]);

    idx++;
    }
    return 1;
    }

    Kk


    Habe nun
    new result[500],idx;
    format(result, 128, "SELECT * FROM tankstellen"); //owner = so wie owner eben in der DB heißt
    print(result);
    new ttid,ow[MAX_PLAYER_NAME],Float:pos[3],Float:i[3],bp,v,lp,ond;
    mysql_query(result);
    mysql_store_result();
    //new string[256];
    while(mysql_fetch_row_format(result, "|"))
    {
    print(result);
    strins(result, "|", strlen(result));
    new oldi=0;
    new count=0;
    for(new t=0; t<strlen(result); t++)
    {
    if(result[t]=='|')
    {
    count++;
    new tmpstring[sizeof(result)]; tmpstring=result;
    strdel(tmpstring, t, strlen(tmpstring));
    strdel(tmpstring, 0, oldi+1);
    switch(count)
    {
    case 1: ttid = strval(tmpstring);
    case 2: format(ow, sizeof(ow), "%s", tmpstring);
    case 3: pos[0] = floatstr(tmpstring);
    case 4: pos[1] = floatstr(tmpstring);
    case 5: pos[2] = floatstr(tmpstring);
    case 6: i[0] = floatstr(tmpstring);
    case 7: i[1] = floatstr(tmpstring);
    case 8: i[2] = floatstr(tmpstring);
    case 9: bp = strval(tmpstring);
    case 10: v = strval(tmpstring);
    case 11: lp = strval(tmpstring);
    case 12: ond = strval(tmpstring);
    }
    oldi=t;
    }
    }
    Tanke[idx][id] = ttid;
    Tanke[idx][owner] = ow;
    Tanke[idx][buypreis] = bp;
    Tanke[idx][iconx] = pos[0];
    Tanke[idx][icony] = pos[1];
    Tanke[idx][iconz] = pos[2];
    Tanke[idx][kx] = i[0];
    Tanke[idx][ky] = i[1];
    Tanke[idx][kz] = i[2];
    CreatePickup(1272,1,Tanke[idx][iconx],Tanke[idx][icony],Tanke[idx][iconz],0);


    printf(" %f ", pos[0]);

    idx++;
    }
    return 1;


    Als print gibt er mir allerdings wieder 0.0000 aus

    Mysql-> Laden.
    Solltest du mit mysql etwas laden wollen, wäre es sinnlos, wenn du für jede Variable die db "öffnen" müsstest.Player[playerid][Level] = mysql_GetInt...


    Du öffnest ja auch nicht den Kühlschrank 35x um 35 Sachen rauszuholen

    Okay, danke für die Erklärung. Habe ich nun mehr oder weniger verstanden.


    Nur noch eine Frage, wo genau muss ich dass dann mit "Tanke[t][iconx]" etc einfügen?
    Muss ja noch innerhalb der for schleife sein, weil die Variable ja dort erstellt wurde.


    Wäre es so richtig?
    strins(result, "|", strlen(result));
    new oldi=0;
    new count=0;
    for(new t=0; t<strlen(result); t++)
    {
    if(result[t]=='|')
    {
    count++;
    new tmpstring[sizeof(result)]; tmpstring=result;
    strdel(tmpstring, t, strlen(tmpstring));
    strdel(tmpstring, 0, oldi+1);
    switch(count)
    {
    case 1: ttid = strval(tmpstring);
    case 2: format(ow, sizeof(ow), "%s", tmpstring);
    case 3: pos[0] = floatstr(tmpstring);
    case 4: pos[1] = floatstr(tmpstring);
    case 5: pos[2] = floatstr(tmpstring);
    case 6: i[0] = floatstr(tmpstring);
    case 7: i[1] = floatstr(tmpstring);
    case 8: i[2] = floatstr(tmpstring);
    case 9: bp = strval(tmpstring);
    case 10: v = strval(tmpstring);
    case 11: lp = strval(tmpstring);
    case 12: ond = strval(tmpstring);
    }
    printf(" Loops : %i", t);
    CreatePickup(1274,1,pos[0],pos[1],pos[2]);
    oldi=t;
    }


    }

    Abend,
    warum liest er mir den Float nicht bzw falsch aus?
    stock LoadTankstellen()
    {


    new
    idx = 0,
    result[500];
    format(result, 128, "SELECT * FROM tankstellen");
    print(result);
    new ttid,ow[MAX_PLAYER_NAME],Float:pos[3],Float:i[3],bp,v,lp,ond;
    mysql_query(result);
    mysql_store_result();
    new string[256];
    while(mysql_fetch_row_format(result, "|"))

    {
    sscanf(result, "p<|>is[30]ffffffiiii",ttid,ow,pos[0],pos[1],pos[2],i[0],i[1],i[2],bp,v,lp,ond);
    print(result);
    Tanke[idx][id] = ttid;
    Tanke[idx][owner] = ow;
    Tanke[idx][buypreis] = bp;
    Tanke[idx][iconx] = pos[0];//
    Tanke[idx][icony] = pos[1];//
    Tanke[idx][iconz] = pos[2];// Wird alles nicht geladen. Float: 0.0000 0.0000 0.0000, anstatt den richtigen Coords
    Tanke[idx][kx] = i[0];//
    Tanke[idx][ky] = i[1];//
    Tanke[idx][kz] = i[2];//
    Tanke[idx][vorrat] = v;
    Tanke[idx][literpreis] = lp;
    Tanke[idx][owned] = ond;
    CreatePickup(1274,1,Tanke[idx][iconx],Tanke[idx][icony],Tanke[idx][iconz],0);

    if(Tanke[idx][owned] == 1)
    {
    format(string,sizeof(string),"Tanke %i\nKaufpreis %i", Tanken, bp);
    }
    else
    {
    format(string,sizeof(string),"Tanke %i\nBesitzer %s\nLiterpreis %i\n %i /1000l",Tanken,Tanke[idx][owner],lp,v);
    }
    Create3DTextLabel(string,0xFFFFFFFF,Tanke[idx][iconx],Tanke[idx][icony],Tanke[idx][iconz],30,0,0);
    idx++;
    printf(" >> %i Tankstellen geladen!", idx);


    }
    print(result);
    mysql_free_result();
    return 1;
    }/*


    MFG

    Würde mich nur vom Forum ablenken, weil es irgendwie schon zu "extrem" mit diesen Querstrichen ist. Irgendwie sollte man das Forum, also die große Box, noch ein bisschen hervorheben


    Hier alles, was mit dem thema zu tun hat
    forward OnPlayerCarsLoaded(playerid);
    public OnPlayerCarsLoaded(playerid)
    {
    new
    idx,
    result[256],
    query[128];
    new downer[MAX_PLAYER_NAME],dplate[20],Float:sx,Float:sy,Float:sz,model,colo1,colo2,dprice,dcar,iD,Float:sr;


    format(result, 128, "SELECT * FROM `cars` WHERE `owner` = '%s'", SpielerName(playerid)); //owner = so wie owner eben in der DB heißt

    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(result, "|"))
    {
    print(result);
    sscanf(result, "p<|>is[16]ffffiiis[20]i",iD,downer,sx,sy,sz,sr,model,colo1,colo2,dplate,dprice);
    Playercar[idx][owner] = downer;
    Playercar[idx][plate] = dplate;
    Playercar[idx][spawnx] = sx;
    Playercar[idx][spawny] = sy;
    Playercar[idx][spawnz] = sz;
    Playercar[idx][spawnr] = sr;
    Playercar[idx][modelid] = model;
    Playercar[idx][c1] = colo1;
    Playercar[idx][c2] = colo2;
    Playercar[idx][price] = dprice;
    Playercar[idx][car] = AddStaticVehicleEx(Playercar[idx][modelid],Playercar[idx][spawnx],Playercar[idx][spawny],Playercar[idx][spawnz],Playercar[idx] [spawnr],Playercar[idx][c1],Playercar[idx][c2],60);
    idx++;
    }
    printf(" ||CAR: %s %i %f %f %f %f %i %i %i", downer,modelid,sx,sy,sz,sr,colo1,colo2,price);
    mysql_free_result();
    printf("[code=sql] Succesful. %i ausgelesen", idx); //
    return 1;
    }


    ocmd:testcar(playerid, params[])
    {
    new vid,cw1,cw2,pricef;
    if(sscanf(params,"iiii", vid,cw1,cw2,pricef))return SendClientMessage(playerid, -1, " /testcar <modelid> <c1> <c2> <price>");
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateVehicle(vid,x,y,z,0,cw1,cw2,60);
    return 1;
    }
    ocmd:savecar(playerid, params[])
    {
    #pragma unused params
    new Float:x,Float:y,Float:z,Float:a,co1,co2,query[500];
    new vehicleid = GetPlayerVehicleID(playerid);
    new model = GetVehicleModel(vehicleid);
    GetVehiclePos(vehicleid,x,y,z);
    GetVehicleZAngle(vehicleid, a);
    GetVehicleColor(vehicleid, co1, co2);
    format(query, sizeof(query), "INSERT INTO `cars` (`owner`, `spawnx`, `spawny`, `spawnz`, `spawnr`, `modelid`, `c1`,`c2`) VALUES ('%s', '%f', '%f', '%f', '%f', '%d', '%d', '%d')", SpielerName(playerid), x, y, z, a,model, c1, c2);
    mysql_query(query);
    printf(" %s ", query);
    RemovePlayerFromVehicle(playerid);
    return 1;
    }


    enum cardata
    {
    id,
    owner[MAX_PLAYER_NAME],
    plate[20],
    Float:spawnx,
    Float:spawny,
    Float:spawnz,
    Float:spawnr,
    modelid,
    c1,
    c2,
    price,
    car
    }
    new Playercar[MAX_CARS][cardata];


    Cars werden beim login geladen


    output
    ||CAR: 49 0.000000 0.000000 0.000000 0.000000 0 0 52
    [20:53:27] [code=sql] Succesful. 0 ausgelesen

    Danke für die Antwort.


    Jetzt lädt er laut meinem print die Daten, jedoch erstellt er mir keine Autos.
    [19:23:04] SELECT * FROM `cars` WHERE `owner` = 'Decoder'
    [19:23:04] ||CAR: 49 0.000000 0.000000 0.000000 0.000000 0 0 52
    [19:23:04] [code=sql] Succesful. 0 ausgelesen

    Guten Abend,
    da nun das Problem mit dem Laden und Speichern der Autos erledigt ist, gibt es nun ein weiteres.
    Es werden keine Spielerspezifischen Autos geladen.
    Bsp:
    Ich connecte mit "Decoder", ein Infernus wird geladen (habe ich mit "Decoder" erstellt)
    Ich lasse meinen Cousin connecten, jedoch wird bei ihm nicht das von ihm gespeicherte Auto geladen, sondern einfach alle, die in der Tabelle eingetragen sind.


    Codes.
    enum cardata
    {
    id,
    owner[MAX_PLAYER_NAME],
    plate[20],
    Float:spawnx,
    Float:spawny,
    Float:spawnz,
    Float:spawnr,
    modelid,
    c1,
    c2,
    price,
    car
    }
    new Playercar[MAX_CARS][cardata];


    public OnPlayerCarsLoaded()
    {
    new
    idx,
    result[256],
    query[128];
    new downer,dplate,Float:sx,Float:sy,Float:sz,model,colo1,colo2,dprice,dcar,iD,Float:sr;
    format(result, 128, "SELECT * FROM `cars` WHERE `ID` = '%d'", id);
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(result, "|"))
    {
    sscanf(result, "p<|>is[16]ffffiiis[20]i",iD,downer,sx,sy,sz,sr,model,colo1,colo2,dplate,dprice);
    Playercar[idx][owner] = downer;
    Playercar[idx][plate] = dplate;
    Playercar[idx][spawnx] = sx;
    Playercar[idx][spawny] = sy;
    Playercar[idx][spawnz] = sz;
    Playercar[idx][spawnr] = sr;
    Playercar[idx][modelid] = model;
    Playercar[idx][c1] = colo1;
    Playercar[idx][c2] = colo2;
    Playercar[idx][price] = dprice;
    Playercar[idx][car] = AddStaticVehicleEx(Playercar[idx][modelid],Playercar[idx][spawnx],Playercar[idx][spawny],Playercar[idx][spawnz],Playercar[idx] [spawnr],Playercar[idx][c1],Playercar[idx][c2],60);
    idx++;
    }
    printf(" ||CAR: %s %i %f %f %f %f %i %i %i", downer,modelid,sx,sy,sz,sr,colo1,colo2,price);
    mysql_free_result();
    printf("[code=sql] Succesful. %i ausgelesen", idx); //
    return 1;
    }


    Ich hoffe ihr könnt mir helfen. Am besten wäre es, wenn ihr mir das dann noch erklären würdet, da ich mich in diesem Bereich noch nicht so auskenne.

    Dankeschön. Funktioniert nun, musste vorher jedoch noch einen kleinen Fehler beheben


    sscanf(result, "p<|>is[16]ffffiiis[20]i",iD,downer,sx,sy,sz,sr,model,colo1,colo2,dplate,dprice);
    anstatt
    sscanf(result, "p<|>is[16]ffffiiii",iD,downer,sx,sy,sz,sr,model,colo1,colo2,dplate,dprice);


    Kann nun geschlossen werden - es seidenn, jemand will noch etwas anmerken


    MFG