Вопрос ERROR вместо модели

  • 12
  • 0
Контакты для связи отсутствуют.
Всем привет, недавно начал изучать GLua и дошел до момента когда начинаю создавать Entity. Вчера я сделал свое первое энтити и он работал как надо. Сегодня я решил сделать свое второе энтити, суть такова: Когда вы нажимаете на "E", то вылазит уведомление "Вы нашли деньги!". Когда я дописал код и зашел в Сандбокс, спавню Энтити и вместо модельки денег спавнится ERROR(Использую модельку денег с CSS и CSS у меня включен)
И текстуры карты при наблюдении за ERROR ломаются
1687445340502.png


GarrysMod\garrysmod\addons\123\lua\entities\dengi\(Тут 3 файла с кодом, ниже эти самые файлы)

cl_init.lua:
print("cl_init.lua")

include('shared.lua')

surface.CreateFont("NameYourFont", {
 
    font =  "Arial",
    extended = false,
    size = 13,
    weight = 500,
    blursize = 0,
    scanlines = 0,
    antialias = true,
    underline = false,
    italic = false,
    strikeout = false,
    symbol = false,
    rotary = false,
    shadow = false,
    additive = false,
    outline = true,
})

function ENT:Draw()

    self:DrawModel()

    local alpha = 255
    local viewdist = 200

    local max = viewdist
    local min = viewdist * 0.75

    local dist = LocalPlayer():EyePos():Distance( self:GetPos() )

    if dist > min and dist < max then
        alpha = 255
    elseif dist > max then
        alpha = 0
    end

    local oang = self:GetAngles()
    local opos = self:GetPos()

    local ang = self:GetAngles()
    local pos = self:GetPos()

    ang:RotateAroundAxis( oang:Up(), 90 )
    ang:RotateAroundAxis( oang:Right(), -90)

    pos = pos + oang:Forward() * 21 + oang:Up() * 20

    if alpha > 0 then
 
        cam.Start3D2D( pos, ang, 0.1)
            draw.SimpleTextOutlined("Money", "NameYourFont", 0, 0, Color(255, 255, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, 1, Color(0, 0, 0, alpha))
        cam.End3D2D()

    end

end


init.lua:
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")

function ENT:Intialize()

    self:SetModel("models/props/cs_assault/Money.mdl")
    self:SetPhysics(SOLID_VPHYSICS)

    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self:SetUseType(SIMPLE_USE)

    local GPO = self:GetPhysicsObject()

    GPO:SetMass(1)
    GPO:SetVelocity((self:GetUp() * 2))
    if GPO:IsValid() then
        GPO:Wake()
    end

end

function ENT:AcceptInput(activator, caller)

    if ply:IsPlayer() == false then
        return
    end

end

function ENT:Use(activator, caller)

    notification.AddLegacy("Вы нашли деньги!", NOTIFY_UNDO, 2)

end

function ENT:Think()



end

shared.lua:
AddCSLuaFile("cl_init.lua")

ENT.Base = "base_gmodentity"
ENT.Type = "anim"

ENT.Category = "Jager's Entity"
ENT.Spawnable = true
ENT.AdminOnly = true

ENT.PrintName = "Пачка денег"
ENT.Author = "Nikolay Jager"
ENT.Contact = "[URL="https://steamcommunity.com/profiles/76561199074802664/"]Steam Community :: Окончательно Гойданулся[/URL]"

Ошибка:
[123] addons/123/lua/entities/dengi/cl_init.lua:56: attempt to call global 'color' (a nil value)
1. unknown - addons/123/lua/entities/dengi/cl_init.lua:56

Буду очень благодарен за помощь с моей проблемой
 
Последнее редактирование:
  • 20
  • 3
Контакты для связи отсутствуют.
Попробуй Color с большой буквы написать)
 
  • 97
  • 1
  • 12
Контакты для связи отсутствуют.
Всем привет, недавно начал изучать GLua и дошел до момента когда начинаю создавать Entity. Вчера я сделал свое первое энтити и он работал как надо. Сегодня я решил сделать свое второе энтити, суть такова: Когда вы нажимаете на "E", то вылазит уведомление "Вы нашли деньги!". Когда я дописал код и зашел в Сандбокс, спавню Энтити и вместо модельки денег спавнится ERROR(Использую модельку денег с CSS и CSS у меня включен)
И текстуры карты при наблюдении за ERROR ломаютсяПосмотреть вложение 47685

GarrysMod\garrysmod\addons\123\lua\entities\dengi\(Тут 3 файла с кодом, ниже эти самые файлы)

cl_init.lua:
print("cl_init.lua")

include('shared.lua')

surface.CreateFont("NameYourFont", {
 
    font =  "Arial",
    extended = false,
    size = 13,
    weight = 500,
    blursize = 0,
    scanlines = 0,
    antialias = true,
    underline = false,
    italic = false,
    strikeout = false,
    symbol = false,
    rotary = false,
    shadow = false,
    additive = false,
    outline = true,
})

function ENT:Draw()

    self:DrawModel()

    local alpha = 255
    local viewdist = 200

    local max = viewdist
    local min = viewdist * 0.75

    local dist = LocalPlayer():EyePos():Distance( self:GetPos() )

    if dist > min and dist < max then
        alpha = 255
    elseif dist > max then
        alpha = 0
    end

    local oang = self:GetAngles()
    local opos = self:GetPos()

    local ang = self:GetAngles()
    local pos = self:GetPos()

    ang:RotateAroundAxis( oang:Up(), 90 )
    ang:RotateAroundAxis( oang:Right(), -90)

    pos = pos + oang:Forward() * 21 + oang:Up() * 20

    if alpha > 0 then
 
        cam.Start3D2D( pos, ang, 0.1)
            draw.SimpleTextOutlined("Money", "NameYourFont", 0, 0, Color(255, 255, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, 1, Color(0, 0, 0, alpha))
        cam.End3D2D()

    end

end


init.lua:
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")

function ENT:Intialize()

    self:SetModel("models/props/cs_assault/Money.mdl")
    self:SetPhysics(SOLID_VPHYSICS)

    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self:SetUseType(SIMPLE_USE)

    local GPO = self:GetPhysicsObject()

    GPO:SetMass(1)
    GPO:SetVelocity((self:GetUp() * 2))
    if GPO:IsValid() then
        GPO:Wake()
    end

end

function ENT:AcceptInput(activator, caller)

    if ply:IsPlayer() == false then
        return
    end

end

function ENT:Use(activator, caller)

    notification.AddLegacy("Вы нашли деньги!", NOTIFY_UNDO, 2)

end

function ENT:Think()



end

shared.lua:
AddCSLuaFile("cl_init.lua")

ENT.Base = "base_gmodentity"
ENT.Type = "anim"

ENT.Category = "Jager's Entity"
ENT.Spawnable = true
ENT.AdminOnly = true

ENT.PrintName = "Пачка денег"
ENT.Author = "Nikolay Jager"
ENT.Contact = "[URL="https://steamcommunity.com/profiles/76561199074802664/"]Steam Community :: Окончательно Гойданулся[/URL]"

Ошибка:
[123] addons/123/lua/entities/dengi/cl_init.lua:56: attempt to call global 'color' (a nil value)
1. unknown - addons/123/lua/entities/dengi/cl_init.lua:56

Буду очень благодарен за помощь с моей проблемой
У тебя на 56 строчке нет обьекта color, ошибка не относится к коду который ты скинул. Пришли актуальный код плиз

Из того, что могу посоветовать, пока ты доносишь актуальный код:

1. Лучше использовать DistToSqr для проверки дистанции, если дистанцию для обработки ты знаешь заранее (тут ты знаешь - 200) или понимаешь как работает квадратичная дистанция. Это намного быстрее, потому что под капотом обычный Distance все равно вычисляет квадрат и использует по сути DistToSqr, а это очень дорогая процедура. В таком случае тебе нужно будет посчитать квадрат числа 200 вместо компьютера и вставить его в код. Это будет очень большое число - не смущайся, так работает геометрия в трехмерном пространстве.
2. Обычно, ограничение дистанции прорисовки делают для сохранения ресурсов, но у тебя только меняется прозрачность шрифта, а это никак на сохранение ресурсов не меняется. Гораздо профитнее сделать if entity_distance > view_distance then return end в начале функции ENT:Draw(). В таком случае у тебя вообще не будет выполняться эта функция, если проверка дистанции не прошла успешно.
3.
Lua:
    GPO:SetMass(1)

    GPO:SetVelocity((self:GetUp() * 2))

    if GPO:IsValid() then

        GPO:Wake()

    end

два вызова методов у GPO:
GPO:SetMass(1)
GPO:SetVelocity((self:GetUp() * 2))

лучше внести в блок if GPO:IsValid() then, потому что если почему-то физический объект не проинициализируется, то в этом месте сыпанет ошибкой
4. ENT:AcceptInput(activator, caller) обычно используется для взаимодействия между разными энтити (не-игроками), по аналогии с Input-ами энтити, которые можно сделать в хаммере. Если ты этим не собираешься пользоваться, то лучше удалить эту функцию, чтобы повысить читаемость кода. Игроки при нажатии E на энтити всегда вызовут метод ENT:Use().
 
  • 12
  • 0
Контакты для связи отсутствуют.
У тебя на 56 строчке нет обьекта color, ошибка не относится к коду который ты скинул. Пришли актуальный код плиз

Из того, что могу посоветовать, пока ты доносишь актуальный код:

1. Лучше использовать DistToSqr для проверки дистанции, если дистанцию для обработки ты знаешь заранее (тут ты знаешь - 200) или понимаешь как работает квадратичная дистанция. Это намного быстрее, потому что под капотом обычный Distance все равно вычисляет квадрат и использует по сути DistToSqr, а это очень дорогая процедура. В таком случае тебе нужно будет посчитать квадрат числа 200 вместо компьютера и вставить его в код. Это будет очень большое число - не смущайся, так работает геометрия в трехмерном пространстве.
2. Обычно, ограничение дистанции прорисовки делают для сохранения ресурсов, но у тебя только меняется прозрачность шрифта, а это никак на сохранение ресурсов не меняется. Гораздо профитнее сделать if entity_distance > view_distance then return end в начале функции ENT:Draw(). В таком случае у тебя вообще не будет выполняться эта функция, если проверка дистанции не прошла успешно.
3.
Lua:
    GPO:SetMass(1)

    GPO:SetVelocity((self:GetUp() * 2))

    if GPO:IsValid() then

        GPO:Wake()

    end

два вызова методов у GPO:
GPO:SetMass(1)
GPO:SetVelocity((self:GetUp() * 2))

лучше внести в блок if GPO:IsValid() then, потому что если почему-то физический объект не проинициализируется, то в этом месте сыпанет ошибкой
4. ENT:AcceptInput(activator, caller) обычно используется для взаимодействия между разными энтити (не-игроками), по аналогии с Input-ами энтити, которые можно сделать в хаммере. Если ты этим не собираешься пользоваться, то лучше удалить эту функцию, чтобы повысить читаемость кода. Игроки при нажатии E на энтити всегда вызовут метод ENT:Use().
3 и 4 пункты применял, а вот по поводу 2 пункта, мне же надо еще прописать эти 2 переменные(entity_distance и view_distance) и где мне их прописать если надо в начале Draw() прописать эту строку(if entity_distance > view_distance then return end)

и еще не понял первый пункт, как использовать функцию DistToSqr
 
  • 97
  • 1
  • 12
Контакты для связи отсутствуют.
3 и 4 пункты применял, а вот по поводу 2 пункта, мне же надо еще прописать эти 2 переменные(entity_distance и view_distance) и где мне их прописать если надо в начале Draw() прописать эту строку(if entity_distance > view_distance then return end)

и еще не понял первый пункт, как использовать функцию DistToSqr
про 2 пункт это условное название переменных, чтобы просто мысль донести) если переделать в реальный код, то выглядеть будет примерно так:

Lua:
function ENT:Draw()
 local view_dist = 40000 -- 200*200
 local entity_dist = self:GetPos():DistToSqr(LocalPlayer():GetPos())
 if entity_dist > view_dist then return end
end

или еще более упрощенное, если тебе эти значение больше нигде не нужны, то можно просто результат выполнения функции сравнить с числом
Lua:
function ENT:Draw()
 if self:GetPos():DistToSqr(LocalPlayer():GetPos()) > 40000 then return end
end

> и еще не понял первый пункт, как использовать функцию DistToSqr
Ну смотри, в обычном случае ты сравниваешь например
entity:GetPos():Distance(other_entity:GetPos()) > 200

В случае с DistToSqr число с которым ты будешь сравнивать, ты просто возводишь в квадрат предварительно:
entity:GetPos():DistToSqr(other_entity:GetPos()) > 40000 -- 200*200=40000

Это экономит ресурсы и позволяет игре работать чуть-быстрее. Это не то, чтобы прямо небо и земля, и мир не сломается, если будешь использовать обычный Distance, но на микрооптимизациях строится общая оптимизация, соответственно, твой сервер будет потреблять меньше CPU/оперативки/етц.

В свое время когда барбарисмодом начинал заниматься очень пожалел, что не привил себе привычку учитывать особенности движка и компьютерных вычислений, поэтому когда доходило дело до работы скриптов в реальных условиях, часто приходилось делать всю работу заново, чтобы написать код нормально, а не как попало :roflan-ebalo:
 
  • 97
  • 1
  • 12
Контакты для связи отсутствуют.
Надпись появилась, но модель так и осталась Error. Но все равно спасибо
попробуй указать путь до модельки в одном регистре, без больших букв. помнится мне, что у Lua и непосредственно игрового движка разное отношение к регистру букв в путях до файлов
 
Сверху Снизу