[ZP] Addon: Screamer

Descarcari de pluginuri si discutii despre acestea.

Moderators: Moderatori ajutători, Scripteri TheXForce

Post Reply
User avatar
Rainq
Fost administrator
Fost administrator
Posts: 381
Joined: Mon Jan 18, 2021 7:25 am
Status: Citesc forumul TheXForce.RO...!
Detinator Steam: Da
SteamID: mrainq
Gaming experience: Nu spun..
Reputatie: Fost administrator
Nume anterior: Light
Fost detinator zm.thexforce.ro
Fost detinator dr.thexforce.ro
Location: Bucureşti
Has thanked: 2 times
Been thanked: 1 time
Contact:

[ZP] Addon: Screamer

Post by Rainq »

Descriere: Niste capuri de zm ce iti apar odata la ceva timp cand esti in raza zm-ului ,e mai mult jumpscare,personal il folosesc pe server si pot spune ca e un plugin ce te face putin mai diferit,daca mai schimbati sunetele sau modelele deja treceti la urmatorul nivel.

Descarcare:

Code: Select all

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

#define MAX_CLIENTS 32
#define TASKID_SCREAMER 1550
#define TASKID_REMOVE_SCREAMER 1650 // daca sunt in conflict, schimbati (diferenta cu sarcina de mai sus +33)

// Linux extra offsets
#define PDATA_SAFE 2

#define linux_diff_weapon 4
#define linux_diff_player 5

// CBaseMonster
#define m_flNextAttack 83

// CBasePlayer
#define m_pActiveItem 373

#define SCREAMER_RESET_TIME random_float(120.0, 160.0) // delay intre modele
#define SCREAMER_MODEL_TIME 2.0 // cat timp tine modelul pe ecran
#define SCREAMER_RADIUS_HUMANS 350.0 // radius
#define SCREAMER_MIN_PLAYERS 1 // numarul minim de jucatori pentru a rula pluginul
//#define SCREAMER_ENABLE_SURVIVOR // daca merge pe survivor
#define SCREAMER_ENABLE_DLIGHT // lumina
#define SCREAMER_BLOCK_SWITCH_WEAPON // blocarea schimbarilor de arme
#define SCREAMER_BLOCK_SHOOTING // blocheaza arma
#define SCREAMER_VOLUME 1.0 // cat de tare sa se auda 

new Float: gl_flUserScreamed[MAX_CLIENTS + 1];

new const SCREAMER_MODELS[][] = 
{
	"models/x/screamer1.mdl",
	"models/x/screamer2.mdl",
	"models/x/screamer3.mdl"
};

new const SCREAMER_SOUNDS[][] =
{
	"scream/1.wav",
	"scream/2.wav",
	"scream/3.wav",
	"scream/4.wav"
};

public plugin_init()
{
	register_plugin("[ZP] Addon: Screamer", "1.0", "xUnicorn (t3rkecorejz)");

	#if defined SCREAMER_BLOCK_SWITCH_WEAPON
	register_forward(FM_ClientCommand, "FM_Hook_ClientCommand_Pre", false);
	#endif

	RegisterHam(Ham_Spawn, "player", "CBasePlayer__Spawn_Post", true);
}

public plugin_precache()
{
	new i;

	for(i = 0; i < sizeof SCREAMER_MODELS; i++)
		engfunc(EngFunc_PrecacheModel, SCREAMER_MODELS[i]);

	for(i = 0; i < sizeof SCREAMER_SOUNDS; i++)
		engfunc(EngFunc_PrecacheSound, SCREAMER_SOUNDS[i]);
}

public client_putinserver(iPlayer) Reset_Value(iPlayer);
//public client_disconnect(iPlayer) Reset_Value(iPlayer);

#if defined SCREAMER_BLOCK_SWITCH_WEAPON
public FM_Hook_ClientCommand_Pre(iPlayer)
{
	new szCommand[32]; read_argv(0, szCommand, charsmax(szCommand));
	new szBlockCommands[][] = { "drop", "lastinv", "weapon_", "slot" };

	if(gl_flUserScreamed[iPlayer] > get_gametime())
	{
		for(new i = 0; i < sizeof szBlockCommands; i++)
		{
			if(equali(szCommand, szBlockCommands[i], strlen(szBlockCommands[i]))) return FMRES_SUPERCEDE;
		}
	}

	return FMRES_IGNORED
}
#endif

public CBasePlayer__Spawn_Post(iPlayer)
{
	if(!is_user_alive(iPlayer)) return HAM_IGNORED;

	if(get_playersnum() >= SCREAMER_MIN_PLAYERS && !zp_get_user_zombie(iPlayer))
		set_task(SCREAMER_RESET_TIME, "CTask__StartScreamer", iPlayer + TASKID_SCREAMER, _, _, .flags = "b");

	return HAM_IGNORED;
}

public zp_user_infected_post(iPlayer) Reset_Value(iPlayer);
public zp_user_humanized_post(iPlayer)
{
	Reset_Value(iPlayer);

	if(get_playersnum() >= SCREAMER_MIN_PLAYERS)
		set_task(SCREAMER_RESET_TIME, "CTask__StartScreamer", iPlayer + TASKID_SCREAMER, _, _, .flags = "b");
}

public CTask__StartScreamer(iTask)
{
	new iPlayer = iTask - TASKID_SCREAMER;

	if(!zp_has_round_started()) return;
	if(gl_flUserScreamed[iPlayer] > get_gametime()) return;

	if(!is_user_alive(iPlayer) || zp_get_user_zombie(iPlayer))
	{
		remove_task(iPlayer + TASKID_SCREAMER);
		return;
	}

	#if !defined SCREAMER_ENABLE_SURVIVOR
	if(zp_get_user_survivor(iPlayer))
	{
		remove_task(iPlayer + TASKID_SCREAMER);
		return;
	}
	#endif

	static iHuman;
	static Float: vecOrigin[3]; pev(iPlayer, pev_origin, vecOrigin);

	while((iHuman = engfunc(EngFunc_FindEntityInSphere, iHuman, vecOrigin, SCREAMER_RADIUS_HUMANS)) > 0)
	{
		if(iPlayer == iHuman || !is_user_alive(iHuman) || zp_get_user_zombie(iHuman)) continue;

		return;
	}

	set_pev(iPlayer, pev_viewmodel2, SCREAMER_MODELS[random_num(0, sizeof SCREAMER_MODELS - 1)]);
	emit_sound(iPlayer, CHAN_WEAPON, SCREAMER_SOUNDS[random_num(0, sizeof SCREAMER_SOUNDS - 1)], SCREAMER_VOLUME, ATTN_NORM, 0, PITCH_NORM);
	gl_flUserScreamed[iPlayer] = get_gametime() + SCREAMER_MODEL_TIME;

	#if defined SCREAMER_ENABLE_DLIGHT
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0);
	write_byte(TE_DLIGHT); // TE index
	engfunc(EngFunc_WriteCoord, vecOrigin[0]); // X
	engfunc(EngFunc_WriteCoord, vecOrigin[1]); // Y
	engfunc(EngFunc_WriteCoord, vecOrigin[2]); // Z
	write_byte(25); // Radius 
	write_byte(255); // Red
	write_byte(0); // Green
	write_byte(0); // Blue
	write_byte(floatround(SCREAMER_MODEL_TIME * 10)); // Life 
	write_byte(15); // Decay rate 
	message_end();
	#endif

	#if defined SCREAMER_BLOCK_SHOOTING
	set_pdata_float(iPlayer, m_flNextAttack, SCREAMER_MODEL_TIME, linux_diff_player);
	#endif

	set_task(SCREAMER_MODEL_TIME, "CTask__RemoveScreamer", iPlayer + TASKID_REMOVE_SCREAMER);
}

public CTask__RemoveScreamer(iTask)
{
	new iPlayer = iTask - TASKID_REMOVE_SCREAMER;

	Remove_Screamer(iPlayer);
}

public Remove_Screamer(iPlayer)
{
	if(!is_user_alive(iPlayer)) return;

	emit_sound(iPlayer, CHAN_WEAPON, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

	new iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);

	if(pev_valid(iItem) == PDATA_SAFE)
		ExecuteHamB(Ham_Item_Deploy, iItem);
}

Reset_Value(iPlayer)
{
	if(is_user_bot(iPlayer)) return;

	gl_flUserScreamed[iPlayer] = 0.0;

	//Remove_Screamer(iPlayer); // singurul lucru la functia asta e ca atunci cand primeste scary o sa ramana pe arma respectiva ,daca spre exemplu
	//set_pdata_float(iPlayer, m_flNextAttack, 0.0, linux_diff_player); // a aruncat grenada si primeste scary in acelasi timp ramane pe grenada dar fara item, nu afecteaza serverul

	if(!task_exists(iPlayer + TASKID_SCREAMER))
		remove_task(iPlayer + TASKID_SCREAMER);

	if(!task_exists(iPlayer + TASKID_REMOVE_SCREAMER))
		remove_task(iPlayer + TASKID_REMOVE_SCREAMER);
}
Nume: Addon: Screamer
Versiune: 1.0
Link oficial: cspower / thexforce

Instalare:
1. Fisierul zp_addon_screamer.sma il puneti in addons/amxmodx/scripting
2. Fisierul zp_addon_screamer.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:

Code: Select all

zp_addon_screamer.amxx
4. Alti pasi necesari....

Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg): -
Imagini: -
Image
Post Reply

Return to “Pluginuri”