Перейти к публикации
  • Возобновить попытки создать спавн убеги из шаблона по курсору


    Electr0
    • Сделано

    Нужно подумать как делать шаблоны из предметов чтобы их можно было подгружать на любой карте просто наложив на их оффсеты смешения координату точки под курсором.

     

    Теоритически, есть идея что если взять за основу координату первого из предметов за ПЕРВУЮ и убирая из остальных предметов эту ПЕРВУЮ координату сохранить. Потом на эти данные накладывать координату точки куда хотим заспавнить предметы из шаблонной убежки, нужно провести тестовое перемещение нескольких условных предметов по заданному сценарию


    Отзывы пользователей

    Рекомендованные комментарии

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

    public Action CmdLoadTemplate(int client, int args)
    {
    	float vPos[3][3], vSpawnPos[3][3], vTemplatePos[3][3], vMainOffsetPos[3];
    
    	// ИСХОДНЫЕ КООРДИНАТЫ ПРЕДМЕТОВ
    	
    	// координата позииции предмета 1
    	vPos[0][0] = 0.0;
    	vPos[0][1] = 0.0;
    	vPos[0][2] = 0.0;
    	
    	// координата позииции предмета 2
    	vPos[1][0] = 0.0;
    	vPos[1][1] = 0.0;
    	vPos[1][2] = 0.0;
    	
    	// координата позииции предмета 3
    	vPos[2][0] = 0.0;
    	vPos[2][1] = 0.0;
    	vPos[2][2] = 0.0;
    	
    	PrintToChat(client, "Входные координаты:: vPos[0] %f %f %f, vPos[1] %f %f %f, vPos[2] %f %f %f", vPos[0][0], vPos[0][1], vPos[0][2], vPos[1][0], vPos[1][1], vPos[1][2], vPos[2][0], vPos[2][1], vPos[2][2]);
    	
    	// СОЗДАНИЕ ШАБЛОНА
    	
    	// Берем координату первого предмета за базовую и вычитаем ее из всех остальных, а координату первого считаем как нулевую точку (тоесть первый предмет будет рождатся на позиции курсора).
    	vMainOffsetPos[0] = vPos[0][0];
    	vMainOffsetPos[1] = vPos[0][1];
    	vMainOffsetPos[2] = vPos[0][2];
    	
    	// Координату первого обнуляем.
    	vTemplatePos[0][0] = 0.0;
    	vTemplatePos[0][1] = 0.0;
    	vTemplatePos[0][2] = 0.0;
    	
    	// Координата шаблона следующих предметов будет: координата предмета вычесть координату первого предмета.	
    	
    	// Вычисляем координату сдвига второго и третьего предмета
    	SubtractVectors(vPos[1], vMainOffsetPos, vTemplatePos[1]);
    	SubtractVectors(vPos[2], vMainOffsetPos, vTemplatePos[2]);
    
    	PrintToChat(client, "Шаблон:: vTemplatePos[0] %f %f %f, vTemplatePos[1] %f %f %f, vTemplatePos[2] %f %f %f", vTemplatePos[0][0], vTemplatePos[0][1], vTemplatePos[0][2], vTemplatePos[1][0], vTemplatePos[1][1], vTemplatePos[1][2], vTemplatePos[2][0], vTemplatePos[2][1], vTemplatePos[2][2]);
    	
    	// РОЖДЕНИЕ ИЗ ШАБЛОНА
    	
    	// Берем место куда смотрит курсор
    	float vClientEyePos[3], vClientEyeAng[3], vCursorPos[3];
    
    	GetClientEyePosition(client, vClientEyePos);
    	GetClientEyeAngles(client, vClientEyeAng);
    
    	Handle trace = TR_TraceRayFilterEx( vClientEyePos, vClientEyeAng, MASK_SOLID_BRUSHONLY, RayType_Infinite, TraceEntityFilterPlayers );
    
    	if(TR_DidHit( trace ))
    	{
    		TR_GetEndPosition( vCursorPos, trace );
    		
    		// Накладываем на шаблонные координаты сдвигов позицию курсора
    		AddVectors(vCursorPos, vTemplatePos[0], vSpawnPos[0]);
    		AddVectors(vCursorPos, vTemplatePos[1], vSpawnPos[1]);
    		AddVectors(vCursorPos, vTemplatePos[2], vSpawnPos[2]);
    		
    		PrintToChat(client, "Координаты спавна из шаблона:: vSpawnPos[0] %f %f %f, vSpawnPos[1] %f %f %f, vSpawnPos[2] %f %f %f", vSpawnPos[0][0], vSpawnPos[0][1], vSpawnPos[0][2], vSpawnPos[1][0], vSpawnPos[1][1], vSpawnPos[1][2], vSpawnPos[2][0], vSpawnPos[2][1], vSpawnPos[2][2]);
    	}
    }
    
    public bool TraceEntityFilterPlayers(int entity, int contentsMask, any data )
    {
    	return entity > MaxClients && entity != data;
    }

     

    Ссылка на комментарий
    Поделиться на других сайтах



    Присоединяйтесь к обсуждению

    Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

    Гость
    Добавить комментарий...

    ×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

      Разрешено не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.


  • Обозначения статусов

    В обработке = Мы работаем над вашим отзывом.

    Будет сделано = Ваша идея добавлена к плану будущих изменений.

    Тестируется = Изменения внесены, но требуют тестирования.

    Сделано = Ваша идея реализована!

    Отклонено = Отзыв некорректный, бред, либо уже реализовано. Если у вас есть дополнительная информация напишите комментарий и мы снова откроем этот вопрос.

×
×
  • Создать...