Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Новые сообщения · Правила форума · Поиск]
  • Страница 1 из 1
  • 1
Csfull.Forum » Counter-Strike 1.6 » FAQ » Создание amxx плагина№3
Создание amxx плагина№3
-{:Gu$TaVS:}-Дата: Среда, 2008-02-13, 8:46 PM | Сообщение # 1
Группа: Удаленные





Начало

У AMX Mod X плагинов может быть четыре главных типа функций. Первой - "общественная" функция. Это означает, что это является публично видимым Моднику AMX X двигателей. Второй - "родная" функция, которая объявлена в модуле или Моднике AMX X Ядрами. Третьей - регулярная пользовательская функция, которая объявлена без любых специальных признаков. Четвертой - "передовая" функция, которую называют всякий раз, когда специальный случай происходит (передовое является также общественным). AMX Mod X плагинов должен начать с функции, калибрующей плагин:

//Это делает это так, можно использовать основного Модника AMX X функций
//Это "включает" родные определения от includes\amxmodx.inc
#include <amxmodx>

//Declare three string variables
new PLUGIN[]="AMXX Demo"
new AUTHOR[]="BAILOPAN"
new VERSION[]="1.00"

//Это - общественная функция.
//Это необходимо, чтобы инициализировать Ваш скрипт при AMX Mod X.
//Это не берет параметров, и названо правым после загрузки карты.
public plugin_init()
{
//Это - функция, которая берет три строки.
//Это регистрирует Вашу функцию в AMX Mod X, и назначает некоторую основную информацию.
register_plugin(PLUGIN, VERSION, AUTHOR)
}

Попытайтесь компилировать скрипт выше. Это будет очень маленьким - поскольку это ничего не делает пока. Однако, если Вы загружаете этот скрипт, и тип "amxx дополнения к программе", Вы должны видеть новый вход в списке.
[редактирование] Команды Администрации Создания

AMX Mod X обеспечивает путь легко добавить пультовые команды администрации. Каждая команда "registered" как пультовая команда. Когда Вы регистрируете команду, Вы должны определить четыре свойства: пультовая команда, которая напечатана, функция, которую Вы делаете, который интерпретирует команду, уровень доступа, требуемый использовать это, и короткое описание команды.

Для этой демонстрации, давайте встраивать дополнение к программе, которое позволяет Вам изменять здоровье игроков на сервере с командой "amx_hp".

Мы должны будем сделать две вещи, чтобы начаться - сначала, мы должны регистрировать команду в пульте. Поскольку мы связываем команду к общественной функции, мы должны тогда удостовериться, что функция существует.

#include <amxmodx>
#include <amxmisc> //Это содержит некоторые полезные функции
#include <fun> //Это содержит функцию, чтобы изменить здоровье

new PLUGIN[]="Change Health"
new AUTHOR[]="BAILOPAN"
new VERSION[]="1.00"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("amx_hp", "cmd_hp", ADMIN_SLAY, "<target> ")
}

public cmd_hp(id, level, cid)
{
return PLUGIN_HANDLED
}

Первая новая функция - "register_concmd", который берет четыре параметра. Первой - команда, которую игрок должен напечатать в их пульт. Второй - общественная функция, которая обработает команду. Третьим - уровень доступа Ваши потребности команды. Наконец, Вы можете передать строку, которая описывает, как использовать Вашу команду (для amx_help).

Затем, мы создали общественную функцию, чтобы обработать amx_hp команду. Отметьте, что мы даем этому три параметра. Эти параметры будут держать специальные данные, когда команда будет использоваться - система обнаружения атак будет держать систему обнаружения атак игрока, кто запустил команду, уровень будет держать уровень доступа команды (Вы должны сделать доступ, проверяющий вас непосредственно), и уголовный розыск будет держать внутреннюю систему обнаружения атак команды.

Кроме того, отметьте PLUGIN_HANDLED. Есть два основных возвращаемых значения, которыми Вы должны коснуться себя. PLUGIN_CONTINUE вообще означает, "продолжают нормальную операцию", и средства PLUGIN_HANDLED "блокируют дальнейшую операцию". Различия являются тонкими, но важными. Например, связывая команду, Вы никогда не должны возвращать PLUGIN_CONTINUE. Но если Вы возвратите PLUGIN_HANDLED, связывая к "сообщенной" команде, то он блокирует текст игрока от когда-либо появления. Вы должны быть внимательными, с которым Вы выбираете в определенных ситуациях. Однако, большинство вещей незатронуто (такие как задачи, события, и другие вещи, с которыми Вы столкнетесь позже).

Так, первые вещи сначала. Как мы удостоверяемся, что этот пользователь - администрация, у которой есть доступ ADMIN_SLAY?

public cmd_hp(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
return PLUGIN_HANDLED
}

cmd_access () функция проверит информацию команды (пользователь, уровень доступа, и система обнаружения атак) и удостоверяется двух вещей: то, что у пользователя есть доступ к этому, и что этому дали минимальное число параметров. Здесь мы прошли три, потому что команда будет выглядеть следующим образом: amx_hp <target> <amount>, и сама фактическая команда рассчитывает как параметр. Если cmd_access терпит неудачу, у нас есть команда, немедленно заканчиваются.

Следующая часть, которая решит: мы должны взять эти два параметра и декодировать их. Параметр <amount> прост, поскольку мы только преобразовываем его от строки до числа. Второй параметр будет сложным, поскольку мы хотим быть в состоянии предназначаться для трех различных типов людей:
* @CT or @T -- CTs или Ts
* @ALL -- Все
* <target> -- Частичное имя игрока

public cmd_hp(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED

new Arg1[24]
new Arg2[4]

//Получите параметры команды от console
read_argv(1, Arg1, 23)
read_argv(2, Arg2, 3)

//Преобразуйте здоровье от строки до числа
new Health = str_to_num(Arg2)

//Действительно ли первый @ symbol?
if (Arg1[0] == '@')
{
new Team = 0
//Проверьте, какая группа была определена.
//Отметьте, что мы запускаем от [1], это хорошо
//это только означает, не включен
if (equali(Arg1[1], "CT"))
{
Team = 2
} else if (equali(Arg1[1], "T")) {
Team = 1
}
new players[32], num
//Эта функция наполнит игроков [32] переменная
//с правильными системами обнаружения атак игрока. цифровой будет содержать число
//из игроков, которые правильны.
get_players(players, num)
new i
for (i=0; i<num; i++)
{
if (!Team)
{
//Набор здоровье этого игрока
set_user_health(players[i], Health)
} else {
if (get_user_team(players[i]) == Team)
{
set_user_health(players[i], Health)
}
}
}
} else {
//находит систему обнаружения атак игрока, которая соответствует частичному данному названию
//1 средство, что это не будет предназначаться для игрока если он
//имеет доступ неприкосновенности
new player = cmd_target(id, Arg1, 1)
if (!player)
{
//это напечатает сообщение на пользователя, который попробовал команду
//Формат для этой команды называют "форматом ()" стилем,
//где первая строка форматирует сообщение соответственно
//к любому числу следующих параметров.
//%s означает строку
//%d или %i означают целое число
//%f означает с плавающей точкой
//так "Привет %s, мне - %d годы", будет
//потребуйте, чтобы строка и целое число следовали
console_print(id, "Sorry, player %s could not be found or targetted!", Arg1)
return PLUGIN_HANDLED
} else {
set_user_health(player, Health)
}
}

return PLUGIN_HANDLED
}

Так, наше конечное удалило, amx_hp дополнение к программе будет похоже:

#include <amxmodx>
#include <amxmisc>
#include <fun>

new PLUGIN[]="Change Health"
new AUTHOR[]="BAILOPAN"
new VERSION[]="1.00"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("amx_hp", "cmd_hp", ADMIN_SLAY, "<target> <hp>")
}

public cmd_hp(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED

new Arg1[24]
new Arg2[4]

//Получите параметры команды от console
read_argv(1, Arg1, 23)
read_argv(2, Arg2, 3)

//Преобразуйте здоровье от string to a number
new Health = str_to_num(Arg2)

///Действительно ли первый @ symbol?
if (Arg1[0] == '@')
{
new Team = 0
if (equali(Arg1[1], "CT"))
{
Team = 2
} else if (equali(Arg1[1], "T")) {
Team = 1
}
new players[32], num
get_players(players, num)
new i
for (i=0; i<num; i++)
{
if (!Team)
{
set_user_health(players[i], Health)
} else {
if (get_user_team(players[i]) == Team)
{
set_user_health(players[i], Health)
}
}
}
} else {
new player = cmd_target(id, Arg1, 1)
if (!player)
{
console_print(id, "Sorry, player %s could not be found or targetted!", Arg1)
return PLUGIN_HANDLED
} else {
set_user_health(player, Health)
}
}

return PLUGIN_HANDLED
}

CVARs - серверные клавиши памяти. Например, "mp_startmoney" - Противоудар CVAR, чтобы держаться, насколько люди денег добираются, когда они присоединяются к игре. Вы можете сделать свой собственный CVARs, регистрируя их в plugin_init (). Давайте копировать mp_startmoney.

#include <amxmodx>
#include <cstrike>

public plugin_init()
{
register_plugin("CVAR Test", "1.0", "BAILOPAN")
//значение по умолчанию 500
register_cvar("amx_startmoney", "500")
}

//это происходит, когда клиент в игрt
public client_putinserver(id)
{
if (get_cvar_num("amx_startmoney") > 0)
{
cs_set_user_money(id, get_cvar_num("amx_startmoney"))
} else {
cs_set_user_money(id, get_cvar_num("mp_startmoney"))
}
}

(это дополнение к программе вероятно не будет работать, это - только демонстрация). Вы можете установить CVARs как плавания, числа, или строки, и Вы можете изменить примерно любой правильный CVAR

 
BABKAДата: Понедельник, 2008-09-29, 2:54 PM | Сообщение # 2
Лейтенант
Группа: CS - L «Пользователь»
Сообщений: 50
Спасибо сказали: 0
Статус: Offline
СПС
 
Csfull.Forum » Counter-Strike 1.6 » FAQ » Создание amxx плагина№3
  • Страница 1 из 1
  • 1
Поиск:

Товарищи если вы используете материалы нашего сайта не забывайте указывать источника //csfull.moy.su
Copyright MyCorp © 2006 - 2009 Csfull