HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 16 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Исправление SetThink и его друзей под новые компиляторы (https://hlfx.ru/forum/showthread.php?threadid=4820)


Отправлено mittorn 26-07-2016 в 07:38:

Исправление SetThink и его друзей под новые компиляторы

Не хочется просидеть несколько дней, исправляя использования макросов SetThink, SetUse и т.д вручную.

Для GCC я нашёл относительно работоспособное решение:

code:
f="effects.h *.cpp" for m in SetThink SetTouch SetUse SetBlocked SetMoveDone; do m2=`echo $m|sed -e s/Set/Reset/` sed -e s/$m[[:space:]]\*\([[:space:]]\*/$m\(/g -e s/$m\([[:space:]]\*\\\&/$m\(/g -e s/$m\([[:space:]]\*NULL[[:space:]]\)/$m2\(\)/g -e s/$m\([[:space:]]*/$m\(\ \\\&/g -e s/$m2\(\)/$m\(\ NULL\ \)/g -i $f done

Это добавит & ко всем ненулевым SetThink, после чего gcc 3+ может его скомпилировать с параметром -fpermissive

Но это ломает совместимось с MSVC6 и с более новыми VS оно не начинает собираться, как и с Clang

Думаю, многих напрягала эта ситуация. Делал кто-нибудь готовые утилиты, приписывающие имя класса в этих макросах?


Отправлено Government-Man 26-07-2016 в 11:17:

http://www.moddb.com/games/half-lif...ual-studio-2008

Цитата:
mittorn писал:
просидеть несколько дней


Там работы на полчаса максимум.


Отправлено mittorn 26-07-2016 в 12:28:

Я как-то начал, через 3 часа надоело.
Толку мне от исправленного hlsdk? мне моды исправлять по быстрому.


Отправлено XaeroX 26-07-2016 в 13:01:

mittorn
Моды пусть их авторы исправляют - разве не логично?
В конце концов, кому нужно, чтобы в их моды играли - им или тебе?

__________________

xaerox on Vivino


Отправлено mittorn 26-07-2016 в 13:03:

Цитата:
XaeroX писал:
mittorn
Моды пусть их авторы исправляют - разве не логично?
В конце концов, кому нужно, чтобы в их моды играли - им или тебе?

Я сомневаюсь, что Дядя Миша согласится исправлять XashXT под новые компиляторы.


Отправлено FiEctro 26-07-2016 в 14:24:

Цитата:
XaeroX писал:
mittorn
Моды пусть их авторы исправляют - разве не логично?
В конце концов, кому нужно, чтобы в их моды играли - им или тебе?


Да уж, сидеть ждать всех остальных это очень хорошая политика.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 26-07-2016 в 16:21:

FiEctro
Зачем сидеть ждать? Продолжать заниматься своими делами.

__________________

xaerox on Vivino


Отправлено ~ X ~ 28-07-2016 в 07:45:

Таки автомат за тебя не решит, какого класса ф-ю тебе надо запускать. Случается, что функции перегружены. Я даже как-то баг нашёл, что запускается не CBaseEntity::MyThink(), а CMyEntityParent::MyThink(). Много часов я в своё время промучился. Даже пытался макрами это дело исправить. Но универсального способа для всек компиляторов не нашлось.

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


Отправлено XaeroX 28-07-2016 в 08:20:

Цитата:
~ X ~ писал:
Я даже как-то баг нашёл, что запускается не CBaseEntity::MyThink(), а CMyEntityParent::MyThink().

А можно поподробнее об этом баге?
Впервые слышу, чтобы выбиралась функция родителя при наличии переопределённой функции в потомке. Разве что сигнатуру по ошибке другой сделал?

__________________

xaerox on Vivino


Отправлено ~ X ~ 28-07-2016 в 08:40:

XaeroX это не баг, это такое место, в котором легко допустить и не заметить ошибку.
Например, возможны вот такие варианты:
SetThink(&CBaseEntity::SUB_UseTargets);
SetThink(&CBaseDelay::SUB_UseTargets);
SetThink(&CBasePlat::SUB_UseTargets);
А раньше это выглядело как
SetThink(SUB_UseTargets);
SetThink(SUB_UseTargets);
SetThink(SUB_UseTargets);
И при портирвоании надо включать голову: что где вызывается и правильно ли.

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


Отправлено XaeroX 28-07-2016 в 08:58:

~ X ~
Гм, ну обычно если мы хотим юзать функцию базового класса, мы не переопределяем её в потомке.

__________________

xaerox on Vivino


Отправлено ~ X ~ 28-07-2016 в 09:04:

XaeroX тут появляется ещё одна кака: если я переопределяю virtual void EXPORT SUB_UseTargets(); в классе CFuncTrackTrain, в коде которого встречается SetThink(&CBaseDelay::SUB_UseTargets);, надо будет руками пройтись по всему коду и проверить чтобы вызывался оверлоуд, а не базовая версия. По этой причине новый "explicit" вариант мне не нравится.

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


Отправлено XaeroX 28-07-2016 в 09:56:

~ X ~
А это признак плохой архитектуры, если тебе надо вызывать частично код из функции родителя. В таких случаях его выносят в новую функцию и вызывают её.

__________________

xaerox on Vivino


Отправлено ~ X ~ 28-07-2016 в 10:12:

XaeroX ты нипрафф: мне надо, например запретить вызов CBaseEntity::SUB_UseTargets у всех потомков CBasePlat потому что у них используются другие поля для тагретов, а поле "таргет" - для указания следующего участка пути (пример). И это категорически важно, иначе у меня поезда сквозь гаргов летают по всей карте.

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


Отправлено Дядя Миша 29-07-2016 в 19:56:

Цитата:
~ X ~ писал:
И это категорически важно, иначе у меня поезда сквозь гаргов летают по всей карте.

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 00:24. Страницы (2): [1] 2 »
Показать все 16 сообщений этой темы на одной странице

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