Проблема с пробегом у автомобиля -
Stepan23 - 06.02.2012
Можите подсказать как сделать чтобы когда игрок проехал например 100м на машине, то к пробегу +1
Сам пробывал, ничего не выходит...
Вот паблик отвечающий за скорость (если он нужен)
PHP код:
GetPlayerSpeed(playerid)
{
new Float:ST[4];
if(IsPlayerInAnyVehicle(playerid))GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 200.0;// Ñêîðîñòü òà÷åê
return floatround(ST[3]);
}
Re: Проблема с пробегом у автомобиля -
White_116 - 06.02.2012
Probeg[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0));
а когда выводим на экран делим на 100 и округляем.
Re: Проблема с пробегом у автомобиля -
Stepan23 - 06.02.2012
Поподробнее можно пж)
Re: Проблема с пробегом у автомобиля -
Xa0s - 06.02.2012
Так вроде.
PHP код:
GetPlayerProbeg(playerid)
{
new Float:ST[3];
GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
return floatpower(floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) \ 100);
}
Re: Проблема с пробегом у автомобиля -
Stepan23 - 06.02.2012
Неа..
Re: Проблема с пробегом у автомобиля -
-Stranger- - 06.02.2012
А зачем считать скорость 2 раза? если TS предоставил функцию определения скорости?
PHP код:
new float:DistanceTraveled[max_vehiles]; // В начале кода
DistanceTraveled[vid] += GetPlayerSpeed(playerid) / 3.6; // В какой нить !!!секундный!!! таймер
Соответственно в
DistanceTraveled[vid] храниться пробег в метрах. Далее сам конвертируй хоть в попугаев, хоть в драконов...
Re: Проблема с пробегом у автомобиля -
White_116 - 06.02.2012
-Stranger- - точность хромать будет =), но мы же не считаем сантиметры...
Re: Проблема с пробегом у автомобиля -
-Stranger- - 06.02.2012
Quote:
Originally Posted by White_116
-Stranger- - точность хромать будет =)
|
А что, извините, не хромает в этом мультиплеере !?!
Согласен, что на каждый КМ, показания уйдут на 10-15% Зато просто, и без извращения.
Это не учитывая то, что
GetVehicleVelocity,
GetPlayerVelocity измеряет соотношении длинны хвоста дракона на длину его крыльев, а не ускорение машины\игрока.
Так что погрешности это нормально в данном случае, по крайне мере они не будут сильно уходить от показание спидометра.
Re: Проблема с пробегом у автомобиля -
Stepan23 - 06.02.2012
Вот смотрите что получилось:

Как я вставлял:
PHP код:
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
//==========================================Скорость================
new string[MAX_STRING];
new door[16];
new v = GetPlayerVehicleID(playerid);
// // //====================================[ДВЕРИ]==================================
if(gCarLock[v] == 1)format(door, 16, "€AKP‘Џ‘");//Закрыты
if(gCarLock[v] == 0)format(door, 16, "OЏKP‘Џ‘");//Открыты
// // //===========================[Текстдравы, показывает]==========================
format(string, sizeof(string), FixText("~w~Скорость ~g~%d км/ч~n~~w~ЏOЊ‡…ўO: ~g~%d лит~n~~w~Пробег: ~g~%d"),GetPlayerSpeed(playerid), Gas[v],DistanceTraveled[playerid]);
TextDrawSetString(Textdraw0[playerid], string);
}
Потом ко всем new:
PHP код:
new float:DistanceTraveled[MAX_CARS];
И в Секундный таймер:
PHP код:
if(GetPlayerState(i)==PLAYER_STATE_DRIVER)//когда чувак только зарулём
{
DistanceTraveled[i] += GetPlayerSpeed(i) / 3.6;//Вот Пробег
new v = GetPlayerVehicleID(i);
if(GetPVarInt(i, "EngineTimer") > 0 && GetPVarType(i, "EngineTimer")!=0)
{
SetPVarInt(i, "EngineTimer", GetPVarInt(i, "EngineTimer")-1);
if(GetPVarInt(i, "EngineTimer") == 0)
{
new sendername[MAX_PLAYER_NAME];
GetPlayerName(i, sendername, sizeof(sendername));
new Float:carhp;
GetVehicleHealth(v,carhp);
if(carhp > 450&&Gas[v] > 0)
{
StartEngine(v);
SendClientMessage(i, COLOR_GREEN,"Ваш автомобиль завелся.");
format(string, sizeof(string), "Автомобиль %s завёлся", VehName[GetVehicleModel(v)-400]);
ProxDetector(30.0, i,string, COLOR_PURPLE);
Engine[v] = 1;
}
else SendClientMessage(i, COLOR_GREEN,"Двигатель не зводится.");
}
}
if((IsABoat(v)&&PlayerInfo[i][pBoatLic] < 1||IsAPlane(v)&&PlayerInfo[i][pFlyLic] < 1||IsACarB(v)&&PlayerInfo[i][pCarLic] < 1)&&(TakingLesson[i] != 1))RemovePlayerFromVehicle(i);
}
Re: Проблема с пробегом у автомобиля -
White_116 - 06.02.2012
new
float : DistanceTraveled[
MAX_CARS];
выводишь на экран не правильно, и переменную задаёшь не правильно, так как используешь для игроков.