#include #include #include #define PLUGIN "Corpse Realism" #define VERSION "1.2" #define AUTHOR "Alka" new gSprBloodDecal[8] = { 190, 191, 192, 193, 194, 195, 196, 197 }; new Float:gNextSprite[33]; new const gCorpseSound[] = "player/hit.wav"; public plugin_precache(){ precache_sound(gCorpseSound); } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_forward(FM_CmdStart, "Fwd_CmdStart"); } public Fwd_CmdStart(id, uc_handle, seed) { if(!is_user_alive(id)) return FMRES_IGNORED; static iButton; iButton = get_uc(uc_handle, UC_Buttons); static iWeapon, iTemp; iWeapon = get_user_weapon(id, iTemp, iTemp); static Float:fGameTime; fGameTime = get_gametime(); if((iButton & IN_ATTACK) && (iWeapon != CSW_KNIFE && iWeapon != CSW_C4) && !is_weapon_nade(iWeapon) && (gNextSprite[id] < fGameTime)) { static Float:fOrigin[3]; fm_get_aim_origin(id, fOrigin); new iEnt; if((iEnt = engfunc(EngFunc_FindEntityInSphere, iEnt, fOrigin, 20.0)) != 0) { if((1 <= iEnt <= global_get(glb_maxClients))) { static szClassName[32]; pev(iEnt, pev_classname, szClassName, sizeof szClassName - 1); if((szClassName[0] == 'p' && szClassName[3] == 'y') && !is_user_alive(iEnt)) { client_cmd(id, "spk %s", gCorpseSound); func_fx_blood(fOrigin); func_fx_blood_decal(fOrigin, 4); } } } gNextSprite[id] = fGameTime + 0.3; } return FMRES_IGNORED; } stock fm_get_aim_origin(index, Float:origin[3]) { new Float:start[3], Float:view_ofs[3]; pev(index, pev_origin, start); pev(index, pev_view_ofs, view_ofs); xs_vec_add(start, view_ofs, start); new Float:dest[3]; pev(index, pev_v_angle, dest); engfunc(EngFunc_MakeVectors, dest); global_get(glb_v_forward, dest); xs_vec_mul_scalar(dest, 9999.0, dest); xs_vec_add(start, dest, dest); engfunc(EngFunc_TraceLine, start, dest, 0, index, 0); get_tr2(0, TR_vecEndPos, origin); return 1; } stock is_weapon_nade(index) { if(index == CSW_HEGRENADE || index == CSW_FLASHBANG || index == CSW_SMOKEGRENADE) return 1; return 0; } stock func_fx_blood(Float:origin[3]) { message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_BLOODSTREAM); write_coord(floatround(origin[0])); write_coord(floatround(origin[1])); write_coord(floatround(origin[2]) + 20); write_coord(random_num(-360, 360)); write_coord(random_num(-360, 360)); write_coord(-10); write_byte(70); write_byte(random_num(50, 100)); message_end(); } stock func_fx_blood_decal(Float:origin[3], num) { if(!num) num = 1; for(new i = 0 ; i <= num ; i++) { message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_WORLDDECAL); write_coord(floatround(origin[0]) + random_num(-50, 50)); write_coord(floatround(origin[1]) + random_num(-50, 50)); write_coord(floatround(origin[2])); write_byte(gSprBloodDecal[random(sizeof gSprBloodDecal)]); message_end(); } }