Welcome to Сообщество игровых серверов NETZONA.ORG

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям. Зарегистрировавшись и войдя в систему, вы сможете создавать темы, публиковать ответы в существующих темах, давать репутацию другим участникам, получать собственный личный мессенджер и многое другое. Это также быстро и совершенно бесплатно, так чего же вы ждете?
  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта NetZONA.org: https://netzona.org/help/public-offer/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами использования Ваших файлов cookie на Проекте NetZONA.org: https://netzona.org/help/cookies/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с Политикой конфиденциальности Проекта NetZONA.org: https://netzona.org/pages/privacy-policy/

  • Ответы на основные вопросы: https://netzona.org/threads/populjarnye-voprosy-i-otvety-na-nix.6122/

  • Приветствуем на сайте, Гость! Приобрести (купить) Информационную услугу (в том числе группу "Проверенный") на Проекте NetZONA.org: https://netzona.org/account/upgrades

Помощь со скриптом для HL2RP дверей

Статус
В этой теме нельзя размещать новые ответы.

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
Ладно, я писал в один тред, но мне кажется тут это больше по теме.


Мне нужен маленький скриптик для дарк рп.
Ну, или скорее корректировка.
Вот на хл2рп есть карты, типа сити 17 и прочее. Там есть слайдер двери, которые нельзя открыть. Сделано это для того, чтобы потом подставить скрипт, дабы их могли открывать только комбайны. Но вот проблема, у меня есть чистый скрипт на открывание этих дверей, но чистый он потому, что в нем нет вайтлиста для комбайнов, их могут открывать все, в т.ч. гражданские.
А вот мне нужен этот самый вайтлист. Когда я пытался обратиться за этим на форум фейспанч, мне попытались помочь. Написали такие скрипты, но они не работали. Комбайны просто не могли открыть эти двери, как и гражданские. То есть, скрипт переставал работать. Так что если тут есть хорошие скриптеры, надеюсь на помощь в починке этих скриптов.

P.S. Да, мне нужен вайтлист на работы, типа эти двери может открывать только team_helix и т.д.

А теперь, сами скрипты:

Чистый:

Код:
function KeyPressedUse (ply, key)
    if key == IN_USE then
        local t = {}  
        t.start = ply:GetPos()  
        t.endpos = ply:GetShootPos() + ply:GetAimVector() * 100  
        t.filter = ply
        local trace = util.TraceLine(t)         
        if trace.Entity and trace.Entity:IsValid() and (trace.Entity:GetClass() == "func_door" or trace.Entity:GetClass() == "prop_door_rotating" or trace.Entity:GetClass() == "prop_dynamic") then
            trace.Entity:Fire("Open")
        end
    end
end
hook.Add( "KeyPress", "KeyPressedUse", KeyPressedUse  )

Первая попытка:

Код:
local jobs = { TEAM_WFYUED,
                TEAM_GYUIO };

function KeyPressedUse (ply, key)
     if key == IN_USE then
         if( !table.HasValue( jobs, _p:Team() ) ) then
             _p:ChatPrint( "Incorrect job" );
             return;
            end
         local t = {}  
         t.start = ply:GetPos()  
         t.endpos = ply:GetShootPos() + ply:GetAimVector() * 100  
         t.filter = ply
         local trace = util.TraceLine(t)         
         if trace.Entity and trace.Entity:IsValid() and (trace.Entity:GetClass() == "func_door" or trace.Entity:GetClass() == "prop_door_rotating" or trace.Entity:GetClass() == "prop_dynamic") then
             trace.Entity:Fire("Open")
         end
     end
end
hook.Add( "KeyPress", "KeyPressedUse", KeyPressedUse  )

Вторая попытка:
Код:
local foo = {
timer.Simple(1, function()
    foo[1] = TEAM_HELIX
    foo[2] = TEAM_CMD_SEC
end)}
local tbl = {
     jobs = ["TEAM_HELIX"] = true,
     doors = {
         ["func_door"] = true,
         ["prop_door_rotating"] = true,
         ["prop_dynamic"] = true
     }
}

-- Jobs does not exist until the gamemode has loaded, so we're gonna do it in here.
hook.Add("InitPostEntity", "insertJobs", function()
     local jobs = {
         [TEAM_HELIX] = true,
     }

     table.Merge(tbl.jobs, jobs);
end);

hook.Add("PlayerUse", "openDoors", function(ply, ent)
     if (not IsValid(ply) or not IsValid(ent)) then return; end

     local tr = util.TraceLine({
         start = ply:GetPos(),
         endpos = ply:GetShootPos() + ply:GetAimVector() * 100,
         filter = ply
     });

     if (IsValid(tr.Entity) and tbl.doors[tr.Entity:GetClass()]) then
         if (tbl.jobs[ply:Team()]) then
             -- If the door is locked then it won't open, uncomment this to make the doors unlock and open
             -- tr.Entity:Fire("unlock");
             tr.Entity:Fire("open", "", .5);
         end
     end
end);


Все, надеюсь на помощь, на русском я хотя бы свободно могу расписать все как есть.
 

DrodA

Пользователь
Проверенный
Регистрация
16 Фев 2017
Сообщения
128
Реакции
0
Баллы
30
Адрес
Sweden
Думаю, данное можно сделать, примерно, в таком роде:
Код:
if (CLIENT) then return end;

local EntityData =
{
    ["func_door"] = true,
    ["prop_door_rotating"] = true,
    ["prop_dynamic"] = true
};

local PlayerData =
{
    ["TEAM_TEAM"] = true
};

hook.Add("KeyPress", "DoorAccess", function(client, key)
    if (key == IN_USE) and (PlayerData[client:Team()]) then
        local traceTable = {};
        traceTable.start = client:GetPos();
        traceTable.endpos = (client:GetShootPos() + client:GetAimVector() * 100);
        traceTable.filter = client;

        local trace = util.TraceLine(traceTable);
        if (trace.Entity and trace.Entity:IsValid() and EntityData[trace.Entity:GetClass()]) then
            trace.Entity:Fire("open", "", 0);
        end;
    end;
end);

["TEAM_TEAM"], думаю, стоит изменить под [TEAM_TEAM]. Тут уже как получится.

Тестировал сугубо в одиночной игре, потому за результат никак не ручаюсь.

UPD: Без проверки на команду игрока работает безупречно. Возможно, DarkRP имеет свой приоритет в проверке той, или иной команды.
 
Последнее редактирование:

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
Думаю, данное можно сделать, примерно, в таком роде:
Код:
if (CLIENT) then return end;

local EntityData =
{
    ["func_door"] = true,
    ["prop_door_rotating"] = true,
    ["prop_dynamic"] = true
};

local PlayerData =
{
    ["TEAM_TEAM"] = true
};

hook.Add("KeyPress", "DoorAccess", function(client, key)
    if (key == IN_USE) and (EntityData[client:Team()]) then
        local traceTable = {};
        traceTable.start = client:GetPos();
        traceTable.endpos = (client:GetShootPos() + client:GetAimVector() * 100);
        traceTable.filter = client;

        local trace = util.TraceLine(traceTable);
        if (trace.Entity and trace.Entity:IsValid() and EntityData[trace.Entity:GetClass()]) then
            trace.Entity:Fire("open", "", 0);
        end;
    end;
end);

["TEAM_TEAM"], думаю, стоит изменить под [TEAM_TEAM]. Тут уже как получится.

Тестировал сугубо в одиночной игре, потому за результат никак не ручаюсь.

UPD: Без проверки на команду игрока работает безупречно. Возможно, DarkRP имеет свой приоритет в проверке той, или иной команды.

Не работает, а как этот приоритет поменять? Не знаете?
 

DrodA

Пользователь
Проверенный
Регистрация
16 Фев 2017
Сообщения
128
Реакции
0
Баллы
30
Адрес
Sweden
Тыкнул сборку DarkRP.
Установил данный исходник, как серверный модуль.
Код:
local EntityData =
{
    ["func_door"] = true,
    ["prop_door_rotating"] = true,
    ["prop_dynamic"] = true
};

local PlayerData =
{
    [TEAM_CITIZEN] = true
};

hook.Add("KeyPress", "DoorAccess", function(client, key)
    if PlayerData[client:Team()] then
        if (key == IN_USE) then
            local traceTable = {};
            traceTable.start = client:GetPos();
            traceTable.endpos = (client:GetShootPos() + client:GetAimVector() * 100);
            traceTable.filter = client;

            local trace = util.TraceLine(traceTable);
            if (trace.Entity and trace.Entity:IsValid() and EntityData[trace.Entity:GetClass()]) then
                trace.Entity:Fire("open", "", 0);
            end;
        end;
    end;
end);
Вполне работает.
 

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
Тыкнул сборку DarkRP.
Установил данный исходник, как серверный модуль.
Код:
local EntityData =
{
    ["func_door"] = true,
    ["prop_door_rotating"] = true,
    ["prop_dynamic"] = true
};

local PlayerData =
{
    [TEAM_CITIZEN] = true
};

hook.Add("KeyPress", "DoorAccess", function(client, key)
    if PlayerData[client:Team()] then
        if (key == IN_USE) then
            local traceTable = {};
            traceTable.start = client:GetPos();
            traceTable.endpos = (client:GetShootPos() + client:GetAimVector() * 100);
            traceTable.filter = client;

            local trace = util.TraceLine(traceTable);
            if (trace.Entity and trace.Entity:IsValid() and EntityData[trace.Entity:GetClass()]) then
                trace.Entity:Fire("open", "", 0);
            end;
        end;
    end;
end);
Вполне работает.

У меня не работает, я сейчас попробую вписать ковычки в TEAM_CITIZEN(в моем случае helix)
 

DrodA

Пользователь
Проверенный
Регистрация
16 Фев 2017
Сообщения
128
Реакции
0
Баллы
30
Адрес
Sweden
garrysmod/lua/autorun/server/combinedoors.lua(созданный мной файл)
Попробуй все это дельце уместить следующим образом:
addons/darkrpmodification/lua/darkrp_modules/combinedoors/sv_combinedoors.lua

Скорее всего проблемка в том, что нет инициализации с командами из-за того, что исходник прогружается до того, как подгружается darkrp.
 

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
Попробуй все это дельце уместить следующим образом:
addons/darkrpmodification/lua/darkrp_modules/combinedoors/sv_combinedoors.lua

Скорее всего проблемка в том, что нет инициализации с командами из-за того, что исходник прогружается до того, как подгружается darkrp.
Выдал ошибку про то, что штуки которая стоит между [] не существует(примерно так и написал)
Это он про команду, так что я попробую вписать ее в ковычки
Скрипт не работает, так что пробую пока что удалить файл в lua/autorun, возможно он врубается быстрее и перехватывает настройки дверей
 

DrodA

Пользователь
Проверенный
Регистрация
16 Фев 2017
Сообщения
128
Реакции
0
Баллы
30
Адрес
Sweden
Команда должна быть определенно без ковычек, так как Team() вызывает глобальную переменную.

Если выдает ошибку, значит таковой команды не существует вовсе, но могу и ошибаться.
 

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
Команда должна быть определенно без ковычек, так как Team() вызывает глобальную переменную.

Если выдает ошибку, значит таковой команды не существует вовсе, но могу и ошибаться.

Команда существует, я другому парню который пытался помочь скинул весь код команды.
И да, эта команда идеально работает.
P.S. Похоже, команды(работы) прогружаются позже модулей.
 

DrodA

Пользователь
Проверенный
Регистрация
16 Фев 2017
Сообщения
128
Реакции
0
Баллы
30
Адрес
Sweden
В моем случае, с TEAM_CITIZEN вполне прокатило. Тыкни какую-либо дефолтную команду, да проверь ее на работоспособность.
 

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
Команда существует, я другому парню который пытался помочь скинул весь код команды.
И да, эта команда идеально работает.
P.S. Похоже, команды(работы) прогружаются позже модулей.

Так, в чем прикол-то.
Попытался вписать без ковычек свою команду, но сервер полетел.
Ладно,попробую дефолт команду,но не думаю что это сработает
 

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
Так, в чем прикол-то.
Попытался вписать без ковычек свою команду, но сервер полетел.
Ладно,попробую дефолт команду,но не думаю что это сработает

Мне на фейспанче сделали другой скрипт, но он не работает в папке с модулями.
Хотя ошибка про работу не вылезает. Думаю, твой ближе к правде.
 

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
В моем случае, с TEAM_CITIZEN вполне прокатило. Тыкни какую-либо дефолтную команду, да проверь ее на работоспособность.

Так вот, ты не знаешь как сделать так чтобы работы прогружались раньше скрипта?
Потому что он не находит работы с jobs.lua
 

DrodA

Пользователь
Проверенный
Регистрация
16 Фев 2017
Сообщения
128
Реакции
0
Баллы
30
Адрес
Sweden
Для сущей работоспособности сделал данное следующим образом:
Был создан shared-модуль, куда залил кастомную команду (в нашем случае, для примера, добавил TEAM_HELIX).

Тем самым, откинулись всевозможные проблемы, а доступ кастомной фракции заработал так, как нужно.
Код:
local DRP = GM or GAMEMODE;

DRP.CombineDoorsJobWhiteList =
{
    [TEAM_HELIX] = true
};

local EntityData =
{
    ["func_door"] = true,
    ["prop_door_rotating"] = true,
    ["prop_dynamic"] = true
};

hook.Add("KeyPress", "DoorAccess", function(client, key)
    if DRP.CombineDoorsJobWhiteList[client:Team()] then
        if (key == IN_USE) then
            local traceTable = {};
            traceTable.start = client:GetPos();
            traceTable.endpos = (client:GetShootPos() + client:GetAimVector() * 100);
            traceTable.filter = client;

            local trace = util.TraceLine(traceTable);
            if (trace.Entity and trace.Entity:IsValid() and EntityData[trace.Entity:GetClass()]) then
                trace.Entity:Fire("open", "", 0);
            end;
        end;
    end;
end);

Попробуй сделать, примерно, таким образом. Авось и прокатит.
 

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
Для сущей работоспособности сделал данное следующим образом:
Был создан shared-модуль, куда залил кастомную команду (в нашем случае, для примера, добавил TEAM_HELIX).

Тем самым, откинулись всевозможные проблемы, а доступ кастомной фракции заработал так, как нужно.
Код:
local DRP = GM or GAMEMODE;

DRP.CombineDoorsJobWhiteList =
{
    [TEAM_HELIX] = true
};

local EntityData =
{
    ["func_door"] = true,
    ["prop_door_rotating"] = true,
    ["prop_dynamic"] = true
};

hook.Add("KeyPress", "DoorAccess", function(client, key)
    if DRP.CombineDoorsJobWhiteList[client:Team()] then
        if (key == IN_USE) then
            local traceTable = {};
            traceTable.start = client:GetPos();
            traceTable.endpos = (client:GetShootPos() + client:GetAimVector() * 100);
            traceTable.filter = client;

            local trace = util.TraceLine(traceTable);
            if (trace.Entity and trace.Entity:IsValid() and EntityData[trace.Entity:GetClass()]) then
                trace.Entity:Fire("open", "", 0);
            end;
        end;
    end;
end);

Попробуй сделать, примерно, таким образом. Авось и прокатит.

Как сделать shared модуль?
Или он уже в коде?
У меня сервер полетел от этого скрипта, как и тогда
 

HikkaSurito

Пользователь
Регистрация
21 Авг 2017
Сообщения
33
Реакции
0
Баллы
15
Возраст
25
Адрес
Parts Unknown
Пол
Для сущей работоспособности сделал данное следующим образом:
Был создан shared-модуль, куда залил кастомную команду (в нашем случае, для примера, добавил TEAM_HELIX).

Тем самым, откинулись всевозможные проблемы, а доступ кастомной фракции заработал так, как нужно.
Код:
local DRP = GM or GAMEMODE;

DRP.CombineDoorsJobWhiteList =
{
    [TEAM_HELIX] = true
};

local EntityData =
{
    ["func_door"] = true,
    ["prop_door_rotating"] = true,
    ["prop_dynamic"] = true
};

hook.Add("KeyPress", "DoorAccess", function(client, key)
    if DRP.CombineDoorsJobWhiteList[client:Team()] then
        if (key == IN_USE) then
            local traceTable = {};
            traceTable.start = client:GetPos();
            traceTable.endpos = (client:GetShootPos() + client:GetAimVector() * 100);
            traceTable.filter = client;

            local trace = util.TraceLine(traceTable);
            if (trace.Entity and trace.Entity:IsValid() and EntityData[trace.Entity:GetClass()]) then
                trace.Entity:Fire("open", "", 0);
            end;
        end;
    end;
end);

Попробуй сделать, примерно, таким образом. Авось и прокатит.

Как же я тебя заебал наверное хд
 

DrodA

Пользователь
Проверенный
Регистрация
16 Фев 2017
Сообщения
128
Реакции
0
Баллы
30
Адрес
Sweden
Попросту создается sh-файл в addons/darkrpmodification/lua/darkrp_modules/yourfolder/sh_yourfile.lua, куда уже вписываются все необходимые фракции/команды/etc.

Уж полететь серверу от данного скрипта вряд ли получится.

UPD: В целом, можно впихнуть все в один модуль. Хуже от этого не будет.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу