Original tutorial: Alex_Gordon Source code: Spirit of Half-Life Итак, представьте ситуацию: вы делаете мод под GoldSRC. В вашем моде куча наворотов, типа шейдеров, детальных текстур, свечения, моушн блура и т.д. Но в моде есть одна темная карта, на которой эти все эффекты - бесполезны, и лишь только жрут память. Как их отключить? Выводить мессагу типа "Юзер, введи в консоли то-то и то-то!"? Но некоторые юзеры настолько н00бы, что не знают, что такое консоль. Оставлять эти эффекты на этой карте = задаром понизить работоспособность. Или может бросить мод и пойти почитать Шекспира? Хм, вариант хороший, но мод - тоже хорошая вещь. Итак, нам на помощь приходит система MapConfig от SoHL. Устроена она так: в папке мода создается папка mapconfig, и в ней создаются cfg файлы соответствующие названиям карт. При переходе с предыдущей карты на указанную cfg выполняется, и все комманды, записанные в нем, выполняются. Такая система была не только в SoHL, но и в HLFX. Теперь как это реализовать. На сервере откройте файл client.cpp и спуститесь до функции void ParmsChangeLevel( void ). Она отвечает за то, что происходит, когда пользователь проходит через trigger_changelevel. В SoHL есть следующий код: Code if(!(pEntity->v.flags & FL_FAKECLIENT)) // Check that client isn't a bot, for future using { // load mapname.cfg char szCommand[128]; sprintf(szCommand, "exec mapconfig/%s.cfg\n", STRING(gpGlobals->mapname)); CLIENT_COMMAND(pEntity, szCommand); } Но во-первых, он стоит в функции ClientConnect, а она нам не подходит. А во-вторых, если его пихнуть в функцию void ParmsChangeLevel( void ) без изменений, компилятор выдаст ошибку. Итак, преобразуем его до следующего вида: Code // load mapname.cfg char szCommand[128]; sprintf(szCommand, "exec mapconfig/%s.cfg\n", STRING(gpGlobals->mapname)); SERVER_COMMAND(szCommand); И вставляем в void ParmsChangeLevel( void ). Компилируем, создаем конфиги, и радуемся!
|