Cerere plugin meniu arme

Categoria cu cereri de pluginuri si nu numai.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Forum rules
Accesează link-ul pentru a putea vedea regulile forumului

Daca doriti sa vi se modifice un plugin, va rugam postati aici .
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:

31 Jan 2014, 21:22

Nickname:KiduCrazy
Numele pluginului cerut: Hero system
Descriere plugin cerut :[/b]Buna tuturor.As dori si eu un plugin in care cei cu flagul "x" sa poata accesa un meniu ( /hero sau H) numit "Hero Shop" de unde isi pot pua armele ethereal (80 dmg, 10000$ pret), bluecar (90 dmg, 12000$ pret) si harry magic wand (100 dmg 14000$ pret) si sa aiba 150 hp si 100 armura gratis.
Alte informatii :[/b] Multumesc mult!
RoyalServer
User avatar
w3zoo_RedX
Membru, skill +2
Membru, skill +2
Posts: 737
Joined: 21 Dec 2013, 22:16
Detinator Steam: Da
CS Status: Scripter CS.
Detinator server CS: PM.
SteamID: PM.
Location: Bucuresti sector 2
Has thanked: 45 times
Been thanked: 45 times
Contact:

01 Feb 2014, 14:28

:-? As avea si eu nevoie de acest plugin :D
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:

01 Feb 2014, 18:52

w3zoo_RedX wrote::-? As avea si eu nevoie de acest plugin :D
L-am gandit singur. De ce vrei sa ma copii?
User avatar
Adventx
Membru, skill +4
Membru, skill +4
Posts: 1785
Joined: 17 Sep 2013, 21:44
Detinator Steam: Da
Reputatie: Fost moderator ajutator
Has thanked: 128 times
Been thanked: 142 times
Contact:

01 Feb 2014, 18:59

Ce este bluecar?
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:

01 Feb 2014, 19:08

Adventx wrote:Ce este bluecar?
Arma din cso cred. e pe zp.csblackdevil.com.
User avatar
Adventx
Membru, skill +4
Membru, skill +4
Posts: 1785
Joined: 17 Sep 2013, 21:44
Detinator Steam: Da
Reputatie: Fost moderator ajutator
Has thanked: 128 times
Been thanked: 142 times
Contact:

01 Feb 2014, 19:14

kiducrazy wrote:
Adventx wrote:Ce este bluecar?
Arma din cso cred. e pe zp.csblackdevil.com.
Lasa un link catre acel plugin/arma eu nu gasesc :|
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:

01 Feb 2014, 19:19

Adventx wrote:
kiducrazy wrote:
Adventx wrote:Ce este bluecar?
Arma din cso cred. e pe zp.csblackdevil.com.
Lasa un link catre acel plugin/arma eu nu gasesc :|
Imi cer scuze. Arma e catrblue.:) Daca poti baga si water gun cu dmg 70 si pret 8000$
User avatar
DaNNe.
Fost moderator
Fost moderator
Posts: 2811
Joined: 08 Nov 2013, 20:43
Detinator Steam: Da
CS Status: Activitate scăzută
SteamID: /id/FurienMaster
Reputatie: Nick anterior: DnD. Gold, Emrys
0.5/3
Fost moderator ajutator
Fost Membru Club eXtreamCS (doua luni)
Has thanked: 244 times
Been thanked: 129 times
Contact:

01 Feb 2014, 19:50

Cei care vor sa ii ajute aveti aici armele:
Cart Blue
WaterGun
Eu nu ii pot ajuta - vedeti in semnatura motivele.
Succes !
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:

01 Feb 2014, 19:53

DaNNe. wrote:Cei care vor sa ii ajute aveti aici armele:
Cart Blue
WaterGun
Eu nu ii pot ajuta - vedeti in semnatura motivele.
Succes !
Multumim mult! Ethereal si Harry magic wand sunt aici pe site.:)
Last edited by DaNNe. on 01 Feb 2014, 19:59, edited 2 times in total.
Reason: Stiu ! ;))
User avatar
Truth*
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 766
Joined: 11 Oct 2013, 11:08
Detinator Steam: Da
SteamID: Ezeru
Reputatie: Fost moderator ajutator
Membru Club eXtreamCS (4 luni)
Nume anterior: HyperioN.
Scripter eXtreamCS
0.2 / 3
Fond eXtream: 0
Location: Sibiu
Has thanked: 44 times
Been thanked: 122 times

02 Feb 2014, 00:31

Poftim :
SMA HERO | Afiseaza codul
/* Plugin generated by AMXX-Studio */

#include <amxmodx> 
#include <amxmisc> 
#include <fakemeta_util> 
#include <cstrike> 
#include <hamsandwich>

#pragma tabsize 0

#define PLUGIN "Weapons"
#define VERSION "1.0"
#define AUTHOR "NicutaMM | Cstrike"

#define HERO ADMIN_LEVEL_H

#define IsPlayer(%0)    ( 1 <= %0 <= g_iMaxPlayers )
#define is_valid_player(%1) (1 <= %1 <= 32)

native set_user_ethereal(id, ethereal);
native give_weapon_watergun(id);
native give_weapon_harry(id);

new g_iMaxPlayers;
new g_iBlinkAcct;  

new g_szItems[][] =  
{ 
    "Ethreal",  
    "Water GUN", 
    "Blue Cart",
    "Harry Potter's Magic Wand"
} 

new g_iItemsPrices[] =  
{ 
    1000,
    8000,
    1200,
    1400,

} 

new bool: CartBlue[ 33 ];

new const vCartBlue[ 64 ] = "models/v_vipcartblue.mdl";
new const pCartBlue[ 64 ] = "models/p_vipcartblue.mdl";


new CvarHP, CvarAP;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	CvarHP = register_cvar("hero_hp", "150");
	CvarAP = register_cvar("hero_ap", "100");
	
		g_iBlinkAcct = get_user_msgid("BlinkAcct") 
     
	register_clcmd("say /shop", "cmdHero", 0); 
	
	register_event ( "CurWeapon", "CurrentWeapon", "be", "1=1" );
	
	RegisterHam( Ham_Spawn, "player", "HeroSpawnCMD", true);
	RegisterHam ( Ham_TakeDamage, "player", "Player_TakeDamage" );
	
	g_iMaxPlayers = get_maxplayers ( 	);
	// Add your code here...
}

public plugin_precache ( ) {

	precache_model( vCartBlue );
	precache_model( pCartBlue );
	
}

public HeroSpawnCMD ( id )
{
	if(is_valid_player(id) && is_user_alive(id) && get_user_flags(id) & HERO )
	{
		fm_set_user_health(id, get_pcvar_num( CvarHP ) );
		fm_set_user_armor(id, get_pcvar_num( CvarAP ) );
	}
	CartBlue[ id ] = false;
	
}

public CurrentWeapon ( id ) {
	
	new szWeapon = get_user_weapon ( id );
	if ( szWeapon == CSW_MP5NAVY && CartBlue[ id ] ) {
		
		set_pev ( id, pev_viewmodel2, vCartBlue );
		set_pev ( id, pev_weaponmodel2, pCartBlue );
	}
	
	return 1;
}

public cmdHero(id) 
{ 
    new Temp[101], money = cs_get_user_money(id); 
   
     
    formatex(Temp,100, "\yHero Menu:^n^nBani tai:\r $%d", money); 
    new menu = menu_create(Temp, "handler_HeroMenu") 
     
    new szItemName[64] 
    for(new i; i<sizeof(g_szItems) && i<sizeof(g_iItemsPrices); i++) 
    { 
        if( money < g_iItemsPrices )
        { 
            formatex(szItemName, charsmax(szItemName), "\d%s ($%d)", g_szItems[ i ], g_iItemsPrices[ i ]) 
         
        } 
        else { 
            formatex(szItemName, charsmax(szItemName), "%s (\r$%d\w)", g_szItems[ i ], g_iItemsPrices[ i ]) 
            
        } 
        menu_additem(menu, szItemName) 
    } 
     
    menu_setprop(menu, MPROP_NUMBER_COLOR, "\y") 
     
    menu_display(id, menu, 0); 
     
    return PLUGIN_HANDLED; 
} 

public handler_ShopMenu(id, menu, item) 
{ 
    if( item == MENU_EXIT ) 
    { 
        menu_destroy(menu); 
        return PLUGIN_HANDLED; 
    } 

    new money = cs_get_user_money(id); 
    new new_money = cs_get_user_money(id) - g_iItemsPrices[item]; 
   
    if( money < g_iItemsPrices[item] )  
    { 
        NotEnoughMoney( id ); 
        menu_display(id, menu); 
        return PLUGIN_HANDLED; 
    } 
     
    switch(item) 
    { 
        case 0:  
        { 
            if(get_user_flags(id) & HERO )
	    {
                set_user_ethereal(id, 1); 
                 
                client_print(id, print_center, "Ai cumparat (%s)", g_szItems[item]); 

                 
                cs_set_user_money(id, new_money); 
            }
            else
	    {
	    	client_print(id, print_center, "Nu ai acces la acest meniu!"); 
	    }
        } 
	case 1:  
        { 
            if(get_user_flags(id) & HERO )
	    {
                give_weapon_watergun(id);
                 
                client_print(id, print_center, "Ai cumparat (%s)", g_szItems[item]); 

                 
                cs_set_user_money(id, new_money); 
            }
            else
	    {
	    	client_print(id, print_center, "Nu ai acces la acest meniu!"); 
	    }
        } 
        case 2: 
        { 
            
            if(get_user_flags(id) & HERO )
	    {
           
		fm_strip_user_weapons(id);
		fm_give_item(id, "weapon_knife");
		fm_give_item(id, "weapon_deagle");
		fm_give_item(id, "weapon_mp5navy");
		cs_set_user_bpammo(id, CSW_DEAGLE, 70);
		cs_set_user_bpammo(id, CSW_MP5NAVY, 250 );
		CartBlue[ id ] = true;
			CurrentWeapon(id);
                 
                client_print(id, print_center, "Ai cumparat (%s)", g_szItems[item]); 
                 
                
                cs_set_user_money(id, new_money); 
            }
            else
	    {
	    	client_print(id, print_center, "Nu ai acces la acest meniu!"); 
	    }
        } 
        case 3: 
        { 
            
            if(get_user_flags(id) & HERO )
	    {
            
                give_weapon_harry(id);
                 
                client_print(id, print_center, "Ai cumparat (%s)", g_szItems[item]); 
                 
                
                cs_set_user_money(id, new_money); 
	    }
            else
	    {
	    	client_print(id, print_center, "Nu ai acces la acest meniu!"); 
	    }
	}
    } 

    menu_destroy(menu); 
    return PLUGIN_HANDLED; 
}  

public NotEnoughMoney( id ) 
{ 
    client_print(id, print_center, "#Cstrike_TitlesTXT_Not_Enough_Money"); 
     
      
    message_begin(MSG_ONE_UNRELIABLE, g_iBlinkAcct, .player=id); 
    { 
        write_byte(2); 
    } 
    message_end(); 
} 

public Player_TakeDamage ( iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits ) 
{
	if ( IsPlayer ( iAttacker ) ) {
		
		if( get_user_weapon( iAttacker ) == CSW_MP5NAVY && CartBlue[ iAttacker ] )
		{
			SetHamParamFloat( 4, fDamage * 3 )
			return HAM_HANDLED
		}
	}
	
	return HAM_IGNORED;
}

Ethreal | 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) {
	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);	
	
}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

Harry Potter's Magic Wand | Afiseaza codul
/* Plugin generated by AMXX-Studio */

#include < amxmodx >
#include < amxmisc >
#include < cstrike >
#include < hamsandwich >
#include < fakemeta >
#include < engine >
#include < message_const >
#include < ColorChat >

#define PLUGIN_NAME	"Harry Potter's Magic Wand"
#define PLUGIN_VERSION	"0.0.2"
#define PLUGIN_AUTHOR	"Hades Ownage & YONTU"

#define HARRY_WAND_RECOIL 	0.0			// Recoil
#define HARRY_WAND_SPEED 	0.35			// Click stanga
#define HARRY_WAND_SPEED2 	0.75			// Click dreapta
#define HARRY_WAND_FIRE	random_num( 3, 6 )	// Animatie cand trage cu click stanga
#define HARRY_WAND_FIRE2	random_num( 5, 10 )	// Animatie cand trage cu click dreapta

#define TE_BEAMENTPOINT	1
#define TE_EXPLOSION		3
#define TE_SPRITETRAIL		15
#define TE_BEAMCYLINDER		21

new const Tag[  ] = "[Harry Magic Wand]";

new HarryFireSound[  ] = "harry_wand/harry_shoot1.wav";
new HarryHitSound[  ] = "harry_wand/harry_hit.wav";
new HarryHitSound2[  ] = "harry_wand/harry_shoot2.wav";
new HarryModel[  ] = "models/harry_wand/v_harry_wand.mdl";

new HarryBeam, HarryExp, HarryExp2, DeathSprite;

new bool:g_HasHarryWand[ 33 ];

new Harry_Ammo[ 33 ];
new Float:HarryLastShotTime[ 33 ];

new HarryDamageCvar, HarryDamageCvar2, HarryAmmo, HarryKillMoney, HarryDistance;

public plugin_init(  ) {

	register_event( "CurWeapon", "CurrentWeapon", "be", "1=1" );
	
	register_forward( FM_CmdStart, "Harry_CmdStart" );
	
	RegisterHam( Ham_Spawn, "player", "Ham_SpawnCallback", 1 );
	
	HarryDamageCvar = register_cvar( "harry_damage", "100.0" );
	HarryDamageCvar2 = register_cvar( "harry_damage2", "150.0" );
	HarryAmmo = register_cvar( "harry_ammo", "300" );
	HarryKillMoney = register_cvar( "harry_money_reward", "5000" );
	HarryDistance = register_cvar( "harry_distance", "90909" );

	register_concmd( "amx_get_harry", "GiveHarry", ADMIN_RCON, "< nume > < ammo >" );
}

public plugin_natives ()
{
	register_native("give_weapon_harry", "native_give_herry_add", 1)
}
public native_give_herry_add(id)
{
	get_harry( id )
}

public plugin_precache(  ) {
	
	register_plugin( PLUGIN_NAME, 
			PLUGIN_VERSION, 
			PLUGIN_AUTHOR );

	precache_sound( HarryFireSound );
	precache_sound( HarryHitSound );
	precache_sound( HarryHitSound2 );

	precache_model( HarryModel );

	HarryBeam = precache_model( "sprites/harry_wand/harry_plasma_beam.spr" );
	HarryExp = precache_model( "sprites/harry_wand/harry_plasma_exp2.spr" );
	HarryExp2 = precache_model( "sprites/harry_wand/harry_plasma_exp3.spr" );
	DeathSprite = precache_model( "sprites/harry_wand/harry_skull.spr" );
}

public client_putinserver( id ) {
		
	g_HasHarryWand[ id ] = false;
	Harry_Ammo[ id ] = false;
}

public client_disconnect( id ) {
	
	g_HasHarryWand[ id ] = false;
	Harry_Ammo[ id ] = false;
}

public GiveHarry( id, level, cid ) {
	
	if( !cmd_access( id, level, cid, 3 ) ) 
		return PLUGIN_HANDLED;
	
	new szTtarget[ 32 ], szAmmoHarry[ 21 ];
	
	read_argv( 1, szTtarget, 31 );
	read_argv( 2, szAmmoHarry, 20 );

	new iPlayer = cmd_target( id, szTtarget, 8 );

	new szAdminName[ 32 ], szPlayerName[ 32 ];

	get_user_name( id, szAdminName, 31 );
	get_user_name( iPlayer, szPlayerName, 31 );

	if( !iPlayer )
		return PLUGIN_HANDLED;

	if( !is_user_alive( iPlayer ) ) {

		client_print( id, print_console, "Jucatorul %s nu este in viata !", szPlayerName );
		return 1;
	}

	if( g_HasHarryWand[ iPlayer ] ) {

		client_print( id, print_console, "Jucatorul %s are deja bagheta !", szPlayerName );
		return 1;
	}

	else {
	
		new AmmoForMagic = str_to_num( szAmmoHarry );

		ColorChat( 0, GREEN, "^x04%s^x01 Adminul^x03 %s i-a dat lui^x03 %s^x01 bagheta lui Harry cu^x03 %d ammo^x01 !", Tag, szAdminName, szPlayerName, szAmmoHarry );

		get_harry( iPlayer );
		Harry_Ammo[ iPlayer ] += AmmoForMagic;
	}

	return PLUGIN_CONTINUE;
}

public get_harry( id ) {

	if( is_user_alive( id ) ) {

		g_HasHarryWand[ id ] = true;
		engclient_cmd( id, "weapon_knife" );

		Harry_Ammo[ id ] = get_pcvar_num( HarryAmmo );
	}

	else {

		client_print( id, print_console, "Jucatorul nu este in viata! " );
		g_HasHarryWand[ id ] = false;

		return 1;
	}

	return 1;
}

public CurrentWeapon( id )
	if( get_user_weapon( id ) == CSW_KNIFE && g_HasHarryWand[ id ] )
		set_pev( id, pev_viewmodel2, HarryModel );

public Ham_SpawnCallback( id ) {
	
	if( !is_user_alive( id ) )
		return 1;
	
	g_HasHarryWand[ id ] = false;
	
	return 0;
}

public Harry_CmdStart( id, uc_handle, seed ) {
	
	if( is_user_alive( id ) && g_HasHarryWand[ 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_KNIFE && g_HasHarryWand[ id ] ) {

				if( Harry_Ammo[ id ] > 0  && flNextAttack <= 0.0 ) {

					if( get_gametime(  ) - HarryLastShotTime[ id ] > HARRY_WAND_SPEED ) {
						
						set_weapon_anim( id, HARRY_WAND_FIRE );
						emit_sound( id, CHAN_WEAPON, HarryFireSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
						
						Harry_Fire( id );

						if( Harry_Ammo[ id ] > 0 ) {
							
							set_hudmessage( 0, 127, 255, 0.01, 0.85, 0, 6.0, 1.0 );
							show_hudmessage( id, "Remaining Ammo: %d !", Harry_Ammo[ id ] );
						}
						
						else if( Harry_Ammo[ id ] <= 0 ) {
							
							set_hudmessage( 255, 0, 0, 0.01, 0.90, 0, 6.0, 1.0 );
							show_hudmessage( id, "No Ammo !" );
							
						}
						
						static Float:Punch_Angles[ 3 ];
						
						Punch_Angles[ 0]  = -5.0;
						Punch_Angles[ 1 ] = HARRY_WAND_RECOIL;
						Punch_Angles[ 2 ] = HARRY_WAND_RECOIL;
						
						set_pev( id, pev_punchangle, Punch_Angles );

						Harry_Ammo[ id ] -= 1;
						HarryLastShotTime[ id ] = get_gametime(  );
						
					}	
				}
				
				CurButton &= ~IN_ATTACK;
				set_uc( uc_handle, UC_Buttons, CurButton );
			}		
		}
		
		else if( CurButton & IN_ATTACK2 ) {

			if( get_user_weapon( id ) == CSW_KNIFE && g_HasHarryWand[ id ] ) {

				if( Harry_Ammo[ id ] >= 5  && flNextAttack <= 0.0 ) {

					if( get_gametime(  ) - HarryLastShotTime[ id ] > HARRY_WAND_SPEED2 ) {
						
						set_weapon_anim( id, HARRY_WAND_FIRE2 );
						emit_sound( id, CHAN_WEAPON, HarryFireSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
						
						Harry_Fire2( id );

						set_hudmessage( 0, 127, 255, 0.01, 0.85, 0, 6.0, 1.0 );
						show_hudmessage( id, "Remaining Ammo: %d !", Harry_Ammo[ id ] );
						
						static Float:Punch_Angles[ 3 ];
						
						Punch_Angles[ 0 ] = -5.0;
						Punch_Angles[ 1 ] = HARRY_WAND_RECOIL;
						Punch_Angles[ 2 ] = HARRY_WAND_RECOIL;
						
						set_pev( id, pev_punchangle, Punch_Angles );

						Harry_Ammo[ id ] -= 3;
						HarryLastShotTime[ id ] = get_gametime(  );
						
					}	
				}
				
				CurButton &= ~IN_ATTACK2;
				set_uc( uc_handle, UC_Buttons, CurButton );
			}
		}
	}
	
	else if( is_user_alive ( id ) && !g_HasHarryWand[ id ] )
		return PLUGIN_CONTINUE;

	return PLUGIN_CONTINUE;
}

public Harry_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( 1 );
	write_short( id | 0x1000 );
	write_coord( BeamOrigin[ 0 ] );	// Start X
	write_coord( BeamOrigin[ 1 ] );	// Start Y
	write_coord( BeamOrigin[ 2 ] );	// Start Z
	write_short( HarryBeam);		// Sprite
	write_byte( 1 );      		// Start frame				
	write_byte( 1 );     		// Frame rate					
	write_byte( 1 );			// Life
	write_byte( 40 );   		// Line width				
	write_byte( 0 );    		// Noise
	write_byte( 108 ); 		// Red
	write_byte( 236 );			// Green
	write_byte( 23 );			// 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( HarryExp );	// sprite
	write_byte( 10 );		// scale in 0.1's
	write_byte( 15 );		// framerate
	write_byte( 4 );		// flags
	message_end(  );
	
	get_user_aiming( id, Victim, Body, get_pcvar_num( HarryDistance ) );

	if( is_user_connected( Victim ) ) {

		new Float:Damage = float( get_damage_body( Body, get_pcvar_float( HarryDamageCvar ) ) );
		
		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( HarryDamageCvar ) >= 1 && is_user_alive( Victim ) && !fm_get_user_godmode( Victim ) && get_user_team( Victim ) != get_user_team( id ) ) {

			new iOrigin[ 3 ];
			get_user_origin( Victim, iOrigin, 0 );

			message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin ); 
			write_byte( 21 );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] + 60 );	// end axis + radius
			write_short( HarryExp );	// sprite
			write_byte( 0 );		// startfrate
			write_byte( 0 );		// framerate
			write_byte( 10 );		// life in 0.1 sec
			write_byte( 60 );		// width
			write_byte( 0 );		// amplitude
			write_byte( 0 );		// red
			write_byte( 200 );		// green
			write_byte( 200 );		// blue
			write_byte( 153 );		// brightness
			write_byte( 0 );		// speed
			message_end(  );
			
			message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
			write_byte( 15 );
			write_coord( iOrigin[ 0 ] ); 	// start position (X)
			write_coord( iOrigin[ 1 ] ); 	// start position (Y)
			write_coord( iOrigin[ 2 ] + 40 ); // start position (Z)
			write_coord( iOrigin[ 0 ] ); 	// end position (X)
			write_coord( iOrigin[ 1 ] );	// end position (Y)
			write_coord( iOrigin[ 2 ] );	// end position (Z)
			write_short( DeathSprite );	// sprite index
			write_byte( 50 );		// count
			write_byte( 20 );		// life in 0.1's
			write_byte( 2 );		// scale in 0.1's
			write_byte( 50 );		// velocity along vector in 10's
			write_byte( 10 );		// randomness of velocity in 10's
			message_end(  );
			
			make_knockback( Victim, VictimOrigin, 3 * get_pcvar_float( HarryDamageCvar ) );
			
			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_SHOCK );
			write_coord( 0 );
			write_coord( 0 );
			write_coord( 0 );
			message_end(  );
			
			FadeScreen( Victim, 4.0, 255, 122, 122, 100 );
			ShakeScreen( Victim, 3.0 );
		}

		else if( get_user_health( Victim ) - get_pcvar_float( HarryDamageCvar ) < 1 && is_user_alive( Victim ) && !fm_get_user_godmode( Victim ) && get_user_team( Victim ) != get_user_team( id ) ) {
			
			new iOrigin[ 3 ];
			get_user_origin( Victim, iOrigin, 0 );

			message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin ); 
			write_byte( 21 );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] + 60 );	// end axis + radius
			write_short( HarryExp );	// sprite
			write_byte( 0 );		// startfrate
			write_byte( 0 );		// framerate
			write_byte( 10 );		// life in 0.1 sec
			write_byte( 60 );		// width
			write_byte( 0 );		// amplitude
			write_byte( 0 );		// red
			write_byte( 200 );		// green
			write_byte( 200 );		// blue
			write_byte( 153 );		// brightness
			write_byte( 0 );		// speed
			message_end(  );
			
			message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
			write_byte( 15 );
			write_coord( iOrigin[ 0 ] ); 	// start position (X)
			write_coord( iOrigin[ 1 ] ); 	// start position (Y)
			write_coord( iOrigin[ 2 ] + 40 ); // start position (Z)
			write_coord( iOrigin[ 0 ] ); 	// end position (X)
			write_coord( iOrigin[ 1 ] );	// end position (Y)
			write_coord( iOrigin[ 2 ] );	// end position (Z)
			write_short( DeathSprite );	// sprite index
			write_byte( 50 );		// count
			write_byte( 20 );		// life in 0.1's
			write_byte( 2 );		// scale in 0.1's
			write_byte( 50 );		// velocity along vector in 10's
			write_byte( 10 );		// randomness of velocity in 10's
			message_end(  );
			
			make_knockback( Victim, VictimOrigin, 3 * get_pcvar_float( HarryDamageCvar ) );
			
			death_message( id, Victim, 1, "Magic Wand" );
		}
	}

	else {

		static ClassName[ 32 ];
		pev( Victim, pev_classname, ClassName, charsmax( ClassName ) );

		if( equal( ClassName, "func_breakable" ) )
			if( entity_get_float( Victim, EV_FL_health ) <= 80 )
				force_use( id, Victim );
	}
	
	emit_sound( id, CHAN_WEAPON, HarryHitSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
}

public Harry_Fire2( 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( 1 );
	write_short( id | 0x1000 );
	write_coord( BeamOrigin[ 0 ] );	// Start X
	write_coord( BeamOrigin[ 1 ] );	// Start Y
	write_coord( BeamOrigin[ 2 ] );	// Start Z
	write_short( HarryBeam );	// Sprite
	write_byte( 1 );      		// Start frame				
	write_byte( 1 );     		// Frame rate					
	write_byte( 1 );			// Life
	write_byte( 40 );   		// Line width				
	write_byte( 0 );    		// Noise
	write_byte( 150 ); 		// Red
	write_byte( 22 );			// Green
	write_byte( 235 );			// 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( HarryExp2 );
	write_byte( 10 );
	write_byte( 15 );
	write_byte( 4 );
	message_end(  );
	
	get_user_aiming( id, Victim, Body, get_pcvar_num( HarryDistance ) );

	if( is_user_alive( Victim ) ) {

		new Float:Damage = float( get_damage_body( Body, get_pcvar_float( HarryDamageCvar ) ) );

		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( HarryDamageCvar2 ) >= 1 && is_user_alive( Victim ) && !fm_get_user_godmode( Victim ) && get_user_team( Victim ) != get_user_team( id ) ) {
			
			new iOrigin[ 3 ];
			get_user_origin( Victim, iOrigin, 0 );

			message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin ); 
			write_byte( 21 );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] + 60 );	// end axis + radius
			write_short( HarryExp2 );	// sprite
			write_byte( 0 );		// startfrate
			write_byte( 0 );		// framerate
			write_byte( 10 );		// life in 0.1 sec
			write_byte( 60 );		// width
			write_byte( 0 );		// amplitude
			write_byte( 217 );		// red
			write_byte( 132 );		// green
			write_byte( 47 );		// blue
			write_byte( 153 );		// brightness
			write_byte( 0 );		// speed
			message_end(  );
			
			message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
			write_byte( 15 );
			write_coord( iOrigin[ 0 ] ); 	// start position (X)
			write_coord( iOrigin[ 1 ] ); 	// start position (Y)
			write_coord( iOrigin[ 2 ] + 40 ); // start position (Z)
			write_coord( iOrigin[ 0 ] ); 	// end position (X)
			write_coord( iOrigin[ 1 ] );	// end position (Y)
			write_coord( iOrigin[ 2 ] );	// end position (Z)
			write_short( DeathSprite );	// sprite index
			write_byte( 50 );		// count
			write_byte( 20 );		// life in 0.1's
			write_byte( 2 );		// scale in 0.1's
			write_byte( 50 );		// velocity along vector in 10's
			write_byte( 10 );		// randomness of velocity in 10's
			message_end(  );
			
			make_knockback( Victim, VictimOrigin, 3 * get_pcvar_float( HarryDamageCvar2 ) );
			
			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(  );
			
			FadeScreen( Victim, 4.0, 0, 255, 0, 100 );
			ShakeScreen( Victim, 3.0 );
		}

		else if( get_user_health( Victim ) - get_pcvar_float( HarryDamageCvar2 ) < 1 && is_user_alive( Victim ) && !fm_get_user_godmode( Victim ) && get_user_team( Victim ) != get_user_team( id ) ) {
			
			new iOrigin[ 3 ];
			get_user_origin( Victim, iOrigin, 0 );

			message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin ); 
			write_byte( 21 );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] + 60 );	// end axis + radius
			write_short( HarryExp2 );	// sprite
			write_byte( 0 );		// startfrate
			write_byte( 0 );		// framerate
			write_byte( 10 );		// life in 0.1 sec
			write_byte( 60 );		// width
			write_byte( 0 );		// amplitude
			write_byte( 217 );		// red
			write_byte( 132 );		// green
			write_byte( 47 );		// blue
			write_byte( 153 );		// brightness
			write_byte( 0 );		// speed
			message_end(  );
			
			message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
			write_byte( 15 );
			write_coord( iOrigin[ 0 ] ); 	// start position (X)
			write_coord( iOrigin[ 1 ] ); 	// start position (Y)
			write_coord( iOrigin[ 2 ] + 40 ); // start position (Z)
			write_coord( iOrigin[ 0 ] ); 	// end position (X)
			write_coord( iOrigin[ 1 ] );	// end position (Y)
			write_coord( iOrigin[ 2 ] );	// end position (Z)
			write_short( DeathSprite );	// sprite index
			write_byte( 50 );		// count
			write_byte( 20 );		// life in 0.1's
			write_byte( 2 );		// scale in 0.1's
			write_byte( 50 );		// velocity along vector in 10's
			write_byte( 10 );		// randomness of velocity in 10's
			message_end(  );
			
			make_knockback( Victim, VictimOrigin, 3 * get_pcvar_float( HarryDamageCvar2 ) );
			
			death_message( id, Victim, 1, "Double Magic Wand" );
		}
	}

	else {

		static ClassName[ 32 ];
		pev( Victim, pev_classname, ClassName, charsmax( ClassName ) );

		if( equal( ClassName, "func_breakable" ) )
			if( entity_get_float( Victim, EV_FL_health ) <= 80 )
				force_use( id, Victim );
	}

	emit_sound( id, CHAN_WEAPON, HarryHitSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
}

public make_knockback( Victim, Float:origin[ 3 ], Float:maxspeed ) {

	new Float:fVelocity[ 3 ];
	
	kickback( Victim, origin, maxspeed, fVelocity );
	entity_set_vector( Victim, EV_VEC_velocity, fVelocity );
	
	return( 1 );
}

stock ShakeScreen( id, const Float:iSeconds ) {

	message_begin( MSG_ONE, get_user_msgid( "ScreenShake" ), { 0, 0, 0 }, id );
	write_short( floatround( 4096.0 * iSeconds, floatround_round ) );
	write_short( floatround( 4096.0 * iSeconds, floatround_round ) );
	write_short( 1<<13 );
	message_end(  );
}

stock FadeScreen( id, const Float:iSeconds, const iRed, const iGreen, const iBlue, const iAlpha ) {
      
	message_begin( MSG_ONE, get_user_msgid( "ScreenFade" ), _, id );
	write_short( floatround( 4096.0 * iSeconds, floatround_round ) );
	write_short( floatround( 4096.0 * iSeconds, floatround_round ) );
	write_short( 0x0000 );
	write_byte( iRed );
	write_byte( iGreen );
	write_byte( iBlue );
	write_byte( iAlpha );
	message_end(  );
}		

stock kickback( ent, Float:fOrigin[ 3 ], Float:fSpeed, Float:fVelocity[ 3 ] ) {

	new Float:fEntOrigin[ 3 ];
	entity_get_vector( ent, EV_VEC_origin, fEntOrigin );
	
	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 from "m79"
stock death_message( Killer, Victim, ScoreBoard, const Weapon[  ] ) {
	
	set_msg_block( get_user_msgid( "DeathMsg" ), BLOCK_SET );

	ExecuteHamB( Ham_Killed, Victim, Killer, 2 );

	set_msg_block( get_user_msgid( "DeathMsg" ), BLOCK_NOT );

	make_deathmsg( Killer, Victim, 0, Weapon );
	cs_set_user_money( Killer, cs_get_user_money( Killer ) + get_pcvar_num( HarryKillMoney ) );
	
	if( ScoreBoard ) {

		message_begin( MSG_BROADCAST, get_user_msgid( "ScoreInfo" ) );
		write_byte( Killer );
		write_short( pev( Killer, pev_frags ) );
		write_short( cs_get_user_deaths( Killer ) );
		write_short( 0 );
		write_short( get_user_team( Killer ) );
		message_end(  );
		
		message_begin( MSG_BROADCAST, get_user_msgid( "ScoreInfo" ) );
		write_byte( Victim );
		write_short( pev( Victim, pev_frags ) );
		write_short( cs_get_user_deaths( Victim ) );
		write_short( 0 );
		write_short( get_user_team( Victim ) );
		message_end(  );
	}
}

stock set_weapon_anim( id, anim ) {

	set_pev( id, pev_weaponanim, anim );

	if( is_user_alive( 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:fDamage ) {

	switch( body ) {

		case HIT_HEAD: fDamage *= 4.0;

		case HIT_STOMACH: fDamage *= 1.1;

		case HIT_CHEST: fDamage *= 1.5;

		case HIT_LEFTARM: fDamage *= 0.77;

		case HIT_RIGHTARM: fDamage *= 0.77;

		case HIT_LEFTLEG: fDamage *= 0.75;

		case HIT_RIGHTLEG: fDamage *= 0.75;

		default: fDamage *= 1.0;
	}
	
	return floatround( fDamage );
}

// stock from "fakemeta_util"
stock fm_get_user_godmode( index ) {

	new Float:val;
	pev( index, pev_takedamage, val );

	return ( val == DAMAGE_NO );
}

WaterGUN | Afiseaza codul
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <xs>

#define PLUGIN "Furien Water GUN"
#define VERSION "1.1"
#define AUTHOR "Tr3fla & Edit By Blue"

new normalTrace[33], lastTrace[33], cvEnabled, weapon2, dummy;

#define ENG_NULLENT		-1
#define EV_INT_WEAPONKEY	EV_INT_impulse
#define watergun_WEAPONKEY 893
#define MAX_PLAYERS  			  32
#define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)

#define TASK_FBURN				100
#define ID_FBURN					( taskid - TASK_FBURN )

#define MAX_CLIENTS				32

new bool:g_fRoundEnd

#define FIRE_DURATION		6
#define FIRE_DAMAGE		25

const USE_STOPPED = 0
const OFFSET_ACTIVE_ITEM = 373
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX = 5
const OFFSET_LINUX_WEAPONS = 4
const m_fInReload =		54
const m_flTimeWeaponIdle = 	48

#define WEAP_LINUX_XTRA_OFF		4
#define m_fKnown					44
#define m_flNextPrimaryAttack 		46
#define m_iClip					51
#define PLAYER_LINUX_XTRA_OFF	5
#define m_flNextAttack				83

#define watergun_RELOAD_TIME 	3.5
#define watergun_RELOAD		1
#define watergun_DRAW		2
#define watergun_SHOOT1		3
#define watergun_SHOOT2		4

new g_flameSpr
new g_smokeSpr

new g_burning_duration[ MAX_CLIENTS + 1 ]

#define write_coord_f(%1)	engfunc(EngFunc_WriteCoord,%1)

new const Fire_Sounds[][] = { "weapons/waterp.wav" }

new watergun_V_MODEL[64] = "models/Water-GUN/v_waterg.mdl"
new watergun_P_MODEL[64] = "models/Water-GUN/p_waterg.mdl"
new watergun_W_MODEL[64] = "models/Water-GUN/w_waterg.mdl"

//new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }

new cvar_dmg_watergun, cvar_recoil_watergun, cvar_clip_watergun, cvar_spd_watergun, cvar_watergun_ammo
new g_MaxPlayers, g_orig_event_watergun, g_IsInPrimaryAttack
new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
new g_has_watergun[33], g_clip_ammo[33], g_watergun_TmpClip[33], oldweap[33]
new watergun_sprite

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)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
			"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
			"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
			"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
			"weapon_ak47", "weapon_knife", "weapon_p90" }


public plugin_init()
{
	register_plugin( PLUGIN, VERSION, AUTHOR )
	
	
	register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
	register_event("CurWeapon","CurrentWeapon","be","1=1")
	RegisterHam(Ham_Item_AddToPlayer, "weapon_mp5navy", "fw_watergun_AddToPlayer")
	RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
	for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
	if (WEAPONENTNAMES[0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES, "fw_Item_Deploy_Post", 1)
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mp5navy", "fw_watergun_PrimaryAttack")
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mp5navy", "fw_watergun_PrimaryAttack_Post", 1)
	RegisterHam(Ham_Item_PostFrame, "weapon_mp5navy", "watergun_ItemPostFrame")
	RegisterHam(Ham_Weapon_Reload, "weapon_mp5navy", "watergun_Reload")
	RegisterHam(Ham_Weapon_Reload, "weapon_mp5navy", "watergun_Reload_Post", 1)
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	RegisterHam( Ham_Spawn, "player", "PlayerSpawn_Post", 1 );
	register_forward(FM_SetModel, "fw_SetModel")
	register_event( "DeathMsg", "EV_DeathMsg", "a" );
	register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post_fw", 1)
	register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
	
	//RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)

	cvar_dmg_watergun = register_cvar("zp_watergun_dmg", "70.0")
	cvar_recoil_watergun = register_cvar("zp_watergun_recoil", "1.01")
	cvar_clip_watergun = register_cvar("zp_watergun_clip", "50")
	cvar_spd_watergun = register_cvar("zp_watergun_spd", "1.02")
	cvar_watergun_ammo = register_cvar("zp_watergun_ammo", "200")
	
}

public plugin_precache()
{
	precache_model(watergun_V_MODEL)
	precache_model(watergun_P_MODEL)
	precache_model(watergun_W_MODEL)
	for(new i = 0; i < sizeof Fire_Sounds; i++)
	precache_sound(Fire_Sounds)	
	m_iBlood[0] = precache_model("sprites/blood.spr")
	m_iBlood[1] = precache_model("sprites/bloodspray.spr")
	watergun_sprite = precache_model("sprites/watergun.spr")

}

public client_connect(id)
{
	normalTrace[id] = 0;
	g_has_watergun[id] = false

}

public client_disconnect(id)
{
	normalTrace[id] = 0;
	g_has_watergun[id] = false
	remove_task(id + TASK_FBURN )
}

// player spawns, and some other such things
public event_resethud(id)
{
	lastTrace[id] = 0;
}

// block forced resethud call
public cmd_fullupdate(id)
{
	return PLUGIN_HANDLED;
}

// traceline hook, meat and bones of the entire plugin
public fw_traceline(Float:vecStart[3],Float:vecEnd[3],ignoreM,id,pentru) // pentToSkip == id, for clarity
{
	if(!is_user_connected(id))
		return FMRES_IGNORED;
	
	// grab normal trace
	if(!normalTrace[id])
	{
		normalTrace[id] = pentru;
		return FMRES_IGNORED;
	}
	
	// ignore normal trace
	else if(pentru == normalTrace[id])
		return FMRES_IGNORED;
	
	// no functionality
	if(!get_pcvar_num(cvEnabled))
		return FMRES_IGNORED;
	
	// not a player entity, or player is dead
	if(!is_user_alive(id))
		return FMRES_IGNORED;
	
	// not shooting anything
	if(!(pev(id,pev_button) & IN_ATTACK))
		return FMRES_IGNORED;
	
	weapon2 = get_user_weapon(id,dummy,dummy);
	
	// using a shotgun, expect multiple tracelines
	if(weapon2 == CSW_M3 || weapon2 == CSW_XM1014)
		return FMRES_IGNORED;
	
	// this is a second traceline, for shooting through walls
	if(pentru == lastTrace[id])
	{
		// values sure to throw off any traceline
		set_tr(TR_vecEndPos,Float:{4096.0,4096.0,4096.0});
		set_tr(TR_AllSolid,1);
		set_tr(TR_pHit,0);
		set_tr(TR_iHitgroup,0);
		set_tr(TR_flFraction,1.0);
		
		return FMRES_SUPERCEDE;
	}
	
	// remeber traceline index for next time
	lastTrace[id] = pentru;
	
	return FMRES_IGNORED;
}

// finished client calculations, reset our traceline index
public fw_playerpostthink(id)
{
	lastTrace[id] = 0;
}




public plugin_natives ()
{
	register_native("give_weapon_watergun", "native_give_weapon_add", 1)
}
public native_give_weapon_add(id)
{
	give_watergun(id)
}

public fwPrecacheEvent_Post(type, const name[])
{
	if (equal("events/mp5n.sc", name))
	{
		g_orig_event_watergun = get_orig_retval()
		return FMRES_HANDLED
	}
	return FMRES_IGNORED
}

public fw_SetModel(entity, model[])
{
	if(!is_valid_ent(entity))
		return FMRES_IGNORED
	
	static szClassName[33]
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
		
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED
	
	static iOwner
	
	iOwner = entity_get_edict(entity, EV_ENT_owner)
	
	if(equal(model, "models/w_mp5.mdl"))
	{
		static iStoredAugID
		
		iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_mp5navy", entity)
	
		if(!is_valid_ent(iStoredAugID))
			return FMRES_IGNORED
	
		if(g_has_watergun[iOwner])
		{
			entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, watergun_WEAPONKEY)
			
			g_has_watergun[iOwner] = false
			
			entity_set_model(entity, watergun_W_MODEL)
			
			return FMRES_SUPERCEDE
		}
	}
	return FMRES_IGNORED
}

public EV_DeathMsg( )
{
	static pevVictim;
	pevVictim = read_data( 2 )
	
	if( !is_user_connected( pevVictim ) )
		return
		
	remove_task( pevVictim + TASK_FBURN )
}

public PlayerSpawn_Post( Player )
{
	if( !is_user_alive( Player ) )
		return;
		
	g_burning_duration[ Player ] = 0
}

public give_watergun(id)
{
	drop_weapons(id, 1)
	new iWep2 = give_item(id,"weapon_mp5navy")
	if( iWep2 > 0 )
	{
		cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_watergun))
		cs_set_user_bpammo (id, CSW_MP5NAVY, get_pcvar_num(cvar_watergun_ammo))	
		UTIL_PlayWeaponAnimation(id, watergun_DRAW)
		set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
	}
	g_has_watergun[id] = true
}

public fw_watergun_AddToPlayer(watergun, id)
{
	if(!is_valid_ent(watergun) || !is_user_connected(id))
		return HAM_IGNORED
	
	if(entity_get_int(watergun, EV_INT_WEAPONKEY) == watergun_WEAPONKEY)
	{
		g_has_watergun[id] = true
		
		entity_set_int(watergun, EV_INT_WEAPONKEY, 0)
		
		return HAM_HANDLED
	}
	return HAM_IGNORED
}

public fw_UseStationary_Post(entity, caller, activator, use_type)
{
	if (use_type == USE_STOPPED && is_user_connected(caller))
		replace_weapon_models(caller, get_user_weapon(caller))
}

public fw_Item_Deploy_Post(weapon_ent)
{
	static owner
	owner = fm_cs_get_weapon_ent_owner(weapon_ent)
	
	static weaponid
	weaponid = cs_get_weapon_id(weapon_ent)
	
	replace_weapon_models(owner, weaponid)
}

public CurrentWeapon(id)
{
	
     replace_weapon_models(id, read_data(2))

     if(read_data(2) != CSW_MP5NAVY || !g_has_watergun[id])
          return
     
     static Float:iSpeed
     if(g_has_watergun[id])
          iSpeed = get_pcvar_float(cvar_spd_watergun)
     
     static weapon[32],Ent
     get_weaponname(read_data(2),weapon,31)
     Ent = find_ent_by_owner(-1,weapon,id)
     if(Ent)
     {
          static Float:Delay
          Delay = get_pdata_float( Ent, 46, 4) * iSpeed
          if (Delay > 0.0)
          {
               set_pdata_float(Ent, 46, Delay, 4)
          }
     }
}

replace_weapon_models(id, weaponid)
{
	
	
	
	switch (weaponid)
	{
		case CSW_MP5NAVY:
		{
			
			if(g_has_watergun[id])
			{
				set_pev(id, pev_viewmodel2, watergun_V_MODEL)
				set_pev(id, pev_weaponmodel2, watergun_P_MODEL)
				if(oldweap[id] != CSW_MP5NAVY) 
				{
					UTIL_PlayWeaponAnimation(id, watergun_DRAW)
					set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
				}
			}
		}
	}
	oldweap[id] = weaponid
}

public fw_UpdateClientData_Post_fw(Player, SendWeapons, CD_Handle)
{
	if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_MP5NAVY || !g_has_watergun[Player]))
		return FMRES_IGNORED
	
	set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
	return FMRES_HANDLED
}

public fw_watergun_PrimaryAttack(Weapon)
{
	new Player = get_pdata_cbase(Weapon, 41, 4)
	
	if (!g_has_watergun[Player])
		return
	
	g_IsInPrimaryAttack = 1
	pev(Player,pev_punchangle,cl_pushangle[Player])
	
	g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
}

public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
	if ((eventid != g_orig_event_watergun) || !g_IsInPrimaryAttack)
		return FMRES_IGNORED
	if (!(1 <= invoker <= g_MaxPlayers))
    return FMRES_IGNORED

	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
	return FMRES_SUPERCEDE
}

public fw_watergun_PrimaryAttack_Post(Weapon)
{
	g_IsInPrimaryAttack = 0
	new Player = get_pdata_cbase(Weapon, 41, 4)
	
	new szClip, szAmmo
	get_user_weapon(Player, szClip, szAmmo)
	
	if(!is_user_alive(Player))
		return

	if(g_has_watergun[Player])
	{
		if (!g_clip_ammo[Player])
			return

		new Float:push[3]
		pev(Player,pev_punchangle,push)
		xs_vec_sub(push,cl_pushangle[Player],push)
		
		xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_watergun),push)
		xs_vec_add(push,cl_pushangle[Player],push)
		set_pev(Player,pev_punchangle,push)
		
		emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		UTIL_PlayWeaponAnimation(Player, random_num(watergun_SHOOT1, watergun_SHOOT2))

		static Float:plrViewAngles[3], Float:VecEnd[3], Float:VecDir[3], Float:PlrOrigin[3]
		pev(Player, pev_v_angle, plrViewAngles)

		static Float:VecSrc[3], Float:VecDst[3]
	
		//VecSrc = pev->origin + pev->view_ofs
		pev(Player, pev_origin, PlrOrigin)
		pev(Player, pev_view_ofs, VecSrc)
		xs_vec_add(VecSrc, PlrOrigin, VecSrc)

		//VecDst = VecDir * 8192.0
		angle_vector(plrViewAngles, ANGLEVECTOR_FORWARD, VecDir);
		xs_vec_mul_scalar(VecDir, 8192.0, VecDst);
		xs_vec_add(VecDst, VecSrc, VecDst);
	
		new hTrace = create_tr2()
		engfunc(EngFunc_TraceLine, VecSrc, VecDst, 0, Player, hTrace)
		get_tr2(hTrace, TR_vecEndPos, VecEnd);

		create_tracer_water(Player, VecSrc, VecEnd)	
	}
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
	if(!is_user_alive(attacker))
		return;

	if (victim != attacker && is_user_connected(attacker))
	{
		if(get_user_weapon(attacker) == CSW_MP5NAVY)
		{
			if(g_has_watergun[attacker])
			{
				SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_watergun))

				if( !task_exists( victim + TASK_FBURN ) )
				{
					g_burning_duration[ victim ] += FIRE_DURATION * 5
				
					set_task( 0.2, "CTask__BurningFlame", victim + TASK_FBURN, _, _, "b" )
				}
			}
		}
	}
}

public message_DeathMsg(msg_id, msg_dest, id)
{
	static szTruncatedWeapon[33], iAttacker, iVictim
	
	get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
	
	iAttacker = get_msg_arg_int(1)
	iVictim = get_msg_arg_int(2)
	
	if(!is_user_connected(iAttacker) || iAttacker == iVictim)
		return PLUGIN_CONTINUE
	
	if(equal(szTruncatedWeapon, "mp5navy") && get_user_weapon(iAttacker) == CSW_MP5NAVY)
	{
		if(g_has_watergun[iAttacker])
			set_msg_arg_string(4, "mp5navy")
	}
	return PLUGIN_CONTINUE
}

stock fm_cs_get_current_weapon_ent(id)
{
	return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
	return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
}

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
	set_pev(Player, pev_weaponanim, Sequence)
	
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
	write_byte(Sequence)
	write_byte(pev(Player, pev_body))
	message_end()
}

public watergun_ItemPostFrame(weapon_entity) 
{
     new id = pev(weapon_entity, pev_owner)
     if (!is_user_connected(id))
          return HAM_IGNORED

     if (!g_has_watergun[id])
          return HAM_IGNORED

     static iClipExtra
     
     iClipExtra = get_pcvar_num(cvar_clip_watergun)
     new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)

     new iBpAmmo = cs_get_user_bpammo(id, CSW_MP5NAVY);
     new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

     new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF) 

     if( fInReload && flNextAttack <= 0.0 )
     {
	     new j = min(iClipExtra - iClip, iBpAmmo)
	
	     set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
	     cs_set_user_bpammo(id, CSW_MP5NAVY, iBpAmmo-j)
		
	     set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
	     fInReload = 0
     }
     return HAM_IGNORED
}

public watergun_Reload(weapon_entity) 
{
     new id = pev(weapon_entity, pev_owner)
     if (!is_user_connected(id))
          return HAM_IGNORED

     if (!g_has_watergun[id])
          return HAM_IGNORED

     static iClipExtra

     if(g_has_watergun[id])
          iClipExtra = get_pcvar_num(cvar_clip_watergun)

     g_watergun_TmpClip[id] = -1

     new iBpAmmo = cs_get_user_bpammo(id, CSW_MP5NAVY)
     new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

     if (iBpAmmo <= 0)
          return HAM_SUPERCEDE

     if (iClip >= iClipExtra)
          return HAM_SUPERCEDE

     g_watergun_TmpClip[id] = iClip

     return HAM_IGNORED
}

public watergun_Reload_Post(weapon_entity) 
{
	new id = pev(weapon_entity, pev_owner)
	if (!is_user_connected(id))
		return HAM_IGNORED

	if (!g_has_watergun[id])
		return HAM_IGNORED

	if (g_watergun_TmpClip[id] == -1)
		return HAM_IGNORED

	set_pdata_int(weapon_entity, m_iClip, g_watergun_TmpClip[id], WEAP_LINUX_XTRA_OFF)

	set_pdata_float(weapon_entity, m_flTimeWeaponIdle, watergun_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)

	set_pdata_float(id, m_flNextAttack, watergun_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)

	set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)

	UTIL_PlayWeaponAnimation(id, watergun_RELOAD)

	return HAM_IGNORED
}

stock create_tracer_water(id, Float:fVec1[3], Float:fVec2[3])
{
	static iVec1[3]
	FVecIVec(fVec1, iVec1)

	static Float:origin[3], Float:vSrc[3], Float:angles[3], Float:v_forward[3], Float:v_right[3], Float:v_up[3], Float:gun_position[3], Float:player_origin[3], Float:player_view_offset[3]
	pev(id, pev_v_angle, angles)
	engfunc(EngFunc_MakeVectors, angles)
	global_get(glb_v_forward, v_forward)
	global_get(glb_v_right, v_right)
	global_get(glb_v_up, v_up)

	//m_pPlayer->GetGunPosition( ) = pev->origin + pev->view_ofs
	pev(id, pev_origin, player_origin)
	pev(id, pev_view_ofs, player_view_offset)
	xs_vec_add(player_origin, player_view_offset, gun_position)

	xs_vec_mul_scalar(v_forward, 24.0, v_forward)
	xs_vec_mul_scalar(v_right, 3.0, v_right)

	if ((pev(id, pev_flags) & FL_DUCKING) == FL_DUCKING)
		xs_vec_mul_scalar(v_up, 6.0, v_up)
	else
		xs_vec_mul_scalar(v_up, -2.0, v_up)

	xs_vec_add(gun_position, v_forward, origin)
	xs_vec_add(origin, v_right, origin)
	xs_vec_add(origin, v_up, origin)

	vSrc[0] = origin[0]
	vSrc[1] = origin[1]
	vSrc[2] = origin[2]

	new Float:dist = get_distance_f(vSrc, fVec2)
	new CountDrops = floatround(dist / 50.0)
	
	if (CountDrops > 20)
		CountDrops = 20
	
	if (CountDrops < 2)
		CountDrops = 2

	message_begin(MSG_PAS, SVC_TEMPENTITY, iVec1)
	write_byte(TE_SPRITETRAIL)
	engfunc(EngFunc_WriteCoord, vSrc[0])
	engfunc(EngFunc_WriteCoord, vSrc[1])
	engfunc(EngFunc_WriteCoord, vSrc[2])
	engfunc(EngFunc_WriteCoord, fVec2[0])
	engfunc(EngFunc_WriteCoord, fVec2[1])
	engfunc(EngFunc_WriteCoord, fVec2[2])
	write_short(watergun_sprite)
	write_byte(CountDrops)
	write_byte(0)
	write_byte(1)
	write_byte(60)
	write_byte(10)
	message_end()

	message_begin(MSG_PAS, SVC_TEMPENTITY, iVec1)
	write_byte(TE_BEAMPOINTS)
	engfunc(EngFunc_WriteCoord, fVec2[0])
	engfunc(EngFunc_WriteCoord, fVec2[1])
	engfunc(EngFunc_WriteCoord, fVec2[2])
	engfunc(EngFunc_WriteCoord, vSrc[0])
	engfunc(EngFunc_WriteCoord, vSrc[1])
	engfunc(EngFunc_WriteCoord, vSrc[2])
	write_short(watergun_sprite)
	write_byte(6)
	write_byte(200) 
	write_byte(1)
	write_byte(100)
	write_byte(0)
	write_byte(64); write_byte(64); write_byte(192);
	write_byte(192)
	write_byte(250) 
	message_end()
}

stock drop_weapons(id, dropwhat)
{
     static weapons[32], num, i, weaponid
     num = 0
     get_user_weapons(id, weapons, num)
     
     for (i = 0; i < num; i++)
     {
          weaponid = weapons[i]
          
          if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
          {
               static wname[32]
               get_weaponname(weaponid, wname, sizeof wname - 1)
               engclient_cmd(id, "drop", wname)
          }
     }
}

public CTask__BurningFlame( taskid )
{
	// Get player origin and flags
	static origin[3], flags
	get_user_origin(ID_FBURN, origin)
	flags = pev(ID_FBURN, pev_flags)
	
	// Madness mode - in water - burning stopped
	if ((flags & FL_INWATER) || g_burning_duration[ID_FBURN] < 1 || g_fRoundEnd || !is_user_alive(ID_FBURN))
	{
		// Smoke sprite
		message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
		write_byte(TE_SMOKE) // TE id
		write_coord(origin[0]) // x
		write_coord(origin[1]) // y
		write_coord(origin[2]-50) // z
		write_short(g_smokeSpr) // sprite
		write_byte(random_num(15, 20)) // scale
		write_byte(random_num(10, 20)) // framerate
		message_end()
		
		// Task not needed anymore
		remove_task(taskid)
		return
	}
	
	// Get player's health
	static health
	health = pev(ID_FBURN, pev_health)
	
	// Take damage from the fire
	if (health - FIRE_DAMAGE > 0)
		fm_set_user_health(ID_FBURN, health - FIRE_DAMAGE)
	
	// Flame sprite
	message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
	write_byte(TE_SPRITE) // TE id
	write_coord(origin[0]+random_num(-5, 5)) // x
	write_coord(origin[1]+random_num(-5, 5)) // y
	write_coord(origin[2]+random_num(-10, 10)) // z
	write_short(g_flameSpr) // sprite
	write_byte(random_num(5, 10)) // scale
	write_byte(200) // brightness
	message_end()

	
	g_burning_duration[ID_FBURN]--
}

Modele | Afiseaza codul
Click pentru a descarca modelele :P


Cvaruri :

Code: Select all

hero_hp 150 - Cat Hp sa dea la spawn
hero_ap 100 - Cat Ap sa dea la spawn
Este netestat...
P.S.: Netestat = Nu am avut timp să mă uit atent peste cod. Deci ceea ce am scris este posibil să fie greşit sau să aibă erori.

If i helped you and you wanna thank me, you can donate at this link : here
This will motivate me to help you in the future.
[If you want a private plugin send me a PM.(No complex plugins please, I am a student and I don't have the time to make those)]
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:

02 Feb 2014, 10:29

NicutaMM | Cstrike wrote:Poftim :
SMA HERO | Afiseaza codul
/* Plugin generated by AMXX-Studio */

#include <amxmodx> 
#include <amxmisc> 
#include <fakemeta_util> 
#include <cstrike> 
#include <hamsandwich>

#pragma tabsize 0

#define PLUGIN "Weapons"
#define VERSION "1.0"
#define AUTHOR "NicutaMM | Cstrike"

#define HERO ADMIN_LEVEL_H

#define IsPlayer(%0)    ( 1 <= %0 <= g_iMaxPlayers )
#define is_valid_player(%1) (1 <= %1 <= 32)

native set_user_ethereal(id, ethereal);
native give_weapon_watergun(id);
native give_weapon_harry(id);

new g_iMaxPlayers;
new g_iBlinkAcct;  

new g_szItems[][] =  
{ 
    "Ethreal",  
    "Water GUN", 
    "Blue Cart",
    "Harry Potter's Magic Wand"
} 

new g_iItemsPrices[] =  
{ 
    1000,
    8000,
    1200,
    1400,

} 

new bool: CartBlue[ 33 ];

new const vCartBlue[ 64 ] = "models/v_vipcartblue.mdl";
new const pCartBlue[ 64 ] = "models/p_vipcartblue.mdl";


new CvarHP, CvarAP;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	CvarHP = register_cvar("hero_hp", "150");
	CvarAP = register_cvar("hero_ap", "100");
	
		g_iBlinkAcct = get_user_msgid("BlinkAcct") 
     
	register_clcmd("say /shop", "cmdHero", 0); 
	
	register_event ( "CurWeapon", "CurrentWeapon", "be", "1=1" );
	
	RegisterHam( Ham_Spawn, "player", "HeroSpawnCMD", true);
	RegisterHam ( Ham_TakeDamage, "player", "Player_TakeDamage" );
	
	g_iMaxPlayers = get_maxplayers ( 	);
	// Add your code here...
}

public plugin_precache ( ) {

	precache_model( vCartBlue );
	precache_model( pCartBlue );
	
}

public HeroSpawnCMD ( id )
{
	if(is_valid_player(id) && is_user_alive(id) && get_user_flags(id) & HERO )
	{
		fm_set_user_health(id, get_pcvar_num( CvarHP ) );
		fm_set_user_armor(id, get_pcvar_num( CvarAP ) );
	}
	CartBlue[ id ] = false;
	
}

public CurrentWeapon ( id ) {
	
	new szWeapon = get_user_weapon ( id );
	if ( szWeapon == CSW_MP5NAVY && CartBlue[ id ] ) {
		
		set_pev ( id, pev_viewmodel2, vCartBlue );
		set_pev ( id, pev_weaponmodel2, pCartBlue );
	}
	
	return 1;
}

public cmdHero(id) 
{ 
    new Temp[101], money = cs_get_user_money(id); 
   
     
    formatex(Temp,100, "\yHero Menu:^n^nBani tai:\r $%d", money); 
    new menu = menu_create(Temp, "handler_HeroMenu") 
     
    new szItemName[64] 
    for(new i; i<sizeof(g_szItems) && i<sizeof(g_iItemsPrices); i++) 
    { 
        if( money < g_iItemsPrices )
        { 
            formatex(szItemName, charsmax(szItemName), "\d%s ($%d)", g_szItems[ i ], g_iItemsPrices[ i ]) 
         
        } 
        else { 
            formatex(szItemName, charsmax(szItemName), "%s (\r$%d\w)", g_szItems[ i ], g_iItemsPrices[ i ]) 
            
        } 
        menu_additem(menu, szItemName) 
    } 
     
    menu_setprop(menu, MPROP_NUMBER_COLOR, "\y") 
     
    menu_display(id, menu, 0); 
     
    return PLUGIN_HANDLED; 
} 

public handler_ShopMenu(id, menu, item) 
{ 
    if( item == MENU_EXIT ) 
    { 
        menu_destroy(menu); 
        return PLUGIN_HANDLED; 
    } 

    new money = cs_get_user_money(id); 
    new new_money = cs_get_user_money(id) - g_iItemsPrices[item]; 
   
    if( money < g_iItemsPrices[item] )  
    { 
        NotEnoughMoney( id ); 
        menu_display(id, menu); 
        return PLUGIN_HANDLED; 
    } 
     
    switch(item) 
    { 
        case 0:  
        { 
            if(get_user_flags(id) & HERO )
	    {
                set_user_ethereal(id, 1); 
                 
                client_print(id, print_center, "Ai cumparat (%s)", g_szItems[item]); 

                 
                cs_set_user_money(id, new_money); 
            }
            else
	    {
	    	client_print(id, print_center, "Nu ai acces la acest meniu!"); 
	    }
        } 
	case 1:  
        { 
            if(get_user_flags(id) & HERO )
	    {
                give_weapon_watergun(id);
                 
                client_print(id, print_center, "Ai cumparat (%s)", g_szItems[item]); 

                 
                cs_set_user_money(id, new_money); 
            }
            else
	    {
	    	client_print(id, print_center, "Nu ai acces la acest meniu!"); 
	    }
        } 
        case 2: 
        { 
            
            if(get_user_flags(id) & HERO )
	    {
           
		fm_strip_user_weapons(id);
		fm_give_item(id, "weapon_knife");
		fm_give_item(id, "weapon_deagle");
		fm_give_item(id, "weapon_mp5navy");
		cs_set_user_bpammo(id, CSW_DEAGLE, 70);
		cs_set_user_bpammo(id, CSW_MP5NAVY, 250 );
		CartBlue[ id ] = true;
			CurrentWeapon(id);
                 
                client_print(id, print_center, "Ai cumparat (%s)", g_szItems[item]); 
                 
                
                cs_set_user_money(id, new_money); 
            }
            else
	    {
	    	client_print(id, print_center, "Nu ai acces la acest meniu!"); 
	    }
        } 
        case 3: 
        { 
            
            if(get_user_flags(id) & HERO )
	    {
            
                give_weapon_harry(id);
                 
                client_print(id, print_center, "Ai cumparat (%s)", g_szItems[item]); 
                 
                
                cs_set_user_money(id, new_money); 
	    }
            else
	    {
	    	client_print(id, print_center, "Nu ai acces la acest meniu!"); 
	    }
	}
    } 

    menu_destroy(menu); 
    return PLUGIN_HANDLED; 
}  

public NotEnoughMoney( id ) 
{ 
    client_print(id, print_center, "#Cstrike_TitlesTXT_Not_Enough_Money"); 
     
      
    message_begin(MSG_ONE_UNRELIABLE, g_iBlinkAcct, .player=id); 
    { 
        write_byte(2); 
    } 
    message_end(); 
} 

public Player_TakeDamage ( iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits ) 
{
	if ( IsPlayer ( iAttacker ) ) {
		
		if( get_user_weapon( iAttacker ) == CSW_MP5NAVY && CartBlue[ iAttacker ] )
		{
			SetHamParamFloat( 4, fDamage * 3 )
			return HAM_HANDLED
		}
	}
	
	return HAM_IGNORED;
}

Ethreal | 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) {
	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);	
	
}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

Harry Potter's Magic Wand | Afiseaza codul
/* Plugin generated by AMXX-Studio */

#include < amxmodx >
#include < amxmisc >
#include < cstrike >
#include < hamsandwich >
#include < fakemeta >
#include < engine >
#include < message_const >
#include < ColorChat >

#define PLUGIN_NAME	"Harry Potter's Magic Wand"
#define PLUGIN_VERSION	"0.0.2"
#define PLUGIN_AUTHOR	"Hades Ownage & YONTU"

#define HARRY_WAND_RECOIL 	0.0			// Recoil
#define HARRY_WAND_SPEED 	0.35			// Click stanga
#define HARRY_WAND_SPEED2 	0.75			// Click dreapta
#define HARRY_WAND_FIRE	random_num( 3, 6 )	// Animatie cand trage cu click stanga
#define HARRY_WAND_FIRE2	random_num( 5, 10 )	// Animatie cand trage cu click dreapta

#define TE_BEAMENTPOINT	1
#define TE_EXPLOSION		3
#define TE_SPRITETRAIL		15
#define TE_BEAMCYLINDER		21

new const Tag[  ] = "[Harry Magic Wand]";

new HarryFireSound[  ] = "harry_wand/harry_shoot1.wav";
new HarryHitSound[  ] = "harry_wand/harry_hit.wav";
new HarryHitSound2[  ] = "harry_wand/harry_shoot2.wav";
new HarryModel[  ] = "models/harry_wand/v_harry_wand.mdl";

new HarryBeam, HarryExp, HarryExp2, DeathSprite;

new bool:g_HasHarryWand[ 33 ];

new Harry_Ammo[ 33 ];
new Float:HarryLastShotTime[ 33 ];

new HarryDamageCvar, HarryDamageCvar2, HarryAmmo, HarryKillMoney, HarryDistance;

public plugin_init(  ) {

	register_event( "CurWeapon", "CurrentWeapon", "be", "1=1" );
	
	register_forward( FM_CmdStart, "Harry_CmdStart" );
	
	RegisterHam( Ham_Spawn, "player", "Ham_SpawnCallback", 1 );
	
	HarryDamageCvar = register_cvar( "harry_damage", "100.0" );
	HarryDamageCvar2 = register_cvar( "harry_damage2", "150.0" );
	HarryAmmo = register_cvar( "harry_ammo", "300" );
	HarryKillMoney = register_cvar( "harry_money_reward", "5000" );
	HarryDistance = register_cvar( "harry_distance", "90909" );

	register_concmd( "amx_get_harry", "GiveHarry", ADMIN_RCON, "< nume > < ammo >" );
}

public plugin_natives ()
{
	register_native("give_weapon_harry", "native_give_herry_add", 1)
}
public native_give_herry_add(id)
{
	get_harry( id )
}

public plugin_precache(  ) {
	
	register_plugin( PLUGIN_NAME, 
			PLUGIN_VERSION, 
			PLUGIN_AUTHOR );

	precache_sound( HarryFireSound );
	precache_sound( HarryHitSound );
	precache_sound( HarryHitSound2 );

	precache_model( HarryModel );

	HarryBeam = precache_model( "sprites/harry_wand/harry_plasma_beam.spr" );
	HarryExp = precache_model( "sprites/harry_wand/harry_plasma_exp2.spr" );
	HarryExp2 = precache_model( "sprites/harry_wand/harry_plasma_exp3.spr" );
	DeathSprite = precache_model( "sprites/harry_wand/harry_skull.spr" );
}

public client_putinserver( id ) {
		
	g_HasHarryWand[ id ] = false;
	Harry_Ammo[ id ] = false;
}

public client_disconnect( id ) {
	
	g_HasHarryWand[ id ] = false;
	Harry_Ammo[ id ] = false;
}

public GiveHarry( id, level, cid ) {
	
	if( !cmd_access( id, level, cid, 3 ) ) 
		return PLUGIN_HANDLED;
	
	new szTtarget[ 32 ], szAmmoHarry[ 21 ];
	
	read_argv( 1, szTtarget, 31 );
	read_argv( 2, szAmmoHarry, 20 );

	new iPlayer = cmd_target( id, szTtarget, 8 );

	new szAdminName[ 32 ], szPlayerName[ 32 ];

	get_user_name( id, szAdminName, 31 );
	get_user_name( iPlayer, szPlayerName, 31 );

	if( !iPlayer )
		return PLUGIN_HANDLED;

	if( !is_user_alive( iPlayer ) ) {

		client_print( id, print_console, "Jucatorul %s nu este in viata !", szPlayerName );
		return 1;
	}

	if( g_HasHarryWand[ iPlayer ] ) {

		client_print( id, print_console, "Jucatorul %s are deja bagheta !", szPlayerName );
		return 1;
	}

	else {
	
		new AmmoForMagic = str_to_num( szAmmoHarry );

		ColorChat( 0, GREEN, "^x04%s^x01 Adminul^x03 %s i-a dat lui^x03 %s^x01 bagheta lui Harry cu^x03 %d ammo^x01 !", Tag, szAdminName, szPlayerName, szAmmoHarry );

		get_harry( iPlayer );
		Harry_Ammo[ iPlayer ] += AmmoForMagic;
	}

	return PLUGIN_CONTINUE;
}

public get_harry( id ) {

	if( is_user_alive( id ) ) {

		g_HasHarryWand[ id ] = true;
		engclient_cmd( id, "weapon_knife" );

		Harry_Ammo[ id ] = get_pcvar_num( HarryAmmo );
	}

	else {

		client_print( id, print_console, "Jucatorul nu este in viata! " );
		g_HasHarryWand[ id ] = false;

		return 1;
	}

	return 1;
}

public CurrentWeapon( id )
	if( get_user_weapon( id ) == CSW_KNIFE && g_HasHarryWand[ id ] )
		set_pev( id, pev_viewmodel2, HarryModel );

public Ham_SpawnCallback( id ) {
	
	if( !is_user_alive( id ) )
		return 1;
	
	g_HasHarryWand[ id ] = false;
	
	return 0;
}

public Harry_CmdStart( id, uc_handle, seed ) {
	
	if( is_user_alive( id ) && g_HasHarryWand[ 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_KNIFE && g_HasHarryWand[ id ] ) {

				if( Harry_Ammo[ id ] > 0  && flNextAttack <= 0.0 ) {

					if( get_gametime(  ) - HarryLastShotTime[ id ] > HARRY_WAND_SPEED ) {
						
						set_weapon_anim( id, HARRY_WAND_FIRE );
						emit_sound( id, CHAN_WEAPON, HarryFireSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
						
						Harry_Fire( id );

						if( Harry_Ammo[ id ] > 0 ) {
							
							set_hudmessage( 0, 127, 255, 0.01, 0.85, 0, 6.0, 1.0 );
							show_hudmessage( id, "Remaining Ammo: %d !", Harry_Ammo[ id ] );
						}
						
						else if( Harry_Ammo[ id ] <= 0 ) {
							
							set_hudmessage( 255, 0, 0, 0.01, 0.90, 0, 6.0, 1.0 );
							show_hudmessage( id, "No Ammo !" );
							
						}
						
						static Float:Punch_Angles[ 3 ];
						
						Punch_Angles[ 0]  = -5.0;
						Punch_Angles[ 1 ] = HARRY_WAND_RECOIL;
						Punch_Angles[ 2 ] = HARRY_WAND_RECOIL;
						
						set_pev( id, pev_punchangle, Punch_Angles );

						Harry_Ammo[ id ] -= 1;
						HarryLastShotTime[ id ] = get_gametime(  );
						
					}	
				}
				
				CurButton &= ~IN_ATTACK;
				set_uc( uc_handle, UC_Buttons, CurButton );
			}		
		}
		
		else if( CurButton & IN_ATTACK2 ) {

			if( get_user_weapon( id ) == CSW_KNIFE && g_HasHarryWand[ id ] ) {

				if( Harry_Ammo[ id ] >= 5  && flNextAttack <= 0.0 ) {

					if( get_gametime(  ) - HarryLastShotTime[ id ] > HARRY_WAND_SPEED2 ) {
						
						set_weapon_anim( id, HARRY_WAND_FIRE2 );
						emit_sound( id, CHAN_WEAPON, HarryFireSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
						
						Harry_Fire2( id );

						set_hudmessage( 0, 127, 255, 0.01, 0.85, 0, 6.0, 1.0 );
						show_hudmessage( id, "Remaining Ammo: %d !", Harry_Ammo[ id ] );
						
						static Float:Punch_Angles[ 3 ];
						
						Punch_Angles[ 0 ] = -5.0;
						Punch_Angles[ 1 ] = HARRY_WAND_RECOIL;
						Punch_Angles[ 2 ] = HARRY_WAND_RECOIL;
						
						set_pev( id, pev_punchangle, Punch_Angles );

						Harry_Ammo[ id ] -= 3;
						HarryLastShotTime[ id ] = get_gametime(  );
						
					}	
				}
				
				CurButton &= ~IN_ATTACK2;
				set_uc( uc_handle, UC_Buttons, CurButton );
			}
		}
	}
	
	else if( is_user_alive ( id ) && !g_HasHarryWand[ id ] )
		return PLUGIN_CONTINUE;

	return PLUGIN_CONTINUE;
}

public Harry_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( 1 );
	write_short( id | 0x1000 );
	write_coord( BeamOrigin[ 0 ] );	// Start X
	write_coord( BeamOrigin[ 1 ] );	// Start Y
	write_coord( BeamOrigin[ 2 ] );	// Start Z
	write_short( HarryBeam);		// Sprite
	write_byte( 1 );      		// Start frame				
	write_byte( 1 );     		// Frame rate					
	write_byte( 1 );			// Life
	write_byte( 40 );   		// Line width				
	write_byte( 0 );    		// Noise
	write_byte( 108 ); 		// Red
	write_byte( 236 );			// Green
	write_byte( 23 );			// 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( HarryExp );	// sprite
	write_byte( 10 );		// scale in 0.1's
	write_byte( 15 );		// framerate
	write_byte( 4 );		// flags
	message_end(  );
	
	get_user_aiming( id, Victim, Body, get_pcvar_num( HarryDistance ) );

	if( is_user_connected( Victim ) ) {

		new Float:Damage = float( get_damage_body( Body, get_pcvar_float( HarryDamageCvar ) ) );
		
		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( HarryDamageCvar ) >= 1 && is_user_alive( Victim ) && !fm_get_user_godmode( Victim ) && get_user_team( Victim ) != get_user_team( id ) ) {

			new iOrigin[ 3 ];
			get_user_origin( Victim, iOrigin, 0 );

			message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin ); 
			write_byte( 21 );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] + 60 );	// end axis + radius
			write_short( HarryExp );	// sprite
			write_byte( 0 );		// startfrate
			write_byte( 0 );		// framerate
			write_byte( 10 );		// life in 0.1 sec
			write_byte( 60 );		// width
			write_byte( 0 );		// amplitude
			write_byte( 0 );		// red
			write_byte( 200 );		// green
			write_byte( 200 );		// blue
			write_byte( 153 );		// brightness
			write_byte( 0 );		// speed
			message_end(  );
			
			message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
			write_byte( 15 );
			write_coord( iOrigin[ 0 ] ); 	// start position (X)
			write_coord( iOrigin[ 1 ] ); 	// start position (Y)
			write_coord( iOrigin[ 2 ] + 40 ); // start position (Z)
			write_coord( iOrigin[ 0 ] ); 	// end position (X)
			write_coord( iOrigin[ 1 ] );	// end position (Y)
			write_coord( iOrigin[ 2 ] );	// end position (Z)
			write_short( DeathSprite );	// sprite index
			write_byte( 50 );		// count
			write_byte( 20 );		// life in 0.1's
			write_byte( 2 );		// scale in 0.1's
			write_byte( 50 );		// velocity along vector in 10's
			write_byte( 10 );		// randomness of velocity in 10's
			message_end(  );
			
			make_knockback( Victim, VictimOrigin, 3 * get_pcvar_float( HarryDamageCvar ) );
			
			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_SHOCK );
			write_coord( 0 );
			write_coord( 0 );
			write_coord( 0 );
			message_end(  );
			
			FadeScreen( Victim, 4.0, 255, 122, 122, 100 );
			ShakeScreen( Victim, 3.0 );
		}

		else if( get_user_health( Victim ) - get_pcvar_float( HarryDamageCvar ) < 1 && is_user_alive( Victim ) && !fm_get_user_godmode( Victim ) && get_user_team( Victim ) != get_user_team( id ) ) {
			
			new iOrigin[ 3 ];
			get_user_origin( Victim, iOrigin, 0 );

			message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin ); 
			write_byte( 21 );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] + 60 );	// end axis + radius
			write_short( HarryExp );	// sprite
			write_byte( 0 );		// startfrate
			write_byte( 0 );		// framerate
			write_byte( 10 );		// life in 0.1 sec
			write_byte( 60 );		// width
			write_byte( 0 );		// amplitude
			write_byte( 0 );		// red
			write_byte( 200 );		// green
			write_byte( 200 );		// blue
			write_byte( 153 );		// brightness
			write_byte( 0 );		// speed
			message_end(  );
			
			message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
			write_byte( 15 );
			write_coord( iOrigin[ 0 ] ); 	// start position (X)
			write_coord( iOrigin[ 1 ] ); 	// start position (Y)
			write_coord( iOrigin[ 2 ] + 40 ); // start position (Z)
			write_coord( iOrigin[ 0 ] ); 	// end position (X)
			write_coord( iOrigin[ 1 ] );	// end position (Y)
			write_coord( iOrigin[ 2 ] );	// end position (Z)
			write_short( DeathSprite );	// sprite index
			write_byte( 50 );		// count
			write_byte( 20 );		// life in 0.1's
			write_byte( 2 );		// scale in 0.1's
			write_byte( 50 );		// velocity along vector in 10's
			write_byte( 10 );		// randomness of velocity in 10's
			message_end(  );
			
			make_knockback( Victim, VictimOrigin, 3 * get_pcvar_float( HarryDamageCvar ) );
			
			death_message( id, Victim, 1, "Magic Wand" );
		}
	}

	else {

		static ClassName[ 32 ];
		pev( Victim, pev_classname, ClassName, charsmax( ClassName ) );

		if( equal( ClassName, "func_breakable" ) )
			if( entity_get_float( Victim, EV_FL_health ) <= 80 )
				force_use( id, Victim );
	}
	
	emit_sound( id, CHAN_WEAPON, HarryHitSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
}

public Harry_Fire2( 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( 1 );
	write_short( id | 0x1000 );
	write_coord( BeamOrigin[ 0 ] );	// Start X
	write_coord( BeamOrigin[ 1 ] );	// Start Y
	write_coord( BeamOrigin[ 2 ] );	// Start Z
	write_short( HarryBeam );	// Sprite
	write_byte( 1 );      		// Start frame				
	write_byte( 1 );     		// Frame rate					
	write_byte( 1 );			// Life
	write_byte( 40 );   		// Line width				
	write_byte( 0 );    		// Noise
	write_byte( 150 ); 		// Red
	write_byte( 22 );			// Green
	write_byte( 235 );			// 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( HarryExp2 );
	write_byte( 10 );
	write_byte( 15 );
	write_byte( 4 );
	message_end(  );
	
	get_user_aiming( id, Victim, Body, get_pcvar_num( HarryDistance ) );

	if( is_user_alive( Victim ) ) {

		new Float:Damage = float( get_damage_body( Body, get_pcvar_float( HarryDamageCvar ) ) );

		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( HarryDamageCvar2 ) >= 1 && is_user_alive( Victim ) && !fm_get_user_godmode( Victim ) && get_user_team( Victim ) != get_user_team( id ) ) {
			
			new iOrigin[ 3 ];
			get_user_origin( Victim, iOrigin, 0 );

			message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin ); 
			write_byte( 21 );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] + 60 );	// end axis + radius
			write_short( HarryExp2 );	// sprite
			write_byte( 0 );		// startfrate
			write_byte( 0 );		// framerate
			write_byte( 10 );		// life in 0.1 sec
			write_byte( 60 );		// width
			write_byte( 0 );		// amplitude
			write_byte( 217 );		// red
			write_byte( 132 );		// green
			write_byte( 47 );		// blue
			write_byte( 153 );		// brightness
			write_byte( 0 );		// speed
			message_end(  );
			
			message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
			write_byte( 15 );
			write_coord( iOrigin[ 0 ] ); 	// start position (X)
			write_coord( iOrigin[ 1 ] ); 	// start position (Y)
			write_coord( iOrigin[ 2 ] + 40 ); // start position (Z)
			write_coord( iOrigin[ 0 ] ); 	// end position (X)
			write_coord( iOrigin[ 1 ] );	// end position (Y)
			write_coord( iOrigin[ 2 ] );	// end position (Z)
			write_short( DeathSprite );	// sprite index
			write_byte( 50 );		// count
			write_byte( 20 );		// life in 0.1's
			write_byte( 2 );		// scale in 0.1's
			write_byte( 50 );		// velocity along vector in 10's
			write_byte( 10 );		// randomness of velocity in 10's
			message_end(  );
			
			make_knockback( Victim, VictimOrigin, 3 * get_pcvar_float( HarryDamageCvar2 ) );
			
			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(  );
			
			FadeScreen( Victim, 4.0, 0, 255, 0, 100 );
			ShakeScreen( Victim, 3.0 );
		}

		else if( get_user_health( Victim ) - get_pcvar_float( HarryDamageCvar2 ) < 1 && is_user_alive( Victim ) && !fm_get_user_godmode( Victim ) && get_user_team( Victim ) != get_user_team( id ) ) {
			
			new iOrigin[ 3 ];
			get_user_origin( Victim, iOrigin, 0 );

			message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin ); 
			write_byte( 21 );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] );
			write_coord( iOrigin[ 0 ] );
			write_coord( iOrigin[ 1 ] );
			write_coord( iOrigin[ 2 ] + 60 );	// end axis + radius
			write_short( HarryExp2 );	// sprite
			write_byte( 0 );		// startfrate
			write_byte( 0 );		// framerate
			write_byte( 10 );		// life in 0.1 sec
			write_byte( 60 );		// width
			write_byte( 0 );		// amplitude
			write_byte( 217 );		// red
			write_byte( 132 );		// green
			write_byte( 47 );		// blue
			write_byte( 153 );		// brightness
			write_byte( 0 );		// speed
			message_end(  );
			
			message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
			write_byte( 15 );
			write_coord( iOrigin[ 0 ] ); 	// start position (X)
			write_coord( iOrigin[ 1 ] ); 	// start position (Y)
			write_coord( iOrigin[ 2 ] + 40 ); // start position (Z)
			write_coord( iOrigin[ 0 ] ); 	// end position (X)
			write_coord( iOrigin[ 1 ] );	// end position (Y)
			write_coord( iOrigin[ 2 ] );	// end position (Z)
			write_short( DeathSprite );	// sprite index
			write_byte( 50 );		// count
			write_byte( 20 );		// life in 0.1's
			write_byte( 2 );		// scale in 0.1's
			write_byte( 50 );		// velocity along vector in 10's
			write_byte( 10 );		// randomness of velocity in 10's
			message_end(  );
			
			make_knockback( Victim, VictimOrigin, 3 * get_pcvar_float( HarryDamageCvar2 ) );
			
			death_message( id, Victim, 1, "Double Magic Wand" );
		}
	}

	else {

		static ClassName[ 32 ];
		pev( Victim, pev_classname, ClassName, charsmax( ClassName ) );

		if( equal( ClassName, "func_breakable" ) )
			if( entity_get_float( Victim, EV_FL_health ) <= 80 )
				force_use( id, Victim );
	}

	emit_sound( id, CHAN_WEAPON, HarryHitSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
}

public make_knockback( Victim, Float:origin[ 3 ], Float:maxspeed ) {

	new Float:fVelocity[ 3 ];
	
	kickback( Victim, origin, maxspeed, fVelocity );
	entity_set_vector( Victim, EV_VEC_velocity, fVelocity );
	
	return( 1 );
}

stock ShakeScreen( id, const Float:iSeconds ) {

	message_begin( MSG_ONE, get_user_msgid( "ScreenShake" ), { 0, 0, 0 }, id );
	write_short( floatround( 4096.0 * iSeconds, floatround_round ) );
	write_short( floatround( 4096.0 * iSeconds, floatround_round ) );
	write_short( 1<<13 );
	message_end(  );
}

stock FadeScreen( id, const Float:iSeconds, const iRed, const iGreen, const iBlue, const iAlpha ) {
      
	message_begin( MSG_ONE, get_user_msgid( "ScreenFade" ), _, id );
	write_short( floatround( 4096.0 * iSeconds, floatround_round ) );
	write_short( floatround( 4096.0 * iSeconds, floatround_round ) );
	write_short( 0x0000 );
	write_byte( iRed );
	write_byte( iGreen );
	write_byte( iBlue );
	write_byte( iAlpha );
	message_end(  );
}		

stock kickback( ent, Float:fOrigin[ 3 ], Float:fSpeed, Float:fVelocity[ 3 ] ) {

	new Float:fEntOrigin[ 3 ];
	entity_get_vector( ent, EV_VEC_origin, fEntOrigin );
	
	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 from "m79"
stock death_message( Killer, Victim, ScoreBoard, const Weapon[  ] ) {
	
	set_msg_block( get_user_msgid( "DeathMsg" ), BLOCK_SET );

	ExecuteHamB( Ham_Killed, Victim, Killer, 2 );

	set_msg_block( get_user_msgid( "DeathMsg" ), BLOCK_NOT );

	make_deathmsg( Killer, Victim, 0, Weapon );
	cs_set_user_money( Killer, cs_get_user_money( Killer ) + get_pcvar_num( HarryKillMoney ) );
	
	if( ScoreBoard ) {

		message_begin( MSG_BROADCAST, get_user_msgid( "ScoreInfo" ) );
		write_byte( Killer );
		write_short( pev( Killer, pev_frags ) );
		write_short( cs_get_user_deaths( Killer ) );
		write_short( 0 );
		write_short( get_user_team( Killer ) );
		message_end(  );
		
		message_begin( MSG_BROADCAST, get_user_msgid( "ScoreInfo" ) );
		write_byte( Victim );
		write_short( pev( Victim, pev_frags ) );
		write_short( cs_get_user_deaths( Victim ) );
		write_short( 0 );
		write_short( get_user_team( Victim ) );
		message_end(  );
	}
}

stock set_weapon_anim( id, anim ) {

	set_pev( id, pev_weaponanim, anim );

	if( is_user_alive( 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:fDamage ) {

	switch( body ) {

		case HIT_HEAD: fDamage *= 4.0;

		case HIT_STOMACH: fDamage *= 1.1;

		case HIT_CHEST: fDamage *= 1.5;

		case HIT_LEFTARM: fDamage *= 0.77;

		case HIT_RIGHTARM: fDamage *= 0.77;

		case HIT_LEFTLEG: fDamage *= 0.75;

		case HIT_RIGHTLEG: fDamage *= 0.75;

		default: fDamage *= 1.0;
	}
	
	return floatround( fDamage );
}

// stock from "fakemeta_util"
stock fm_get_user_godmode( index ) {

	new Float:val;
	pev( index, pev_takedamage, val );

	return ( val == DAMAGE_NO );
}

WaterGUN | Afiseaza codul
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <xs>

#define PLUGIN "Furien Water GUN"
#define VERSION "1.1"
#define AUTHOR "Tr3fla & Edit By Blue"

new normalTrace[33], lastTrace[33], cvEnabled, weapon2, dummy;

#define ENG_NULLENT		-1
#define EV_INT_WEAPONKEY	EV_INT_impulse
#define watergun_WEAPONKEY 893
#define MAX_PLAYERS  			  32
#define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)

#define TASK_FBURN				100
#define ID_FBURN					( taskid - TASK_FBURN )

#define MAX_CLIENTS				32

new bool:g_fRoundEnd

#define FIRE_DURATION		6
#define FIRE_DAMAGE		25

const USE_STOPPED = 0
const OFFSET_ACTIVE_ITEM = 373
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX = 5
const OFFSET_LINUX_WEAPONS = 4
const m_fInReload =		54
const m_flTimeWeaponIdle = 	48

#define WEAP_LINUX_XTRA_OFF		4
#define m_fKnown					44
#define m_flNextPrimaryAttack 		46
#define m_iClip					51
#define PLAYER_LINUX_XTRA_OFF	5
#define m_flNextAttack				83

#define watergun_RELOAD_TIME 	3.5
#define watergun_RELOAD		1
#define watergun_DRAW		2
#define watergun_SHOOT1		3
#define watergun_SHOOT2		4

new g_flameSpr
new g_smokeSpr

new g_burning_duration[ MAX_CLIENTS + 1 ]

#define write_coord_f(%1)	engfunc(EngFunc_WriteCoord,%1)

new const Fire_Sounds[][] = { "weapons/waterp.wav" }

new watergun_V_MODEL[64] = "models/Water-GUN/v_waterg.mdl"
new watergun_P_MODEL[64] = "models/Water-GUN/p_waterg.mdl"
new watergun_W_MODEL[64] = "models/Water-GUN/w_waterg.mdl"

//new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }

new cvar_dmg_watergun, cvar_recoil_watergun, cvar_clip_watergun, cvar_spd_watergun, cvar_watergun_ammo
new g_MaxPlayers, g_orig_event_watergun, g_IsInPrimaryAttack
new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
new g_has_watergun[33], g_clip_ammo[33], g_watergun_TmpClip[33], oldweap[33]
new watergun_sprite

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)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
			"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
			"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
			"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
			"weapon_ak47", "weapon_knife", "weapon_p90" }


public plugin_init()
{
	register_plugin( PLUGIN, VERSION, AUTHOR )
	
	
	register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
	register_event("CurWeapon","CurrentWeapon","be","1=1")
	RegisterHam(Ham_Item_AddToPlayer, "weapon_mp5navy", "fw_watergun_AddToPlayer")
	RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
	for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
	if (WEAPONENTNAMES[0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES, "fw_Item_Deploy_Post", 1)
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mp5navy", "fw_watergun_PrimaryAttack")
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mp5navy", "fw_watergun_PrimaryAttack_Post", 1)
	RegisterHam(Ham_Item_PostFrame, "weapon_mp5navy", "watergun_ItemPostFrame")
	RegisterHam(Ham_Weapon_Reload, "weapon_mp5navy", "watergun_Reload")
	RegisterHam(Ham_Weapon_Reload, "weapon_mp5navy", "watergun_Reload_Post", 1)
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	RegisterHam( Ham_Spawn, "player", "PlayerSpawn_Post", 1 );
	register_forward(FM_SetModel, "fw_SetModel")
	register_event( "DeathMsg", "EV_DeathMsg", "a" );
	register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post_fw", 1)
	register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
	
	//RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
	//RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)

	cvar_dmg_watergun = register_cvar("zp_watergun_dmg", "70.0")
	cvar_recoil_watergun = register_cvar("zp_watergun_recoil", "1.01")
	cvar_clip_watergun = register_cvar("zp_watergun_clip", "50")
	cvar_spd_watergun = register_cvar("zp_watergun_spd", "1.02")
	cvar_watergun_ammo = register_cvar("zp_watergun_ammo", "200")
	
}

public plugin_precache()
{
	precache_model(watergun_V_MODEL)
	precache_model(watergun_P_MODEL)
	precache_model(watergun_W_MODEL)
	for(new i = 0; i < sizeof Fire_Sounds; i++)
	precache_sound(Fire_Sounds)	
	m_iBlood[0] = precache_model("sprites/blood.spr")
	m_iBlood[1] = precache_model("sprites/bloodspray.spr")
	watergun_sprite = precache_model("sprites/watergun.spr")

}

public client_connect(id)
{
	normalTrace[id] = 0;
	g_has_watergun[id] = false

}

public client_disconnect(id)
{
	normalTrace[id] = 0;
	g_has_watergun[id] = false
	remove_task(id + TASK_FBURN )
}

// player spawns, and some other such things
public event_resethud(id)
{
	lastTrace[id] = 0;
}

// block forced resethud call
public cmd_fullupdate(id)
{
	return PLUGIN_HANDLED;
}

// traceline hook, meat and bones of the entire plugin
public fw_traceline(Float:vecStart[3],Float:vecEnd[3],ignoreM,id,pentru) // pentToSkip == id, for clarity
{
	if(!is_user_connected(id))
		return FMRES_IGNORED;
	
	// grab normal trace
	if(!normalTrace[id])
	{
		normalTrace[id] = pentru;
		return FMRES_IGNORED;
	}
	
	// ignore normal trace
	else if(pentru == normalTrace[id])
		return FMRES_IGNORED;
	
	// no functionality
	if(!get_pcvar_num(cvEnabled))
		return FMRES_IGNORED;
	
	// not a player entity, or player is dead
	if(!is_user_alive(id))
		return FMRES_IGNORED;
	
	// not shooting anything
	if(!(pev(id,pev_button) & IN_ATTACK))
		return FMRES_IGNORED;
	
	weapon2 = get_user_weapon(id,dummy,dummy);
	
	// using a shotgun, expect multiple tracelines
	if(weapon2 == CSW_M3 || weapon2 == CSW_XM1014)
		return FMRES_IGNORED;
	
	// this is a second traceline, for shooting through walls
	if(pentru == lastTrace[id])
	{
		// values sure to throw off any traceline
		set_tr(TR_vecEndPos,Float:{4096.0,4096.0,4096.0});
		set_tr(TR_AllSolid,1);
		set_tr(TR_pHit,0);
		set_tr(TR_iHitgroup,0);
		set_tr(TR_flFraction,1.0);
		
		return FMRES_SUPERCEDE;
	}
	
	// remeber traceline index for next time
	lastTrace[id] = pentru;
	
	return FMRES_IGNORED;
}

// finished client calculations, reset our traceline index
public fw_playerpostthink(id)
{
	lastTrace[id] = 0;
}




public plugin_natives ()
{
	register_native("give_weapon_watergun", "native_give_weapon_add", 1)
}
public native_give_weapon_add(id)
{
	give_watergun(id)
}

public fwPrecacheEvent_Post(type, const name[])
{
	if (equal("events/mp5n.sc", name))
	{
		g_orig_event_watergun = get_orig_retval()
		return FMRES_HANDLED
	}
	return FMRES_IGNORED
}

public fw_SetModel(entity, model[])
{
	if(!is_valid_ent(entity))
		return FMRES_IGNORED
	
	static szClassName[33]
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
		
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED
	
	static iOwner
	
	iOwner = entity_get_edict(entity, EV_ENT_owner)
	
	if(equal(model, "models/w_mp5.mdl"))
	{
		static iStoredAugID
		
		iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_mp5navy", entity)
	
		if(!is_valid_ent(iStoredAugID))
			return FMRES_IGNORED
	
		if(g_has_watergun[iOwner])
		{
			entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, watergun_WEAPONKEY)
			
			g_has_watergun[iOwner] = false
			
			entity_set_model(entity, watergun_W_MODEL)
			
			return FMRES_SUPERCEDE
		}
	}
	return FMRES_IGNORED
}

public EV_DeathMsg( )
{
	static pevVictim;
	pevVictim = read_data( 2 )
	
	if( !is_user_connected( pevVictim ) )
		return
		
	remove_task( pevVictim + TASK_FBURN )
}

public PlayerSpawn_Post( Player )
{
	if( !is_user_alive( Player ) )
		return;
		
	g_burning_duration[ Player ] = 0
}

public give_watergun(id)
{
	drop_weapons(id, 1)
	new iWep2 = give_item(id,"weapon_mp5navy")
	if( iWep2 > 0 )
	{
		cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_watergun))
		cs_set_user_bpammo (id, CSW_MP5NAVY, get_pcvar_num(cvar_watergun_ammo))	
		UTIL_PlayWeaponAnimation(id, watergun_DRAW)
		set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
	}
	g_has_watergun[id] = true
}

public fw_watergun_AddToPlayer(watergun, id)
{
	if(!is_valid_ent(watergun) || !is_user_connected(id))
		return HAM_IGNORED
	
	if(entity_get_int(watergun, EV_INT_WEAPONKEY) == watergun_WEAPONKEY)
	{
		g_has_watergun[id] = true
		
		entity_set_int(watergun, EV_INT_WEAPONKEY, 0)
		
		return HAM_HANDLED
	}
	return HAM_IGNORED
}

public fw_UseStationary_Post(entity, caller, activator, use_type)
{
	if (use_type == USE_STOPPED && is_user_connected(caller))
		replace_weapon_models(caller, get_user_weapon(caller))
}

public fw_Item_Deploy_Post(weapon_ent)
{
	static owner
	owner = fm_cs_get_weapon_ent_owner(weapon_ent)
	
	static weaponid
	weaponid = cs_get_weapon_id(weapon_ent)
	
	replace_weapon_models(owner, weaponid)
}

public CurrentWeapon(id)
{
	
     replace_weapon_models(id, read_data(2))

     if(read_data(2) != CSW_MP5NAVY || !g_has_watergun[id])
          return
     
     static Float:iSpeed
     if(g_has_watergun[id])
          iSpeed = get_pcvar_float(cvar_spd_watergun)
     
     static weapon[32],Ent
     get_weaponname(read_data(2),weapon,31)
     Ent = find_ent_by_owner(-1,weapon,id)
     if(Ent)
     {
          static Float:Delay
          Delay = get_pdata_float( Ent, 46, 4) * iSpeed
          if (Delay > 0.0)
          {
               set_pdata_float(Ent, 46, Delay, 4)
          }
     }
}

replace_weapon_models(id, weaponid)
{
	
	
	
	switch (weaponid)
	{
		case CSW_MP5NAVY:
		{
			
			if(g_has_watergun[id])
			{
				set_pev(id, pev_viewmodel2, watergun_V_MODEL)
				set_pev(id, pev_weaponmodel2, watergun_P_MODEL)
				if(oldweap[id] != CSW_MP5NAVY) 
				{
					UTIL_PlayWeaponAnimation(id, watergun_DRAW)
					set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
				}
			}
		}
	}
	oldweap[id] = weaponid
}

public fw_UpdateClientData_Post_fw(Player, SendWeapons, CD_Handle)
{
	if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_MP5NAVY || !g_has_watergun[Player]))
		return FMRES_IGNORED
	
	set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
	return FMRES_HANDLED
}

public fw_watergun_PrimaryAttack(Weapon)
{
	new Player = get_pdata_cbase(Weapon, 41, 4)
	
	if (!g_has_watergun[Player])
		return
	
	g_IsInPrimaryAttack = 1
	pev(Player,pev_punchangle,cl_pushangle[Player])
	
	g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
}

public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
	if ((eventid != g_orig_event_watergun) || !g_IsInPrimaryAttack)
		return FMRES_IGNORED
	if (!(1 <= invoker <= g_MaxPlayers))
    return FMRES_IGNORED

	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
	return FMRES_SUPERCEDE
}

public fw_watergun_PrimaryAttack_Post(Weapon)
{
	g_IsInPrimaryAttack = 0
	new Player = get_pdata_cbase(Weapon, 41, 4)
	
	new szClip, szAmmo
	get_user_weapon(Player, szClip, szAmmo)
	
	if(!is_user_alive(Player))
		return

	if(g_has_watergun[Player])
	{
		if (!g_clip_ammo[Player])
			return

		new Float:push[3]
		pev(Player,pev_punchangle,push)
		xs_vec_sub(push,cl_pushangle[Player],push)
		
		xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_watergun),push)
		xs_vec_add(push,cl_pushangle[Player],push)
		set_pev(Player,pev_punchangle,push)
		
		emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		UTIL_PlayWeaponAnimation(Player, random_num(watergun_SHOOT1, watergun_SHOOT2))

		static Float:plrViewAngles[3], Float:VecEnd[3], Float:VecDir[3], Float:PlrOrigin[3]
		pev(Player, pev_v_angle, plrViewAngles)

		static Float:VecSrc[3], Float:VecDst[3]
	
		//VecSrc = pev->origin + pev->view_ofs
		pev(Player, pev_origin, PlrOrigin)
		pev(Player, pev_view_ofs, VecSrc)
		xs_vec_add(VecSrc, PlrOrigin, VecSrc)

		//VecDst = VecDir * 8192.0
		angle_vector(plrViewAngles, ANGLEVECTOR_FORWARD, VecDir);
		xs_vec_mul_scalar(VecDir, 8192.0, VecDst);
		xs_vec_add(VecDst, VecSrc, VecDst);
	
		new hTrace = create_tr2()
		engfunc(EngFunc_TraceLine, VecSrc, VecDst, 0, Player, hTrace)
		get_tr2(hTrace, TR_vecEndPos, VecEnd);

		create_tracer_water(Player, VecSrc, VecEnd)	
	}
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
	if(!is_user_alive(attacker))
		return;

	if (victim != attacker && is_user_connected(attacker))
	{
		if(get_user_weapon(attacker) == CSW_MP5NAVY)
		{
			if(g_has_watergun[attacker])
			{
				SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_watergun))

				if( !task_exists( victim + TASK_FBURN ) )
				{
					g_burning_duration[ victim ] += FIRE_DURATION * 5
				
					set_task( 0.2, "CTask__BurningFlame", victim + TASK_FBURN, _, _, "b" )
				}
			}
		}
	}
}

public message_DeathMsg(msg_id, msg_dest, id)
{
	static szTruncatedWeapon[33], iAttacker, iVictim
	
	get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
	
	iAttacker = get_msg_arg_int(1)
	iVictim = get_msg_arg_int(2)
	
	if(!is_user_connected(iAttacker) || iAttacker == iVictim)
		return PLUGIN_CONTINUE
	
	if(equal(szTruncatedWeapon, "mp5navy") && get_user_weapon(iAttacker) == CSW_MP5NAVY)
	{
		if(g_has_watergun[iAttacker])
			set_msg_arg_string(4, "mp5navy")
	}
	return PLUGIN_CONTINUE
}

stock fm_cs_get_current_weapon_ent(id)
{
	return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
	return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
}

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
	set_pev(Player, pev_weaponanim, Sequence)
	
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
	write_byte(Sequence)
	write_byte(pev(Player, pev_body))
	message_end()
}

public watergun_ItemPostFrame(weapon_entity) 
{
     new id = pev(weapon_entity, pev_owner)
     if (!is_user_connected(id))
          return HAM_IGNORED

     if (!g_has_watergun[id])
          return HAM_IGNORED

     static iClipExtra
     
     iClipExtra = get_pcvar_num(cvar_clip_watergun)
     new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)

     new iBpAmmo = cs_get_user_bpammo(id, CSW_MP5NAVY);
     new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

     new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF) 

     if( fInReload && flNextAttack <= 0.0 )
     {
	     new j = min(iClipExtra - iClip, iBpAmmo)
	
	     set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
	     cs_set_user_bpammo(id, CSW_MP5NAVY, iBpAmmo-j)
		
	     set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
	     fInReload = 0
     }
     return HAM_IGNORED
}

public watergun_Reload(weapon_entity) 
{
     new id = pev(weapon_entity, pev_owner)
     if (!is_user_connected(id))
          return HAM_IGNORED

     if (!g_has_watergun[id])
          return HAM_IGNORED

     static iClipExtra

     if(g_has_watergun[id])
          iClipExtra = get_pcvar_num(cvar_clip_watergun)

     g_watergun_TmpClip[id] = -1

     new iBpAmmo = cs_get_user_bpammo(id, CSW_MP5NAVY)
     new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

     if (iBpAmmo <= 0)
          return HAM_SUPERCEDE

     if (iClip >= iClipExtra)
          return HAM_SUPERCEDE

     g_watergun_TmpClip[id] = iClip

     return HAM_IGNORED
}

public watergun_Reload_Post(weapon_entity) 
{
	new id = pev(weapon_entity, pev_owner)
	if (!is_user_connected(id))
		return HAM_IGNORED

	if (!g_has_watergun[id])
		return HAM_IGNORED

	if (g_watergun_TmpClip[id] == -1)
		return HAM_IGNORED

	set_pdata_int(weapon_entity, m_iClip, g_watergun_TmpClip[id], WEAP_LINUX_XTRA_OFF)

	set_pdata_float(weapon_entity, m_flTimeWeaponIdle, watergun_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)

	set_pdata_float(id, m_flNextAttack, watergun_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)

	set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)

	UTIL_PlayWeaponAnimation(id, watergun_RELOAD)

	return HAM_IGNORED
}

stock create_tracer_water(id, Float:fVec1[3], Float:fVec2[3])
{
	static iVec1[3]
	FVecIVec(fVec1, iVec1)

	static Float:origin[3], Float:vSrc[3], Float:angles[3], Float:v_forward[3], Float:v_right[3], Float:v_up[3], Float:gun_position[3], Float:player_origin[3], Float:player_view_offset[3]
	pev(id, pev_v_angle, angles)
	engfunc(EngFunc_MakeVectors, angles)
	global_get(glb_v_forward, v_forward)
	global_get(glb_v_right, v_right)
	global_get(glb_v_up, v_up)

	//m_pPlayer->GetGunPosition( ) = pev->origin + pev->view_ofs
	pev(id, pev_origin, player_origin)
	pev(id, pev_view_ofs, player_view_offset)
	xs_vec_add(player_origin, player_view_offset, gun_position)

	xs_vec_mul_scalar(v_forward, 24.0, v_forward)
	xs_vec_mul_scalar(v_right, 3.0, v_right)

	if ((pev(id, pev_flags) & FL_DUCKING) == FL_DUCKING)
		xs_vec_mul_scalar(v_up, 6.0, v_up)
	else
		xs_vec_mul_scalar(v_up, -2.0, v_up)

	xs_vec_add(gun_position, v_forward, origin)
	xs_vec_add(origin, v_right, origin)
	xs_vec_add(origin, v_up, origin)

	vSrc[0] = origin[0]
	vSrc[1] = origin[1]
	vSrc[2] = origin[2]

	new Float:dist = get_distance_f(vSrc, fVec2)
	new CountDrops = floatround(dist / 50.0)
	
	if (CountDrops > 20)
		CountDrops = 20
	
	if (CountDrops < 2)
		CountDrops = 2

	message_begin(MSG_PAS, SVC_TEMPENTITY, iVec1)
	write_byte(TE_SPRITETRAIL)
	engfunc(EngFunc_WriteCoord, vSrc[0])
	engfunc(EngFunc_WriteCoord, vSrc[1])
	engfunc(EngFunc_WriteCoord, vSrc[2])
	engfunc(EngFunc_WriteCoord, fVec2[0])
	engfunc(EngFunc_WriteCoord, fVec2[1])
	engfunc(EngFunc_WriteCoord, fVec2[2])
	write_short(watergun_sprite)
	write_byte(CountDrops)
	write_byte(0)
	write_byte(1)
	write_byte(60)
	write_byte(10)
	message_end()

	message_begin(MSG_PAS, SVC_TEMPENTITY, iVec1)
	write_byte(TE_BEAMPOINTS)
	engfunc(EngFunc_WriteCoord, fVec2[0])
	engfunc(EngFunc_WriteCoord, fVec2[1])
	engfunc(EngFunc_WriteCoord, fVec2[2])
	engfunc(EngFunc_WriteCoord, vSrc[0])
	engfunc(EngFunc_WriteCoord, vSrc[1])
	engfunc(EngFunc_WriteCoord, vSrc[2])
	write_short(watergun_sprite)
	write_byte(6)
	write_byte(200) 
	write_byte(1)
	write_byte(100)
	write_byte(0)
	write_byte(64); write_byte(64); write_byte(192);
	write_byte(192)
	write_byte(250) 
	message_end()
}

stock drop_weapons(id, dropwhat)
{
     static weapons[32], num, i, weaponid
     num = 0
     get_user_weapons(id, weapons, num)
     
     for (i = 0; i < num; i++)
     {
          weaponid = weapons[i]
          
          if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
          {
               static wname[32]
               get_weaponname(weaponid, wname, sizeof wname - 1)
               engclient_cmd(id, "drop", wname)
          }
     }
}

public CTask__BurningFlame( taskid )
{
	// Get player origin and flags
	static origin[3], flags
	get_user_origin(ID_FBURN, origin)
	flags = pev(ID_FBURN, pev_flags)
	
	// Madness mode - in water - burning stopped
	if ((flags & FL_INWATER) || g_burning_duration[ID_FBURN] < 1 || g_fRoundEnd || !is_user_alive(ID_FBURN))
	{
		// Smoke sprite
		message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
		write_byte(TE_SMOKE) // TE id
		write_coord(origin[0]) // x
		write_coord(origin[1]) // y
		write_coord(origin[2]-50) // z
		write_short(g_smokeSpr) // sprite
		write_byte(random_num(15, 20)) // scale
		write_byte(random_num(10, 20)) // framerate
		message_end()
		
		// Task not needed anymore
		remove_task(taskid)
		return
	}
	
	// Get player's health
	static health
	health = pev(ID_FBURN, pev_health)
	
	// Take damage from the fire
	if (health - FIRE_DAMAGE > 0)
		fm_set_user_health(ID_FBURN, health - FIRE_DAMAGE)
	
	// Flame sprite
	message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
	write_byte(TE_SPRITE) // TE id
	write_coord(origin[0]+random_num(-5, 5)) // x
	write_coord(origin[1]+random_num(-5, 5)) // y
	write_coord(origin[2]+random_num(-10, 10)) // z
	write_short(g_flameSpr) // sprite
	write_byte(random_num(5, 10)) // scale
	write_byte(200) // brightness
	message_end()

	
	g_burning_duration[ID_FBURN]--
}

Modele | Afiseaza codul
Click pentru a descarca modelele :P


Cvaruri :

Code: Select all

hero_hp 150 - Cat Hp sa dea la spawn
hero_ap 100 - Cat Ap sa dea la spawn
Este netestat...
Trebuie sa compilez si armele? Eu am cerut un shop in care sa fie ethereal, cartblue, wather gun, si harry magic wand. Iar acest shop sa poata fi accesat de cei cu flagul x.
User avatar
DaNNe.
Fost moderator
Fost moderator
Posts: 2811
Joined: 08 Nov 2013, 20:43
Detinator Steam: Da
CS Status: Activitate scăzută
SteamID: /id/FurienMaster
Reputatie: Nick anterior: DnD. Gold, Emrys
0.5/3
Fost moderator ajutator
Fost Membru Club eXtreamCS (doua luni)
Has thanked: 244 times
Been thanked: 129 times
Contact:

02 Feb 2014, 10:32

Trebuie sa instalezi toate pluginele de mai sus pentru ca pluginul sa functioneze !
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 35 guests