Sveiki, pradėsiu greitai daryt taxi sistemą ir galvoju, kaip geriau daryti:
enum eTaxi{
bool:tVeza,
tVairuotojoId,
tKeleivioId,
Float:tRida,
tKaina
}
Bet dabar kitas dalykas, nesugalvoju, kaip padaryti žaidėjui išlipus iš mašinos visą apmokėjimą. Pvz. įrašynėsiu nuvažiuota atstumą su Float:tRida ir 100 metrų kainuotų 2$, kaip reiktų apskaičiuoti visą šitą? :?
Funkis prieš 9 metus
Buvau kaip ir sugalvojąs viską, bet mano variantu viskas suveiktu tik ant vieno žaidėjo.
Bebras prieš 9 metus
Tai turbūt eTaxi enum'ą naudoji tik kaip vienos dimensijos masyvą? Ne dviejų, su MAX_PLAYERS?
Funkis prieš 9 metus
Pasidaryt pasidareu, bet biški kitaip ir če žopa gaunasi didelė žopa:
public OnPlayerExitVehicle(playerid, vehicleid)
{
if(GetVehicleModel(vehicleid) == 420) // Tikriname ar taxi masina
{
new money = floatround(taxi_distance[playerid]*5, floatround_ceil)*2; // Skaiciuojame kiek pinigu vairuotojas turi gauti uz nuvaziuota atstuma
printf("%f",taxi_distance[playerid]);
if(IsPlayerTaxi_passenger[playerid] == 1 ) // Tikriname ar islipes zaidejas yra keleivis
{
format(zinute, 120, "{5980FF}•{ffffff} gavote {5980FF}%i €{ffffff}, kadangi keleivis išlipo iš tr. priemonės.", money); // Suformatuojame zinute
SendClientMessage(TaxiDriver[playerid], -1, zinute); // Issiunciame zinute
format(zinute, 120, "{5980FF}•{ffffff} sumokėjote {5980FF}%i €{ffffff}, kadangi išlipote iš taxi.", money); // Suformatuojame zinute
SendClientMessage(playerid, -1, zinute); // Issiunciame zinute
givePlayerMoney(playerid, -money); // Nuimame keleiviui pinigus
givePlayerMoney(TaxiDriver[playerid], money); // Duodame vairuotojui pinigus
new idas = TaxiDriver[playerid];
for(new i; i < 3; i++) { // Darome cikla is visu 3 keleivio vietu
if(TaxiPassengers[idas][i] == playerid) { // Tikriname ar zaidejo id yra lygi vienai is keleivio vietu
TaxiPassengers[idas][i] = -1; // Nuimame zaidejo id reiksme nuo keleivio vietos
break; // sustabdome cikla
}
}
TaxiDriver[playerid] = -1; // Zaidejui nuimame vairuotojo reiksme
IsPlayerTaxi_passenger[playerid] = 0; // Nustatome, kad zaidejas nebera keleivis
taxi_distance[playerid] = 0.0; // Nustatome, kad atstumas yra pradinis
PlayerTextDrawHide(playerid, taksometras1[playerid]);
PlayerTextDrawHide(playerid, taksometras2[playerid]);
PlayerTextDrawHide(playerid, taksometras3[playerid]);
return 1;
}
}
return 1;
}
ir šioje vietoje:
new money = floatround(taxi_distance[playerid]*5, floatround_ceil)*2;
Tas money nepasirodo toks, koks turi būti iš tikrųjų, panaudojus printf išgaunu štai tokį dalyką:
[20:06:17] 0.000000
[20:06:21] 3.654547
Pirmas printas, net neįsivaizduoju kodėl, bet būna 0.0000, bet va po kelių sekundžių išlenda normalus print'as, ta patį bandžiau ir po OnPlayerStateChange, bet ten išvis pasirodė tik vienas print'as : 0.0000
Kaip sudarau tą taxi_distance:
updateSpeedomether(playerid)
{
new
trID = GetPlayerVehicleID ( playerid ) , vMod = GetVehicleModel ( trID ) ,
Float:speed_ [ 4 ], engine, lights, alarm, doors, bonnet, boot, objective;
if(masina[trID][Gas] < 0.1)
{
GetVehicleParamsEx(trID, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(trID, 0, lights, alarm, doors, bonnet, boot, objective); // ONLY the engine param was changed (to 1)
}
//GetVehicleHealth ( vehID , carHP ) ;
GetVehicleVelocity ( trID , speed_ [ 0 ] , speed_ [ 1 ] , speed_ [ 2 ] );
speed_ [ 3 ] = floatsqroot ( ( speed_ [ 0 ] * speed_ [ 0 ] ) + ( speed_ [ 1 ] * speed_ [ 1 ] ) + ( speed_ [ 2 ] * speed_ [ 2 ] ) ) * 200.666667 ;
masina [ trID ] [ vehRida ] += speed_ [ 3 ] / 35000;
format ( g_szBuffer , sizeof ( g_szBuffer ) , "~y~%d~w~ KM/H" , GetPlayerSpeed ( playerid ) ) ;
PlayerTextDrawSetString ( playerid , speede[1][playerid] , g_szBuffer ) ;
//format ( string , sizeof ( string ) , "%0.1f%" , carHP/10 ) ;
//PlayerTextDrawSetString ( playerid , speedo [ 6 ] [playerid] , string ) ;
format ( g_szBuffer , sizeof ( g_szBuffer ) , "~y~ %0.2f~w~ L." , masina[trID][Gas] ) ; // speedo [ 10 ] [playerid]
PlayerTextDrawSetString ( playerid , speede[2][playerid] , g_szBuffer ) ;
format ( g_szBuffer , sizeof ( g_szBuffer ) , "~y~%s" , aVehicleNames [ vMod - 400 ] ) ; // speedo [ 10 ] [playerid]
PlayerTextDrawSetString ( playerid , speede[0][playerid] , g_szBuffer ) ;
format ( g_szBuffer , sizeof ( g_szBuffer ) , "~y~ %0.2f ~w~KM." , masina [ trID ] [ vehRida ] ) ;
PlayerTextDrawSetString ( playerid , speede[3][playerid] , g_szBuffer ) ;
if(GetVehicleModel(trID) == 420 && TaxiPassenger[playerid] != -1)
{
taxi_distance[playerid] += speed_ [ 3 ] / 35000;
format ( g_szBuffer , sizeof ( g_szBuffer ) , "Jusu vairuotojas %s~n~Nuvaziuotas atstumas: %0.2f~n~Moketi: %i EUR" , GetPlayerNameEx(playerid), taxi_distance[playerid], floatround(taxi_distance[playerid]*5, floatround_ceil)*2 ) ;
PlayerTextDrawSetString ( TaxiPassenger[playerid] , taksometras3[TaxiPassenger[playerid]] , g_szBuffer ) ;
}
return 1;
}