Добро пожаловать. Добро пожаловать на Lambda-Force.
Сами вы его выбрали, или его выбрали за вас - это один из лучших сайтов о вселенной Half-life .
Я горжусь тем, что называю Lambda-Force своим домом. Итак, собираетесь ли вы остаться здесь, или же вас ждут неизвестные дали,
добро пожаловать на Lambda-Force.org.
Вы никогда не хотели сделать плагин amxx? (Конечно нет! xD) Ну вот не большой туториал. Вы научитесь как использовать арраи, систему nvault, и еще немного чему) И так начнем.
Создадим не большой плаг который будет знать кол-во Фрагов игрока и будет их устанавливать при подключении игрока (Прикиньте только что зашел на серв, а уже 1406 фрагов xD) Нам потребуется Блокнот (Akelpad или AMXX Studio лутше) и не много терпения. Идем в папку amxmodx\scripting создаем там файл myplug.sma (ну или обзовете как угодно, но только что-бы расширение файла было sma Открываем его и начинаем кодить. В первую очередь нам нужно подключить библиотеки amxmodx: amxmodx - Это основная библиотека. nvault - Система хранения данных, нам нужно для того чтобы сохранять фраги (Есть еще систма fvault, то же самое но потребуется скачать библиотеку) fun - Разные "смешные" функции (к примеру свечение игрока или установка фрагов и т.п.)
Теперь регистрируем наш плагин: public plugin_init(){ register_plugin("Stats","1.0","Dr.Freeman") }
Функция plugin_init обрабатывается при самом старте сервера, register_plugin это регистрация плагина в AMXModX (можно и без нее все равно работает но плаг не будет виден в amxx plugins) register_plugin("<название плагина>","<версия>","<автор>")
Делаем так чтоб когда игрок покидает сервер то его фраги сохраняются, для начало я расскажу об арраях (штуки в которых временно хранятся данные), аррай состоит из <название аррая>[<индекс>] Индекс ну или проще говоря это ячейка в которой хранится данные. Ячейки могут хранить Одну букву(%s) или Много цифр (%d) Если аррай текстовый то индекс означает сколько букв будет хранить аррай (exp. new data[20]) И когда вы кодите то начальный индекс у аррая всегда 0 Аррай регистрируется c помощью new <аррай>
Для начало делаем Базу Данных nVault, для этого мы создаем обычный аррай без индекса new vault , и заполняем его для этого в функции plugin_init пишем vault = nvault_open("myvault") - myvault это название БД Получилось вот так: new vault
public plugin_init(){ register_plugin("Stats","1.0","Dr.Freeman") vault = nvault_open("myvault") }
Создадим аррай который хранит фраги, для этого пишем: new frags[32+1] 32+1 для того чтобы ограничить индексы, ну вы же не хотите чтоб турель на crossfire тоже зарабатывала фраги? xD
Теперь сохраняем фраги Функция которая вызывает выполнение команд на disconnect игрока называется client_disconnect Пишем: public client_disconnect(id){ frags[id]=get_user_frags(id) new name[32],data[20]
nvault_set(vault,name,data) } Описание: frags[id]=get_user_frags(id) - арраи frags равен фрагам игрока (get_user_frags добывает фраг), id в аррай означает ячейку в которую запишется фраг name[32], data[20] - арраи как вы уже догадались :D, name хранит имя игрока, а data хранит фраги get_user_name(id,name,31) - Пихаем имя игрока в аррай name, id - ID игрока name - название аррая куда имя будет скопировано, 31 - Индекс (Для букв использует <индекс аррая>-1) format(data,sizeof(data),"%d",frags[id]) - Пихаем фраги игрока в аррай data, "%d",frags[id] - Означает то что вместо %d будет цифра из frags[id], sizeof(data)просто получает индекс аррая, можно вместо этого написать просто индекс аррая (19) nvault_set(vault,name,data) - Сохраняем, vault - ID базы данных, name - Ключ (в нашем случаем это имя), data - данные которые надо записать
Делаем так что-бы когда игрок подключает его фраги устанавливаются (функция вызова client_putinserver) Пишем: public client_putinserver(id){ new name[32],data[20]
} Описание: nvault_get(vault,name,data,sizeof(data)) - Получаем данные из БД по ключу name и записываем все в data Далее идем проверка на то что игрок записан в БД или нет if(equal(data,"")){ - if - это если equal - Проверяет совпадает или нет аррай с данными т.е. если data ничего не содержит то делаем так. (eqal(<что проверять>,<с чем проверять>)) nvault_set(vault,name,"0") - Записываем игрока в БД и ставим фраги в 0 set_task(0.1,"loaddata",id) - Вызываем функцию cleint_putinserver и заново считываем инфу, set_task(<задержка в сек.>,"<вызываемая функция>",<id>) } frags[id] = str_to_num(data) - Аррай frags будет равен арраю data (str_to_num переводит из текста в цифру *lol*, ну у нас аррай frags цифровой а data аналоговый xDDD) set_user_frags(id,frags[id]) - Ну собственно и устанавливаем фраги, id - ID игрока которому надо установить фраги, frags - the frags
Теперь последнее, надо закрыть БД по завершению плагина. Функция plugin_end и в неё пишем nvault_close(vault): public plugin_end(){ nvault_close(vault) }
Если вы все правельно сделали то должно получится вот так: #include <amxmodx> #include <fun> #include <nvault>
new vault new frags[32+1]
public plugin_init(){ register_plugin("Stats","1.0","Dr.Freeman") vault = nvault_open("myvault") }
public client_disconnect(id){ frags[id]=get_user_frags(id) new name[32],data[20]
Осталось только скомпилить. Запускаем compile.exe (amxmodx/scripting), ждем. Вот и все ваш плагин в папке compiled. Все знают как плагины в amxmodx добавлять? Надеюсь этот тутор помог вам.