- 38
- 3
Всем привет, по немногу начну делать мануалы/уроки и выкладывать готовые решения для SA:MP (pawn).
Хочу прежде напомнить, было бы отлично при копировании материала указывать мой никнейм и юзерку в ТГ: @Salik_Davince
Приступим:
Ко всем переменным (в начало мода):
Создаем сам фонарь для Маяка, в паблике OnGameModeInit:
В паблик OnDynamicObjectMoved - (стримеровский паблик)
[!] Улучшения что-бы работало в ночное время суток:
В ежесекундный таймер: (либо таймер который обновляется каждый час):
В команду устанавливающую время суток для сервера (пример):
Скрины и видеоматериалы будут, но чуть позже.
Связь TG: @Salik_Davince
Хочу прежде напомнить, было бы отлично при копировании материала указывать мой никнейм и юзерку в ТГ: @Salik_Davince
Приступим:
Ко всем переменным (в начало мода):
PHP:
new mayak, mayak_moved_rot_fix;//Маяк не предумал нечего нового для названия переменной :)
Создаем сам фонарь для Маяка, в паблике OnGameModeInit:
PHP:
new hour, minute, second;//Если есть в паблике, то не нужно дублировать gettime
gettime(hour, minute, second);
switch(hour)
{
case 0,1,2,3,4,5,21,22,23: mayak = CreateDynamicObject(18656, 154.1740, -1952.2048, 48.0645 - 0.1, 0, 0, 0, -1, -1, -1, 350.00, 350.00);
default: mayak = CreateDynamicObject(18656, 154.1740, -1952.2048, 48.0645 - 0.1, 0, 0, 0, -1, -1, -1, 1.00, 1.00);
}
В паблик OnDynamicObjectMoved - (стримеровский паблик)
PHP:
if(objectid == mayak)
{
new Float:obj_x, Float:obj_y, Float:obj_z, Float:obj_rotate;
new Float:rot_pos;
if(!mayak_moved_rot_fix) rot_pos += 0.1;
else rot_pos -= 0.1;
mayak_moved_rot_fix = !mayak_moved_rot_fix;
Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Z, obj_rotate);
obj_rotate += 180;
if(obj_rotate > 360) obj_rotate = 0;
GetDynamicObjectPos(mayak, obj_x, obj_y, obj_z);
MoveDynamicObject(mayak, obj_x, obj_y, obj_z + rot_pos, 0.02, 0, 0, obj_rotate);
}
[!] Улучшения что-бы работало в ночное время суток:
В ежесекундный таймер: (либо таймер который обновляется каждый час):
PHP:
new hour, minute, second;//Если есть в паблике, то не нужно дублировать gettime
gettime(hour, minute, second);
if(minute == 00)
{
switch(hour)
{
case 0,1,2,3,4,5,21,22,23: {
Streamer_SetFloatData(STREAMER_TYPE_OBJECT, mayak, E_STREAMER_STREAM_DISTANCE, 350.0);
Streamer_SetFloatData(STREAMER_TYPE_OBJECT, mayak, E_STREAMER_DRAW_DISTANCE, 350.0);
}
default: {
Streamer_SetFloatData(STREAMER_TYPE_OBJECT, mayak, E_STREAMER_STREAM_DISTANCE, 1.0);
Streamer_SetFloatData(STREAMER_TYPE_OBJECT, mayak, E_STREAMER_DRAW_DISTANCE, 1.0);
}
}
}
В команду устанавливающую время суток для сервера (пример):
PHP:
CMD:settime(playerid, params[])
{
if(params[0] < 0 || params[0] > 23) return true;
switch(params[0])
{
case 0,1,2,3,4,5,21,22,23: {
Streamer_SetFloatData(STREAMER_TYPE_OBJECT, mayak, E_STREAMER_STREAM_DISTANCE, 350.0);
Streamer_SetFloatData(STREAMER_TYPE_OBJECT, mayak, E_STREAMER_DRAW_DISTANCE, 350.0);
}
default: {
Streamer_SetFloatData(STREAMER_TYPE_OBJECT, mayak, E_STREAMER_STREAM_DISTANCE, 1.0);
Streamer_SetFloatData(STREAMER_TYPE_OBJECT, mayak, E_STREAMER_DRAW_DISTANCE, 1.0);
}
}
SetWorldTime(params[0]);
return true;
}
Скрины и видеоматериалы будут, но чуть позже.
Связь TG: @Salik_Davince