AMX MOD X
Пятница, 07.02.2025, 05:17:51



Приветствую Вас Гость | RSS
[ Главная ] [ Проверить сопрекосновение 2 разных обектов. - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Проверить сопрекосновение 2 разных обектов.
He_npeTДата: Четверг, 05.07.2007, 16:55:41 | Сообщение # 1
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Помогите пожалуйсто улучшить слейдующий код, чтобы он правильно действовал с малоугольными/многоугольными обектами тоже, а не воспринивал всё как куб...

То-есть

|\
| \
|_\

или
__
| \
| .|
|_/

для него будет
__
| |
| |
|_|

А надо чтобы он фигуры воспринимал такой формы как они и есть.

Code

stock _check_collision ( entity1, entity2 )
{
  // supplied with invalid entities
  if( !pev_valid(entity1) || !pev_valid(entity2) )
   return 0;

  // retrieve absolutes
  static Float:absmin1[3], Float:absmax1[3], Float:absmin2[3], Float:absmax2[3];

  pev(entity1, pev_absmin, absmin1);
  pev(entity1, pev_absmax, absmax1);
  pev(entity2, pev_absmin, absmin2);
  pev(entity2, pev_absmax, absmax2);

  // not in bounds
  if( absmin1[0] > absmax2[0] ||
      absmin1[1] > absmax2[1] ||
      absmin1[2] > absmax2[2] ||
      absmax1[0] < absmin2[0] ||
      absmax1[1] < absmin2[1] ||
      absmax1[2] < absmin2[2] )
      return 0;

  return 1;
}


My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot

Сообщение отредактировал He_npeT - Четверг, 05.07.2007, 17:04:21
 
AlModДата: Четверг, 05.07.2007, 17:51:27 | Сообщение # 2
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
эээээ... А не проще юзать pfn_toucn или что-то подобное?

 
He_npeTДата: Четверг, 05.07.2007, 22:30:58 | Сообщение # 3
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Ну, беда в том, то что... Буду говорить досконально в общем. Так как в моём случее hlds'a engine не понимает то что игрок прикосается tigger_teleport, я пользуюсь <engine> fake_touch(ent1, ent2);, а для этого надо вычеслить сопрекосаемость обектов не пользуясь данными из hlds'a engine'a. К стати, что делает этот pfn_toucn и в каком include нахлдится? :Р

My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
 
AlModДата: Пятница, 06.07.2007, 07:07:12 | Сообщение # 4
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
pfn_touch(ptr,ptd) [engine required]
Форвард, который вызывается когда соприкасаются 2 энтити в твоем случае будет так:
Code

public pfn_touch(ptr,ptd)
{
  new ClassName[32]  
  if ((ptr > 0) && is_valid_ent(ptr))  
  {
   entity_get_string(ptr, EV_SZ_classname, ClassName, 31)
  }
  new ClassName2[32]  
  if ((ptd > 0) && is_valid_ent(ptd))  
  {
   entity_get_string(ptd, EV_SZ_classname, ClassName2, 31)
  }

  if (equal(ClassName2, "player"))
  {
   if (equal(ClassName, "trigger_teleport"))
   {
    // Делаем че нибудь, после касания игрока телепортом
   }
  }
}

Ну вот както так smile


 
He_npeTДата: Пятница, 06.07.2007, 11:09:52 | Сообщение # 5
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Проверил - не действует... Может есть какиенибудь другие способы, или в коде проблема..? Вписал туда я токо - client_print(0, print_chat, "Test"); и оно не высвечивалось. :Р

My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot

Сообщение отредактировал He_npeT - Пятница, 06.07.2007, 23:14:45
 
AlModДата: Пятница, 06.07.2007, 16:05:30 | Сообщение # 6
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
c другими энтитями пробовал? Попробуй оба player написать

 
He_npeTДата: Пятница, 06.07.2007, 22:56:16 | Сообщение # 7
Генерал-майор
Группа: Скриптеры
Сообщений: 292
Репутация: 7
Статус: Не в сети
Попробывал trigger_teleport изменить на func_door - тогда при прикосновение действовало. Наварное нефиксирует к телепорту если SOLIND_NOT из-за того что он в нём, а не прикосается к нему, или амхх его фиксирует после сомого телепорта... Ещё какиенибудь варианты есть? :Р

My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot

Сообщение отредактировал He_npeT - Пятница, 06.07.2007, 23:09:31
 
AlModДата: Суббота, 07.07.2007, 07:58:07 | Сообщение # 8
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
Хм. Есть еще идея по поводу. Триггер_телепорт не что иное как параллелепипед определённой ширины-высоты-длины, если мы знаем ид энтити триггера, то можем узнать границы этого браша, если возьмем координаты по главной диагонали. Подумай вообщем по поводу координат, может получится

 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2025