Всем доброго времени суток!
Понадобился на сервер одометр на TextDraw. Что-то взял из Сети, что-то сам приписал. Вроде всё правильно, но он отображается только у игрока [ ID:1 ], причем выглядит это как несколько TextDraw'ов, наложенных один на другой. И при смене машины не изменяется значение пройденного пути! Т.е. на одной машине проехал 10 км, сел в другую - там отсчет тоже с 10 км пошел.
Помогите, пожалуйста, найти ошибку.
Ко всем new:
new Text:Odometr[MAX_PLAYERS];
new Float:speed[MAX_VEHICLES];
new Float:speed_x[MAX_VEHICLES];
new Float:speed_y[MAX_VEHICLES];
new Float:speed_z[MAX_VEHICLES];
new Float
robeg[MAX_VEHICLES];
В OnPlayerConnect:
Odometr[playerid] = TextDrawCreate(48,425,"----------");//////////////////////////
TextDrawAlignment(Odometr[playerid],0);
TextDrawBackgroundColor(Odometr[playerid],0x000000ff);
TextDrawFont(Odometr[playerid],3);
TextDrawLetterSize(Odometr[playerid],0.4,1.5);
TextDrawColor(Odometr[playerid], 0xDDDDDDFF);
TextDrawSetOutline(Odometr[playerid],1);
TextDrawSetProportional(Odometr[playerid],1);
TextDrawSetShadow(Odometr[playerid],1);
В OnPlayerDisconnect:
TextDrawDestroy(Odometr[playerid]);
В OnPlayerUpdate:
if (GetPlayerState(playerid) == 2 || GetPlayerState(playerid) == 3)
{
new vehicleid = GetPlayerVehicleID(playerid);
GetVehicleVelocity(vehicleid, speed_x[vehicleid], speed_y[vehicleid], speed_z[vehicleid]);
speed[vehicleid] = 10 * floatsqroot( (floatpower ( floatabs(speed_x[vehicleid]), 2.0)) + (floatpower ( floatabs (speed_y[vehicleid]), 2.0)) + (floatpower ( floatabs (speed_z[vehicleid]), 2.0))); //множитель 10 выбран опытным путем.
speed[vehicleid] = floatround(speed[vehicleid]); //округленная скорость движения
}
Ну и Таймер:
Понадобился на сервер одометр на TextDraw. Что-то взял из Сети, что-то сам приписал. Вроде всё правильно, но он отображается только у игрока [ ID:1 ], причем выглядит это как несколько TextDraw'ов, наложенных один на другой. И при смене машины не изменяется значение пройденного пути! Т.е. на одной машине проехал 10 км, сел в другую - там отсчет тоже с 10 км пошел.
Помогите, пожалуйста, найти ошибку.
Ко всем new:
new Text:Odometr[MAX_PLAYERS];
new Float:speed[MAX_VEHICLES];
new Float:speed_x[MAX_VEHICLES];
new Float:speed_y[MAX_VEHICLES];
new Float:speed_z[MAX_VEHICLES];
new Float
В OnPlayerConnect:
Odometr[playerid] = TextDrawCreate(48,425,"----------");//////////////////////////
TextDrawAlignment(Odometr[playerid],0);
TextDrawBackgroundColor(Odometr[playerid],0x000000ff);
TextDrawFont(Odometr[playerid],3);
TextDrawLetterSize(Odometr[playerid],0.4,1.5);
TextDrawColor(Odometr[playerid], 0xDDDDDDFF);
TextDrawSetOutline(Odometr[playerid],1);
TextDrawSetProportional(Odometr[playerid],1);
TextDrawSetShadow(Odometr[playerid],1);
В OnPlayerDisconnect:
TextDrawDestroy(Odometr[playerid]);
В OnPlayerUpdate:
if (GetPlayerState(playerid) == 2 || GetPlayerState(playerid) == 3)
{
new vehicleid = GetPlayerVehicleID(playerid);
GetVehicleVelocity(vehicleid, speed_x[vehicleid], speed_y[vehicleid], speed_z[vehicleid]);
speed[vehicleid] = 10 * floatsqroot( (floatpower ( floatabs(speed_x[vehicleid]), 2.0)) + (floatpower ( floatabs (speed_y[vehicleid]), 2.0)) + (floatpower ( floatabs (speed_z[vehicleid]), 2.0))); //множитель 10 выбран опытным путем.
speed[vehicleid] = floatround(speed[vehicleid]); //округленная скорость движения
}
Код:
public Odometer(playerid)
{
for(new g = 0; g < MAX_PLAYERS; g++)
{
if(IsPlayerConnected(g))
{
new string[16];
new vehicleid = GetPlayerVehicleID(g);
if(!IsPlayerInAnyVehicle(g)) return 1;
new Float:l = (25.33*speed[vehicleid])/10000;
Probeg[vehicleid] += l;
format(string,sizeof(string),"%05.1f km", Probeg[vehicleid]);
TextDrawSetString(Odometr[g], string);
TextDrawShowForPlayer(playerid, Odometr[g]);
}
}
return 1;
}
Код:
SetTimer ("Odometer", 200, true);
Последнее редактирование модератором: