Thread: [Subplugin Submission] [ZP] Addon: FPS Menu (Full Package)
View Single Post
ShaunCraft
Junior Member
Join Date: Sep 2021
Location: Alger, Algeria
Old 02-11-2022 , 11:14   Re: [ZP] Addon: FPS Menu (Full Package)
Reply With Quote #7

PHP Code:
/*============================================ ====================================

---------------------------------
-*- [ZP] Item: Zombie Madness -*-
---------------------------------

This plugin is part of Zombie Plague Mod and is distributed under the
terms of the GNU General Public License. Check ZP_ReadMe.txt for details.

============================================= ===================================*/

#define ITEM_NAME "Zombie Madness"
#define ITEM_COST 15

#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <amx_settings_api>
#include <cs_ham_bots_api>
#include <zp50_items>
#define LIBRARY_GRENADE_FROST "zp50_grenade_frost"
#include <zp50_grenade_frost>
#define LIBRARY_GRENADE_FIRE "zp50_grenade_fire"
#include <zp50_grenade_fire>
#define LIBRARY_NEMESIS "zp50_class_nemesis"
#include <zp50_class_nemesis>
#define LIBRARY_DRAGON "zp50_class_dragon"
#include <zp50_class_dragon>
#define LIBRARY_ASSASSIN "zp50_class_assassin"
#include <zp50_class_assassin>
#define LIBRARY_NIGHTCRAWLER "zp50_class_nightcrawler"
#include <zp50_class_nightcrawler>

native zp_set_player_aura(idc1c2c3radius)

// Settings file
new const ZP_SETTINGS_FILE[] = "zombieplague.ini"

// Default sounds
new const sound_zombie_madness[][] = { "zombie_plague/zombie_madness1.wav" }

#define SOUND_MAX_LENGTH 64

new Array:g_sound_zombie_madness

#define TASK_MADNESS 100
#define TASK_AURA 200
#define ID_MADNESS (taskid - TASK_MADNESS)
#define ID_AURA (taskid - TASK_AURA)

#define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
#define flag_get_boolean(%1,%2) (flag_get(%1,%2) ? true : false)
#define flag_set(%1,%2) %1 |= (1 << (%2 & 31))
#define flag_unset(%1,%2) %1 &= ~(1 << (%2 & 31))

new g_ItemID
new g_MadnessBlockDamage

new cvar_zombie_madness_time
new cvar_madness_aura_color_Rcvar_madness_aura_color_Gcvar_madness_aura_color_B

public plugin_init()
{
register_plugin("[ZP] Item: Zombie Madness"ZP_VERSION_STRING"ZP Dev Team")

RegisterHam(Ham_Spawn"player""fw_PlayerSpawn_Post"1)
RegisterHamBots(Ham_Spawn"fw_PlayerSpawn_Post"1)
RegisterHam(Ham_TraceAttack"player""fw_TraceAttack")
RegisterHamBots(Ham_TraceAttack"fw_TraceAttack")
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
RegisterHamBots(Ham_TakeDamage"fw_TakeDamage")
RegisterHam(Ham_Killed"player""fw_PlayerKilled_Post"1)
RegisterHamBots(Ham_Killed"fw_PlayerKilled_Post"1)

cvar_zombie_madness_time register_cvar("zp_zombie_madness_time""5.0")
cvar_madness_aura_color_R register_cvar("zp_madness_aura_color_R""150")
cvar_madness_aura_color_G register_cvar("zp_madness_aura_color_G""0")
cvar_madness_aura_color_B register_cvar("zp_madness_aura_color_B""0")

g_ItemID zp_items_register(ITEM_NAMEITEM_COST)
}

public 
plugin_precache()
{
// Initialize arrays
g_sound_zombie_madness ArrayCreate(SOUND_MAX_LENGTH1)

// Load from external file
amx_load_setting_string_arr(ZP_SETTINGS_FILE"Sounds""ZOMBIE MADNESS"g_sound_zombie_madness)

// If we couldn't load custom sounds from file, use and save default ones
new index
if (ArraySize(g_sound_zombie_madness) == 0)
{
for (
index 0index sizeof sound_zombie_madnessindex++)
ArrayPushString(g_sound_zombie_madnesssound_zombie_madness[index])

// Save to external file
amx_save_setting_string_arr(ZP_SETTINGS_FILE"Sounds""ZOMBIE MADNESS"g_sound_zombie_madness)
}

// Precache sounds
new sound[SOUND_MAX_LENGTH]
for (
index 0index ArraySize(g_sound_zombie_madness); index++)
{
ArrayGetString(g_sound_zombie_madnessindexsoundcharsmax(sound))
precache_sound(sound)
}
}

public 
plugin_natives()
{
register_library("zp50_item_zombie_madness")
register_native("zp_item_zombie_madness_get""native_item_zombie_madness_get")

set_module_filter("module_filter")
set_native_filter("native_filter")
}
public 
module_filter(const module[])
{
if (
equal(moduleLIBRARY_NEMESIS) || equal(moduleLIBRARY_DRAGON) || equal(moduleLIBRARY_NIGHTCRAWLER) || equal(moduleLIBRARY_ASSASSIN) || equal(moduleLIBRARY_GRENADE_FROST) || equal(moduleLIBRARY_GRENADE_FIRE))
return 
PLUGIN_HANDLED;

return 
PLUGIN_CONTINUE;
}
public 
native_filter(const name[], indextrap)
{
if (!
trap)
return 
PLUGIN_HANDLED;

return 
PLUGIN_CONTINUE;
}

public 
native_item_zombie_madness_get(plugin_idnum_params)
{
new 
id get_param(1)

if (!
is_user_alive(id))
{
log_error(AMX_ERR_NATIVE"[ZP] Invalid Player (%d)"id)
return 
false;
}

return 
flag_get_boolean(g_MadnessBlockDamageid);
}

public 
zp_fw_items_select_pre(iditemidignorecost)
{
// This is not our item
if (itemid != g_ItemID)
return 
ZP_ITEM_AVAILABLE;

// Zombie madness only available to zombies
if (!zp_core_is_zombie(id))
return 
ZP_ITEM_DONT_SHOW;

// Zombie madness not available to Nemesis/Assassin/Dragon/Nightcrawler
if (LibraryExists(LIBRARY_NEMESISLibType_Library) && zp_class_nemesis_get(id) || LibraryExists(LIBRARY_ASSASSINLibType_Library) && zp_class_assassin_get(id) || LibraryExists(LIBRARY_DRAGONLibType_Library) && zp_class_dragon_get(id) || LibraryExists(LIBRARY_NIGHTCRAWLERLibType_Library) && zp_class_nightcrawler_get(id))
return 
ZP_ITEM_DONT_SHOW;

// Player already has madness
if (flag_get(g_MadnessBlockDamageid))
return 
ZP_ITEM_NOT_AVAILABLE;

return 
ZP_ITEM_AVAILABLE;
}

public 
zp_fw_items_select_post(iditemidignorecost)
{
// This is not our item
if (itemid != g_ItemID)
return;

// Do not take damage
flag_set(g_MadnessBlockDamageid)

// Madness aura
set_task(0.1"madness_aura"id+TASK_AURA__"b")

// Madness sound
new sound[SOUND_MAX_LENGTH]
ArrayGetString(g_sound_zombie_madnessrandom_num(0ArraySize(g_sound_zombie_madness) - 1), soundcharsmax(sound))
emit_sound(idCHAN_VOICEsound1.0ATTN_NORM0PITCH_NORM)

// Set task to remove it
set_task(get_pcvar_float(cvar_zombie_madness_ time), "remove_zombie_madness"id+TASK_MADNESS)
}

// Ham Player Spawn Post Forward
public fw_PlayerSpawn_Post(id)
{
// Not alive or didn't join a team yet
if (!is_user_alive(id) || !cs_get_user_team(id))
return;

// Remove zombie madness from a previous round
remove_task(id+TASK_MADNESS)
remove_task(id+TASK_AURA)
flag_unset(g_MadnessBlockDamageid)
}

// Ham Trace Attack Forward
public fw_TraceAttack(victimattacker)
{
// Non-player damage or self damage
if (victim == attacker || !is_user_alive(attacker))
return 
HAM_IGNORED;

// Prevent attacks when victim has zombie madness
if (flag_get(g_MadnessBlockDamagevictim))
return 
HAM_SUPERCEDE;

return 
HAM_IGNORED;
}

// Ham Take Damage Forward (needed to block explosion damage too)
public fw_TakeDamage(victiminflictorattacker)
{
// Non-player damage or self damage
if (victim == attacker || !is_user_alive(attacker))
return 
HAM_IGNORED;

// Prevent attacks when victim has zombie madness
if (flag_get(g_MadnessBlockDamagevictim))
return 
HAM_SUPERCEDE;

return 
HAM_IGNORED;
}

public 
zp_fw_grenade_frost_pre(id)
{
// Prevent frost when victim has zombie madness
if (flag_get(g_MadnessBlockDamageid))
return 
PLUGIN_HANDLED;

if (
flag_get(g_MadnessBlockDamageid) && !zp_grenade_frost_get(id)) zp_grenade_frost_set(idfalse)

return 
PLUGIN_CONTINUE;
}

public 
zp_fw_grenade_fire_pre(id)
{
// Prevent burning when victim has zombie madness
if (flag_get(g_MadnessBlockDamageid))
return 
PLUGIN_HANDLED;

if (
flag_get(g_MadnessBlockDamageid) && !zp_grenade_fire_get(id)) zp_grenade_fire_set(idfalse)

return 
PLUGIN_CONTINUE;
}

public 
zp_fw_core_cure(idattacker)
{
// Remove zombie madness task
remove_task(id+TASK_MADNESS)
remove_task(id+TASK_AURA)
flag_unset(g_MadnessBlockDamageid)
}

// Ham Player Killed Post Forward
public fw_PlayerKilled_Post(victimattackershouldgib)
{
// Remove zombie madness task
remove_task(victim+TASK_MADNESS)
remove_task(victim+TASK_AURA)
flag_unset(g_MadnessBlockDamagevictim)
}

// Remove Spawn Protection Task
public remove_zombie_madness(taskid)
{
// Remove aura
remove_task(ID_MADNESS+TASK_AURA)

// Remove zombie madness
flag_unset(g_MadnessBlockDamageID_MADNESS)
}

public 
client_disconnect(id)
{
// Remove tasks on disconnect
remove_task(id+TASK_MADNESS)
remove_task(id+TASK_AURA)
flag_unset(g_MadnessBlockDamageid)
}

// Madness aura task
public madness_aura(taskid)
{
zp_set_player_aura(ID_AURAget_pcvar_num(cvar_madness_aura_color_R), get_pcvar_num(cvar_madness_aura_color_G), get_pcvar_num(cvar_madness_aura_color_B), 20)


Last edited by ShaunCraft; 02-11-2022 at 11:16.
ShaunCraft is offline