Как сделать спидометр павно
В основном, после освоения азов систем регистраций, перед новичком(который только-только начинает писать СВОИ моды), стоит задача сделать функциональный, рабочий спидометр. Чаще всего возникает вопрос «как же сделать его»? Так вот, я заметил, большинство тем содержат в себе либо текстдравы(рисунок) либо функцию, но я почти не замечал где же обучение, за что отвечает та или иная строчка. Естественно расписывать очень подробно, всегда не легко, в любом случае я постараюсь уместить всю полезную информацию в один урок.
И так, для начала, необходимо будет придумать стиль спидометра, его дизайн. Если вы раньше не знали, то спидометры и прочую красивую ерунду, рисуют пользуясь текстдравами. Так вот очень удобно «рисовать» спидометры и т.д в IpleoMax Textdraw Editor, у него понятный интерфейс, также вам не придется по долгу возится с позициями и размерами текстдравов, поищите тему на форуме!
Нарисовав спидометр, нам необходимо создать текстдравы, я выбрал весьма простой дизай для своего спидометра:
Приступим же к скриптовому исполнению задуманного!
Для начала для нарисованных текстдравов, необходимо создать переменные:
Переменные созданы, теперь создадим функции для создания самих текстдравов!
в OnGameModeInit закинем:
Теперь нам надо сделать так, чтобы игрок который сел в машину на место водителя, видел спидометр
За изменение позиции игрока относительно штата, отвечает паблик OnPlayerStateChange, закинем код туда:
if(newstate == PLAYER_STATE_DRIVER)
<
if(!noeng(GetPlayerVehicleID(playerid)))
<
new v = GetPlayerVehicleID(playerid);
VehicleInfo[v][vFuel] = 50.0;
GetPlayerPos(playerid, VehicleInfo[v][vPosx],VehicleInfo[v][vPosy],VehicleInfo[v][vPosz]);
TextDrawShowForPlayer(playerid, SBox);
TextDrawShowForPlayer(playerid, SBox1);
PlayerTextDrawShow(playerid, CarSpeed[playerid]);
PlayerTextDrawShow(playerid, CarFuel[playerid]);
PlayerTextDrawShow(playerid, CarMilliage[playerid]);
PlayerTextDrawShow(playerid, CarLights[playerid]);
PlayerTextDrawShow(playerid, CarEngine[playerid]);
SpeedTimer[playerid] = SetTimerEx(«UpdateSpeed»,200,1,»d»,playerid);
return 1;
>
>
if(oldstate == PLAYER_STATE_DRIVER)
<
TextDrawHideForPlayer(playerid, SBox);
TextDrawHideForPlayer(playerid, SBox1);
PlayerTextDrawHide(playerid, CarSpeed[playerid]);
PlayerTextDrawHide(playerid, CarFuel[playerid]);
PlayerTextDrawHide(playerid, CarMilliage[playerid]);
PlayerTextDrawHide(playerid, CarLights[playerid]);
PlayerTextDrawHide(playerid, CarEngine[playerid]);
KillTimer(SpeedTimer[playerid]);
return 1;
>
SamPawno
Спидометр
Описание: Готовые решения скриптов, filterScript
Модератор: SJplayer
#1 LILUS » 6 ноября 2014, 21:06
new Text : Speed [ MAX_PLAYERS ][ 3 ];
public OnPlayerUpdate ( playerid )
<
if( GetPlayerState ( playerid ) == 2 )
<
SetSpeedDel ( playerid );
SetSpeedPok ( playerid );
>
return 1 ;
>
stock SetSpeedDel ( playerid )
<
switch( SpeedVehicle ( playerid ))
<
case 0..9 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
I» );
case 10..14 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
II» );
case 15..19 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
III» );
case 20..24 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIII» );
case 25..29 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIII» );
case 30..34 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIII» );
case 35..39 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIII» );
case 40..44 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIII» );
case 45..49 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIII» );
case 50..59 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIII» );
case 60..64 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIII» );
case 65..69 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIII» );
case 70..79 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIII» );
case 80..89 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIII» );
case 90..99 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIII» );
case 100..109 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIII» );
case 110..119 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIII» );
case 120..129 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIII» );
case 130..139 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIII» );
case 140..149 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIII» );
case 150..164 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIIII» );
case 165..174 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIIIII» );
case 175..189 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIIIIII» );
case 190..199 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIIIIIII» );
case 200..209 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIIIIIIII» );
case 210..219 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIIIIIIIII» );
case 220..229 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIIIIIIIIII» );
case 230..239 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIIIIIIIIIII» );
case 240..249 : TextDrawSetString ( Speed [ playerid ][ 0 ], «
IIIIIIIIIIIIIIIIIIIIIIIIIIIII» );
default: TextDrawSetString ( Speed [ playerid ][ 0 ], «
Вообщем проблема со спидометром такова, когда тестировал его один то он работал, как залил на основу и начали коннектиться игроки то он начал пропадать вместе с логотипом сервера
В сток SetPlayerSpawn
И наконец-то в конец мода
Ну и естественно в public добавляем функционал
В OnPlayerStateChange
Дело в том что бывает такая ошибка в тексдравах, ты создаешь его, а он не присваивается к переменной, из за этого он равен 0, и при скрывании или показа могут воздействоваться и другие тексдравы с 0 id как происходит и у тебя. Самый эффективный способ это пред основными тексдравами создать еще один, ложный текстрав. У меня была такая проблемма с ней я боролся именно так, не знаю более эффективный способ.
Но перед этой процедурой попробуй сделать проверку на 0 тексдрав когда ты их показываешь просто for измини на это, возможно баг устранится
Если не помогло сделай так, найди то место где ты создаешь тексдравы спидометра Speed в самое начало все CreatePlayerTextDraw вставь ложный тексдрав
то же самое сделай и с Speedometr
Дело в том что бывает такая ошибка в тексдравах, ты создаешь его, а он не присваивается к переменной, из за этого он равен 0, и при скрывании или показа могут воздействоваться и другие тексдравы с 0 id как происходит и у тебя. Самый эффективный способ это пред основными тексдравами создать еще один, ложный текстрав. У меня была такая проблемма с ней я боролся именно так, не знаю более эффективный способ.
Но перед этой процедурой попробуй сделать проверку на 0 тексдрав когда ты их показываешь просто for измини на это, возможно баг устранится
Если не помогло сделай так, найди то место где ты создаешь тексдравы спидометра Speed в самое начало все CreatePlayerTextDraw вставь ложный тексдрав
то же самое сделай и с Speedometr
Сделал все как надо выдало Error и Warning на аргументы