Определение координат перед прицелом

Ganibal95

Участник
Сообщения
52
Реакции
0
Здравствуйте, как можно определить координаты перед центром прицела.
у меня есть который двигает объект вперед игрока, но объект не реагирует на FOV игрока (Верх-Низ)

Вот код который у меня есть.
PHP:
stock PosSpawnObj(client,Float:EyePos[3],Float:distance=150.0,Float:fov=0.0, Float:pos=0.0){
	decl Float:EyeAngles[3]; 
	GetClientEyePosition(client, EyePos); 
	GetClientEyeAngles(client, EyeAngles); 
	decl Float:angles[3], Float:direction[3];
	angles[1] = EyeAngles[1] + pos;
	GetAngleVectors(angles, direction, NULL_VECTOR, NULL_VECTOR); 
	EyePos[0] = EyePos[0] + direction[0] * distance; 
	EyePos[1] = EyePos[1] + direction[1] * distance;
	EyePos[2] += fov;
}
 

cors

Участник
Сообщения
58
Реакции
2
Здравствуйте, как можно определить координаты перед центром прицела.
у меня есть который двигает объект вперед игрока, но объект не реагирует на FOV игрока (Верх-Низ)

Вот код который у меня есть.
PHP:
stock PosSpawnObj(client,Float:EyePos[3],Float:distance=150.0,Float:fov=0.0, Float:pos=0.0){
    decl Float:EyeAngles[3]; 
    GetClientEyePosition(client, EyePos); 
    GetClientEyeAngles(client, EyeAngles); 
    decl Float:angles[3], Float:direction[3];
    angles[1] = EyeAngles[1] + pos;
    GetAngleVectors(angles, direction, NULL_VECTOR, NULL_VECTOR); 
    EyePos[0] = EyePos[0] + direction[0] * distance; 
    EyePos[1] = EyePos[1] + direction[1] * distance;
    EyePos[2] += fov;
}

есть готовый плагин, вот http://world-source.ru/forum/118-2463-1
 

Ganibal95

Участник
Сообщения
52
Реакции
0
cors, Конечно мне это тоже нужно было =) Спасибо.

Но это не совсем то, нужно объект создать прям перед прицелом, а не куда прицел смотрит.

Добавлено через 2 минуты
Объясню по подробнее, я делаю подствольные гранаты... Которые вылетают при нажатии допустим на E (IN_USE). При нажатии появляется этот самый объект перед прицелом, отодвинувшист от игрока на 40.0 игровых сантиметров. и делается бросок объекта...

Так вот. Как получить координаты прямо перед прицелом отодвинушись от игрока на 40.0 игровых сантиметров.

Заранее спасибо!
 
Последнее редактирование:

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
Кароче как-то так:
C-подобный:
#include <sdktools>

public OnPluginStart()
{
	RegConsoleCmd("test", Command_Test);
}
public OnMapStart()
{
	PrecacheModel("models/items/healthkit.mdl");
}

public Action:Command_Test(iClient, args)
{
	decl Float:fOrigin[3], Float:fAngles[3];
	GetClientEyePosition( iClient, fOrigin );
	GetClientEyeAngles( iClient, fAngles );
	TR_TraceRayFilter( fOrigin, fAngles, MASK_SOLID, RayType_Infinite, TRDontHitSelf, iClient );
	if ( TR_DidHit( INVALID_HANDLE ) )
	{
		// TR_GetEndPosition( fOrigin, INVALID_HANDLE );
		new iEntity = CreateEntityByName("prop_physics_override");
		DispatchKeyValue(iEntity, "model", "models/items/healthkit.mdl");
		// DispatchKeyValueVector(iEntity, "origin", fOrigin);
		// DispatchKeyValue(iEntity, "solid", "6");
		DispatchSpawn(iEntity);
		PrintToChatAll("Spawn origin: (%f;%f;%f)", fOrigin[0], fOrigin[1], fOrigin[2]);
		
		new iEnt = CreateEntityByName("light_dynamic");  
		DispatchKeyValue(iEnt, "_light", "255 0 0");  
		DispatchKeyValue(iEnt, "brightness", "10");  
		DispatchKeyValueFloat(iEnt, "spotlight_radius", 360.0);  
		DispatchKeyValueFloat(iEnt, "distance", 50.0);  
		DispatchKeyValue(iEnt, "style", "0");
		DispatchSpawn(iEnt);
		
		new String:szTarget[32];
		Format(szTarget, sizeof(szTarget), "lighthealthkit_%d", iEntity);
		DispatchKeyValue(iEntity, "targetname", szTarget);
		SetVariantString(szTarget);
		AcceptEntityInput(iEnt, "SetParent");
		AcceptEntityInput(iEnt, "TurnOn");
		
		new Float:fVelocity[3];
		GetAngleVectors(fAngles, fVelocity, NULL_VECTOR, NULL_VECTOR);
		ScaleVector(fVelocity, 1000.0); // 1000 - сила толкания, меняя её, менять придется и 0.1 (подбирать подходящее значение).
		fOrigin[2] -= 4.0;
		fVelocity[2] = 0.0;
		
		fOrigin[0] = fOrigin[0] + (fVelocity[0] * 0.1); // менять 0.1 для того, чтобы двигать созданный объект от начала (глаз игроков).
		fOrigin[1] = fOrigin[1] + (fVelocity[1] * 0.1); // менять 0.1 для того, чтобы двигать созданный объект от начала (глаз игроков).
		
		TeleportEntity(iEntity, fOrigin, NULL_VECTOR, fVelocity);
		
		CreateTimer(5.0, Timer_BlowUpHealthkit, iEntity);
	}
	
	return Plugin_Handled;
}

public Action:Timer_BlowUpHealthkit(Handle:hTimer, any:iEntity)
{
	decl Float:fOrigin[3];
	GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fOrigin);
	PrintToChatAll("BlowUp Origin : (%f;%f;%f)", fOrigin[0], fOrigin[1], fOrigin[2]);
	AcceptEntityInput(iEntity, "KillHierarchy");
}

public bool:TRDontHitSelf(iEntity, mask, any:data)
{
	return iEntity != data;
}
 

cors

Участник
Сообщения
58
Реакции
2
cors, Конечно мне это тоже нужно было =) Спасибо.

Но это не совсем то, нужно объект создать прям перед прицелом, а не куда прицел смотрит.

Добавлено через 2 минуты
Объясню по подробнее, я делаю подствольные гранаты... Которые вылетают при нажатии допустим на E (IN_USE). При нажатии появляется этот самый объект перед прицелом, отодвинувшист от игрока на 40.0 игровых сантиметров. и делается бросок объекта...

Так вот. Как получить координаты прямо перед прицелом отодвинушись от игрока на 40.0 игровых сантиметров.

Заранее спасибо!

Как раз искал такой плагин для зомби сервера,не выложишь потом его сюда?)
 

Ganibal95

Участник
Сообщения
52
Реакции
0
cors, достаточно хороший пример привел... Reiko1231
 
Сверху Снизу