Prize Knife

Сообщения
509
Реакции
111
Помог
16 раз(а)
Подскажите есть плагин viptest выдает флаг все нормально випка работает. Но в плагине Prize Knife проверка как Safety1st писал только при заходе на сервер и больше не обновляется не при смерти и вообще никак.
Пробовал ставить плагины выше ниже и тп,не помогает.

Как добавить чтобы хотя бы после смерти плагин видел что у игрока есть флаг t ?

Притом что плагин V.I.P Custom от Vaqtincha нормально срабатывает после смерти,и у игрока есть нож.

Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Prize Knife"
#define VERSION "0.1"
#define AUTHOR "Safety1st"

/*---------------EDIT ME------------------*/
#define ACCESS_FLAG     ADMIN_LEVEL_H   // flag 't' by default
#define CUSTOM_DMG      2.0             // custom knife damage; fractional part of a number is mandatory

new const gszKnifeModelV[] = "models/test/v_knife.mdl"    // 1st person view model
new const gszKnifeModelP[] = "models/test/p_knife.mdl"    // 3rd person view model
/*----------------------------------------*/

new giszKnifeModelV, giszKnifeModelP

// macro; %1 - variable being modified, %2 - player id
#define CheckFlag(%1,%2)  (%1 &   (1 << (%2 & 31)))
#define SetFlag(%1,%2)    (%1 |=  (1 << (%2 & 31)))
#define ClearFlag(%1,%2)  (%1 &= ~(1 << (%2 & 31)))
new gbCustomKnfDamage

#define IsPlayer(%0)    ( 1 <= (%0) <= giMaxPlayers )

new giMaxPlayers

public plugin_init() {
    register_plugin( PLUGIN, VERSION, AUTHOR )

    RegisterHam( Ham_Item_Deploy, "weapon_knife" , "Fwd_ItemDeploy_Knife_Post", .Post = 1 )
    RegisterHam( Ham_TakeDamage, "player", "Fwd_TakeDamage" )

    giszKnifeModelV = engfunc( EngFunc_AllocString, gszKnifeModelV )
    giszKnifeModelP = engfunc( EngFunc_AllocString, gszKnifeModelP )

    giMaxPlayers = get_maxplayers()
}

public plugin_precache() {
    precache_model( gszKnifeModelV )
    precache_model( gszKnifeModelP )
}

public client_putinserver(id) {
    get_user_flags(id) & ACCESS_FLAG ? SetFlag( gbCustomKnfDamage, id ) : ClearFlag( gbCustomKnfDamage, id )
}

public Fwd_ItemDeploy_Knife_Post( ent ) {
    const XO_WEAPON  = 4    // 'XO' means extraoffset
    const m_pPlayer  = 41

    new iPlayer = get_pdata_cbase( ent, m_pPlayer, XO_WEAPON )

    if( CheckFlag( gbCustomKnfDamage, iPlayer ) ) {
        set_pev_string( iPlayer, pev_viewmodel2, giszKnifeModelV )
        set_pev_string( iPlayer, pev_weaponmodel2, giszKnifeModelP )
    }
}

public Fwd_TakeDamage( victim, inflictor, attacker, Float:damage, damagebits ) {
    if( IsPlayer(attacker) && attacker == inflictor /* it is mandatory be4 checking current weapon (it could not be the same as one inflicting damage now) */
        && CheckFlag( gbCustomKnfDamage, attacker ) && get_user_weapon(attacker) == CSW_KNIFE ) {
        SetHamParamFloat( 4, damage * CUSTOM_DMG )
        return HAM_HANDLED
    }

    return HAM_IGNORED
}
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
Отлавливаешь возрождение игрока: RegisterHam(Ham_Spawn,"player","Check_Admin") (Не забываем про #include <hamsandwich>) (и не забываем, что он уже подключен, это так - на будущее :good2:)
Ну или же его смерть - как хочешь ты: register_event("DeathMsg", "Check_Admin", "a", "1>0")
Далее создаешь функцию public Check_Admin
И вставляешь код от Сафетыча, который был при подключении игрока на сервер: get_user_flags(id) & ACCESS_FLAG ? SetFlag( gbCustomKnfDamage, id ) : ClearFlag( gbCustomKnfDamage, id )
7 Ноя 2018
Если что не так, поправьте меня :blush2:
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
WILL_BE, всё не так. Аргументы где? Как найти id в deathmsg?
 
Сообщения
486
Реакции
89
Помог
5 раз(а)
steelzzz, register_message(get_user_msgid("DeathMsg"), "Check_Admin")
Я дал примерный "путь" мышления. Все как нужно :beee:
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу