[Weapon] Ethereal

Pluginuri pentru modul AmxModX.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

User avatar
sDs|Aragon*
Membru, skill +2
Membru, skill +2
Posts: 576
Joined: 29 Dec 2011, 21:38
Detinator Steam: Da
SteamID: Mihai_Parkour10
Reputatie: Fost scripter eXtreamCS
Has thanked: 4 times
Been thanked: 132 times

18 Apr 2013, 19:11

twistu wrote:
sDs|Aragon* wrote:
fLG wrote:Nu vi-l recomand. pentru ca este un plugin folosit mai mult la ZOMBIE.. Furien? ce legatura are..
Ti se pare ca am mentionat eu pe undeva ca este de Furien?
Daca te uiti atent el este facut pentru modu classic, si poate fi convertit pentru orice mod.
El a postat doar pentru +1 nu cu un scop anume :)
Sds ia vezi link-ul de download mai functioneaza ? , ca la mne nu mai vrea sa mi se downloadeze dp GirlShare
Am adaugat inca 2 link-uri de download.
RoyalServer
User avatar
sDs|Aragon*
Membru, skill +2
Membru, skill +2
Posts: 576
Joined: 29 Dec 2011, 21:38
Detinator Steam: Da
SteamID: Mihai_Parkour10
Reputatie: Fost scripter eXtreamCS
Has thanked: 4 times
Been thanked: 132 times

18 Apr 2013, 19:13

hades1231 wrote:
sDs|Aragon* wrote:Update: Am modificat cate ceva pe acolo, acum nu ar trebui sa mai apara acel bug cu "0 hp, blocat in textura"
Am modificat linkul.
la mine nu se mai bloca, dar am vazut ca asta sparge si cutiile (cele de "metal"), modifici te rog pentru sv furien sa poata cumpara doar cei de la ct? merci
| Afiseaza codul
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Ethereal |
//==========================================================================================================
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>

#define PLUGIN "Ethereal"
#define VERSION "1.0"
#define AUTHOR "sDs|Aragon*"

const PRIMARY_WEAPONS_BITSUM =(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);
new BloodDrop, BloodSpray

#define ETHEREAL_WEAPONKEY	103
#define weapon_ethereal		"weapon_galil"
#define CSW_ETHEREAL		CSW_GALIL
#define ethereal_shotdelay	0.15 // Refire rate

new EtherealModel_V[] = "models/Ethereal/v_ethereal.mdl";
new EtherealModel_P[] = "models/Ethereal/p_ethereal.mdl";
new EtherealModel_W[] = "models/Ethereal/w_ethereal.mdl";
new const ethereal_sound[5][] = {
	"weapons/ethereal_shoot1.wav",
	"weapons/ethereal_hit.wav",
	"weapons/ethereal_idle1.wav",
	"weapons/ethereal_reload.wav",
	"weapons/ethereal_draw.wav"
};
new const ethereal_generic[3][] = {
	"sprites/Ethereal/weapon_ethereal",
	"sprites/Ethereal/Ethereal.spr",
	"sprites/Ethereal/640hud2.spr"
};
new bool:HasEthereal[33], ethereal_clip[33], ethereal_reload[33], Float:EtherealLastShotTime[33], ethereal_trail, ethereal_explode;
new ethereal, etherealcost, etherealdamage, etherealclip, etherealammo, etherealreloadtime, etherealknockback;

public plugin_init() {
	register_plugin( PLUGIN, VERSION, AUTHOR );
	RegisterHam(Ham_Spawn, "player", "Spawn_Post", 1);
	RegisterHam(Ham_Killed, "player", "PlayerKilled");	
	
	register_clcmd("Ethereal/weapon_ethereal", "hook_ethereal");
	register_event("CurWeapon", "Ethereal_Model", "be", "1=1");	
	register_event("WeapPickup","Ethereal_Model","b","1=19");
	register_forward(FM_SetModel, "Ethereal_SetModel");
	register_forward(FM_CmdStart, "Ethereal_CmdStart");	
	register_forward(FM_UpdateClientData, "Ethereal_UpdateClientData_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_ethereal, "Ethereal_Deploy_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_ethereal, "Ethereal_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_ethereal, "Ethereal_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_ethereal, "Ethereal_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_ethereal, "Ethereal_PostFrame");	
	
	ethereal = register_cvar("amx_ethereal", "1");				//| Ethereal 0 Disable -> 1 Enable |//
	etherealcost = register_cvar("amx_etherealcost", "8000");		//| Ethereal Cost |//
	etherealdamage = register_cvar("amx_ethereal_damage", "80");		//| Ethereal Damage |//
	etherealclip = register_cvar("amx_ethereal_clip", "30");			//| Ethereal Clip |//
	etherealammo = register_cvar("amx_ethereal_ammo", "120");		//| Ethereal Ammo |//
	etherealreloadtime = register_cvar("amx_ethereal_reload_time", "3.03");	//| Ethereal Reload Time |//
	etherealknockback = register_cvar("amx_ethereal_knockback", "3");	//| Ethereal KnockBack |//
	
	register_clcmd("ethereal", "buy_ethereal");
	register_clcmd("buy_ethereal", "buy_ethereal");
	register_clcmd("say /ethereal", "buy_ethereal");
	register_clcmd("say /buy_ethereal", "buy_ethereal");
	register_clcmd("say buy_ethereal", "buy_ethereal");
	register_clcmd("say_team /ethereal", "buy_ethereal");
	register_clcmd("say_team /buy_ethereal", "buy_ethereal");
	register_clcmd("say_team buy_ethereal", "buy_ethereal");
	register_concmd("amx_give_ethereal", "GiveEthereal", ADMIN_LEVEL_G, "Name");
}

public plugin_natives() {
	register_native("get_user_ethereal", "get_user_ethereal", 1);
	register_native("set_user_ethereal", "set_user_ethereal", 1);
}

public get_user_ethereal(id) {
	return HasEthereal[id];
}

public set_user_ethereal(id, ethereal) {
	if(ethereal) {
		if(!HasEthereal[id]) {
			drop_primary_weapons(id);
			HasEthereal[id] = true;
			message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id);
			write_string("Ethereal/weapon_ethereal");	// WeaponName
			write_byte(4);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(17);			// NumberInSlot (1...N)
			write_byte(CSW_ETHEREAL);	// WeaponID
			write_byte(0);			// Flags
			message_end();
			fm_give_item(id, weapon_ethereal)
			cs_set_user_bpammo(id, CSW_ETHEREAL, get_pcvar_num(etherealammo))
			new clip = fm_get_user_weapon_entity(id, CSW_ETHEREAL);
			cs_set_weapon_ammo(clip, get_pcvar_num(etherealclip));
			set_weapon_anim(id, 2);
		}
	}
	else {
		if(HasEthereal[id]) {
			HasEthereal[id] = false;
		}
	}
}

public Spawn_Post(id) set_user_ethereal(id, 0);

public PlayerKilled(victim, attacker, shouldgib) set_user_ethereal(victim, 0);

//------| Buy Ethereal |------//
public buy_ethereal(id) {
	if(get_user_team(id) == 2) {
		new ethcost = get_pcvar_num(etherealcost);
		if(!get_pcvar_num(ethereal)) {
			ColorChat(id, "^x04[Ethereal]^x03 Ethereal^x04 este dezactivat.");
		}
		else if(!is_user_alive(id)) {
			ColorChat(id, "^x04[Ethereal]^x03 Nu poti cumpara^x04 Ethereal^x03 cat timp esti mort.");
		}
		else if(get_user_ethereal(id)) {
			ColorChat(id, "^x04[Ethereal]^x03 Ai deja^x04 Ethereal.");
		}
		else if(cs_get_user_money(id) < ethcost) {
			ColorChat(id, "^x04[Ethereal]^x03 Nu ai suficiente fonduri pentru a cumpara^x04 Ethereal^x03. Necesari: ^x04$%d",ethcost);
		}
		else {
			cs_set_user_money(id, cs_get_user_money(id) - ethcost);
			ColorChat(id, "^x04[Ethereal]^x03 Ai cumparat^x04 Ethereal.");
			set_user_ethereal(id, true);
		}
	}
}

public GiveEthereal(id, level, cid) {
	if(!cmd_access(id, level, cid, 2)) {
		return PLUGIN_HANDLED;
	}
	
	new arg[23], name[32];
	get_user_name(id, name, 31);
	read_argv(1, arg, 23);	
	new player = cmd_target(id, arg, 11);
	if(!player) {
		console_print(id, "Juctorul cu acel nume nu exista.");
		return PLUGIN_HANDLED;
	}
	if(!is_user_alive(player)) {
		return PLUGIN_HANDLED;
	}
	if(!get_user_ethereal(player)) {
		set_user_ethereal(player, true);
		switch(get_cvar_num("amx_show_activity")) {
			case 1: ColorChat(player, "^x03ADMIN^x04 give you ^x03 Ethereal.");
				
			case 2: ColorChat(player, "^x03%s^x04 give you ^x03 Ethereal.", name);
			}
	}
	return PLUGIN_HANDLED;
	
}

public hook_ethereal(id) {
	engclient_cmd(id, weapon_ethereal);
}

public Ethereal_Model(id) {
	if(get_user_weapon(id) == CSW_ETHEREAL && get_user_ethereal(id)) {
		set_pev(id, pev_viewmodel2, EtherealModel_V);
		set_pev(id, pev_weaponmodel2, EtherealModel_P);
	}
}

public Ethereal_SetModel(entity, model[]) {
	// Entity is not valid
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	// Get classname
	static szClassName[33];
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));
	
	// Not a Weapon box
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new iOwner = entity_get_edict(entity, EV_ENT_owner);	
	new WPN_Ethereal = find_ent_by_owner(-1, weapon_ethereal, entity);
	
	if(get_user_ethereal(iOwner) && is_valid_ent(WPN_Ethereal) && equal(model, "models/w_galil.mdl")) {
		entity_set_int(WPN_Ethereal, EV_INT_impulse, ETHEREAL_WEAPONKEY);
		HasEthereal[iOwner] = false;
		entity_set_model(entity, EtherealModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public Ethereal_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:flNextAttack = get_pdata_float(id, 83, 5);
		if(CurButton & IN_ATTACK) {
			if(get_user_weapon(id) == CSW_ETHEREAL && get_user_ethereal(id)) {
				
				static ethereal;
				ethereal = fm_find_ent_by_owner(-1, weapon_ethereal, id);	
				
				if(cs_get_weapon_ammo(ethereal) > 0 && !ethereal_reload[id] && flNextAttack <= 0.0) {
					if(get_gametime() - EtherealLastShotTime[id] > ethereal_shotdelay) {
						set_weapon_anim(id, random_num(3,5));
						emit_sound(id, CHAN_WEAPON, ethereal_sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
						
						Ethereal_Fire(id);
						
						static Float:Punch_Angles[3];
						
						Punch_Angles[0] = -3.0;
						Punch_Angles[1] = 0.0;
						Punch_Angles[2] = 0.0;
						
						set_pev(id, pev_punchangle, Punch_Angles);
						cs_set_weapon_ammo(ethereal, cs_get_weapon_ammo(ethereal) - 1);
						EtherealLastShotTime[id] = get_gametime();
						
					}	
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}			
		}
		
	}
}

public Ethereal_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_ETHEREAL && get_user_ethereal(id)) {	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
		}
	}
}

public Ethereal_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == ETHEREAL_WEAPONKEY) {
		HasEthereal[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
	}
	message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id);
	write_string(HasEthereal[id] ? "Ethereal/weapon_ethereal" : "weapon_galil");	// WeaponName
	write_byte(4);			// PrimaryAmmoID
	write_byte(90);			// PrimaryAmmoMaxAmount
	write_byte(-1);			// SecondaryAmmoID
	write_byte(-1);			// SecondaryAmmoMaxAmount
	write_byte(0);			// SlotID (0...N)
	write_byte(17);			// NumberInSlot (1...N)
	write_byte(CSW_ETHEREAL);	// WeaponID
	write_byte(0);			// Flags
	message_end();
}
public Ethereal_Deploy_Post(entity) {
	static owner;
	owner = fm_get_weapon_ent_owner(entity);
	if(get_user_ethereal(owner)) {
		set_pev(owner, pev_viewmodel2, EtherealModel_V);
		set_pev(owner, pev_weaponmodel2, EtherealModel_P);
		set_weapon_anim(owner, 2);
		set_pdata_float(owner, 83, 1.36, 5);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			ethereal_reload[owner] = 0;
	}
}
public Ethereal_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_ethereal(id))
		return HAM_IGNORED;
	
	ethereal_clip[id] = -1;
	
	new bpammo = cs_get_user_bpammo(id, CSW_ETHEREAL);
	if(bpammo <= 0)
		return HAM_SUPERCEDE;
	
	new iClip = get_pdata_int(ent, 51, 4);
	if(iClip >= get_pcvar_num(etherealclip))
		return HAM_SUPERCEDE;
	
	ethereal_clip[id] = iClip;
	ethereal_reload[id] = 1;
	
	return HAM_IGNORED;
}
public Ethereal_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_ethereal(id))
		return HAM_IGNORED;
	
	if(ethereal_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(etherealreloadtime);
	
	set_pdata_int(ent, 51, ethereal_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 1);
	return HAM_IGNORED;
}
public Ethereal_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_ethereal(id))
		return HAM_IGNORED;
	
	new Float:flNextAttack = get_pdata_float(id, 83, 5);
	new bpammo = cs_get_user_bpammo(id, CSW_ETHEREAL);
	
	new iClip = get_pdata_int(ent, 51, 4);
	new fInReload = get_pdata_int(ent, 54, 4);
	
	if(fInReload && flNextAttack <= 0.0) {
		new temp = min(get_pcvar_num(etherealclip) - iClip, bpammo);
		
		set_pdata_int(ent, 51, iClip + temp, 4);
		cs_set_user_bpammo(id, CSW_ETHEREAL, bpammo - temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		fInReload = 0;
		ethereal_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}
public Ethereal_Fire(id) {
	static Victim, Body, EndOrigin[3], BeamOrigin[3];
	get_user_origin(id, BeamOrigin, 3) ;
	get_user_origin(id, EndOrigin, 3);
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_BEAMENTPOINT);
	write_short(id | 0x1000);
	write_coord(BeamOrigin[0]);	// Start X
	write_coord(BeamOrigin[1]);	// Start Y
	write_coord(BeamOrigin[2]);	// Start Z
	write_short(ethereal_trail);	// Sprite
	write_byte(1);      		// Start frame				
	write_byte(1);     		// Frame rate					
	write_byte(1);			// Life
	write_byte(25);   		// Line width				
	write_byte(0);    		// Noise
	write_byte(0); 			// Red
	write_byte(150);		// Green
	write_byte(0);			// Blue
	write_byte(150);     		// Brightness					
	write_byte(25);      		// Scroll speed					
	message_end();
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(3);
	write_coord(EndOrigin[0]);
	write_coord(EndOrigin[1]);
	write_coord(EndOrigin[2]);
	write_short(ethereal_explode);
	write_byte(10);
	write_byte(15);
	write_byte(4);
	message_end();
	
	get_user_aiming(id, Victim, Body, 999999);
	if(is_user_connected(Victim)) {
		new Float:Damage = float(get_damage_body(Body, get_pcvar_float(etherealdamage)));
		
		new Float:VictimOrigin[3];
		VictimOrigin[0] = float(EndOrigin[0]);
		VictimOrigin[1] = float(EndOrigin[1]);
		VictimOrigin[2] = float(EndOrigin[2]);
		
		if(get_user_health(Victim) - get_pcvar_float(etherealdamage) >= 1 && is_user_alive(Victim) && !fm_get_user_godmode(Victim) && get_user_team(Victim) != get_user_team(id)) {
			make_blood(VictimOrigin, get_pcvar_float(etherealdamage), Victim);
			make_knockback(Victim, VictimOrigin, get_pcvar_float(etherealknockback)*get_pcvar_float(etherealdamage));
			
			ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_NERVEGAS);
			
			message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), _, Victim);
			write_byte(0);
			write_byte(0);
			write_long(DMG_NERVEGAS);
			write_coord(0) ;
			write_coord(0);
			write_coord(0);
			message_end();
			
			message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), {0,0,0}, Victim);
			write_short(1<<13);
			write_short(1<<14);
			write_short(0x0000);
			write_byte(0);
			write_byte(255);
			write_byte(0);
			write_byte(100) ;
			message_end();
			
			message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, Victim);
			write_short(0xFFFF);
			write_short(1<<13);
			write_short(0xFFFF) ;
			message_end();
		}
		else if(get_user_health(Victim) - get_pcvar_float(etherealdamage) < 1 && is_user_alive(Victim) && !fm_get_user_godmode(Victim) && get_user_team(Victim) != get_user_team(id)) {
			make_blood(VictimOrigin, get_pcvar_float(etherealdamage), Victim);
			make_knockback(Victim, VictimOrigin, get_pcvar_float(etherealknockback)*get_pcvar_float(etherealdamage));
			
			death_message(id, Victim, 1, "ethereal");
		}
	}
	else {
		static ClassName[32];
		pev(Victim, pev_classname, ClassName, charsmax(ClassName));
		if(equal(ClassName, "func_breakable")) {		
			if(entity_get_float(Victim, EV_FL_health) <= get_pcvar_num(etherealdamage)) {
				force_use(id, Victim);
			}
		}
	}
	
	emit_sound(id, CHAN_WEAPON, ethereal_sound[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}

stock make_blood(const Float:vTraceEnd[3], Float:Damage, hitEnt) {
	new bloodColor = ExecuteHam(Ham_BloodColor, hitEnt);
	if(bloodColor == -1)
		return;
	
	new amount = floatround(Damage);
	
	amount *= 2; //according to HLSDK
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(TE_BLOODSPRITE);
	write_coord(floatround(vTraceEnd[0]));
	write_coord(floatround(vTraceEnd[1]));
	write_coord(floatround(vTraceEnd[2]));
	write_short(BloodSpray);
	write_short(BloodDrop);
	write_byte(bloodColor);
	write_byte(min(max(3, amount/10), 16));
	message_end();
}

// Make knockback
public make_knockback(Victim, Float:origin[3], Float:maxspeed) {
	// Get and set velocity
	new Float:fVelocity[3];
	kickback(Victim, origin, maxspeed, fVelocity);
	entity_set_vector(Victim, EV_VEC_velocity, fVelocity);
	
	return(1);
}

// Extra calulation for knockback
stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3]) {
	// Find origin
	new Float:fEntOrigin[3];
	entity_get_vector(ent, EV_VEC_origin, fEntOrigin);
	
	// Do some calculations
	new Float:fDistance[3];
	fDistance[0] = fEntOrigin[0] - fOrigin[0];
	fDistance[1] = fEntOrigin[1] - fOrigin[1];
	fDistance[2] = fEntOrigin[2] - fOrigin[2];
	new Float:fTime =(vector_distance(fEntOrigin,fOrigin) / fSpeed);
	fVelocity[0] = fDistance[0] / fTime;
	fVelocity[1] = fDistance[1] / fTime;
	fVelocity[2] = fDistance[2] / fTime;
	
	return(fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

stock death_message(Killer, Victim, ScoreBoard, const Weapon[]) {
	// Block death msg
	set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET);
	ExecuteHamB(Ham_Killed, Victim, Killer, 2);
	set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT);
	
	// Death
	make_deathmsg(Killer, Victim, 0, Weapon);
	cs_set_user_money(Killer, cs_get_user_money(Killer) + 300);
	
	// Update score board
	if(ScoreBoard) {
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
		write_byte(Killer); // id
		write_short(pev(Killer, pev_frags)); // frags
		write_short(cs_get_user_deaths(Killer)); // deaths
		write_short(0); // class?
		write_short(get_user_team(Killer)); // team
		message_end();
		
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
		write_byte(Victim); // id
		write_short(pev(Victim, pev_frags)); // frags
		write_short(cs_get_user_deaths(Victim)); // deaths
		write_short(0); // class?
		write_short(get_user_team(Victim)); // team
		message_end();
	}
}

stock set_weapon_anim(id, anim) {
	set_pev(id, pev_weaponanim, anim);
	if(is_user_connected(id)) {
		message_begin(MSG_ONE, SVC_WEAPONANIM, _, id);
		write_byte(anim);
		write_byte(pev(id, pev_body));
		message_end();
	}
}

stock get_damage_body(body, Float:damage) {
	switch(body) {
		case HIT_HEAD: damage *= 4.0;
			case HIT_STOMACH: damage *= 1.1;
			case HIT_CHEST: damage *= 1.5;
			case HIT_LEFTARM: damage *= 0.77;
			case HIT_RIGHTARM: damage *= 0.77;
			case HIT_LEFTLEG: damage *= 0.75;
			case HIT_RIGHTLEG: damage *= 0.75;
			default: damage *= 1.0;
	}
	
	return floatround(damage);
}	

stock fm_get_user_bpammo(index, weapon) {
	static offset
	switch(weapon) {
		case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM
			case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO
			case CSW_M249: offset = OFFSET_AMMO_556NATOBOX
			case CSW_FAMAS, CSW_M4A1, CSW_AUG, 
			CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO
		case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT
			case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP
			case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM
			case CSW_DEAGLE: offset = OFFSET_AMMO_50AE
			case CSW_P228: offset = OFFSET_AMMO_357SIG
			case CSW_GLOCK18, CSW_TMP, CSW_ELITE, 
			CSW_MP5NAVY: offset = OFFSET_AMMO_9MM
		default: offset = 0
	}
	return offset ? get_pdata_int(index, offset) : 0
}

stock fm_set_user_bpammo(index, weapon, amount) {
	static offset
	switch(weapon) {
		case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM
			case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO
			case CSW_M249: offset = OFFSET_AMMO_556NATOBOX
			case CSW_FAMAS, CSW_M4A1, CSW_AUG, 
			CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO
		case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT
			case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP
			case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM
			case CSW_DEAGLE: offset = OFFSET_AMMO_50AE
			case CSW_P228: offset = OFFSET_AMMO_357SIG
			case CSW_GLOCK18, CSW_TMP, CSW_ELITE, 
			CSW_MP5NAVY: offset = OFFSET_AMMO_9MM
		default: offset = 0
	}
	
	if(offset) 
		set_pdata_int(index, offset, amount)
	
	return 1
}

// Get Weapon Entity's CSW_ ID
stock fm_get_weapon_ent_id(ent) {
	return get_pdata_int(ent, OFFSET_WEAPONID, 4);
}

// Get Weapon Entity's Owner
stock fm_get_weapon_ent_owner(ent) {
	return get_pdata_cbase(ent, 41, 4);
}

// Drop all primary guns
stock drop_primary_weapons(Player) {
	// Get user weapons
	static weapons[32], num, i, weaponid;
	num = 0; // reset passed weapons count(bugfix)
	get_user_weapons(Player, weapons, num);
	
	// Loop through them and drop primaries
	for(i = 0; i < num; i++) {
		// Prevent re-indexing the array
		weaponid = weapons ;
		
		// We definetely are holding primary gun
		if(((1<<weaponid) & PRIMARY_WEAPONS_BITSUM)) {
			// Get weapon entity
			static wname[32];
			get_weaponname(weaponid, wname, charsmax(wname));
			
			// Player drops the weapon and looses his bpammo
			engclient_cmd(Player, "drop", wname);
		}
	}
}

stock ColorChat(const id, const input[], any:...) {
	new count = 1, players[32];
	static msg[191];
	vformat(msg, 190, input, 3);
	
	replace_all(msg, 190, "^x04", "^4");
	replace_all(msg, 190, "^x01", "^1");
	replace_all(msg, 190, "^x03", "^3");
	
	if(id) players[0] = id;
	else get_players(players, count, "ch"); {
		for(new i = 0; i < count; i++) {
			if(is_user_connected(players)) {
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players);
				write_byte(players);
				write_string(msg);
				message_end();
			}
		}
	} 
}

//------| Parecache Sounds and Models |------//
public plugin_precache() {
	BloodSpray = precache_model("sprites/bloodspray.spr");   // initial blood
	BloodDrop  = precache_model("sprites/blood.spr");	// splattered blood
	
	ethereal_trail = precache_model("sprites/Ethereal/ethereal_beam.spr");
	ethereal_explode = precache_model("sprites/Ethereal/ethereal_exp.spr");
	
	precache_model(EtherealModel_V);
	precache_model(EtherealModel_P);
	precache_model(EtherealModel_W);	
	
	new i;
	for(i = 0; i < sizeof(ethereal_sound); i++)
		engfunc(EngFunc_PrecacheSound, ethereal_sound);	
	
	for(i = 0; i < sizeof(ethereal_generic); i++)
		engfunc(EngFunc_PrecacheGeneric, ethereal_generic);	
	
}
Banjo
Membru, skill 0
Membru, skill 0
Posts: 40
Joined: 22 Nov 2010, 18:48
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com!
Contact:

12 May 2013, 18:43

modifici te rog sa il poata lua decat vip ct am vazut ca este o versiune dar o vreau pe cea noua fara buguri
User avatar
sDs|Aragon*
Membru, skill +2
Membru, skill +2
Posts: 576
Joined: 29 Dec 2011, 21:38
Detinator Steam: Da
SteamID: Mihai_Parkour10
Reputatie: Fost scripter eXtreamCS
Has thanked: 4 times
Been thanked: 132 times

12 May 2013, 21:42

Banjo wrote:modifici te rog sa il poata lua decat vip ct am vazut ca este o versiune dar o vreau pe cea noua fara buguri
| Afiseaza codul
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Ethereal |
//==========================================================================================================
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>

#define PLUGIN "Ethereal"
#define VERSION "1.0"
#define AUTHOR "sDs|Aragon*"

const PRIMARY_WEAPONS_BITSUM =(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);
new BloodDrop, BloodSpray

#define VIP_LEVEL	ADMIN_LEVEL_H

#define ETHEREAL_WEAPONKEY	103
#define weapon_ethereal		"weapon_galil"
#define CSW_ETHEREAL		CSW_GALIL
#define ethereal_shotdelay	0.15 // Refire rate

new EtherealModel_V[] = "models/Ethereal/v_ethereal.mdl";
new EtherealModel_P[] = "models/Ethereal/p_ethereal.mdl";
new EtherealModel_W[] = "models/Ethereal/w_ethereal.mdl";
new const ethereal_sound[5][] = {
	"weapons/ethereal_shoot1.wav",
	"weapons/ethereal_hit.wav",
	"weapons/ethereal_idle1.wav",
	"weapons/ethereal_reload.wav",
	"weapons/ethereal_draw.wav"
};
new const ethereal_generic[3][] = {
	"sprites/Ethereal/weapon_ethereal",
	"sprites/Ethereal/Ethereal.spr",
	"sprites/Ethereal/640hud2.spr"
};
new bool:HasEthereal[33], ethereal_clip[33], ethereal_reload[33], Float:EtherealLastShotTime[33], ethereal_trail, ethereal_explode;
new ethereal, etherealcost, etherealdamage, etherealclip, etherealammo, etherealreloadtime, etherealknockback;

public plugin_init() {
	register_plugin( PLUGIN, VERSION, AUTHOR );
	RegisterHam(Ham_Spawn, "player", "Spawn_Post", 1);
	RegisterHam(Ham_Killed, "player", "PlayerKilled");	
	
	register_clcmd("Ethereal/weapon_ethereal", "hook_ethereal");
	register_event("CurWeapon", "Ethereal_Model", "be", "1=1");	
	register_event("WeapPickup","Ethereal_Model","b","1=19");
	register_forward(FM_SetModel, "Ethereal_SetModel");
	register_forward(FM_CmdStart, "Ethereal_CmdStart");	
	register_forward(FM_UpdateClientData, "Ethereal_UpdateClientData_Post", 1);
	RegisterHam(Ham_Item_Deploy , weapon_ethereal, "Ethereal_Deploy_Post", 1);
	RegisterHam(Ham_Item_AddToPlayer, weapon_ethereal, "Ethereal_AddToPlayer");
	RegisterHam(Ham_Weapon_Reload, weapon_ethereal, "Ethereal_Reload");
	RegisterHam(Ham_Weapon_Reload, weapon_ethereal, "Ethereal_Reload_Post", 1);
	RegisterHam(Ham_Item_PostFrame, weapon_ethereal, "Ethereal_PostFrame");	
	
	ethereal = register_cvar("amx_ethereal", "1");				//| Ethereal 0 Disable -> 1 Enable |//
	etherealcost = register_cvar("amx_etherealcost", "8000");		//| Ethereal Cost |//
	etherealdamage = register_cvar("amx_ethereal_damage", "80");		//| Ethereal Damage |//
	etherealclip = register_cvar("amx_ethereal_clip", "30");			//| Ethereal Clip |//
	etherealammo = register_cvar("amx_ethereal_ammo", "120");		//| Ethereal Ammo |//
	etherealreloadtime = register_cvar("amx_ethereal_reload_time", "3.03");	//| Ethereal Reload Time |//
	etherealknockback = register_cvar("amx_ethereal_knockback", "3");	//| Ethereal KnockBack |//
	
	register_clcmd("ethereal", "buy_ethereal");
	register_clcmd("buy_ethereal", "buy_ethereal");
	register_clcmd("say /ethereal", "buy_ethereal");
	register_clcmd("say /buy_ethereal", "buy_ethereal");
	register_clcmd("say buy_ethereal", "buy_ethereal");
	register_clcmd("say_team /ethereal", "buy_ethereal");
	register_clcmd("say_team /buy_ethereal", "buy_ethereal");
	register_clcmd("say_team buy_ethereal", "buy_ethereal");
	register_concmd("amx_give_ethereal", "GiveEthereal", ADMIN_LEVEL_G, "Name");
}

public plugin_natives() {
	register_native("get_user_ethereal", "get_user_ethereal", 1);
	register_native("set_user_ethereal", "set_user_ethereal", 1);
}

public get_user_ethereal(id) {
	return HasEthereal[id];
}

public set_user_ethereal(id, ethereal) {
	if(ethereal) {
		if(!HasEthereal[id]) {
			drop_primary_weapons(id);
			HasEthereal[id] = true;
			message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id);
			write_string("Ethereal/weapon_ethereal");	// WeaponName
			write_byte(4);			// PrimaryAmmoID
			write_byte(90);			// PrimaryAmmoMaxAmount
			write_byte(-1);			// SecondaryAmmoID
			write_byte(-1);			// SecondaryAmmoMaxAmount
			write_byte(0);			// SlotID (0...N)
			write_byte(17);			// NumberInSlot (1...N)
			write_byte(CSW_ETHEREAL);	// WeaponID
			write_byte(0);			// Flags
			message_end();
			fm_give_item(id, weapon_ethereal)
			cs_set_user_bpammo(id, CSW_ETHEREAL, get_pcvar_num(etherealammo))
			new clip = fm_get_user_weapon_entity(id, CSW_ETHEREAL);
			cs_set_weapon_ammo(clip, get_pcvar_num(etherealclip));
			set_weapon_anim(id, 2);
		}
	}
	else {
		if(HasEthereal[id]) {
			HasEthereal[id] = false;
		}
	}
}

public Spawn_Post(id) set_user_ethereal(id, 0);

public PlayerKilled(victim, attacker, shouldgib) set_user_ethereal(victim, 0);

//------| Buy Ethereal |------//
public buy_ethereal(id) {
	if(get_user_team(id) == 2) {
		new ethcost = get_pcvar_num(etherealcost);
		if(!get_pcvar_num(ethereal)) {
			ColorChat(id, "^x04[Ethereal]^x03 Ethereal^x04 este dezactivat.");
		}
		else if(!(get_user_flags(id) & VIP_LEVEL)) {
			ColorChat(id, "^x04[Ethereal]^x03 Decat^x04 VIP^x03 poate cumpara^x04 Ethereal.");
		}
		else if(!is_user_alive(id)) {
			ColorChat(id, "^x04[Ethereal]^x03 Nu poti cumpara^x04 Ethereal^x03 cat timp esti mort.");
		}
		else if(get_user_ethereal(id)) {
			ColorChat(id, "^x04[Ethereal]^x03 Ai deja^x04 Ethereal.");
		}
		else if(cs_get_user_money(id) < ethcost) {
			ColorChat(id, "^x04[Ethereal]^x03 Nu ai suficiente fonduri pentru a cumpara^x04 Ethereal^x03. Necesari: ^x04$%d",ethcost);
		}
		else {
			cs_set_user_money(id, cs_get_user_money(id) - ethcost);
			ColorChat(id, "^x04[Ethereal]^x03 Ai cumparat^x04 Ethereal.");
			set_user_ethereal(id, true);
		}
	}
}

public GiveEthereal(id, level, cid) {
	if(!cmd_access(id, level, cid, 2)) {
		return PLUGIN_HANDLED;
	}
	
	new arg[23], name[32];
	get_user_name(id, name, 31);
	read_argv(1, arg, 23);	
	new player = cmd_target(id, arg, 11);
	if(!player) {
		console_print(id, "Juctorul cu acel nume nu exista.");
		return PLUGIN_HANDLED;
	}
	if(!is_user_alive(player)) {
		return PLUGIN_HANDLED;
	}
	if(!get_user_ethereal(player)) {
		set_user_ethereal(player, true);
		switch(get_cvar_num("amx_show_activity")) {
			case 1: ColorChat(player, "^x03ADMIN^x04 give you ^x03 Ethereal.");
				
			case 2: ColorChat(player, "^x03%s^x04 give you ^x03 Ethereal.", name);
			}
	}
	return PLUGIN_HANDLED;
	
}

public hook_ethereal(id) {
	engclient_cmd(id, weapon_ethereal);
}

public Ethereal_Model(id) {
	if(get_user_weapon(id) == CSW_ETHEREAL && get_user_ethereal(id)) {
		set_pev(id, pev_viewmodel2, EtherealModel_V);
		set_pev(id, pev_weaponmodel2, EtherealModel_P);
	}
}

public Ethereal_SetModel(entity, model[]) {
	// Entity is not valid
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	// Get classname
	static szClassName[33];
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));
	
	// Not a Weapon box
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	new iOwner = entity_get_edict(entity, EV_ENT_owner);	
	new WPN_Ethereal = find_ent_by_owner(-1, weapon_ethereal, entity);
	
	if(get_user_ethereal(iOwner) && is_valid_ent(WPN_Ethereal) && equal(model, "models/w_galil.mdl")) {
		entity_set_int(WPN_Ethereal, EV_INT_impulse, ETHEREAL_WEAPONKEY);
		HasEthereal[iOwner] = false;
		entity_set_model(entity, EtherealModel_W);
		return FMRES_SUPERCEDE;
	}
	return FMRES_IGNORED;
}

public Ethereal_CmdStart(id, uc_handle, seed) {
	if(is_user_alive(id) && is_user_connected(id)) {
		static CurButton;
		CurButton = get_uc(uc_handle, UC_Buttons);
		new Float:flNextAttack = get_pdata_float(id, 83, 5);
		if(CurButton & IN_ATTACK) {
			if(get_user_weapon(id) == CSW_ETHEREAL && get_user_ethereal(id)) {
				
				static ethereal;
				ethereal = fm_find_ent_by_owner(-1, weapon_ethereal, id);	
				
				if(cs_get_weapon_ammo(ethereal) > 0 && !ethereal_reload[id] && flNextAttack <= 0.0) {
					if(get_gametime() - EtherealLastShotTime[id] > ethereal_shotdelay) {
						set_weapon_anim(id, random_num(3,5));
						emit_sound(id, CHAN_WEAPON, ethereal_sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
						
						Ethereal_Fire(id);
						
						static Float:Punch_Angles[3];
						
						Punch_Angles[0] = -3.0;
						Punch_Angles[1] = 0.0;
						Punch_Angles[2] = 0.0;
						
						set_pev(id, pev_punchangle, Punch_Angles);
						cs_set_weapon_ammo(ethereal, cs_get_weapon_ammo(ethereal) - 1);
						EtherealLastShotTime[id] = get_gametime();
						
					}	
				}
				CurButton &= ~IN_ATTACK;
				set_uc(uc_handle, UC_Buttons, CurButton);
			}			
		}
		
	}
}

public Ethereal_UpdateClientData_Post(id, sendweapons, cd_handle) {
	if(is_user_alive(id) && is_user_connected(id)) {
		if(get_user_weapon(id) == CSW_ETHEREAL && get_user_ethereal(id)) {	
			set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
		}
	}
}

public Ethereal_AddToPlayer(Weapon, id) {
	if(is_valid_ent(Weapon) && is_user_connected(id) && entity_get_int(Weapon, EV_INT_impulse) == ETHEREAL_WEAPONKEY) {
		HasEthereal[id] = true;
		entity_set_int(Weapon, EV_INT_impulse, 0);
	}
	message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id);
	write_string(HasEthereal[id] ? "Ethereal/weapon_ethereal" : "weapon_galil");	// WeaponName
	write_byte(4);			// PrimaryAmmoID
	write_byte(90);			// PrimaryAmmoMaxAmount
	write_byte(-1);			// SecondaryAmmoID
	write_byte(-1);			// SecondaryAmmoMaxAmount
	write_byte(0);			// SlotID (0...N)
	write_byte(17);			// NumberInSlot (1...N)
	write_byte(CSW_ETHEREAL);	// WeaponID
	write_byte(0);			// Flags
	message_end();
}
public Ethereal_Deploy_Post(entity) {
	static owner;
	owner = fm_get_weapon_ent_owner(entity);
	if(get_user_ethereal(owner)) {
		set_pev(owner, pev_viewmodel2, EtherealModel_V);
		set_pev(owner, pev_weaponmodel2, EtherealModel_P);
		set_weapon_anim(owner, 2);
		set_pdata_float(owner, 83, 1.36, 5);
		static clip;
		clip = cs_get_weapon_ammo(entity);
		if(clip > 0)
			ethereal_reload[owner] = 0;
	}
}
public Ethereal_Reload(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_ethereal(id))
		return HAM_IGNORED;
	
	ethereal_clip[id] = -1;
	
	new bpammo = cs_get_user_bpammo(id, CSW_ETHEREAL);
	if(bpammo <= 0)
		return HAM_SUPERCEDE;
	
	new iClip = get_pdata_int(ent, 51, 4);
	if(iClip >= get_pcvar_num(etherealclip))
		return HAM_SUPERCEDE;
	
	ethereal_clip[id] = iClip;
	ethereal_reload[id] = 1;
	
	return HAM_IGNORED;
}
public Ethereal_Reload_Post(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_ethereal(id))
		return HAM_IGNORED;
	
	if(ethereal_clip[id] == -1)
		return HAM_IGNORED;
	
	new Float:reload_time = get_pcvar_float(etherealreloadtime);
	
	set_pdata_int(ent, 51, ethereal_clip[id], 4);
	set_pdata_float(ent, 48, reload_time, 4);
	set_pdata_float(id, 83, reload_time, 5);
	set_pdata_int(ent, 54, 1, 4);
	set_weapon_anim(id, 1);
	return HAM_IGNORED;
}
public Ethereal_PostFrame(ent) {
	if(!pev_valid(ent))
		return HAM_IGNORED;
	
	new id;
	id = pev(ent, pev_owner);
	
	if(!is_user_alive(id) || !get_user_ethereal(id))
		return HAM_IGNORED;
	
	new Float:flNextAttack = get_pdata_float(id, 83, 5);
	new bpammo = cs_get_user_bpammo(id, CSW_ETHEREAL);
	
	new iClip = get_pdata_int(ent, 51, 4);
	new fInReload = get_pdata_int(ent, 54, 4);
	
	if(fInReload && flNextAttack <= 0.0) {
		new temp = min(get_pcvar_num(etherealclip) - iClip, bpammo);
		
		set_pdata_int(ent, 51, iClip + temp, 4);
		cs_set_user_bpammo(id, CSW_ETHEREAL, bpammo - temp);		
		set_pdata_int(ent, 54, 0, 4);
		
		fInReload = 0;
		ethereal_reload[id] = 0;
	}		
	
	return HAM_IGNORED;
}
public Ethereal_Fire(id) {
	static Victim, Body, EndOrigin[3], BeamOrigin[3];
	get_user_origin(id, BeamOrigin, 3) ;
	get_user_origin(id, EndOrigin, 3);
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_BEAMENTPOINT);
	write_short(id | 0x1000);
	write_coord(BeamOrigin[0]);	// Start X
	write_coord(BeamOrigin[1]);	// Start Y
	write_coord(BeamOrigin[2]);	// Start Z
	write_short(ethereal_trail);	// Sprite
	write_byte(1);      		// Start frame				
	write_byte(1);     		// Frame rate					
	write_byte(1);			// Life
	write_byte(25);   		// Line width				
	write_byte(0);    		// Noise
	write_byte(0); 			// Red
	write_byte(150);		// Green
	write_byte(0);			// Blue
	write_byte(150);     		// Brightness					
	write_byte(25);      		// Scroll speed					
	message_end();
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(3);
	write_coord(EndOrigin[0]);
	write_coord(EndOrigin[1]);
	write_coord(EndOrigin[2]);
	write_short(ethereal_explode);
	write_byte(10);
	write_byte(15);
	write_byte(4);
	message_end();
	
	get_user_aiming(id, Victim, Body, 999999);
	if(is_user_connected(Victim)) {
		new Float:Damage = float(get_damage_body(Body, get_pcvar_float(etherealdamage)));
		
		new Float:VictimOrigin[3];
		VictimOrigin[0] = float(EndOrigin[0]);
		VictimOrigin[1] = float(EndOrigin[1]);
		VictimOrigin[2] = float(EndOrigin[2]);
		
		if(get_user_health(Victim) - get_pcvar_float(etherealdamage) >= 1 && is_user_alive(Victim) && !fm_get_user_godmode(Victim) && get_user_team(Victim) != get_user_team(id)) {
			make_blood(VictimOrigin, get_pcvar_float(etherealdamage), Victim);
			make_knockback(Victim, VictimOrigin, get_pcvar_float(etherealknockback)*get_pcvar_float(etherealdamage));
			
			ExecuteHam(Ham_TakeDamage, Victim, id, id, Damage, DMG_NERVEGAS);
			
			message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), _, Victim);
			write_byte(0);
			write_byte(0);
			write_long(DMG_NERVEGAS);
			write_coord(0) ;
			write_coord(0);
			write_coord(0);
			message_end();
			
			message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), {0,0,0}, Victim);
			write_short(1<<13);
			write_short(1<<14);
			write_short(0x0000);
			write_byte(0);
			write_byte(255);
			write_byte(0);
			write_byte(100) ;
			message_end();
			
			message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, Victim);
			write_short(0xFFFF);
			write_short(1<<13);
			write_short(0xFFFF) ;
			message_end();
		}
		else if(get_user_health(Victim) - get_pcvar_float(etherealdamage) < 1 && is_user_alive(Victim) && !fm_get_user_godmode(Victim) && get_user_team(Victim) != get_user_team(id)) {
			make_blood(VictimOrigin, get_pcvar_float(etherealdamage), Victim);
			make_knockback(Victim, VictimOrigin, get_pcvar_float(etherealknockback)*get_pcvar_float(etherealdamage));
			
			death_message(id, Victim, 1, "ethereal");
		}
	}
	else {
		static ClassName[32];
		pev(Victim, pev_classname, ClassName, charsmax(ClassName));
		if(equal(ClassName, "func_breakable")) {		
			if(entity_get_float(Victim, EV_FL_health) <= get_pcvar_num(etherealdamage)) {
				force_use(id, Victim);
			}
		}
	}
	
	emit_sound(id, CHAN_WEAPON, ethereal_sound[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}

stock make_blood(const Float:vTraceEnd[3], Float:Damage, hitEnt) {
	new bloodColor = ExecuteHam(Ham_BloodColor, hitEnt);
	if(bloodColor == -1)
		return;
	
	new amount = floatround(Damage);
	
	amount *= 2; //according to HLSDK
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(TE_BLOODSPRITE);
	write_coord(floatround(vTraceEnd[0]));
	write_coord(floatround(vTraceEnd[1]));
	write_coord(floatround(vTraceEnd[2]));
	write_short(BloodSpray);
	write_short(BloodDrop);
	write_byte(bloodColor);
	write_byte(min(max(3, amount/10), 16));
	message_end();
}

// Make knockback
public make_knockback(Victim, Float:origin[3], Float:maxspeed) {
	// Get and set velocity
	new Float:fVelocity[3];
	kickback(Victim, origin, maxspeed, fVelocity);
	entity_set_vector(Victim, EV_VEC_velocity, fVelocity);
	
	return(1);
}

// Extra calulation for knockback
stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3]) {
	// Find origin
	new Float:fEntOrigin[3];
	entity_get_vector(ent, EV_VEC_origin, fEntOrigin);
	
	// Do some calculations
	new Float:fDistance[3];
	fDistance[0] = fEntOrigin[0] - fOrigin[0];
	fDistance[1] = fEntOrigin[1] - fOrigin[1];
	fDistance[2] = fEntOrigin[2] - fOrigin[2];
	new Float:fTime =(vector_distance(fEntOrigin,fOrigin) / fSpeed);
	fVelocity[0] = fDistance[0] / fTime;
	fVelocity[1] = fDistance[1] / fTime;
	fVelocity[2] = fDistance[2] / fTime;
	
	return(fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

stock death_message(Killer, Victim, ScoreBoard, const Weapon[]) {
	// Block death msg
	set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET);
	ExecuteHamB(Ham_Killed, Victim, Killer, 2);
	set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT);
	
	// Death
	make_deathmsg(Killer, Victim, 0, Weapon);
	cs_set_user_money(Killer, cs_get_user_money(Killer) + 300);
	
	// Update score board
	if(ScoreBoard) {
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
		write_byte(Killer); // id
		write_short(pev(Killer, pev_frags)); // frags
		write_short(cs_get_user_deaths(Killer)); // deaths
		write_short(0); // class?
		write_short(get_user_team(Killer)); // team
		message_end();
		
		message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
		write_byte(Victim); // id
		write_short(pev(Victim, pev_frags)); // frags
		write_short(cs_get_user_deaths(Victim)); // deaths
		write_short(0); // class?
		write_short(get_user_team(Victim)); // team
		message_end();
	}
}

stock set_weapon_anim(id, anim) {
	set_pev(id, pev_weaponanim, anim);
	if(is_user_connected(id)) {
		message_begin(MSG_ONE, SVC_WEAPONANIM, _, id);
		write_byte(anim);
		write_byte(pev(id, pev_body));
		message_end();
	}
}

stock get_damage_body(body, Float:damage) {
	switch(body) {
		case HIT_HEAD: damage *= 4.0;
			case HIT_STOMACH: damage *= 1.1;
			case HIT_CHEST: damage *= 1.5;
			case HIT_LEFTARM: damage *= 0.77;
			case HIT_RIGHTARM: damage *= 0.77;
			case HIT_LEFTLEG: damage *= 0.75;
			case HIT_RIGHTLEG: damage *= 0.75;
			default: damage *= 1.0;
	}
	
	return floatround(damage);
}	

stock fm_get_user_bpammo(index, weapon) {
	static offset
	switch(weapon) {
		case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM
			case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO
			case CSW_M249: offset = OFFSET_AMMO_556NATOBOX
			case CSW_FAMAS, CSW_M4A1, CSW_AUG, 
			CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO
		case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT
			case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP
			case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM
			case CSW_DEAGLE: offset = OFFSET_AMMO_50AE
			case CSW_P228: offset = OFFSET_AMMO_357SIG
			case CSW_GLOCK18, CSW_TMP, CSW_ELITE, 
			CSW_MP5NAVY: offset = OFFSET_AMMO_9MM
		default: offset = 0
	}
	return offset ? get_pdata_int(index, offset) : 0
}

stock fm_set_user_bpammo(index, weapon, amount) {
	static offset
	switch(weapon) {
		case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM
			case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO
			case CSW_M249: offset = OFFSET_AMMO_556NATOBOX
			case CSW_FAMAS, CSW_M4A1, CSW_AUG, 
			CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO
		case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT
			case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP
			case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM
			case CSW_DEAGLE: offset = OFFSET_AMMO_50AE
			case CSW_P228: offset = OFFSET_AMMO_357SIG
			case CSW_GLOCK18, CSW_TMP, CSW_ELITE, 
			CSW_MP5NAVY: offset = OFFSET_AMMO_9MM
		default: offset = 0
	}
	
	if(offset) 
		set_pdata_int(index, offset, amount)
	
	return 1
}

// Get Weapon Entity's CSW_ ID
stock fm_get_weapon_ent_id(ent) {
	return get_pdata_int(ent, OFFSET_WEAPONID, 4);
}

// Get Weapon Entity's Owner
stock fm_get_weapon_ent_owner(ent) {
	return get_pdata_cbase(ent, 41, 4);
}

// Drop all primary guns
stock drop_primary_weapons(Player) {
	// Get user weapons
	static weapons[32], num, i, weaponid;
	num = 0; // reset passed weapons count(bugfix)
	get_user_weapons(Player, weapons, num);
	
	// Loop through them and drop primaries
	for(i = 0; i < num; i++) {
		// Prevent re-indexing the array
		weaponid = weapons ;
		
		// We definetely are holding primary gun
		if(((1<<weaponid) & PRIMARY_WEAPONS_BITSUM)) {
			// Get weapon entity
			static wname[32];
			get_weaponname(weaponid, wname, charsmax(wname));
			
			// Player drops the weapon and looses his bpammo
			engclient_cmd(Player, "drop", wname);
		}
	}
}

stock ColorChat(const id, const input[], any:...) {
	new count = 1, players[32];
	static msg[191];
	vformat(msg, 190, input, 3);
	
	replace_all(msg, 190, "^x04", "^4");
	replace_all(msg, 190, "^x01", "^1");
	replace_all(msg, 190, "^x03", "^3");
	
	if(id) players[0] = id;
	else get_players(players, count, "ch"); {
		for(new i = 0; i < count; i++) {
			if(is_user_connected(players)) {
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players);
				write_byte(players);
				write_string(msg);
				message_end();
			}
		}
	} 
}

//------| Parecache Sounds and Models |------//
public plugin_precache() {
	BloodSpray = precache_model("sprites/bloodspray.spr");   // initial blood
	BloodDrop  = precache_model("sprites/blood.spr");	// splattered blood
	
	ethereal_trail = precache_model("sprites/Ethereal/ethereal_beam.spr");
	ethereal_explode = precache_model("sprites/Ethereal/ethereal_exp.spr");
	
	precache_model(EtherealModel_V);
	precache_model(EtherealModel_P);
	precache_model(EtherealModel_W);	
	
	new i;
	for(i = 0; i < sizeof(ethereal_sound); i++)
		engfunc(EngFunc_PrecacheSound, ethereal_sound);	
	
	for(i = 0; i < sizeof(ethereal_generic); i++)
		engfunc(EngFunc_PrecacheGeneric, ethereal_generic);	
	
}
johnny96iv
Membru, skill 0
Membru, skill 0
Posts: 34
Joined: 16 Aug 2012, 23:55
Detinator Steam: Nu
CS Status: Bantui!
Detinator server CS: BB.CSLR.RO
Has thanked: 5 times
Contact:

13 May 2013, 00:02

merge perfect multumim
Last edited by johnny96iv on 15 May 2013, 02:56, edited 1 time in total.
User avatar
Cristi. C
Membru, skill +1
Membru, skill +1
Posts: 345
Joined: 09 Feb 2013, 01:08
Detinator Steam: Da
CS Status: I'm currently playing CSGO
SteamID: Privat
Location: Bucuresti
Has thanked: 1 time
Been thanked: 27 times

13 May 2013, 15:27

Un plugin frumos:-?

# Zombie Land Love Forever !! #
User avatar
FlyingSnow
Membru, skill +2
Membru, skill +2
Posts: 825
Joined: 01 Oct 2012, 02:22
Detinator Steam: Da
Detinator server CS: Dap.
SteamID: Nu-i public.
Has thanked: 26 times
Been thanked: 52 times
Contact:

23 May 2013, 16:58

Pana la urma care plugin pentru modul furien e cel bun?
User avatar
Errol
Membru, skill +1
Membru, skill +1
Posts: 141
Joined: 19 May 2013, 15:42
Detinator Steam: Da
CS Status: Sunt sămânţar, prin concluzie porumbel.
Detinator server CS: DR.CS32.RO
SteamID: Privat
Reputatie: Membru Club eXtreamCS (2 luni)
Location: Bistrita
Has thanked: 17 times
Been thanked: 9 times
Contact:

23 May 2013, 17:12

Arata bine, pluginul.

Respectele mele ! Ai un
multumesc.
Image
#WIZARDS to more, but I'm a hero.
-----------------------------------------------------
Lasă telefonul că ştiu actoria
Şi nu mai suna că-mi descarci bateria .


#Work only :

- [FPS Nvidia] [100%] [Public] [Here]
- [NoLag] [100%] [Public] [Here]
razvybossu123
Membru, skill 0
Membru, skill 0
Posts: 30
Joined: 04 May 2013, 22:16
Detinator Steam: Nu
Detinator server CS: ultimate.devilcs.ro
Has thanked: 9 times
Contact:

23 May 2013, 20:00

Sincer nu ma pricep la scripting ...as vrea sa invat....deci poti sa imi faci acelasi lucru ca lui Bufnita adica pentru vip numai dar combinat cu al lui twistu sa fie doar pentru ct doar ca comanda sa fie /arma
Sunt Designer...Dar tu?
(c) xLd^
Fost moderator
Fost moderator
Posts: 1275
Joined: 24 Mar 2013, 09:36
Detinator Steam: Da
Detinator server CS: Nu
SteamID: id/xldcs
Reputatie: Utilizator neserios
Membru Club eXtreamCS (8 Iun - 8 Aug)
Location: Brasov
Has thanked: 25 times
Been thanked: 37 times
Contact:

20 Aug 2013, 22:01

ai tot respectul meu multi cereau bani pe pluginu asta mersi mult
ReaD1nG
Membru, skill +1
Membru, skill +1
Posts: 237
Joined: 26 Jul 2013, 17:48
Detinator Steam: Da
Has thanked: 65 times
Been thanked: 13 times

20 Aug 2013, 22:42

Poti sa il numesti tranchilizant si sa il faci pe anumitul player care il atinge sa il amortizeze
Image
User avatar
MEM
Utilizator neserios (tepar)
Utilizator neserios (tepar)
Posts: 2349
Joined: 13 Sep 2013, 21:24
Detinator Steam: Da
CS Status: Always be MEM!
SteamID: /businessmonkeys_mem
Reputatie: Fost Membru Club eXtreamCS ( o luna jumatate)
Nume anterior : kiducrazy
Location: Braila
Has thanked: 8 times
Been thanked: 9 times
Contact:

25 Jan 2014, 18:41

Dupa ce se termina runda imi ramane modelul de ethereal dar trag ca si cu galil. Poti face te rog sa ramana Ethereal pana cand cel ce il detine moare?
Post Reply

Return to “AmxModX”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 13 guests