Raised This Month: $ Target: $400
 0% 

Assassin Vs Sniper GameMode[ZP 5.0.8]


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-15-2014 , 03:56   Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #1

Hi all,i want to do that CLASS sniper have deadly shot,i just started making server ,and i want this but idk ,im not some scripter..
Sniper Class:
Code:
/*================================================================================
	
	----------------------------
	-*- [ZP] Class: sniper -*-
	----------------------------
	
	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.
	
================================================================================*/

#include <amxmodx>
#include <fun>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <amx_settings_api>
#include <cs_maxspeed_api>
#include <cs_player_models_api>
#include <cs_weap_models_api>
#include <cs_ham_bots_api>
#include <zp50_core>
#include <zp50_items>

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

// Default models
new const models_sniper_player[][] = { "leet", "sas" }

new Array:g_models_sniper_player

#define PLAYERMODEL_MAX_LENGTH 32
#define MODEL_MAX_LENGTH 64

new g_models_sniper_weapon[MODEL_MAX_LENGTH] = "models/v_awp.mdl"

#define TASK_AURA 100
#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))

// CS Player CBase Offsets (win32)
const PDATA_SAFE = 2
const OFFSET_ACTIVE_ITEM = 373

// Weapon bitsums
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
const GRENADES_WEAPONS_BIT_SUM = (1<<CSW_HEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_SMOKEGRENADE)

// Ammo Type Names for weapons
new const AMMOTYPE[][] = { "", "357sig", "", "762nato", "", "buckshot", "", "45acp", "556nato", "", "9mm", "57mm", "45acp",
			"556nato", "556nato", "556nato", "45acp", "9mm", "338magnum", "9mm", "556natobox", "buckshot",
			"556nato", "9mm", "762nato", "", "50ae", "556nato", "762nato", "", "57mm" }

// Max BP ammo for weapons
new const MAXBPAMMO[] = { -1, 52, -1, 90, 1, 32, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120,
			30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, -1, 100 }

#define PRIMARY_ONLY 1
#define SECONDARY_ONLY 2
#define GRENADES_ONLY 4

new g_MaxPlayers
new g_IsSniper

new cvar_sniper_health, cvar_sniper_base_health, cvar_sniper_speed, cvar_sniper_gravity
new cvar_sniper_glow
new cvar_sniper_aura, cvar_sniper_aura_color_R, cvar_sniper_aura_color_G, cvar_sniper_aura_color_B
new cvar_sniper_weapon, cvar_sniper_weapon_block

public plugin_init()
{
	register_plugin("[ZP] Class: Sniper", ZP_VERSION_STRING, "ZP Dev Team")
	
	register_clcmd("drop", "clcmd_drop")
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")
	RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")
	RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")
	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
	RegisterHamBots(Ham_Killed, "fw_PlayerKilled")
	register_forward(FM_ClientDisconnect, "fw_ClientDisconnect_Post", 1)
	
	g_MaxPlayers = get_maxplayers()
	
	cvar_sniper_health = register_cvar("zp_sniper_health", "0")
	cvar_sniper_base_health = register_cvar("zp_sniper_base_health", "100")
	cvar_sniper_speed = register_cvar("zp_sniper_speed", "0.95")
	cvar_sniper_gravity = register_cvar("zp_sniper_gravity", "0.75")
	cvar_sniper_glow = register_cvar("zp_sniper_glow", "0")
	cvar_sniper_aura = register_cvar("zp_sniper_aura", "0")
	cvar_sniper_aura_color_R = register_cvar("zp_sniper_aura_color_R", "0")
	cvar_sniper_aura_color_G = register_cvar("zp_sniper_aura_color_G", "0")
	cvar_sniper_aura_color_B = register_cvar("zp_sniper_aura_color_B", "0")
	cvar_sniper_weapon = register_cvar("zp_sniper_weapon", "weapon_awp")
	cvar_sniper_weapon_block = register_cvar("zp_sniper_weapon_block", "1")
}

public plugin_precache()
{
	// Initialize arrays
	g_models_sniper_player = ArrayCreate(PLAYERMODEL_MAX_LENGTH, 1)
	
	// Load from external file
	amx_load_setting_string_arr(ZP_SETTINGS_FILE, "Player Models", "SNIPER", g_models_sniper_player)
	
	// If we couldn't load from file, use and save default ones
	new index
	if (ArraySize(g_models_sniper_player) == 0)
	{
		for (index = 0; index < sizeof models_sniper_player; index++)
			ArrayPushString(g_models_sniper_player, models_sniper_player[index])
		
		// Save to external file
		amx_save_setting_string_arr(ZP_SETTINGS_FILE, "Player Models", "SNIPER", g_models_sniper_player)
	}
	
	// Load from external file, save if not found
	if (!amx_load_setting_string(ZP_SETTINGS_FILE, "Weapon Models", "V_WEAPON SNIPER", g_models_sniper_weapon, charsmax(g_models_sniper_weapon)))
		amx_save_setting_string(ZP_SETTINGS_FILE, "Weapon Models", "V_WEAPON SNIPER", g_models_sniper_weapon)
	
	
	// Precache models
	new player_model[PLAYERMODEL_MAX_LENGTH], model_path[128]
	for (index = 0; index < ArraySize(g_models_sniper_player); index++)
	{
		ArrayGetString(g_models_sniper_player, index, player_model, charsmax(player_model))
		formatex(model_path, charsmax(model_path), "models/player/%s/%s.mdl", player_model, player_model)
		precache_model(model_path)
		// Support modelT.mdl files
		formatex(model_path, charsmax(model_path), "models/player/%s/%sT.mdl", player_model, player_model)
		if (file_exists(model_path)) precache_model(model_path)
	}
	
	precache_model(g_models_sniper_weapon)
}

public plugin_natives()
{
	register_library("zp50_class_sniper")
	register_native("zp_class_sniper_get", "native_class_sniper_get")
	register_native("zp_class_sniper_set", "native_class_sniper_set")
	register_native("zp_class_sniper_get_count", "native_class_sniper_get_count")
}

public client_disconnect(id)
{
	if (flag_get(g_IsSniper, id))
	{
		// Remove sniper glow
		if (get_pcvar_num(cvar_sniper_glow))
			set_user_rendering(id)
		
		// Remove sniper aura
		if (get_pcvar_num(cvar_sniper_aura))
			remove_task(id+TASK_AURA)
	}
}

public fw_ClientDisconnect_Post(id)
{
	// Reset flags AFTER disconnect (to allow checking if the player was sniper before disconnecting)
	flag_unset(g_IsSniper, id)
}

public clcmd_drop(id)
{
	// Should sniper stick to his weapon?
	if (flag_get(g_IsSniper, id) && get_pcvar_num(cvar_sniper_weapon_block))
		return PLUGIN_HANDLED;
	
	return PLUGIN_CONTINUE;
}

// Ham Weapon Touch Forward
public fw_TouchWeapon(weapon, id)
{
	// Should sniper stick to his weapon?
	if (get_pcvar_num(cvar_sniper_weapon_block) && is_user_alive(id) && flag_get(g_IsSniper, id))
		return HAM_SUPERCEDE;
	
	return HAM_IGNORED;
}

// Ham Player Killed Forward
public fw_PlayerKilled(victim, attacker, shouldgib)
{
	if (flag_get(g_IsSniper, victim))
	{
		// Remove sniper aura
		if (get_pcvar_num(cvar_sniper_aura))
			remove_task(victim+TASK_AURA)
	}

	// When killed by a Sniper victim explodes
	if (flag_get(g_IsSniper, attacker))
	{
		new origin[3]
		get_user_origin(victim, origin)
		
		message_begin(MSG_PVS, SVC_TEMPENTITY, origin, 0)
		write_byte(TE_LAVASPLASH)
		write_coord(origin[0])
		write_coord(origin[1])
		write_coord(origin[2] - 26)
	
		message_end()
	}
}

public zp_fw_core_spawn_post(id)
{
	if (flag_get(g_IsSniper, id))
	{
		// Remove sniper glow
		if (get_pcvar_num(cvar_sniper_glow))
			set_user_rendering(id)
		
		// Remove sniper aura
		if (get_pcvar_num(cvar_sniper_aura))
			remove_task(id+TASK_AURA)
		
		// Remove sniper weapon model
		new weapon_name[32]
		get_pcvar_string(cvar_sniper_weapon, weapon_name, charsmax(weapon_name))
		new weapon_id = get_weaponid(weapon_name)
		cs_reset_player_view_model(id, weapon_id)
		
		// Remove sniper flag
		flag_unset(g_IsSniper, id)
	}
}

public zp_fw_core_infect(id, attacker)
{
	if (flag_get(g_IsSniper, id))
	{
		// Remove sniper glow
		if (get_pcvar_num(cvar_sniper_glow))
			set_user_rendering(id)
		
		// Remove sniper aura
		if (get_pcvar_num(cvar_sniper_aura))
			remove_task(id+TASK_AURA)
		
		// Remove sniper weapon model
		new weapon_name[32]
		get_pcvar_string(cvar_sniper_weapon, weapon_name, charsmax(weapon_name))
		new weapon_id = get_weaponid(weapon_name)
		cs_reset_player_view_model(id, weapon_id)
		
		// Remove sniper flag
		flag_unset(g_IsSniper, id)
	}
}

// Ham Take Damage Forward
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
	// Non-player damage or self damage
	if (victim == attacker || !is_user_alive(attacker))
		return HAM_IGNORED;
	
	// Assassin attacking human
	if (flag_get(g_IsSniper, attacker) && zp_core_is_zombie(victim))
	{
		// Ignore assassin damage override if damage comes from a 3rd party entity
		// (to prevent this from affecting a sub-plugin's rockets e.g.)
		if (inflictor == attacker)
		{
			new plrWeapId, plrClip, plrAmmo    
			plrWeapId = get_user_weapon(attacker, plrClip, plrAmmo)
			
			if (plrWeapId == CSW_AWP)
				ExecuteHamB(Ham_Killed, victim, attacker, 0)
			
			return HAM_HANDLED;
		}
	}
	
	return HAM_IGNORED;
}

public zp_fw_core_cure_post(id, attacker)
{
	// Apply sniper attributes?
	if (!flag_get(g_IsSniper, id))
		return;
	
	// Health
	if (get_pcvar_num(cvar_sniper_health) == 0)
		set_user_health(id, get_pcvar_num(cvar_sniper_base_health) * GetAliveCount())
	else
		set_user_health(id, get_pcvar_num(cvar_sniper_health))
	
	// Gravity
	set_user_gravity(id, get_pcvar_float(cvar_sniper_gravity))
	
	// Speed (if value between 0 and 10, consider it a multiplier)
	cs_set_player_maxspeed_auto(id, get_pcvar_float(cvar_sniper_speed))

	// Apply sniper player model
	new player_model[PLAYERMODEL_MAX_LENGTH]
	ArrayGetString(g_models_sniper_player, random_num(0, ArraySize(g_models_sniper_player) - 1), player_model, charsmax(player_model))
	cs_set_player_model(id, player_model)

	// Apply sniper weapon model
	new weapon_name[32]
	get_pcvar_string(cvar_sniper_weapon, weapon_name, charsmax(weapon_name))
	new weapon_id = get_weaponid(weapon_name)
	cs_set_player_view_model(id, weapon_id, g_models_sniper_weapon)
	
	// sniper glow
	if (get_pcvar_num(cvar_sniper_glow))
		set_user_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 25)
	
	// sniper aura task
	if (get_pcvar_num(cvar_sniper_aura))
		set_task(0.1, "sniper_aura", id+TASK_AURA, _, _, "b")
	
	// Strip current weapons and give sniper weapon
	strip_weapons(id, PRIMARY_ONLY)
	strip_weapons(id, SECONDARY_ONLY)
	strip_weapons(id, GRENADES_ONLY)
	give_item(id, weapon_name)
	ExecuteHamB(Ham_GiveAmmo, id, MAXBPAMMO[weapon_id], AMMOTYPE[weapon_id], MAXBPAMMO[weapon_id])
}

public native_class_sniper_get(plugin_id, num_params)
{
	new id = get_param(1)
	
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
		return -1;
	}
	
	return flag_get_boolean(g_IsSniper, id);
}

public native_class_sniper_set(plugin_id, num_params)
{
	new id = get_param(1)
	
	if (!is_user_alive(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
		return false;
	}
	
	if (flag_get(g_IsSniper, id))
	{
		log_error(AMX_ERR_NATIVE, "[ZP] Player already a sniper (%d)", id)
		return false;
	}
	
	flag_set(g_IsSniper, id)
	zp_core_force_cure(id)
	return true;
}

public native_class_sniper_get_count(plugin_id, num_params)
{
	return GetsniperCount();
}

// sniper aura task
public sniper_aura(taskid)
{
	// Get player's origin
	static origin[3]
	get_user_origin(ID_AURA, origin)
	
	// Colored Aura
	message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
	write_byte(TE_DLIGHT) // TE id
	write_coord(origin[0]) // x
	write_coord(origin[1]) // y
	write_coord(origin[2]) // z
	write_byte(20) // radius
	write_byte(get_pcvar_num(cvar_sniper_aura_color_R)) // r
	write_byte(get_pcvar_num(cvar_sniper_aura_color_G)) // g
	write_byte(get_pcvar_num(cvar_sniper_aura_color_B)) // b
	write_byte(2) // life
	write_byte(0) // decay rate
	message_end()
}

// Get Alive Count -returns alive players number-
GetAliveCount()
{
	new iAlive, id
	
	for (id = 1; id <= g_MaxPlayers; id++)
	{
		if (is_user_alive(id))
			iAlive++
	}
	
	return iAlive;
}

// Get sniper Count -returns alive sniper number-
GetsniperCount()
{
	new isnipers, id
	
	for (id = 1; id <= g_MaxPlayers; id++)
	{
		if (is_user_alive(id) && flag_get(g_IsSniper, id))
			isnipers++
	}
	
	return isnipers;
}

// Strip primary/secondary/grenades
stock strip_weapons(id, stripwhat)
{
	// Get user weapons
	new weapons[32], num_weapons, index, weaponid
	get_user_weapons(id, weapons, num_weapons)
	
	// Loop through them and drop primaries or secondaries
	for (index = 0; index < num_weapons; index++)
	{
		// Prevent re-indexing the array
		weaponid = weapons[index]
		
		if ((stripwhat == PRIMARY_ONLY && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
		|| (stripwhat == SECONDARY_ONLY && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))
		|| (stripwhat == GRENADES_ONLY && ((1<<weaponid) & GRENADES_WEAPONS_BIT_SUM)))
		{
			// Get weapon name
			new wname[32]
			get_weaponname(weaponid, wname, charsmax(wname))
			
			// Strip weapon and remove bpammo
			ham_strip_weapon(id, wname)
			cs_set_user_bpammo(id, weaponid, 0)
		}
	}
}

stock ham_strip_weapon(index, const weapon[])
{
	// Get weapon id
	new weaponid = get_weaponid(weapon)
	if (!weaponid)
		return false;
	
	// Get weapon entity
	new weapon_ent = fm_find_ent_by_owner(-1, weapon, index)
	if (!weapon_ent)
		return false;
	
	// If it's the current weapon, retire first
	new current_weapon_ent = fm_cs_get_current_weapon_ent(index)
	new current_weapon = pev_valid(current_weapon_ent) ? cs_get_weapon_id(current_weapon_ent) : -1
	if (current_weapon == weaponid)
		ExecuteHamB(Ham_Weapon_RetireWeapon, weapon_ent)
	
	// Remove weapon from player
	if (!ExecuteHamB(Ham_RemovePlayerItem, index, weapon_ent))
		return false;
	
	// Kill weapon entity and fix pev_weapons bitsum
	ExecuteHamB(Ham_Item_Kill, weapon_ent)
	set_pev(index, pev_weapons, pev(index, pev_weapons) & ~(1<<weaponid))
	return true;
}

// Find entity by its owner (from fakemeta_util)
stock fm_find_ent_by_owner(entity, const classname[], owner)
{
	while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && pev(entity, pev_owner) != owner) { /* keep looping */ }
	return entity;
}

// Get User Current Weapon Entity
stock fm_cs_get_current_weapon_ent(id)
{
	// Prevent server crash if entity's private data not initalized
	if (pev_valid(id) != PDATA_SAFE)
		return -1;
	
	return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM);
}
RiseOfZombies is offline
zmd94
Veteran Member
Join Date: Nov 2013
Location: Malaysia (9w2zow).
Old 08-15-2014 , 05:21   Re: Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #2

Just edit the deadly shot plugin code.

Last edited by zmd94; 08-15-2014 at 08:13.
zmd94 is offline
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-15-2014 , 08:05   Re: Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #3

but,i need to set it just for Sniper..?
RiseOfZombies is offline
zmd94
Veteran Member
Join Date: Nov 2013
Location: Malaysia (9w2zow).
Old 08-15-2014 , 08:15   Re: Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #4

@ RiseOfZombies, I just realise something is not right.

Why you need the deadly shot for Sniper? This is because the Sniper is already dealt a high damage to the zombies:
Quote:
1 hit 1 kill.

Last edited by zmd94; 08-15-2014 at 08:16.
zmd94 is offline
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-15-2014 , 09:08   Re: Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #5

But,that is a extra item..And i told u,im not a pr0 scripter,im begginer
RiseOfZombies is offline
zmd94
Veteran Member
Join Date: Nov 2013
Location: Malaysia (9w2zow).
Old 08-15-2014 , 11:00   Re: Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #6

I'm still don't know why you need a deadly shot for Sniper? However, as you still want it, I have modified the code.
Quote:
Now, the Sniper will have Deadly Shot. Just press "E" button to activate the ability.




If you want it, just download it from below:
Quote:
Deadly Shot (for Sniper)
zmd94 is offline
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-15-2014 , 11:05   Re: Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #7

No that..Look,i dont want extra item,i just want that in Assasin Vs Sniper mode ,sniper have,when u shot a Assassin ,he dies ..
RiseOfZombies is offline
zmd94
Veteran Member
Join Date: Nov 2013
Location: Malaysia (9w2zow).
Old 08-15-2014 , 11:10   Re: Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #8

The plugin is not an extra item. I have edit the main zp50_sniper_class.sma file. So, it will not be displayed as an extra item.

The Deadly Shot only will be available for Sniper. ;)
zmd94 is offline
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-15-2014 , 11:15   Re: Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #9

¸Ok,Can u give me it?
RiseOfZombies is offline
zmd94
Veteran Member
Join Date: Nov 2013
Location: Malaysia (9w2zow).
Old 08-15-2014 , 11:34   Re: Assassin Vs Sniper GameMode[ZP 5.0.8]
Reply With Quote #10

Just download it from here:
Quote:
Deadly Shot (for Sniper)
zmd94 is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 13:02.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode