Участник
Пользователь
- Сообщения
- 486
- Реакции
- 89
- Помог
- 5 раз(а)
- Ошибка
-
Не выдаёт кастомный нож
- ОС
- Linux
- Amx Mod X
-
1.9.0
- Билд
-
last
- ReGamedll
-
last
- Версия Metamod
-
last
- Список метамодулей
-
-
- Список плагинов
-
-
- Автор плагина
- -
- Версия плагина
- -
- Исходный код
-
-
Добрый вечер. Наткнулся на проблему на картах awp_india (india2 and etc), именно на этих картах не выдается кастомный нож (подчеркну, что только на индиях такая проблема), ReHLDS, ReGameDLL last versions, может кто сталкивался? Читал, что в ReGameDLL пофиксили баг с выдачей, но что-то странно..
Выдача происходит нативом
Код:
#include <amxmodx>
#include <reapi>
#pragma semicolon 1
new const PLUGIN_NAME[] = "Custom Weapon: Knife";
new const PLUGIN_VERSION[] = "1.1";
new const PLUGIN_AUTHOR[] = "Dev-CS";
new const CONFIG_NAME[] = "custom_weapon_knife";
#define IsUserValid(%0) (1 <= %0 <= MaxClients)
// Режим DEBUG. Раскомментировать если нужно включить команду для выдачи оружия
//#define DEBUG
// Уникальный ID (impulse) для оружия
#define WEAPON_UID 111
// ID оружия (берётся из файла cssdk_const.inc из enum WeaponIdType)
#define WEAPON_ID WEAPON_KNIFE
// Является ли оружие нашим кастомным
#define IsCustomWeapon(%0) bool:(get_entvar(%0, var_impulse) == WEAPON_UID)
new const g_szModelV[] = "models/energo/v_knife.mdl"; // Модель "v_"
new const g_szModelP[] = "models/energo/p_knife.mdl"; // Модель "p_"
#if defined DEBUG
// Команда для выдачи оружия
new const g_szGiveWeaponCmd[] = "give_knife";
#endif
// Название оружия
new const g_szWeaponName[] = "weapon_knife";
new Float:g_iWeaponDamage;
new g_szFlag[32];
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
#if defined DEBUG
register_clcmd(g_szGiveWeaponCmd, "func_CmdGiveWeapon");
#endif
RegisterHookChain(RG_CBasePlayerWeapon_DefaultDeploy, "CBasePlayerWeapon_DefaultDeploy_Pre", false);
bind_pcvar_string(create_cvar(
.name = "flag_knife",
.string = "t",
.flags = FCVAR_NONE,
.description = fmt("%L", LANG_SERVER, "DESC_FLAG")),
g_szFlag, charsmax(g_szFlag));
bind_pcvar_float(create_cvar(
.name = "damage_knife",
.string = "1.2",
.flags = FCVAR_NONE,
.description = fmt("%L", LANG_SERVER, "DESC_DAMAGE"),
.has_min = true,
.min_val = 0.0,
.has_max = false,
.max_val = 0.0),
g_iWeaponDamage);
AutoExecConfig(true, CONFIG_NAME);
}
public plugin_natives()
register_native("give_custom_weapon_knife", "__give_custom_weapon_knife");
public plugin_precache()
{
precache_model(g_szModelV);
precache_model(g_szModelP);
}
public CBasePlayerWeapon_DefaultDeploy_Pre(iWeapon, viewModel[], playerModel[])
{
if(is_nullent(iWeapon))
return HC_CONTINUE;
if(IsCustomWeapon(iWeapon))
{
SetHookChainArg(2, ATYPE_STRING, g_szModelV);
SetHookChainArg(3, ATYPE_STRING, g_szModelP);
}
return HC_CONTINUE;
}
public func_CmdGiveWeapon(id)
{
if(!is_user_alive(id))
return PLUGIN_HANDLED;
new iWeapon = rg_give_custom_item(id, g_szWeaponName, GT_REPLACE, WEAPON_UID);
if(is_nullent(iWeapon))
return PLUGIN_HANDLED;
if(g_iWeaponDamage)
{
set_member(iWeapon, m_Weapon_flBaseDamage, Float:get_member(iWeapon, m_Weapon_flBaseDamage) * g_iWeaponDamage);
set_member(iWeapon, m_Knife_flStabBaseDamage, Float:get_member(iWeapon, m_Knife_flStabBaseDamage) * g_iWeaponDamage);
set_member(iWeapon, m_Knife_flSwingBaseDamage, Float:get_member(iWeapon, m_Knife_flSwingBaseDamage) * g_iWeaponDamage);
set_member(iWeapon, m_Knife_flSwingBaseDamage_Fast, Float:get_member(iWeapon, m_Knife_flSwingBaseDamage_Fast) * g_iWeaponDamage);
}
return PLUGIN_HANDLED;
}
public __give_custom_weapon_knife(iPlugin, iParams)
{
enum { player = 1 };
new id = get_param(player);
if(!IsUserValid(id))
abort(AMX_ERR_NATIVE, "Player out of range (%i)", id);
func_CmdGiveWeapon(id);
}
14 Май 2022
В этой теме было размещено решение! Перейти к решению.