Salik_Davince

Известный
Автор темы
38
3
Всем привет, по немногу начну делать мануалы/уроки и выкладывать готовые решения для SA:MP (pawn).
Хочу прежде напомнить, было бы отлично при копировании материала указывать мой никнейм и юзерку в ТГ: @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
 
  • Нравится
Реакции: Ethan_Mars

манку хлебал

Потрачен
305
122
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ты называешь переменные транслитом, какие тебе уроки писать?
 

Salik_Davince

Известный
Автор темы
38
3
Для тебя скорее в будущем, урок - читаем комментарии.

По твоему сообщению, мог бы переименовать переменную на - [Lighthouse, seamark, beacon, pharos]. Но в тот момент когда писался урок, нужно было сделать и показать, а не тратить время (которое я иногда слишком много трачу), на название переменной, можешь прочитать в TPRoger'e (вк паблик) статью, где на счет название переменных сделан акцент, там же в кратце говорится, нежели тратить пол часа или же час на название переменных, лучше сделать работу, проверить на работоспособность, а УЖ после можно без проблем отвечать на твои сообщения и менять название переменной ).
 
  • Нравится
Реакции: Ethan_Mars