Сделал но не выдает, не мог бы ты поправить меня1. У ножа нету m_Weapon_flBaseDamage, соответственно так урон изменить не выйдет
2. Зачем выдавать нож каждый спавн ? В Ham_Deploy Pre на ноже, делай проверку на нужный флаг игроку и меняй модельку
#include <amxmodx>
#include <reapi>
#include <hamsandwich>
#pragma semicolon 1
#define ACCESS_FLAG ADMIN_LEVEL_C // Флаг которому доступно оружие. Закоментировать чтобы было доступно всем
#define WEAPON_ID WEAPON_KNIFE
new const KN_V_MODEL[] = "models/Gold_b_o/v_knife.mdl";
new const KN_P_MODEL[] = "models/Gold_b_o/p_knife.mdl";
new const g_szWeaponName[] = "weapon_knife";
#define WEAPON_UID 1
public plugin_init()
{
RegisterHam(Ham_Item_Deploy, g_szWeaponName, "HookItemDeploy", 1);
RegisterHookChain(RG_CBasePlayer_Spawn, "RG_Spawn_Post", 1);
}
public plugin_precache() {
precache_model(KN_V_MODEL);
precache_model(KN_P_MODEL);
}
public RG_Spawn_Post(id,const weapon)
{
#if defined ACCESS_FLAG
if (~get_user_flags(id) & ACCESS_FLAG) {
return PLUGIN_HANDLED;
}
#endif
if(!is_user_alive(id))
return PLUGIN_HANDLED;
if(is_user_connected(id) && get_user_team(id) == 1) {
rg_give_custom_item(id, "g_szWeaponName", GT_DROP_AND_REPLACE, WEAPON_UID);
}
new iWeapon = rg_give_custom_item(id, g_szWeaponName, GT_DROP_AND_REPLACE, WEAPON_UID);
if(is_nullent(iWeapon))
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
public HookItemDeploy(const weapon) {
if (get_entvar(weapon, var_impulse) == WEAPON_UID) {
new id = get_member(weapon, m_pPlayer);
set_entvar(id, var_viewmodel, KN_V_MODEL);
set_entvar(id, var_weaponmodel, KN_P_MODEL);
}
}
#include <amxmodx>
#include <reapi>
#include <hamsandwich>
#pragma semicolon 1
#define ACCESS_FLAG ADMIN_LEVEL_C // Флаг которому доступно оружие. Закоментировать чтобы было доступно всем
new const KN_V_MODEL[] = "models/Gold_b_o/v_knife.mdl";
new const KN_P_MODEL[] = "models/Gold_b_o/p_knife.mdl";
public plugin_init()
{
RegisterHam(Ham_Item_Deploy, "weapon_knife", "HookItemDeploy", 1);
}
public plugin_precache() {
precache_model(KN_V_MODEL);
precache_model(KN_P_MODEL);
}
public HookItemDeploy(const weapon) {
new id = get_member(weapon, m_pPlayer);
if (!(get_user_flags(id) & ACCESS_FLAG)) {
return HAM_IGNORED;
}
set_entvar(id, var_viewmodel, KN_V_MODEL);
set_entvar(id, var_weaponmodel, KN_P_MODEL);
return HAM_IGNORED;
}
Оказалось что я кучу всего впихнул а надо было всего то условия переписать под HookItem Спасибо . А вот еще вопрос дамаг поставить тоже через хук? я другого способа как там и не знаю. через дефайнКод:#include <amxmodx> #include <reapi> #include <hamsandwich> #pragma semicolon 1 #define ACCESS_FLAG ADMIN_LEVEL_C // Флаг которому доступно оружие. Закоментировать чтобы было доступно всем new const KN_V_MODEL[] = "models/Gold_b_o/v_knife.mdl"; new const KN_P_MODEL[] = "models/Gold_b_o/p_knife.mdl"; public plugin_init() { RegisterHam(Ham_Item_Deploy, "weapon_knife", "HookItemDeploy", 1); } public plugin_precache() { precache_model(KN_V_MODEL); precache_model(KN_P_MODEL); } public HookItemDeploy(const weapon) { new id = get_member(weapon, m_pPlayer); if (!(get_user_flags(id) & ACCESS_FLAG)) { return HAM_IGNORED; } set_entvar(id, var_viewmodel, KN_V_MODEL); set_entvar(id, var_weaponmodel, KN_P_MODEL); return HAM_IGNORED; }
RegisterHam(Ham_TakeDamage, "player", "KnifeDamage");
public KnifeDamage(victim, inflictor, attacker, Float:damage) {
if(!attacker || inflictor != attacker || victim == attacker || !is_user_connected(attacker)) return HAM_IGNORED;
if(get_user_weapon(attacker) == CSW_KNIFE) {
SetHamParamFloat(4, damage + 100.0);
}
return HAM_IGNORED;
}
Самое интересное я поставил этот код то у обычного ножа тоже дамаг вырос))Урон изменяй в Ham_TakeDamage или же Ham_TraceAttack, в сети полно примеров
Есть один нюанс через минуты 2 игры пропадает чудо нож. а становиться обычный помогает только перезаход.Нужна ещё проверка что у attacker, есть флаг доступа к такому ножу
Код:if(get_user_flags(attacker) & ACCESS_FLAG && get_user_weapon(attacker) == CSW_KNIFE)
#define ACCESS_FLAG ADMIN_LEVEL_C // Флаг которому доступно оружие.
Я думаю что возможно проверял на модельки котораю уже задействована. я проверю на отдельнойПроверяйте и контролируйте наличие у игрока флага:
#define ACCESS_FLAG ADMIN_LEVEL_C // Флаг которому доступно оружие.
В данном варианте вё зависит от его наличия. Если есть - то будет "супер нож", если нету - будет обычный
*Может конфликтовать с плагинами ножей или чем то подобным (если есть)
#include <amxmodx>
#include <hamsandwich>
#include <reapi>
#define ACCESS_FLAG ADMIN_LEVEL_F // Флаг которому доступно оружие. Закоментировать чтобы было доступно всем
#define WEAPON_ID WEAPON_USP
new const US_V_MODEL[] = "models/CUSTOM_GUNS/v_usp.mdl";
new const US_P_MODEL[] = "models/CUSTOM_GUNS/p_usp.mdl";
new const g_szWeaponName[] = "weapon_usp";
#define WEAPON_DAMAGE 2.0 // Множитель урона. Закоментировать если не нужно
#define WEAPON_CLIP 20 // Количество патронов в обойме. Закоментировать если количество по умолчанию
#define WEAPON_UID 1
public plugin_init() {
register_clcmd("stusp", "cmdGoldenM4");
RegisterHam(Ham_Item_Deploy, g_szWeaponName, "HookItemDeploy", 1);
}
public plugin_precache() {
precache_model(US_V_MODEL);
precache_model(US_P_MODEL);
}
public cmdGoldenM4(id)
{
#if defined ACCESS_FLAG
if (~get_user_flags(id) & ACCESS_FLAG) {
return PLUGIN_HANDLED;
}
#endif
if(!is_user_alive(id))
return PLUGIN_HANDLED;
new iWeapon = rg_give_custom_item(id, g_szWeaponName, GT_DROP_AND_REPLACE, WEAPON_UID);
if(is_nullent(iWeapon))
return PLUGIN_HANDLED;
rg_set_user_bpammo(id, WEAPON_ID, 35);
#if defined WEAPON_CLIP
rg_set_iteminfo(iWeapon, ItemInfo_iMaxClip, WEAPON_CLIP);
rg_set_user_ammo(id, WEAPON_ID, WEAPON_CLIP);
#endif
#if defined WEAPON_DAMAGE
set_member(iWeapon, m_Weapon_flBaseDamage, Float:get_member(iWeapon, m_Weapon_flBaseDamage) * WEAPON_DAMAGE);
#if WEAPON_ID == WEAPON_M4A1
set_member(iWeapon, m_M4A1_flBaseDamageSil, Float:get_member(iWeapon, m_M4A1_flBaseDamageSil) * WEAPON_DAMAGE);
#elseif WEAPON_ID == WEAPON_USP
set_member(iWeapon, m_USP_flBaseDamageSil, Float:get_member(iWeapon, m_USP_flBaseDamageSil) * WEAPON_DAMAGE);
#elseif WEAPON_ID == WEAPON_FAMAS
set_member(iWeapon, m_Famas_flBaseDamageBurst, Float:get_member(iWeapon, m_Famas_flBaseDamageBurst) * WEAPON_DAMAGE);
#endif
#endif
return PLUGIN_HANDLED;
}
public HookItemDeploy(const weapon) {
if (get_entvar(weapon, var_impulse) == WEAPON_UID) {
new id = get_member(weapon, m_pPlayer);
set_entvar(id, var_viewmodel, US_V_MODEL);
set_entvar(id, var_weaponmodel, US_P_MODEL);
}
}
public plugin_init()
{
register_clcmd("get_custome", "func_2");
}
#define WEAPON_UID 98595895894844 // Должен быть уникальным и никак не совпадать с другими оружиями
#define WEAPON_DAMAGE 5.0
public func_2(id) {
new iWeapon = rg_give_custom_item(id, "weapon_usp", GT_DROP_AND_REPLACE, WEAPON_UID);
set_member(iWeapon, m_Weapon_flBaseDamage, Float:get_member(iWeapon, m_Weapon_flBaseDamage) * WEAPON_DAMAGE);
set_member(iWeapon, m_USP_flBaseDamageSil, Float:get_member(iWeapon, m_USP_flBaseDamageSil) * WEAPON_DAMAGE);
}