Суббота, 23.11.2024, 15:29

Самая подробная информация утепление стен эковатой на сайте.
logo

Пользовательский поиск

Меню сайта
Категории раздела
Разное [15]
Tutorials
Создание карт [13]
Создание моделей [2]
Кодинг [14]
Создание карт CS [197]
Учебник cs-mapper
Свойства entity HL-CS [117]
Форма входа
Наш сервер CS 1.6
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 167
Друзья сайта


Главная » Статьи » HL Development » Кодинг


Рипперам Спирита посвящается...

Рипперам Спирита посвящается...

Наверное многие хотят себя попробовать не только в области маппинга, но и в программинге, устав, от бесконечных ограничений обычного ХЛ. И тут на помощь мапперам приходит спирит, в котором возможно многое, по прежнему не затрагивая кодинг. Однако спирит обладает кучей нехороших багов, которые боюсь пофиксить будет не так просто. ЧТо же делать в случае, если из всего громадного кода спирита нужен всего лишь env_rain, а так хочется, чтобы и вагончики тоже работали нормально - ответ прост, нужно перетащить код дождя в свой мод, зачастую именно с этого и начинают свой путь будущие кодеры. причем именно со спирита, так как исходники других модов недоступны. Многие пытаються сделать что-то по туторам, однако в туторе более или менее подробно расписано, как написать код для той или иной штуки, тогда как с исходниками спирита новичок остается "один на один", к тому же спирит - система глобальная и перетащить все что угодной, обойдясь "малой кровью" получиться далеко не у каждого. Рассмотреть основные трудности, которые возникают у новичков при рипании спирита и призван этот тутор.

Первые трудности.

Для работы на понадобяться СДК спирта (любой, который вам нужен) и СДК хл - можно взять версию 2.2 или 2.3, но я ркомендую версию 2.1 как наиболее быструю и безглючную. Ну как вы понимаете, чтобы зарипать энтитю нужно для начала найти ее вывод в энтитю , а именно строчку LNIK_ENTITY_TO_CLASS в которой будет написано и название энтити. После этого смело выделяйте все функции, которые относяться к данной энтити (у них будет одинаковое название, ну например у func_tank будут названия всех воидов и булей начинаться с void CFuncTank :: или BOOL CFuncTank :: ) и копируйте их в свой код, примерно на то же место, кде они находяться в спирите, если же они находяться в новом файле - создайте аналогичный файл у себя и добавьте его в проект. После чего запускайте компиляцию и смотрите на ошибки, которые выдаст вам компилятор.

Ошибки.

Первая и наиболее распространенная ошибка имеет следующий вид:

SetNextThink undeclare identifier.

Не пытайтесь перетащить эту функцию в свой код, ибо это - глобальная утилита мовевитч (в смысле система мовевитч ее активно юзает), и вам она абсолютно не нужна (ну разумеется если вы не хотите перетащить мовевитч в свой код ). Рассмотрим как же пофиксить эту ошибку. Строка, нак которую поргуался компилятор будет иметь примерно следующий вид:

SetNextThink (0.5);

Разумеется число там может быть любым другим. Фиксить это мы будем следующим способом. Замените данную строку на:

pev->nextthink = gpGlobals->time + 0.5;

разумеется число нужно подставлять то, которое вы увидели в скобках. Иногда данная строка имеет немного другой вид:

SetNextThink (0.5, FALSE);

В этом случае нужно будет заменить ее немного другой строкой, а именно :

pev->nextthink = pev->ltime + 0.5;
Значение 0.5 в обоих случаях дано просто для примера, вам могут встретиться любые значения, даже какая-либо переменная, в любом случае мы дописываем ее так, как показано на примере. Пойдем дальше. Вторая распространенная ошибка, это -

DontThink undeclare identifier.

Эту ошибку пофиксить еще проще, просто замените строку

DontThink();

на

pev->nextthink = 0;

третья, часто встречающаяся ошибка - ругань компилятора на стринг at_debug, просто замените все слова at_debug на at_console, это можно сделать и в автоматическом режиме - т.е. автозаменой.

Иногда компилятор ругается на неизвестную функцию DesiredAction - это так же утитлита мовевитч, которой нету в ХЛ, поэтому просто переименуйте DesiredAction в Think (а если функция Think уже есть - перенесите туда все из DesiredAction). Глобальной функции Activate в Хл также нету - зачастую данную функцию можно просто удалить, но внимательно следите, что в этой функции находиться, если эта функция имеет вид, типа:

void CParticle::Activate( void )
{
CPointEntity::Activate();
UTIL_DesiredAction(this);
}

смело грохайте ее, а вот если у функции такой вид:

void CEnvSky :: Activate ( void )
{
pev->effects |= EF_NODRAW;
pev->nextthink = gpGlobals->time + 1.0;
}

то переименуйте Activate в Spawn (не забудьте также продекларировать ее). Кстати не стоит радоваться, что функции типа env_fog или env_sky такие простые - на самом деле большая часть кода находиться в клиенте, куда вам, если вы начинающий кодер я лезть не советую, поскольку в клиенте запутаться еще проще, нежли в сервере. если компилятор ругается на какой-то локус - смело комментируйте (или выбрасывайте совсем из кода) данные строки - они вам также не понадобяться, если конечно вы не хотите перетащить локус к себе, а сделать это будет не так-то просто, поскольку локус - система глобальная. Если энтити брашевые, то в них частенько встречаються подобные условия

if (m_pMoveWith)
{
m_yawCenter = pev->angles.y - m_pMoveWith->pev->angles.y;
m_pitchCenter = pev->angles.x - m_pMoveWith->pev->angles.x;
}
else
{
m_yawCenter = pev->angles.y;
m_pitchCenter = pev->angles.x;
}

в таком случае нужно поступить следующим образом, обрезав почти все, и оставив только это

m_yawCenter = pev->angles.y;
m_pitchCenter = pev->angles.x;

Так же часто компилятор ругается на UTIL_SetOrigin, в которой он не может конвертировать инт в пев или что-то типа того. При этом данная строка имеет примерно такой вид.

UTIL_SetOrigin( this, pev->origin );

заменяется она на

UTIL_SetOrigin( pev, pev->origin );

Вам может встреиться случай и посложнее, например

UTIL_SetOrigin( m_pSpot, tr.vecEndPos );

В данном случае заменять m_pSpot на pev нельзя ни в коем случае, нужно просто указать, что m_pSpot входит в пев. см пример:

UTIL_SetOrigin( m_pSpot->pev, tr.vecEndPos );

Кстати строки, подобные

UTIL_SetAvelocity(this, g_vecZero);
UTIL_FlushAliases();

можете смело удалять - они вам не понадобяться. Данных советов должно хватить, чтобы перетащить из спирта несложные энтити, типа env_decal, env_shokwave, env_model и прочих несложных энтитей, а для новичка большего и не нужно. Потом, когда вы поднаберетесь опыта, вы сможете перетащить любую энтитю, будь то мовевитч или локус .


Подсказки и полезные советы от человека, который перетащил мовевитч в обычный ХЛ :)г .

Передполагается, что вы уже имеете достаточно опыта, чтобы перенести тот же мовевитч, но иногда попадаються такие ошибки, что хоть стой хоть падай, а толку = 0. Вот про такие вещи я дам вам несколько советов.

1.Если вы перетащили мовевитч, а приаттаченные энтити не обновляються во время движения - вы упустили важную функцию в player.cpp (там по моему всего три строки, но тем не менее).

2. Так же при подрубании мовевитч обычный use перестает работать в player.cpp найдите функцию use и посмотрите, чего дописал туда Лаури .

3. Отражения моделей находяться в файле studiomodelrenderer.cpp (ключевое слово поиска - reflection) так же кам придется прописать в const.h новый тип render fx.

4. управление любой целью с помощью префиксов + и - находяться в файле subs.cpp (ключевое слово поиска - '+')

5. консольная команда fire находиться в client.cpp (я думаю не нужно объяснять по какому слову искать код ).


Заключение

Надеюсь, что вышеприведенный тутор поможет начинающим кодерам, в освоении таскания энтитей, ибо кодинг в ХЛ на 40% заключается именно в этом :D. Если возникнут какие-то вопросы, или у вас случиться ошибка, которую я не включил в свой тутор - пишите, и я подробно разберу, как от нее избавиться.

Спасибо за внимание

g-cont 
Категория: Кодинг | Добавил: SuperStart (18.10.2010)
Просмотров: 2537 | Рейтинг: 0.0/0 |



Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Copyright www.akksimo.net © 2024