PDA

Просмотр полной версии : [Вопрос] По спидометру



Snoop_Dog
15.06.2014, 17:28
Всем здрасте! вот такая проблема есть,
Когда сажусь в машину не показывается box'ы спидометра,
А когда выхожу с машины спидометр не скрывается,

Подскажите что да как!
Какой код предоставить.

DeimoS
15.06.2014, 17:38
OnPlayerEnterVehicle/OnPlayerExitVehicle

Snoop_Dog
15.06.2014, 18:15
В этих public'ов нету показов/скрытия спидометра

underwoker
15.06.2014, 18:17
В этих public'ов нету показов/скрытия спидометра
Вам сказали то что нужно предоставить, а не ваш анализ этих пабликов.
Естественно в них не будет скрытия/показа, ведь у вас в этом то и проблема.

Snoop_Dog
15.06.2014, 18:19
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(vehicleid <= MAX_BUYABLE_CARS)
{
SetVehicleParamsForPlayer(vehicleid, playerid, 0, CarsInfo[vehicleid-1][vLock]);
}
SetVehicleParamsForPlayer(vehicleid, playerid, 0, gCarLock[vehicleid]);
SetPVarInt(playerid, "NoAB", 1);
PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
Refueling[playerid] = 0;
GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vehicleid,engine,LightPwr[vehicleid],alarm,doors,bonnet,boot,objective);
return 1;
}


public OnPlayerExitVehicle(playerid, vehicleid)
{
if(IsPlayerNPC(playerid))return 1;
SetPVarInt(playerid, "NoAB", 1);
new string[100];
if(PEfir[playerid] != 255)
{
format(string, sizeof(string), "Вы вышли из прямого эфира");
SendClientMessage(playerid, COLOR_WHITE, string);
PEfir[playerid] = 255;
}
if(Pefir[playerid] == 1 || Pefir[playerid] == 2)
{
Pefir[playerid] = 0;
PEfir[playerid] = 255;
format(string, sizeof(string), "Вы вышли из прямого эфира");
SendClientMessage(playerid, COLOR_WHITE, string);
}
new Veh = GetPlayerVehicleID(playerid);
if(PlayerKarting[playerid] != 0)
{
SendClientMessage(playerid, COLOR_NEWS, "Вы были дисквалифицированы!");
DisablePlayerRaceCheckpoint(playerid);
DestroyVehicle(Veh);
RaceCP[playerid] = 0;
chet[playerid] = 0;
TogglePlayerControllable(playerid, 1);
SetPlayerInterior(playerid, 3);
SetPlayerPos(playerid,831.9918,1.6614,1004.1797);
SetPlayerFacingAngle(playerid, 39.0413);
PlayerKarting[playerid] = 0;
return 1;
}
if(Playermoto[playerid] != 0)
{
SendClientMessage(playerid, COLOR_NEWS, "Вы были дисквалифицированы!");
DisablePlayerRaceCheckpoint(playerid);
DestroyVehicle(Veh);
RaceCP[playerid] = 0;
motochet[playerid] = 0;
TogglePlayerControllable(playerid, 1);
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid,2690.2271,-1700.9700,10.4215);
SetPlayerFacingAngle(playerid, 45.9013);
Playermoto[playerid] = 0;
return 1;
}
if(TransportDuty[playerid] > 0)
{
if(TransportDuty[playerid] == 1)
{
TaxiDrivers -= 1;
TransportDuty[playerid] = 0;
}
}
GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vehicleid,engine,LightPwr[vehicleid],alarm,doors,bonnet,boot,objective);
return 1;
}

DeimoS
15.06.2014, 18:54
А теперь код показа/скрытия дайте (или же покажите переменные, хранящие ID текстдравов спидометра)

Snoop_Dog
15.06.2014, 19:06
Нашол вот это

if(newstate == 1)//скрываем спидак если выходит из машины
{
new carid = GetPlayerVehicleID(playerid);
if (!IsABycicle(carid))
{
KillTimer(STimer[playerid]);
TextDrawHideForPlayer(playerid,Box);
TextDrawHideForPlayer(playerid,LBorder);
TextDrawHideForPlayer(playerid,RBorder);
TextDrawHideForPlayer(playerid,BBorder);
TextDrawHideForPlayer(playerid,TBorder);
TextDrawHideForPlayer(playerid,Speed);
TextDrawHideForPlayer(playerid,Fuelll);
TextDrawHideForPlayer(playerid,Healths);
PlayerTextDrawHide(playerid,FuelShow[playerid]);
PlayerTextDrawHide(playerid,SpeedShow[playerid]);
PlayerTextDrawHide(playerid,Speed2Show[playerid]);
PlayerTextDrawHide(playerid,HealthShow[playerid]);
PlayerTextDrawHide(playerid,StatusShow[playerid]);
PlayerTextDrawHide(playerid,EngineShow[playerid]);
if(gSpectateSpecID[playerid] != INVALID_PLAYER_ID)
{
StartSpectate(gSpectateSpecID[playerid], playerid);
PlayerTextDrawHide(gSpectateSpecID[playerid],SpeedShow[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],StatusShow[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],FuelShow[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],HealthShow[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],Speed2Show[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],EngineShow[gSpectateSpecID[playerid]]);
}
TextDrawHideForPlayer(playerid, SignalDraw[0]);
TextDrawHideForPlayer(playerid, SignalDraw[1]);
TextDrawHideForPlayer(playerid, SignalDraw[2]);
TextDrawHideForPlayer(playerid, SignalDraw[3]);
SignalTick[carid][0] = 0;
SignalTick[carid][1] = -1;
Signal[carid] = 0;
}
}
if(newstate == PLAYER_STATE_DRIVER)//показываем спидак если залазит в кар
{
new carid = GetPlayerVehicleID(playerid);
if (!IsABycicle(carid))
{
STimer[playerid] = SetTimerEx("UpdateSpeedometr", ONE_HUNDRED_MSECOND, false, "iiid", playerid, carid, 0, 1000, 4);
TextDrawShowForPlayer(playerid,Box);
TextDrawShowForPlayer(playerid,LBorder);
TextDrawShowForPlayer(playerid,RBorder);
TextDrawShowForPlayer(playerid,BBorder);
TextDrawShowForPlayer(playerid,TBorder);
TextDrawShowForPlayer(playerid,Speed);
TextDrawShowForPlayer(playerid,Fuelll);
TextDrawShowForPlayer(playerid,Healths);
PlayerTextDrawShow(playerid,FuelShow[playerid]);
PlayerTextDrawShow(playerid,SpeedShow[playerid]);
PlayerTextDrawShow(playerid,Speed2Show[playerid]);
PlayerTextDrawShow(playerid,HealthShow[playerid]);
PlayerTextDrawShow(playerid,StatusShow[playerid]);
PlayerTextDrawShow(playerid,EngineShow[playerid]);
if(gSpectateSpecID[playerid] != INVALID_PLAYER_ID)
{
StartSpectate(gSpectateSpecID[playerid], playerid);
PlayerTextDrawShow(gSpectateSpecID[playerid],SpeedShow[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],StatusShow[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],FuelShow[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],HealthShow[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],Speed2Show[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],EngineShow[gSpectateSpecID[playerid]]);
}
if(IsACar(caridi))
{
TextDrawShowForPlayer(playerid, SignalDraw[0]);
TextDrawShowForPlayer(playerid, SignalDraw[1]);
TextDrawHideForPlayer(playerid, SignalDraw[2]);
TextDrawHideForPlayer(playerid, SignalDraw[3]);
}
}
}

Перменные;

new Text:LBorder; //переменная л-границы //
new Text:RBorder; //переменная п-границы //
new Text:BBorder; //переменная н-границы //
new Text:TBorder; //переменная в-границы //
new Text:Speed;
new Text:Fuelll;
new Text:Healths;
new Text:Box;

new PlayerText:SpeedShow[MAX_PLAYERS] = {PlayerText:-1, ...};
new PlayerText:HealthShow[MAX_PLAYERS] = {PlayerText:-1, ...};
new PlayerText:FuelShow[MAX_PLAYERS] = {PlayerText:-1, ...};
new PlayerText:StatusShow[MAX_PLAYERS] = {PlayerText:-1, ...};
new PlayerText:Speed2Show[MAX_PLAYERS] = {PlayerText:-1, ...};
new PlayerText:EngineShow[MAX_PLAYERS] = {PlayerText:-1, ...};

KShaddix
15.06.2014, 19:09
OnPlayerEnterVehicle/OnPlayerExitVehicle

Для спидометра лучше использовать OnPlayerStateChange. Ведь OnPlayerEnterVehicle вызывается даже, когда автомобиль закрыт, а ты пытаешься в него сесть (насколько я помню). И также OnPlayerExitVehicle вызывается, когда игрок сам выйдет из автомобиля, а если его телепортировали и т.д., то текстдравы так и останутся.

DeimoS
15.06.2014, 19:31
if(oldstate == PLAYER_STATE_DRIVER)//скрываем спидак если выходит из машины
{
new carid = GetPlayerVehicleID(playerid);
if (!IsABycicle(carid))
{
KillTimer(STimer[playerid]);
TextDrawHideForPlayer(playerid,Box);
TextDrawHideForPlayer(playerid,LBorder);
TextDrawHideForPlayer(playerid,RBorder);
TextDrawHideForPlayer(playerid,BBorder);
TextDrawHideForPlayer(playerid,TBorder);
TextDrawHideForPlayer(playerid,Speed);
TextDrawHideForPlayer(playerid,Fuelll);
TextDrawHideForPlayer(playerid,Healths);
PlayerTextDrawHide(playerid,FuelShow[playerid]);
PlayerTextDrawHide(playerid,SpeedShow[playerid]);
PlayerTextDrawHide(playerid,Speed2Show[playerid]);
PlayerTextDrawHide(playerid,HealthShow[playerid]);
PlayerTextDrawHide(playerid,StatusShow[playerid]);
PlayerTextDrawHide(playerid,EngineShow[playerid]);
if(gSpectateSpecID[playerid] != INVALID_PLAYER_ID)
{
StartSpectate(gSpectateSpecID[playerid], playerid);
PlayerTextDrawHide(gSpectateSpecID[playerid],SpeedShow[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],StatusShow[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],FuelShow[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],HealthShow[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],Speed2Show[gSpectateSpecID[playerid]]);
PlayerTextDrawHide(gSpectateSpecID[playerid],EngineShow[gSpectateSpecID[playerid]]);
}
TextDrawHideForPlayer(playerid, SignalDraw[0]);
TextDrawHideForPlayer(playerid, SignalDraw[1]);
TextDrawHideForPlayer(playerid, SignalDraw[2]);
TextDrawHideForPlayer(playerid, SignalDraw[3]);
SignalTick[carid][0] = 0;
SignalTick[carid][1] = -1;
Signal[carid] = 0;
}
}
else if(newstate == PLAYER_STATE_DRIVER)//показываем спидак если залазит в кар
{
new carid = GetPlayerVehicleID(playerid);
if (!IsABycicle(carid))
{
STimer[playerid] = SetTimerEx("UpdateSpeedometr", ONE_HUNDRED_MSECOND, false, "iiid", playerid, carid, 0, 1000, 4);
TextDrawShowForPlayer(playerid,Box);
TextDrawShowForPlayer(playerid,LBorder);
TextDrawShowForPlayer(playerid,RBorder);
TextDrawShowForPlayer(playerid,BBorder);
TextDrawShowForPlayer(playerid,TBorder);
TextDrawShowForPlayer(playerid,Speed);
TextDrawShowForPlayer(playerid,Fuelll);
TextDrawShowForPlayer(playerid,Healths);
PlayerTextDrawShow(playerid,FuelShow[playerid]);
PlayerTextDrawShow(playerid,SpeedShow[playerid]);
PlayerTextDrawShow(playerid,Speed2Show[playerid]);
PlayerTextDrawShow(playerid,HealthShow[playerid]);
PlayerTextDrawShow(playerid,StatusShow[playerid]);
PlayerTextDrawShow(playerid,EngineShow[playerid]);
if(gSpectateSpecID[playerid] != INVALID_PLAYER_ID)
{
StartSpectate(gSpectateSpecID[playerid], playerid);
PlayerTextDrawShow(gSpectateSpecID[playerid],SpeedShow[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],StatusShow[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],FuelShow[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],HealthShow[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],Speed2Show[gSpectateSpecID[playerid]]);
PlayerTextDrawShow(gSpectateSpecID[playerid],EngineShow[gSpectateSpecID[playerid]]);
}
if(IsACar(caridi))
{
TextDrawShowForPlayer(playerid, SignalDraw[0]);
TextDrawShowForPlayer(playerid, SignalDraw[1]);
TextDrawHideForPlayer(playerid, SignalDraw[2]);
TextDrawHideForPlayer(playerid, SignalDraw[3]);
}
}
}

Snoop_Dog
15.06.2014, 19:42
Нет все так же!

DeimoS
15.06.2014, 19:53
Код создания текстдравов покажите. Уверены, что у вас вообще бокс спидометра есть?

Snoop_Dog
15.06.2014, 20:04
Все решил я не подключил stock к public'у из за этого box'ы не подключались!

Но проблема со скрытием все еще осталась!

Snoop_Dog
15.06.2014, 20:43
Все решил! Тему close
Большое спасибо DeimoS! твой вариант помог.