HLFX.Ru Forum
Показать все 33 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Компиляция Parabot для Linux (https://hlfx.ru/forum/showthread.php?threadid=4540)


Отправлено Ku2zoff 29-01-2015 в 21:34:

Компиляция Parabot для Linux

Как я и думал, столкнулся с массой проблем при попытке компиляции библиотеки parabot в linux.
1. работа со строками. Всякие _stricmp, _strnicmp, _strupr и прочее. Насколько безопасно заменить их обычными stricmp, strnicmp? Не будет ли вылетов или критичных багов? Ещё, для _strupr нет альтернативы в заголовках для GCC. Чем заменить по-хорошему?
2. std:vector. ИМХО, параша какая-то. Смотря на код, понимаю, почему многие не любят C++ и предпочитают чистый C. Так вот. Спецификации опять же отличаются. GCC не прожёвывает reference, const_reference, size_type и iterator. Это такой прикол от майкрософта насочинять новые типы и невозбранно юзать только под виндой?
3. Регистр.. Мать его! Студия прекрасно хавает исходник, к которому подключен заголовок PBT_DynArray.h, при том, что реальное имя файла pbt_dynarray.h. GCC начинает выпендриваться, типа файл не найден. Ему надо либо переименовать настоящий файл в соответствии со строчкой в исходнике, либо изменить строчку в исходнике в соответствии с реальным именем файла.

Пока что всё, дальше даже разбирать не стал. Погуглил, кое-что нашёл, но такие решения меня не устраивают. Что хочу узнать:
По пункту 1. Про безопасность замены обычными функциями уже спросил, про альтернативу _strupr тоже спросил. Может быть можно как-то настроить компилятор, чтоб он жевал исходники без модификации?
По пункту 2. Где можно почитать, какой вариант вектора правильный, и как избавиться от ошибок?
По пункту 3. Может быть, опять же, ключ командной строки для компилятора есть?

З.Ы. Знаю, что XaeroX писал ботов для Волатилы на основе Parabot, надеюсь он что-нибудь подскажет. Особенно по пункту 2.


Отправлено KiQ 29-01-2015 в 21:56:

Ku2zoff для работы со строками же есть встроенные в движок функции, начинающиеся с Q_ (Q_strcmp например)

__________________
-Brain is dead-


Отправлено Ku2zoff 29-01-2015 в 22:02:

Цитата:
KiQ писал:
есть встроенные в движок функции

Ну дык Valve почему-то ими не пользуются. Ни в сервере, ни в клиентке. И автор ботов тоже не пользовался.


Отправлено FreeSlave 30-01-2015 в 00:13:

Цитата:
Ku2zoff писал:
std:vector. ИМХО, параша какая-то. Смотря на код, понимаю, почему многие не любят C++ и предпочитают чистый C. Так вот. Спецификации опять же отличаются. GCC не прожёвывает reference, const_reference, size_type и iterator. Это такой прикол от майкрософта насочинять новые типы и невозбранно юзать только под виндой?


Всё есть.

code:
std::vector<int>::iterator it; int i = 0; std::vector<int>::reference r = i; std::vector<int>::size_type s; std::vector<int>::const_reference c = i;


Цитата:
Ku2zoff писал:
Может быть можно как-то настроить компилятор, чтоб он жевал исходники без модификации?


Определи соответствующие дефайны в командной строке. Типа
code:
-D_stricmp=strcasecmp

Или запиши определения в заголовочный файл, который повсюду подключается

code:
#ifndef _WIN32 #define _stricmp strcasecmp #endif


Цитата:
Ku2zoff писал:
Где можно почитать, какой вариант вектора правильный, и как избавиться от ошибок?

Можешь читать cplusplus.com. Там если какие-то нестандартные вещи приводятся, то и явно написано, что они не в стандарте.

Цитата:
Ku2zoff писал:
Регистр.. Мать его!

Это уже особенности винды. Ключ вряд ли какой есть. В никсах файлы в разных регистрах - принципиально разные файлы.


Отправлено XaeroX 30-01-2015 в 06:03:

Цитата:
FreeSlave писал:
Это уже особенности винды. Ключ вряд ли какой есть. В никсах файлы в разных регистрах - принципиально разные файлы.

Это особенности линукса, рассчитанного на роботов, а не людей.
Для психически здорового человека файлы в разных регистрах - это один и тот же файл.

__________________

xaerox on Vivino


Отправлено Ku2zoff 30-01-2015 в 07:27:

Цитата:
FreeSlave писал:
Всё есть.

Ну а чего компилятор тогда ноет, что нет? Что, прям в самом файле объявлять надо?
Цитата:
FreeSlave писал:
-D_stricmp=strcasecmp

Спасибо за подсказку. Буду гуглить альтернативы. Код _strupr (нашёл в инете) прям в нужный файл засуну, он там всего в одной cpp-шке используется.
Цитата:
XaeroX писал:
Для психически здорового человека файлы в разных регистрах - это один и тот же файл.

Ну с регистром проблема небольшая. Там вроде в двух местах всего лишь написано #include не в нижнем регистре. Перепишу.

А как с вектором-то быть? Может объявить std::vector как-то по-другому? Или заголовок специфический подключить надо? Заголовки есть же, иначе компилятор бы на их отсутствие ругался. Я причину того, что компилятор не находит эти типы, пока не понял.

Цитата:
FreeSlave писал:
Там если какие-то нестандартные вещи приводятся, то и явно написано, что они не в стандарте.

Ну вот _strupr, к примеру, не в стандарте ANSI.


Отправлено FreeSlave 30-01-2015 в 12:27:

Цитата:
Ku2zoff писал:
Ну а чего компилятор тогда ноет, что нет? Что, прям в самом файле объявлять надо?

Откуда я знаю? Ты ни логов, ни командной строки, ни примеров кода не кидал. Может, ты там вообще gcc вместо g++ вызываешь

Цитата:
XaeroX писал:
Это особенности линукса, рассчитанного на роботов, а не людей.

Тогда уж всех юниксов вообще, если быть справедливым.


Отправлено Ku2zoff 30-01-2015 в 16:05:

Цитата:
FreeSlave писал:
Может, ты там вообще gcc вместо g++ вызываешь

Ой, точно Сервер им полностью по дефолту компилится. А для компиляции клиента юзаются и gcc и g++. Причём gcc компилит только pm_shared. Вот оно в чём дело. На сервере, похоже, нету специфического кода, в отличие от клиента, вот gcc его и жуёт. А в коде ботов запоролся с сиплюсплюсным std. Щас копнём в этом направлении.
З.Ы. если удастся собрать без проблем, то попробую применить фиксы для Linux (сворую из HPB_bot). Чтобы можно было хотя бы в HLDM, OpFor и DMC гамать. Жаль, поддержка TFC недоделанная


Отправлено FreeSlave 30-01-2015 в 16:51:

Ku2zoff, gcc определяет язык, но с libstdc++ по умолчанию не линкует. Поэтому вполне может скомпилировать C++ код, если стандартная библиотека не используется


Отправлено Ku2zoff 31-01-2015 в 08:03:

С векторами беда:

code:
bot/pb_goals.o -c ../parabot-source/bot/pb_goals.cpp In file included from ../parabot-source/bot/pb_mapgraph.h:9:0, from ../parabot-source/bot/pb_cell.cpp:3: ../parabot-source/utils/checkvec.h:19:31: error: expected ‘)’ before ‘n’ checkedVector(size_type n, const T& value = T()) ^ In file included from ../parabot-source/bot/pb_mapgraph.h:9:0, from ../parabot-source/bot/parabot.h:5, from ../parabot-source/bot/bot.cpp:13: ../parabot-source/utils/checkvec.h:19:31: error: expected ‘)’ before ‘n’ checkedVector(size_type n, const T& value = T()) ^ ../parabot-source/utils/checkvec.h:23:30: error: expected ‘)’ before ‘i’ checkedVector(iterator i, iterator j) ^ ../parabot-source/utils/checkvec.h:27:4: error: ‘reference’ does not name a type reference operator[](difference_type index) ^ ../parabot-source/utils/checkvec.h:27:4: note: (perhaps ‘typename std::vector<T>::reference’ was intended) ../parabot-source/utils/checkvec.h:34:7: error: ‘const_reference’ does not name a type const_reference operator[](difference_type index) const ^ ../parabot-source/utils/checkvec.h:34:7: note: (perhaps ‘typename std::vector<T>::const_reference’ was intended) ../parabot-source/utils/checkvec.h:23:30: error: expected ‘)’ before ‘i’ checkedVector(iterator i, iterator j) ^ ../parabot-source/utils/checkvec.h:27:4: error: ‘reference’ does not name a type reference operator[](difference_type index) ^ ../parabot-source/utils/checkvec.h:27:4: note: (perhaps ‘typename std::vector<T>::reference’ was intended) ../parabot-source/utils/checkvec.h:34:7: error: ‘const_reference’ does not name a type const_reference operator[](difference_type index) const


Отправлено Ku2zoff 31-01-2015 в 13:30:

Похоже, проблема с компилятором. В среде разработки всё раскрашивается нужными цветами и наследуется как надо.


Отправлено FreeSlave 31-01-2015 в 13:43:

Цитата:
Ku2zoff писал:
Похоже, проблема с компилятором. В среде разработки всё раскрашивается нужными цветами и наследуется как надо.

Ага, конечно, тот ещё показатель

Ты бы лучше кинул ссылочку на сорцы этих ботов.


Отправлено Ku2zoff 31-01-2015 в 14:03:

FreeSlave блин, ну раз пять на форуме выкладывалась.
http://racc.bots-united.com/parabot-source.zip
Сорцы оригинальные, не компилятся студиями новее 6.0 без правки исходников. Свои правленные не дам, т.к. там уже много изменений, которые я до релиза мода и исходников не хочу светить.

Добавлено 31-01-2015 в 19:59:

Для правильной компиляции нужен минимум HLSDK 2.3, но после смены порядка инклуидов и пары мелких правок, компилятся с новым СДК с гитхаба. Работают и не вылетают, если компилить 2013 студией.

Добавлено 31-01-2015 в 20:03:

Я застрял на файле checkvec.h, никак не могу понять, то ли checkedVector не наследует std::vector вообще, то ли это специфика линуксовых инклуидов.


Отправлено FreeSlave 31-01-2015 в 14:15:

Ku2zoff, всё так, как должно быть. Другое дело, что майкрософтовские компиляторы позволяют себе больше, чем описано в стандарте.
Вот так должно работать:

code:
template<class T> class checkedVector : public vector<T> // inherit from std::vector<T> { public: // type names like iterator etc. are also inherited checkedVector() {} checkedVector(typename checkedVector::size_type n, const T& value = T()) : vector<T>(n, value) {} checkedVector(typename checkedVector::iterator i, typename checkedVector::iterator j) : vector<T>(i, j) {} typename checkedVector::reference operator[](typename checkedVector::difference_type index) { assert(index >=0 && index < static_cast<typename checkedVector::difference_type>(this->size())); return vector<T>::operator[](index); } typename checkedVector::const_reference operator[](typename checkedVector::difference_type index) const { assert(index >=0 && index < static_cast<typename checkedVector::difference_type>(this->size())); return vector<T>::operator[](index); } };


Отправлено Ku2zoff 31-01-2015 в 14:43:

FreeSlave спс, проверю завтра. Где-то я нагуглил подобный вариант решения проблем с STL, но так и не попробовал.


Отправлено Ku2zoff 01-02-2015 в 07:10:

Собрал. Протестирую сначала своих модифицированных, потом соберу из чистых исходников и дам народу вместе с сорцами, подебажить. А то ботов для халфы под линукс не видел. Только для TFC и DoD.

Добавлено 01-02-2015 в 13:10:

З.Ы. Работа оказалась "Быдлокод в правильный код"


Отправлено Ku2zoff 01-02-2015 в 17:34:

Завести ботов под линуксом не удалось, дебажить не стал, всё равно буду встраивать их в серверную дллку. Вот вам, форумчане, подправленные исходники. Если хотите, можете исправить мой быдлокод Класть папку sdk в папку с модом. Все либы собираются и под Linux тоже, makeфайлы есть. client.dll(.so) и server.dll(.so) после компиляции автоматом падают в cl_dlls и dlls папки мода. parabot.dll(.so) падает в папку parabot в корне халфы, где лежит лаунчер. В коде есть комментарии, что и как исправлено. Касательно Linux (для ботов, конечно) - ku2zoff: linux. Исправлял на скорую руку, так что вполне могут быть грубые косяки.
З.Ы. Оказалось, что чувствительность к регистру непостоянная: в "живом" дебиане с кедами идёт ругань на все инклуиды, названия которых не соответствуют реальным файлам. А в виртуальной машине с этим же дебианом и рабочим столом MATE, не ругается.

Добавлено 01-02-2015 в 23:34:

З.З.Ы. Visual Studio 2013 и gcc-4.9 использовал для компила.
З.З.З.Ы. В исходники клиента встроен фикс мышки при m_rawinput 1.


Отправлено Cybermax 02-02-2015 в 08:03:

Линукс = боль

__________________


Отправлено ~ X ~ 02-02-2015 в 09:07:

Цитата:
Ku2zoff писал:
2. std:vector. ИМХО, параша какая-то. Смотря на код, понимаю, почему многие не любят C++ и предпочитают чистый C.

таки да

Поглядел коды - очередной прокси-бот-длл... даже как-то грустно стало.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ku2zoff 02-02-2015 в 22:01:

Цитата:
~ X ~ писал:
очередной прокси-бот-длл... даже как-то грустно стало.

А почему? Если HPB_bot построены изначально как прокси-длл, то и все последователи будут такие. Расчёт здесь идёт на моды с закрытыми сорцами. Ясен пень, что если у тебя есть свои сорцы, то можно ботов встроить в сервер. Будет намного удобнее работать с разными вещами, особенно касательно класса игрока и классов оружия, ведь будет доступ не только к энтварсам, но и к любым публичным переменным и функциям. Ну и в pm_shared тоже будет доступ, что немаловажно.

Добавлено 03-02-2015 в 04:01:

З.Ы. Ну и конечно унаследовать класс бота можно будет напрямую от игрока


Отправлено XaeroX 03-02-2015 в 05:24:

Цитата:
Ku2zoff писал:
Ясен пень, что если у тебя есть свои сорцы, то можно ботов встроить в сервер.

Имхо, совершенно неправильное решение.
При открытых сорцах я бы сделал хороший BotAPI для отдельной бот-дллки. На самом деле ботов мало что интересует из игровой библиотеки, зато код ботовского ИИ того же паработа довольно сложен, разнесён по десяткам файлов и будет лишь захламлять игровой проект. Тем более что сингловые моды (или простенькие мультиплеерные) не требуют модификаций сложнее, чем научиться ботов пользоваться новой пушкой. Что, опять же, реализуемо через BotAPI.

__________________

xaerox on Vivino


Отправлено Ku2zoff 03-02-2015 в 08:54:

Цитата:
XaeroX писал:
не требуют модификаций сложнее, чем научиться ботов пользоваться новой пушкой.

Я хочу научить их нормально действовать в разных игровых режимах, пользоваться спринтом, ползать на пузе (кстати, надо будет вообще закодить такую возможность, туторов не видел, буду сам пробовать) и вообще, более плотно взаимодействовать со всеми энтитями.
Цитата:
XaeroX писал:
код ботовского ИИ того же паработа довольно сложен, разнесён по десяткам файлов и будет лишь захламлять игровой проект.

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


Отправлено ~ X ~ 03-02-2015 в 08:57:

Цитата:
XaeroX писал:
При открытых сорцах я бы сделал хороший BotAPI для отдельной бот-дллки.

ВНЕЗАПНО! И ЭТО есть в XDM!
Только подгрузка лишних ДЛЛ и кривожопный перехват парсинг сетевых сообщений меня уже реально бесит. Кто делает закрытые моды - пусть сам жрёт говно. Для остальных не вижу никаких проблем.

Цитата:
Ku2zoff писал:
ползать на пузе

С анимацией swim?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ku2zoff 03-02-2015 в 09:01:

З.Ы. Что в паработах нехорошо, так это своеобразная конфигурация с профилями. Буду перепиливать по-своему, либо откачу до состояния HPB_bot и заведу персоналии, как в кондишн зеро.

Добавлено 03-02-2015 в 14:59:

Цитата:
~ X ~ писал:
С анимацией swim?

Я анимации игрока из DoD уже украл, и там есть нормальные анимации prone

Добавлено 03-02-2015 в 15:01:

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


Отправлено XaeroX 03-02-2015 в 09:37:

Цитата:
Ku2zoff писал:
Мне категорически не нравится манера автора расставлять фигурные скобки и вообще форматировать код.

У каждого свои привычки.
Я, например, раньше писал как м... чудак:
C++ Source Code:
1
if ( a )
2
{
3
  blablabla;
4
}
5
else
6
{
7
  __asm int 3
8
}

Теперь исправился, и пишу православно и благодатно:
C++ Source Code:
if ( a ) {
  blablabla;
} else {
  __asm int 3
}


Добавлено 03-02-2015 в 15:36:

Цитата:
~ X ~ писал:
И ЭТО есть в XDM!

Омг, зачем ЭТО там?
Цитата:
~ X ~ писал:
Кто делает закрытые моды - пусть сам жрёт говно.

Не-не, он выпустит мод и забудет. А говно будут жрать игроки. И чем более классный мод получится - тем больше говна им предстоит сожрать.
Вспомните закрытый опфор с его вировками, которые всем почти 15 лет мозги выносили. Люди вынуждены были привязывать свой мод к opfor.dll из-за этих сцаных вировок!

Добавлено 03-02-2015 в 15:37:

Цитата:
Ku2zoff писал:
Буду перепиливать по-своему, либо откачу до состояния HPB_bot и заведу персоналии, как в кондишн зеро.

Сделай персоналии как в волатиле.
Там каждому боту сопоставлен ник КСМ-юзера.
Среди них даже karsar есть, который давно умер.

__________________

xaerox on Vivino


Отправлено ~ X ~ 03-02-2015 в 10:28:

Цитата:
XaeroX писал:
Люди вынуждены были привязывать свой мод к opfor.dll из-за этих сцаных вировок!

"Oh yeah, they'll pay. The will DEFINITELY PAY."
эти верёвки забудутся ещё нескоро.

Цитата:
XaeroX писал:
Омг, зачем ЭТО там?

Например, чтобы боты нормально получали из XDM.dll Relationship, определали, что за энтитя перед ними (пикап, монстр, опасность и пр.). Используя эти функции я избавился от переборов 9000 строк, как это было в оригинале.

Цитата:
XaeroX писал:
Сделай персоналии как в волатиле.

Рассказывай, как это и что это.
Я хотел сделать как в УТ1.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 03-02-2015 в 10:30:

Цитата:
~ X ~ писал:
Рассказывай, как это и что это.

Не умею я рассказывать. Я просто беру и делаю, а любопытствующие - ковыряют результат.

Добавлено 03-02-2015 в 16:30:

Цитата:
~ X ~ писал:
эти верёвки забудутся ещё нескоро.

Зачем их забывать? Они в старой волатиле уже были сделаны. И в новой будут, конечно же.

__________________

xaerox on Vivino


Отправлено SteamPlay43 03-02-2015 в 12:46:

XaeroX А накодить их кроме тебя нормально никто не может, вот и не забудут никак)


Отправлено XaeroX 03-02-2015 в 13:03:

SteamPlay43
Вот и правильно. Будет лишний аргумент перейти на волатилу.

__________________

xaerox on Vivino


Отправлено SteamPlay43 03-02-2015 в 15:28:

XaeroX Если ещё исходники откроешь и будет рабочий мультиплеер то перейду, если конечно ДМ не доделает mp в Xash'е)


Отправлено XaeroX 03-02-2015 в 16:03:

SteamPlay43
А если доделает - тогда что?

__________________

xaerox on Vivino


Отправлено SteamPlay43 03-02-2015 в 17:19:

XaeroX Переведу мой мод на Xash, т.к. мой мод mp


Отправлено XaeroX 03-02-2015 в 17:36:

SteamPlay43
Я так скажу. Если у человека возникает вопрос, какой движок ему выбрать, волатилу или ксаш, то ему однозначно нужен ксаш. И никакими вировками прельщаться не надо, тем более дядя миша и сам их сделает, если хорошо попросишь и зашлёшь донат.
Впрочем, свернём-ка оффтоп, пока злые модераторы нас не заплюсовали.

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 21:38.
Показать все 33 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024