# ENTITY:ResolveCustomFlyCollision

- **Ortam:** Sunucu
- **İngilizce aslı:** https://wiki.facepunch.com/gmod/ENTITY:ResolveCustomFlyCollision
- **Çeviri tarihi:** 2026-04-14

```lua
boolean ENTITY:ResolveCustomFlyCollision( table traceResult, vector vel )
```

## Son Eklenenler

Bu yakın zamanda versiyonunda (2026.04.08) eklendi. [Dev Şubesi](https://gmod.tr/wiki/Dev_Branch) - Evet, şimdi.

## Açıklama

Uçan varlıklar için VPfizik olmayan bir çarpışma olayı sırasında çağrıldı.

Bu, mermilerin kendi yöntemleriyle yüzeylerden sıçramasını sağlamak için en iyi şekilde kullanılır. [Entity:GetMoveType](https://gmod.tr/wiki/Entity:GetMoveType) İkisi de olmalı. [MOVETYPE_FLY](https://gmod.tr/wiki/Enums/MOVETYPE#MOVETYPE_FLY) ya da [Hareket türü_Uçak ağırlığı](https://gmod.tr/wiki/Enums/MOVETYPE#MOVETYPE_FLYGRAVITY), ve [Entity:GetMoveCollide](https://gmod.tr/wiki/Entity:GetMoveCollide) Öyle olmalı. [MOVECOLLIDE_FLY_CUSTOM](https://gmod.tr/wiki/Enums/MOVECOLLIDE#MOVECOLLIDE_FLY_CUSTOM).

> **NOT:** Bu sadece... `anim` tür varlıkları.

## Argümanlar

1.. [Tablo](https://gmod.tr/wiki/table) ile [TraceResult yapısı](https://gmod.tr/wiki/Structures/TraceResult) **traceResult**: [TraceResult yapısı](https://gmod.tr/wiki/Structures/TraceResult) Çarpışmanın gerçekleştiği yer.
2.. [vektör](https://gmod.tr/wiki/Vector): Hesaplanan hız sıçrama, esneklik, zemin kayma vb. gibi hesaplamalardan sonra...

## Geri dönüşler

1.. [Boolean](https://gmod.tr/wiki/boolean): Geri dön. `true` Default eylemini önlemek için.

### Örnek

Herhangi bir hız kaybı olmadan yüzeylerden doğrudan yansıyan roket modeli. `sent_ball`.

```lua
AddCSLuaFile()

ENT.Base = "base_anim"
ENT.Type = "anim"
ENT.PrintName = "Bouncy Rocket"
ENT.Category = "Other"

ENT.Editable = true
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.RenderGroup = RENDERGROUP_TRANSLUCENT
ENT.PhysicsSolidMask = MASK_SOLID + CONTENTS_HITBOX - Vfizik ile çarpışır.

function ENT:Initialize()

	self:SetModel( "models/weapons/w_missile_closed.mdl" )
	self:SetMoveType( MOVETYPE_FLY )
	self:SetMoveCollide( MOVECOLLIDE_FLY_CUSTOM )
	self:SetCollisionGroup( COLLISION_GROUP_PROJECTILE )
	self:SetSolid( SOLID_BBOX ) -- diğer varlıklar ile çarpışmayı açar.
	self:SetCollisionBounds( Vector( -1, -1, -1 ), Vector( 1, 1, 1 ) )
	self:SetVelocity( self:GetForward() * 650 )

end

if ( CLIENT ) then return end

function ENT:ResolveCustomFlyCollision( traceResult, vel )

	vel = self:GetVelocity() -- değiştirilmemiş hız kullanılarak
	local speed = vel:Length()

	local tempdir = traceResult.HitNormal
	tempdir:Mul( 2 * vel:Dot( tempdir ) )

	local dir = vel
	dir:Sub( tempdir )
	dir:Normalize()

	local reflectionangle = dir:Angle()

	local newvel = dir
	newvel:Mul( speed )
	self:SetLocalVelocity( newvel )

	self:SetAngles( reflectionangle )

end
```

### Örnek

Motorun çapraz ok çubuğunun küçültülmüş bir versiyonu ve davranışını çok yakından taklit ediyor. Uçuyor, yansıtıyor yapışıp duruyor acı veriyor.

```lua
AddCSLuaFile()

ENT.Base = "base_anim"
ENT.Type = "anim"
ENT.PrintName = "Simple Crossbow Bolt"
ENT.Category = "Other"

ENT.Spawnable = true
ENT.AdminOnly = true
ENT.RenderGroup = RENDERGROUP_OPAQUE
ENT.PhysicsSolidMask = bit.band( bit.bor( MASK_SOLID, CONTENTS_HITBOX ), bit.bnot( CONTENTS_GRATE ) )

function ENT:Initialize()

	self:SetModel( "models/crossbow_bolt.mdl" )
	self:SetSolid( SOLID_BBOX )
	self:AddSolidFlags( FSOLID_NOT_STANDABLE )
	self:SetCollisionGroup( COLLISION_GROUP_PROJECTILE )
	self:SetCollisionBounds( Vector( -1, -1, -1 ), Vector( 1, 1, 1 ) )
	self:SetMoveType( MOVETYPE_FLYGRAVITY )
	self:SetMoveCollide( MOVECOLLIDE_FLY_CUSTOM )

	self:SetGravity( 0.05 )

	self:SetSkin( 1 )

end

if ( CLIENT ) then return end

local BOLT_AIR_VELOCITY = 3500

function ENT:SpawnFunction( pPlayer, trace_t, classname )

	if ( not trace_t.Hit ) then return end

	local aimdirection = trace_t.Normal
	local angles = aimdirection:Angle()
	local origin
	local velocity

	local simplecrossbowbolt = ents.Create( classname )
	simplecrossbowbolt:SetAngles( angles )

	origin = aimdirection
	origin:Mul( 32 )
	origin:Add( trace_t.StartPos )
	simplecrossbowbolt:SetPos( origin )

	velocity = origin
	velocity:Sub( trace_t.StartPos )
	velocity:Div( 32 )
	velocity:Mul( BOLT_AIR_VELOCITY )
	simplecrossbowbolt:SetVelocity( velocity )

	simplecrossbowbolt:SetOwner( pPlayer )
	simplecrossbowbolt:Spawn()

	return simplecrossbowbolt

end

function ENT:ResolveCustomFlyCollision( trace_t, velocity )

	if ( trace_t.HitSky ) then return self:Remove() end

	local pOther = trace_t.Entity

	self:EmitSound( "Weapon_Crossbow.BoltHitWorld" )

	local direction = self:GetVelocity()
	local speed = direction:Length()

	direction:Normalize()

	direction:Negate()
	local hitDot = trace_t.HitNormal:Dot( direction )
	direction:Negate()

	if ( ( hitDot < 0.5 ) and ( speed > 100 ) ) then -- Geriye dönün.

		local vecReflection = Vector( 0, 0, 0 )
		vecReflection:Set( trace_t.HitNormal )
		vecReflection:Mul( 2 * hitDot )
		vecReflection:Add( direction )

		self:SetAngles( vecReflection:Angle() )

		velocity = vecReflection
		velocity:Mul( speed * 0.75 )
		self:SetLocalVelocity( velocity )

		self:SetGravity( 1 )

	else - Sıkıştır...

		self:SetMoveType( MOVETYPE_NONE )
		self:SetCollisionGroup( COLLISION_GROUP_DEBRIS )

		self:SetSkin( 0 )

		- Çubuğu biraz geriye çek ki temiz görünsün.
		local compensatedpos = Vector( 0, 0, 0 )
		compensatedpos:Set( trace_t.Normal )
		compensatedpos:Mul( -6 )
		compensatedpos:Add( trace_t.HitPos )

		self:SetPos( compensatedpos )

		- Yapıştır.
		self:SetParent( pOther )

		-- Etki etkisi bırakın.
		local data = EffectData()
			data:SetOrigin( trace_t.HitPos )
			data:SetStart( trace_t.StartPos )
			data:SetSurfaceProp( trace_t.SurfaceProps )
			data:SetDamageType( DMG_BULLET )
			data:SetHitBox( trace_t.HitBox )
			data:SetEntIndex( pOther:EntIndex() )
		util.Effect( "Impact", data )

		- Bazı hasarlara neden olur.
		local info = DamageInfo()
			info:SetAttacker( self:GetOwner() )
			info:SetInflictor( self )
			info:SetDamage( 100 )
			info:SetDamageType( DMG_BULLET )
			info:SetDamagePosition( trace_t.HitPos )
			local force = compensatedpos
			force:Set( trace_t.Normal )
			force:Mul( 75 * 4 * 0.7 )
			info:SetDamageForce( force )
		pOther:TakeDamageInfo( info )

		-- Programın kaldırılması
		self.Think = self.Remove
		self:NextThink( CurTime() + 10 )

	end

	- Ateş kıvılcımları.
	local data = EffectData()
		data:SetOrigin( trace_t.HitPos )
		data:SetMagnitude( 2 )
		data:SetScale( 1 )
		local normal = trace_t.Normal
		normal:Negate()
		data:SetNormal( normal )
	util.Effect( "ElectricSpark", data )

end
```

- [GMod Wiki ana sayfası](https://gmod.tr/wiki)

---

[Tüm sunucular](https://gmod.tr/) · [GmodTR Launcher](https://gmod.tr/launcher) · [Rehber](https://gmod.tr/rehber) · [GMod Wiki](https://gmod.tr/wiki) · [GmodTR nedir?](https://gmod.tr/hakkinda) · [Sunucu ekle](https://gmod.tr/sunucu-ekle) · [Discord](https://discord.gg/gmodtr)

Kaynak: https://gmod.tr/wiki/ENTITY:ResolveCustomFlyCollision
