Описание: Прави водата токсична (взима ви кръв когато минете през нея или когато сте до нея).
Версия: 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> (Включено/Изключено, Когато сте във водата екрана ще се показва в зелен цвят (много е яко )) (По подразбиране:
-Плъгина не се нуждае от модула 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.
СВАЛИ