Probiers mal mit v:GetClass() == ''sent_ball"![]()
Probiers mal mit v:GetClass() == ''sent_ball"![]()
Gruß
minifisch
Natürlich klappt das, du wendest bloß SetVelocity falsch an (Siehe hier). GetClass() gibt dir den Namen zurück, auf egal welches Entity du das anwendest. prop_physics ist auch nur ein Entity, bloß eben "hardcoded". Hat damit also gar nichts zu tun.. (Die Funktion gibt dir also auch Namen von Entities zurück, welche selbst gecoded sind.)
Das sind beides Varianten, die funktionieren würden:
Lua Code:
for k, v in pairs( ents.FindInSphere( Vector( 0, 0, 0 ), 1000 ) ) do if v:GetClass() == "sent_ball" then v:GetPhysicsObject():SetVelocity( Vector( 0, 0, 500 ) ) endend
Lua Code:
for k, v in pairs( ents.FindByClass( "sent_ball" ) ) do if <wie auch immer du jetzt letztendlich checken möchtest, ob das Entity in einem gewissen Bereich liegt> then v:GetPhysicsObject():SetVelocity( Vector( 0, 0, 500 ) ) endend
Geändert von RP-01 (29.04.2013 um 14:47 Uhr)
Wow, danke es funktioniert endlich![]()
Und wieder etwas dazugelernt, danke euch !!!
Edit: Mit dem Sentball klappt es schonmal, aber mit anderen Objekten z.B. der Waschmaschine scheint es mit diesem Code nicht zu funktionieren (hab den Code natürlich angepasst), wenn ihr Tipps habt, dann nur raus damit![]()
Geändert von Eddman (30.04.2013 um 10:51 Uhr)
Habe es mal so probiert, aber es klappt nicht. Vermutlich unterscheidet sich die Waschmaschine vom sent mehr als ich gedacht habe. Ist es überhaupt möglich normale Objekte wie eine Waschmaschine für solche Dinge zu verwenden?
Lua Code:
for _, v in pairs(ents.FindInSphere( Vektorposition, radius )) do if v:GetClass() == "sent_ball" then v:GetPhysicsObject():SetVelocity( v:GetUp() + Vector(0,0,100)) elseif v:GetClass() == "models/props_c17/FurnitureWashingmachine001a.mdl" then v:GetPhysicsObject():SetVelocity( v:GetUp() + Vector(0,0,100))end
end
GetName() funzt leider auch nischt..
Wieso hat es mit dem sent_ball geklappt, aber mit anderen dingen nicht? :/
"models/props_c17/FurnitureWashingmachine001a.mdl" ist doch keine Klasse. Das ist ein Teil von 'nem Model/Mesh.
Versuch's damit:
Lua Code:
for k, v in pairs( ents.GetAll() ) do if v:GetClass() == "sent_ball" then v:GetPhysicsObject():SetVelocity( Vector(0,0,100) ) //Das was du hier geschrieben hattest, "v:GetUp() + Vector( 0, 0, 1000 )" macht so keinen Sinn. Die Funktion gibt die Direction nach oben -aus "Sicht" des Entities- aus. Wenn das Ding also auf dem Kopf liegt, fliegt's nicht mehr hoch.continue //continue springt in den nächsten Schleifendurchgang. Funktioniert auch bei while- und repeat until- Schleifen
end
if v:GetModel() == "models/props_c17/furniturewashingmachine001a.mdl" and v:GetMoveType() == MOVETYPE_VPHYSICS then //Hat das Entity das Model, und ist es überhaupt beweglich, sodass Velocity setzen überhaupt Sinn macht? v:GetPhysicsObject():SetVelocity( Vector( 0, 0, 1000 ) )end
end
Edit:
BTW: Hier elseif zu nutzen, ist unnötige Rechenarbeit. Der führt nämlich dann jedes mal noch 'nen zweiten Check durch, obwohl v:GetClass() == "sent_ball" war.
Benutze hier, wie ich, einfach eine zweite if-clause, und springe per "continue" in den nächsten Schleifendurchgang, wenn das Entity schon ein sent_ball war
Geändert von RP-01 (02.05.2013 um 15:02 Uhr)
Ich hab zwar schon lange nixmehr mit LUA in Gmod gemacht und weiß deshalb nicht, ob das noch aktuell ist, aber...: Muss man bei einem PhysicObject nicht ApplyForceCenter verwenden?
Nicht unbedingt. Kann man, alternativ zu Ent:SetVelocity() oder Ent:GetPhysicsObject():SetVelocity() nutzen..
SetLocalVelocity gibt's auch noch, aber ich glaube das hat die Velocity dauerhaft gesetzt.
Die anderen Befehle sollten jeweils eine Velocity zu dem entsprechenden Vektor addiert haben.
Muss ich später mal testen, was da genau der Unterschied war. Mein Code von oben funktioniert jedenfalls.
Geändert von Eddman (02.05.2013 um 21:03 Uhr)
Please do not throw salami Pizza away