Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

Шлагбаум

Ноя
16
0
Пользователь
Помогите пожалуйста, хочу сдалать шлагбаум, но чтобы с ним взаимодействовала определенная организация(их несколькл, штук 5) на Alt или H.На шлагбаум у меня уже имеются координаты, осталось как то сделать чтобы он функционировал. Помогите
 
Ноя
48
133
Пользователь
Помогите пожалуйста, хочу сдалать шлагбаум, но чтобы с ним взаимодействовала определенная организация(их несколькл, штук 5) на Alt или H.На шлагбаум у меня уже имеются координаты, осталось как то сделать чтобы он функционировал. Помогите
нет
 
Авг
66
11
Пользователь
// В начале скрипта, после 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 часа)
 
Ноя
16
0
Пользователь
// В начале скрипта, после 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 часа)
Можно ваш вк если в случае чего появятся вопросы?
 
Май
155
21
Заблокированный
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки. Мы не несем ответственности за действия пользователя вне форума.
Помогите пожалуйста, хочу сдалать шлагбаум, но чтобы с ним взаимодействовала определенная организация(их несколькл, штук 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
 
@owner_akcent
Дек
131
66
Продавец
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, "Шлагбаум закрыт!");
    }
}

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