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
131
Пользователь
Помогите пожалуйста, хочу сдалать шлагбаум, но чтобы с ним взаимодействовала определенная организация(их несколькл, штук 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 часа)
Можно ваш вк если в случае чего появятся вопросы?
 
Май
92
17
Пользователь
Помогите пожалуйста, хочу сдалать шлагбаум, но чтобы с ним взаимодействовала определенная организация(их несколькл, штук 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
 
Дек
42
10
Пользователь
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, "Шлагбаум закрыт!");
    }
}

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