Расположение энтии

Ganibal95

Участник
Сообщения
52
Реакции
0
Здравствуйте.
Как можно узнать расположение энтии
C-подобный:
decl fVec[3];
	GetEntPropVector(Nades[client][ObjEnt], Prop_Data, "m_vecAbsOrigin", fVec);
Такой способ показывает расположение которое указали при создании объекта.

Мне -же нужно узнать где объект находится в данном моменте.
Допустим я взял и перетащил объект гравипушкой...

мой нубо код:
C-подобный:
stock create_light_object(client, time) {
	decl Float:origin[3];
	PosSpawnObj(client, origin, 80.0, 0.0, 0.0);
	Nades[client][LightEnt] = entity_light(origin);
	Nades[client][ObjEnt] = entity_light_obj(origin);
	Nades[client][Time] = time;
	Nades[client][oldTime] = GetTime();
	CreateTimer(0.1, StopNades, client, TIMER_REPEAT);
}

public Action:StopNades(Handle:timer, any:client) {
	if ((GetTime() - Nades[client][oldTime]) > Nades[client][Time]) {
		RemoveEdict(Nades[client][ObjEnt]);
		RemoveEdict(Nades[client][LightEnt]);
		return Plugin_Stop;
	}
	decl fVec[3];
	GetEntPropVector(Nades[client][ObjEnt], Prop_Data, "m_vecAbsOrigin", fVec);
	fVec[2] += 5.0;
	PrintToServer("server = %f,%f,%f", fVec[0], fVec[1], fVec[2]);
	TeleportEntity(Nades[client][LightEnt], fVec, NULL_VECTOR, NULL_VECTOR);
	AcceptEntityInput(Nades[client][LightEnt], "TurnOn");
}

stock entity_light(Float:origin[3]) {      
    new entlight = CreateEntityByName("light_dynamic");  
    if (entlight != -1)    
    {     
        DispatchKeyValue(entlight, "_light", "250 0 0");  
        DispatchKeyValue(entlight, "brightness", "10");  
        DispatchKeyValueFloat(entlight, "spotlight_radius", 360.0);  
        DispatchKeyValueFloat(entlight, "distance", 50.0);  
        DispatchKeyValue(entlight, "style", "0");
        DispatchSpawn(entlight); 
		AcceptEntityInput(entlight, "TurnOn");
        TeleportEntity(entlight, origin, NULL_VECTOR, NULL_VECTOR);
		return entlight;
    }
	return 0;
}
stock entity_light_obj(Float:origin[3]) {
	new ent = CreateEntityByName("prop_physics");
	if (ent != -1) {
		DispatchKeyValue(ent, "model", "models/items/healthkit.mdl");
		DispatchKeyValueVector(ent, "origin", origin);
		DispatchKeyValue(ent, "solid", "6");
		DispatchKeyValue(ent, "spawnflags", "1");
		DispatchSpawn(ent);
		return ent;
	}
	return 0;
}

Моя задача прикрепить объект свечения к объекту аптечки, что-бы свечение всегда телепортировалось к аптечке. т.е прикреплено...

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

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
Есть способ куда проще:
C-подобный:
	new iEntity = CreateEntityByName("prop_physics_override");
	DispatchKeyValue(iEntity, "model", "models/items/healthkit.mdl");
	DispatchKeyValueVector(iEntity, "origin", fOrigin);
	DispatchKeyValue(iEntity, "solid", "6");
	DispatchSpawn(iEntity);
		
	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);
	TeleportEntity(iEnt, fOrigin, NULL_VECTOR, NULL_VECTOR);
		
	new String:szTarget[32];
	Format(szTarget, sizeof(szTarget), "lighthealthkit_%d", iEntity);
	DispatchKeyValue(iEntity, "targetname", szTarget);
	SetVariantString(szTarget);
	AcceptEntityInput(iEnt, "SetParent");
	AcceptEntityInput(iEnt, "TurnOn");
Таким образом light_dynamic будет прикреплен к аптечке и будет двигаться вместе с ней.
 

Ganibal95

Участник
Сообщения
52
Реакции
0
FrozDark, Пробовал, эффект тот-же самый...

Добавлено через 2 минуты
Reiko1231, Спасибо. Сейчас по пробую. Но верится что заработает.

Но вопрос остается в силе, т.к после того как аптечка должна удалится она должна взорвать по близости находящихся мобов или людей...
Все это конечно я смогу сделать, но вот как получить ее текущию позицию понятия не имею...
 
Последнее редактирование:

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
Описание:
Написав test в консоль, в перекрестье прицела создается аптечка с подсветкой, и пишутся её координаты. По прохождении пяти секунд пишутся её текущие координаты и аптечка со светом удаляются.

Скриншоты:


Код:
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);
		TeleportEntity(iEnt, fOrigin, NULL_VECTOR, NULL_VECTOR);
		
		new String:szTarget[32];
		Format(szTarget, sizeof(szTarget), "lighthealthkit_%d", iEntity);
		DispatchKeyValue(iEntity, "targetname", szTarget);
		SetVariantString(szTarget);
		AcceptEntityInput(iEnt, "SetParent");
		AcceptEntityInput(iEnt, "TurnOn");
		
		CreateTimer(5.0, Timer_BlowUpHealthkit, iEntity);
	}
	
	return Plugin_Handled;
}

public Action:Timer_BlowUpHealthkit(Handle:hTimer, any:iEntity)
{
	if ( IsValidEdict(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, "Kill");
	}
}

public bool:TRDontHitSelf(iEntity, mask, any:data)
{
	return iEntity != data;
}
 
Последнее редактирование:

Ganibal95

Участник
Сообщения
52
Реакции
0
Reiko1231, Знаю что не в тему, но не могли -бы вы подсказать, сделать чтоб объект по написанию test выводился прямо перед моим прицелом. Будь я буду смотреть в верх или вниз...

напишу что я задумал...
Я хочу сделать некую светящиюся подстволку, объект аптечки я взял просто пока для тестов...

И для того чтоб точно выстреливать эту подстволку, нужно прямо перед моим прицелом создавать ее =)

Заранее спасибо =)
 

tonline_kms65

Участник
Сообщения
65
Реакции
13
Продолжение темы.
Я так и не увидел решения здесь.
Мне нужно получить текущие координаты двигающейся энтити.
Офсеты m_vecAbsOrigin и m_vecAbsOrigin не подходят, первый офсет это как бы кешированные координаты(начальные) энтити, второй офсет просто не работает на двигающихся энтитях (координаты по нулям, может быть я что то не так делал).
Как можно определить координаты энтити в движении?
Сам вопрос у меня такой - как можно узнать координаты кости 3D модели?

Странно что я не вижу нигде такого вопроса. Может быть моя проблема решается как то проще?
Я хочу задать начальной точкой (например для лазера) координаты именно кости анимированой модели. Модель постоянно в движении => кости тоже. Естественно точка начала лазера постоянно меняется. Вот я и хочу получить координаты этой точки.
Может быть у кого то есть какие то варианты?
 
Последнее редактирование:
Сверху Снизу