-
Helló!
Saját kocsirendszert írok, de problémá(k)ba ütköztem. Tudok kocsit létrehozni, betölteni, csak a rendszámot nem megfelelő kocsihoz adja hozzá... :/ Van egy olyan érzésem, hogy a tulajt sem tudja rendesen hozzárendelni.
OnGameModInit:
new vfile[64];
for(new vi=0; vi<MAX_VEHICLES; vi++)
{
format(vfile, sizeof(vfile), \"/vehicles/%i.ini\", vi);
if(dini_Exists(vfile))
{
format(tulaj[vi], MAX_PLAYER_NAME, \"%s\", dini_Get(vfile, \"Tulaj\"));
col1[vi]=dini_Int(vfile, \"Col1\");
col2[vi]=dini_Int(vfile, \"Col2\");
posx[vi]=dini_Float(vfile, \"PosX\");
posy[vi]=dini_Float(vfile, \"PosY\");
posz[vi]=dini_Float(vfile, \"PosZ\");
posa[vi]=dini_Float(vfile, \"PosA\");
format(rendszam[vi], 32, \"%s\", dini_Get(vfile, \"Rendszám\"));
vhp[vi]=dini_Float(vfile, \"HP\");
print(tulaj[vi]);
print(rendszam[vi]);
SetVehicleNumberPlate(vi, rendszam[vi]);
CreateVehicle(dini_Int(vfile, \"Model\"), posx[vi], posy[vi], posz[vi], posa[vi], col1[vi], col2[vi], -1);
SetVehicleHealth(vi, vhp[vi]);
SetVehicleParamsEx(vi, false, false, false, true, false, false, false);
}
}
CMD:kocsicraft(playerid, params[])
{
new model, szin1, szin2;
if(sscanf(params, \"iii\", model, szin1, szin2)) return SendClientMessage(playerid, COLOR_GREY, \"Usage: /kocsicraft [Model] [szin1] [szin2] \");
if(IsPlayerAdmin(playerid))
{
new vfile[64];
for(new vi=0; vi<MAX_VEHICLES; vi++)
{
format(vfile, sizeof(vfile), \"/vehicles/%i.ini\", vi);
if(!dini_Exists(vfile))
{
dini_Create(vfile);
dini_Set(vfile, \"Tulaj\", \"Nincs\");
dini_IntSet(vfile, \"Model\", model);
dini_IntSet(vfile, \"Col1\", szin1);
dini_IntSet(vfile, \"Col2\", szin2);
dini_FloatSet(vfile, \"PosX\", x[playerid]);
dini_FloatSet(vfile, \"PosY\", y[playerid]);
dini_FloatSet(vfile, \"PosZ\", z[playerid]);
dini_FloatSet(vfile, \"PosA\", 180.000);
new rszov[10];
format(rszov, sizeof(rszov), \"%s%s%s-%i\", betuk[random(26)], betuk[random(26)], betuk[random(26)], random(1000));
dini_Set(vfile, \"Rendszám\", rszov);
dini_FloatSet(vfile, \"HP\", 1000.0000);
format(tulaj[vi], MAX_PLAYER_NAME, \"%s\", dini_Get(vfile, \"Tulaj\"));
col1[vi]=dini_Int(vfile, \"Col1\");
col2[vi]=dini_Int(vfile, \"Col2\");
posx[vi]=dini_Float(vfile, \"PosX\");
posy[vi]=dini_Float(vfile, \"PosY\");
posz[vi]=dini_Float(vfile, \"PosZ\");
posa[vi]=dini_Float(vfile, \"PosA\");
format(rendszam[vi], 10, \"%s\", dini_Get(vfile, \"Rendszám\"));
vhp[vi]=dini_Float(vfile, \"HP\");
CreateVehicle(dini_Int(vfile, \"Model\"), posx[vi], posy[vi], posz[vi], posa[vi], col1[vi], col2[vi], -1);
SetVehicleNumberPlate(vi, rendszam[vi]);
SetVehicleHealth(vi, vhp[vi]);
SetVehicleParamsEx(vi, false, false, false, true, false, false, false);
break;
}
}
}
return 1;
}
Hol lehet a hiba? Előre is köszi!
Dupla hozzászólás automatikusan összefûzve. ( [time]2014. December 06. 16:16:32[/time] )
Bocsi, rossz helyre nyitottam!
-
Nem tudom,hogy pawn-ban mennyire számít de vannak,olyan nyelvek ahol számít a logikai sorrend is.
Pl:
SetVehicleNumberPlate(vi, rendszam[vi]);
CreateVehicle(dini_Int(vfile, \"Model\"), posx[vi], posy[vi], posz[vi], posa[vi], col1[vi], col2[vi], -1);
Szóval,szerintem megér egy próbát megcserélni a kettőt
-
A helyzet az, hogy alapjaraton logikai sorrendben volt minden benne, csak ugy meg egyaltalan nem ad a jocsikhoz semmilyen rendszamot, a SetVehicleToRespawn meg mukodeskeptelennek latszik... Igy ezert megcsereltem, mert igy a rendszamot mar megirja, es spawnolja utana a jarmuvet... Csak a rendszamok 1-gyel el vannak tolva... Probaltam hozzaadni az idhez 1-et, meg kivonni is 1-et, vagy egyaltalan nem volt rendszam vagy 2-vel tolta el...
-
Csinálj egy változót pl:
new car;
és ezt tedd a Createvehicle elé,valamint a SetVehicleNumberPlare(vi) helyére
így:
car=CreateVehicle(dini_Int(vfile, \"Model\"), posx[vi], posy[vi], posz[vi], posa[vi], col1[vi], col2[vi], -1);
SetVehicleNumberPlate(car, rendszam[vi]);
-
Nem tudom mennyiben másabb, ha változót csinálok hozzá, hisz az id ugyanaz marad...
A régi kocsirendszerem csak arra volt jó, hogy 1 embernek 1 autója lehessen, viszont én most névhez szeretném rendelni a kocsikat, hogy 1 embernek több is lehessen... :/ csak valami gond van a string változókkal...
Kipróbáltam ezt is, a probléma ugyanaz maradt.
-
Nekem van egy működő dolgom:
do
{
format(kkk,sizeof(kkk),\"/Kocsik/k%i.ini\",i);
if(!dini_Exists(kkk))
{
dini_Create(kkk);
dini_IntSet(kkk,\"kid\",0);
dini_FloatSet(kkk,\"kx\",0);
dini_FloatSet(kkk,\"ky\",0);
dini_FloatSet(kkk,\"kz\",0);
dini_IntSet(kkk,\"kszin1\",0);
dini_IntSet(kkk,\"kszin2\",0);
dini_Set(kkk,\"Rsz\",\"Nincs\");
dini_Set(kkk,\"Tulaj\",\"Senki\");
dini_IntSet(kkk,\"ar\",0);
}
else
{
kInfo[kid]=dini_Int(kkk,\"kid\");
kInfo[kx]=dini_Float(kkk,\"kx\");
kInfo[ky]=dini_Float(kkk,\"ky\");
kInfo[kz]=dini_Float(kkk,\"kz\");
kInfo[kszin1]=dini_Int(kkk,\"kszin1\");
kInfo[kszin2]=dini_Int(kkk,\"kszin2\");
kInfo[ar]=dini_Int(kkk,\"ar\");
car=AddStaticVehicle(kInfo[kid],kInfo[kx],kInfo[ky],kInfo[kz],90,kInfo[kszin1],kInfo[kszin2]);
SetVehicleNumberPlate(car, dini_Get(kkk,\"Rsz\"));
}
i++;
}
while(i<kocsik);
Ugye itt csak megadott kocsiszámba számol.
Konkrétan ugyan az,mármint a rendszámos rész,csak a format nincs az enyémben,éés tökéletesen működik :D
(
if(!dini_Exists(kkk))
rész csak azért van benne,hogy ha valami hiba van a számolásban akkor tudjam :D)
-
Nem tudom mennyiben másabb, ha változót csinálok hozzá, hisz az id ugyanaz marad...
A régi kocsirendszerem csak arra volt jó, hogy 1 embernek 1 autója lehessen, viszont én most névhez szeretném rendelni a kocsikat, hogy 1 embernek több is lehessen... :/ csak valami gond van a string változókkal...
Kipróbáltam ezt is, a probléma ugyanaz maradt.
Pedig igaza van, az ID-kkel vna a gond. A te esetedben van egy jármű ID-d, amit a \"vi\" tartalmaz ugyebár. Ellenben a CreateVehicle (és a többi járműlétrehozó függvény is) automatikusan osztja ki a jármű ID-ket. Ezek pedig a SAMP által kiosztott ID-k, melyek eltérnek a te általad megadott \"vi\"-től.
A megoldás számodra az lehet, hogy a SAMP által használt jármű ID-t eltárolod egy változóba, és minden járműkezelő függvény esetén ( CreateVehicle, SetVehicleNumberPlate, SetVehicleHealth, SetVehicleParamsEx ) ezt az ID-t használod. Példa egy lehetséges megvalósításra:
CMD:kocsicraft(playerid, params[])
{
new model, szin1, szin2;
if(sscanf(params, \"iii\", model, szin1, szin2)) return SendClientMessage(playerid, COLOR_GREY, \"Usage: /kocsicraft [Model] [szin1] [szin2] \");
if(IsPlayerAdmin(playerid))
{
new vfile[64];
for(new vi=0; vi<MAX_VEHICLES; vi++)
{
format(vfile, sizeof(vfile), \"/vehicles/%i.ini\", vi);
if(!dini_Exists(vfile))
{
dini_Create(vfile);
dini_Set(vfile, \"Tulaj\", \"Nincs\");
dini_IntSet(vfile, \"Model\", model);
dini_IntSet(vfile, \"Col1\", szin1);
dini_IntSet(vfile, \"Col2\", szin2);
dini_FloatSet(vfile, \"PosX\", x[playerid]);
dini_FloatSet(vfile, \"PosY\", y[playerid]);
dini_FloatSet(vfile, \"PosZ\", z[playerid]);
dini_FloatSet(vfile, \"PosA\", 180.000);
new rszov[10];
format(rszov, sizeof(rszov), \"%s%s%s-%i\", betuk[random(26)], betuk[random(26)], betuk[random(26)], random(1000));
dini_Set(vfile, \"Rendszám\", rszov);
dini_FloatSet(vfile, \"HP\", 1000.0000);
format(tulaj[vi], MAX_PLAYER_NAME, \"%s\", dini_Get(vfile, \"Tulaj\"));
col1[vi]=dini_Int(vfile, \"Col1\");
col2[vi]=dini_Int(vfile, \"Col2\");
posx[vi]=dini_Float(vfile, \"PosX\");
posy[vi]=dini_Float(vfile, \"PosY\");
posz[vi]=dini_Float(vfile, \"PosZ\");
posa[vi]=dini_Float(vfile, \"PosA\");
format(rendszam[vi], 10, \"%s\", dini_Get(vfile, \"Rendszám\"));
vhp[vi]=dini_Float(vfile, \"HP\");
realid[vi] = CreateVehicle(dini_Int(vfile, \"Model\"), posx[vi], posy[vi], posz[vi], posa[vi], col1[vi], col2[vi], -1);
SetVehicleNumberPlate(realid[vi], rendszam[vi]);
SetVehicleHealth(realid[vi], vhp[vi]);
SetVehicleParamsEx(realid[vi], false, false, false, true, false, false, false);
break;
}
}
}
return 1;
}
Csak azt a részt írtam át amiről beszéltem, feltételezem hogy a többi rész megfelelően működik :)
-
Nálam is a \"kocsik\" változó számolja a kocsikat,és ez alapján spawnolja le.
Szóval mindegyik kocsinak adott lesz a dl id-je így könnyebb beazonosítani.