Преработка на MegaGrenade за ReApi.

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Преработка на MegaGrenade за ReApi.

Мнение от iv69 » 29 Фев 2020, 13:12

Ще може ли да се прерарботи плъгина така, че да дава възможност играчите да купуват постоянно MegaGrenade, а не само няколко секунди след като се родят?! И да е без значение дали преди това си имал или не HE-grenade(т.е. - ако си имал , да я замества, ако не си - да ти я дава ...) . Ако може, напише ли играча: /megahe - винаги да си купува MegaGrenad. Плъгина ми трябва за DeathMatch-сървър.
Благодаря.

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

// Copyright © 2019 Vaqtincha

/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/

const MGRENADE_DAMAGE 			= 150 // Урон гранаты. (Также влияет на радиус взрыва хардкод (Урон * 3.5 = радиус) 

const MGRENADE_DAMAGE_COST 		= 700 // Цена мега гранаты. (грубо говоря цена урона)
const HEGRENADE_COST_DEFAULT 	= 300 // Цена НЕ гранаты. (Если у игрока уже есть обычный НЕ то снимается MGRENADE_DAMAGE_COST)

// #define MGRENADE_GRAVITY 		0.3 // Гравитация мега гранаты. (Комментируйте если нужен дефолтный)
#define MGRENADE_DANGER_COLOR 	225.0, 0.0, 0.0 // Особый рендер летающий гранаты (Комментируйте чтобы отключить)

/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/

// #define PL_DEBUG

const MGRENADE_COST = MGRENADE_DAMAGE_COST + HEGRENADE_COST_DEFAULT


#include <amxmodx>
#include <reapi>


public plugin_init()
{
	register_plugin("Mega HE Grenade", "0.1", "Vaqtincha")
	
	register_clcmd("megahegren", "ClientCommand_BuyGrenade")
	register_clcmd("say /megahe", "ClientCommand_BuyGrenade")
	register_clcmd("say_team /megahe", "ClientCommand_BuyGrenade")
	
	RegisterHookChain(RG_CBasePlayer_ThrowGrenade, "CBasePlayer_ThrowGrenade", .post = true)
	RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", .post = true)
}

public ClientCommand_BuyGrenade(const pPlayer)
{
	if (!CanPlayerBuy(pPlayer))
		return PLUGIN_HANDLED

	GiveMegaGrenade(pPlayer)

	return PLUGIN_HANDLED
}

GiveMegaGrenade(const pPlayer)
{
	new pItem = GetHeGrenadeWeaponEntity(pPlayer)

	if (pItem != NULLENT)
	{
		set_entvar(pItem, var_dmg_take, float(MGRENADE_DAMAGE))
		rg_add_account(pPlayer, -MGRENADE_DAMAGE_COST)
		SendStatusIcon(pPlayer, "d_grenade", 0)
		SendStatusIcon(pPlayer, "d_grenade", 1)
		emit_sound(pPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		
		return pItem
	}
	
	pItem = rg_give_item(pPlayer, "weapon_hegrenade")

	if (!is_nullent(pItem))
	{
		set_entvar(pItem, var_dmg_take, float(MGRENADE_DAMAGE))
		rg_add_account(pPlayer, -MGRENADE_COST)
		SendStatusIcon(pPlayer, "d_grenade", 0)
		SendStatusIcon(pPlayer, "d_grenade", 1)

		return pItem
	}
	
	return NULLENT
}

public CBasePlayer_Killed(const pPlayer, const pevAttacker, const iGib)
{
	if (is_user_connected(pPlayer))
	{
		SendStatusIcon(pPlayer, "d_grenade", 0)
	}
}

public CBasePlayer_ThrowGrenade(const pPlayer, const pWeapon, Float:vecSrc[3], Float:vecThrow[3], Float:time, const usEvent)
{
	new Float:fNewDmg
	
	if (is_nullent(pWeapon) || get_member(pWeapon, m_iId) != WEAPON_HEGRENADE)
		return HC_CONTINUE
	
/* 	if (pWeapon != get_member(pPlayer, m_pActiveItem))
		return HC_CONTINUE */

	if ((fNewDmg = get_entvar(pWeapon, var_dmg_take)) != float(MGRENADE_DAMAGE))
		return HC_CONTINUE

	new pGrenade = GetHookChainReturn(ATYPE_INTEGER)
	
	if (pGrenade > 0 /* && GetGrenadeType(pGrenade) == WEAPON_HEGRENADE */)
	{
#if defined PL_DEBUG
		server_print("[CBasePlayer_ThrowGrenade] OldDmg %f, NewDmg %f", get_entvar(pGrenade, var_dmg), fNewDmg)
#endif
		if (is_user_connected(pPlayer))
		{
			SendStatusIcon(pPlayer, "d_grenade", 0)
		}

		set_entvar(pWeapon, var_dmg_take, 0.0)
		
		set_entvar(pGrenade, var_dmg, fNewDmg)

#if defined MGRENADE_GRAVITY
		set_entvar(pGrenade, var_gravity, MGRENADE_GRAVITY)
#endif

#if defined MGRENADE_DANGER_COLOR
		set_entvar(pGrenade, var_renderfx, kRenderFxGlowShell)
		set_entvar(pGrenade, var_rendercolor, Float:{MGRENADE_DANGER_COLOR})
		set_entvar(pGrenade, var_renderamt, 150.0)
#endif
	}
	
	return HC_CONTINUE
}

bool:CanPlayerBuy(const pPlayer)
{
	if (!is_user_alive(pPlayer))
		return false

#if !defined PL_DEBUG
	new iSignals[UnifiedSignals]
	get_member(pPlayer, m_signals, iSignals)

	if (!(iSignals[US_State] & any:SIGNAL_BUY))
		return false
	
	new Float:flBuyTime = get_cvar_float("mp_buytime")

	if (flBuyTime == 0.0)
		return false

	if (flBuyTime != -1.0 && (get_gametime() - Float:get_member_game(m_fRoundStartTime) > (flBuyTime * 60)))
	{
		new szBuyTime[3]
		// client_print(pPlayer, print_center, "%0.f seconds have passed.^rYou can't buy anything now!", flBuyTime * 60)
		num_to_str(floatround(flBuyTime * 60), szBuyTime, charsmax(szBuyTime))
		CenterMessage(pPlayer, "#Cant_buy", szBuyTime)
	
		return false
	}
#endif

	new pItem = GetHeGrenadeWeaponEntity(pPlayer)

	if (pItem != NULLENT && floatround(get_entvar(pItem, var_dmg_take)) == MGRENADE_DAMAGE)
	{
		// client_print(pPlayer, print_center, "You already own that weapon.")
		CenterMessage(pPlayer, "#Already_Have_One")
		return false
	}

	if (get_member(pPlayer, m_iAccount) < (pItem != NULLENT ? MGRENADE_DAMAGE_COST : MGRENADE_COST))
	{
		// client_print(pPlayer, print_center, "You have insufficient funds!")
		CenterMessage(pPlayer, "#Not_Enough_Money")
		BlinkAccount(pPlayer)

		return false
	}
	
	return true
}

GetHeGrenadeWeaponEntity(const pPlayer)
{
	new pItem = get_member(pPlayer, m_rgpPlayerItems, GRENADE_SLOT)

	while (!is_nullent(pItem))
	{
		if (get_member(pItem, m_iId) == WEAPON_HEGRENADE) 
		{
			return pItem
		}
	
		pItem = get_member(pItem, m_pNext)
	}
	
	return NULLENT
}

stock CenterMessage(const pPlayer, const szText[], const szText2[] = "")
{
	static iMsgIdTextMsg
	
	if (iMsgIdTextMsg || (iMsgIdTextMsg = get_user_msgid("TextMsg")))
	{
		message_begin(MSG_ONE_UNRELIABLE, iMsgIdTextMsg, .player = pPlayer)
		write_byte(print_center)
		write_string(szText)
		if (szText2[0])
			write_string(szText2)
		message_end()
	}
}

stock BlinkAccount(const pPlayer, const iNumBlinks = 2)
{
	static iMsgIdBlinkAcct
	
	if (iMsgIdBlinkAcct || (iMsgIdBlinkAcct = get_user_msgid("BlinkAcct")))
	{
		message_begin(MSG_ONE_UNRELIABLE, iMsgIdBlinkAcct, .player = pPlayer)
		write_byte(iNumBlinks)
		message_end()
	}
}

stock SendStatusIcon(pPlayer, const szSprite[] = "", iStatus = 0, red = 225, green = 0, blue = 0)
{
	static iMsgIdStatusIcon

	if (iMsgIdStatusIcon || (iMsgIdStatusIcon = get_user_msgid("StatusIcon")))
	{
		message_begin(MSG_ONE_UNRELIABLE, iMsgIdStatusIcon, .player = pPlayer)
		write_byte(iStatus)
		write_string(szSprite)
		write_byte(red)
		write_byte(green)
		write_byte(blue)
		message_end()
	}
}

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Преработка на MegaGrenade за ReApi.

Мнение от OciXCrom » 29 Фев 2020, 14:03

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

// Copyright © 2019 Vaqtincha

/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/

const MGRENADE_DAMAGE 			= 150 // Урон гранаты. (Также влияет на радиус взрыва хардкод (Урон * 3.5 = радиус)

const MGRENADE_DAMAGE_COST 		= 700 // Цена мега гранаты. (грубо говоря цена урона)
const HEGRENADE_COST_DEFAULT 	= 300 // Цена НЕ гранаты. (Если у игрока уже есть обычный НЕ то снимается MGRENADE_DAMAGE_COST)

// #define MGRENADE_GRAVITY 		0.3 // Гравитация мега гранаты. (Комментируйте если нужен дефолтный)
#define MGRENADE_DANGER_COLOR 	225.0, 0.0, 0.0 // Особый рендер летающий гранаты (Комментируйте чтобы отключить)

/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/

// #define PL_DEBUG

const MGRENADE_COST = MGRENADE_DAMAGE_COST + HEGRENADE_COST_DEFAULT


#include <amxmodx>
#include <reapi>


public plugin_init()
{
	register_plugin("Mega HE Grenade", "0.1", "Vaqtincha")

	register_clcmd("megahegren", "ClientCommand_BuyGrenade")
	register_clcmd("say /megahe", "ClientCommand_BuyGrenade")
	register_clcmd("say_team /megahe", "ClientCommand_BuyGrenade")

	RegisterHookChain(RG_CBasePlayer_ThrowGrenade, "CBasePlayer_ThrowGrenade", .post = true)
	RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", .post = true)
}

public ClientCommand_BuyGrenade(const pPlayer)
{
	if (!CanPlayerBuy(pPlayer))
		return PLUGIN_HANDLED

	GiveMegaGrenade(pPlayer)

	return PLUGIN_HANDLED
}

GiveMegaGrenade(const pPlayer)
{
	new pItem = GetHeGrenadeWeaponEntity(pPlayer)

	if (pItem != NULLENT)
	{
		set_entvar(pItem, var_dmg_take, float(MGRENADE_DAMAGE))
		rg_add_account(pPlayer, -MGRENADE_DAMAGE_COST)
		SendStatusIcon(pPlayer, "d_grenade", 0)
		SendStatusIcon(pPlayer, "d_grenade", 1)
		emit_sound(pPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

		return pItem
	}

	pItem = rg_give_item(pPlayer, "weapon_hegrenade")

	if (!is_nullent(pItem))
	{
		set_entvar(pItem, var_dmg_take, float(MGRENADE_DAMAGE))
		rg_add_account(pPlayer, -MGRENADE_COST)
		SendStatusIcon(pPlayer, "d_grenade", 0)
		SendStatusIcon(pPlayer, "d_grenade", 1)

		return pItem
	}

	return NULLENT
}

public CBasePlayer_Killed(const pPlayer, const pevAttacker, const iGib)
{
	if (is_user_connected(pPlayer))
	{
		SendStatusIcon(pPlayer, "d_grenade", 0)
	}
}

public CBasePlayer_ThrowGrenade(const pPlayer, const pWeapon, Float:vecSrc[3], Float:vecThrow[3], Float:time, const usEvent)
{
	new Float:fNewDmg

	if (is_nullent(pWeapon) || get_member(pWeapon, m_iId) != WEAPON_HEGRENADE)
		return HC_CONTINUE

/* 	if (pWeapon != get_member(pPlayer, m_pActiveItem))
		return HC_CONTINUE */

	if ((fNewDmg = get_entvar(pWeapon, var_dmg_take)) != float(MGRENADE_DAMAGE))
		return HC_CONTINUE

	new pGrenade = GetHookChainReturn(ATYPE_INTEGER)

	if (pGrenade > 0 /* && GetGrenadeType(pGrenade) == WEAPON_HEGRENADE */)
	{
#if defined PL_DEBUG
		server_print("[CBasePlayer_ThrowGrenade] OldDmg %f, NewDmg %f", get_entvar(pGrenade, var_dmg), fNewDmg)
#endif
		if (is_user_connected(pPlayer))
		{
			SendStatusIcon(pPlayer, "d_grenade", 0)
		}

		set_entvar(pWeapon, var_dmg_take, 0.0)

		set_entvar(pGrenade, var_dmg, fNewDmg)

#if defined MGRENADE_GRAVITY
		set_entvar(pGrenade, var_gravity, MGRENADE_GRAVITY)
#endif

#if defined MGRENADE_DANGER_COLOR
		set_entvar(pGrenade, var_renderfx, kRenderFxGlowShell)
		set_entvar(pGrenade, var_rendercolor, Float:{MGRENADE_DANGER_COLOR})
		set_entvar(pGrenade, var_renderamt, 150.0)
#endif
	}

	return HC_CONTINUE
}

bool:CanPlayerBuy(const pPlayer)
{
	if (!is_user_alive(pPlayer))
		return false

#if !defined PL_DEBUG
	new iSignals[UnifiedSignals]
	get_member(pPlayer, m_signals, iSignals)

	if (!(iSignals[US_State] & any:SIGNAL_BUY))
		return false

	/*new Float:flBuyTime = get_cvar_float("mp_buytime")

	if (flBuyTime == 0.0)
		return false

	if (flBuyTime != -1.0 && (get_gametime() - Float:get_member_game(m_fRoundStartTime) > (flBuyTime * 60)))
	{
		new szBuyTime[3]
		// client_print(pPlayer, print_center, "%0.f seconds have passed.^rYou can't buy anything now!", flBuyTime * 60)
		num_to_str(floatround(flBuyTime * 60), szBuyTime, charsmax(szBuyTime))
		CenterMessage(pPlayer, "#Cant_buy", szBuyTime)

		return false
	}*/
#endif

	new pItem = GetHeGrenadeWeaponEntity(pPlayer)

	/*if (pItem != NULLENT && floatround(get_entvar(pItem, var_dmg_take)) == MGRENADE_DAMAGE)
	{
		// client_print(pPlayer, print_center, "You already own that weapon.")
		CenterMessage(pPlayer, "#Already_Have_One")
		return false
	}*/

	if (get_member(pPlayer, m_iAccount) < (pItem != NULLENT ? MGRENADE_DAMAGE_COST : MGRENADE_COST))
	{
		// client_print(pPlayer, print_center, "You have insufficient funds!")
		CenterMessage(pPlayer, "#Not_Enough_Money")
		BlinkAccount(pPlayer)

		return false
	}

	return true
}

GetHeGrenadeWeaponEntity(const pPlayer)
{
	new pItem = get_member(pPlayer, m_rgpPlayerItems, GRENADE_SLOT)

	while (!is_nullent(pItem))
	{
		if (get_member(pItem, m_iId) == WEAPON_HEGRENADE)
		{
			return pItem
		}

		pItem = get_member(pItem, m_pNext)
	}

	return NULLENT
}

stock CenterMessage(const pPlayer, const szText[], const szText2[] = "")
{
	static iMsgIdTextMsg

	if (iMsgIdTextMsg || (iMsgIdTextMsg = get_user_msgid("TextMsg")))
	{
		message_begin(MSG_ONE_UNRELIABLE, iMsgIdTextMsg, .player = pPlayer)
		write_byte(print_center)
		write_string(szText)
		if (szText2[0])
			write_string(szText2)
		message_end()
	}
}

stock BlinkAccount(const pPlayer, const iNumBlinks = 2)
{
	static iMsgIdBlinkAcct

	if (iMsgIdBlinkAcct || (iMsgIdBlinkAcct = get_user_msgid("BlinkAcct")))
	{
		message_begin(MSG_ONE_UNRELIABLE, iMsgIdBlinkAcct, .player = pPlayer)
		write_byte(iNumBlinks)
		message_end()
	}
}

stock SendStatusIcon(pPlayer, const szSprite[] = "", iStatus = 0, red = 225, green = 0, blue = 0)
{
	static iMsgIdStatusIcon

	if (iMsgIdStatusIcon || (iMsgIdStatusIcon = get_user_msgid("StatusIcon")))
	{
		message_begin(MSG_ONE_UNRELIABLE, iMsgIdStatusIcon, .player = pPlayer)
		write_byte(iStatus)
		write_string(szSprite)
		write_byte(red)
		write_byte(green)
		write_byte(blue)
		message_end()
	}
}

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Преработка на MegaGrenade за ReApi.

Мнение от iv69 » 29 Фев 2020, 19:03

OciXCrom написа: 29 Фев 2020, 14:03

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

// Copyright © 2019 Vaqtincha

/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/

const MGRENADE_DAMAGE 			= 150 // Урон гранаты. (Также влияет на радиус взрыва хардкод (Урон * 3.5 = радиус)

const MGRENADE_DAMAGE_COST 		= 700 // Цена мега гранаты. (грубо говоря цена урона)
const HEGRENADE_COST_DEFAULT 	= 300 // Цена НЕ гранаты. (Если у игрока уже есть обычный НЕ то снимается MGRENADE_DAMAGE_COST)

// #define MGRENADE_GRAVITY 		0.3 // Гравитация мега гранаты. (Комментируйте если нужен дефолтный)
#define MGRENADE_DANGER_COLOR 	225.0, 0.0, 0.0 // Особый рендер летающий гранаты (Комментируйте чтобы отключить)

/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/

// #define PL_DEBUG

const MGRENADE_COST = MGRENADE_DAMAGE_COST + HEGRENADE_COST_DEFAULT


#include <amxmodx>
#include <reapi>


public plugin_init()
{
	register_plugin("Mega HE Grenade", "0.1", "Vaqtincha")

	register_clcmd("megahegren", "ClientCommand_BuyGrenade")
	register_clcmd("say /megahe", "ClientCommand_BuyGrenade")
	register_clcmd("say_team /megahe", "ClientCommand_BuyGrenade")

	RegisterHookChain(RG_CBasePlayer_ThrowGrenade, "CBasePlayer_ThrowGrenade", .post = true)
	RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", .post = true)
}

public ClientCommand_BuyGrenade(const pPlayer)
{
	if (!CanPlayerBuy(pPlayer))
		return PLUGIN_HANDLED

	GiveMegaGrenade(pPlayer)

	return PLUGIN_HANDLED
}

GiveMegaGrenade(const pPlayer)
{
	new pItem = GetHeGrenadeWeaponEntity(pPlayer)

	if (pItem != NULLENT)
	{
		set_entvar(pItem, var_dmg_take, float(MGRENADE_DAMAGE))
		rg_add_account(pPlayer, -MGRENADE_DAMAGE_COST)
		SendStatusIcon(pPlayer, "d_grenade", 0)
		SendStatusIcon(pPlayer, "d_grenade", 1)
		emit_sound(pPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

		return pItem
	}

	pItem = rg_give_item(pPlayer, "weapon_hegrenade")

	if (!is_nullent(pItem))
	{
		set_entvar(pItem, var_dmg_take, float(MGRENADE_DAMAGE))
		rg_add_account(pPlayer, -MGRENADE_COST)
		SendStatusIcon(pPlayer, "d_grenade", 0)
		SendStatusIcon(pPlayer, "d_grenade", 1)

		return pItem
	}

	return NULLENT
}

public CBasePlayer_Killed(const pPlayer, const pevAttacker, const iGib)
{
	if (is_user_connected(pPlayer))
	{
		SendStatusIcon(pPlayer, "d_grenade", 0)
	}
}

public CBasePlayer_ThrowGrenade(const pPlayer, const pWeapon, Float:vecSrc[3], Float:vecThrow[3], Float:time, const usEvent)
{
	new Float:fNewDmg

	if (is_nullent(pWeapon) || get_member(pWeapon, m_iId) != WEAPON_HEGRENADE)
		return HC_CONTINUE

/* 	if (pWeapon != get_member(pPlayer, m_pActiveItem))
		return HC_CONTINUE */

	if ((fNewDmg = get_entvar(pWeapon, var_dmg_take)) != float(MGRENADE_DAMAGE))
		return HC_CONTINUE

	new pGrenade = GetHookChainReturn(ATYPE_INTEGER)

	if (pGrenade > 0 /* && GetGrenadeType(pGrenade) == WEAPON_HEGRENADE */)
	{
#if defined PL_DEBUG
		server_print("[CBasePlayer_ThrowGrenade] OldDmg %f, NewDmg %f", get_entvar(pGrenade, var_dmg), fNewDmg)
#endif
		if (is_user_connected(pPlayer))
		{
			SendStatusIcon(pPlayer, "d_grenade", 0)
		}

		set_entvar(pWeapon, var_dmg_take, 0.0)

		set_entvar(pGrenade, var_dmg, fNewDmg)

#if defined MGRENADE_GRAVITY
		set_entvar(pGrenade, var_gravity, MGRENADE_GRAVITY)
#endif

#if defined MGRENADE_DANGER_COLOR
		set_entvar(pGrenade, var_renderfx, kRenderFxGlowShell)
		set_entvar(pGrenade, var_rendercolor, Float:{MGRENADE_DANGER_COLOR})
		set_entvar(pGrenade, var_renderamt, 150.0)
#endif
	}

	return HC_CONTINUE
}

bool:CanPlayerBuy(const pPlayer)
{
	if (!is_user_alive(pPlayer))
		return false

#if !defined PL_DEBUG
	new iSignals[UnifiedSignals]
	get_member(pPlayer, m_signals, iSignals)

	if (!(iSignals[US_State] & any:SIGNAL_BUY))
		return false

	/*new Float:flBuyTime = get_cvar_float("mp_buytime")

	if (flBuyTime == 0.0)
		return false

	if (flBuyTime != -1.0 && (get_gametime() - Float:get_member_game(m_fRoundStartTime) > (flBuyTime * 60)))
	{
		new szBuyTime[3]
		// client_print(pPlayer, print_center, "%0.f seconds have passed.^rYou can't buy anything now!", flBuyTime * 60)
		num_to_str(floatround(flBuyTime * 60), szBuyTime, charsmax(szBuyTime))
		CenterMessage(pPlayer, "#Cant_buy", szBuyTime)

		return false
	}*/
#endif

	new pItem = GetHeGrenadeWeaponEntity(pPlayer)

	/*if (pItem != NULLENT && floatround(get_entvar(pItem, var_dmg_take)) == MGRENADE_DAMAGE)
	{
		// client_print(pPlayer, print_center, "You already own that weapon.")
		CenterMessage(pPlayer, "#Already_Have_One")
		return false
	}*/

	if (get_member(pPlayer, m_iAccount) < (pItem != NULLENT ? MGRENADE_DAMAGE_COST : MGRENADE_COST))
	{
		// client_print(pPlayer, print_center, "You have insufficient funds!")
		CenterMessage(pPlayer, "#Not_Enough_Money")
		BlinkAccount(pPlayer)

		return false
	}

	return true
}

GetHeGrenadeWeaponEntity(const pPlayer)
{
	new pItem = get_member(pPlayer, m_rgpPlayerItems, GRENADE_SLOT)

	while (!is_nullent(pItem))
	{
		if (get_member(pItem, m_iId) == WEAPON_HEGRENADE)
		{
			return pItem
		}

		pItem = get_member(pItem, m_pNext)
	}

	return NULLENT
}

stock CenterMessage(const pPlayer, const szText[], const szText2[] = "")
{
	static iMsgIdTextMsg

	if (iMsgIdTextMsg || (iMsgIdTextMsg = get_user_msgid("TextMsg")))
	{
		message_begin(MSG_ONE_UNRELIABLE, iMsgIdTextMsg, .player = pPlayer)
		write_byte(print_center)
		write_string(szText)
		if (szText2[0])
			write_string(szText2)
		message_end()
	}
}

stock BlinkAccount(const pPlayer, const iNumBlinks = 2)
{
	static iMsgIdBlinkAcct

	if (iMsgIdBlinkAcct || (iMsgIdBlinkAcct = get_user_msgid("BlinkAcct")))
	{
		message_begin(MSG_ONE_UNRELIABLE, iMsgIdBlinkAcct, .player = pPlayer)
		write_byte(iNumBlinks)
		message_end()
	}
}

stock SendStatusIcon(pPlayer, const szSprite[] = "", iStatus = 0, red = 225, green = 0, blue = 0)
{
	static iMsgIdStatusIcon

	if (iMsgIdStatusIcon || (iMsgIdStatusIcon = get_user_msgid("StatusIcon")))
	{
		message_begin(MSG_ONE_UNRELIABLE, iMsgIdStatusIcon, .player = pPlayer)
		write_byte(iStatus)
		write_string(szSprite)
		write_byte(red)
		write_byte(green)
		write_byte(blue)
		message_end()
	}
}
Съжалявам Кроме, но не става ?! Не знам какво му е на плъгина , но дава само след раждане - само едно закупуване нна тази граната...След това - докато не умреш няма повече :confused: ? Мисълта ми бе . докато имаш money - все да можеш да купуваш... !
Нищо. Ще пусна нормална заявка за нов такъв плъгин , може би ще стане по-лесно и правилно ?
:lock:

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

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