Заявка за редактиране на Blockmaker Shop

Въпроси и проблеми свързани с AMXModX.
Аватар
tom1k
Извън линия
Потребител
Потребител
Мнения: 202
Регистриран на: 29 Сеп 2020, 23:50
Местоположение: Добрич
Се отблагодари: 16 пъти
Получена благодарност: 8 пъти

Заявка за редактиране на Blockmaker Shop

Мнение от tom1k » 30 Май 2021, 22:48

В момента шопа работи само като си T а попринцип трябва да работи за CT. И ако може да се махнат Hud-овете които са горе посредата. Също така не искам да се отваря шопа с бутон N ами да се пише /shop

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

/*==================================================================================================

			       |**********************************|
			       |==================================|
			       |=     BlockMaker Item Shop	 =|
			       |==================================|
			       |**********************************|

|= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =|
 |												   |
 |												   |
 |			Copyright © 2017-2018, AJW1337// 					   |
 |			This file is provided as is (no warranties) 				   |
 |												   |
 |			BlockMaker Item Shop is free software; 			  		   |
 |			you can redistribute it and/or modify it under the terms of the 	   |
 |			GNU General Public License as published by the Free Software Foundation.   |
 |												   |	
 |			This program is distributed in the hope that it will be useful,            |
 |			but WITHOUT ANY WARRANTY; without even the implied warranty of             |
 |			MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 			   |
 |												   |
 |												   |
 |			Plugin requested by Coca Cola _-FxF-_					   |
 |												   |
|= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =| 
					  |---------------|
					  |   Changelog   |
					  |---------------|
				v1.0 Official Plugin Release
											 
==================================================================================================*/

#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
#include <fvault>
#include <WPMGPrintChatColor>
#include <hamsandwich>
#include <engine>

#if AMXX_VERSION_NUM < 183
	#include <dhudmessage>
	#define client_disconnected client_disconnect
#endif

native add_user_immune(id)
native remove_user_immune(id)

native hnsxp_get_user_xp(id)
native hnsxp_set_user_xp(id, iExp)

stock hnsxp_add_user_xp(id, iExp)
	return hnsxp_set_user_xp(id, hnsxp_get_user_xp(id) + iExp)


new const PLUGIN[] = "BlockMaker Item Shop"
new const VERSION[] = "1.0"
new const AUTHOR[] = "AJW1337//"
new const BM_ItemShopDB[] = "BM_ItemShop_DataBase"

enum _:Info
{
	PRICE = 0,
	LIMIT,
	AMOUNT
}

enum _:Items
{
	HEALTH,
	ARMOR,
	HE_NADE,
	NO_FROST,
	NO_FLASH,
	AWP,
	M3,
	DEAGLE,
	XP,
	RESPAWN
}

new const szItemNames[Items][] =
{
	"Health",
	"Armor",
	"HE Grenade",
	"Anti Frost",
	"Anti Flash",
	"AWP",
	"M3",
	"Deagle",
	"XP",
	"Respawn"
}

new ItemInfo[Items][Info], g_ItemsLimit[33][Items], bool:g_IsBought[33][Items]
new g_iPoints[33], bool:g_bConnected[33]
new g_iSyncMessage

// For Anti Flash
new Float:g_flGameTime[2], g_iOwner
new g_iGrenade[32], bool:g_iTrackEnemy, bool:g_iTrack[33]
new g_iMsgScreenFade, g_iLast, g_iSyncData
new g_bNoFlash[33]
// For Anti Flash

enum
{
	SECTION_SHOP = 1,
	SECTION_PRICE,
	SECTION_LIMIT,
	SECTION_AMOUNT
}

enum _:DataItems
{
	SHOP_PREFIX[32],
	SHOP_MENU_PREFIX[32],
	SHOP_COMMAND[32],
	HS_KILL_POINTS,
	KILL_POINTS,
	PRINT_COLOR,
	D_HUD_MESSAGE,
	D_HUD_CUSTOM_COLOR,
	RED_COLOR,
	GREEN_COLOR,
	BLUE_COLOR,
	Float:COORD_X,
	Float:COORD_Y
}

new g_eItems[DataItems]

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_cvar("BM_ItemShop", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	
	register_dictionary("blockmaker_itemshop.txt")
	
	register_clcmd("say", "Command_HookSay")
	register_clcmd("say_team", "Command_HookSay")
	
	register_concmd("amx_reload_file", "Command_ReloadFile", ADMIN_BAN)
	
	register_clcmd("BM_Points_Amount", "Command_BM_Points_Amount", ADMIN_BAN)

	register_event("DeathMsg", "eventDeathMsg", "a")
	register_logevent("eventRoundStart", 2, "1=Round_Start")
	
	register_event("ScreenFade", "eventFlash", "be", "4=255", "5=255", "6=255", "7>199")
	register_event("TextMsg", "fire_in_the_hole", "b", "2&#Game_radio", "4&#Fire_in_the_hole")
	register_event("TextMsg", "fire_in_the_hole2", "b", "3&#Game_radio", "5&#Fire_in_the_hole")
	register_event("99", "grenade_throw", "b")
	set_task(2.0, "flash", .flags="b")
	g_iMsgScreenFade = get_user_msgid("ScreenFade")
	
	new iEnt = create_entity("info_target")
	entity_set_string(iEnt, EV_SZ_classname, "task_entity")
	
	register_think("task_entity", "HudEntity")
	entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 2.0)
	
	g_iSyncMessage = CreateHudSyncObj()
	
	ReadFile()
}
public plugin_natives()
{
	register_native("get_user_bm_points", "_get_user_bm_points")
	register_native("set_user_bm_points", "_set_user_bm_points")
}
public Command_ReloadFile(id, level, cid)
{
	if (!cmd_access(id, level, cid, 1))
		goto Handled
	
	ReadFile()
		
	Handled:
	return PLUGIN_HANDLED
}
ReadFile()
{
	static szConfigsDir[64], iFile
	get_configsdir(szConfigsDir, charsmax(szConfigsDir))
	add(szConfigsDir, charsmax(szConfigsDir), "/BM_ItemShop.ini")
	iFile = fopen(szConfigsDir, "rt")
	
	if (iFile)
	{
		static szLineData[160], szKey[32], szValue[128], iSection
		
		while (!feof(iFile))
		{
			fgets(iFile, szLineData, charsmax(szLineData))
			trim(szLineData)
			
			switch (szLineData[0])
			{
				case EOS, ';': continue
				case '[':
				{
					if (szLineData[strlen(szLineData) -1] == ']')
					{
						if (containi(szLineData, "item shop") != -1)
							iSection = SECTION_SHOP
						else if (containi(szLineData, "item prices") != -1)
							iSection = SECTION_PRICE
						else if (containi(szLineData, "item limits") != -1)
							iSection = SECTION_LIMIT
						else if (containi(szLineData, "item amounts") != -1)
							iSection = SECTION_AMOUNT
					}					
					else
						continue
				}
				default:
				{
					strtok(szLineData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					trim(szKey)
					trim(szValue)
					
					if (is_eos_line(szValue))
						continue
						
					switch(iSection)
					{
						case SECTION_SHOP:
						{
							if (equal(szKey, "BM_SHOP_COMMANDS"))
							{
								while (szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
								{
									trim(szKey)
									trim(szValue)
									register_clcmd(szKey, "Command_Shop")
								}
							}
							else if (equal(szKey, "BM_SHOP_PRINT_COLOR"))
								g_eItems[PRINT_COLOR] = str_to_num(szValue)
							else if (equal(szKey, "BM_SHOP_PREFIX"))
								copy(g_eItems[SHOP_PREFIX], charsmax(g_eItems[SHOP_PREFIX]), szValue)
							else if (equal(szKey, "BM_SHOP_MENU_PREFIX"))
								copy(g_eItems[SHOP_MENU_PREFIX], charsmax(g_eItems[SHOP_MENU_PREFIX]), szValue)
							else if (equal(szKey, "BM_SHOP_HEADSHOT_KILL_POINTS"))
								g_eItems[HS_KILL_POINTS] = str_to_num(szValue)
							else if (equal(szKey, "BM_SHOP_NORMAL_KILL_POINTS"))
								g_eItems[KILL_POINTS] = str_to_num(szValue)
							else if (equal(szKey, "BM_SHOP_D_HUD_MESSAGE"))
								g_eItems[D_HUD_MESSAGE] = clamp(hud_dhud(szValue), false, true)
							else if (equal(szKey, "BM_SHOP_D_HUD_CUSTOM_COLOR"))
								g_eItems[D_HUD_CUSTOM_COLOR] = clamp(on_off(szValue), false, true)
							else if (equal(szKey, "BM_SHOP_D_HUD_RED_COLOR"))
								g_eItems[RED_COLOR] = clamp(str_to_num(szValue), 0, 255)
							else if (equal(szKey, "BM_SHOP_D_HUD_GREEN_COLOR"))
								g_eItems[GREEN_COLOR] = clamp(str_to_num(szValue), 0, 255)
							else if (equal(szKey, "BM_SHOP_D_HUD_BLUE_COLOR"))
								g_eItems[BLUE_COLOR] = clamp(str_to_num(szValue), 0, 255)
							else if (equal(szKey, "BM_SHOP_D_HUD_COORD_X"))
								g_eItems[COORD_X] = _:str_to_float(szValue)
							else if (equal(szKey, "BM_SHOP_D_HUD_COORD_Y"))
								g_eItems[COORD_Y] = _:str_to_float(szValue)
						}
						case SECTION_PRICE:
						{
							if (equal(szKey, "BM_HEALTH_PRICE"))
								ItemInfo[HEALTH][PRICE] = str_to_num(szValue)
							else if (equal(szKey, "BM_ARMOR_PRICE"))
								ItemInfo[ARMOR][PRICE] = str_to_num(szValue)
							else if (equal(szKey, "BM_HE_GRENADE_PRICE"))
								ItemInfo[HE_NADE][PRICE] = str_to_num(szValue)
							else if (equal(szKey, "BM_ANTI_FROST_PRICE"))
								ItemInfo[NO_FROST][PRICE] = str_to_num(szValue)
							else if (equal(szKey, "BM_ANTI_FLASH_PRICE"))
								ItemInfo[NO_FLASH][PRICE] = str_to_num(szValue)
							else if (equal(szKey, "BM_AWP_PRICE"))
								ItemInfo[AWP][PRICE] = str_to_num(szValue)
							else if (equal(szKey, "BM_M3_PRICE"))
								ItemInfo[M3][PRICE] = str_to_num(szValue)
							else if (equal(szKey, "BM_DEAGLE_PRICE"))
								ItemInfo[DEAGLE][PRICE] = str_to_num(szValue)
							else if (equal(szKey, "BM_XP_PRICE"))
								ItemInfo[XP][PRICE] = str_to_num(szValue)
							else if (equal(szKey, "BM_RESPAWN_PRICE"))
								ItemInfo[RESPAWN][PRICE] = str_to_num(szValue)
						}
						case SECTION_LIMIT:
						{
							if (equal(szKey, "BM_HEALTH_LIMIT"))
								ItemInfo[HEALTH][LIMIT] = str_to_num(szValue)
							else if (equal(szKey, "BM_ARMOR_LIMIT"))
								ItemInfo[ARMOR][LIMIT] = str_to_num(szValue)
							else if (equal(szKey, "BM_HE_GRENADE_LIMIT"))
								ItemInfo[HE_NADE][LIMIT] = str_to_num(szValue)
							else if (equal(szKey, "BM_ANTI_FROST_LIMIT"))
								ItemInfo[NO_FROST][LIMIT] = str_to_num(szValue)
							else if (equal(szKey, "BM_ANTI_FLASH_LIMIT"))
								ItemInfo[NO_FLASH][LIMIT] = str_to_num(szValue)
							else if (equal(szKey, "BM_AWP_LIMIT"))
								ItemInfo[AWP][LIMIT] = str_to_num(szValue)
							else if (equal(szKey, "BM_M3_LIMIT"))
								ItemInfo[M3][LIMIT] = str_to_num(szValue)
							else if (equal(szKey, "BM_DEAGLE_LIMIT"))
								ItemInfo[DEAGLE][LIMIT] = str_to_num(szValue)
							else if (equal(szKey, "BM_XP_LIMIT"))
								ItemInfo[XP][LIMIT] = str_to_num(szValue)
							else if (equal(szKey, "BM_RESPAWN_LIMIT"))
								ItemInfo[RESPAWN][LIMIT] = str_to_num(szValue)
						}
						case SECTION_AMOUNT:
						{
							if (equal(szKey, "BM_HEALTH_AMOUNT"))
								ItemInfo[HEALTH][AMOUNT] = str_to_num(szValue)
							else if (equal(szKey, "BM_ARMOR_AMOUNT"))
								ItemInfo[ARMOR][AMOUNT] = str_to_num(szValue)
							else if (equal(szKey, "BM_HE_GRENADE_AMOUNT"))
								ItemInfo[HE_NADE][AMOUNT] = str_to_num(szValue)
							else if (equal(szKey, "BM_ANTI_FROST_AMOUNT"))
								ItemInfo[NO_FROST][AMOUNT] = str_to_num(szValue)
							else if (equal(szKey, "BM_ANTI_FLASH_AMOUNT"))
								ItemInfo[NO_FLASH][AMOUNT] = str_to_num(szValue)
							else if (equal(szKey, "BM_AWP_AMOUNT"))
								ItemInfo[AWP][AMOUNT] = str_to_num(szValue)
							else if (equal(szKey, "BM_M3_AMOUNT"))
								ItemInfo[M3][AMOUNT] = str_to_num(szValue)
							else if (equal(szKey, "BM_DEAGLE_AMOUNT"))
								ItemInfo[DEAGLE][AMOUNT] = str_to_num(szValue)
							else if (equal(szKey, "BM_XP_AMOUNT"))
								ItemInfo[XP][AMOUNT] = str_to_num(szValue)
							else if (equal(szKey, "BM_RESPAWN_AMOUNT"))
								ItemInfo[RESPAWN][AMOUNT] = str_to_num(szValue)
						}
					}
				}
			}
			
		}
		fclose(iFile)
	}
}
bool:is_eos_line(szString[]) return szString[0] == EOS ? true : false
bool:hud_dhud(szString[]) return szString[0] == 'd' ? true : false
bool:on_off(szString[]) return szString[1] == 'n' ? true : false

public _get_user_bm_points(iPlugin, iParams)
{
	new id = get_param(1)
	
	if (!is_user_connected(id))
		return -1
	
	return g_iPoints[id]
}

public _set_user_bm_points(iPlugin, iParams)
{
	new id = get_param(1)
	
	if (!is_user_connected(id))
		return false
	
	g_iPoints[id] = get_param(2)
	return true
}

public HudEntity(iEnt)
{
	static iPlayers[32], iNum, id, szHostName[64]
	get_players(iPlayers, iNum, "ch")
	
	for (new i = 0; i < iNum; i++)
	{
		id = iPlayers[i]
		
		if (!is_user_connected(id) || !is_user_alive(id))
			continue
		
		get_user_name(0, szHostName, charsmax(szHostName))
		
		if (!g_eItems[D_HUD_MESSAGE])
		{
			if (g_eItems[D_HUD_CUSTOM_COLOR])
				set_hudmessage(g_eItems[RED_COLOR], g_eItems[GREEN_COLOR], g_eItems[BLUE_COLOR], g_eItems[COORD_X], g_eItems[COORD_Y], 0, 0.8, 0.8)
			else
				set_hudmessage(random(256), random(256), random(256), g_eItems[COORD_X], g_eItems[COORD_Y], 0, 0.8, 0.8)
			
			if(get_cvar_num("mp_timelimit")) 
			{
				ShowSyncHudMsg(id, g_iSyncMessage, "%L", id, "D_HUD_MESSAGE_TIMELEFT",
				get_user_health(id), g_iPoints[id], hnsxp_get_user_xp(id), szHostName, (get_timeleft( ) / 60), (get_timeleft() % 60))
			}
			else 
			{
				ShowSyncHudMsg(id, g_iSyncMessage, "%L", id, "D_HUD_MESSAGE_NO_TIMELEFT",
				get_user_health(id), get_user_armor(id), g_iPoints[id], hnsxp_get_user_xp(id), szHostName)
			}
		}
		else if (g_eItems[D_HUD_MESSAGE])
		{
			if (g_eItems[D_HUD_CUSTOM_COLOR])
				set_dhudmessage(g_eItems[RED_COLOR], g_eItems[GREEN_COLOR], g_eItems[BLUE_COLOR], g_eItems[COORD_X], g_eItems[COORD_Y], 0, 0.8, 0.8)
			else
				set_dhudmessage(random(256), random(256), random(256), g_eItems[COORD_X], g_eItems[COORD_Y], 0, 0.8, 0.8)
				
			if(get_cvar_num("mp_timelimit")) 
			{
				show_dhudmessage(id, "%L", id, "D_HUD_MESSAGE_TIMELEFT",
				get_user_health(id), g_iPoints[id], hnsxp_get_user_xp(id), szHostName, (get_timeleft( ) / 60), (get_timeleft() % 60))
			}
			else 
			{
				show_dhudmessage(id, "%L", id, "D_HUD_MESSAGE_NO_TIMELEFT",
				get_user_health(id), get_user_armor(id), g_iPoints[id], hnsxp_get_user_xp(id), szHostName)
			}
		}
	}
	entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 0.5)
}

public client_putinserver(id)
{
	for (new i = 0; i < sizeof(szItemNames); i++)
	{
		g_IsBought[id][i] = false
		g_ItemsLimit[id][i] = 0
	}
	
	g_bNoFlash[id] = false
	remove_user_immune(id)
	
	new szName[32]
	get_user_name(id, szName, charsmax(szName))
	
	set_task(0.1, "LoadData", id, szName, charsmax(szName))
}

public client_disconnected(id)
{
	for (new i = 0; i < sizeof(szItemNames); i++)
	{
		g_IsBought[id][i] = false
		g_ItemsLimit[id][i] = 0
	}
	
	g_bNoFlash[id] = false
	remove_user_immune(id)
	
	if (g_bConnected[id])
	{
		new szName[32]
		get_user_name(id, szName, charsmax(szName))
		
		SaveData(id, szName)
		
		g_bConnected[id] = false
	}
}

public eventRoundStart()
{
	for (new i = 0; i < get_maxplayers(); i++)
	{
		for (new j = 0; j < Items; j++)
		{
			g_IsBought[i][j] = false
			g_ItemsLimit[i][j] = 0
		}
		remove_user_immune(i)
		g_bNoFlash[i] = false
	}
}

public eventDeathMsg()
{
	new iKiller = read_data(1)
	,iVictim = read_data(2)
	,iHeadShot = read_data(3)
	
	if (iKiller == iVictim || !is_user_connected(iKiller))
		return
	
	new szName[32]
	get_user_name(iKiller, szName, charsmax(szName))
	
	for (new i = 0; i < sizeof(szItemNames); i++)
		g_IsBought[iVictim][i] = false
	
	g_iPoints[iKiller] += iHeadShot == 1 ? g_eItems[HS_KILL_POINTS] : g_eItems[KILL_POINTS]
	
	if (g_bConnected[iKiller])
		SaveData(iKiller, szName)
}

public Command_HookSay(id)
{
	new szArgs[64], szCommand[32], szUser[32], szAmount[8]
	read_args(szArgs, charsmax(szArgs))
	remove_quotes(szArgs)
	parse(szArgs, szCommand, charsmax(szCommand), szUser, charsmax(szUser), szAmount, charsmax(szAmount))
	
	if (equal(szCommand, "/points"))
	{
		if (szUser[0] == EOS)
		{
			PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "YOUR_POINTS", g_eItems[SHOP_PREFIX], g_iPoints[id])
			return PLUGIN_HANDLED
		}
		else
		{
			new iTarget = cmd_target(id, szUser, 0)
			
			if (!iTarget)
			{
				PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "NOT_FOUND",g_eItems[SHOP_PREFIX])
				return PLUGIN_HANDLED
			}
			
			new szName[32]
			get_user_name(iTarget, szName, charsmax(szName))
			
			PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "TARGET_POINTS", g_eItems[SHOP_PREFIX], szName, g_iPoints[iTarget])
			return PLUGIN_HANDLED
		}
	}
	else if (equal(szCommand, "/shopmenu"))
	{
		if (get_user_flags(id) & ADMIN_BAN)
			ToggleShopMenu(id)
		else
			PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "NO_ACCESS", g_eItems[SHOP_PREFIX])
		
		return PLUGIN_HANDLED
	}
	else if (equal(szCommand, "/give"))
	{
		if (szUser[0] == EOS || szAmount[0] == EOS)
		{
			PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "USAGE_GIVE", g_eItems[SHOP_PREFIX])
			return PLUGIN_HANDLED
		}
		
		new iAmount = str_to_num(szAmount)
		
		if (iAmount <= 0)
		{
			PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "ONLY_POSITIVE", g_eItems[SHOP_PREFIX])
			return PLUGIN_HANDLED
		}
		
		new iTarget = cmd_target(id, szUser, 0)
		
		if (!iTarget)
		{
			PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "NOT_FOUND", g_eItems[SHOP_PREFIX])
			return PLUGIN_HANDLED
		}
		
		if (iTarget == id)
		{
			PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "CANT_GIVE_TO_YOURSELF", g_eItems[SHOP_PREFIX])
			return PLUGIN_HANDLED
		}
			
		if (iAmount > g_iPoints[id])
			iAmount = g_iPoints[id]
		
		new szName[2][32]
		get_user_name(id, szName[0], charsmax(szName[]))
		get_user_name(iTarget, szName[1], charsmax(szName[]))
		
		g_iPoints[id] -= iAmount
		g_iPoints[iTarget] += iAmount
		
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "POINTS_GAVE", g_eItems[SHOP_PREFIX], iAmount, szName[1])
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "POINTS_RECEIVE", g_eItems[SHOP_PREFIX], szName[0], iAmount)
		
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_CONTINUE
}
public Command_Shop(id)
{
	if (cs_get_user_team(id) == CS_TEAM_T)
		OpenItemShop(id)
	else
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "MUST_BE_TERROR", g_eItems[SHOP_PREFIX])
			
	return PLUGIN_HANDLED
}
public OpenItemShop(id)
{
	static szTitle[128]
	formatex(szTitle, charsmax(szTitle), "%L", id, "ITEM_SHOP_MENU_NAME", g_eItems[SHOP_MENU_PREFIX], g_iPoints[id])
	new iMenu = menu_create(szTitle, "shop_handler")
	
	for (new i = 0; i < sizeof(szItemNames); i++)
	{
		new szItem[128]
		
		if (i == HEALTH || i == ARMOR || i == XP)
		{
			formatex(szItem, charsmax(szItem), "%L", id, "HP_AP_XP_SHOP_ITEMS", g_ItemsLimit[id][i] >= ItemInfo[i][LIMIT] ? "\d" : "\w",
			ItemInfo[i][AMOUNT], szItemNames[i], ItemInfo[i][PRICE],
			g_ItemsLimit[id][i] >= ItemInfo[i][LIMIT] ? "\r" : "\d", g_ItemsLimit[id][i], ItemInfo[i][LIMIT])
		}
		else
		{
			formatex(szItem, charsmax(szItem), "%L", id, "ALL_OTHER_ITEMS", g_ItemsLimit[id][i] >= ItemInfo[i][LIMIT] ? "\d" : "\w",
			szItemNames[i], ItemInfo[i][PRICE],
			g_ItemsLimit[id][i] >= ItemInfo[i][LIMIT] ? "\r" : "\d", g_ItemsLimit[id][i], ItemInfo[i][LIMIT])
		}
		menu_additem(iMenu, szItem)
	}
	menu_display(id, iMenu)
	return PLUGIN_HANDLED
}

public shop_handler(id, iMenu, Item)
{
	if (!is_user_connected(id))
		goto Handled
	
	if (Item == MENU_EXIT)
	{
		menu_cancel(id)
		goto Handled
	}
	
	if (g_iPoints[id] < ItemInfo[Item][PRICE])
	{
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "NO_MONEY", g_eItems[SHOP_PREFIX])
		menu_destroy(iMenu)
		goto Handled
	}
	
	if (g_ItemsLimit[id][Item] >= ItemInfo[Item][LIMIT])
	{
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "MAX_BUYS", g_eItems[SHOP_PREFIX])
		menu_destroy(iMenu)
		goto Handled
	}
	
	if (!is_user_alive(id) && Item != RESPAWN)
	{
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "NOT_ALIVE", g_eItems[SHOP_PREFIX])
		menu_destroy(iMenu)
		goto Handled
	}
	
	switch (Item)
	{
		case HEALTH: fm_set_user_health(id, get_user_health(id) + ItemInfo[HEALTH][AMOUNT])
		case ARMOR: fm_set_user_armor(id, get_user_armor(id) + ItemInfo[ARMOR][AMOUNT])
		case HE_NADE:
		{
			if (!user_has_weapon(id, CSW_HEGRENADE))
				fm_give_item(id, "weapon_hegrenade")
			else
			{
				fm_give_item(id, "weapon_hegrenade")
				cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + ItemInfo[HE_NADE][AMOUNT])
			}
		}
		case NO_FROST: add_user_immune(id)
		case NO_FLASH: g_bNoFlash[id] = true
		case AWP:
		{
			new iWeapon = fm_give_item(id, "weapon_awp")
			
			if (pev_valid(iWeapon))
			{
				cs_set_weapon_ammo(iWeapon, ItemInfo[AWP][AMOUNT])
			}
		}
		case M3:
		{
			new iWeapon = fm_give_item(id, "weapon_m3")
			
			if (pev_valid(iWeapon))
			{
				cs_set_weapon_ammo(iWeapon, ItemInfo[M3][AMOUNT])
			}
		}
		case DEAGLE:
		{
			new iWeapon = fm_give_item(id, "weapon_deagle")
			
			if (pev_valid(iWeapon))
			{
				cs_set_weapon_ammo(iWeapon, ItemInfo[DEAGLE][AMOUNT])
			}
		}
		case XP: hnsxp_add_user_xp(id, ItemInfo[XP][AMOUNT])
		case RESPAWN:
		{
			if (is_user_alive(id))
			{
				PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "RESPAWN_ALIVE", g_eItems[SHOP_PREFIX])
				return PLUGIN_CONTINUE
			}
			ExecuteHamB(Ham_CS_RoundRespawn, id)
		}
	}
	
	g_iPoints[id] -= ItemInfo[Item][PRICE]
	g_ItemsLimit[id][Item]++
	g_IsBought[id][Item] = true
	
	if (Item == HEALTH || Item == ARMOR || Item == XP)
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "HP_AP_XP_SHOP_ITEMS_CHAT", g_eItems[SHOP_PREFIX], ItemInfo[Item][AMOUNT], szItemNames[Item], ItemInfo[Item][PRICE])
	else
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "ALL_OTHER_ITEMS_CHAT", g_eItems[SHOP_PREFIX], szItemNames[Item], ItemInfo[Item][PRICE])
		
	menu_destroy(iMenu)
	
	Handled:
	return PLUGIN_HANDLED
}

// Anti-Flash - Start
public flash()
{
	new Float:flGameTime = get_gametime()
	
	if (flGameTime - g_flGameTime[1] > 2.5)
	{
		for (new i = 0; i < 32; i++)
			g_iGrenade[i] = 0
	}
}

public eventFlash(id)
{
	new Float:flGameTime = get_gametime()
	
	if (flGameTime != g_flGameTime[0])
	{
		g_iOwner = get_grenade_owner()
		g_flGameTime[0] = flGameTime
		
		for (new i = 0; i < 32; i++)
			g_iTrack[i] = false
			
		g_iTrackEnemy = false
	}
	if (is_user_connected(g_iOwner) && g_bNoFlash[id])
	{
		g_iTrackEnemy = true
		
		message_begin(MSG_ONE, g_iMsgScreenFade, {0,0,0}, id)
		write_short(1)
		write_short(1)
		write_short(1)
		write_byte(0)
		write_byte(0)
		write_byte(0)
		write_byte(255)
		message_end()
	}
}
public flash_delay()
{
	if (!g_iTrackEnemy)
	{
		for (new i = 0; i < 33; i++)
		{
			if (g_iTrack[i] && is_user_connected(i))
			{
				message_begin(MSG_ONE, g_iMsgScreenFade, {0,0,0}, i) 
				write_short(1)
				write_short(1)
				write_short(1)
				write_byte(0)
				write_byte(0)
				write_byte(0)
				write_byte(255)
				message_end()
			}
		}
	}
}

public grenade_throw()
{
	if (g_iSyncData == 0)
		goto Continue
		
	g_iSyncData--
	
	if (read_datanum() < 2)
		return PLUGIN_HANDLED_MAIN
		
	if (read_data(1) == 11 && (read_data(2) == 0 || read_data(2) == 1))
		add_grenade_owner(g_iLast)
	
	Continue:
	return PLUGIN_CONTINUE
}
public fire_in_the_hole()
{
	new szName[32]
	read_data(3, szName, charsmax(szName))
	
	new iTempLast = get_user_index(szName)
	new iJunk
	
	if ((iTempLast == 0) || (!is_user_connected(iTempLast)))
		goto Continue
	
	if (get_user_weapon(iTempLast, iJunk, iJunk) == CSW_FLASHBANG)
	{
		g_iLast  =iTempLast
		g_iSyncData = 2
	}
	
	Continue:
	return PLUGIN_CONTINUE
}

public fire_in_the_hole2()
{
	new szName[32]
	read_data(4, szName, charsmax(szName))
	
	new iTempLast = get_user_index(szName)
	new iJunk
	
	if ((iTempLast == 0) || (!is_user_connected(iTempLast)))
		goto Continue
	
	if (get_user_weapon(iTempLast, iJunk, iJunk) == CSW_FLASHBANG)
	{
		g_iLast  =iTempLast
		g_iSyncData = 2
	}
	
	Continue:
	return PLUGIN_CONTINUE
}
add_grenade_owner(iOwner)
{
	new Float:flGameTime = get_gametime()
	
	g_flGameTime[1] = flGameTime
	
	for (new i = 0; i < 32; i++)
	{
		if (g_iGrenade[i] == 0)
		{
			g_iGrenade[i] = iOwner
			return
		}
	}
}
get_grenade_owner()
{
	new iWhich = g_iGrenade[0]
	
	for (new i = 1; i < 32; i++)
		g_iGrenade[i-1] = g_iGrenade[i]
	
	g_iGrenade[31] = 0
	return iWhich
}

public fw_emitsound(entity, channel, const szSample[], Float:volume, Float:attenuation, fFlags, pitch)
{
	if(!equali(szSample,"weapons/flashbang-1.wav") && !equali(szSample,"weapons/flashbang-2.wav"))
		goto Ignored
	
	new Float:flGameTime = get_gametime()
	
	if(flGameTime != g_flGameTime[0])
	{
		g_iOwner = get_grenade_owner()
		goto Ignored
	}
	
	Ignored:
	return FMRES_IGNORED;
}

/* ================================================
	Shop Points Menu
================================================ */
new g_iPlayer[33], g_iMenuType[33]

public ToggleShopMenu(id)
{
	static szTitle[64]
	formatex(szTitle, charsmax(szTitle), "%s \d~ \wShop Admin Menu", g_eItems[SHOP_MENU_PREFIX])
	new iMenu = menu_create(szTitle, "shopmenu_handler")
	
	menu_additem(iMenu, "\yGive \dPlayer \rBM Points")
	menu_additem(iMenu, "\yTake \dPlayer \rBM Points^n")
	
	menu_setprop(iMenu, MPROP_NUMBER_COLOR, "\w")
	menu_setprop(iMenu, MPROP_EXITNAME, "\yExit \rShop \dAdmin \rMenu\d..")
	menu_display(id, iMenu, 0)
	return PLUGIN_HANDLED
}
public shopmenu_handler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		menu_destroy(iMenu)
		goto Handled
	}
	
	switch(Item)
	{
		case 0: PlayerPointsMenu(id, 1)
		case 1: PlayerPointsMenu(id, 2)
	}
	
	menu_destroy(iMenu)
	Handled:
	return PLUGIN_HANDLED
}

public PlayerPointsMenu(id, iType)
{
	static szTitle[64]
	formatex(szTitle, charsmax(szTitle), "Choose Player to %s XP", iType == 1 ? "Give" : "Take")
	new iMenu = menu_create(szTitle, "points_handler")
	
	g_iMenuType[id] = iType
	
	new iPlayers[32], iNum, iPlayer
	new szName[34], szTempID[10]
	get_players(iPlayers, iNum)
	
	for(new i; i < iNum; i++)
	{
		iPlayer = iPlayers[i]
		if(!is_user_connected(iPlayer))
			continue
		
		get_user_name(iPlayer, szName, sizeof szName - 1)
		num_to_str(iPlayer, szTempID, charsmax(szTempID))
		menu_additem(iMenu, szName, szTempID)
	}
	menu_setprop(iMenu, MPROP_EXITNAME, "Go back..")
	menu_display(id, iMenu, 0)
	return PLUGIN_HANDLED
}
public points_handler(id, iMenu, Item)
{
	if (Item == MENU_EXIT)
	{
		ToggleShopMenu(id)
		g_iMenuType[id] = 0
		goto Handled
	}
	
	new szData[6], iName[64], iAccess, iCallBack
	menu_item_getinfo(iMenu, Item, iAccess, szData, charsmax(szData), iName, charsmax(iName), iCallBack)
	
	g_iPlayer[id] = str_to_num(szData)
	
	if (!is_user_connected(g_iPlayer[id]))
	{
		g_iPlayer[id] = 0
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "NOT_IN_SERVER", g_eItems[SHOP_PREFIX])
		goto Handled
	}
	
	PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "TARGET_POINTS", g_eItems[SHOP_PREFIX], iName, g_iPoints[g_iPlayer[id]])
	
	client_cmd(id, "messagemode BM_Points_Amount")
	menu_destroy(iMenu)
	Handled:
	return PLUGIN_HANDLED
}
public Command_BM_Points_Amount(id, level, cid)
{
	if (!cmd_access(id, level, cid, 1))
		goto Handled
		
	if (!g_iPlayer[id])
		goto Handled
		
	if (!is_user_connected(g_iPlayer[id]))
	{
		PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "NOT_IN_SERVER", g_eItems[SHOP_PREFIX])
		goto Handled
	}
	
	new szArgs[12]
	read_argv(1, szArgs, charsmax(szArgs))
	
	new iBM_Points = str_to_num(szArgs)
	
	new szNames[2][32]
	get_user_name(id, szNames[0], charsmax(szNames[]))
	get_user_name(g_iPlayer[id], szNames[1], charsmax(szNames[]))
	
	switch (g_iMenuType[id])
	{
		case 1:
		{
			g_iPoints[g_iPlayer[id]] += iBM_Points
			PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "ADMIN_GAVE", g_eItems[SHOP_PREFIX], szNames[0], iBM_Points, szNames[1])
		}
		case 2:
		{
			g_iPoints[g_iPlayer[id]] -= iBM_Points
			PrintChatColor(id, g_eItems[PRINT_COLOR], "%L", id, "ADMIN_TAKE", g_eItems[SHOP_PREFIX], szNames[0], iBM_Points, szNames[1])
		}
	}
	g_iPlayer[id] = 0
	g_iMenuType[id] = 0
	
	ToggleShopMenu(id)
	
	Handled:
	return PLUGIN_HANDLED
}
public client_infochanged(id)
{
	if (!is_user_connected(id))
		goto Handled
	
	new szNewName[32], szOldName[32]
	get_user_name(id, szOldName, charsmax(szOldName))
	get_user_info(id, "name", szNewName, charsmax(szNewName))
	
	if (!equal(szNewName, szOldName))
	{
		SaveData(id, szOldName)
		set_task(0.1, "LoadData", id, szNewName, charsmax(szNewName))
		goto Handled
	}
	
	Handled:
	return PLUGIN_HANDLED
}
public SaveData(id, szName[])
{
	new szData[18]
	num_to_str(g_iPoints[id], szData, charsmax(szData))
	
	fvault_set_data(BM_ItemShopDB, szName, szData)
}

public LoadData(szName[], id)
{
	new szData[18]
	
	if (fvault_get_data(BM_ItemShopDB, szName, szData, charsmax(szData)))
		g_iPoints[id] = str_to_num(szData)
	else
		g_iPoints[id] = 0
	
	g_bConnected[id] = true
}
iG-Blockmaker # HNS 100aa
45.144.155.175:27018


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

Обратно към “Поддръжка / Помощ”

Кой е на линия

Потребители разглеждащи този форум: Bing [Bot] и 11 госта