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

Проблема Горячая клавиша

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

Hikka

Модератор
Команда форума
Проверенный
Регистрация
29 Сен 2016
Сообщения
555
Реакции
1
Баллы
60
Возраст
30
Пол
Вообщем хочу сделать что-то типо быстрый вызов инвентаря и прочего.
Как реализовать?
Жмешь например на KEY_I и вызывается инвентарь.
Код:
if CLIENT then
    hook.Add("Think", "Keypress menu", function()
        if LocalPlayer():IsTyping() || (IsValid(vgui.GetKeyboardFocus()) && vgui.GetKeyboardFocus():GetClassName( ) == "TextEntry") || gui.IsGameUIVisible() || gui.IsConsoleVisible() then
            return
        end
       
        if (LocalPlayer():getChar()) then
            if input.IsKeyDown(KEY_I) then
               // код
            end
        end
    end)
end

Вот где код, туда надо что-то засунуть это и так понятно, но вот что? Пробовал через vgui.Create("nutInventory") не работает.
 

DrodA

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

Дабы вызов Derma-панели/меню работал наиболее корректно и исправно, стоит задать локаль инициализации нажатии клавиши и, дабы не было жуткого спама панелями/сообщениями, зададим краткий таймер-задержку до последующего нажатия клавиши.
Выглядеть данное может следующим образом:
Код:
local clickerino = false // Данный локаль будет для нас местным инициализатором нажатия клавиши;
hook.Add("Think", "Lekeypaderino", function()
    local p = LocalPlayer()
    if !IsValid(p) || !p:Alive() then return end
    local char = p:getChar()
    local keydown_I = input.IsKeyDown(KEY_I)

    if char then
        if ((nextUse or 0) < CurTime()) then
            if keydown_I && old != keydown_I then
                nextUse = CurTime() + .5 // .5 == 0.5 ; «Разрешает» выполнять функцию каждые полсекунды.
                vgui.Create("nutMenu") // Примером будет открытие меню персонажа;
                print("key is down") // Для своеобразного отслеживания нажатия клавиши;
            end
            clickerino = keydown_I // При нажатии на клавишу, clickerino объявит об этом функции Think(), которая, в свою очередь, «запустит процесс» после нажатия;
        end
    end
end)
 

Hikka

Модератор
Команда форума
Проверенный
Регистрация
29 Сен 2016
Сообщения
555
Реакции
1
Баллы
60
Возраст
30
Пол
Вполне неплохая задумка.

Дабы вызов Derma-панели/меню работал наиболее корректно и исправно, стоит задать локаль инициализации нажатии клавиши и, дабы не было жуткого спама панелями/сообщениями, зададим краткий таймер-задержку до последующего нажатия клавиши.
Выглядеть данное может следующим образом:
Код:
local clickerino = false // Данный локаль будет для нас местным инициализатором нажатия клавиши;
hook.Add("Think", "Lekeypaderino", function()
    local p = LocalPlayer()
    if !IsValid(p) || !p:Alive() then return end
    local char = p:getChar()
    local keydown_I = input.IsKeyDown(KEY_I)

    if char then
        if ((nextUse or 0) < CurTime()) then
            if keydown_I && old != keydown_I then
                nextUse = CurTime() + .5 // .5 == 0.5 ; «Разрешает» выполнять функцию каждые полсекунды.
                vgui.Create("nutMenu") // Примером будет открытие меню персонажа;
                print("key is down") // Для своеобразного отслеживания нажатия клавиши;
            end
            clickerino = keydown_I // При нажатии на клавишу, clickerino объявит об этом функции Think(), которая, в свою очередь, «запустит процесс» после нажатия;
        end
    end
end)
Вопрос конечно стоял в другой форме, но и на этом спасибо. Попробую. В целом от спама я бы сам сделал, меня интересовал лишь вопрос вызова менюшек.
Но вот такой способ вызова меню он не работает с инвентарем. Я такое уже прбовал.
Плюс твой локальный буль служит глобально для всех, а значит его нужно объявить клиентским. Типо p.clickerino
 

DrodA

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

Плюс твой локальный буль служит глобально для всех, а значит его нужно объявить клиентским. Типо p.clickerino
Если быть точным, то, выставляя локаль на клиентской стороне (как пример: cl_hooks), никуда никого и не стоит лишний раз объявлять. Уж более воздействовать ему не с чем, кроме как реагировать на самого клиента.

Впрочем, как таковой, могу и ошибаться.
Затею с объявлением локаля клиентским подхвачу. Крайне благодарю за наводку.
 

Hikka

Модератор
Команда форума
Проверенный
Регистрация
29 Сен 2016
Сообщения
555
Реакции
1
Баллы
60
Возраст
30
Пол
С инвентарем, который, непосредственно, сам инвентарь? Уж, казалось было, такая же панелька. Чего уж ей там не работать?
Вообщем, попробуй создать и если получиться выкладывай. Потому что как я уже говорил выше, у меня не получилось.
 

DrodA

Пользователь
Проверенный
Регистрация
16 Фев 2017
Сообщения
128
Реакции
0
Баллы
30
Адрес
Sweden
Отписал данную вещицу на стандартной сборке hl2rp прямиком в schema/hooks/cl_hooks.lua
Если я правильно понял суть инвентаря, то данное работает вполне исправно:
p74vCmglGZM.jpg

Исходный код данной вещицы:
Код:
local clickerino = false
hook.Add("Think", "Lekeypaderino", function()
    local p = LocalPlayer()
    if !IsValid(p) || !p:Alive() then return end
    local char = p:getChar()
    local keydown_I = input.IsKeyDown(KEY_I)

    if char then
        if ((nextUse or 0) < CurTime()) then
            if (keydown_I && clickerino != keydown_I && !p:getNetVar("typing")) then
                nextUse = CurTime() + .5

                if IsValid(nut.gui.inv1) then nut.gui.inv1:Remove() end
               
                nut.gui.inv1 = vgui.Create("nutInventory")
                nut.gui.inv1:ShowCloseButton(true)

                local inventory2 = char:getInv()
                if (inventory2) then nut.gui.inv1:setInventory(inventory2) end

                print("key is down")
            end
            clickerino = keydown_I
        end
    end
end)

Весь всевозможный функционал работает (выкидывание/использование/экипировка и тд и тп).
 

Hikka

Модератор
Команда форума
Проверенный
Регистрация
29 Сен 2016
Сообщения
555
Реакции
1
Баллы
60
Возраст
30
Пол
Отписал данную вещицу на стандартной сборке hl2rp прямиком в schema/hooks/cl_hooks.lua
Если я правильно понял суть инвентаря, то данное работает вполне исправно:
p74vCmglGZM.jpg

Исходный код данной вещицы:
Код:
local clickerino = false
hook.Add("Think", "Lekeypaderino", function()
    local p = LocalPlayer()
    if !IsValid(p) || !p:Alive() then return end
    local char = p:getChar()
    local keydown_I = input.IsKeyDown(KEY_I)

    if char then
        if ((nextUse or 0) < CurTime()) then
            if (keydown_I && clickerino != keydown_I && !p:getNetVar("typing")) then
                nextUse = CurTime() + .5

                if IsValid(nut.gui.inv1) then nut.gui.inv1:Remove() end
            
                nut.gui.inv1 = vgui.Create("nutInventory")
                nut.gui.inv1:ShowCloseButton(true)

                local inventory2 = char:getInv()
                if (inventory2) then nut.gui.inv1:setInventory(inventory2) end

                print("key is down")
            end
            clickerino = keydown_I
        end
    end
end)

Весь всевозможный функционал работает (выкидывание/использование/экипировка и тд и тп).
Лол. Я забыл, что нужно еще setInventory сделать). Вот и не работало.
Осталось переписать инвентарь, сделать его с весом (а не квадратики, особо не удобно) и я закончу свой гавномод.
Рад что здесь появился еще кодер, который поддерживает NS.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу