Приветствую, есть у кого сборки сталкерских проектов или адонны аномалий которые справнят арты и так далее?
Создай в коде аномалий из воркшопа код, который по таймеру будет генерировать рядом артефакт из, условно, таблицы. Может, позже сделаю…
Буду благодарен если поможешь,честно уже задолбался )
Ну, сегодня попробую. Если у тебя есть аномалии и артефакты которые ты уже используешь – кидай
Аномалии
Артефакты
Получилось?
Не пробовал, только домой после шараги пришёл…
Понял, спасибо что ответил )
В код аномалии (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)
- ipairs - [C]:-1
- 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 - IdleSoundCode - addons/vj_base/lua/vj_base/npc_general.lua:1880
- 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
Возможно, что ты открыл не то
Короче он ломает модельку и просто спамит логом который сверху
Скорее всего ты сделал что-то не так.
Ты точно те аномалии выбрал?