• Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта 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

Нужна помощь по настройке предмета в NS

AlterFranky

Пользователь
Регистрация
25 Авг 2017
Сообщения
36
Реакции
0
Баллы
16
Возраст
21
Пол
Всем доброго вечера, нашел и немножко изменил я предмет под названием NAIL (который каким то чудом оказался в note+ плагине).
Этот предмет замораживает проп при использовании.
У него есть одна функция "Зафиксировать", мне нужно сделать еще одну противоположную. Что бы была функция "Расфиксировать".
Вот код

ITEM.name = "Набор инструментов"
ITEM.desc = "Набор инструментов, можно использовать для фиксации мебели"
ITEM.model = "models/props_industrial/smalltoolbox.mdl"
ITEM.Width = 1
ITEM.Height = 1
ITEM.price = 5
ITEM.permit = "mat"

ITEM.functions.Nail = {
name = "Зафиксировать",
icon = "icon16/anchor.png",
onRun = function(item)

local function MakeNail( Ent1, Ent2, Bone1, Bone2, forcelimit, Pos, Ang )

local constraint = constraint.Weld( Ent1, Ent2, Bone1, Bone2, forcelimit, false )

constraint.Type = "Nail"
constraint.Pos = Pos
constraint.Ang = Ang

Pos = Ent1:LocalToWorld( Pos )
Ent1:GetPhysicsObject():EnableMotion(false);

local nail = ents.Create( "gmod_nail" )
nail:SetPos( Pos )
nail:SetAngles( Ang )
nail:SetParentPhysNum( Bone1 )
nail:SetParent( Ent1 )

nail:Spawn()
nail:Activate()

constraint:DeleteOnRemove( nail )

return constraint, nail
end
local player = item.player
local trace = player:GetEyeTrace()
// Bail if we hit world or a player
if ( !trace.Entity:IsValid() || trace.Entity:IsPlayer() ) then return false end

// If there's no physics object then we can't constraint it!
if ( SERVER && !util.IsValidPhysicsObject( trace.Entity, trace.PhysicsBone ) ) then return false end

local tr = {}
tr.start = trace.HitPos
tr.endpos = trace.HitPos + (player:GetAimVector() * 16.0)
tr.filter = { player, trace.Entity }
local trTwo = util.TraceLine( tr )

if ( trTwo.Hit && !trTwo.Entity:IsPlayer() ) then

// Get clients CVars
local forcelimit = "100"

// Client can bail now
if ( CLIENT ) then return true end

local vOrigin = trace.HitPos - (player:GetAimVector() * 8.0)
local vDirection = player:GetAimVector():Angle()

vOrigin = trace.Entity:WorldToLocal( vOrigin )

// Weld them!
local constraint, nail = MakeNail( trace.Entity, trTwo.Entity, trace.PhysicsBone, trTwo.PhysicsBone, forcelimit, vOrigin, vDirection )
if !constraint:IsValid() then return end

return true
end
end,
onCanRun = function(item)
return !IsValid(item.entity)
end
}
 
Гвоздик, который прикрепляет предмет, исчезает при использовании. Впихивать в него функцию снятия не вариант.
Как таковой, можно создать либо молоточек, с помощью которого можно будет вновь заставить объект двигаться, либо добавить nut-команду.

P.S. Исходный код желательно прятать под спойлер в код (особенно, если исходник имеет достаточные размеры).
 
Гвоздик, который прикрепляет предмет, исчезает при использовании. Впихивать в него функцию снятия не вариант.
Как таковой, можно создать либо молоточек, с помощью которого можно будет вновь заставить объект двигаться, либо добавить nut-команду.

P.S. Исходный код желательно прятать под спойлер в код (особенно, если исходник имеет достаточные размеры).
Я убрал функцию исчезания у гвоздика. Так знаете как сделать?
 
Попробуй что-то в этом роде:
Код:
ITEM.functions.UnNail =
{
    name = "Расфиксировать",
    icon = "icon16/anchor.png",
    onRun = function(item)
        local client = item.player;
        local trace = client:GetEyeTrace();

        if (!trace.Entity:IsValid() or trace.Entity:IsPlayer()) then return false end;
        if (SERVER and !util.IsValidPhysicsObject(trace.Entity, trace.PhysicsBone)) then return false end;

        local tr = {};
        tr.start = trace.HitPos;
        tr.endpos = trace.HitPos + (player:GetAimVector() * 16);
        tr.filter = {player, trace.Entity};

        local trTwo = util.TraceLine(tr);
        if (trTwo.Hit and !trTwo.Entity:IsPlayer()) then
            trace.Entity:GetPhysicsObject():EnableMotion(true);
        end;

        return false;
    end,
    onCanRun = function(item)
        return !IsValid(item.entity);
    end;
};
Тестировать не тестировалось, потому произойти может что угодно.
 
Попробуй что-то в этом роде:
Код:
ITEM.functions.UnNail =
{
    name = "Расфиксировать",
    icon = "icon16/anchor.png",
    onRun = function(item)
        local client = item.player;
        local trace = client:GetEyeTrace();

        if (!trace.Entity:IsValid() or trace.Entity:IsPlayer()) then return false end;
        if (SERVER and !util.IsValidPhysicsObject(trace.Entity, trace.PhysicsBone)) then return false end;

        local tr = {};
        tr.start = trace.HitPos;
        tr.endpos = trace.HitPos + (player:GetAimVector() * 16);
        tr.filter = {player, trace.Entity};

        local trTwo = util.TraceLine(tr);
        if (trTwo.Hit and !trTwo.Entity:IsPlayer()) then
            trace.Entity:GetPhysicsObject():EnableMotion(true);
        end;

        return false;
    end,
    onCanRun = function(item)
        return !IsValid(item.entity);
    end;
};
Тестировать не тестировалось, потому произойти может что угодно.
Такой скромный вопрос, а куда впихивать данный код?
 
Попробуй что-то в этом роде:
Код:
ITEM.functions.UnNail =
{
    name = "Расфиксировать",
    icon = "icon16/anchor.png",
    onRun = function(item)
        local client = item.player;
        local trace = client:GetEyeTrace();

        if (!trace.Entity:IsValid() or trace.Entity:IsPlayer()) then return false end;
        if (SERVER and !util.IsValidPhysicsObject(trace.Entity, trace.PhysicsBone)) then return false end;

        local tr = {};
        tr.start = trace.HitPos;
        tr.endpos = trace.HitPos + (player:GetAimVector() * 16);
        tr.filter = {player, trace.Entity};

        local trTwo = util.TraceLine(tr);
        if (trTwo.Hit and !trTwo.Entity:IsPlayer()) then
            trace.Entity:GetPhysicsObject():EnableMotion(true);
        end;

        return false;
    end,
    onCanRun = function(item)
        return !IsValid(item.entity);
    end;
};
Тестировать не тестировалось, потому произойти может что угодно.
Lua ошибок не было, но функция не рабочая
 
В функции onCanRun стоит флаг на валидную энтити, точнее невалидную. Есть энтити - нельзя будет запустить. Попробуй заменить yf
Код:
    onCanRun = function(item)
        return IsValid(item.entity)
    end
 
Насколько я понял, как раз и надо выполнять действие, когда существует энтити.

Да, прочитал подробнее и понял, что крепится не предмет. Значит, всё верно было
 
Главная Регистрация
Назад
Сверху