PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : STool: Vom STool aus erstellte Entity verhält sich anders



Joker
13.02.2010, 11:02
In der testtool.lua ist folgendes beinhalten:
TOOL.Category = "Construction" TOOL.Name = "testtool"
TOOL.Command = nil TOOL.ConfigName = ""

function TOOL:LeftClick(tr)
if(tr.Entity ~= nil and tr.Entity:IsValid() and tr.Entity:GetClass() == "prop_physics") then
-- Wenn ausgewählte Entity ein Prop ist, ...
local ent = ents.Create("ent_irgendwas")
ent:SetPos(tr.Entity:GetPos())
ent:SetAngles(tr.Entity:GetAngles())
ent:SetModel(tr.Entity:GetModel())
tr.Entity:Remove()
-- ... dann ersetze sie mit "ent_irgendwas" an derselben Stelle, mit derselben Richtung
-- und mit gleichem Modell
end
end

Und in der init.lua von ent_irgendwas ist folgendes beinhalten:
AddCSLuaFile("cl_init.lua") --Nur ENT:Draw mit DrawModel()
AddCSLuaFile("shared.lua") --Nur ENT.x Daten
include('shared.lua')

function ENT:Initialize()
self.Entity:SetColor(255,255,255,50)
self.Entity:SetSolid(SOLID_VPHYSICS)
end

Mit diesem Code will ich also bewirken, dass mit dem Tool ein Prop mit einer anderen Entity (hier ent_irgendwas) ersetzt werden kann.
Wenn ich die Entity per "ent_create ent_irgendwas" erstelle, erscheint ein transparentes ERROR-Modell, was zeigt, dass der Inhalt des Initialize-Hooks ausgeführt wird.
Jedoch, wenn ich ent_irgendwas durch das Tool erstelle, erscheint die Entity nicht transparent und hat keine Kollision. Das heißt, dass, wenn ich die Entity in einem Toolscript generiere, wird Initialize nicht aufgerufen. Kann ich das beheben oder ist es nicht ohne Umweg umgehbar?

WeltEnSTurm
13.02.2010, 11:25
du hast im tool ent:Spawn() vergessen

Joker
13.02.2010, 12:13
Habe ich übersehen. Danke.

Gibt es noch eine Möglichkeit, ohne Kollision und ohne FindInBox einen Spieler innerhalb einer Entity zu erkennen? Mit ENT:Touch() funktioniert es nicht, da der Spieler mit der Entity kollidieren muss und ents.FindInBox() möchte ich, wenn möglich, vermeiden, da es laut Beschreibung das Spiel crashen kann, sobald der Erkennungsbereich ausserhalb der Map ist.

WeltEnSTurm
13.02.2010, 12:22
self.Entity:SetTrigger(true) --let ENT:Touch() be called, even if we're not solid
self.Entity:SetNotSolid(true)

Joker
13.02.2010, 12:27
Jetzt funktioniert alles. Vielen Dank.