Помогите фиксануть ThrowingKnives

DURILKA

Пользователь
Регистрация
2 Сен 2017
Сообщения
131
Симпатии
15
Пол
Мужской
Спойлеры используйте
OS
Linux
Amx Mod X
ReAMXX 1.8.3
Билд
Protocol version 48 Exe version 1.1.2.7/Stdio (cstrike) ReHLDS version: 3.7.0.692-dev-mpatch Build date: 18:13:20 Sep 30 2019 (1997) Build from: https://github.com/dreamstalker/rehlds/commit/e7232be
ReGamedll
ReGameDLL version: 5.12.0.425-dev Build date: 08:48:23 Nov 2 2019 Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/fd06d65
Metamod
Metamod v1.21p37 2013/05/30 (5:13) by Will Day http://www.metamod.org/ Patch: Metamod-P (mm-p) v37 by Jussi Kivilinna http://metamod-p.sourceforge.net/ compiled: May 30 2013, 11:41:16 EET (optimized)
Meta модули
Код:

	

		Спойлер: Спойлер
	
	
		
			Currently loaded plugins:
      description      stat pend  file              vers      src   load  unlod
[ 1] VoiceTranscoder  RUN   -    VoiceTranscoder.  v2017RC4  ini   ANY   ANY 
[ 2] AMX Mod X        RUN   -    amxmodx_mm_i386.  v1.9.0.5  ini   Start ANY 
[ 3] SafeNameAndChat  RUN   -    SafeNameAndChat.  v1.1      ini   ANY   ANY 
[ 4] Reunion          RUN   -    reunion_mm_i386.  v0.1.0.9  ini   Start Never
[ 5] ReAuthCheck      RUN   -    reauthcheck_mm_i  v0.1.6    ini   Start Never
[ 6] Rechecker        RUN   -    rechecker_mm_i38  v2.5      ini   Chlvl ANY 
[ 7] WHBlocker        RUN   -    whblocker_mm_i38  v1.5.696  ini   Chlvl ANY 
[ 8] ReSemiclip       RUN   -    resemiclip_mm_i3  v2.3.9    ini   Chlvl ANY 
[ 9] MySQL            RUN   -    mysql_amxx_i386.  v1.9.0.5  pl2   ANY   ANY 
[10] ReAimDetector    RUN   -    reaimdetector_am  v0.2.2    pl2   ANY   Never
[11] FakeMeta         RUN   -    fakemeta_amxx_i3  v1.9.0.5  pl2   ANY   ANY 
[12] ReAPI            RUN   -    reapi_amxx_i386.  v5.11.0.  pl2   ANY   Never
[13] Engine           RUN   -    engine_amxx_i386  v1.9.0.5  pl2   ANY   ANY 
[14] Ham Sandwich     RUN   -    hamsandwich_amxx  v1.9.0.5  pl2   ANY   ANY 
[15] SxGeo            RUN   -    sxgeo_amxx_i386.  v2.2      pl2   ANY   Never
[16] CStrike          RUN   -    cstrike_amxx_i38  v1.9.0.5  pl2   ANY   ANY 
[17] CSX              RUN   -    csx_amxx_i386.so  v1.9.0.5  pl2   ANY   ANY 
[18] Fun              RUN   -    fun_amxx_i386.so  v1.9.0.5  pl2   ANY   ANY 
18 plugins, 18 running
		
	
Плагины
Код:

	

		Спойлер: Спойлер
	
	
		
			Currently loaded plugins:
       name                    version     author            file             status  
[  1] GameCMS_API             5.3.5       zhorzh78          gamecms_api_5.3  running 
[  2] ReAimDetector API       0.2.2       ReHLDS Team       reaimdetector.a  running 
[  3] FreshBans               1.4.2b      kanagava          fresh_bans_142_  running 
[  4] WebHS                   0.1         kanagava          fb_web_online.a  running 
[  5] GameCMS_GagManager      2.2.3       zhorzh78          gamecms_gagmana  running 
[  6] [ReAMX] AdminCmd RBS    19.11.04    SKAJIbnEJIb & AM  admincmd_rbs.am  running 
[  7] Menus Front-End         18.12.18    AMXX Dev Team &   amxmodmenu_rbs.  running 
[  8] Map Manager: Core       3.0.4       Mistrick          map_manager_cor  running 
[  9] Map Manager: Scheduler  0.1.2       Mistrick          map_manager_sch  running 
[ 10] Map Manager: Effects    0.0.8       Mistrick          map_manager_eff  running 
[ 11] Map Manager: Informer   0.0.5       Mistrick          map_manager_inf  running 
[ 12] Map Manager: Nominatio  0.1.0       Mistrick          map_manager_nom  running 
[ 13] Map Manager: Rtv        0.1.0       Mistrick          map_manager_rtv  running 
[ 14] Maps Menu               1.4.1       neugomon          mapsmenu.amxx    running 
[ 15] Restrict Weapons        1.9.0.5262  AMXX Dev Team     restmenu.amxx    running 
[ 16] Mockery Of Players      15.07.15    Sanlerus          mockery_of_play  running 
[ 17] Menu System             0.1.2       serfreeman1337    menuSystem.amxx  running 
[ 18] [SxGeo] Connect Info    1.0         s1lent            sxgeo_connect_i  running 
[ 19] Chat Manager            1.1.2-16    Mistrick          chatmanager.amx  running 
[ 20] Chat Manager: Addon     0.0.4-70    Mistrick          chatmanager_add  running 
[ 21] Advanced Experience Sy  0.5 Vega    serfreeman1337    aes_main.amxx    running 
[ 22] AES: CStrike Addon      0.5 Vega    serfreeman1337    aes_exp_cstrike  running 
[ 23] AES: Admin Tools        0.5 Vega    serfreeman1337    aes_exp_editor.  running 
[ 24] AES: Informer           0.5 Vega    serfreeman1337    aes_informer.am  running 
[ 25] AES: StatsX             0.5.9 [REA  serfreeman1337/s  aes_statsx_cstr  running 
[ 26] [ReAPI] Info Killer     0.0.6       Jumper            Info_Killer.amx  running 
[ 27] Stats Configuration     1.9.0.5262  AMXX Dev Team     statscfg.amxx    running 
[ 28] Advanced Kill Assists   0.9         Spection          next21_kill_ass  running 
[ 29] [ReAMX] Ultimate Weapo  19.11.02    SKAJIbnEJIb       ultimate_weapon  running 
[ 30] ReTalisman              1.4.2       gyxoBka           ReTalisman.amxx  running 
[ 31] [ReAMX] Ultimate Model  19.09.20    SKAJIbnEJIb       ultimate_models  running 
[ 32] [ReAMX] VIP RBS         19.11.02    SKAJIbnEJIb       vip_rbs.amxx     running 
[ 33] [ReAMX] Stimulation RB  19.11.02    SKAJIbnEJIb       stimulation_rbs  running 
[ 34] [ReAPI] Block 'Fire in  0.0.1       sergrib           reapi_block_FIT  running 
[ 35] [ReAPI] Silly C4        2.0         F@ntoM & Cheap_S  reapi_sillyc4.a  running 
[ 36] Parachute Lite [ReAPI]  11.0        Leo_[BH]          parachute_lite.  running 
[ 37] Mode 2x2                2.5re       s1lent            mode.amxx        running 
[ 38] [ReAPI] Damager         1.1         phe               damager_1.amxx   running 
[ 39] AFK Control ReNew       1.2(a)      neygomon          afk_control.amx  running 
[ 40] [ReAPI] No Team Flash   0.0.3       Vaqtincha         no_team_flash.a  running 
[ 41] [ReAMX] Snipers RBS     19.09.10    SKAJIbnEJIb       snipers_rbs.amx  running 
[ 42] [ReAPI] Round Balancer  1.1         neygomon          round_balancer.  running 
[ 43] Lite Admin ESP          1.1         neygomon, AcE     admin_esp.amxx   running 
[ 44] C4 Timer on roundtime   0.3.3a      neygomon          c4timer.amxx     running 
[ 45] [Re] Reset Score ReFre  0.0.1       wopox1337@Dev-CS  ResetScore_ReFr  running 
[ 46] Reklama                 09.07.2019  mx?!              reklama.amxx     running 
[ 47] NY Kill Sprite          1.0         BadMandarin       NYKillSprite.am  running 
[ 48] [ReAMX] Cvar on Map     18.05.29    SKAJIbnEJIb       cvar_on_map.amx  running 
[ 49] Models Replacement      0.0.2       ConnorMcLeod | V  models_replacem  running 
[ 50] Health Grenade          1.2.8       Radius            health_grenade.  running 
[ 51] [ReAPI] Random Weapons  2.4.9       neugomon/h1k3     random_weapons_  stopped 
51 plugins, 50 running
		
	
Amxx Модули
Код:

	

		Спойлер: Спойлер
	
	
		
			#   :
#
# N                                                           
# 1  MySQL                   1.9.0.5262          AMX Mod X Dev             running   
# 2  ReAimDetector           0.2.2               ReHLDS Team               running   
# 3  FakeMeta                1.9.0.5262          AMX Mod X Dev             running   
# 4  ReAPI                   5.11.0.190-dev      Asmodai & s1le            running   
# 5  Engine                  1.9.0.5262          AMX Mod X Dev             running   
# 6  Ham Sandwich            1.9.0.5262          AMX Mod X Dev             running   
# 7  SxGeo                   2.2                 s1lent                    running   
# 8  CStrike                 1.9.0.5262          AMX Mod X Dev             running   
# 9  CSX                     1.9.0.5262          AMX Mod X Dev             running   
# 10 Fun                     1.9.0.5262          AMX Mod X Dev             running   
# 11 nVault                  1.9.0.5262          AMX Mod X Dev             running   
# 12 Sockets2                1.8.1.3746          HLSW Dev Team             running   
# 13 RegEx                   1.9.0.5262          AMX Mod X Dev             running   
# 14 Sockets                 1.9.0.5262          AMX Mod X Dev             running   
#
# 14
		
	
Ошибка
Код:
Не выпускет ножи когда амулет у игрока и не наносит ему урон когда в него метают
Исходник
Код:

	

		Спойлер: Исходник
	
	
		
			#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fun>
#include <gamecms5>

new const szPluginInfo[][] = {"Throwing Knives", "1.0", "Autor + ApXuTekToR"};

enum _:KNIFE_MODEL {
    MODELS_KNIFE = 1,
}
new g_szModel[KNIFE_MODEL][64];

new bool:knifeout[33];
new bool:roundfreeze;
new Float:tossdelay[33];
new knifeammo[33];
new holdammo[33];

public plugin_init()
{
    register_event("ResetHUD","new_spawn","b");
    register_event("CurWeapon","check_knife","b","1=1");
    register_event("DeathMsg", "player_death", "a");
    register_logevent("round_start", 2, "1=Round_Start");
    register_logevent("round_end", 2, "1=Round_End");
  
    register_clcmd("throw_knife","throw_knifes");            // Команда для ментания ножей
    register_concmd("amx_tknives","admin_tknife");            // Вкл/Выкл для админа
    register_clcmd("say /knifehelp", "knife_help");            // Помощь
    register_clcmd("say","HandleSay");

    register_cvar("amx_throwknives","1");                     // включить/выключить плагин
    register_cvar("amx_checkaccess", "1");                    // Кому будут доступны метательные ножи?
    // '0' - Всем.
    // '1' - Только по флагу доступа
    // '2' - Только по названию услуги
    // '3' - По флагу или услуге
    register_cvar("amx_checkflags", "");                    // Если 'amx_checkaccess' = '1' или '3', то какой флаг должен быть у игрока?
    register_cvar("amx_checkservice", "_throw_knife");        // Если 'amx_checkaccess' = '2' или '3', то какое название услуги должно быть?
    // (Обязательно в начале услуги должен быть знак '_' - нижнее подчеркивание)
    register_cvar("amx_flagaccess", "l");                    // Флаг доступа для Включения/Выключения метательных ножей (по умолчанию - l)
    register_cvar("amx_knifeammo", "5");                    // количество ножей, которые будут даны при старте раунда (по умолчанию - 5)
    register_cvar("amx_knifetossforce","1200");                // сила с которую брошен нож; 200 или выше (по умолчанию - 1200)
    register_cvar("amx_maxknifeammo","10");                    // максимальное количество ножей, которые игрок может носить (по умолчанию - 10)
    register_cvar("amx_knifedmg","25");                        // урон, наносимый брошенным ножом (по умолчанию - 25)
    register_cvar("amx_dropknives","1");                    // выбросить или нет ножи после смерти (по умолчанию - 1)
    register_cvar("amx_knifeautoswitch","1");                // автоматический переключатель
    register_cvar("amx_tknifelog","0");                        // устанавливает вид сообщения в логе; 1-брошенным ножом, 0-ножом (по умолчанию - 0)

    check_cvars();
}

public plugin_cfg()
{
    if(is_plugin_loaded("GameCMS_API") == INVALID_PLUGIN_ID)
    {
        log_amx("WARNING: gamecms_api.amxx isn't loaded! Plugin Stopped.");
        pause("a");
        return;
    }
}

public plugin_precache()
{
    new szConfigsDir[256];
    get_localinfo("amxx_configsdir", szConfigsDir, charsmax(szConfigsDir));
    server_cmd("exec %s/SevCorp/ThrowingKnives.cfg", szConfigsDir);
    server_exec();

    register_plugin(szPluginInfo[0], szPluginInfo[1], szPluginInfo[2]);
    precache_sound("weapons/knife_hitwall1.wav");
    precache_sound("weapons/knife_hit4.wav");
    precache_sound("weapons/knife_deploy1.wav");
    precache_model("models/w_knifepack.mdl");
    LOAD_CONFIGURATION();
}

public knife_help(id) {
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
        client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
        }
    } else if(CheckAccess == 2) {
        if(Services){
            client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
        }
    }
}

public check_cvars() {
    if (get_cvar_num("amx_knifeammo") > get_cvar_num("amx_maxknifeammo")) {
        server_print("[AMXX] 'amx_knifeammo' не может быть больше, чем 'amx_maxknifeammo', устанавливаю 'amx_maxknifeammo' = 'amx_knifeammo'");
        set_cvar_num("amx_maxknifeammo", get_cvar_num("amx_knifeammo"));
    }
    if (get_cvar_num("amx_knifedmg") < 1 ) {
        server_print("[AMXX] 'amx_knifedmg' не может быть установлен ниже '1'.Устанавливаю 'amx_knifedmg' = '1'");
        set_cvar_num("amx_knifedmg", 1);
    }
    if (get_cvar_num("amx_knifetossforce") < 200 ) {
        server_print("[AMXX] 'amx_knifetossforce' не может быть установлен ниже, чем 200. Устанавливаю '200'");
        set_cvar_num("amx_knifetossforce", 200);
    }
}

public throw_knifes(id) {
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        command_knife(id);
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            command_knife(id);
        }
    } else if(CheckAccess == 2) {
        if(Services){
            command_knife(id);
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            command_knife(id);
        }
    }
}

public player_death() {
    new id = read_data(2);
    knife_drop(id);
}

public HandleSay(id) {
    new Speech[192];
    read_args(Speech,192);
    remove_quotes(Speech);
    if(!equal(Speech, "vote",4) && ((containi(Speech, "knife") != -1) || (containi(Speech, "knives") != -1))) {
        if(get_cvar_num("amx_throwknives") == 1) {
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метательные ножи ^4Включены^3!");
        }
        else {
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метательные ножи ^4Выключены");
        }
    }
}

public knife_drop(id) {

    if(!get_cvar_num("amx_dropknives") || knifeammo[id] <= 0 || !get_cvar_num("amx_throwknives")) return;

    new Float:Origin[3], Float:Velocity[3];
    entity_get_vector(id, EV_VEC_origin, Origin);

    new knifedrop = create_entity("info_target");
    if(!knifedrop) return;

    entity_set_string(knifedrop, EV_SZ_classname, "knife_pickup");
    entity_set_model(knifedrop, "models/w_knifepack.mdl");

    new Float:MinBox[3] = {-1.0, -1.0, -1.0}
    new Float:MaxBox[3] = {1.0, 1.0, 1.0}
    entity_set_vector(knifedrop, EV_VEC_mins, MinBox);
    entity_set_vector(knifedrop, EV_VEC_maxs, MaxBox);

    entity_set_origin(knifedrop, Origin);

    entity_set_int(knifedrop, EV_INT_effects, 32);
    entity_set_int(knifedrop, EV_INT_solid, 1);
    entity_set_int(knifedrop, EV_INT_movetype, 6);
    entity_set_edict(knifedrop, EV_ENT_owner, id);

    VelocityByAim(id, 400 , Velocity);
    entity_set_vector(knifedrop, EV_VEC_velocity ,Velocity);
    holdammo[id] = knifeammo[id];
    knifeammo[id] = 0;
}

public check_knife(id) {
    if(!get_cvar_num("amx_throwknives")) return;
    new weapon = read_data(2);
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        if(weapon == CSW_KNIFE) {
            knifeout[id] = true;
            client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
        } else {
            knifeout[id] = false;
        }
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            if(weapon == CSW_KNIFE) {
                knifeout[id] = true;
                client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
            } else {
                knifeout[id] = false;
            }
        }
    } else if(CheckAccess == 2) {
        if(Services){
            if(weapon == CSW_KNIFE) {
                knifeout[id] = true;
                client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
            } else {
                knifeout[id] = false;
            }
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            if(weapon == CSW_KNIFE) {
                knifeout[id] = true;
                client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
            } else {
                knifeout[id] = false;
            }
        }
    }
}

public kill_all_entity(classname[]) {
    new iEnt = find_ent_by_class(-1, classname);
    new tEnt;
    while(iEnt > 0) {
        tEnt = iEnt;
        iEnt = find_ent_by_class(iEnt, classname);
        remove_entity(tEnt);
    }
}

public new_spawn(id) {
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
        if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
        tossdelay[id] = 0.0;
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
            if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
            tossdelay[id] = 0.0;
        }
    } else if(CheckAccess == 2) {
        if(Services){
            if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
            if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
            tossdelay[id] = 0.0;
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
            if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
            tossdelay[id] = 0.0;
        }
    }
}

public client_connect(id) {
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        knifeammo[id] = get_cvar_num("amx_knifeammo");
        holdammo[id] = 0;
        tossdelay[id] = 0.0;
        knifeout[id] = false;
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            knifeammo[id] = get_cvar_num("amx_knifeammo");
            holdammo[id] = 0;
            tossdelay[id] = 0.0;
            knifeout[id] = false;
        }
    } else if(CheckAccess == 2) {
        if(Services){
            knifeammo[id] = get_cvar_num("amx_knifeammo");
            holdammo[id] = 0;
            tossdelay[id] = 0.0;
            knifeout[id] = false;
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            knifeammo[id] = get_cvar_num("amx_knifeammo");
            holdammo[id] = 0;
            tossdelay[id] = 0.0;
            knifeout[id] = false;
        }
    }
}

public client_disconnected(id) {
    knifeammo[id] = 0;
    holdammo[id] = 0;
    tossdelay[id] = 0.0;
    knifeout[id] = false;
}

public round_start() {
    roundfreeze = false;
}
public round_end() {
    roundfreeze = true;
    kill_all_entity("throwing_knife");
    kill_all_entity("knife_pickup");
}

public vexd_pfntouch(pToucher, pTouched) {

    if (!is_valid_ent(pToucher) || !get_cvar_num("amx_throwknives")) return;

    new Classname[32];
    entity_get_string(pToucher, EV_SZ_classname, Classname, 31);
    new owner = entity_get_edict(pToucher, EV_ENT_owner);
    new Float:kOrigin[3]
    entity_get_vector(pToucher, EV_VEC_origin, kOrigin);

    if(equal(Classname,"knife_pickup")) {
        if ( !is_valid_ent(pTouched) ) return;
      
        check_cvars();
        new Class2[32];
        entity_get_string(pTouched, EV_SZ_classname, Class2, 31);
        if(!equal(Class2,"player") || knifeammo[pTouched] >= get_cvar_num("amx_maxknifeammo")) return;

        if((knifeammo[pTouched] + holdammo[owner]) > get_cvar_num("amx_maxknifeammo")) {
            holdammo[owner] -= get_cvar_num("amx_maxknifeammo") - knifeammo[pTouched];
            knifeammo[pTouched] = get_cvar_num("amx_maxknifeammo");
            emit_sound(pToucher, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
        }
        else {
            knifeammo[pTouched] += holdammo[owner];
            emit_sound(pToucher, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
            remove_entity(pToucher);
        }
        client_print(pTouched, print_center, "В наличии: %i ножей",knifeammo[pTouched]);
    }

    else if(equal(Classname,"throwing_knife")) {
        check_cvars();
        if(is_user_alive(pTouched)) {
            new movetype = entity_get_int(pToucher, EV_INT_movetype);
            if(movetype == 0 && knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) {
                if(knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) knifeammo[pTouched] += 1;
                client_print(pTouched,print_center,"В наличии: %i ножей",knifeammo[pTouched]);
                emit_sound(pToucher, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
                remove_entity(pToucher);
            }
            else if (movetype != 0) {
                if(owner == pTouched) return;

                remove_entity(pToucher);

                if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(pTouched) == get_user_team(owner)) return;

                new pTdead[33];
                entity_set_float(pTouched, EV_FL_dmg_take, get_cvar_num("amx_knifedmg") * 1.0);

                if((get_user_health(pTouched) - get_cvar_num("amx_knifedmg")) <= 0) {
                    pTdead[pTouched] = 1;
                }
                else {
                    set_user_health(pTouched, get_user_health(pTouched) - get_cvar_num("amx_knifedmg"));
                }

                if(get_user_team(pTouched) == get_user_team(owner)) {
                    new name[33];
                    get_user_name(owner, name, charsmax(name));
                    client_print_color(0, 0, "^3[^4Knife^3] ^4%s ^1атаковал товарища^4! ^1Потому что ^3Гнида^1!", name);
                }

                emit_sound(pTouched, CHAN_ITEM, "weapons/knife_hit4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);

                if(pTdead[pTouched]) {
                    if(get_user_team(pTouched) == get_user_team(owner)) {
                        set_user_frags(owner, get_user_frags(owner) - 1);
                        client_print(owner,print_center,"You killed a teammate");
                    }
                    else {
                        set_user_frags(owner, get_user_frags(owner) + 1);
                    }

                    new gmsgScoreInfo = get_user_msgid("ScoreInfo");
                    new gmsgDeathMsg = get_user_msgid("DeathMsg");

                    set_msg_block(gmsgDeathMsg,BLOCK_ONCE);
                    set_msg_block(gmsgScoreInfo,BLOCK_ONCE);
                    user_kill(pTouched,1);

                    message_begin(MSG_ALL,gmsgScoreInfo);
                    write_byte(owner);
                    write_short(get_user_frags(owner));
                    write_short(get_user_deaths(owner));
                    write_short(0);
                    write_short(get_user_team(owner));
                    message_end();

                    message_begin(MSG_ALL,gmsgScoreInfo);
                    write_byte(pTouched);
                    write_short(get_user_frags(pTouched));
                    write_short(get_user_deaths(pTouched));
                    write_short(0);
                    write_short(get_user_team(pTouched));
                    message_end();

                    message_begin(MSG_ALL,gmsgDeathMsg,{0,0,0},0);
                    write_byte(owner);
                    write_byte(pTouched);
                    write_byte(0);
                    write_string("knife");
                    message_end();

                    new tknifelog[16]
                    if (get_cvar_num("amx_tknifelog")) tknifelog = "throwing_knife";
                    else tknifelog = "knife";

                    new namea[32], authida[35], teama[32];
                    new namev[32], authidv[35], teamv[32];
                    get_user_name(owner,        namea,         charsmax(namea));
                    get_user_authid(owner,        authida,     charsmax(authida));
                    get_user_team(owner,        teama,         charsmax(teama));
                    get_user_name(pTouched,        namev,         charsmax(namev));
                    get_user_authid(pTouched,    authidv,     charsmax(authidv));
                    get_user_team(pTouched,        teamv,         charsmax(teamv));

                    log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"", namea, get_user_userid(owner), authida, teama, namev, get_user_userid(pTouched), authidv, teamv, tknifelog);
                }
            }
        }
        else {
            entity_set_int(pToucher, EV_INT_movetype, 0);
            emit_sound(pToucher, CHAN_ITEM, "weapons/knife_hitwall1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
        }
    }
}

public command_knife(id) {

    if(!is_user_alive(id) || !get_cvar_num("amx_throwknives") || roundfreeze) return PLUGIN_HANDLED;

    if(get_cvar_num("amx_knifeautoswitch")) {
        knifeout[id] = true;
        client_cmd(id,"weapon_knife");
    }

    if(!knifeammo[id]) client_print(id,print_center,"У Вас закончились ножи", knifeammo[id]);
    if(!knifeout[id] || !knifeammo[id]) return PLUGIN_HANDLED;

    if(tossdelay[id] > get_gametime() - 0.5) return PLUGIN_HANDLED;
    else tossdelay[id] = get_gametime();

    knifeammo[id]--;

    if (knifeammo[id] == 1) {
        client_print(id, print_center, "В наличии: %i нож",knifeammo[id]);
    }
    else {
        client_print(id, print_center, "В наличии: %i ножей",knifeammo[id]);
    }

    new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent;

    entity_get_vector(id, EV_VEC_origin , Origin);
    entity_get_vector(id, EV_VEC_v_angle, vAngle);

    Ent = create_entity("info_target");

    if (!Ent) return PLUGIN_HANDLED;

    entity_set_string(Ent, EV_SZ_classname, "throwing_knife");
    entity_set_model(Ent, g_szModel[MODELS_KNIFE]);

    new Float:MinBox[3] = {-1.0, -7.0, -1.0};
    new Float:MaxBox[3] = {1.0, 7.0, 1.0};
    entity_set_vector(Ent, EV_VEC_mins, MinBox);
    entity_set_vector(Ent, EV_VEC_maxs, MaxBox);

    vAngle[0] -= 90;

    entity_set_origin(Ent, Origin);
    entity_set_vector(Ent, EV_VEC_angles, vAngle);

    entity_set_int(Ent, EV_INT_effects, 2);
    entity_set_int(Ent, EV_INT_solid, 1);
    entity_set_int(Ent, EV_INT_movetype, 6);
    entity_set_edict(Ent, EV_ENT_owner, id);

    VelocityByAim(id, get_cvar_num("amx_knifetossforce") , Velocity);
    entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
  
    return PLUGIN_HANDLED;
}

public admin_tknife(id,level,cid){

    new Access[16];
    get_cvar_string("amx_flagaccess", Access, charsmax(Access))
    if(!(checkAccess(id, Access))) {
        client_print_color(id, 0, "^3[^4Knife^3] ^3У Вас нет доступа к данной команде^4!");
        return PLUGIN_HANDLED;
    }

    new authid[35],name[32];
    get_user_authid(id,authid,34);
    get_user_name(id,name,31);

    if(get_cvar_num("amx_throwknives") == 0){
        set_cvar_num("amx_throwknives", 1);
        client_print_color(0, 0,"^3[^4Knife^3] ^1Администратор ^4Включил ^1метательные ножи");
        console_print(id, "[Knife] Вы Включили метание ножей");
        log_amx("Админ: ^"%s<%d><%s>^" Включил метательные ножи", name, get_user_userid(id), authid);
    }
    else {
        set_cvar_num("amx_throwknives", 0);
        client_print_color(0, 0,"^3[^4Knife^3] ^1Администратор ^4ВЫключил ^1метательные ножи");
        console_print(id,"[Knife] Вы Выключили метание ножей");
        log_amx("Админ: ^"%s<%d><%s>^" Выключил метательные ножи", name, get_user_userid(id), authid);
    }
    return PLUGIN_HANDLED;
}

LOAD_CONFIGURATION()
{
    new szCfgDir[128], szCfgFile[128];
    get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
    formatex(szCfgFile, charsmax(szCfgFile), "%s/SevCorp/ThrowingKnives.cfg", szCfgDir);
    if(!file_exists(szCfgFile)) {
        new szError[100];
        formatex(szError, charsmax(szError), "Отсутсвтует: %s!", szCfgFile);
        set_fail_state(szError);
        return;
    }
    new szBuffer[128], szKey[64], szValue[960];
    new iFile = fopen(szCfgFile, "rt");
    while(iFile && !feof(iFile)) {
        fgets(iFile, szBuffer, charsmax(szBuffer));
        replace(szBuffer, charsmax(szBuffer), "^n", "");
        if(!szBuffer[0] || szBuffer[0] == ';' || szBuffer[0] == '{' || szBuffer[0] == '}' || szBuffer[0] == '#' || szBuffer[0] == '[' || szBuffer[0] == ']') continue;
        parse(szBuffer, szKey, charsmax(szKey), szValue, charsmax(szValue));
        trim(szKey);
        trim(szValue);
        if(equal(szKey,    "MODELS_KNIFE"))    formatex(g_szModel[MODELS_KNIFE],    charsmax(g_szModel[]), szValue);
    }
    fclose(iFile);
    PRECACHE_MODELS();
}

PRECACHE_MODELS()
{
    new i, szBuffer[64];
    for(i = 0; i < sizeof(g_szModel); i++) {
        formatex(szBuffer, charsmax(szBuffer), "%s", g_szModel);
        engfunc(EngFunc_PrecacheModel, szBuffer);
    }
}

checkAccess(id, const flags[]) {
    return (get_user_flags(id) & read_flags(flags));
}
		
	
Всем доброго времени суток! У меня вот в чем беда. Стоит плагин амулет и когда амулет у игрока, он не дает кидать ножи игроку и когда в него кидают ХП не снимается. Как будто бы ножи застряют в нем. Фиксаните пожалуйста. Если у вас есть минутка свободная или минутки :)
Ссылка на модель амулета: TpaBA.mdl

Автор плагина талисмана сказал:
Класснейм талисмана "talisman​
 
Последнее редактирование модератором:

Safety1st

Заблокированные
Пользователь
Регистрация
10 Ноя 2017
Сообщения
114
Симпатии
36
Пол
Мужской
Ты ж убил весь код в исходнике, надо тэг Code юзать.
 

DURILKA

Пользователь
Регистрация
2 Сен 2017
Сообщения
131
Симпатии
15
Пол
Мужской
Safety1st, какой код я убил ? :)
Я не трогал в этом плагине ничего.[DOUBLEPOST=1575906965][/DOUBLEPOST]
Ты ж убил весь код в исходнике, надо тэг Code юзать.
Теперь понял.... Надо было прикрепить исходник по другому как то.
C++:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fun>
#include <gamecms5>

new const szPluginInfo[][] = {"Throwing Knives", "1.0", "Autor + ApXuTekToR"};

enum _:KNIFE_MODEL {
    MODELS_KNIFE = 1,
}
new g_szModel[KNIFE_MODEL][64];

new bool:knifeout[33];
new bool:roundfreeze;
new Float:tossdelay[33];
new knifeammo[33];
new holdammo[33];

public plugin_init()
{
    register_event("ResetHUD","new_spawn","b");
    register_event("CurWeapon","check_knife","b","1=1");
    register_event("DeathMsg", "player_death", "a");
    register_logevent("round_start", 2, "1=Round_Start");
    register_logevent("round_end", 2, "1=Round_End");
    
    register_clcmd("throw_knife","throw_knifes");            // Команда для ментания ножей
    register_concmd("amx_tknives","admin_tknife");            // Вкл/Выкл для админа
    register_clcmd("say /knifehelp", "knife_help");            // Помощь
    register_clcmd("say","HandleSay");

    register_cvar("amx_throwknives","1");                     // включить/выключить плагин
    register_cvar("amx_checkaccess", "1");                    // Кому будут доступны метательные ножи?
    // '0' - Всем.
    // '1' - Только по флагу доступа
    // '2' - Только по названию услуги
    // '3' - По флагу или услуге
    register_cvar("amx_checkflags", "");                    // Если 'amx_checkaccess' = '1' или '3', то какой флаг должен быть у игрока?
    register_cvar("amx_checkservice", "_throw_knife");        // Если 'amx_checkaccess' = '2' или '3', то какое название услуги должно быть?
    // (Обязательно в начале услуги должен быть знак '_' - нижнее подчеркивание)
    register_cvar("amx_flagaccess", "l");                    // Флаг доступа для Включения/Выключения метательных ножей (по умолчанию - l)
    register_cvar("amx_knifeammo", "5");                    // количество ножей, которые будут даны при старте раунда (по умолчанию - 5)
    register_cvar("amx_knifetossforce","1200");                // сила с которую брошен нож; 200 или выше (по умолчанию - 1200)
    register_cvar("amx_maxknifeammo","10");                    // максимальное количество ножей, которые игрок может носить (по умолчанию - 10)
    register_cvar("amx_knifedmg","25");                        // урон, наносимый брошенным ножом (по умолчанию - 25)
    register_cvar("amx_dropknives","1");                    // выбросить или нет ножи после смерти (по умолчанию - 1)
    register_cvar("amx_knifeautoswitch","1");                // автоматический переключатель
    register_cvar("amx_tknifelog","0");                        // устанавливает вид сообщения в логе; 1-брошенным ножом, 0-ножом (по умолчанию - 0)

    check_cvars();
}

public plugin_cfg()
{
    if(is_plugin_loaded("GameCMS_API") == INVALID_PLUGIN_ID)
    {
        log_amx("WARNING: gamecms_api.amxx isn't loaded! Plugin Stopped.");
        pause("a");
        return;
    }
}

public plugin_precache()
{
    new szConfigsDir[256];
    get_localinfo("amxx_configsdir", szConfigsDir, charsmax(szConfigsDir));
    server_cmd("exec %s/SevCorp/ThrowingKnives.cfg", szConfigsDir);
    server_exec();

    register_plugin(szPluginInfo[0], szPluginInfo[1], szPluginInfo[2]);
    precache_sound("weapons/knife_hitwall1.wav");
    precache_sound("weapons/knife_hit4.wav");
    precache_sound("weapons/knife_deploy1.wav");
    precache_model("models/w_knifepack.mdl");
    LOAD_CONFIGURATION();
}

public knife_help(id) {
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
        client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
        }
    } else if(CheckAccess == 2) {
        if(Services){
            client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
        }
    }
}

public check_cvars() {
    if (get_cvar_num("amx_knifeammo") > get_cvar_num("amx_maxknifeammo")) {
        server_print("[AMXX] 'amx_knifeammo' не может быть больше, чем 'amx_maxknifeammo', устанавливаю 'amx_maxknifeammo' = 'amx_knifeammo'");
        set_cvar_num("amx_maxknifeammo", get_cvar_num("amx_knifeammo"));
    }
    if (get_cvar_num("amx_knifedmg") < 1 ) {
        server_print("[AMXX] 'amx_knifedmg' не может быть установлен ниже '1'.Устанавливаю 'amx_knifedmg' = '1'");
        set_cvar_num("amx_knifedmg", 1);
    }
    if (get_cvar_num("amx_knifetossforce") < 200 ) {
        server_print("[AMXX] 'amx_knifetossforce' не может быть установлен ниже, чем 200. Устанавливаю '200'");
        set_cvar_num("amx_knifetossforce", 200);
    }
}

public throw_knifes(id) {
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        command_knife(id);
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            command_knife(id);
        }
    } else if(CheckAccess == 2) {
        if(Services){
            command_knife(id);
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            command_knife(id);
        }
    }
}

public player_death() {
    new id = read_data(2);
    knife_drop(id);
}

public HandleSay(id) {
    new Speech[192];
    read_args(Speech,192);
    remove_quotes(Speech);
    if(!equal(Speech, "vote",4) && ((containi(Speech, "knife") != -1) || (containi(Speech, "knives") != -1))) {
        if(get_cvar_num("amx_throwknives") == 1) {
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метательные ножи ^4Включены^3!");
        }
        else {
            client_print_color(id, 0, "^3[^4Knife^3] ^1Метательные ножи ^4Выключены");
        }
    }
}

public knife_drop(id) {

    if(!get_cvar_num("amx_dropknives") || knifeammo[id] <= 0 || !get_cvar_num("amx_throwknives")) return;

    new Float:Origin[3], Float:Velocity[3];
    entity_get_vector(id, EV_VEC_origin, Origin);

    new knifedrop = create_entity("info_target");
    if(!knifedrop) return;

    entity_set_string(knifedrop, EV_SZ_classname, "knife_pickup");
    entity_set_model(knifedrop, "models/w_knifepack.mdl");

    new Float:MinBox[3] = {-1.0, -1.0, -1.0}
    new Float:MaxBox[3] = {1.0, 1.0, 1.0}
    entity_set_vector(knifedrop, EV_VEC_mins, MinBox);
    entity_set_vector(knifedrop, EV_VEC_maxs, MaxBox);

    entity_set_origin(knifedrop, Origin);

    entity_set_int(knifedrop, EV_INT_effects, 32);
    entity_set_int(knifedrop, EV_INT_solid, 1);
    entity_set_int(knifedrop, EV_INT_movetype, 6);
    entity_set_edict(knifedrop, EV_ENT_owner, id);

    VelocityByAim(id, 400 , Velocity);
    entity_set_vector(knifedrop, EV_VEC_velocity ,Velocity);
    holdammo[id] = knifeammo[id];
    knifeammo[id] = 0;
}

public check_knife(id) {
    if(!get_cvar_num("amx_throwknives")) return;
    new weapon = read_data(2);
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        if(weapon == CSW_KNIFE) {
            knifeout[id] = true;
            client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
        } else {
            knifeout[id] = false;
        }
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            if(weapon == CSW_KNIFE) {
                knifeout[id] = true;
                client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
            } else {
                knifeout[id] = false;
            }
        }
    } else if(CheckAccess == 2) {
        if(Services){
            if(weapon == CSW_KNIFE) {
                knifeout[id] = true;
                client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
            } else {
                knifeout[id] = false;
            }
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            if(weapon == CSW_KNIFE) {
                knifeout[id] = true;
                client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
            } else {
                knifeout[id] = false;
            }
        }
    }
}

public kill_all_entity(classname[]) {
    new iEnt = find_ent_by_class(-1, classname);
    new tEnt;
    while(iEnt > 0) {
        tEnt = iEnt;
        iEnt = find_ent_by_class(iEnt, classname);
        remove_entity(tEnt);
    }
}

public new_spawn(id) {
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
        if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
        tossdelay[id] = 0.0;
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
            if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
            tossdelay[id] = 0.0;
        }
    } else if(CheckAccess == 2) {
        if(Services){
            if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
            if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
            tossdelay[id] = 0.0;
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
            if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
            tossdelay[id] = 0.0;
        }
    }
}

public client_connect(id) {
    static CheckAccess, AccessFlags[16], AccessService[32];
    CheckAccess = get_cvar_num("amx_checkaccess");
    get_cvar_string("amx_checkflags",    AccessFlags,     charsmax(AccessFlags));
    get_cvar_string("amx_checkservice", AccessService,    charsmax(AccessService));
    static Array:Services;
    Services = cmsapi_get_user_services(id, "", AccessService);

    if(CheckAccess == 0) {
        knifeammo[id] = get_cvar_num("amx_knifeammo");
        holdammo[id] = 0;
        tossdelay[id] = 0.0;
        knifeout[id] = false;
    } else if(CheckAccess == 1) {
        if(checkAccess(id, AccessFlags)) {
            knifeammo[id] = get_cvar_num("amx_knifeammo");
            holdammo[id] = 0;
            tossdelay[id] = 0.0;
            knifeout[id] = false;
        }
    } else if(CheckAccess == 2) {
        if(Services){
            knifeammo[id] = get_cvar_num("amx_knifeammo");
            holdammo[id] = 0;
            tossdelay[id] = 0.0;
            knifeout[id] = false;
        }
    } else if(CheckAccess == 3) {
        if(checkAccess(id, AccessFlags) || Services) {
            knifeammo[id] = get_cvar_num("amx_knifeammo");
            holdammo[id] = 0;
            tossdelay[id] = 0.0;
            knifeout[id] = false;
        }
    }
}

public client_disconnected(id) {
    knifeammo[id] = 0;
    holdammo[id] = 0;
    tossdelay[id] = 0.0;
    knifeout[id] = false;
}

public round_start() {
    roundfreeze = false;
}
public round_end() {
    roundfreeze = true;
    kill_all_entity("throwing_knife");
    kill_all_entity("knife_pickup");
}

public vexd_pfntouch(pToucher, pTouched) {

    if (!is_valid_ent(pToucher) || !get_cvar_num("amx_throwknives")) return;

    new Classname[32];
    entity_get_string(pToucher, EV_SZ_classname, Classname, 31);
    new owner = entity_get_edict(pToucher, EV_ENT_owner);
    new Float:kOrigin[3]
    entity_get_vector(pToucher, EV_VEC_origin, kOrigin);

    if(equal(Classname,"knife_pickup")) {
        if ( !is_valid_ent(pTouched) ) return;
        
        check_cvars();
        new Class2[32];
        entity_get_string(pTouched, EV_SZ_classname, Class2, 31);
        if(!equal(Class2,"player") || knifeammo[pTouched] >= get_cvar_num("amx_maxknifeammo")) return;

        if((knifeammo[pTouched] + holdammo[owner]) > get_cvar_num("amx_maxknifeammo")) {
            holdammo[owner] -= get_cvar_num("amx_maxknifeammo") - knifeammo[pTouched];
            knifeammo[pTouched] = get_cvar_num("amx_maxknifeammo");
            emit_sound(pToucher, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
        }
        else {
            knifeammo[pTouched] += holdammo[owner];
            emit_sound(pToucher, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
            remove_entity(pToucher);
        }
        client_print(pTouched, print_center, "В наличии: %i ножей",knifeammo[pTouched]);
    }

    else if(equal(Classname,"throwing_knife")) {
        check_cvars();
        if(is_user_alive(pTouched)) {
            new movetype = entity_get_int(pToucher, EV_INT_movetype);
            if(movetype == 0 && knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) {
                if(knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) knifeammo[pTouched] += 1;
                client_print(pTouched,print_center,"В наличии: %i ножей",knifeammo[pTouched]);
                emit_sound(pToucher, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
                remove_entity(pToucher);
            }
            else if (movetype != 0) {
                if(owner == pTouched) return;

                remove_entity(pToucher);

                if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(pTouched) == get_user_team(owner)) return;

                new pTdead[33];
                entity_set_float(pTouched, EV_FL_dmg_take, get_cvar_num("amx_knifedmg") * 1.0);

                if((get_user_health(pTouched) - get_cvar_num("amx_knifedmg")) <= 0) {
                    pTdead[pTouched] = 1;
                }
                else {
                    set_user_health(pTouched, get_user_health(pTouched) - get_cvar_num("amx_knifedmg"));
                }

                if(get_user_team(pTouched) == get_user_team(owner)) {
                    new name[33];
                    get_user_name(owner, name, charsmax(name));
                    client_print_color(0, 0, "^3[^4Knife^3] ^4%s ^1атаковал товарища^4! ^1Потому что ^3Гнида^1!", name);
                }

                emit_sound(pTouched, CHAN_ITEM, "weapons/knife_hit4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);

                if(pTdead[pTouched]) {
                    if(get_user_team(pTouched) == get_user_team(owner)) {
                        set_user_frags(owner, get_user_frags(owner) - 1);
                        client_print(owner,print_center,"You killed a teammate");
                    }
                    else {
                        set_user_frags(owner, get_user_frags(owner) + 1);
                    }

                    new gmsgScoreInfo = get_user_msgid("ScoreInfo");
                    new gmsgDeathMsg = get_user_msgid("DeathMsg");

                    set_msg_block(gmsgDeathMsg,BLOCK_ONCE);
                    set_msg_block(gmsgScoreInfo,BLOCK_ONCE);
                    user_kill(pTouched,1);

                    message_begin(MSG_ALL,gmsgScoreInfo);
                    write_byte(owner);
                    write_short(get_user_frags(owner));
                    write_short(get_user_deaths(owner));
                    write_short(0);
                    write_short(get_user_team(owner));
                    message_end();

                    message_begin(MSG_ALL,gmsgScoreInfo);
                    write_byte(pTouched);
                    write_short(get_user_frags(pTouched));
                    write_short(get_user_deaths(pTouched));
                    write_short(0);
                    write_short(get_user_team(pTouched));
                    message_end();

                    message_begin(MSG_ALL,gmsgDeathMsg,{0,0,0},0);
                    write_byte(owner);
                    write_byte(pTouched);
                    write_byte(0);
                    write_string("knife");
                    message_end();

                    new tknifelog[16]
                    if (get_cvar_num("amx_tknifelog")) tknifelog = "throwing_knife";
                    else tknifelog = "knife";

                    new namea[32], authida[35], teama[32];
                    new namev[32], authidv[35], teamv[32];
                    get_user_name(owner,        namea,         charsmax(namea));
                    get_user_authid(owner,        authida,     charsmax(authida));
                    get_user_team(owner,        teama,         charsmax(teama));
                    get_user_name(pTouched,        namev,         charsmax(namev));
                    get_user_authid(pTouched,    authidv,     charsmax(authidv));
                    get_user_team(pTouched,        teamv,         charsmax(teamv));

                    log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"", namea, get_user_userid(owner), authida, teama, namev, get_user_userid(pTouched), authidv, teamv, tknifelog);
                }
            }
        }
        else {
            entity_set_int(pToucher, EV_INT_movetype, 0);
            emit_sound(pToucher, CHAN_ITEM, "weapons/knife_hitwall1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
        }
    }
}

public command_knife(id) {

    if(!is_user_alive(id) || !get_cvar_num("amx_throwknives") || roundfreeze) return PLUGIN_HANDLED;

    if(get_cvar_num("amx_knifeautoswitch")) {
        knifeout[id] = true;
        client_cmd(id,"weapon_knife");
    }

    if(!knifeammo[id]) client_print(id,print_center,"У Вас закончились ножи", knifeammo[id]);
    if(!knifeout[id] || !knifeammo[id]) return PLUGIN_HANDLED;

    if(tossdelay[id] > get_gametime() - 0.5) return PLUGIN_HANDLED;
    else tossdelay[id] = get_gametime();

    knifeammo[id]--;

    if (knifeammo[id] == 1) {
        client_print(id, print_center, "В наличии: %i нож",knifeammo[id]);
    }
    else {
        client_print(id, print_center, "В наличии: %i ножей",knifeammo[id]);
    }

    new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent;

    entity_get_vector(id, EV_VEC_origin , Origin);
    entity_get_vector(id, EV_VEC_v_angle, vAngle);

    Ent = create_entity("info_target");

    if (!Ent) return PLUGIN_HANDLED;

    entity_set_string(Ent, EV_SZ_classname, "throwing_knife");
    entity_set_model(Ent, g_szModel[MODELS_KNIFE]);

    new Float:MinBox[3] = {-1.0, -7.0, -1.0};
    new Float:MaxBox[3] = {1.0, 7.0, 1.0};
    entity_set_vector(Ent, EV_VEC_mins, MinBox);
    entity_set_vector(Ent, EV_VEC_maxs, MaxBox);

    vAngle[0] -= 90;

    entity_set_origin(Ent, Origin);
    entity_set_vector(Ent, EV_VEC_angles, vAngle);

    entity_set_int(Ent, EV_INT_effects, 2);
    entity_set_int(Ent, EV_INT_solid, 1);
    entity_set_int(Ent, EV_INT_movetype, 6);
    entity_set_edict(Ent, EV_ENT_owner, id);

    VelocityByAim(id, get_cvar_num("amx_knifetossforce") , Velocity);
    entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
    
    return PLUGIN_HANDLED;
}

public admin_tknife(id,level,cid){

    new Access[16];
    get_cvar_string("amx_flagaccess", Access, charsmax(Access))
    if(!(checkAccess(id, Access))) {
        client_print_color(id, 0, "^3[^4Knife^3] ^3У Вас нет доступа к данной команде^4!");
        return PLUGIN_HANDLED;
    }

    new authid[35],name[32];
    get_user_authid(id,authid,34);
    get_user_name(id,name,31);

    if(get_cvar_num("amx_throwknives") == 0){
        set_cvar_num("amx_throwknives", 1);
        client_print_color(0, 0,"^3[^4Knife^3] ^1Администратор ^4Включил ^1метательные ножи");
        console_print(id, "[Knife] Вы Включили метание ножей");
        log_amx("Админ: ^"%s<%d><%s>^" Включил метательные ножи", name, get_user_userid(id), authid);
    }
    else {
        set_cvar_num("amx_throwknives", 0);
        client_print_color(0, 0,"^3[^4Knife^3] ^1Администратор ^4ВЫключил ^1метательные ножи");
        console_print(id,"[Knife] Вы Выключили метание ножей");
        log_amx("Админ: ^"%s<%d><%s>^" Выключил метательные ножи", name, get_user_userid(id), authid);
    }
    return PLUGIN_HANDLED;
}

LOAD_CONFIGURATION()
{
    new szCfgDir[128], szCfgFile[128];
    get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
    formatex(szCfgFile, charsmax(szCfgFile), "%s/SevCorp/ThrowingKnives.cfg", szCfgDir);
    if(!file_exists(szCfgFile)) {
        new szError[100];
        formatex(szError, charsmax(szError), "Отсутсвтует: %s!", szCfgFile);
        set_fail_state(szError);
        return;
    }
    new szBuffer[128], szKey[64], szValue[960];
    new iFile = fopen(szCfgFile, "rt");
    while(iFile && !feof(iFile)) {
        fgets(iFile, szBuffer, charsmax(szBuffer));
        replace(szBuffer, charsmax(szBuffer), "^n", "");
        if(!szBuffer[0] || szBuffer[0] == ';' || szBuffer[0] == '{' || szBuffer[0] == '}' || szBuffer[0] == '#' || szBuffer[0] == '[' || szBuffer[0] == ']') continue;
        parse(szBuffer, szKey, charsmax(szKey), szValue, charsmax(szValue));
        trim(szKey);
        trim(szValue);
        if(equal(szKey,    "MODELS_KNIFE"))    formatex(g_szModel[MODELS_KNIFE],    charsmax(g_szModel[]), szValue);
    }
    fclose(iFile);
    PRECACHE_MODELS();
}

PRECACHE_MODELS()
{
    new i, szBuffer[64];
    for(i = 0; i < sizeof(g_szModel); i++) {
        formatex(szBuffer, charsmax(szBuffer), "%s", g_szModel[i]);
        engfunc(EngFunc_PrecacheModel, szBuffer);
    }
}

checkAccess(id, const flags[]) {
    return (get_user_flags(id) & read_flags(flags));
}
 

Вложения

NeTvoyKenji

Пользователь
Регистрация
27 Мар 2019
Сообщения
423
Симпатии
47
, Шелл, ты форумы перепутал :D
 

D1m0n41k

Пользователь
Регистрация
18 Дек 2017
Сообщения
61
Симпатии
5
, из попыток у него было только то, что он написал Скальпелю, и написал Архитектору. И выяснилось что проблема в амулете от скальпеля. Но как оказалось, Скальпель съехал с темы и не стал ничего исправлять в своем плагине. Тогда данный пользователь, не получив поддержку ни у Скальпеля ни у Архитектора пришел к Вам сюда.
В чем суть моего сообщения?...
В том, что Вы умные люди, и понимаете что никто кроме Скальпеля не сможет это поправить. Но пользователь, как я понимаю, не хочет принимать данный ответ. Может быть тут смогут ему внятно объяснить?
 

present

Пользователь
Регистрация
27 Сен 2017
Сообщения
87
Симпатии
-73
, из попыток у него было только то, что он написал Скальпелю, и написал Архитектору. И выяснилось что проблема в амулете от скальпеля. Но как оказалось, Скальпель съехал с темы и не стал ничего исправлять в своем плагине. Тогда данный пользователь, не получив поддержку ни у Скальпеля ни у Архитектора пришел к Вам сюда.
В чем суть моего сообщения?...
В том, что Вы умные люди, и понимаете что никто кроме Скальпеля не сможет это поправить. Но пользователь, как я понимаю, не хочет принимать данный ответ. Может быть тут смогут ему внятно объяснить?
[ 30] ReTalisman 1.4.2 gyxoBka ReTalisman.amxx running
Причем тут скальпель?
 

D1m0n41k

Пользователь
Регистрация
18 Дек 2017
Сообщения
61
Симпатии
5
present, может я и ошибаюсь, но точно такой же вопрос был задана тут:

Где пользователь указал что проблема именно с плагином скальпеля
 

present

Пользователь
Регистрация
27 Сен 2017
Сообщения
87
Симпатии
-73
present, может я и ошибаюсь, но точно такой же вопрос был задана тут:

Где пользователь указал что проблема именно с плагином скальпеля
Ну и что дальше то? Плагин ножей скальпель пофиксил свой, в данной теме ни в ножах ни в талисмане автором скальпель не указан.
 

D1m0n41k

Пользователь
Регистрация
18 Дек 2017
Сообщения
61
Симпатии
5
present, вопросы одинаковые. И дело не в ножах, а в талисмане.
То, что я не увидел что тут о другом плагине речь, каюсь. Но и Вы читайте внимательнее, о чем речь идет.
 

present

Пользователь
Регистрация
27 Сен 2017
Сообщения
87
Симпатии
-73
present, вопросы одинаковые. И дело не в ножах, а в талисмане.
То, что я не увидел что тут о другом плагине речь, каюсь. Но и Вы читайте внимательнее, о чем речь идет.
А я все внимательно прочитал и не утверждал ничего, всего лишь вас поправил с неверным выводом, что проблема в плагинах скальпеля.
 

D1m0n41k

Пользователь
Регистрация
18 Дек 2017
Сообщения
61
Симпатии
5
present, я покаился :p[DOUBLEPOST=1576138474][/DOUBLEPOST]покаялся*
 
K

kapangaIII

В общем не понятно что за 'амулет' и как он работает тоже. Тема бессмысленна без обоих плагинов.
 

DURILKA

Пользователь
Регистрация
2 Сен 2017
Сообщения
131
Симпатии
15
Пол
Мужской
В общем не понятно что за 'амулет' и как он работает тоже. Тема бессмысленна без обоих плагинов.
Объясню, раз уж так не понятно, что за амулет. Одному игроку из всех играющих, выдается в начале раунда листочек со смехом. Он по одному ХП пополняет до определенного значения.
А промблема у меня в том, что ножики в плагине который я представил, не пролетают сквозь этот листочек. То бешь, нельзя ни зарезать метнувшим ножом игрока с листочком, и он в свою очередь не может выкинуть ножик. Как будто он застряет.
Почему я упомянул скальпеля? Да потому как привел пример. Что у него есть идентичный плагин, которым я пользовался до того момента, пока не увидел тот который я предоставил выше. И пока я им пользовался, я просил его решить промблему с застряванием ножа в листе.
 

Vaqtincha

aggressive
Разработчик
Скриптер
Регистрация
28 Янв 2018
Сообщения
962
Симпатии
684
Пол
Мужской
исходник плагина "амулета" есть ?
 

DURILKA

Пользователь
Регистрация
2 Сен 2017
Сообщения
131
Симпатии
15
Пол
Мужской

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский

fantom

Разработчик
Регистрация
11 Июн 2017
Сообщения
426
Симпатии
293
Пол
Мужской
DURILKA, а как вы хотите решить проблему без исходника?
 
Сверху Снизу