AWP freezing

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
USA_CA
Извън линия
Foreigner
Foreigner
Мнения: 106
Регистриран на: 19 Юли 2020, 18:02

AWP freezing

Мнение от USA_CA » 31 Авг 2020, 10:57

Hi
I have an interesting plugin, awp, which has 2 shooting modes, switched with the "E" key (critical shooting and freeze)

1) but when I kill by freezing the player remains to pack, freezing goes 4 seconds, how to do that after 4 seconds the player lay down as in a normal game?

2) sometimes the awp skin itself disappears and there is a normal skin

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <fun>
#include <engine>
#include <hamsandwich>
#include <center_msg_fix>

#define 	weapon_awp 			18
#define 	IMPULSE 			8678
#define 	ACCESS_FLAG 		ADMIN_LEVEL_H

#define m_pActiveItem 373

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90);
const OFFSET_LINUX = 5;
const MsgId_ScreenFade = 98;

new AWP_V_MODEL[] =	{	"models/asimov/v_awp.mdl"	};
new AWP_P_MODEL[] =	{	"models/asimov/p_awp.mdl"	};
new AWP_W_MODEL[] =	{	"models/asimov/w_awp.mdl"	};

new AsimovSwitch[33];
new ButtonTimeReload[33];

new bool:IsUserHaveAwp[33];

public plugin_init()
{
	register_plugin("AwpAsimov", "0.6b", "@LLaPb@");
	
	register_clcmd("Asimov", "GetAsimov");
	register_clcmd("say /azimov", "GetAsimov");
	register_clcmd("drop","cmdDrop");
	
	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled");
	RegisterHam(Ham_TraceAttack, "player", "Ham_TraceAttack_Player", false);
	RegisterHam(Ham_Item_Deploy, "weapon_awp", "HamHook_Item_Deploy", true);
	register_forward(FM_SetModel, "Fakemeta_SetModel");
	register_touch("weaponbox", "player", "OnWeaponboxTouch");
	register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
}

public client_putinserver(id)
{
	IsUserHaveAwp[id] = false;
	AsimovSwitch[id] = 1;
	ButtonTimeReload[id] = 0;
}

public plugin_precache()
{
	precache_model(AWP_V_MODEL);
	precache_model(AWP_P_MODEL);
	precache_model(AWP_W_MODEL);
}

public event_round_start()
{
	for (new id; id <= 32; id++) IsUserHaveAwp[id] = false;
}

public cmdDrop(id) 
{
	if(IsUserHaveAwp[id]) 
	{
		new clip,ammo;
		new weapon = get_user_weapon(id,clip,ammo);
		if(weapon == CSW_AWP) 
		{
			IsUserHaveAwp[id] = false;
			return PLUGIN_HANDLED
		}
	}
	return PLUGIN_CONTINUE
}

public GetAsimov(id)
{
	if(get_user_flags(id) & ACCESS_FLAG)
	{
		drop_weapons(id, 1);
		IsUserHaveAwp[id] = true;
		give_item_ex2(id, "weapon_awp", 30, true, IMPULSE);
	}else client_print(id, print_center, "You don't have access to this weapon!");
}

public fw_PlayerKilled(iVictim, iAttacker, shouldgib) IsUserHaveAwp[iVictim] = false;

public Ham_TraceAttack_Player(iVictim, iAttacker, Float:fDamage, Float:fDeriction[3], iTraceHandle, iBitDamage)
{
	if(!is_user_connected(iVictim) || !is_user_connected(iAttacker))
		return HAM_IGNORED;
		
	new iEntity = get_pdata_cbase(iAttacker, m_pActiveItem, OFFSET_LINUX);
	
	if(!pev_valid(iEntity))
		return HAM_IGNORED;
	
	new Impulse = pev(iEntity, pev_impulse);
	if(Impulse != IMPULSE)
		return HAM_IGNORED;
	
	if(cs_get_user_team(iVictim) != cs_get_user_team(iAttacker))
	{
		switch(AsimovSwitch[iAttacker])
		{
			case 1:
			{
				if(get_tr2(iTraceHandle, TR_iHitgroup) == HIT_HEAD)
				{
					new Float:Damage = 5000.0;
					SetHamParamFloat(3, Damage);
					client_print(iAttacker, print_center, "Урон: %f", Damage);
					return HAM_IGNORED;
				}
				
				new Float:KritDamage = random_float(1000.0, 2000.0);
				SetHamParamFloat(3, KritDamage);
				return HAM_IGNORED;
			}
			case 2:
			{
				new Float:KritDamage = random_float(1000.0, 2000.0);
				SetHamParamFloat(3, KritDamage);
				FreezePlayer(iVictim);
			}
		}
	}
	return HAM_IGNORED;
}

public client_PreThink(id)
{ 
    if(entity_get_int(id, EV_INT_button) & IN_USE) 
    { 
		new iEntity = get_pdata_cbase(id, m_pActiveItem, OFFSET_LINUX);
		if(pev_valid(iEntity) && pev(iEntity, pev_impulse) == IMPULSE && ButtonTimeReload[id] == 0)
		{
			switch(AsimovSwitch[id])
			{
				case 1:
				{
					AsimovSwitch[id] = 2;
					ButtonTimeReload[id] = 1;
					set_task(2.0, "ButtonReset", id + IMPULSE);
					client_print(id, print_center, "You switched to freeze mode!");
				}
				case 2:
				{
					AsimovSwitch[id] = 1;
					ButtonTimeReload[id] = 1;
					set_task(2.0, "ButtonReset", id + IMPULSE);
					client_print(id, print_center, "You switched to crit mode!");
				}
			}
		}
    } 
}

public ButtonReset(id)
{
	id -= IMPULSE;
	ButtonTimeReload[id] = 0;
}


public HamHook_Item_Deploy(iItem)
{
	if (pev_valid(iItem) != 2)
		return HAM_IGNORED;
	
	new id = get_pdata_cbase(iItem, 41, 4);
	if(cs_get_weapon_id(iItem) == weapon_awp && pev(iItem, pev_impulse) == IMPULSE && IsUserHaveAwp[id])
	{
		set_pev(id, pev_viewmodel2, AWP_V_MODEL);
		set_pev(id, pev_weaponmodel2, AWP_P_MODEL);
	}
	
	return HAM_IGNORED;
}

public Fakemeta_SetModel(const iEntity, szModel[])
{
	if(!pev_valid(iEntity))
		return FMRES_IGNORED;
		
	new szClassName[32];
	pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
	
	if (!equali(szClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	for(new iSlot, iWeapon; iSlot < 6; iSlot++)
	{
		iWeapon = get_pdata_cbase(iEntity, 34 + iSlot, 4);
		if(pev_valid(iWeapon))
		{
			if(pev(iWeapon, pev_impulse) == IMPULSE)
			{
				engfunc(EngFunc_SetModel, iEntity, AWP_W_MODEL);
				return FMRES_SUPERCEDE;
			}
		}
	}
	return FMRES_IGNORED;
}

public OnWeaponboxTouch(wEnt, id)
{
	static szModel[32]; entity_get_string(wEnt, EV_SZ_model, szModel, charsmax(szModel));
	if(equal(szModel, "models/asimov/", 14))
	{
		if(!(get_user_flags(id) & ACCESS_FLAG)) return PLUGIN_HANDLED;
		else return PLUGIN_CONTINUE;
	}
	
	return PLUGIN_CONTINUE;
}

public FreezePlayer(id)
{
	set_pev(id, pev_renderfx, kRenderFxGlowShell);
	set_pev(id, pev_rendercolor, {0.0, 100.0, 200.0});
	set_pev(id, pev_rendermode, kRenderNormal);
	set_pev(id, pev_renderamt, 18.0);
	
	new Float:vecOrigin[3];
	pev(id, pev_origin, vecOrigin);
	
	set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN);
	set_pev(id, pev_origin, vecOrigin);
	
	message_begin(MSG_ONE_UNRELIABLE, MsgId_ScreenFade, _, id);
	write_short(1<<0);
	write_short(1<<0);
	write_short(1<<2);
	write_byte(0);
	write_byte(50);
	write_byte(200);
	write_byte(100);
	message_end();
	
	set_task(4.0, "UnFreezePlayer", id + IMPULSE);
}

public UnFreezePlayer(id)
{
	id -= IMPULSE;
	
	set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN);
	
	message_begin(MSG_ONE_UNRELIABLE, MsgId_ScreenFade, _, id);
	write_short(1<<0);
	write_short(1<<0);
	write_short(1<<1);
	write_byte(0);
	write_byte(0);
	write_byte(0);
	write_byte(0);
	message_end();
	
	set_pev(id, pev_renderfx, kRenderFxNone);
	set_pev(id, pev_rendercolor, {255.0, 255.0, 255.0});
	set_pev(id, pev_rendermode, kRenderNormal);
	set_pev(id, pev_renderamt, 18.0);
}

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

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo = 0, bool:bDrop = false, iKey = 0)
{
	if (!equal(szWeaponName, "weapon_", 7))
		return false;
	
	new iWeapon = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szWeaponName));
	
	if (!pev_valid(iWeapon))
		return false;
	
	if (bDrop)
	{
		new szWeapon[ 32 ],
			iSlot = ExecuteHamB(Ham_Item_ItemSlot, iWeapon),
			iItem = get_pdata_cbase(iPlayer, 367 + iSlot, 5);
		
		while ((pev_valid(iItem) == 2))
		{
			pev(iItem, pev_classname, szWeapon, charsmax(szWeapon));
			
			iItem = get_pdata_cbase(iItem, 42, 4);
		}
	}
	
	set_pev(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
	
	if (iKey > 0)	set_pev(iWeapon, pev_impulse, iKey);
	if (iAmmo > 0)	cs_set_user_bpammo(iPlayer, get_weaponid(szWeaponName), iAmmo);
	
	dllfunc(DLLFunc_Spawn, iWeapon);
	dllfunc(DLLFunc_Touch, iWeapon, iPlayer);
	
	return true;
}

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 9 госта