Русское сообщество по скриптингу

Создание конфигов на клиенте

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

Создание конфигов на клиенте

Сообщение DJ_WEST » 01 мар 2010, 17:54

Автор: DJ_WEST

Данный баг исправлен, поэтому на Steam и последних версиях No-Steam может не работать, если вы получаете ошибку "Unable to open".

В данной статье речь пойдет о создании конфигов на клиенте игры Counter-Strike 1.6 и собственно их запуск. Для реализации замысла нам нужны Вы должны зарегистрироваться, чтобы видеть ссылки. (если вы еще не ознакомились с этой статьей, то рекомендуется это сделать). Все ограничения и нюансы по motd_write не стоит забывать и здесь. Конфиги в CS 1.6 представляются собой файлы с расширением .cfg, которые содержат набор команд или инструкций, понятных движку игры. А самое главное, что конфиги можно запускать в игре через команду exec имя_конфига.cfg. Расширение .cfg попадает в раздел запрещенных для motd_write, поэтому изменить уже существующий конфиг или создать новый мы не сможем. Здесь уже у многих возникает вопрос, а как же создать конфиг? Не многие знают, что в GoldSrc конфигом также является файл с расширением .rc, он ничем не уступает .cfg, также работает для запуска через команду exec. Пытаемся создать файл, к примеру, test.rc через motd_write и снова видем знакомую нам ошибку:
Invalid motdfile name (test.rc)

Что говорит нам о том, что данное расширение, также как и .cfg запрещено для использования в motd_write.
Большинство расширений в Windows состоят из 3-ех символов, к примеру: .mdl, .wad, .dll, .bmp, .exe, .spr и другие, но .rc состоит из двух символов, поэтому попробуем выполнить следующее:
Код: Выделить всё

motdfile "test.rc "
motd_write TEST

Как можно заметить в motdfile мы указали файл с пробелом в расширении на конце (файл нужно обязательно заключить в кавычки). А затем выполнили motd_write, на что в ответ получили сообщение Done, которое свидетельствует об успешном выполнении команды. Отсюда следует, что используя пробел в расширении файла, мы как бы говорим движку о том, что оно из 3-ех символов, которого нет в списке запрещенных. Но Windows не воспринимает данный пробел в расширении и просто его убирает, делая его просто .rc. Дальше не составляет труда выполнить конфиг через команду exec test.rc в игре.
На пути наполнения конфига содержимым есть свои минусы:
1. Ограничение размера файла через motd_write в 1012 байт.
2. Движок игры при выполнении конфига воспринимает новую команду, только если после нее стоят символы CRLF, а при использовании motd_write нам известно, что LF символ мы можем поставить только в конце или запись после данного знака просто отрубится. Поэтому полноценно сделать запись в конфиг не получится. Следовательно, в конфиг можно записать только одну команду.
3. Движок игры также воспринимает новую команду после знака ;. Но это нам тоже не поможет, потому что при использовании знака ; в motd_write, движок игры думает, что после этого знака идет новая команда и отрубает дальнейщую запись, выполняя следующую команду. Даже заключив текст motd_write в кавычки, мы обманем движок, разрешая запись со знаком ; в файл, но в конфиг также запишутся сами кавычки, что нарушит выполнение конфига.

В конфиг можно записать выполнении несколько команд с использованием возможностей alias, к примеру, создадим файл test.rc на сервере в директории ../cstrike/addons/amxmodx/configs/rc/ со следующим содержимым:
Код: Выделить всё

alias test "cl_pitchspeed 225;cl_gaitestimation 1;cl_lc 1;cl_lw 1;cl_movespeedkey 0.52;cl_nosmooth 0;cl_pitchdown 89;cl_pitchup 89;cl_smoothtime 0.1;cl_yawspeed 210;cl_timeout 35;cl_showevents 0;cl_forwardspeed 400;cl_sidespeed 400;cl_backspeed 400"

У alias тоже есть свои минусы. Длина команды не должна превышать 256 символов.
Пример плагина для записи конфига:
[pawn]/*
    Created by DJ_WEST
    
    Web: http://amx-x.ru
    Русское сообщество по AMX Mod X и SourceMod
    
    Присоединяйтесь к нам. Здесь рождаются новые идеи.
*/

#include <amxmodx>

#define PLUGIN "Config Writer"
#define VERSION "1.0"
#define AUTHOR "DJ_WEST"

#define MAX_SIZE 1012
#define RC_FILE "test.rc"

new g_Text[MAX_SIZE]

public plugin_init() 
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    set_task(0.1, "Read_RC_Code")
}

public client_putinserver(id)
{
    
    if 
(is_user_hltv(id) || is_user_bot(id))
        return PLUGIN_HANDLED
            
    set_task
(5.0, "Create_Config", id)
    
    return PLUGIN_HANDLED
}

public Read_RC_Code()
{
    new i_File, s_File[128]

    get_configsdir(s_File, charsmax(s_File))
    format(s_File, charsmax(s_File), "%s/rc/%s", s_File, RC_FILE)
    i_File = fopen(s_File, "r")
    fgets(i_File, g_Text, MAX_SIZE)
    fclose(i_File)
}

public Create_Config(id)
{
    client_cmd(id, "motdfile ^"%^"", RC_FILE)
    client_cmd(id, "motd_write %s", g_Text)
    client_cmd(id, "motdfile motd.txt")
}
 
stock get_configsdir
(s_Name[], i_Len)
    return get_localinfo("amxx_configsdir", s_Name, i_Len) [/pawn]
Теперь после захода игрока на сервер через 5 секунд у него появится конфиг с именем test.rc в директории cstrike. Выполнение данного конфига на клиенте через exec приведет к появлению новой alias команды - test. Использовав test в консоли игрока, выполняются все команды, прописанные в данном alias'e.

Примечание:
В директории valve есть также конфиг с именем valve.rc, который выполняется при запуске игры автоматически. В директории cstrike данного конфига обычно нет и он считывается из valve. Но если мы создадим его, к примеру, через motd_write с содержимым, которым нужно, то он будет выполняться каждый раз при запуске Counter-Strike.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Создание конфигов на клиенте

Сообщение Hooker » 19 авг 2012, 20:31

noo00oob писал(а):Действительно, к чему эти вопросы? Тебе кто-то рот затыкает тапочком?

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

noo00oob писал(а):Бедненький, обиделся. А может дело не в коллективе а в тебе?

Я не обиделся, я - расстроился. Всего лишь задал вопрос по теме. Нет, извини, дело в тебе, который решил повыпендриваться. Мы можем долго продолжать обмениваться дерьмом, но лучше просто перестать.
Аватара пользователя
Hooker
 
Сообщения: 12
Зарегистрирован: 19 авг 2012, 19:25
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Half-Life 1

Re: Создание конфигов на клиенте

Сообщение hmn3r^Ist » 19 авг 2012, 20:34

Hooker писал(а):
noo00oob писал(а):Та ты пришел сюда с одной целью, узнать что делают эти свиньи и поставить себе на сервер?

"Та" в русском языке нет. Хорошо, допустим, я пришёл сюда для этого. Тогда ответь на вопрос: для чего и для кого здесь эта статья? Почему я не могу задать вопрос по теме, если эта тема здесь создана админом?

P.S. Меня очень "радует" ваш коллектив. Я не поленился и прочёл правила форума, создалось впечатление, что ресурс серьёзный. Первое настоящее знакомство развеяло все иллюзии;)

Задать вопрос ты можешь, Вы должны зарегистрироваться, чтобы видеть ссылки.
Аватара пользователя
hmn3r^Ist
 
Сообщения: 900
Зарегистрирован: 19 апр 2012, 16:24
Откуда: Petersburg
Благодарил (а): 82 раз.
Поблагодарили: 158 раз.

Re: Создание конфигов на клиенте

Сообщение noo00oob » 19 авг 2012, 20:35

Hooker писал(а):Я не обиделся, я - расстроился. Всего лишь задал вопрос по теме. Нет, извини, дело в тебе, который решил повыпендриваться. Мы можем долго продолжать обмениваться дерьмом, но лучше просто перестать.

Я решил повыпендриваться? Это кажется ты, заместо того чтоб задать короткий и простой вопрос "как изменить cfg фаил игроку" написал кучу какой-то ерунды, ещё и сервер прорекламировал.
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob
 
Сообщения: 1061
Зарегистрирован: 09 янв 2010, 21:52
Благодарил (а): 258 раз.
Поблагодарили: 394 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: Создание конфигов на клиенте

Сообщение Hooker » 19 авг 2012, 20:43

hmn3r^Ist писал(а):Задать вопрос ты можешь, Вы должны зарегистрироваться, чтобы видеть ссылки.

С этим я согласен. Но бросаться на меня за подобный вопрос в этой теме не стоит. Это тема о слоухакинге. Откройте глаза и прочтите заголовок статьи, саму статью и первые нормальные комменты. Я тут негодяй-хакер после этого, да? А зачем админ начал эту тему?

noo00oob писал(а):Я решил повыпендриваться? Это кажется ты, заместо того чтоб задать короткий и простой вопрос "как изменить cfg фаил игроку" написал кучу какой-то ерунды, ещё и сервер прорекламировал

1. Я не писал кучу ерунды.
2. Я не рекламировал сервер. Если бы сервер был мой, зачем мне его рекламировать здесь? Он и так самый популярный.. :-D А вот если бы я написал, что такое возможно, но остался голословным, вы бы ответили "такое невозможно, это везде пофикшено, гуляй, вася". Поэтому был вынужден привести единственный существующий пример.
Аватара пользователя
Hooker
 
Сообщения: 12
Зарегистрирован: 19 авг 2012, 19:25
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Half-Life 1

Re: Создание конфигов на клиенте

Сообщение hmn3r^Ist » 19 авг 2012, 20:49

Hooker писал(а):
hmn3r^Ist писал(а):Задать вопрос ты можешь, Вы должны зарегистрироваться, чтобы видеть ссылки.

С этим я согласен. Но бросаться на меня за подобный вопрос в этой теме не стоит. Это тема о слоухакинге. Откройте глаза и прочтите заголовок статьи, саму статью и первые нормальные комменты. Это я тут негодяй-хакер после этого, да? А зачем админ начал эту тему?

noo00oob писал(а):Я решил повыпендриваться? Это кажется ты, заместо того чтоб задать короткий и простой вопрос "как изменить cfg фаил игроку" написал кучу какой-то ерунды, ещё и сервер прорекламировал

1. Я не писал кучу ерунды.
2. Я не рекламировал сервер. Если бы сервер был мой, зачем мне его рекламировать здесь? Он и так самый популярный.. :-D А вот если бы я написал, что такое возможно, но остался голословным, вы бы ответили "такое невозможно, это везде пофикшено, гуляй, вася". Поэтому был вынужден привести единственный существующий пример.

В этой теме обсуждается загрузка конфига на клиент, тем более теме 2 года. Способом который сейчас используют, можно залить все что угодно, и подменить autoexec например, что равносилно порче клиента. Теперь ты понимаешь что твой вопрос тут не кстати, и ответа тут на него тебе не дадут?
Аватара пользователя
hmn3r^Ist
 
Сообщения: 900
Зарегистрирован: 19 апр 2012, 16:24
Откуда: Petersburg
Благодарил (а): 82 раз.
Поблагодарили: 158 раз.

Re: Создание конфигов на клиенте

Сообщение noo00oob » 19 авг 2012, 20:52

Hooker писал(а):Если бы сервер был мой, зачем мне его рекламировать здесь? Он и так самый популярный.. :-D

Опять выпендриваешься?
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob
 
Сообщения: 1061
Зарегистрирован: 09 янв 2010, 21:52
Благодарил (а): 258 раз.
Поблагодарили: 394 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: Создание конфигов на клиенте

Сообщение Hooker » 19 авг 2012, 21:03

hmn3r^Ist писал(а):что равносилно порче клиента. Теперь ты понимаешь что твой вопрос тут не кстати, и ответа тут на него тебе не дадут?

В статье рассказано:
1. Как легко и быстро запилить клиенту коннект к своему серверу.
2. Как создать (пусть и некрасивым путём) конфиг и выполнить его на клиенте. А какие-такие конфиги нужно передавать клиенту? Какие-такие комманды нужно выполнять конфигом? Это для чего здесь? Для того, чтобы сделать игру на сервере лучше? Реализовать интересную идею для плагина таким образом? Это какую, например? Может, сделать клиенту хорошо? Настройки прописать удобные? Или может, для того, чтобы попортить к чертям клиент? Мне последний вариант представляется похожим на правду, не вижу других объяснений.
Теперь я не понимаю почему мой вопрос здесь неуместен. Точно так же, воспользовавшись информацией этой темы, можно запороть модели и всё остальное, разве не очевидно?

noo00oob писал(а):Опять выпендриваешься?

Нет, нормальным человеческим языком тебе объяснил, почему я вынужден был привести конкретный пример.
Аватара пользователя
Hooker
 
Сообщения: 12
Зарегистрирован: 19 авг 2012, 19:25
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Half-Life 1

Re: Создание конфигов на клиенте

Сообщение hmn3r^Ist » 19 авг 2012, 21:10

Hooker писал(а): Мне последний вариант представляется похожим на правду, не вижу других объяснений.
Теперь я не понимаю почему мой вопрос здесь неуместен. Точно так же, воспользовавшись информацией этой темы, можно запороть модели и всё остальное, разве не очевидно?

То есть ты прямо говоришь что хочешь испортить клиент игроку? Если DJ_WEST тебе вдруг ответит то это его дело, но я в этом сомневаюсь
Аватара пользователя
hmn3r^Ist
 
Сообщения: 900
Зарегистрирован: 19 апр 2012, 16:24
Откуда: Petersburg
Благодарил (а): 82 раз.
Поблагодарили: 158 раз.

Re: Создание конфигов на клиенте

Сообщение noo00oob » 19 авг 2012, 21:12

Hooker писал(а):Теперь я не понимаю почему мой вопрос здесь неуместен.

Может быть потому что совесть ни кто не отменял? Ну с какой радости мы должны давать ответ, от которого будут страдать другие?
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob
 
Сообщения: 1061
Зарегистрирован: 09 янв 2010, 21:52
Благодарил (а): 258 раз.
Поблагодарили: 394 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: Создание конфигов на клиенте

Сообщение Hooker » 19 авг 2012, 21:16

hmn3r^Ist писал(а):
Hooker писал(а): Мне последний вариант представляется похожим на правду, не вижу других объяснений.
Теперь я не понимаю почему мой вопрос здесь неуместен. Точно так же, воспользовавшись информацией этой темы, можно запороть модели и всё остальное, разве не очевидно?

То есть ты прямо говоришь что хочешь испортить клиент игроку? Если DJ_WEST тебе вдруг ответит то это его дело, но я в этом сомневаюсь

Я и без статьи знал как попортить клиент. Вопрос вовсе не в этом. Своими риторическими вопросами я пытался тебе доказать, что эта статья такая же "опасная". Мой вопрос её достоен.

noo00oob писал(а):Может быть потому что совесть ни кто не отменял? Ну с какой радости мы должны давать ответ, от которого будут страдать другие?

Абсолютно с той же радости, с которой здесь эта статья появилась. Абсолютно! Боже, люди, как вы этого не видите? Тема об этом. Хотите - называйте её "о страданиях других", но вы её создали и рассказали как заставить страдать, а виноватым сделали меня. Предельно глупо.
Аватара пользователя
Hooker
 
Сообщения: 12
Зарегистрирован: 19 авг 2012, 19:25
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Half-Life 1

Пред.След.

Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8