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

Тема в разделе "Программирование / Скриптинг", создана пользователем Ganibal95, 11 авг 2013.

  1. Ganibal95

    Ganibal95

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

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

    мой нубо код:
    Код:
    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;
    }
    
    Моя задача прикрепить объект свечения к объекту аптечки, что-бы свечение всегда телепортировалось к аптечке. т.е прикреплено...

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

    Reiko1231 AlexTheRegent

    Сообщения:
    235
    Симпатии:
    568
    Есть способ куда проще:
    Код:
    	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 нравится это.
  3. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    нужно убрать Abs и оставить только m_vecOrigin
     
  4. Ganibal95

    Ganibal95

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

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

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

    Reiko1231 AlexTheRegent

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

    Скриншоты:
    [​IMG][​IMG][​IMG]

    Код:
    Код:
    #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;
    }
     
    Последнее редактирование: 11 авг 2013
    Ganibal95 нравится это.
  6. Ganibal95

    Ganibal95

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

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

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

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

    tonline_kms65 Read Only

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

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