Потребителски аватар
Drea<M>40
Супер потребител
Супер потребител
Мнения: 1346
Регистриран: 26 мар 2016, 22:03
Ник в играта: -|LR|-*DIXIKlO^
Скайп профил: unsi1231
Вашият пол е: Мъж
Местоположение: зад волана
Контакти:

Toxic Water

Мнение от Drea<M>40 » 25 май 2017, 13:35

Автор: Sh!nE*

Описание: Прави водата токсична (взима ви кръв когато минете през нея или когато сте до нея).

Версия: 0.8

Cvars:

Код: Избери всички

amx_toxicwater <1/0> (Изключен/Включен) (По подразбиране: 1)
tx_dmgfeet <damage> (Колко кръв ще ти взима когато си стъпал във водата) (По подразбиране: 7)
tx_dmgwaist <damage> (Колко кърв ще ти взима когато си във водата до кръста) (По подразбиране: 15)
tx_dmghead <damage> (Колко кръв ще ти взима когато си изцяло под водата) (По подразбиране: 30)
tx_dmgnear <damage> (Колко кръв ще ти взема когато си близо до водата) (По подразбиране: 5)
tx_dmgradius <units> (Колко юнита ще ти влия ефекта от токсичността - tx_dmgnear) (По подразбиранеt: 100)
tx_fadegreen <1/0> (Включено/Изключено, Когато сте във водата екрана ще се показва в зелен цвят (много е яко )) (По подразбиране:
Промени във версията 0.8
-Плъгина не се нуждае от модула fakemeta
-Кодовете са оптимизирани
-Поправени са някои големи бъгове
-Добавен е много як екранен ефект

Код: Избери всички

#include <amxmodx>
#include <fakemeta>
//#include <fakemeta_util>

#define PLUGIN	"Toxic Water"
#define AUTHOR	"Sh!nE*"
#define VERSION	"0.8"

#define SOUNDS_ON

new bool:g_restart_attempt[33]
new bool:can_take_dmg[33]
new bool:can_play[33]
//Cvars
new dmg_feet,dmg_waist,dmg_head,dmg_near,dmg_radius,on_off,scr_fade
new icon,g_msgScreenFade
new sound[] = "fvox/radiation_detected.wav"
public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_forward(FM_PlayerPreThink, "PreThink")
	on_off = register_cvar("amx_toxicwater","1")
	dmg_feet = register_cvar("tx_dmgfeet","7")
	dmg_waist = register_cvar("tx_dmgwaist","15")
	dmg_head = register_cvar("tx_dmghead","30")
	dmg_near = register_cvar("tx_dmgnear","5")
	dmg_radius = register_cvar("tx_dmgradius","100")
	scr_fade = register_cvar("tx_fadegreen","1")
	
	g_msgScreenFade = get_user_msgid("ScreenFade")
	icon = get_user_msgid("StatusIcon")
	
	register_event("ResetHUD","event_hud_reset", "be")
	register_event("TextMsg","event_restart_attempt", "a", "2=#Game_will_restart_in")
	register_event("DeathMsg", "deatha", "a")
}

public plugin_precache() {
	#if defined SOUNDS_ON
	precache_sound(sound)
	#endif
}

public event_restart_attempt() 
{
	if(!get_pcvar_num(on_off))
		return PLUGIN_HANDLED
	
	new players[32], num
	get_players(players, num, "a")
	for (new i; i < num; ++i)
		g_restart_attempt[players[i]] = true
	
	return PLUGIN_CONTINUE
}

public event_hud_reset(id) 
{
	if(!get_pcvar_num(on_off))
		return PLUGIN_HANDLED
	
	if (g_restart_attempt[id])
		g_restart_attempt[id] = false
	
	set_task(0.2,"player_spawn",id)
	
	return PLUGIN_CONTINUE
}

public deatha() {
	new victim = read_data(2)
	remove_task(victim+1234)
	remove_task(victim+2345)
	remove_task(victim+4444)
}

public player_spawn(id) {
	if(!is_user_alive(id) || !get_pcvar_num(on_off))
		return PLUGIN_HANDLED
	
	can_take_dmg[id]=true
	can_play[id]=true
	
	remove_task(id+1234)
	remove_task(id+2345)
	remove_task(id+4444)
	
	return PLUGIN_CONTINUE
}

public PreThink(id) {
	if(!is_user_alive(id) || !get_pcvar_num(on_off) || !can_take_dmg[id])
		return FMRES_IGNORED
	
	switch(pev(id,pev_waterlevel)) {
		case 1:{
			effects(id)
			can_take_dmg[id] = false
			set_task(1.0,"reset_dmg",id+4444)
			make_dmg(id,get_pcvar_num(dmg_feet))
		}
		case 2:{
			effects(id)
			can_take_dmg[id] = false
			set_task(1.0,"reset_dmg",id+4444)
			make_dmg(id,get_pcvar_num(dmg_waist))
		}
		case 3:{
			effects(id)
			can_take_dmg[id] = false
			set_task(1.0,"reset_dmg",id+4444)
			make_dmg(id,get_pcvar_num(dmg_head))
		}
		case 0:{
			new Float:p_origin[3]
			pev(id, pev_origin, p_origin)
			
			new ent = -1
			while((ent = engfunc(EngFunc_FindEntityInSphere, ent, p_origin, get_pcvar_float(dmg_radius)))) {
				new classname[32]
				pev(ent, pev_classname, classname, 31)
				
				if(equal(classname, "func_water")) {
					effects(id)
					can_take_dmg[id] = false
					set_task(1.0,"reset_dmg",id+4444)
					make_dmg(id,get_pcvar_num(dmg_near))
				}
			}
		}
	}
	return FMRES_IGNORED
}

public reset_sound(taskid)		can_play[taskid-2345]=true
public reset_dmg(taskid)	can_take_dmg[taskid-4444]=true
public make_dmg(id,dmg)	fm_fakedamage(id,"trigger_hurt",float(dmg),DMG_GENERIC)

public effects(id) {
	//Icon Effect-----------------------------
	message_begin(MSG_ONE,icon,{0,0,0},id)
	write_byte(1) //1 = show
	write_string("dmg_rad") //Sprite
	write_byte(255) //R
	write_byte(255) //G
	write_byte(0) //B
	message_end()
	
	remove_task(id+1234)
	
	set_task(3.0,"remove_icon",id+1234)
	
	//Icon Effect-----------------------------
	
	//Sound Effect----------------------------
	
	#if defined SOUNDS_ON
	if(can_play[id]) {
		client_cmd(id,"spk %s",sound)
		can_play[id]=false
		set_task(10.0,"reset_sound",id+2345)
	}
	#endif
	
	//Sound Effect----------------------------
	
	//Screen Fade Effect----------------------
	if(get_pcvar_num(scr_fade)) {
		message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, id) 
		write_short(1<<12)
		write_short(1<<12)
		write_short(1<<12)
		write_byte(0)
		write_byte(200)
		write_byte(0)
		write_byte(20)
		message_end()
	}
	
	//Screen Fade Effect----------------------
}


public remove_icon(taskid) {
	new id = taskid - 1234
	message_begin(MSG_ONE,icon,{0,0,0},id)
	write_byte(0)
	write_string("dmg_rad")
	message_end()
}

//Stock from Fakemeta_util
stock fm_fakedamage(victim, const classname[], Float:takedmgdamage, damagetype) {
	new class[] = "trigger_hurt"
	new entity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,class))
	if (!entity)
		return 0
	
	new value[16]
	float_to_str(takedmgdamage * 2, value, sizeof value - 1)
	fm_set_kvd(entity, "dmg", value, class)
	
	num_to_str(damagetype, value, sizeof value - 1)
	fm_set_kvd(entity, "damagetype", value, class)
	
	fm_set_kvd(entity, "origin", "8192 8192 8192", class)
	dllfunc(DLLFunc_Spawn, entity)
	
	set_pev(entity, pev_classname, classname)
	dllfunc(DLLFunc_Touch, entity, victim)
	engfunc(EngFunc_RemoveEntity, entity)
	
	return 1
}

stock fm_set_kvd(entity, const key[], const value[], const classname[] = "") {
	if (classname[0])
		set_kvd(0, KV_ClassName, classname)
	else {
		new class[32]
		pev(entity, pev_classname, class, sizeof class - 1)
		set_kvd(0, KV_ClassName, class)
	}
	
	set_kvd(0, KV_KeyName, key)
	set_kvd(0, KV_Value, value)
	set_kvd(0, KV_fHandled, 0)
	
	return dllfunc(DLLFunc_KeyValue, entity, 0)
}


Начин на инсталация
1.Сложете файлът ' toxic_water.amxx ' в директорията на играта ви>cstrike>addons>amxmodx>plugins.
2.Отворете директорията на играта ви>cstrike>addons>amxmodx>configs.След това отворете файлът ' plugins.ini ' и най-отдолу на нов ред добавете: toxic_water.amxx
3.Сложете файлът ' toxic_water.sma ' в директорията на играта ви>cstrike>addons>amxmodx>scripting.

Изображение
СВАЛИ



Изображение

Отговори

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост