Шлагбаум

Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
Пользователь
Регистрация
11 Ноя 2025
Сообщения
13
Помогите пожалуйста, хочу сдалать шлагбаум, но чтобы с ним взаимодействовала определенная организация(их несколькл, штук 5) на Alt или H.На шлагбаум у меня уже имеются координаты, осталось как то сделать чтобы он функционировал. Помогите
 
Пользователь
Регистрация
8 Ноя 2025
Сообщения
48
Помогите пожалуйста, хочу сдалать шлагбаум, но чтобы с ним взаимодействовала определенная организация(их несколькл, штук 5) на Alt или H.На шлагбаум у меня уже имеются координаты, осталось как то сделать чтобы он функционировал. Помогите
нет
 
Пользователь
Регистрация
9 Авг 2025
Сообщения
66
// В начале скрипта, после includes
new BarrierState[MAX_PLAYERS]; // 0 - закрыт, 1 - открыт
new Float:BarrierCoords[][6] = {
{x1, y1, z1, rx1, ry1, rz1}, // координаты вашего шлагбаума
// добавьте больше шлагбаумов если нужно
};

// Организации которые могут управлять шлагбаумом
new AllowedFactions[] = {1, 2, 3, 4, 5}; // ID ваших организаций

public OnGameModeInit()
{
// Создаем объект шлагбаума
CreateObject(968, BarrierCoords[0][0], BarrierCoords[0][1], BarrierCoords[0][2],
BarrierCoords[0][3], BarrierCoords[0][4], BarrierCoords[0][5]);

return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
// Проверяем нажатие H или ALT
if((newkeys & KEY_CTRL_BACK) || (newkeys & KEY_WALK)) // H или ALT
{
// Проверяем находится ли игрок рядом со шлагбаумом
if(IsPlayerNearBarrier(playerid, 0)) // 0 - индекс шлагбаума
{
// Проверяем принадлежность к организации
if(IsPlayerInAllowedFaction(playerid))
{
ToggleBarrier(playerid, 0);
}
else
{
SendClientMessage(playerid, 0xFF0000AA, "Ошибка: У вас нет доступа к управлению шлагбаумом!");
}
}
}
return 1;
}

// Функция проверки расстояния до шлагбаума
IsPlayerNearBarrier(playerid, barrierid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);

new Float:distance = GetPlayerDistanceFromPoint(playerid,
BarrierCoords[barrierid][0], BarrierCoords[barrierid][1], BarrierCoords[barrierid][2]);

return (distance < 3.0); // радиус взаимодействия 3 метра
}

// Функция проверки принадлежности к организации
IsPlayerInAllowedFaction(playerid)
{
// Замените эту функцию на вашу систему фракций
new playerFaction = GetPlayerFaction(playerid); // ваша функция получения фракции игрока

for(new i = 0; i < sizeof(AllowedFactions); i++)
{
if(playerFaction == AllowedFactions)
{
return 1;
}
}
return 0;
}

// Функция управления шлагбаумом
ToggleBarrier(playerid, barrierid)
{
if(BarrierState[playerid] == 0) // если закрыт
{
// Открываем шлагбаум
MoveObject(GetBarrierObjectID(barrierid),
BarrierCoords[barrierid][0], BarrierCoords[barrierid][1], BarrierCoords[barrierid][2] - 2.0,
2.0); // поднимаем на 2 единицы

BarrierState[playerid] = 1;
SendClientMessage(playerid, 0x00FF00AA, "Шлагбаум открыт!");
}
else // если открыт
{
// Закрываем шлагбаум
MoveObject(GetBarrierObjectID(barrierid),
BarrierCoords[barrierid][0], BarrierCoords[barrierid][1], BarrierCoords[barrierid][2],
2.0); // опускаем обратно

BarrierState[playerid] = 0;
SendClientMessage(playerid, 0x00FF00AA, "Шлагбаум закрыт!");
}
}

// Функция получения ID объекта шлагбаума
GetBarrierObjectID(barrierid)
{
// Возвращает ID объекта для конкретного шлагбаума
// Вам нужно будет адаптировать эту функцию под вашу систему объектов
return barrierid + 1000; // пример
}


Настройка под вашу систему
Замените координаты: В массиве BarrierCoords укажите реальные координаты вашего шлагбаума

Настройте организации: В массиве AllowedFactions укажите ID ваших 5 организаций

Адаптируйте проверку фракций: Функция IsPlayerInAllowedFaction должна использовать вашу систему фракций

Настройте ID объектов: Функция GetBarrierObjectID должна возвращать реальный ID вашего объекта шлагбаума

(Надеюсь я вам помог, тк писал эту систему 2 часа)
 
Пользователь
Регистрация
11 Ноя 2025
Сообщения
13
// В начале скрипта, после includes
new BarrierState[MAX_PLAYERS]; // 0 - закрыт, 1 - открыт
new Float:BarrierCoords[][6] = {
{x1, y1, z1, rx1, ry1, rz1}, // координаты вашего шлагбаума
// добавьте больше шлагбаумов если нужно
};

// Организации которые могут управлять шлагбаумом
new AllowedFactions[] = {1, 2, 3, 4, 5}; // ID ваших организаций

public OnGameModeInit()
{
// Создаем объект шлагбаума
CreateObject(968, BarrierCoords[0][0], BarrierCoords[0][1], BarrierCoords[0][2],
BarrierCoords[0][3], BarrierCoords[0][4], BarrierCoords[0][5]);

return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
// Проверяем нажатие H или ALT
if((newkeys & KEY_CTRL_BACK) || (newkeys & KEY_WALK)) // H или ALT
{
// Проверяем находится ли игрок рядом со шлагбаумом
if(IsPlayerNearBarrier(playerid, 0)) // 0 - индекс шлагбаума
{
// Проверяем принадлежность к организации
if(IsPlayerInAllowedFaction(playerid))
{
ToggleBarrier(playerid, 0);
}
else
{
SendClientMessage(playerid, 0xFF0000AA, "Ошибка: У вас нет доступа к управлению шлагбаумом!");
}
}
}
return 1;
}

// Функция проверки расстояния до шлагбаума
IsPlayerNearBarrier(playerid, barrierid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);

new Float:distance = GetPlayerDistanceFromPoint(playerid,
BarrierCoords[barrierid][0], BarrierCoords[barrierid][1], BarrierCoords[barrierid][2]);

return (distance < 3.0); // радиус взаимодействия 3 метра
}

// Функция проверки принадлежности к организации
IsPlayerInAllowedFaction(playerid)
{
// Замените эту функцию на вашу систему фракций
new playerFaction = GetPlayerFaction(playerid); // ваша функция получения фракции игрока

for(new i = 0; i < sizeof(AllowedFactions); i++)
{
if(playerFaction == AllowedFactions)
{
return 1;
}
}
return 0;
}

// Функция управления шлагбаумом
ToggleBarrier(playerid, barrierid)
{
if(BarrierState[playerid] == 0) // если закрыт
{
// Открываем шлагбаум
MoveObject(GetBarrierObjectID(barrierid),
BarrierCoords[barrierid][0], BarrierCoords[barrierid][1], BarrierCoords[barrierid][2] - 2.0,
2.0); // поднимаем на 2 единицы

BarrierState[playerid] = 1;
SendClientMessage(playerid, 0x00FF00AA, "Шлагбаум открыт!");
}
else // если открыт
{
// Закрываем шлагбаум
MoveObject(GetBarrierObjectID(barrierid),
BarrierCoords[barrierid][0], BarrierCoords[barrierid][1], BarrierCoords[barrierid][2],
2.0); // опускаем обратно

BarrierState[playerid] = 0;
SendClientMessage(playerid, 0x00FF00AA, "Шлагбаум закрыт!");
}
}

// Функция получения ID объекта шлагбаума
GetBarrierObjectID(barrierid)
{
// Возвращает ID объекта для конкретного шлагбаума
// Вам нужно будет адаптировать эту функцию под вашу систему объектов
return barrierid + 1000; // пример
}


Настройка под вашу систему
Замените координаты: В массиве BarrierCoords укажите реальные координаты вашего шлагбаума

Настройте организации: В массиве AllowedFactions укажите ID ваших 5 организаций

Адаптируйте проверку фракций: Функция IsPlayerInAllowedFaction должна использовать вашу систему фракций

Настройте ID объектов: Функция GetBarrierObjectID должна возвращать реальный ID вашего объекта шлагбаума

(Надеюсь я вам помог, тк писал эту систему 2 часа)
Можно ваш вк если в случае чего появятся вопросы?
 
Пользователь
Регистрация
19 Май 2024
Сообщения
84
Помогите пожалуйста, хочу сдалать шлагбаум, но чтобы с ним взаимодействовала определенная организация(их несколькл, штук 5) на Alt или H.На шлагбаум у меня уже имеются координаты, осталось как то сделать чтобы он функционировал. Помогите
нет
// В начале скрипта, после includes
new BarrierState[MAX_PLAYERS]; // 0 - закрыт, 1 - открыт
new Float:BarrierCoords[][6] = {
{x1, y1, z1, rx1, ry1, rz1}, // координаты вашего шлагбаума
// добавьте больше шлагбаумов если нужно
};

// Организации которые могут управлять шлагбаумом
new AllowedFactions[] = {1, 2, 3, 4, 5}; // ID ваших организаций

public OnGameModeInit()
{
// Создаем объект шлагбаума
CreateObject(968, BarrierCoords[0][0], BarrierCoords[0][1], BarrierCoords[0][2],
BarrierCoords[0][3], BarrierCoords[0][4], BarrierCoords[0][5]);

return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
// Проверяем нажатие H или ALT
if((newkeys & KEY_CTRL_BACK) || (newkeys & KEY_WALK)) // H или ALT
{
// Проверяем находится ли игрок рядом со шлагбаумом
if(IsPlayerNearBarrier(playerid, 0)) // 0 - индекс шлагбаума
{
// Проверяем принадлежность к организации
if(IsPlayerInAllowedFaction(playerid))
{
ToggleBarrier(playerid, 0);
}
else
{
SendClientMessage(playerid, 0xFF0000AA, "Ошибка: У вас нет доступа к управлению шлагбаумом!");
}
}
}
return 1;
}

// Функция проверки расстояния до шлагбаума
IsPlayerNearBarrier(playerid, barrierid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);

new Float:distance = GetPlayerDistanceFromPoint(playerid,
BarrierCoords[barrierid][0], BarrierCoords[barrierid][1], BarrierCoords[barrierid][2]);

return (distance < 3.0); // радиус взаимодействия 3 метра
}

// Функция проверки принадлежности к организации
IsPlayerInAllowedFaction(playerid)
{
// Замените эту функцию на вашу систему фракций
new playerFaction = GetPlayerFaction(playerid); // ваша функция получения фракции игрока

for(new i = 0; i < sizeof(AllowedFactions); i++)
{
if(playerFaction == AllowedFactions)
{
return 1;
}
}
return 0;
}

// Функция управления шлагбаумом
ToggleBarrier(playerid, barrierid)
{
if(BarrierState[playerid] == 0) // если закрыт
{
// Открываем шлагбаум
MoveObject(GetBarrierObjectID(barrierid),
BarrierCoords[barrierid][0], BarrierCoords[barrierid][1], BarrierCoords[barrierid][2] - 2.0,
2.0); // поднимаем на 2 единицы

BarrierState[playerid] = 1;
SendClientMessage(playerid, 0x00FF00AA, "Шлагбаум открыт!");
}
else // если открыт
{
// Закрываем шлагбаум
MoveObject(GetBarrierObjectID(barrierid),
BarrierCoords[barrierid][0], BarrierCoords[barrierid][1], BarrierCoords[barrierid][2],
2.0); // опускаем обратно

BarrierState[playerid] = 0;
SendClientMessage(playerid, 0x00FF00AA, "Шлагбаум закрыт!");
}
}

// Функция получения ID объекта шлагбаума
GetBarrierObjectID(barrierid)
{
// Возвращает ID объекта для конкретного шлагбаума
// Вам нужно будет адаптировать эту функцию под вашу систему объектов
return barrierid + 1000; // пример
}


Настройка под вашу систему
Замените координаты: В массиве BarrierCoords укажите реальные координаты вашего шлагбаума

Настройте организации: В массиве AllowedFactions укажите ID ваших 5 организаций

Адаптируйте проверку фракций: Функция IsPlayerInAllowedFaction должна использовать вашу систему фракций

Настройте ID объектов: Функция GetBarrierObjectID должна возвращать реальный ID вашего объекта шлагбаума

(Надеюсь я вам помог, тк писал эту систему 2 часа)
гпт
Можно ваш вк если в случае чего появятся вопросы?
vk.com/durov
 
Пользователь
Регистрация
10 Дек 2025
Сообщения
1
new BarrierState[MAX_PLAYERS]; // 0 - закрыт, 1 - открыт
кринж... нахуй ты привязываешь шлагбаум к игроку? состояние должно быть привязано к шлагбауму, а не к игроку


овнер юнита, не позорься:
new BarrierState[MAX_BARRIERS]; // состояние каждого шлагбаума
new TotalBarriers = 1; // количество шлагбаумов


BarrierState[playerid] = 1;
ваааау, ты крутой гпт кодер!


блять, забудь про павн пж:
ToggleBarrier(playerid, barrierid)
{
    if(BarrierState[barrierid] == 0) // ты тут еблан, состояние шлагбаума, а не игрока
    {

        MoveObject(BarrierObjectID[barrierid],
            BarrierCoords[barrierid][0],
            BarrierCoords[barrierid][1],
            BarrierCoords[barrierid][2] - 2.0,
            2.0);
        
        BarrierState[barrierid] = 1;
        SendClientMessage(playerid, 0x00FF00AA, "Шлагбаум открыт!");
    }
    else
    {

        MoveObject(BarrierObjectID[barrierid],
            BarrierCoords[barrierid][0],
            BarrierCoords[barrierid][1],
            BarrierCoords[barrierid][2], // исх позиция
            2.0);
        
        BarrierState[barrierid] = 0;
        SendClientMessage(playerid, 0x00FF00AA, "Шлагбаум закрыт!");
    }
}

не лезь в павн и не беги помогать форумчанам, если сам не разбираешься в элементарном кодинге павн...
 
Сверху