Autodega probleem
#1
Tervist

Mysql autode süsteem, ta ei lae autosid ära, ta nagu ei hakka lugemagi midagi, see jätab nagu kõik laadimised seisma v kuidas õelda, on siin koodis mingi kala paista ?

Autode laadimine:

Code:
public LoadCar()
{
        new arrCoords[18][32];
        new sql[128];
        new row[512];
        format(sql, sizeof(sql), "SELECT COUNT(*) FROM `autod`");
        mysql_query(sql);
        mysql_store_result();
        mysql_fetch_row(row);
        Datez = strval(row);
        mysql_free_result();
        new Kokku = 0;
        while(Kokku < Datez)
        {
            format(sql, sizeof(sql), "SELECT * FROM `autod` WHERE `ID` = %d", Kokku);
            mysql_query(sql);
            mysql_store_result();
            if(mysql_num_rows() > 0)
            {
                mysql_fetch_row(row);
                split(row, arrCoords, '|');
                mysql_free_result();
                AutoInfo[ Kokku ][ cAutoOmatud ] = strval( arrCoords[ 0 ] );
                               ..Muud andmed...
                AutoInfo[ Kokku ][ cID ] = strval( arrCoords[ 17 ] );
                Kokku++;
            }
        }
        printf("<-> Andmebaasist laaditi %d autot", Datez);
        return 1;
}
Reply
#2
Ma arvan, et sul pole autot IDga 0. Seega peaks muutuja Kokku olema alguses 1 (või siis koos Datez-iga suuremaks minema).

Peale selle ma kordan veel, et SELECT * FROM `autod` oleks palju parem query (sööb vähem serveri ja networki ressursse).
Sex, Drums and Rock'n'Roll
Reply
#3
Saad kerge näite teha kuidas teha nii, et mul on mingit moodi märgitud näiteks viimase grupeeringu/töö auto ID ja siis ta hakkab nagu selle järgi arvutama, sest ma mõtlen teha, et panna poeautod viimaseks siis ma saan teha autoostu dialoogiga.
Reply
#4
Ma päris täpselt ei saanud su mõttest aru. Kui viitsid, seleta täpsemalt ära. Smile
Sex, Drums and Rock'n'Roll
Reply
#5
Ikka viitsin

Nimelt mul on siis gamemodeinit all kõik nagu töö ja grupeeringu autod:

Addstaticvehicleex...
Addstaticvehicleex...

Nüüd ma tahan lisada poeautod siia lõppu, ehk siis nende id mängus ( Ja ka andmebaasis 'ID' vist ? ) hakkab tulema olenevalt sellest palju siin ees neid addstaticvehicleex autosid on. Seega milline näeb välja võimalikult targalt tehes LoadCars() funktsioon, et igaüks saaks ka omale vastava võtme sisselogides? Või hakata võtit panema sisselogides kontrollijärgi, et kas andmebaasis on mingi auto tema nimel v mitte ?

Asi vb natuke segane, kui ei saa aru tehke häält Big Grin
Reply
#6
Ma olen teinud sedasi, et on 3 enumit (saab ka 2-ga hakkama). Ühes on skriptist tulevate autode info (tööautod jms), teises andmebaasist tulevate autode info ja kolmandas autode IDde järgi viidatud teistesse enumitesse (muutujad vType, vID). Sedasi on iga auto info kindlas kohas ja vajadusel (kui on sobivas enumis), siis ka salvestada. Nii on neid ka hea lisada. Alguses võivad olla müügiautod, keskel tööautod jms ja lõpus veel müügiautosid või jumal teab kuidas muudmoodi ära jagatud.

Sai küll segane tekst (ja kuipalju see sulle sobis (süsteemi poolest)), aga kui millestki aru ei saa, siis küsi. Wink
Sex, Drums and Rock'n'Roll
Reply
#7
Sai küll segane tekst jah Big Grin

Mul ka enumiga märgitud tööautod / grupeeringuautod mis tulevad skriptist, aga seleta rohkem lahti kui viitsid, kui see mind poeautodega aitaks ja teeks asja palju arusaadavamaks, lihtsamaks gm-is.
Eriti hakkas mind see 3. enum huvitama Wink
Reply
#8
Mul on sqlist autode laadimisel selline kood:
Code:
new load = 0;
mysql_store_result();
while(mysql_retrieve_row())
{
    mysql_fetch_field_row(Data, "ID"); OwnableCarInfo[load][ID] = strval(Data);
    ...
    mysql_fetch_field_row(Data, "Health"); OwnableCarInfo[load][Health] = floatstr(Data);
    
    NewCar(1, load);
    Iter_Add(OCars, load);
    load++;
}

NewCar funktsiooni all on selline kood:
Code:
Delay:NewCar[100, ii](cartype, carid)
{
    if(cartype != 1 && cartype != 99)
    {
        ScriptCarInfo[carid][GID] = CreateVehicleNP(ScriptCarInfo[carid][Model], ScriptCarInfo[carid][PosX], ScriptCarInfo[carid][PosY], ScriptCarInfo[carid][PosZ], ScriptCarInfo[carid][Angle], ScriptCarInfo[carid][Color1], ScriptCarInfo[carid][Color2], ScriptCarInfo[carid][Plate]);
        ...
        VehInfo[ScriptCarInfo[carid][GID]][Type] = ScriptCarInfo[carid][Type] + 1;
        VehInfo[ScriptCarInfo[carid][GID]][TypeID] = carid;
        ...
        UpdateVehicleDamageStatus(ScriptCarInfo[carid][GID], ScriptCarInfo[carid][Panels], ScriptCarInfo[carid][Doors], ScriptCarInfo[carid][Lights], ScriptCarInfo[carid][Tires]);
    }
    else if(cartype != 99)
    {
        OwnableCarInfo[carid][GID] = CreateVehicleNP(OwnableCarInfo[carid][Model], OwnableCarInfo[carid][PosX], OwnableCarInfo[carid][PosY], OwnableCarInfo[carid][PosZ], OwnableCarInfo[carid][Angle], OwnableCarInfo[carid][Color1], OwnableCarInfo[carid][Color2], OwnableCarInfo[carid][Plate]);
        ...
        VehInfo[OwnableCarInfo[carid][GID]][Type] = 1;
        VehInfo[OwnableCarInfo[carid][GID]][TypeID] = carid;
        ...
        UpdateVehicleDamageStatus(OwnableCarInfo[carid][GID], OwnableCarInfo[carid][Panels], OwnableCarInfo[carid][Doors], OwnableCarInfo[carid][Lights], OwnableCarInfo[carid][Tires]);
    }
    return 1;
}

Ma loodan, et sellest koodist on veidi rohkem mu mõte aru saada. Nimelt laen ma andmebaasist müügiautode info ühte enumisse (minu puhul ScriptCar-id on ka andmebaasist võetud). Seejärel 100ms (seda sellepärast, et ma eemaldan autod serverist ja foreachi loopist, kui auto õhku lendab) järel on timer, mis auto spawnib ja VehInfo enumisse ka auto ID ja tüübi (müügiauto 1, skriptiautod 2-98, adminautod 99). Siis mul on hea võtta infot nii müügiautode kohta kui skriptiautode kohta eraldi. Kui ma ostan mängus sees ühe auto, siis ma lisan ta ScriptCarInfo enumisse esimesele vabale kohale ja seejärel spawnin selle, misjärel talle tekib enumis VehInfo oma kirje ID ja tüübiga.

Jälle sai segane tekst, aga äkki mõistad. Smile


//EDIT: VehInfo enumis ei ole mitte auto ID, vaid asukoht OwnableCarInfo enumis. Seda siis selletõttu, et kui mõni auto ID on vahelt puudu, siis see ei tähenda seda, et mul peab sama arvu autode saavutamiseks palju suurem enum olema (tühjad kohad).
Sex, Drums and Rock'n'Roll
Reply
#9
Hmm vb enumite asi natuke segane jah aga tekkisid mõned küsimused.

1) Kus sul võib nt vaja minna seda eraldi info võtmist?
2) Kui ma siit nagu aru saan, et iga tüübi alla saab minna mitu autot( Arvan seda sellest, et müügiautode ja adminautode jaoks kummagile ainult 1 tüüp ), siis miks sul on skriptiautode jaoks 2-98 ?

Reply
#10
1) Loopides. Kasvõi /andmetes autode kuvamiseks või salvestamiseks või grupeeringule grupeeringuautode kuvamiseks.

2) Skriptiautode jaoks ma olen sedasi teinud, et oleks lihtsam tuvastada töö, grupeeringu jms autosid. 97 erinevat on sellepärast, et sedasi on tüüpe lisades on lihtsam, pole niipalju vaja tweakida süsteemi.
Sex, Drums and Rock'n'Roll
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)