[ HOT ] Урон с ножа

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
1,480
Реакции
1,476
Помог
2 раз(а)
Ошибка
[AMXX] Displaying debug trace (plugin "svinorez.amxx", version "6.1")
[AMXX] Run time error 4: index out of bounds
[AMXX] [0] svinorez.sma::ham_player_takedamage_pre (line 404)
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5263
Билд
ReHLDS version: 3.8.0.702-dev
Build date: 18:22:55 Nov 8 2020 (2402)
ReGamedll
ReGameDLL version: 5.19.0.486-dev
Build date: 13:14:53 Dec 5 2020
Версия Metamod
Metamod-r v1.3.0.128, API (5:13)
Metamod-r build: 17:47:54 Aug 24 2018
Список метамодулей
[ 1] SafeNameAndChat  RUN   -    SafeNameAndChat.so        v1.1             ini  ANY   ANY  
[ 2] Reunion RUN - reunion_mm_i386.so v0.1.0.92 ini Start Never
[ 3] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 4] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC5 ini ANY ANY
[ 5] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 6] WHBlocker RUN - whblocker_mm_i386.so v1.5.697 ini Chlvl ANY
[ 7] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 8] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5263 ini Start ANY
[ 9] ReAPI RUN - reapi_amxx_i386.so v5.16.0.198-dev pl8 ANY Never
[10] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[11] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[12] Fun RUN - fun_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[13] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
[14] Engine RUN - engine_amxx_i386.so v1.9.0.5263 pl8 ANY ANY
14 plugins, 14 running
Список плагинов
name                    version     author            file             status   
[ 1] Admin Commands 1.9.0.5263 AMXX Dev Team admincmd.amxx running
[ 2] Slots Reservation 1.9.0.5263 AMXX Dev Team adminslots.amxx running
[ 3] Players Menu 1.7 neugomon players_menu.am running
[ 4] Maps Menu 1.4.1 neugomon mapsmenu.amxx running
[ 5] Menus Front-End 1.9.0.5263 AMXX Dev Team menufront.amxx running
[ 6] Commands Menu 1.9.0.5263 AMXX Dev Team cmdmenu.amxx running
[ 7] Admin Chat 1.9.0.5263 AMXX Dev Team adminchat.amxx running
[ 8] Admin Votes 1.9.0.5263 AMXX Dev Team adminvote.amxx running
[ 9] Svinorez 6.1 Sanya@ (Skype: a svinorez.amxx debug
9 plugins, 9 running
Автор плагина
Sanya@
Версия плагина
6.1
Исходный код
#define VERSION    "6.1"
//тХФтХРтХРтХЧтФАтХФтХЧтХФтХЧтФАтФАтХФтХРтХРтХЧтХФтХРтХРтХЧтХФтХЧтФАтХФтХЧтХФтХЧтХФтХЧтХФтХРтХРтХЧ
//тХСтХФтХЧтХСтФАтХСтХСтХСтХСтФАтФАтХСтХФтХРтХЭтХСтХФтХЧтХСтХСтХЪтХРтХЭтХСтХСтХСтХСтХСтХСтХФтХЧтХС
//тХСтХЪтХЭтХЪтХЧтХСтХЪтХЭтХСтФАтФАтХСтХЪтХРтХЧтХСтХЪтХЭтХСтХСтХФтХЧтФАтХСтХСтХЪтХЭтХСтХСтХЪтХЭтХС
//тХСтХФтХРтХЧтХСтХЪтХРтХЧтХСтФАтФАтХЪтХРтХЧтХСтХСтХФтХЧтХСтХСтХСтХЪтХЧтХСтХЪтХРтХЧтХСтХСтХФтХЧтХС
//тХСтХЪтХРтХЭтХСтФАтХФтХЭтХСтФАтФАтХФтХРтХЭтХСтХСтХСтХСтХСтХСтХСтФАтХСтХСтФАтХФтХЭтХСтХСтХСтХСтХС
//тХЪтХРтХРтХРтХЭтФАтХЪтХРтХЭтФАтФАтХЪтХРтХРтХЭтХЪтХЭтХЪтХЭтХЪтХЭтФАтХЪтХЭтФАтХЪтХРтХЭтХЪтХЭтХЪтХЭ
//

#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
#include <hamsandwich>
#include <fun>
#include <colorchat>
#include <strip_weapon>
#include <reapi>


#define PLUGIN "Svinorez"
#define AUTHOR "Sanya@ (Skype: admin-zombarik)"

#define DMG_KNIFE ( DMG_NEVERGIB | DMG_BULLET )
#define CHAT_PREFIX "[╨б╨▓╨╕╨╜╨╛╤А╨╡╨╖]"

#define CFG_CVAR_MAIN "svinorez.cfg" //╤Д╨░╨╣╨╗ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕

#define SVINOREZ_MODEL_NAME_T "PigMen" //╨╜╨░╨╖╨▓╨░╨╜╨╕╨╡ ╨╝╨╛╨┤╨╡╨╗╨╕ ╨╕╨│╤А╨╛╨║╨░ T (╨┤╨╛╨╗╨╢╨╜╨░ ╨╗╨╡╨╢╨░╤В╤М ╨▓ models/player/NAME/NAME.mdl)
#define SVINOREZ_MODEL_NAME_CT "PigMenC" //╨╜╨░╨╖╨▓╨░╨╜╨╕╨╡ ╨╝╨╛╨┤╨╡╨╗╨╕ ╨╕╨│╤А╨╛╨║╨░ CT (╨┤╨╛╨╗╨╢╨╜╨░ ╨╗╨╡╨╢╨░╤В╤М ╨▓ models/player/NAME/NAME.mdl)

#define SVINOREZ_PATHMODEL_KNIFE "models/j_knife.mdl" //╨╝╨╛╨┤╨╡╨╗╤М ╨╗╨╡╤В╤П╤Й╨╡╨│╨╛ ╨╜╨╛╨╢╨░
#define SVINOREZ_PATHMODEL_KNIFE_V "models/eq/spring/weapon/v_knife_m9s.mdl" //╨┐╤Г╤В╤М ╨║ ╨╝╨╛╨┤╨╡╨╗╨╕ V_
#define SVINOREZ_PATHMODEL_KNIFE_P "models/eq/spring/weapon/p_knife_m9s.mdl" //╨┐╤Г╤В╤М ╨║ ╨╝╨╛╨┤╨╡╨╗╨╕ P_

#define SVINOREZ_SOUND_KILLS "sound/MVP/Svinorezz.mp3" //*.mp3 ╨┐╤А╨╕ ╤Г╨▒╨╕╨╣╤Б╤В╨▓╨╡ ╤Б╨▓╨╕╨╜╨╛╤А╨╡╨╖╨╛╨╝
#define SVINOREZ_SOUND_START "sound/MVP/Svinorezz.mp3" //*.mp3 ╨║╨╛╨│╨┤╨░ ╨║╤В╨╛-╤В╨╛ ╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М╤Б╤П ╤Б╨▓╨╕╨╜╨╛╤А╨╡╨╖╨╛╨╝

#define SVINOREZ_KNIFE_CLASSMANE "throwing_knife"

enum (+=100)
{
TASK_CVAR_UPDATE_ID = 700
}

new
bool:player_alive[33],
bool:player_in_server[33],

player_svinorez[33],
player_svinorez_was[33],
player_knife_count[33],
attacker_damage_bits[33],

Float:player_knife_delay[33];

new
const
WEAPON_CLASSNAME[][] =
{
"weapon_p228","weapon_scout","weapon_xm1014","weapon_mac10","weapon_aug","weapon_elite","weapon_fiveseven","weapon_ump45","weapon_sg550","weapon_galil","weapon_famas","weapon_usp","weapon_glock18","weapon_awp","weapon_mp5navy","weapon_m249","weapon_m3","weapon_m4a1","weapon_tmp","weapon_g3sg1","weapon_deagle","weapon_sg552","weapon_ak47","weapon_p90", "weapon_hegrenade", "weapon_smokegrenade", "weapon_flashbang"
};

new
cvar_svinorez_armor_id,
cvar_svinorez_health_id,
cvar_svinorez_speed_id,
cvar_svinorez_dmg_id,
cvar_svinorez_knife_speed_id,
cvar_svinorez_knife_dmg_id,
cvar_svinorez_knife_count_id,
cvar_svinorez_knife_delay_id,
cvar_svinorez_dmg_t4_id,

cvar_svinorez_knife_count_value,
cvar_svinorez_knife_speed_value,
cvar_svinorez_dmg_t4_value,
Float:cvar_svinorez_knife_dmg_value,
Float:cvar_svinorez_knife_delay_value,

cvar_svinorez_armor_value,
cvar_svinorez_health_value,
Float:cvar_svinorez_speed_value,
Float:cvar_svinorez_dmg_value;


public plugin_init()
{
//╨а╨╡╨│╨╕╤Б╤В╤А╨░╤Ж╨╕╤П ╨┐╨╗╨░╨│╨╕╨╜╨░ ╨▓ ╤Б╨╕╤Б╤В╨╡╨╝╨╡
register_plugin(PLUGIN, VERSION, AUTHOR);

//RegisterHam(Ham_TakeDamage, "player", "ham_player_takedamage_pre", false);
//RegisterHam(Ham_Killed, "player", "ham_player_killed_post", true);
//RegisterHam(Ham_Spawn, "player", "ham_player_spawn_post", true);
//RegisterHam(Ham_AddPlayerItem, "player", "ham_add_player_item_pre", false);

RegisterHookChain(RG_CBasePlayer_Spawn, "ham_player_spawn_post", true);
RegisterHookChain(RG_CBasePlayer_Killed, "ham_player_killed_post", true);
RegisterHookChain(RG_CBasePlayer_TakeDamage, "ham_player_takedamage_pre", false);
RegisterHookChain(RG_CBasePlayer_AddPlayerItem, "ham_add_player_item_pre", false);

register_touch("weaponbox", "", "touch_weaponbox");

cvar_svinorez_armor_id = register_cvar("cvar_svinorez_armor", "200");
cvar_svinorez_health_id = register_cvar("cvar_svinorez_health", "200");
cvar_svinorez_speed_id = register_cvar("cvar_svinorez_speed", "400");
cvar_svinorez_dmg_id = register_cvar("cvar_svinorez_dmg", "21.0");
cvar_svinorez_knife_speed_id = register_cvar("cvar_svinorez_knife_speed", "700");
cvar_svinorez_knife_dmg_id = register_cvar("cvar_svinorez_knife_dmg", "100");
cvar_svinorez_knife_count_id = register_cvar("cvar_svinorez_knife_count", "5");
cvar_svinorez_knife_delay_id = register_cvar("cvar_svinorez_knife_delay", "5.0");
cvar_svinorez_dmg_t4_id = register_cvar("cvar_svinorez_knife_dgm_touch", "25");

register_clcmd("drop", "throw_knife");
register_clcmd("pigmenknife", "throw_knife");

register_event("HLTV", "event_new_round", "a", "1=0", "2=0");
register_event("CurWeapon", "event_curweapon", "be","1=1");

register_think(SVINOREZ_KNIFE_CLASSMANE, "throwing_knife_think");
register_touch(SVINOREZ_KNIFE_CLASSMANE, "", "throwing_knife_touch");

set_task(1.0, "task_cvar_value", TASK_CVAR_UPDATE_ID, _, _, "b");
}

public plugin_precache()
{
new model_path[128];

formatex(model_path, charsmax(model_path), "models/player/%s/%s.mdl", SVINOREZ_MODEL_NAME_T, SVINOREZ_MODEL_NAME_T);
precache_model(model_path);

formatex(model_path, charsmax(model_path), "models/player/%s/%s.mdl", SVINOREZ_MODEL_NAME_CT, SVINOREZ_MODEL_NAME_CT);
precache_model(model_path);

precache_model(SVINOREZ_PATHMODEL_KNIFE);
precache_model(SVINOREZ_PATHMODEL_KNIFE_V);
precache_model(SVINOREZ_PATHMODEL_KNIFE_P);

precache_generic(SVINOREZ_SOUND_KILLS);
precache_generic(SVINOREZ_SOUND_START);
//precache_sound(SVINOREZ_SOUND_KILLS);
}

public plugin_cfg()
{
new cfgdir[64];

get_configsdir(cfgdir, charsmax(cfgdir));

server_cmd("exec %s/%s", cfgdir, CFG_CVAR_MAIN);
}

public client_putinserver(player_id)
{
player_in_server[player_id] = true;

player_knife_count[player_id] = cvar_svinorez_knife_count_value;
player_knife_delay[player_id] = 0.0;
player_svinorez[player_id] = 0;
}

public client_disconnected(player_id)
{
player_alive[player_id] = false;
player_in_server[player_id] = false;

reset_svinorez(player_id);
}

public client_PreThink(player_id)
{
if(player_svinorez[player_id])
fm_set_user_maxspeed(player_id, cvar_svinorez_speed_value);
}

public event_new_round()
{
for(new i = 1; i < 33; i++)
{
//if(get_player_status(i))
//cs_reset_user_model(i);

player_knife_count[i] = cvar_svinorez_knife_count_value;
player_knife_delay[i] = 0.0;
//player_svinorez[i] = 0;
}

remove_entity_name(SVINOREZ_KNIFE_CLASSMANE);
}

public event_curweapon(player_id)
{
static weapon_id;

weapon_id = read_data(2);

if (weapon_id == CSW_KNIFE && player_svinorez[player_id])
{
set_pev(player_id, pev_viewmodel, engfunc(EngFunc_AllocString, SVINOREZ_PATHMODEL_KNIFE_V));
set_pev(player_id, pev_weaponmodel, engfunc(EngFunc_AllocString, SVINOREZ_PATHMODEL_KNIFE_P));
}

return PLUGIN_CONTINUE;
}

public task_cvar_value()
{
cvar_svinorez_knife_speed_value = get_pcvar_num(cvar_svinorez_knife_speed_id);
cvar_svinorez_knife_dmg_value = get_pcvar_float(cvar_svinorez_knife_dmg_id);
cvar_svinorez_knife_count_value = get_pcvar_num(cvar_svinorez_knife_count_id);
cvar_svinorez_knife_delay_value = get_pcvar_float(cvar_svinorez_knife_delay_id);

cvar_svinorez_armor_value = get_pcvar_num(cvar_svinorez_armor_id);
cvar_svinorez_health_value = get_pcvar_num(cvar_svinorez_health_id);
cvar_svinorez_speed_value = get_pcvar_float(cvar_svinorez_speed_id);
cvar_svinorez_dmg_value = get_pcvar_float(cvar_svinorez_dmg_id);
cvar_svinorez_dmg_t4_value = get_pcvar_num(cvar_svinorez_dmg_t4_id);
}

public throw_knife(player_id)
{
if(get_player_status(player_id) == 2 && player_svinorez[player_id])
{
if(player_knife_count[player_id] <= 0)
{
client_print_color(player_id, RED, "^4%s ^1╨Т╤Л ╨▓╤Л╨▒╤А╨╛╤Б╨╕╨╗╨╕ ╨╝╨░╨║╤Б╨╕╨╝╤Г╨╝ ╨╜╨╛╨╢╨╡╨╣! ╨б╨╛╨▒╨╡╤А╨╕╤В╨╡ ╨╕╤Е!", CHAT_PREFIX);
return PLUGIN_HANDLED;
}

if(player_knife_delay[player_id] > halflife_time())
{
client_print(player_id, print_center, "╨Я╨╡╤А╨╡╨╖╨░╤А╤П╨┤╨║╨░ ╨▒╤А╨╛╤Б╨║╨░ ╨╡╤Й╤С %.2f ╤Б╨╡╨║.", (player_knife_delay[player_id]-halflife_time()));
return PLUGIN_HANDLED;
}

new knife_id = fm_create_entity("info_target");
if(knife_id)
{
player_knife_delay[player_id] = halflife_time()+cvar_svinorez_knife_delay_value;
player_knife_count[player_id]--;

set_pev(knife_id, pev_classname, SVINOREZ_KNIFE_CLASSMANE);
set_pev(knife_id, pev_owner, player_id);
set_pev(knife_id, pev_team, get_player_team(player_id));

new player_origin[3], Float:player_origin_f[3], Float:knife_origin[3], Float:knife_velocity[3], Float:player_angles[3];

get_user_origin(player_id, player_origin, 2);

IVecFVec(player_origin, player_origin_f);

pev(player_id, pev_origin, player_origin_f);
pev(player_id, pev_angles, player_angles);

knife_origin[0] = player_origin_f[0];
knife_origin[1] = player_origin_f[1];
knife_origin[2] = player_origin_f[2];

knife_origin[2] += 15.0;

set_pev(knife_id, pev_origin, knife_origin);

engfunc(EngFunc_SetModel, knife_id, SVINOREZ_PATHMODEL_KNIFE);
engfunc(EngFunc_SetSize, knife_id, Float:{-4.0, -4.0, -4.0}, Float:{4.0, 4.0, 4.0});

set_pev(knife_id, pev_solid, SOLID_TRIGGER);
set_pev(knife_id, pev_movetype, MOVETYPE_FLY);
set_pev(knife_id, pev_takedamage, DAMAGE_NO);

velocity_by_aim(player_id, cvar_svinorez_knife_speed_value, knife_velocity);

set_pev(knife_id, pev_velocity, knife_velocity);
set_pev(knife_id, pev_angles, player_angles);

set_pev(knife_id, pev_vuser4, knife_velocity);
set_pev(knife_id, pev_fuser4, (halflife_time() + 1.0));

set_entity_animation(knife_id, 1, 1);

if(get_player_team(player_id) == 2)
set_rendering(knife_id, kRenderFxGlowShell, 0,0,255, kRenderNormal, 25);
else
set_rendering(knife_id, kRenderFxGlowShell, 255,0,0, kRenderNormal, 25);

set_pev(knife_id, pev_nextthink, (halflife_time() + 0.05));
}
}

return PLUGIN_CONTINUE;
}

public throwing_knife_think(knife_id)
{
if(pev_valid(knife_id) != 2)
return PLUGIN_HANDLED;

static owner_id, Float:knife_velocity[3], Float:knife_velocity_start[3];

owner_id = pev(knife_id, pev_owner);

pev(knife_id, pev_velocity, knife_velocity);
pev(knife_id, pev_vuser4, knife_velocity_start);

if(knife_velocity[0] || knife_velocity[1] || knife_velocity[2])
{
if(knife_velocity[0] != knife_velocity_start[0] || knife_velocity[1] != knife_velocity_start[1] || knife_velocity[2] != knife_velocity_start[2])
{
set_entity_animation(knife_id);

set_pev(knife_id, pev_movetype, MOVETYPE_NONE);
set_pev(knife_id, pev_velocity, Float:{0.0, 0.0, 0.0});
}
}

if(!player_alive[owner_id] || get_player_team(owner_id) != pev(knife_id, pev_team))
set_pev(knife_id, pev_flags, pev(knife_id,pev_flags) | FL_KILLME);
else
set_pev(knife_id, pev_nextthink, (halflife_time() + 0.01));

return PLUGIN_CONTINUE;
}

public throwing_knife_touch(knife_id, player_id)
{
if(pev(knife_id, pev_owner) == player_id && pev(knife_id, pev_fuser4) > halflife_time())
return PLUGIN_HANDLED;

set_entity_animation(knife_id);

new
owner_id = pev(knife_id, pev_owner),
owner_team_id = pev(knife_id, pev_team);

if(get_player_status(player_id) == 2)
{
if(get_player_team(player_id) == owner_team_id && owner_id != player_id)
return PLUGIN_HANDLED;

if(!get_speed(knife_id))
{
if(pev(knife_id, pev_iuser3) < get_systime() && get_player_team(player_id) != owner_team_id)
{
set_pev(knife_id, pev_iuser3, get_systime()+1);

emit_sound(player_id, CHAN_VOICE, "weapons/xbow_hitbod1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

take_damage(player_id, owner_id, knife_id, cvar_svinorez_dmg_t4_value, "knife");
}
else if(owner_id == player_id && owner_team_id == get_player_team(player_id))
{
set_pev(knife_id, pev_flags, pev(knife_id,pev_flags) | FL_KILLME);

emit_sound(player_id, CHAN_VOICE, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

client_print_color(player_id, RED, "^4%s ^1╨Т╤Л ╨┐╨╛╨┤╨╛╨▒╤А╨░╨╗╨╕ ╨╜╨╛╨╢╨╡!", CHAT_PREFIX);

player_knife_count[player_id]++;
}
}
else
if(owner_id != player_id && owner_team_id != get_player_team(player_id))
take_damage(player_id, owner_id, knife_id, floatround(cvar_svinorez_knife_dmg_value), "knife");
}

//set_pev(knife_id, pev_flags, pev(knife_id,pev_flags) | FL_KILLME);

return PLUGIN_CONTINUE;
}

public touch_weaponbox(entity_id, player_id)
{
if(pev_valid(entity_id) != 2)
return PLUGIN_HANDLED;

static weapon_model[36];

pev(entity_id, pev_model, weapon_model, charsmax(weapon_model));

if(player_id > 0 && player_id < 33 && player_svinorez[player_id] && !equal(weapon_model, "models/w_backpack.mdl"))
return PLUGIN_HANDLED;

return PLUGIN_CONTINUE;
}

public ham_add_player_item_pre(player_id, weapon_id)
{
if(get_player_status(player_id) == 2 && player_svinorez[player_id])
{
new weapon_name[36];
pev(weapon_id, pev_classname, weapon_name, charsmax(weapon_name));

if(!equal(weapon_name, "weapon_c4"))
{
set_pev(weapon_id, pev_flags, pev(weapon_id,pev_flags) | FL_KILLME);

return HC_SUPERCEDE;
}
}
return HC_CONTINUE;
}

public ham_player_takedamage_pre(victim_id, inflictor, attacker_id, Float:damage, damage_bits)
{
attacker_damage_bits[attacker_id] = damage_bits;

if(attacker_id != victim_id && get_player_status(attacker_id))
{
if(player_svinorez[attacker_id])
SetHookChainArg(4, ATYPE_FLOAT, damage * cvar_svinorez_dmg_value)
//SetHamParamFloat(4, damage*cvar_svinorez_dmg_value);
}
}

public ham_player_killed_post(victim_id, attacker_id)
{
if(attacker_id != victim_id && get_player_status(attacker_id))
{
if(get_user_weapon(attacker_id) == CSW_KNIFE && (attacker_damage_bits[attacker_id] & DMG_KNIFE))
{
if(player_svinorez[victim_id])
reset_svinorez(victim_id);

if(!player_svinorez[attacker_id])
{
new attacker_name[35], attacker_team = get_player_team(attacker_id);

//reset_svinorez(0, attacker_team);

client_cmd(0,"mp3 play %s", SVINOREZ_SOUND_START);

get_user_name(attacker_id, attacker_name, charsmax(attacker_name))
client_print_color(0, (attacker_team == 1 ? RED : BLUE), "^4%s ^1╨Ш╨│╤А╨╛╨║ ^3%s ^1╤Б╤В╨░╨╗ ╨б╨▓╨╕╨╜╨╛╤А╨╡╨╖╨╛╨╝! O_O", CHAT_PREFIX, attacker_name);

player_knife_count[attacker_id] = cvar_svinorez_knife_count_value;

strip_all_weapon(attacker_id);

fm_give_item(attacker_id, "weapon_knife");

cs_set_user_model(attacker_id, (get_player_team(attacker_id) == 1 ? SVINOREZ_MODEL_NAME_T : SVINOREZ_MODEL_NAME_CT));

set_user_footsteps(attacker_id, 1);

fm_set_user_armor(attacker_id, cvar_svinorez_armor_value);
fm_set_user_health(attacker_id, cvar_svinorez_health_value);

player_svinorez[attacker_id] = attacker_team;
player_svinorez_was[attacker_id] = attacker_team;

set_pev(attacker_id, pev_viewmodel, engfunc(EngFunc_AllocString, SVINOREZ_PATHMODEL_KNIFE_V));
set_pev(attacker_id, pev_weaponmodel, engfunc(EngFunc_AllocString, SVINOREZ_PATHMODEL_KNIFE_P));
}
}
else if(player_svinorez[attacker_id])
client_cmd(0,"mp3 play %s", SVINOREZ_SOUND_KILLS);
}

player_alive[victim_id] = false;
}

public ham_player_spawn_post(player_id)
{
player_alive[player_id] = true;

if(player_svinorez_was[player_id] && !player_svinorez[player_id])
{
player_knife_count[player_id] = cvar_svinorez_knife_count_value;

//set_pev(player_id, pev_viewmodel, engfunc(EngFunc_AllocString, "models/v_knife.mdl"));
//set_pev(player_id, pev_weaponmodel, engfunc(EngFunc_AllocString, "models/p_knife.mdl"));

player_svinorez_was[player_id] = 0;

//fm_give_item(player_id, (get_player_team(player_id) == 1 ? "weapon_glock18" : "weapon_usp"));
}
else if(player_svinorez[player_id])
{
strip_weapons(player_id,1);
strip_weapons(player_id,2);

ham_give_weapon(player_id, "weapon_knife");

fm_set_user_armor(player_id, cvar_svinorez_armor_value);
fm_set_user_health(player_id, cvar_svinorez_health_value);
}
}

stock ham_give_weapon(const player_id, const classname[])
{
if(!equal(classname, "weapon_", 7)) return 0;

static entity_id;

entity_id = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString, classname));
if(pev_valid(entity_id) != 2) return 0;

set_pev(entity_id, pev_spawnflags, SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, entity_id);

if(!ExecuteHam(Ham_AddPlayerItem, player_id, entity_id))
{
if(pev_valid(entity_id) == 2)
set_pev(entity_id,pev_flags,pev(entity_id,pev_flags) | FL_KILLME);
//remove_entity(entity_id);

return 0;
}

ExecuteHam(Ham_Item_AttachToPlayer, entity_id, player_id);
return entity_id;
}

reset_svinorez(player_id = 0, team = 0, stats = 0)
{
if(player_id)
{
player_svinorez[player_id] = 0;
player_knife_count[player_id] = cvar_svinorez_knife_count_value;
player_knife_delay[player_id] = 0.0;

if(get_player_status(player_id))
{
cs_reset_user_model(player_id);

set_pev(player_id, pev_viewmodel, engfunc(EngFunc_AllocString, "models/v_knife.mdl"));
set_pev(player_id, pev_weaponmodel, engfunc(EngFunc_AllocString, "models/p_knife.mdl"));

if(stats)
{
fm_set_user_armor(player_id, 100);
fm_set_user_health(player_id, 100);
}

set_user_footsteps(player_id, 0);
}

new find_ent_id = FM_NULLENT;

while((find_ent_id = find_ent_by_owner(find_ent_id, SVINOREZ_KNIFE_CLASSMANE, player_id)))
set_pev(find_ent_id, pev_flags, pev(find_ent_id,pev_flags) | FL_KILLME);
}
else
{
for(new i = 1; i < 33; i++)
{
if(!get_player_status(i))
continue;

set_pev(i, pev_viewmodel, engfunc(EngFunc_AllocString, "models/v_knife.mdl"));
set_pev(i, pev_weaponmodel, engfunc(EngFunc_AllocString, "models/p_knife.mdl"));

if(team)
{
if(player_svinorez[i] == team)
{
player_svinorez[i] = 0;
player_knife_count[i] = cvar_svinorez_knife_count_value;
player_knife_delay[i] = 0.0;

cs_reset_user_model(i);

set_user_footsteps(i, 0);
}
}
else
{
player_svinorez[i] = 0;
player_knife_count[i] = cvar_svinorez_knife_count_value;
player_knife_delay[i] = 0.0;

cs_reset_user_model(i);

set_user_footsteps(i, 0);
}

if(stats)
{
fm_set_user_armor(i, 100);
fm_set_user_health(i, 100);
}
}
}
}

strip_all_weapon(player_id)
{
for(new i = 0; i < sizeof WEAPON_CLASSNAME; i++)
ham_strip_weapon(player_id, WEAPON_CLASSNAME[i]);
}

// 0 - ╨╜╨╡╤В ╤В╨░╨║╨╛╨│╨╛ ╨╕╨│╤А╨╛╨║╨░
// 1 - ╨╕╨│╤А╨╛╨║ ╨╜╨░ ╤Б╨╡╤А╨▓╨╡╤А╨╡
// 2 - ╨╕╨│╤А╨╛╨║ ╨╜╨░ ╤Б╨╡╤А╨▓╨╡╤А╨╡ ╨╕ ╨╢╨╕╨▓
get_player_status(const player_id)
{
if(0 < player_id < 33)
{
if(player_in_server[player_id])
{
if(player_alive[player_id])
return 2;
return 1;
}
}
return 0;
}

// 0 - ╤Б╨┐╨╡╨║╤А╤В╤Л
// 1 - ╤Д╨╛╤А╤Л
// 2 - ╤В╨╡╤А╤А╤Л
get_player_team(const player_id)
{
if(player_in_server[player_id])
{
switch(cs_get_user_team(player_id))
{
case CS_TEAM_T:
return 1;
case CS_TEAM_CT:
return 2;
}
}
return 0;
}

//╨б╨▓╨╛╤П ╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨╜╨░╨╜╨╡╤Б╨╡╨╜╨╕╤П ╤Г╤А╨╛╨╜╨░
stock take_damage(const victim_id, const attacker_id, const inflictor_id, const damage, const weapon[], const money = 300, &killed = 0)
{
static
is_player,
victim_hp_next,
msg_scoreinfo_id,
msg_deathmsg_id;

is_player = get_player_status(victim_id);

killed = 0;

if(is_player == 2 || (!is_player && pev_valid(victim_id) == 2))
{
if(!msg_scoreinfo_id || !msg_deathmsg_id)
{
msg_scoreinfo_id = get_user_msgid("ScoreInfo");
msg_deathmsg_id = get_user_msgid("DeathMsg");
}

victim_hp_next = (!is_player ? pev(victim_id, pev_health)-damage : get_user_health(victim_id)-damage);

if(victim_hp_next <= 0)
{
// ╨з╨╡╨╝ ╨▒╤Л╨╗ ╤Г╨▒╨╕╨╗
set_pev(victim_id, pev_dmg_inflictor, inflictor_id);

// ╨Т╤Л╨┤╨░╨╡╨╝ ╨┤╨╡╨╜╤М╨│╨╕ ╨╖╨░ ╤Г╨▒╨╕╨╣╤Б╤В╨▓╨╛
cs_set_user_money(attacker_id, (cs_get_user_money(attacker_id)+money), 1);

// ╨Х╤Б╨╗╨╕ ╨╢╨╡╤А╤В╨▓╨░ ╨╛╨▒╤К╨╡╨║╤В
if(!is_player)
{
killed = 1;

ExecuteHamB(Ham_TakeDamage, victim_id, 0, attacker_id, float(damage), DMG_BULLET);

}
else
{
message_begin(MSG_BROADCAST, msg_deathmsg_id);
{
write_byte(attacker_id); // ╨░╤В╤В╨░╨║╤Г╤О╤Й╨╕╨╣
write_byte(victim_id); // ╨╢╨╡╤А╤В╨▓╨░
write_byte(0); // ╤Г╨▒╨╕╨╣╤Б╤В╨▓╨╛ ╨▓ ╨│╨╛╨╗╨╛╨▓╤Г (0 - ╨╜╨╡╤В, 1 - ╨┤╨░)
write_string(weapon); // ╨╛╤А╤Г╨┤╨╕╨╡ ╤Г╨▒╨╕╨╣╤Б╤В╨▓╨░
}
message_end();

// ╨г╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╨╝ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Г╨▒╨╕╨╣╤Б╤В╨▓
set_user_frags(attacker_id, get_user_frags(attacker_id)+1);

message_begin(MSG_BROADCAST, msg_scoreinfo_id);
{
write_byte(attacker_id); // ID ╨╕╨│╤А╨╛╨║╨░
write_short(get_user_frags(attacker_id)); // ╤Г╨▒╨╕╨╣╤Б╤В╨▓
write_short(cs_get_user_deaths(attacker_id)); // ╤Б╨╝╨╡╤А╤В╨╡╨╣
write_short(0); // class?
write_short(get_pdata_int(attacker_id, 114, 5)); // ╨║╨╛╨╝╨░╨╜╨┤╨░
}
message_end();

//╨Ш╨╖╨╝╨╡╨╜╤П╨╡╨╝ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╨╝╨╡╤А╤В╨╡╨╣
message_begin(MSG_BROADCAST, msg_scoreinfo_id);
{
write_byte(victim_id); // ID ╨╕╨│╤А╨╛╨║╨░
write_short(get_user_frags(victim_id)); // ╤Г╨▒╨╕╨╣╤Б╤В╨▓
write_short(cs_get_user_deaths(victim_id)); // ╤Б╨╝╨╡╤А╤В╨╡╨╣
write_short(0); // class?
write_short(get_pdata_int(victim_id, 114, 5)); // ╨║╨╛╨╝╨░╨╜╨┤╨░
}
message_end();

// ╨г╨▒╨╕╨▓╨░╨╡╨╝ ╨╢╨╡╤А╤В╨▓╤Г
user_silentkill(victim_id);

player_alive[victim_id] = false;

if(player_svinorez[attacker_id])
client_cmd(0,"mp3 play %s", SVINOREZ_SOUND_KILLS);
}

killed = 1;
}
else if(victim_hp_next > 0)
set_pev(victim_id, pev_health, float(victim_hp_next));
}
}

/*
entity_id - ID ╨╛╨▒╤К╨╡╨║╤В╨░
anim_id - ID ╨░╨╜╨╕╨╝╨░╤Ж╨╕╨╕
mode - ╨┐╤А╨╛╨╕╨│╤А╤Л╨▓╨░╤В╤М ╨░╨╜╨╕╨╝╨░╤Ж╨╕╤О 0 = 1 ╤А╨░╨╖ / 1 = ╨▒╨╡╤Б╨║╨╛╨╜╨╡╤З╨╜╨╛
*/
stock set_entity_animation(const entity_id, const anim_id = 0, const mode = 0)
{
set_pev(entity_id, pev_frame, 0.0);
set_pev(entity_id, pev_framerate, 1.0);
set_pev(entity_id, pev_animtime, halflife_time());
set_pev(entity_id, pev_sequence, anim_id);

if(mode)
set_pev(entity_id, pev_gaitsequence, anim_id);
}
Очень срочная помощь
Сейчас я Вам расскажу максимально подробно

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

Что делает плагин:
Игрок убивает с ножа противника.
Ему даёться скин игрока,другой скин ножа,быстрый бег,здоровье,броня,шаги делаються безшумными ( далее Свинорез )
Всё это сбрасываеться у Свинореза только в том случаи,как только его убьют ИМЕННО с ножа ( другой игрок... )

Всё бы да ничего но вот что сейчас происходит:
Обычные игроки наносят урон с ножа по обычным игрокам

Свинорез по Обычному игроку НЕ может нанести Урон. ( Самая главная проблема )

Обычный игрок может нанести Урон Свинорезу

Кидающие ножи Свинореза наносят Урон Обычному игроку

Свинорез умер ( пофиг от чего либо ) даже когда перешёл за другую команду и тут всё...сервер завис

И после всего этого появляються ошибки в логе ( те,что я указал )

В добавок ко всему этому:
Почему-то сразу же шаги для всех обычных игроков делаються безшумными + скин не збрасываеться при переходе за другую команду у Свинореза

В заключении:
Мы действительно сбиты с толку и не понимаем,в чём дело.
Нам уже 2 человека сказало,что код абсолютно правильный ?
До этого плагин был без Реапи,и человек попросил его перевести на Ре
И даже после этого ничего не поменялось
Наклонными палками были строки без Ре в коде, - и сразу же рядом под Реапи ( там уже для Вас понятно будет )

Сама проблема здесь
Код:
public ham_player_takedamage_pre(victim_id, inflictor, attacker_id, Float:damage, damage_bits)
{
    attacker_damage_bits[attacker_id] = damage_bits;
    
    if(attacker_id != victim_id && get_player_status(attacker_id))
    {
        if(player_svinorez[attacker_id])
            SetHookChainArg(4, ATYPE_FLOAT, damage * cvar_svinorez_dmg_value)
            //SetHamParamFloat(4, damage*cvar_svinorez_dmg_value);
    }
}
Всем Большое Спасибо за помощь !
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
3,256
Реакции
1,436
Помог
121 раз(а)
Дебажить пробовал? Прологируй дамаг и значение квара
Свинорез по Обычному игроку НЕ может нанести Урон.
8 Янв 2021
Почему-то сразу же шаги для всех обычных игроков делаються безшумными
set_user_footsteps(attacker_id, 1);
8 Янв 2021
Код:
[AMXX] Displaying debug trace (plugin "svinorez.amxx", version "6.1")
[AMXX] Run time error 4: index out of bounds
[AMXX] [0] svinorez.sma::ham_player_takedamage_pre (line 404)
нет проверки на attacker_id - это может быть не игрок, а граната

Код:
public ham_player_takedamage_pre(victim_id, inflictor, attacker_id, Float:damage, damage_bits)
{
    attacker_damage_bits[attacker_id] = damage_bits;
    
    if(attacker_id != victim_id && get_player_status(attacker_id))
    {
        if(player_svinorez[attacker_id])
            SetHookChainArg(4, ATYPE_FLOAT, damage * cvar_svinorez_dmg_value)
            //SetHamParamFloat(4, damage*cvar_svinorez_dmg_value);
    }
}
 
Сообщения
17
Реакции
18
Помог
2 раз(а)
Нападающий может быть не обязательно игроков - какой-нибудь объект на карте тоже считается (или падение с высоты, например)

Это я про ошибку
Код:
[AMXX] Run time error 4: index out of bounds
Код:
public ham_player_takedamage_pre(victim_id, inflictor, attacker_id, Float:damage, damage_bits)
{
    if (!(1 <= attacker_id <= MaxClients))
        return;

    attacker_damage_bits[attacker_id] = damage_bits;
  
    if(attacker_id != victim_id && get_player_status(attacker_id))
    {
        if(player_svinorez[attacker_id])
            SetHookChainArg(4, ATYPE_FLOAT, damage * cvar_svinorez_dmg_value)
            //SetHamParamFloat(4, damage*cvar_svinorez_dmg_value);
    }
}
 
Сообщения
578
Реакции
338
Предупреждения
2
Помог
9 раз(а)
Мда.. Какой автор, такие и ошибки.
Чел(ы) даже не могут перевести. (Индекс выходит за границы)
0 проверок на валидность :blush2:
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
Извините меня за грубость, но такое фиксится только путем выкидывания всего кода целиком в мусорку.
Смотря на код хочется плакать и от перевода на реапи тут один звук...
В раздел заказов прямая дорога...
Ну и наставника стоило бы сменить...
 

d3m37r4

111111
Сообщения
1,420
Реакции
1,162
Помог
10 раз(а)
wellasgood, это капец как поможет в решении проблемы.
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
А вообще соглашусь с gyxoBka , пущай нормально кто то сделает, просто в коде много хардкода и тп.. такое ощущение что автор плагина застрял в бородатых годах
 
Сообщения
1,480
Реакции
1,476
Помог
2 раз(а)
Не хочу лишнего шума здесь,ибо прошлые сообщения удалили,а новые подлетели...
Есть много чего сказать,а особенно Духовке, ( просто сразу пойду в Бан без предупреждений - даже если начнуться слова "Извините меня также за грубость", но... ),но я не злой человек и сегодня действительно прекрасный день. - просто скажу всем Спасибо за разъяснительные ответы
Лучше закройте - вот сейчас честно...
 
Статус
В этой теме нельзя размещать новые ответы.

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

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