Преработка на amx_gore_ultimate

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
fortex1
Извън линия
Потребител
Потребител
Мнения: 15
Регистриран на: 21 Юли 2017, 14:58

Преработка на amx_gore_ultimate

Мнение от fortex1 » 06 Дек 2021, 04:48

Здравейте. Когато сложих този плъгин при хит кръвта не изчезва от земята, а ако може да се направи така че да изчезва веднага да не се задържа на земята.

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <dodconst>
#include <tfcconst>
#include <tsconst>

//Auto-load the correct module if not loaded
#pragma reqclass xstats
#if !defined AMXMODX_NOAUTOLOAD
   #pragma defclasslib xstats csx
   #pragma defclasslib xstats dodx
   #pragma defclasslib xstats tfcx
   #pragma defclasslib xstats tsx
#endif

#define MAX_PLAYERS 32
#define MAX_HOSTAGES 16

#define GORE_HEADSHOT       (1<<0) // "a"
#define GORE_BLOOD          (1<<1) // "b"
#define GORE_BLEEDING       (1<<2) // "c"
#define GORE_GIB            (1<<3) // "d"
#define GORE_EXTRA          (1<<4) // "e"
#define GORE_EXTRA_HS       (1<<5) // "f"
#define GORE_HOSTAGES       (1<<6) // "g"

#define BLOOD_COLOR_RED		247
#define BLOOD_COLOR_YELLOW	195
#define BLOOD_STREAM_RED	70
#define BLOOD_STREAM_YELLOW	60

new gHealthIndex[MAX_PLAYERS+1]
new Float:hostage_hp[MAX_HOSTAGES], hostages[MAX_HOSTAGES], host_num

#if defined GIBS_ENABLED
new mdl_gib_flesh, mdl_gib_head, mdl_gib_legbone
new mdl_gib_lung, mdl_gib_meat, mdl_gib_spine
#endif

new spr_blood_drop, spr_blood_spray

#define BLOOD_SM_NUM 8
#define BLOOD_LG_NUM 2
new blood_small_red[BLOOD_SM_NUM], blood_large_red[BLOOD_LG_NUM]
//new blood_small_yellow[BLOOD_SM_NUM], blood_large_yellow[BLOOD_LG_NUM]

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                      ##
// #####################################################################

/************************************************************
* PLUGIN FUNCTIONS
************************************************************/

public plugin_init()
{
	register_plugin("Ultimate Gore","1.6","JTP10181")

	get_modname(mod_name,31)

	if (cstrike_running()) {
		register_logevent("event_roundstart", 2, "1=Round_Start")
		register_event("TextMsg","event_host_damage","b","2=#Injured_Hostage")
		register_event("TextMsg","event_host_killed","b","2=#Killed_Hostage")
		register_message(122, "event_ClCorpse") //ClCorpse
	}
	else if (equali(mod_name,"dod")) {
		register_message(126, "event_ClCorpse") //ClCorpse
	}
	else if (equali(mod_name,"esf")) {
		register_event("DeathMsg","event_death","a")
		register_event("Health","event_damage","b")
	}
	else if (equali(mod_name,"svencoop")) {
		register_event("Damage","event_damage","b","2!0")
	}
	else if (equali(mod_name,"valve") || equali(mod_name,"ns")) {
		register_event("DeathMsg","event_death","a")
		register_event("Damage","event_damage","b","2!0")
	}

	register_event("ResetHUD","event_respawn","b")

	pcvar_gore = register_cvar("amx_gore","abcd")
	pcvar_gore_exphp = register_cvar("amx_gore_exphp","160")
	set_task(1.5,"event_blood",100,"",0,"b")

	// 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}
	}

	//Setup jtp10181 CVAR
	new cvarString[256], shortName[16]
	copy(shortName,15,"gore")

	register_cvar("jtp10181","",FCVAR_SERVER|FCVAR_SPONLY)
	get_cvar_string("jtp10181",cvarString,255)

	if (strlen(cvarString) == 0) {
		formatex(cvarString,255,shortName)
		set_cvar_string("jtp10181",cvarString)
	}
	else if (contain(cvarString,shortName) == -1) {
		format(cvarString,255,"%s,%s",cvarString, shortName)
		set_cvar_string("jtp10181",cvarString)
	}
}

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")

	#if defined GIBS_ENABLED
	mdl_gib_flesh = precache_model("models/Fleshgibs.mdl")
	mdl_gib_meat = precache_model("models/GIB_B_Gib.mdl")
	mdl_gib_head = precache_model("models/GIB_Skull.mdl")

	if (!equali(mod_name,"dod")) {
		mdl_gib_spine = precache_model("models/GIB_B_Bone.mdl")
		mdl_gib_lung = precache_model("models/GIB_Lung.mdl")
		mdl_gib_legbone = precache_model("models/GIB_Legbone.mdl")
	}
	#endif
}

public plugin_cfg()
{
	if (!cstrike_running()) return

	new iEnt = -1
	host_num = 0
	while ((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "hostage_entity")) != 0) {
		hostages[host_num++] = iEnt
		if (host_num >= MAX_HOSTAGES) break
	}
}

//Custom function to get origin with FM and return it as an integer
public get_origin_int(index, origin[3])
{
	new Float:FVec[3]

	pev(index,pev_origin,FVec)

	origin[0] = floatround(FVec[0])
	origin[1] = floatround(FVec[1])
	origin[2] = floatround(FVec[2])

	return 1
}

/************************************************************
* EVENTS
************************************************************/

//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

	//server_print("************************* DAMAGE: %d %d %d %d", iVictim, iAgressor, vHealth, iHitPlace)

	gHealthIndex[iVictim] = vHealth

	//Check to make sure its a valid entity
	if (!pev_valid(iAgressor)) {
		iAgressor = iVictim
		iHitPlace = 0
	}

	//Crash/error check
	if (!is_user_connected(iVictim)) return
	if (iHitPlace < 0 || iHitPlace > 7) iHitPlace = 0

	if (iFlags&GORE_BLOOD) {
		new iOrigin[3], iOrigin2[3]
		get_origin_int(iVictim,iOrigin)
		get_origin_int(iAgressor,iOrigin2)

		fx_blood(iOrigin,iOrigin2,iHitPlace)
		fx_blood_small(iOrigin,8)
		if (iFlags&GORE_EXTRA) {
			fx_blood(iOrigin,iOrigin2,iHitPlace)
			fx_blood(iOrigin,iOrigin2,iHitPlace)
			fx_blood(iOrigin,iOrigin2,iHitPlace)
			fx_blood_small(iOrigin,4)
		}
	}
}

//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)

		if (vHeatlh > 0.0 && vHeatlh < hosthp) {
			iVictim = hostid
		}

		hosthp = vHeatlh
	}

	//No valid hostage entity found
	if (iVictim <= 0) return

	//Check to make sure its a player
	if (!is_user_connected(iAgressor)) {
		iAgressor = iVictim
	}

	if (iFlags&GORE_BLOOD) {
		new iOrigin[3], iOrigin2[3]

		get_origin_int(iVictim, iOrigin)
		get_origin_int(iAgressor, iOrigin2)

		//Add height to Hostage origin
		iOrigin[2] += 36

		fx_blood(iOrigin,iOrigin2,iHitPlace)
		fx_blood_small(iOrigin,8)
		if (iFlags&GORE_EXTRA) {
			fx_blood(iOrigin,iOrigin2,iHitPlace)
			fx_blood(iOrigin,iOrigin2,iHitPlace)
			fx_blood(iOrigin,iOrigin2,iHitPlace)
			fx_blood_small(iOrigin,4)
		}
	}
}

//For "valve", ESF, NS
public event_death()
{
	new iVictim = read_data(2)
	new iWeapon, iHitPlace

	if (iVictim <= 0 || iVictim > MAX_PLAYERS) return
	new iAgressor = get_user_attacker(iVictim,iWeapon,iHitPlace)

	process_death(iAgressor, iVictim, iWeapon, iHitPlace)
}

//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 (!is_user_connected(iVictim)) return

	get_origin_int(iVictim, iOrigin)
	get_origin_int(iAgressor, iOrigin2)

	if (iFlags&GORE_HEADSHOT && iHitPlace == HIT_HEAD) {
		fx_headshot(iOrigin)
	}

	#if defined GIBS_ENABLED
	if (iFlags&GORE_GIB && (gib_wpncheck(iWeapon) || gHealthIndex[iVictim] - get_user_health(iVictim) >= get_pcvar_num(pcvar_gore_exphp))) {

		// Effects
		fx_invisible(iVictim)
		body_hidden[iVictim] = true

		fx_gib_explode(iOrigin,iOrigin2)
		fx_blood_large(iOrigin,4)
		fx_blood_small(iOrigin,4)
	}
	#endif

	fx_blood_small(iOrigin,8)

	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

		pev(hostid, pev_health, vHeatlh)

		if (vHeatlh <= 0.0 && vHeatlh < hosthp) {
			iVictim = hostid
			HP_Loss = floatround(hosthp - vHeatlh)
		}

		hosthp = vHeatlh
	}

	//No valid hostage entity found
	if (iVictim <= 0) return

	//Check to make sure its a player
	if (is_user_alive(iAgressor)) {
		iWeapon =  get_user_weapon(iAgressor,clip,ammo)
	}
	else {
		iAgressor = iVictim
	}

	new iOrigin[3], iOrigin2[3]

	get_origin_int(iVictim, iOrigin)
	get_origin_int(iAgressor, iOrigin2)

	//Add height to Hostage origin
	iOrigin[2] += 36

	#if defined GIBS_ENABLED
	if (iFlags&GORE_GIB && (gib_wpncheck(iWeapon) || HP_Loss >= floatround(get_pcvar_float(pcvar_gore_exphp) * 0.6))) {

		// Effects
		fx_invisible(iVictim)
		fx_gib_explode(iOrigin,iOrigin2)
		fx_blood_large(iOrigin,4)
		fx_blood_small(iOrigin,4)
	}
	#endif

	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
************************************************************/

fx_invisible(id)
{
	set_pev(id, pev_renderfx, kRenderFxNone)
	set_pev(id, pev_rendermode, kRenderTransAlpha)
	set_pev(id, pev_renderamt, 0.0)
}

fx_blood(origin[3],origin2[3],HitPlace)
{
	//Crash Checks
	if (HitPlace < 0 || HitPlace > 7) HitPlace = 0
	new rDistance = get_distance(origin,origin2) ? get_distance(origin,origin2) : 1

	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

	// Gib explosions

	// Head
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte(TE_MODEL)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2]+40)
	write_coord(rX + (rXm * random_num(0,80)))
	write_coord(rY + (rYm * random_num(0,80)))
	write_coord(rZ + (rZm * random_num(80,200)))
	write_angle(random_num(0,360))
	write_short(mdl_gib_head)
	write_byte(0) // bounce
	write_byte(gibtime) // life
	message_end()

	// Parts
	for(new i = 0; i < 4; i++) {
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
		write_byte(TE_MODEL)
		write_coord(origin[0])
		write_coord(origin[1])
		write_coord(origin[2])
		write_coord(rX + (rXm * random_num(0,80)))
		write_coord(rY + (rYm * random_num(0,80)))
		write_coord(rZ + (rZm * random_num(80,200)))
		write_angle(random_num(0,360))
		write_short(flesh[random_num(0,1)])
		write_byte(0) // bounce
		write_byte(gibtime) // life
		message_end()
	}

	if (!equali(mod_name,"dod")) {

		// Spine
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
		write_byte(TE_MODEL)
		write_coord(origin[0])
		write_coord(origin[1])
		write_coord(origin[2]+30)
		write_coord(rX + (rXm * random_num(0,80)))
		write_coord(rY + (rYm * random_num(0,80)))
		write_coord(rZ + (rZm * random_num(80,200)))
		write_angle(random_num(0,360))
		write_short(mdl_gib_spine)
		write_byte(0) // bounce
		write_byte(gibtime) // life
		message_end()

		// Lung
		for(new i = 0; i <= 1; i++) {
			message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
			write_byte(TE_MODEL)
			write_coord(origin[0])
			write_coord(origin[1])
			write_coord(origin[2]+10)
			write_coord(rX + (rXm * random_num(0,80)))
			write_coord(rY + (rYm * random_num(0,80)))
			write_coord(rZ + (rZm * random_num(80,200)))
			write_angle(random_num(0,360))
			write_short(mdl_gib_lung)
			write_byte(0) // bounce
			write_byte(gibtime) // life
			message_end()
		}

		//Legs
		for(new i = 0; i <= 1; i++) {
			message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
			write_byte(TE_MODEL)
			write_coord(origin[0])
			write_coord(origin[1])
			write_coord(origin[2]-10)
			write_coord(rX + (rXm * random_num(0,80)))
			write_coord(rY + (rYm * random_num(0,80)))
			write_coord(rZ + (rZm * random_num(80,200)))
			write_angle(random_num(0,360))
			write_short(mdl_gib_legbone)
			write_byte(0) // bounce
			write_byte(gibtime) // life
			message_end()
		}
	}

	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()
	}
}

Аватар
TryAgain
Извън линия
Потребител
Потребител
Мнения: 182
Регистриран на: 25 Яну 2017, 16:59
Се отблагодари: 1 път
Получена благодарност: 26 пъти

Преработка на amx_gore_ultimate

Мнение от TryAgain » 06 Дек 2021, 06:49

Премахва я изцяло :).

Код за потвърждение: Избери целия код

#include <amxmodx>

new noblood

new const inremove[] = 
{
	TE_PLAYERDECAL,	
	TE_BLOODSPRITE,
	TE_BLOODSTREAM,
	TE_BLOOD,
	TE_WORLDDECAL
}

public plugin_init()
{
	register_plugin("No Blood" ,"0.1", "ConnorMcLeod")
	register_message(SVC_TEMPENTITY, "blood_message")
	
	noblood = register_cvar("amx_no_blood", "1")
}

public blood_message()
{
	if(!get_pcvar_num(noblood))
	return PLUGIN_CONTINUE
	
	static arg1
	arg1 = get_msg_arg_int(1)
	
	for(new i;i<sizeof(inremove);i++)
	{
		if(arg1 == inremove[i])
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_CONTINUE
}

Аватар
fortex1
Извън линия
Потребител
Потребител
Мнения: 15
Регистриран на: 21 Юли 2017, 14:58

Преработка на amx_gore_ultimate

Мнение от fortex1 » 06 Дек 2021, 08:28

Не работи. Кръвта отново си е по земята не се премахва.

Аватар
Siska
Извън линия
Потребител
Потребител
Мнения: 771
Регистриран на: 03 Дек 2019, 22:29
Местоположение: Bedrock
Се отблагодари: 157 пъти
Получена благодарност: 48 пъти
Обратна връзка:

Re: Преработка на amx_gore_ultimate

Мнение от Siska » 07 Дек 2022, 02:17

Това може ли да се направи със cvar и всичко да изчезва за някакви секунди, но без да влияе на тази функция , която пуска кръв от играча ? То по принцип зависи от "декалс" , но може хората да не знаят или да не искат да си променят настройките на клиента...
Търсих врага и го открих : това съм аз , трябва да се победя...
Изображение
WWW.CSMEGAGAMING.COM Изображение Изображение Skype : Sisi-1_1

Аватар
Toni_P
Извън линия
Потребител
Потребител
Мнения: 64
Регистриран на: 01 Юли 2022, 19:12
Се отблагодари: 14 пъти
Получена благодарност: 4 пъти

Re: Преработка на amx_gore_ultimate

Мнение от Toni_P » 07 Дек 2022, 12:32

fortex1 написа: 06 Дек 2021, 08:28 Не работи. Кръвта отново си е по земята не се премахва.
Да питам само, fortex - а написа ли квар-а: amx_no_blood "1" в amxx? Този плъгин го ползвам и аз, като цяло има някакъв ефект но не е 100%-ов! Принципно кръвта се спира най-вече от клиентските настройки на самия играч( то е като настройката за "дъжда" на de_aztec например - принципно има дъжд за всички, но ако някой си го изключи сам - спира му напълно...) Е тук все пак остават малко, но при мен : моя сървър и моя ЦС, с плъгина почти не остават петната от кръв. Принципно всички тия неща: следи от куршуми, спрейове, петната от кръв... - малко или много натоварват и играчите и сървъра, т.е. са някакви допълнителни пакети от инфо... но при силни машини и интернет, това е много слабо и незабележимо!

Аватар
Siska
Извън линия
Потребител
Потребител
Мнения: 771
Регистриран на: 03 Дек 2019, 22:29
Местоположение: Bedrock
Се отблагодари: 157 пъти
Получена благодарност: 48 пъти
Обратна връзка:

Re: Преработка на amx_gore_ultimate

Мнение от Siska » 07 Дек 2022, 12:53

Той едва ли ще отговори , темата е стара.
Да попитам аз , ако ползвам горния вариант кръвта , която излиза от играча , когато е на малко "HP" и тя ли ще спре веднага или почти веднага , как е направено ?
Търсих врага и го открих : това съм аз , трябва да се победя...
Изображение
WWW.CSMEGAGAMING.COM Изображение Изображение Skype : Sisi-1_1

Аватар
Toni_P
Извън линия
Потребител
Потребител
Мнения: 64
Регистриран на: 01 Юли 2022, 19:12
Се отблагодари: 14 пъти
Получена благодарност: 4 пъти

Re: Преработка на amx_gore_ultimate

Мнение от Toni_P » 08 Дек 2022, 10:51

Siska написа: 07 Дек 2022, 12:53 Той едва ли ще отговори , темата е стара.
Да попитам аз , ако ползвам горния вариант кръвта , която излиза от играча , когато е на малко "HP" и тя ли ще спре веднага или почти веднага , как е направено ?
Не съм сигурен, но мисля, че не е от значение на колко HP е останал играча. На мен, без значение на колко HP е играча(дори имам плъгин дето ВИП-играч може да е и с над 160HP - не остават почти никакви следи, просто ги изтрива на секундата. Но пак повтарям , на моя Цс в моя сървър. :coffee:

Аватар
Siska
Извън линия
Потребител
Потребител
Мнения: 771
Регистриран на: 03 Дек 2019, 22:29
Местоположение: Bedrock
Се отблагодари: 157 пъти
Получена благодарност: 48 пъти
Обратна връзка:

Re: Преработка на amx_gore_ultimate

Мнение от Siska » 08 Дек 2022, 12:46

Значи ето какво забелязах :
Откакто сложих този плъгин труповете стоят на земята и не изчезват. Явно е свързано това нещо и това е още една причина да се направи кръвта от земята да изчезва за някакви секунди със "cvar" ...
Търсих врага и го открих : това съм аз , трябва да се победя...
Изображение
WWW.CSMEGAGAMING.COM Изображение Изображение Skype : Sisi-1_1

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 19 госта