AMX MOD X
Суббота, 27.04.2024, 04:23:31



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

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

  • Страница 1 из 2
  • 1
  • 2
  • »
AMX Mod X Форум » Half-Life SDK » Вопросы по Half-Life SDK » Опредилить: простреливаемая стена или нет
Опредилить: простреливаемая стена или нет
Immortal_BLGДата: Понедельник, 05.05.2008, 12:41:21 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 56
Репутация: 2
Статус: Не в сети
Очень нужна ваша помощь, хотел сделать чтоб боты(YaPB) опредиляли простреливаемая ли стена или нет(как в читах на кс), но незнаю как это осуществить... (по средствам c++ :) )

Добавлено (2008-05-05, 12:41 Pm)
---------------------------------------------
Ну помогите пожалуйста, очень прошу!!

 
VENДата: Понедельник, 05.05.2008, 19:07:41 | Сообщение # 2
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote
простреливаемая ли стена или нет(как в читах на кс)
Ну так в чем проблема? Ты же сам ответил на свой вопрос - читай исходники читов. Ну, или еще лучше - исходники CS1.6 (closed source).
 
Immortal_BLGДата: Вторник, 06.05.2008, 16:38:41 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 56
Репутация: 2
Статус: Не в сети
Вен ну ты молодец, ничего не скажещь... Ведь я даже не знаю что ищу(TraceLine или ешо что) и в каком именно чите(которого есть исходники)?
 
VENДата: Вторник, 06.05.2008, 19:16:30 | Сообщение # 4
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Ну давай нам сюда код чита или еще чего-то там, где это осуществляется - мы тебе поможем поискать.
Только код - exe/dll и прочего не надо.
 
DaTaДата: Среда, 07.05.2008, 02:44:46 | Сообщение # 5
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
вот в познавательных целях
http://www.sendspace.com/file/ofsanr
думаю копать нужно с perfectwall.cpp::int CanPenetrate(const float *start, const float *end, float flDistance, int penetration, int bullettype, int iDamage, float wallpierce)


Сообщение отредактировал DaTa - Среда, 07.05.2008, 22:43:44
 
VENДата: Среда, 07.05.2008, 22:04:00 | Сообщение # 6
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote (http://www.freespace.com.ua/file/47438/f99401b0/BathTubGin_Source_Code.html)
Сервис работает бесплатно только для пользователей UA-IX. Ваш ай-пи 92.50.209.111 не входит в список сетей UA-IX. Для скачивания файла купите premium-аккаунт!
 
VENДата: Среда, 07.05.2008, 22:22:27 | Сообщение # 7
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
.\POD-bot2.6src\Podbot\DLLS\BOT_COMBAT.CPP
Code
// Returns if enemy can be shoot through some obstacle
// TODO: After seeing the disassembled CS Routine it could
// be speedup and simplified a lot

bool IsShootableThruObstacle(edict_t *pEdict,Vector vecDest)
{
          Vector vecSrc = pEdict->v.origin+pEdict->v.view_ofs;
          Vector vecDir = (vecDest - vecSrc).Normalize();  // 1 unit long
          Vector vecPoint;
          int iThickness=0;
          int iHits=0;
            
          edict_t *pentIgnore=pEdict->v.pContainingEntity;
          TraceResult tr;
          UTIL_TraceLine(vecSrc, vecDest, ignore_monsters,ignore_glass, pentIgnore, &tr);
          while(tr.flFraction != 1.0 && iHits<3)
          {
                  iHits++;
                  iThickness++;
                  vecPoint=tr.vecEndPos+vecDir;
                  while((UTIL_PointContents(vecPoint) == CONTENTS_SOLID) && (iThickness<64))
                  {
                          vecPoint=vecPoint+vecDir;
                          iThickness++;
                  }
                  UTIL_TraceLine(vecPoint, vecDest, ignore_monsters,ignore_glass, pentIgnore, &tr);
          }
          if(iHits<3 && iThickness<64)
          {
                  float f_distance=(vecDest - vecPoint).Length();
                  if(f_distance<112)
                          return TRUE;
          }
          return FALSE;
}

http://svn.jeefo.spb.ru/filedet....=5&sc=1

Code
bool Bot::IsShootableThruObstacle (Vector dest)
{
    // this function returns if enemy can be shoot through some obstacle

    if (m_skill <= 60 || !IsWeaponShootingThroughWall (m_currentWeapon))
       return false;

    Vector source = EyePosition ();
    Vector direction = (dest - source).Normalize ();  // 1 unit long
    Vector point = Vector::GetNull ();

    int thikness = 0;
    int numHits = 0;

    TraceResult tr;
    TraceLine (source, dest, true, true, GetEntity (), &tr);

    while (tr.flFraction != 1.0 && numHits < 3)
    {
       numHits++;
       thikness++;

       point = tr.vecEndPos + direction;

       while (POINT_CONTENTS (point) == CONTENTS_SOLID && thikness < 84)
       {
          point = point + direction;
          thikness++;
       }
       TraceLine (point, dest, true, true, GetEntity (), &tr);
    }

    if (numHits < 3 && thikness < 74)
    {
       if ((dest - point).GetLengthSquared () < 13143)
          return true;
    }
    return false;
}
 
DaTaДата: Среда, 07.05.2008, 22:43:26 | Сообщение # 8
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
прошу прощения, там не было это указано на сайте, вот перезалил
http://www.sendspace.com/file/ofsanr

как мне кажется, ты выложил более удачный метод :)

Сообщение отредактировал DaTa - Среда, 07.05.2008, 22:57:42
 
VENДата: Среда, 07.05.2008, 23:00:44 | Сообщение # 9
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Ага - похоже, тоже неплохой метод, но Count Floyd's метод по-проще.

Еще бы найти оптимизированный вариант

Quote
// Returns if enemy can be shoot through some obstacle
// TODO: After seeing the disassembled CS Routine it could
// be speedup and simplified a lot

... или вообще оригинальный CS метод, используемый CZ ботами (ведь они через стены вроде тоже стреляют?).

 
DaTaДата: Среда, 07.05.2008, 23:08:58 | Сообщение # 10
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (VEN)
... или вообще оригинальный CS метод, используемый CZ ботами (ведь они через стены вроде тоже стреляют?).

не замечал такого за ними
 
VENДата: Среда, 07.05.2008, 23:13:24 | Сообщение # 11
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Похоже, что BTG метод все же больше приближен к оригиналу CS1.6 (т.к. похож на CS:S метод).

EDIT:

Quote
хотел сделать чтоб боты(YaPB) опредиляли простреливаемая ли стена или нет

Судя по всему, они это делать умеют (см. выложенный мной код выше).
 
Immortal_BLGДата: Четверг, 08.05.2008, 16:01:58 | Сообщение # 12
Лейтенант
Группа: Пользователи
Сообщений: 56
Репутация: 2
Статус: Не в сети
Парни спасибо за проявленную помощь, но сейчас япб бот стреляет и через те стены, через которые нельзя прострелить...(если я вас правильно понял по, то бот должен правильно определять стену на простреливаемость, но...)
 
DaTaДата: Четверг, 08.05.2008, 16:03:53 | Сообщение # 13
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Quote (Immortal_BLG)
Парни спасибо за проявленную помощь, но сейчас япб бот стреляет и через те стены, через которые нельзя прострелить...(если я вас правильно понял по, то бот должен правильно определять стену на простреливаемость, но...)

можешь прислать скрин и название карты? для раздумия :)
 
Immortal_BLGДата: Четверг, 29.05.2008, 08:12:01 | Сообщение # 14
Лейтенант
Группа: Пользователи
Сообщений: 56
Репутация: 2
Статус: Не в сети
слушайте, я извеняюсь за такую задержку, но все же, я тут нашел исходники двух разных читов, и столкнулся с проблемами портирования кода: struct pmtrace_s *(*PM_TraceLine)( float *start, float *end, int flags, int usehull, int ignore_pe ); - я первый раз вижу такую функцию (обычно я встречался с (*g_engfuncs.pfnTraceLine) (start, end, (ignoreMonsters ? TRUE : FALSE) | (ignoreGlass ? 0x100 : 0), ignoreEntity, ptr);) вопрос это не одно и тоже? :)
 
DaTaДата: Четверг, 29.05.2008, 08:42:03 | Сообщение # 15
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
похоже, что это таже самая функция что и *g_engfuncs.pfnTraceLine, но для клиентской части, как портировать читай hlsdk
struct pmtrace_s \hlsdk\multiplayer\common\pmtrace.h
struct TraceResult \hlsdk\multiplayer\engine\eiface.h
вроде структуры одинаковые, но доступ к ним, с точки зрения кода, различается
 
AMX Mod X Форум » Half-Life SDK » Вопросы по Half-Life SDK » Опредилить: простреливаемая стена или нет
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024