new mod_name[32], bool:body_hidden[33] new pcvar_gore, pcvar_gore_exphp
//Offsets to place blood is more realistic hit location new Offset[8][3] = {{0,0,10},{0,0,30},{0,0,16},{0,0,10},{4,4,16},{-4,-4,16},{4,4,-12},{-4,-4,-12}}
// ##################################################################### // ## Change which weapons cause GIB explosions on death HERE ## // #####################################################################
public gib_wpncheck(iWeapon) { //This section is used for CS/CZ if (cstrike_running()) { switch (iWeapon) { case CSW_P228 : return false case CSW_SCOUT : return false case CSW_HEGRENADE : return true case CSW_XM1014 : return false case CSW_C4 : return true case CSW_MAC10 : return false case CSW_AUG : return false case CSW_SMOKEGRENADE : return true case CSW_ELITE : return false case CSW_FIVESEVEN : return false case CSW_UMP45 : return false case CSW_SG550 : return false case CSW_GALIL : return false case CSW_FAMAS : return false case CSW_USP : return false case CSW_GLOCK18 : return false case CSW_AWP : return false case CSW_MP5NAVY : return false case CSW_M249 : return false case CSW_M3 : return false case CSW_M4A1 : return false case CSW_TMP : return false case CSW_G3SG1 : return false case CSW_FLASHBANG : return true case CSW_DEAGLE : return false case CSW_SG552 : return false case CSW_AK47 : return false case CSW_KNIFE : return false case CSW_P90 : return false } } //This section is used for DoD else if (equali(mod_name,"dod")) { switch (iWeapon) { case DODW_AMERKNIFE : return false case DODW_GERKNIFE : return false case DODW_COLT : return false case DODW_LUGER : return false case DODW_GARAND : return false case DODW_SCOPED_KAR : return false case DODW_THOMPSON : return false case DODW_STG44 : return false case DODW_SPRINGFIELD : return false case DODW_KAR : return false case DODW_BAR : return false case DODW_MP40 : return false case DODW_HANDGRENADE : return true case DODW_STICKGRENADE : return true case DODW_STICKGRENADE_EX : return true case DODW_HANDGRENADE_EX : return true case DODW_MG42 : return false case DODW_30_CAL : return false case DODW_SPADE : return false case DODW_M1_CARBINE : return false case DODW_MG34 : return false case DODW_GREASEGUN : return false case DODW_FG42 : return false case DODW_K43 : return false case DODW_ENFIELD : return false case DODW_STEN : return false case DODW_BREN : return false case DODW_WEBLEY : return false case DODW_BAZOOKA : return true case DODW_PANZERSCHRECK : return false case DODW_PIAT : return false case DODW_SCOPED_FG42 : return false case DODW_FOLDING_CARBINE : return false case DODW_KAR_BAYONET : return false case DODW_SCOPED_ENFIELD : return false case DODW_MILLS_BOMB : return true case DODW_BRITKNIFE : return false case DODW_GARAND_BUTT : return false case DODW_ENFIELD_BAYONET : return false case DODW_MORTAR : return false case DODW_K43_BUTT : return false } } //This section is used for TFC else if (equali(mod_name,"tfc")) { switch (iWeapon) { case TFC_WPN_NONE : return false case TFC_WPN_TIMER : return false case TFC_WPN_SENTRYGUN : return false case TFC_WPN_MEDIKIT : return false case TFC_WPN_SPANNER : return false case TFC_WPN_AXE : return false case TFC_WPN_SNIPERRIFLE : return false case TFC_WPN_AUTORIFLE : return false case TFC_WPN_SHOTGUN : return false case TFC_WPN_SUPERSHOTGUN : return false case TFC_WPN_NG : return false case TFC_WPN_SUPERNG : return false case TFC_WPN_GL : return false case TFC_WPN_FLAMETHROWER : return false case TFC_WPN_RPG : return true case TFC_WPN_IC : return false case TFC_WPN_FLAMES : return false case TFC_WPN_AC : return false case TFC_WPN_UNK18 : return false case TFC_WPN_UNK19 : return false case TFC_WPN_TRANQ : return false case TFC_WPN_RAILGUN : return false case TFC_WPN_PL : return false case TFC_WPN_KNIFE : return false case TFC_WPN_CALTROP : return false case TFC_WPN_CONCUSSIONGRENADE : return true case TFC_WPN_NORMALGRENADE : return true case TFC_WPN_NAILGRENADE : return true case TFC_WPN_MIRVGRENADE : return true case TFC_WPN_NAPALMGRENADE : return true case TFC_WPN_GASGRENADE : return false case TFC_WPN_EMPGRENADE : return false }
} //This section is used for TS else if (equali(mod_name,"ts")) { switch (iWeapon) { case TSW_GLOCK18 : return false case TSW_UNK1 : return false case TSW_UZI : return false case TSW_M3 : return false case TSW_M4A1 : return false case TSW_MP5SD : return false case TSW_MP5K : return false case TSW_ABERETTAS : return false case TSW_MK23 : return false case TSW_AMK23 : return false case TSW_USAS : return false case TSW_DEAGLE : return false case TSW_AK47 : return false case TSW_57 : return false case TSW_AUG : return false case TSW_AUZI : return false case TSW_TMP : return false case TSW_M82A1 : return false case TSW_MP7 : return false case TSW_SPAS : return false case TSW_GCOLTS : return false case TSW_GLOCK20 : return false case TSW_UMP : return false case TSW_M61GRENADE : return true case TSW_CKNIFE : return false case TSW_MOSSBERG : return false case TSW_M16A4 : return false case TSW_MK1 : return false case TSW_C4 : return true case TSW_A57 : return false case TSW_RBULL : return false case TSW_M60E3 : return false case TSW_SAWED_OFF : return true case TSW_KATANA : return false case TSW_SKNIFE : return false case TSW_KUNG_FU : return false case TSW_TKNIFE : return false } } //This section is used for ESF else if (equali(mod_name,"esf")) { //Always do GIB explosions on ESF return true } //This section is used for the "valve" mod else if (equali(mod_name,"valve")) { switch (iWeapon) { case HLW_NONE : return false case HLW_CROWBAR : return false case HLW_GLOCK : return false case HLW_PYTHON : return false case HLW_MP5 : return false case HLW_CHAINGUN : return false case HLW_CROSSBOW : return false case HLW_SHOTGUN : return false case HLW_RPG : return true case HLW_GAUSS : return false case HLW_EGON : return false case HLW_HORNETGUN : return false case HLW_HANDGRENADE : return true case HLW_TRIPMINE : return true case HLW_SATCHEL : return true case HLW_SNARK : return false } }
//Always false on Sven Co-op return false }
// ##################################################################### // ## DO NOT EDIT BELOW HERE ## // #####################################################################
// Blood decals if (equali(mod_name,"cstrike")) { blood_large_red = {204,205} blood_small_red = {190,191,192,193,194,195,196,197} } else if (equali(mod_name,"czero")) { blood_large_red = {216,217} blood_small_red = {202,203,204,205,206,207,208,209} } else if (equali(mod_name,"dod")) { blood_large_red = {217,218} blood_small_red = {203,204,205,206,207,208,209,210} } else if (equali(mod_name,"tfc")) { blood_large_red = {208,209} blood_small_red = {194,195,196,197,198,199,200,201} } else if (equali(mod_name,"ts")) { blood_large_red = {218,219} blood_small_red = {204,205,206,207,208,209,210,211} } else if (equali(mod_name,"svencoop")) { blood_large_red = {210,211} blood_small_red = {196,197,198,199,200,201,202,203} } //"valve" mod and others that use its decals.wad (ESF, NS) else { blood_large_red = {19,20} blood_small_red = {27,28,29,30,31,32,33,34} } }
public plugin_natives() { set_module_filter("module_filter") set_native_filter("native_filter") }
public module_filter(const module[]) { if (equali(module, "xstats")) { if (cstrike_running()) return PLUGIN_CONTINUE if (equali(mod_name,"dod")) return PLUGIN_CONTINUE if (equali(mod_name,"tfc")) return PLUGIN_CONTINUE if (equali(mod_name,"ts")) return PLUGIN_CONTINUE
return PLUGIN_HANDLED } return PLUGIN_CONTINUE }
public native_filter(const name[], index, trap) { if (!trap) return PLUGIN_HANDLED
return PLUGIN_CONTINUE }
public plugin_precache() { spr_blood_drop = precache_model("sprites/blood.spr") spr_blood_spray = precache_model("sprites/bloodspray.spr")
//For "valve", ESF, NS, SvenCoop public event_damage(iVictim) { if (iVictim <= 0 || iVictim > MAX_PLAYERS) return
new iWeapon, iHitPlace, iAgressor iAgressor = get_user_attacker(iVictim,iWeapon,iHitPlace)
//Sven Co-op does not seem to send Death messages so we will do this if (equali(mod_name,"svencoop")) { if (get_user_health(iVictim) <=0) { process_death(iAgressor, iVictim, iWeapon, iHitPlace) return } }
process_damage(iAgressor, iVictim, iHitPlace) }
//Forward for CS/CZ, DoD, TFC, TS public client_damage(attacker,victim,damage,wpnindex,hitplace) { if (victim <= 0 || victim > MAX_PLAYERS) return process_damage(attacker, victim, hitplace) }
//This will process the damage info for all mods process_damage(iAgressor, iVictim, iHitPlace) { new iFlags = get_gore_flags()
//Don't want to do this if the player just died new vHealth = get_user_health(iVictim) if (vHealth <= 0 || vHealth >= gHealthIndex[iVictim]) return
//Hostage Event for CS/CZ public event_host_damage(iAgressor) { new Float:vHeatlh, iVictim, iHitPlace = 0 new iFlags = get_gore_flags() new hostid, Float:hosthp
if (!(iFlags&GORE_HOSTAGES)) return
//Find what hostage was injured for (new x = 0; x < host_num; x++) { hostid = hostages[x] hosthp = hostage_hp[x]
if (!pev_valid(hostid)) continue if (hosthp <= 0.0) continue pev(hostid, pev_health, vHeatlh)
//Forward for CS/CZ, DoD, TFC, TS public client_death(killer,victim,wpnindex,hitplace) { if (victim <= 0 || victim > MAX_PLAYERS) return process_death(killer, victim, wpnindex, hitplace) }
//This will process the death info for all mods process_death(iAgressor, iVictim, iWeapon, iHitPlace) { //server_print("************************* DEATH: %d %d %d %d", iVictim, iAgressor, iWeapon, iHitPlace)
new iOrigin[3], iOrigin2[3] new iFlags = get_gore_flags()
//Check to make sure its a valid entity if (!pev_valid(iAgressor)) { iAgressor = iVictim iWeapon = 0 iHitPlace = 0 }
if (iFlags&GORE_EXTRA && !equali(mod_name,"dod")) { fx_extra_blood(iOrigin) fx_blood_large(iOrigin,2) fx_blood_small(iOrigin,4) } }
//Hostage Event for CS/CZ public event_host_killed(iAgressor) { new Float:vHeatlh, HP_Loss, iVictim, iWeapon = 0, clip, ammo new iFlags = get_gore_flags() new hostid, Float:hosthp
if (!(iFlags&GORE_HOSTAGES)) return
//Find what hostage was killed for (new x = 0; x < host_num; x++) { hostid = hostages[x] hosthp = hostage_hp[x]
if (!pev_valid(hostid)) continue if (hosthp <= 0.0) continue
fx_blood_small(iOrigin,8) if (iFlags&GORE_EXTRA) { fx_extra_blood(iOrigin) fx_blood_large(iOrigin,2) fx_blood_small(iOrigin,4) } } /* public event_blood() { new iFlags = get_gore_flags() if (!(iFlags&GORE_BLEEDING)) return
new iPlayer, iPlayers[MAX_PLAYERS], iNumPlayers, iOrigin[3] get_players(iPlayers,iNumPlayers,"a") for (new i = 0; i < iNumPlayers; i++) { iPlayer = iPlayers[i] gHealthIndex[iPlayer] = get_user_health(iPlayer) if (gHealthIndex[iPlayer] < 20) { get_origin_int(iPlayer, iOrigin) fx_bleed(iOrigin) fx_blood_small(iOrigin,3) } }
if (!(iFlags&GORE_HOSTAGES)) return
//Hostage Bleeding if (cstrike_running()) { new iOrigin[3], hostid, Float:hosthp for (new x = 0; x < host_num; x++) { hostid = hostages[x] hosthp = hostage_hp[x] if (!pev_valid(hostid)) continue pev(hostid, pev_health, hosthp) if (hosthp > 0.0 && hosthp < 20.0) { get_origin_int(hostid, iOrigin) iOrigin[2] += 36.0 fx_bleed(iOrigin) fx_blood_small(iOrigin,3) } } } } */ public event_respawn(id) { if (is_user_alive(id)) { //Reset body_hidden flag body_hidden[id] = false //Restore model visibility set_pev(id, pev_rendermode, kRenderNormal) //Save clients current Health gHealthIndex[id] = get_user_health(id) } }
public event_roundstart(id) { set_task(0.1,"roundstart_delay",100) }
public roundstart_delay() { for ( new id = 1; id <= MAX_PLAYERS; id++ ) { if (is_user_alive(id)) { //Reset body_hidden flag body_hidden[id] = false //Save clients current Health gHealthIndex[id] = get_user_health(id) } }
if (cstrike_running()) { new hostid for (new x = 0; x < host_num; x++) { hostid = hostages[x] if (!pev_valid(hostid)) continue set_pev(hostid, pev_rendermode, kRenderNormal) pev(hostid, pev_health, hostage_hp[x]) } } }
//Hides Corpses in CS / DoD public event_ClCorpse() { //If there is not 12 args something is wrong if (get_msg_args() != 12) return PLUGIN_CONTINUE
//Arg 12 is the player id the corpse is for new id = get_msg_arg_int(12)
//If the corpse should be hidden block this message if (body_hidden[id]) return PLUGIN_HANDLED
return PLUGIN_CONTINUE }
public get_gore_flags() { new sFlags[24] get_pcvar_string(pcvar_gore,sFlags,23) return read_flags(sFlags) }
/************************************************************ * FX FUNCTIONS ************************************************************/
new rX = ((origin[0]-origin2[0]) * 300) / rDistance new rY = ((origin[1]-origin2[1]) * 300) / rDistance new rZ = ((origin[2]-origin2[2]) * 300) / rDistance
message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BLOODSTREAM) write_coord(origin[0]+Offset[HitPlace][0]) write_coord(origin[1]+Offset[HitPlace][1]) write_coord(origin[2]+Offset[HitPlace][2]) write_coord(rX) // x write_coord(rY) // y write_coord(rZ) // z write_byte(BLOOD_STREAM_RED) // color write_byte(random_num(100,200)) // speed message_end() } /* fx_bleed(origin[3]) { // Blood spray message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BLOODSTREAM) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]+10) write_coord(random_num(-360,360)) // x write_coord(random_num(-360,360)) // y write_coord(-10) // z write_byte(BLOOD_STREAM_RED) // color write_byte(random_num(50,100)) // speed message_end() } */ fx_blood_small(origin[3],num) { if (equali(mod_name,"esf")) return
// Write Small splash decal for (new j = 0; j < num; j++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) write_coord(origin[0]+random_num(-100,100)) write_coord(origin[1]+random_num(-100,100)) write_coord(origin[2]-36) write_byte(blood_small_red[random_num(0,BLOOD_SM_NUM - 1)]) // index message_end() } }
fx_blood_large(origin[3],num) { if (equali(mod_name,"esf")) return
// Write Large splash decal for (new i = 0; i < num; i++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) write_coord(origin[0]+random_num(-50,50)) write_coord(origin[1]+random_num(-50,50)) write_coord(origin[2]-36) write_byte(blood_large_red[random_num(0,BLOOD_LG_NUM - 1)]) // index message_end() } }
#if defined GIBS_ENABLED fx_gib_explode(origin[3],origin2[3]) { new flesh[2] flesh[0] = mdl_gib_flesh flesh[1] = mdl_gib_meat new mult, gibtime = 400 //40 seconds
if (equali(mod_name,"esf")) mult = 400 else if (equali(mod_name,"ts")) mult = 140 else mult = 80
new rDistance = get_distance(origin,origin2) ? get_distance(origin,origin2) : 1 new rX = ((origin[0]-origin2[0]) * mult) / rDistance new rY = ((origin[1]-origin2[1]) * mult) / rDistance new rZ = ((origin[2]-origin2[2]) * mult) / rDistance new rXm = rX >= 0 ? 1 : -1 new rYm = rY >= 0 ? 1 : -1 new rZm = rZ >= 0 ? 1 : -1
message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]+20) write_short(spr_blood_spray) write_short(spr_blood_drop) write_byte(BLOOD_COLOR_RED) // color index write_byte(10) // size message_end() } #endif
fx_extra_blood(origin[3]) { new x, y, z
for(new i = 0; i < 3; i++) { x = random_num(-15,15) y = random_num(-15,15) z = random_num(-20,25) for(new j = 0; j < 2; j++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) write_coord(origin[0]+(x*j)) write_coord(origin[1]+(y*j)) write_coord(origin[2]+(z*j)) write_short(spr_blood_spray) write_short(spr_blood_drop) write_byte(BLOOD_COLOR_RED) // color index write_byte(15) // size message_end() } } }
fx_headshot(origin[3]) { new iFlags = get_gore_flags()
new Sprays = 1
if (iFlags&GORE_EXTRA || iFlags&GORE_EXTRA_HS) { if (equali(mod_name,"dod")) Sprays = 4 else Sprays = 8 }
message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]+40) write_short(spr_blood_spray) write_short(spr_blood_drop) write_byte(BLOOD_COLOR_RED) // color index write_byte(15) // size message_end()
// Blood sprays for (new i = 0; i < Sprays; i++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BLOODSTREAM) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]+40) write_coord(random_num(-30,30)) // x write_coord(random_num(-30,30)) // y write_coord(random_num(80,300)) // z write_byte(BLOOD_STREAM_RED) // color write_byte(random_num(100,200)) // speed message_end() } }[/coub]
Поблагодарили 0 раз Поблагодарили 0 раз
Maksumus
18.9.2018, 21:17
Сообщение
Стаж: 9 лет 7 месяцев
Сообщений: 499
Благодарностей: 78
Полезность: < 0
IIuKa, Флаги в параметре amx_gore: a - Добавление крови при попадании в голову b - Дополнительные кровавые эффекты c - Потеря крови при малом количестве жизней d - Взрыв игрока при нанесении урона "amx_gore_exphp" e - Дополнительный Gore Mod f - Дополнительный хедшот при Gore (доступен при включенном флаге e) g - Gore заложников
Поблагодарили 0 раз Поблагодарили 0 раз
IIuKa
18.9.2018, 21:25
Сообщение
Стаж: 14 лет
Сообщений: 667
Благодарностей: 29
Полезность: < 0
Maksumus, не вижу там черепа и костей
Поблагодарили 0 раз Поблагодарили 0 раз
Maksumus
18.9.2018, 21:34
Сообщение
Стаж: 9 лет 7 месяцев
Сообщений: 499
Благодарностей: 78
Полезность: < 0
Цитата(IIuKa @ 18.9.2018, 22:25)
Maksumus, не вижу там черепа и костей
d - Взрыв игрока при нанесении урона "amx_gore_exphp"