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

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

Статьи или фрагменты кода для новичков и уже опытных скриптеров по 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: Создание конфигов на клиенте

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

Hooker писал(а):Предельно глупо.

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

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

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

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

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

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

Hooker писал(а):сделали из меня негодяя

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

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

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

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

Ты был бы рад если бы тебя послали на ***? Вот уж не думаю, поэтому я тебе в первых постах и намекнул что ответ тебе вряд ли дадут, а вообще существует поиск, по моему ответ на твой вопрос уже был

[spoiler]http://translate.google.ru/#en/ru/Hooker
ого. не знал :)
рыболовное судно :-D[/spoiler]
Аватара пользователя
hmn3r^Ist
 
Сообщения: 900
Зарегистрирован: 19 апр 2012, 16:24
Откуда: Petersburg
Благодарил (а): 82 раз.
Поблагодарили: 158 раз.

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

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

hmn3r^Ist писал(а):Ты был бы рад если бы тебя послали на ***?

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

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

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

hmn3r^Ist писал(а):Ты был бы рад если бы тебя послали на ***?

Результат был бы аналогичен. Зато было бы честно. И без траты общего времени. Никто не доказывал бы мне, почему я такой плохой. :) А так - придрались не понятно к чему. Вроде, внятно объяснил почему вопрос вполне уместен и не стоит меня настолько ненавидеть.

hmn3r^Ist писал(а):существует поиск, по моему ответ на твой вопрос уже был

Искал - не получилось. Всегда предварительно ищу. Так, собственно, и на сей форум попал.

noo00oob писал(а):даже ник себе подходящий выбрал

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

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

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

Hooker писал(а):Приятно удивлён, что ты имеешь представление об английском. Я 7 лет в Канаде жил, ник сейчас выбрал не просто так. Есть и другой сакральный смысл в нём :-D Но это - отдельная история.

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

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

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

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

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

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

Hooker писал(а):Я уже предпринимал несколько попыток закончить. Если в этот раз ты согласен, то пусть этот пост будет последним флудовым. Аминь.

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

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

Сообщение Fedcomp » 19 авг 2012, 23:36

Не обращай внимания, нуб любит пофлудить бестолку.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 815 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Пред.След.

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

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

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