Udało mi się coś wykombinować z tą maską gazową której szukałem ale kod mi dobrze nie działa. Otóż dźwięki nie są zawsze odtwarzane a jak zdejmiemy maskę podczas odtwarzania to potem dźwięki się bugują i są odtwarzane po 2 razy. Czasami gdy zakładam maskę pisze że Zdjąłem i na odwrót. Czasami też dźwięki w ogóle się nie odtwarzają.
Oto kod:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#define VERSION "1.6"
#if AMXX_VERSION_NUM < 180
#define charsmax(%1) sizeof(%1) - 1
#endif
#define OFFSET_CSDEATHS 444
#define OFFSET_TEAM 114
#define TASK_SAP 2948
#define GASP_SOUND1 "player/gasp1.wav"
#define GASP_SOUND2 "player/gasp2.wav"
#define SAP_SOUND1 "player/inhale.wav"
#define SAP_SOUND2 "player/exhale.wav"
#define SMOKEGRENADE_SOUND "weapons/sg_explode.wav"
#define GAS_CLASSNAME "gasgrenade"
#define GASNADE_LIFE 25.0
new amx_gasnades, amx_gasdmg, amx_gascheck, amx_gasradius, amx_smokegasp, amx_gasobeyFF, amx_gas_restore, amx_gas_maskon, amx_gas_mask_sap,amx_gas_mask_fade,amx_gas_maskon_max_fade
new mp_friendlyfire
new gmsgDamage, gmsgDeathMsg, gmsgScoreInfo
new Float:player_affected_time[33]
new Float:player_restored_time[33]
new Float:damage_took[33]
new bool:has_mask[33]
new bool:has_on[33]
new gMsgScreenFade
public plugin_precache()
{
engfunc(EngFunc_PrecacheSound, GASP_SOUND1)
engfunc(EngFunc_PrecacheSound, GASP_SOUND2)
engfunc(EngFunc_PrecacheSound, SAP_SOUND1)
engfunc(EngFunc_PrecacheSound, SAP_SOUND2)
}
public plugin_init()
{
register_plugin("Gas Grenades", VERSION, "ConnorMcLeod") // RichoDemus/AssKicR/T(+)rget for previous versions
register_event("HLTV", "eNewRound", "a", "1=0", "2=0")
register_forward(FM_EmitSound, "fwdEmitSound")
register_forward(FM_Touch, "fwdTouch")
register_forward(FM_Think, "fwdThink")
register_forward(FM_PlayerPreThink, "fwdPlayerPreThink")
register_event("DeathMsg", "player_death", "a")
register_event("Flashlight","event_flashlight","b");
register_event("ResetHUD", "ResetHUD", "abe")
register_clcmd("say /maska", "mask")
register_cvar("gasnade", VERSION, FCVAR_SERVER)
gMsgScreenFade = get_user_msgid("ScreenFade")
amx_gasnades = register_cvar("amx_gasnades", "1") // 0/1 Disable/Enable the whole plugin
amx_gasdmg = register_cvar("amx_gasdmg", "2") // How much damage the player takes every check cycle, 0 to disable damage (see amx_gascheck)
amx_gascheck = register_cvar("amx_gascheck", "2") // Check period in seconds
amx_gasradius = register_cvar("amx_gasradius", "180") // Smoke Radius (best is 170 - 230)
amx_smokegasp = register_cvar("amx_smokegasp", "1") // 0/1 Makes players gasp/cough in smoke
amx_gasobeyFF = register_cvar("amx_gasobeyFF", "0") // 0/1 Makes plugin act or not as cvar mp_friendlyfire
amx_gas_restore = register_cvar("amx_gas_restore", "1") // 0/1 Restore or not HP (if amx_gasdmg > 0)
amx_gas_maskon = register_cvar("amx_gas_maskon", "1")
amx_gas_mask_sap = register_cvar("amx_gas_maskon_sap", "1")
amx_gas_mask_fade = register_cvar("amx_gas_maskon_fade", "1")
amx_gas_maskon_max_fade = register_cvar("amx_gas_maskon_max_fade", "30")
}
public event_flashlight(id)
{
new on = read_data(1)
if(on==1)
{
has_on[id]=true
fade_mask(id,1)
}
else
{
has_on[id]=false
fade_mask(id,0)
}
}
public ResetHUD(id)
{
if(is_user_alive(id) && has_on[id])
{
fade_mask(id,1)
}
else
{
fade_mask(id,0)
}
}
public fade_mask(id,on)
{
if(get_pcvar_num(amx_gas_mask_fade)!=1) return
new x = get_pcvar_num(amx_gas_maskon_max_fade)
if(!on) x=0
message_begin(MSG_ONE,gMsgScreenFade,{0,0,0},id)
write_short( 1<<15 )
write_short( 1<<10 )
write_short( 1<<2 )
write_byte( 0 )
write_byte( 0 )
write_byte( 0 )
write_byte( x )
message_end()
mask(id)
}
public plugin_cfg()
{
mp_friendlyfire = get_cvar_pointer("mp_friendlyfire")
gmsgDamage = get_user_msgid("Damage")
gmsgDeathMsg = get_user_msgid("DeathMsg")
gmsgScoreInfo = get_user_msgid("ScoreInfo")
}
public mask(id)
{
if(!is_user_alive(id) && get_pcvar_num(amx_gas_maskon))
{
return PLUGIN_HANDLED
}
if(has_mask[id])
{
client_print(id, print_chat, "Zdjales maske")
has_mask[id] = false
return PLUGIN_HANDLED
}
if(is_user_alive(id) && get_pcvar_num(amx_gas_maskon) && !has_mask[id])
{
client_print(id, print_chat, "Zalozyles maske")
has_mask[id] = true
if(get_pcvar_num(amx_gas_mask_sap) && has_on[id])
{
new args[1]
args[0]=id
set_task(1.0,"sap_sound",args[0]+TASK_SAP,args,1)
}
}
}
public sap_sound(args[1])
{
new id = args[0]
if(is_user_alive(id) && has_on[id]) emit_sound(id,CHAN_BODY,"player/inhale.wav",0.5,ATTN_NORM,0,80)
//if(has_mask[id]) set_task(3.0,"sap_sound",args[0]+TASK_SAP,args,1)
set_task(1.0,"sap_sound2",args[0]+TASK_SAP,args,1)
}
public sap_sound2(args[1])
{
new id = args[0]
if(is_user_alive(id) && has_on[id]) emit_sound(id,CHAN_BODY,"player/exhale.wav",0.5,ATTN_NORM,0,80)
if(has_mask[id]) set_task(3.0,"sap_sound",args[0]+TASK_SAP,args,1)
}
public player_death()
{
new id = read_data(2)
has_mask[id] = false
has_on[id] = false
}
Jak byście potrzebowali resztę to piszcie wrzucę w załączniku bo jest ponad 200 linii. Prosiłbym o poprawienie kodu i naprawę w miare możliwości.