Помогите фиксануть 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
Сообщения
963
Симпатии
685
Пол
Мужской
исходник плагина "амулета" есть ?
 

DURILKA

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

perfectblood0

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

fantom

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