[gamemode] Сталкер для гмод

Приветствую, есть у кого сборки сталкерских проектов или адонны аномалий которые справнят арты и так далее?

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

Буду благодарен если поможешь,честно уже задолбался )

Ну, сегодня попробую. Если у тебя есть аномалии и артефакты которые ты уже используешь – кидай

Аномалии

Артефакты

Получилось?

Не пробовал, только домой после шараги пришёл…

Понял, спасибо что ответил )

В код аномалии (init.lua) добавляешь таблицу:


local artefacts = {
    "eye",
    "fireball",
    "glass",
}

Это таблица с артефактами.
В функцию ENT:Initialize() добавляешь:

    timer.Create("electra_spawn_artefacts" .. self:EntIndex(), 1800, 0, function()
        if not IsValid(self) then return end

        local randomArtefact = table.Random(artefacts)
        local spawnPos = self:GetPos() + Vector(math.random(-100, 100), math.random(-100, 100), 50)

        local trace = util.TraceLine({
            start = spawnPos,
            endpos = spawnPos + Vector(0, 0, -500),
            filter = self,
        })

        if trace.Hit then
            spawnPos = trace.HitPos

            local artefactEnt = ents.Create(randomArtefact)
            if (IsValid(artefactEnt)) then
                artefactEnt:SetPos(spawnPos)
                artefactEnt:Spawn()
                artefactEnt:Activate()
            end
        end
    end)

Где 1800 - это 30 минут в секундах (timer.Create("electra_spawn_artefacts" .. self:EntIndex(), 1800, 0, function())

Полный код init.lua на примере electra_anomaly:

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

local artefacts = {
    "eye",
    "fireball",
    "glass",
}

hook.Add("OnDamagedByExplosion", "DisableSound", function()
    return true
end)

sound.Add({
    name = "electra_idle",
    channel = CHAN_STATIC,
    volume = 0.3,
    level = 70,
    pitch = 100,
    sound = "anomaly/electra_idle1.wav"
})

sound.Add({
    name = "electra_blast",
    channel = CHAN_STATIC,
    volume = 1,
    level = 100,
    pitch = 100,
    sound = "anomaly/electra_blast1.mp3"
})

function ENT:Initialize()
    self:SetMoveType(MOVETYPE_NONE)
    self:SetSolid(SOLID_BBOX)
    self:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
    self:SetModel("models/anomaly/anomaly_fix.mdl")
    self:SetName("Electra Anomaly")
    self:SetTrigger(1)
    self.Entity:SetCollisionBounds(Vector(-50, -50, -5), Vector(50, 50, 80))
    self:SetNWBool("StopParticle", false)
    
    local phys = self:GetPhysicsObject()
    if (phys:IsValid()) then
        phys:Wake()
    end

    timer.Create("electra_spawn_artefacts" .. self:EntIndex(), 1800, 0, function()
        if not IsValid(self) then return end

        local randomArtefact = table.Random(artefacts)
        local spawnPos = self:GetPos() + Vector(math.random(-100, 100), math.random(-100, 100), 50)

        local trace = util.TraceLine({
            start = spawnPos,
            endpos = spawnPos + Vector(0, 0, -500),
            filter = self,
        })

        if trace.Hit then
            spawnPos = trace.HitPos

            local artefactEnt = ents.Create(randomArtefact)
            if (IsValid(artefactEnt)) then
                artefactEnt:SetPos(spawnPos)
                artefactEnt:Spawn()
                artefactEnt:Activate()
            end
        end
    end)
end

function ENT:StartTouch(ent)
    timer.Create("electra_activated_once" .. self:EntIndex(), 0.01, 1, function()
        self:EmitSound("electra_blast")
        ParticleEffect("electra_activated", self:GetPos(), Angle(0, 0, 0))
        ent:TakeDamage(110, self, self)
        self:StopParticles()
        self:SetNWBool("StopParticle", true)
        self:StopSound("electra_idle")
    end)

    timer.Create("electra_recharge" .. self:EntIndex(), 1.95, 0, function()
        self:SetNWBool("StopParticle", false)
    end)

    timer.Create("electra_activated" .. self:EntIndex(), 2.0, 0, function()
        self:EmitSound("electra_blast")
        self:StopSound("electra_idle")
        ParticleEffect("electra_activated", self:GetPos(), Angle(0, 0, 0))
        ent:TakeDamage(110, self, self)
        self:SetNWBool("StopParticle", true)
        self:StopParticles()
    end)
end

function ENT:EndTouch()
    timer.Stop("electra_activated" .. self:EntIndex())
    timer.Stop("electra_recharge" .. self:EntIndex())
    self.Timer = "electra_" .. self:EntIndex()
    timer.Create(self.Timer, 1.9, 1, function()
        self:SetNWBool("StopParticle", false)
        self:SetNWBool("Activated", false)
    end)
end

function ENT:SpawnFunction(ply, tr, ClassName, activator)
    if not tr.Hit then return end
    local SpawnPos = tr.HitPos + Vector(0, 0, 4)
    local SpawnAng = tr.HitNormal:Angle()
    SpawnAng.p = SpawnAng.p + 90
    local ent = ents.Create(ClassName)
    ent:SetPos(SpawnPos)
    ent:SetAngles(SpawnAng)
    ent:Spawn()
    ent:Activate()
    ent:SetTrigger(1)
    ent:SetColor(Color(0, 0, 0, 0))
    ent:SetRenderMode(RENDERMODE_TRANSALPHA)
    return ent
end

function ENT:OnRemove()
    self.Timer = "electra_" .. self:EntIndex()
    self.Timer = "electra_activated" .. self:EntIndex()
    self:StopSound("electra_idle")
    timer.Stop(self.Timer)
    timer.Stop("electra_spawn_artefacts" .. self:EntIndex())
end

Как проверю галочку поставлю ) - А так заранее спасибо )))

Для проверки не забудь таймер уменьшить с 30-и минут)

Проверил отдельно все ± но с VJ base начинает заливать логом попытки разделить число на 0 - Можешь скинуть папку самого энтити может я чего не правильно внедрил )

Кинь полную ошибку

[vj_base] addons/vj_base/lua/entities/npc_vj_creature_base/init.lua:1504: bad argument #1 to ‘ipairs’ (table expected, got nil)

  1. ipairs - [C]:-1
  2. VJ_TASK_IDLE_STAND - addons/vj_base/lua/entities/npc_vj_creature_base/init.lua:1504
    3. DoIdleAnimation - addons/vj_base/lua/entities/npc_vj_creature_base/init.lua:1588
    4. SelectSchedule - addons/vj_base/lua/entities/npc_vj_creature_base/init.lua:2639
    5. unknown - addons/vj_base/lua/vj_base/npc_schedules.lua:147
    [vj_base] addons/vj_base/lua/vj_base/npc_general.lua:1880: attempt to compare nil with number
  3. IdleSoundCode - addons/vj_base/lua/vj_base/npc_general.lua:1880
  4. unknown - addons/vj_base/lua/entities/npc_vj_creature_base/init.lua:1776

Пытался сам пофиксить, но чет не то пошло

Вставляй код конкретно в энтити, а не вг.
К примеру

/garrysmod/addons/stalker_anomalies/lua/entities/npc_vj_anomales_jarka3/init.lua
Путь куда кидаю, так?

Попробуй, сейчас к меня нет доступа к пк, но я не помню в пути npc_vj :thinking:
Возможно, что ты открыл не то

Короче он ломает модельку и просто спамит логом который сверху

Скорее всего ты сделал что-то не так.
Ты точно те аномалии выбрал?