May 252013
 

Этот плагин поможет избавиться от некоторой нудной работы, такой как поиск оффсетов, добавления своих дополнительных функций и регистрирования команд типа register_clcmd(“weapon_mygun”, “switch_handler”)

Сейчас всё объясню на примере тестового плагина, который меняет hud ножу.

Прежде всего подключаем инклуд
#include <hud>

Теперь для удобства определим константы нашего старого оружия и нового

#define WEAPON_OLD "weapon_knife"
#define WEAPON_NEW1 "weapon_knife1"
#define WEAPON_NEW2 "weapon_knife2"
#define WEAPON_NEW3 "weapon_knife3"
#define WEAPON_NEW4 "weapon_knife4"
#define WEAPON_NEW5 "weapon_knife5"

В plugin_init() зарегистрируем все эти худы

public plugin_init()
{
	// какой-то код
	n21_register_hud(WEAPON_OLD, WEAPON_NEW1)
	n21_register_hud(WEAPON_OLD, WEAPON_NEW2)
	n21_register_hud(WEAPON_OLD, WEAPON_NEW3)
	n21_register_hud(WEAPON_OLD, WEAPON_NEW4)
	n21_register_hud(WEAPON_OLD, WEAPON_NEW5)
}

Теперь необходимо закачать клиенту сам спрайт и специальные .txt файлы с именами наших новых ножей, т.е. мы должны настроить 5 файлов:
weapon_knife1.txt
weapon_knife2.txt
weapon_knife2.txt
weapon_knife3.txt
weapon_knife5.txt

Содержимое файлов примерно такое:

2
weapon			640 custom_hud/640hud21	0	45	170	45
weapon_s		640 custom_hud/640hud21	0	45	170	45

общий формат такой
<тип> <разрешение> <спрайт> <смещение_по_X> <смещение_по_Y> <ширина> <высота>
Тип может быть следующий: weapon, weapon_s, ammo, ammo2, autoaim, crosshair, zoom, zoom_aim.

Теперь нужно закачать игроку спрайты и .txt файлы:

public plugin_precache()
{
	precache_generic("sprites/weapon_knife1.txt")
	precache_generic("sprites/weapon_knife2.txt")
	precache_generic("sprites/weapon_knife3.txt")
	precache_generic("sprites/weapon_knife4.txt")
	precache_generic("sprites/weapon_knife5.txt")
 
	precache_generic("sprites/custom_hud/640hud21.spr")
}

Чтоб мы могли всё это дело проверить зарегистрируем команды в plugin_init :

register_clcmd("say /k1", "knife_1")
register_clcmd("say /k2", "knife_2")
register_clcmd("say /k3", "knife_3")
register_clcmd("say /k4", "knife_4")
register_clcmd("say /k5", "knife_5")
register_clcmd("say /k6", "knife_old")

Вот и сами функции:

public knife_1(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW1)
public knife_2(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW2)
public knife_3(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW3)
public knife_4(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW4)
public knife_5(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW5)
public knife_old(id)    n21_hud_change_to(id, WEAPON_OLD, WEAPON_OLD)

Структура функции n21_hud_change_to
1 аргумент – id игрока
2 аргумент – имя оружия, худ которого мы меняем
3 аргумент – имя нового оружия

Такой вызов функции:
n21_hud_change_to(id, "weapon_knife", "weapon_knife")
вернёт стандартный худ ножа, т.е. чтобы вернуть стандартный худ оружия, нужно его указать во 2 и 3 аргументах функции.

Таким образом в результате мы получаем такой тестовый плагин:

#include <amxmodx>
#include <hud>

#define PLUGIN  "Hud Test"
#define AUTHOR  "trofian"
#define VERSION "1.0"

#define WEAPON_OLD "weapon_knife"
#define WEAPON_NEW1 "weapon_knife1"
#define WEAPON_NEW2 "weapon_knife2"
#define WEAPON_NEW3 "weapon_knife3"
#define WEAPON_NEW4 "weapon_knife4"
#define WEAPON_NEW5 "weapon_knife5"
 
public plugin_precache()
{
        precache_generic("sprites/weapon_knife1.txt")
        precache_generic("sprites/weapon_knife2.txt")
        precache_generic("sprites/weapon_knife3.txt")
        precache_generic("sprites/weapon_knife4.txt")
        precache_generic("sprites/weapon_knife5.txt")
       
        precache_generic("sprites/custom_hud/640hud21.spr")
}
 
public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR)
       
        n21_register_hud(WEAPON_OLD, WEAPON_NEW1)
        n21_register_hud(WEAPON_OLD, WEAPON_NEW2)
        n21_register_hud(WEAPON_OLD, WEAPON_NEW3)
        n21_register_hud(WEAPON_OLD, WEAPON_NEW4)
        n21_register_hud(WEAPON_OLD, WEAPON_NEW5)
       
        register_clcmd("say /k1", "knife_1")
        register_clcmd("say /k2", "knife_2")
        register_clcmd("say /k3", "knife_3")
        register_clcmd("say /k4", "knife_4")
        register_clcmd("say /k5", "knife_5")
        register_clcmd("say /k6", "knife_old")
}
 
public knife_1(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW1)
public knife_2(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW2)
public knife_3(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW3)
public knife_4(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW4)
public knife_5(id)      n21_hud_change_to(id, WEAPON_OLD, WEAPON_NEW5)
public knife_old(id)    n21_hud_change_to(id, WEAPON_OLD, WEAPON_OLD)

Важно понимать, что это всего лишь пример, это НЕ готовая реализация, вы можете использовать функции, которые предоставляет плагин, как угодно и где угодно, он всего лишь избавляет от рутины, логику работы вы продумываете сами, вас не заставляют придерживаться каких-то рамок.

Необходимо что бы плагин custom_hud.amxx был выше в списке plugins.ini плагинов использующих инклуд hud.inc
Плагин custom_hud.amxx подключить нужно обязательно!

Sorry, the comment form is closed at this time.