Опредилить: простреливаемая стена или нет
|
|
Immortal_BLG | Дата: Понедельник, 05.05.2008, 12:41:21 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Статус: Не в сети
| Очень нужна ваша помощь, хотел сделать чтоб боты(YaPB) опредиляли простреливаемая ли стена или нет(как в читах на кс), но незнаю как это осуществить... (по средствам c++ ) Добавлено (2008-05-05, 12:41 Pm) --------------------------------------------- Ну помогите пожалуйста, очень прошу!!
|
|
| |
VEN | Дата: Понедельник, 05.05.2008, 19:07:41 | Сообщение # 2 |
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Quote простреливаемая ли стена или нет(как в читах на кс) Ну так в чем проблема? Ты же сам ответил на свой вопрос - читай исходники читов. Ну, или еще лучше - исходники CS1.6 (closed source).
|
|
| |
Immortal_BLG | Дата: Вторник, 06.05.2008, 16:38:41 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Статус: Не в сети
| Вен ну ты молодец, ничего не скажещь... Ведь я даже не знаю что ищу(TraceLine или ешо что) и в каком именно чите(которого есть исходники)?
|
|
| |
VEN | Дата: Вторник, 06.05.2008, 19:16:30 | Сообщение # 4 |
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Ну давай нам сюда код чита или еще чего-то там, где это осуществляется - мы тебе поможем поискать. Только код - exe/dll и прочего не надо.
|
|
| |
DaTa | Дата: Среда, 07.05.2008, 02:44:46 | Сообщение # 5 |
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| вот в познавательных целях 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
Статус: Не в сети
| 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
Статус: Не в сети
| .\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
Статус: Не в сети
| прошу прощения, там не было это указано на сайте, вот перезалил http://www.sendspace.com/file/ofsanr как мне кажется, ты выложил более удачный метод
Сообщение отредактировал DaTa - Среда, 07.05.2008, 22:57:42 |
|
| |
VEN | Дата: Среда, 07.05.2008, 23:00:44 | Сообщение # 9 |
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Ага - похоже, тоже неплохой метод, но 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
Статус: Не в сети
| Quote (VEN) ... или вообще оригинальный CS метод, используемый CZ ботами (ведь они через стены вроде тоже стреляют?). не замечал такого за ними
|
|
| |
VEN | Дата: Среда, 07.05.2008, 23:13:24 | Сообщение # 11 |
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Похоже, что BTG метод все же больше приближен к оригиналу CS1.6 (т.к. похож на CS:S метод). EDIT: Quote хотел сделать чтоб боты(YaPB) опредиляли простреливаемая ли стена или нет Судя по всему, они это делать умеют (см. выложенный мной код выше).
|
|
| |
Immortal_BLG | Дата: Четверг, 08.05.2008, 16:01:58 | Сообщение # 12 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Статус: Не в сети
| Парни спасибо за проявленную помощь, но сейчас япб бот стреляет и через те стены, через которые нельзя прострелить...(если я вас правильно понял по, то бот должен правильно определять стену на простреливаемость, но...)
|
|
| |
DaTa | Дата: Четверг, 08.05.2008, 16:03:53 | Сообщение # 13 |
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| Quote (Immortal_BLG) Парни спасибо за проявленную помощь, но сейчас япб бот стреляет и через те стены, через которые нельзя прострелить...(если я вас правильно понял по, то бот должен правильно определять стену на простреливаемость, но...) можешь прислать скрин и название карты? для раздумия
|
|
| |
Immortal_BLG | Дата: Четверг, 29.05.2008, 08:12:01 | Сообщение # 14 |
Лейтенант
Группа: Пользователи
Сообщений: 56
Статус: Не в сети
| слушайте, я извеняюсь за такую задержку, но все же, я тут нашел исходники двух разных читов, и столкнулся с проблемами портирования кода: 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
Статус: Не в сети
| похоже, что это таже самая функция что и *g_engfuncs.pfnTraceLine, но для клиентской части, как портировать читай hlsdk struct pmtrace_s \hlsdk\multiplayer\common\pmtrace.h struct TraceResult \hlsdk\multiplayer\engine\eiface.h вроде структуры одинаковые, но доступ к ним, с точки зрения кода, различается
|
|
| |