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š 10 metų
Buvau kaip ir sugalvojąs viską, bet mano variantu viskas suveiktu tik ant vieno žaidėjo.
Bebras prieš 10 metų
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;
}