Заявка за редактиране на VIP плъгин

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
bruttarazza
Извън линия
Потребител
Потребител
Мнения: 26
Регистриран на: 18 Окт 2020, 19:51
Се отблагодари: 6 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Заявка за редактиране на VIP плъгин

Мнение от bruttarazza » 26 Ное 2020, 18:46

Здравейте, може ли този плъгин да се редактира следното нещо.
От менюто да се премахне избора на M249, като на негово място се сложи FAMAS и бъде достъпен от рунд 3.
re_vipka.sma
(15.18 KiB) Свалено 106 пъти
re_vipka.sma
(15.18 KiB) Свалено 106 пъти

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

Заявка за редактиране на VIP плъгин

Мнение от gadinkata » 26 Ное 2020, 21:21

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


/*************************************************************************************************
*  Возможности:
*  1. Префикс сообщений от плагина
*  2. VipMenu (vipmenu, /vipmenu) - оружия: ak47, m4a1, awp, пулемет.
*  3. Так же работают чат команды: /ak47, /m4a1, /awp, /b51.
*  4. AWP и Пулемет можно использовать с N round (настраивается).
*  5. Не работает на картах awp_, аim_, 35hp, fy_
*  6. Дополнительные HP за убийства (настраивается)
*  7. Автовыдача дигла при спавне (отключаемо), если включено можно выставить с N round (настраивается).
*  8. Автовыдача гранат при спавне (отключаемо), если включено можно выставить с N round (настраивается).
*  9. Выдача брони при спавне с N round (настраивается).
*  10. Выдача дефузов за кт при спавне с N round (настраивается).
*  11. Срок до конда с Admin Loader by Neugomon (отключаемо).
*  12. VIP статус в TAB (отключаемо).
*  13. Сообщение при подключении игрока.
*  14. Звук при заходе вип игрока (отключаемо).
*  15. Дамагер (отключаемо).
*  16. Переключение дамагера (setinfo) по команде в чат /damager
*************************************************************************************************/

#include <amxmodx>
#include <engine>
#include <reapi>

#if AMXX_VERSION_NUM < 183
	#include <colorchat>
#endif

/* Конфигурационные defines */
#define VIP_ACCESS      ADMIN_IMMUNITY      // Флаг доступа VIP (по дефолту флаг "t" ADMIN_LEVEL_H)
#define PREFIX          "^1[^4Sector SuperVIP^1]^1"    // Префикс перед сообщениями ( ^1 - желтый ^3 - цвет команды ^4 - зеленый )
#define VIPROUND        3                  // C какого round можно открыть VIP меню
#define AWPM249RND      3                  // С какого round доступны AWP и пулемет
#define ADDHP_HS        0.0               // Кол-во добавляемого HP за убийство в голову (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define ADDHP           0.0                // Кол-во добавляемого HP за убийство (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define MAXHP           100.0              // Максимальное количество HP
#define VIPAUTODEAGLE                      // В начале каждого round давать Deagle (закомментируйте если не надо)
#define VIPAUTOGRENADE                     // Давать в начале каждого round гранаты (закомментируйте если не надо)
#define ROUND_NADES     1                  // С какого round давать гранаты (если раскомментировано VIPAUTOGRENADE иначе нет смысла менять работать не будет)
#define ROUND_DEAGLE    1                  // С какого round давать deagle (если раскомментировано VIPAUTODEAGLE иначе нет смысла менять работать не будет)
#define ROUND_ARMOR     2                  // С какого round давать броню
#define ROUND_DEFUSE    1                  // С какого round давать defuse kit
#define AUTOVIPMENU                        // Автоматически открывать в начале рануда Вип меню (выключено по дефолту)
//#define VIPTAB                             // Показывать статус VIP в таблице на tab (закомментируйте если не надо)
//#define ADMIN_LOADER                       // Срок до конца с Admin Loader by Neugomon (закомментируйте если не надо)
//#define SOUND_CONNECT                      // Звук при заходе вип игрока (раскомментируйте если надо)
#define DAMAGER                            // дамагер лесенкой (раскомментируйте если надо)
#define FIFTH_ITEM                         // 5-й пункт в випке переключение дамагера по нажатию (раскомментируйте если надо + раскомментировать DAMAGER)
/* Конфигурационные defines */

#define isUserVip(%0) (get_user_flags(%0) & VIP_ACCESS)
#define isUserVipr(%0) ((get_user_flags(%0) & ADMIN_RESERVATION) || (get_user_flags(%0) & VIP_ACCESS))
#define IsPlayer(%1)  (1 <= %1 <= g_iMaxPlayers)

#if defined ADMIN_LOADER
	native admin_expired(index);
#endif

#if defined DAMAGER
	new const Float:g_fCoords[][] = { {0.52, 0.52}, {0.54, 0.54}, {0.56, 0.56}, {0.58, 0.58}, {0.60, 0.60}, {0.62, 0.62} };
	new g_iPlayerPos[33];
	new g_iSyncMsgDmg;
#endif

new g_iRoundCount;
new bool:g_bUseWeapon[33];
new bool:g_bBlockBonus;
new bool:g_bUserVip[33];
new g_iSyncMsgAddHP;
new g_iMaxPlayers;
new g_bShow = true;
new g_isSwitchDmg[33] = {0, ...};
new g_szText[3] = "";

public plugin_init() {
	register_plugin("[ReAPI] Vip System", "1.4.0", "Dager* *.* -G-");
#if defined DAMAGER
	register_clcmd("say /damager", "cmdSwitchDmg");
	register_clcmd("say_team /damager", "cmdSwitchDmg");
#endif
	register_clcmd("say /svipmenu", "cmdVipMenu");
	register_clcmd("say_team /svipmenu", "cmdVipMenu");
	register_clcmd("svipmenu", "cmdVipMenu");
	register_clcmd("say", "hook_say");
	register_clcmd("say_team", "hook_say");
#if defined FIFTH_ITEM
	register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5, "VipMenuHandler");
#else
	register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4, "VipMenuHandler");
#endif
	RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Pre", false);
	RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
	RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true);
#if defined DAMAGER
	RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
#endif
	new szMapName[32], iMap_Prefix[][] = { "awp_", "aim_", "35hp", "fy_" };
	rh_get_mapname(szMapName, charsmax(szMapName));
	for(new i; i < sizeof iMap_Prefix; i++) {
		if(containi(szMapName, iMap_Prefix[i]) != -1) {
			g_bBlockBonus = true;
		}
	}
#if defined VIPTAB
	if(!get_member_game(m_bMapHasVIPSafetyZone)) {
		register_message(get_user_msgid("ScoreAttrib"), "msgScoreAttrib");
	}
#endif
#if defined DAMAGER
	g_iSyncMsgDmg = CreateHudSyncObj();
#endif
	g_iSyncMsgAddHP = CreateHudSyncObj();
	g_iMaxPlayers = get_member_game(m_nMaxPlayers);
}

#if defined VIPTAB
public msgScoreAttrib() {
	if(isUserVipr(get_msg_arg_int(1)) && !get_msg_arg_int(2)) {
		set_msg_arg_int(2, ARG_BYTE, (1<<2));
	}
}
#endif

public CSGameRules_RestartRound_Pre() {
	if(get_member_game(m_bCompleteReset)) {
		g_iRoundCount = 0;
	}
	g_iRoundCount++;
	arrayset(g_bUseWeapon, false, sizeof g_bUseWeapon);
}

public client_putinserver(id) {
	if(g_bShow) {
		get_user_info(id, "_damager", g_szText, charsmax(g_szText));
		g_isSwitchDmg[id] = (g_szText[0]) ? str_to_num(g_szText) : 1;
	} else {
		g_isSwitchDmg[id] = 0;
	}
	if(!isUserVip(id)) {
		return;
	}
	static szName[32];
	get_entvar(id, var_netname, szName, charsmax(szName));
#if defined SOUND_CONNECT
	client_cmd(0, "spk buttons/blip1.wav");
#endif
	client_print_color(0, print_team_default, "%s ^1%s ^4vleze w servera! ", PREFIX, szName);
}

public CBasePlayer_Killed(pevVictim, pevAttacker) {
	if(IsPlayer(pevVictim) && IsPlayer(pevAttacker) && isUserVip(pevAttacker) && pevVictim != pevAttacker) {
		static Float:attackerHp, Float:addHp;
		attackerHp = Float:get_entvar(pevAttacker, var_health);
		addHp = get_member(pevVictim, m_bHeadshotKilled) ? ADDHP_HS : ADDHP;
		attackerHp += addHp;
		set_entvar(pevAttacker, var_health, attackerHp > MAXHP ? MAXHP : attackerHp);
		if(attackerHp >= MAXHP) {
			return;
		}
		if(addHp > 0.0) {
			set_hudmessage(0, 255, 0, 0.6, 0.4, 2, 1.0, 1.5, 0.1, 0.3, -1);
			ShowSyncHudMsg(pevAttacker, g_iSyncMsgAddHP, "+%.0f hp", addHp);
		}
	}
	return;
}

#if defined DAMAGER
public CBasePlayer_TakeDamage(victim, inflictor, attacker, Float:damage) {
	if(g_isSwitchDmg[attacker] && is_user_connected(attacker) && IsPlayer(attacker) && ent_sees_ent(attacker, victim) && get_member(victim, m_iTeam) != get_member(attacker, m_iTeam) && isUserVip(attacker)) {
		static g_iDamage;
		g_iDamage = floatround(damage, floatround_floor);
		if(g_iDamage > 0) {
			static iPos;
			iPos = ++g_iPlayerPos[attacker];
			if(iPos == sizeof(g_fCoords)) {
				iPos = g_iPlayerPos[attacker] = 0;
			}
			set_hudmessage(200, 100, 100, Float:g_fCoords[iPos][0], Float:g_fCoords[iPos][1], 2, 0.2, 0.5, 0.02, 0.5, -1);
			ShowSyncHudMsg(attacker, g_iSyncMsgDmg, "%d^n", g_iDamage);
		}
	}
}
#endif

public CBasePlayer_Spawn(id) {
	if(g_bBlockBonus || !is_user_alive(id)) {
		return 0;
	}
	if(isUserVip(id)) { 
		g_bUserVip[id] = true;
	} else { 
		return g_bUserVip[id] = false;
	}
#if defined VIPAUTOGRENADE
	if(g_iRoundCount >= ROUND_NADES) {
		rg_give_item(id, "weapon_hegrenade", GT_APPEND);
		rg_give_item(id, "weapon_flashbang", GT_APPEND);
		rg_give_item(id, "weapon_flashbang", GT_APPEND);
		rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
	}
#endif
#if defined VIPAUTODEAGLE
	if(g_iRoundCount >= ROUND_DEAGLE) {
		rg_give_item(id, "weapon_deagle", GT_REPLACE);
		rg_set_user_bpammo(id, WEAPON_DEAGLE, 35);
	}
#endif
	if(g_iRoundCount >= ROUND_ARMOR) {
		rg_set_user_armor(id, 100, ARMOR_VESTHELM);
	}
	if(g_iRoundCount >= ROUND_DEFUSE) {
		new TeamName:team = get_member(id, m_iTeam);
		if(team == TEAM_CT) {
			rg_give_defusekit(id, true);
		}
	}
#if defined AUTOVIPMENU
	return cmdVipMenu(id);
#else
	return 0;
#endif
}

public hook_say(id) {
	static szMsg[128];
	read_args(szMsg, 127);
	remove_quotes(szMsg);
	if(szMsg[0] != '/') {
		return 0;
	}
	static const szChoosedWP[][] = { "/ak47", "/m4a1", "/awp", "/b51" };
	for(new i; i < sizeof szChoosedWP; i++) {
		if(!strcmp(szMsg, szChoosedWP[i])) {
			if(!isAllowToUse(id)) { 
				break;
			}
			if(i > 1 && g_iRoundCount < AWPM249RND) {
				return client_print_color(id, 0, "%s Orajieto e dostapno ot ^3%d ^1rund!", PREFIX, AWPM249RND);
			}
			return VipMenuHandler(id, i);
		}
	}
	return 0;
}

public cmdVipMenu(id) {
	if(!isAllowToUse(id)) {
		return 0;
	}
	static szMenu[512], iLen, iKey;
	iKey = MENU_KEY_0;
#if defined ADMIN_LOADER
	new iExp = admin_expired(id);
	if(iExp > 0) {
		new sysTime = get_systime();
		if(iExp - sysTime > 0) {
			if((iExp - sysTime) / 86400 > 0) {
				iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%d дн.\r]^n^n", ((iExp - sysTime) / 86400));
			} else {
				iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%dч. %dмин.\r]^n^n", ((iExp - sysTime) / 3600), (((iExp - sysTime) / 60) - (((iExp - sysTime) / 3600) * 60)));
			}
		}
	} else if(iExp == 0) {
		iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu^n^n");
	}
#else
	iLen = formatex(szMenu, charsmax(szMenu), "\ySuperVIP Menu^n^n");
#endif
	iKey |= MENU_KEY_1|MENU_KEY_2;
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wBezplatno \yAK47^n\r2. \wBezplatno \yM4A1^n");
	if(g_iRoundCount < AWPM249RND) {
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \dBezplatno AWP \r[ot %d rund]^n\r4. \dBezplatno M249 \r[ot %d rund]^n^n", AWPM249RND, AWPM249RND);
	} else {
		iKey |= MENU_KEY_3|MENU_KEY_4;
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r3. \wBezplatno \yAWP^n\r4. \wBezplatno \yM249^n^n");
	}
#if defined FIFTH_ITEM
	iKey |= MENU_KEY_5;
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \wPokazwane na hitovete \r[\y%s\r]^n^n", g_isSwitchDmg[id] ? "Aktivno" : "Neaktivno");
#endif
	formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wIzhod");
	show_menu(id, iKey, szMenu, -1, "VipMenu");
	return PLUGIN_HANDLED;
}

public VipMenuHandler(id, iKey) {
#if defined FIFTH_ITEM
	if(iKey > 4 || g_bUseWeapon[id]) {
		return 0;
	}
#else
	if(iKey > 3 || g_bUseWeapon[id]) {
		return 0;
	}
#endif
	switch(iKey) {
		case 0..3: {
			static const szChoosedBP[] = { 90, 90, 30, 90 };
			static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_awp", "weapon_famas" };
			g_bUseWeapon[id] = true;
			return give_item_ex(id, szChoosedWP[iKey], szChoosedBP[iKey]);
		}
#if defined FIFTH_ITEM
		case 4: {
			g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
			num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
			client_cmd(id, "setinfo _damager %s", g_szText);
			return cmdVipMenu(id);
		}
#endif
	}
	return PLUGIN_HANDLED;
}

stock give_item_ex(id, currWeaponName[], ammoAmount) {
	rg_give_item(id, currWeaponName, GT_REPLACE);
	rg_set_user_bpammo(id, rg_get_weapon_info(currWeaponName, WI_ID), ammoAmount);
	engclient_cmd(id, currWeaponName);
	return PLUGIN_HANDLED;
}

bool:isAllowToUse(id) {
	if(!g_bUserVip[id]) {
		client_print_color(id, print_team_default, "%s Samo SuperVIP igrachite imat dostap do tazi komanda!", PREFIX);
		return false;
	}
	if(!is_user_alive(id)) {
		client_print_color(id, print_team_default, "%s Triabva da si jiv za da polzwash tazi komanda!", PREFIX);
		return false;
	}
	if(!g_iRoundCount) {
		client_print_color(id, print_team_default, "%s Tazi komanda e zabranena pyrvite rundove!", PREFIX);
		return false;
	}
	if(g_bUseWeapon[id]) {
		client_print_color(id, print_team_default, "%s Veche si wzel orajie tozi rund!", PREFIX);
		return false;
	}
	if(g_iRoundCount < VIPROUND) {
		client_print_color(id, print_team_default, "%s Bezplatnite orajiq shte sa dostapni ot ^3%d ^1rund!", PREFIX, VIPROUND);
		return false;
	}
	return true;
}

public cmdSwitchDmg(id) {
	if(!isUserVip(id)) {
		client_print_color(id, print_team_default, "%s Tazi komanda e samo za SuperVIP igrachi!", PREFIX);
		return 0;
	}
	g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
	num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
	client_cmd(id, "setinfo _damager %s", g_szText);
	new szSwitch[20];
	format(szSwitch, charsmax(szSwitch), "%s", g_isSwitchDmg[id] ? "Aktivira" : "Deaktivira");
	client_print_color(id, print_team_default, "%s Ti uspeshno ^3%s ^1pokazwaneto na hitovete", PREFIX, szSwitch);
	return PLUGIN_CONTINUE;
}

stock bool:ent_sees_ent(iEnt, iEnt2)
{
	static Float:fEntOrigin[3], Float:fEnt2Origin[3], Float:fResult[3];
	entity_get_vector(iEnt, EV_VEC_origin, fEntOrigin);
	entity_get_vector(iEnt2, EV_VEC_origin, fEnt2Origin);
	return trace_line(iEnt, fEntOrigin, fEnt2Origin, fResult) == iEnt2;
}

Аватар
bruttarazza
Извън линия
Потребител
Потребител
Мнения: 26
Регистриран на: 18 Окт 2020, 19:51
Се отблагодари: 6 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Заявка за редактиране на VIP плъгин

Мнение от bruttarazza » 26 Ное 2020, 21:38

Има ли някакъв вариант фамаса да се отдели от АВП-то. Защото сега на 3тия рунд отключва и авп-то, а идеята е авп-то да е достъпно на по-късен етап от играта.

EDIT 22:20/26.11.20 :
Успях да разделя AWP от FAMAS, но има проблем с оцветяването на съобщенията. 1. 2. 3. 4. 5. трябва да са в червено, но 4 и 5 се чупят. Прилагам снимки и прикачвам кода

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

/*************************************************************************************************
*  Возможности:
*  1. Префикс сообщений от плагина
*  2. VipMenu (vipmenu, /vipmenu) - оружия: ak47, m4a1, awp, пулемет.
*  3. Так же работают чат команды: /ak47, /m4a1, /awp, /b51.
*  4. AWP и Пулемет можно использовать с N round (настраивается).
*  5. Не работает на картах awp_, аim_, 35hp, fy_
*  6. Дополнительные HP за убийства (настраивается)
*  7. Автовыдача дигла при спавне (отключаемо), если включено можно выставить с N round (настраивается).
*  8. Автовыдача гранат при спавне (отключаемо), если включено можно выставить с N round (настраивается).
*  9. Выдача брони при спавне с N round (настраивается).
*  10. Выдача дефузов за кт при спавне с N round (настраивается).
*  11. Срок до конда с Admin Loader by Neugomon (отключаемо).
*  12. VIP статус в TAB (отключаемо).
*  13. Сообщение при подключении игрока.
*  14. Звук при заходе вип игрока (отключаемо).
*  15. Дамагер (отключаемо).
*  16. Переключение дамагера (setinfo) по команде в чат /damager
*************************************************************************************************/

#include <amxmodx>
#include <engine>
#include <reapi>

#if AMXX_VERSION_NUM < 183
	#include <colorchat>
#endif

/* Конфигурационные defines */
#define VIP_ACCESS      ADMIN_IMMUNITY      // Флаг доступа VIP (по дефолту флаг "t" ADMIN_LEVEL_H)
#define PREFIX          "^1[^4Sector SuperVIP^1]^1"    // Префикс перед сообщениями ( ^1 - желтый ^3 - цвет команды ^4 - зеленый )
#define VIPROUND        3                  // C какого round можно открыть VIP меню
#define AWPRND      5 // С какого round доступны AWP и пулемет
#define ADDHP_HS        0.0               // Кол-во добавляемого HP за убийство в голову (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define ADDHP           0.0                // Кол-во добавляемого HP за убийство (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define MAXHP           100.0              // Максимальное количество HP
#define VIPAUTODEAGLE                      // В начале каждого round давать Deagle (закомментируйте если не надо)
#define VIPAUTOGRENADE                     // Давать в начале каждого round гранаты (закомментируйте если не надо)
#define ROUND_NADES     1                  // С какого round давать гранаты (если раскомментировано VIPAUTOGRENADE иначе нет смысла менять работать не будет)
#define ROUND_DEAGLE    1                  // С какого round давать deagle (если раскомментировано VIPAUTODEAGLE иначе нет смысла менять работать не будет)
#define ROUND_ARMOR     2                  // С какого round давать броню
#define ROUND_DEFUSE    1                  // С какого round давать defuse kit
#define AUTOVIPMENU                        // Автоматически открывать в начале рануда Вип меню (выключено по дефолту)
//#define VIPTAB                             // Показывать статус VIP в таблице на tab (закомментируйте если не надо)
//#define ADMIN_LOADER                       // Срок до конца с Admin Loader by Neugomon (закомментируйте если не надо)
//#define SOUND_CONNECT                      // Звук при заходе вип игрока (раскомментируйте если надо)
#define DAMAGER                            // дамагер лесенкой (раскомментируйте если надо)
#define FIFTH_ITEM                         // 5-й пункт в випке переключение дамагера по нажатию (раскомментируйте если надо + раскомментировать DAMAGER)
/* Конфигурационные defines */

#define isUserVip(%0) (get_user_flags(%0) & VIP_ACCESS)
#define isUserVipr(%0) ((get_user_flags(%0) & ADMIN_RESERVATION) || (get_user_flags(%0) & VIP_ACCESS))
#define IsPlayer(%1)  (1 <= %1 <= g_iMaxPlayers)

#if defined ADMIN_LOADER
	native admin_expired(index);
#endif

#if defined DAMAGER
	new const Float:g_fCoords[][] = { {0.52, 0.52}, {0.54, 0.54}, {0.56, 0.56}, {0.58, 0.58}, {0.60, 0.60}, {0.62, 0.62} };
	new g_iPlayerPos[33];
	new g_iSyncMsgDmg;
#endif

new g_iRoundCount;
new bool:g_bUseWeapon[33];
new bool:g_bBlockBonus;
new bool:g_bUserVip[33];
new g_iSyncMsgAddHP;
new g_iMaxPlayers;
new g_bShow = true;
new g_isSwitchDmg[33] = {0, ...};
new g_szText[3] = "";

public plugin_init() {
	register_plugin("[ReAPI] Vip System", "1.4.0", "Dager* *.* -G-");
#if defined DAMAGER
	register_clcmd("say /damager", "cmdSwitchDmg");
	register_clcmd("say_team /damager", "cmdSwitchDmg");
#endif
	register_clcmd("say /svipmenu", "cmdVipMenu");
	register_clcmd("say_team /svipmenu", "cmdVipMenu");
	register_clcmd("svipmenu", "cmdVipMenu");
	register_clcmd("say", "hook_say");
	register_clcmd("say_team", "hook_say");
#if defined FIFTH_ITEM
	register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5, "VipMenuHandler");
#else
	register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4, "VipMenuHandler");
#endif
	RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Pre", false);
	RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
	RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true);
#if defined DAMAGER
	RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
#endif
	new szMapName[32], iMap_Prefix[][] = { "awp_", "aim_", "35hp", "fy_" };
	rh_get_mapname(szMapName, charsmax(szMapName));
	for(new i; i < sizeof iMap_Prefix; i++) {
		if(containi(szMapName, iMap_Prefix[i]) != -1) {
			g_bBlockBonus = true;
		}
	}
#if defined VIPTAB
	if(!get_member_game(m_bMapHasVIPSafetyZone)) {
		register_message(get_user_msgid("ScoreAttrib"), "msgScoreAttrib");
	}
#endif
#if defined DAMAGER
	g_iSyncMsgDmg = CreateHudSyncObj();
#endif
	g_iSyncMsgAddHP = CreateHudSyncObj();
	g_iMaxPlayers = get_member_game(m_nMaxPlayers);
}

#if defined VIPTAB
public msgScoreAttrib() {
	if(isUserVipr(get_msg_arg_int(1)) && !get_msg_arg_int(2)) {
		set_msg_arg_int(2, ARG_BYTE, (1<<2));
	}
}
#endif

public CSGameRules_RestartRound_Pre() {
	if(get_member_game(m_bCompleteReset)) {
		g_iRoundCount = 0;
	}
	g_iRoundCount++;
	arrayset(g_bUseWeapon, false, sizeof g_bUseWeapon);
}

public client_putinserver(id) {
	if(g_bShow) {
		get_user_info(id, "_damager", g_szText, charsmax(g_szText));
		g_isSwitchDmg[id] = (g_szText[0]) ? str_to_num(g_szText) : 1;
	} else {
		g_isSwitchDmg[id] = 0;
	}
	if(!isUserVip(id)) {
		return;
	}
	static szName[32];
	get_entvar(id, var_netname, szName, charsmax(szName));
#if defined SOUND_CONNECT
	client_cmd(0, "spk buttons/blip1.wav");
#endif
	client_print_color(0, print_team_default, "%s ^1%s ^4vleze w servera! ", PREFIX, szName);
}

public CBasePlayer_Killed(pevVictim, pevAttacker) {
	if(IsPlayer(pevVictim) && IsPlayer(pevAttacker) && isUserVip(pevAttacker) && pevVictim != pevAttacker) {
		static Float:attackerHp, Float:addHp;
		attackerHp = Float:get_entvar(pevAttacker, var_health);
		addHp = get_member(pevVictim, m_bHeadshotKilled) ? ADDHP_HS : ADDHP;
		attackerHp += addHp;
		set_entvar(pevAttacker, var_health, attackerHp > MAXHP ? MAXHP : attackerHp);
		if(attackerHp >= MAXHP) {
			return;
		}
		if(addHp > 0.0) {
			set_hudmessage(0, 255, 0, 0.6, 0.4, 2, 1.0, 1.5, 0.1, 0.3, -1);
			ShowSyncHudMsg(pevAttacker, g_iSyncMsgAddHP, "+%.0f hp", addHp);
		}
	}
	return;
}

#if defined DAMAGER
public CBasePlayer_TakeDamage(victim, inflictor, attacker, Float:damage) {
	if(g_isSwitchDmg[attacker] && is_user_connected(attacker) && IsPlayer(attacker) && ent_sees_ent(attacker, victim) && get_member(victim, m_iTeam) != get_member(attacker, m_iTeam) && isUserVip(attacker)) {
		static g_iDamage;
		g_iDamage = floatround(damage, floatround_floor);
		if(g_iDamage > 0) {
			static iPos;
			iPos = ++g_iPlayerPos[attacker];
			if(iPos == sizeof(g_fCoords)) {
				iPos = g_iPlayerPos[attacker] = 0;
			}
			set_hudmessage(200, 100, 100, Float:g_fCoords[iPos][0], Float:g_fCoords[iPos][1], 2, 0.2, 0.5, 0.02, 0.5, -1);
			ShowSyncHudMsg(attacker, g_iSyncMsgDmg, "%d^n", g_iDamage);
		}
	}
}
#endif

public CBasePlayer_Spawn(id) {
	if(g_bBlockBonus || !is_user_alive(id)) {
		return 0;
	}
	if(isUserVip(id)) { 
		g_bUserVip[id] = true;
	} else { 
		return g_bUserVip[id] = false;
	}
#if defined VIPAUTOGRENADE
	if(g_iRoundCount >= ROUND_NADES) {
		rg_give_item(id, "weapon_hegrenade", GT_APPEND);
		rg_give_item(id, "weapon_flashbang", GT_APPEND);
		rg_give_item(id, "weapon_flashbang", GT_APPEND);
		rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
	}
#endif
#if defined VIPAUTODEAGLE
	if(g_iRoundCount >= ROUND_DEAGLE) {
		rg_give_item(id, "weapon_deagle", GT_REPLACE);
		rg_set_user_bpammo(id, WEAPON_DEAGLE, 35);
	}
#endif
	if(g_iRoundCount >= ROUND_ARMOR) {
		rg_set_user_armor(id, 100, ARMOR_VESTHELM);
	}
	if(g_iRoundCount >= ROUND_DEFUSE) {
		new TeamName:team = get_member(id, m_iTeam);
		if(team == TEAM_CT) {
			rg_give_defusekit(id, true);
		}
	}
#if defined AUTOVIPMENU
	return cmdVipMenu(id);
#else
	return 0;
#endif
}

public hook_say(id) {
	static szMsg[128];
	read_args(szMsg, 127);
	remove_quotes(szMsg);
	if(szMsg[0] != '/') {
		return 0;
	}
	static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp" };
	for(new i; i < sizeof szChoosedWP; i++) {
		if(!strcmp(szMsg, szChoosedWP[i])) {
			if(!isAllowToUse(id)) { 
				break;
			}
			if(i > 1 && g_iRoundCount < AWPRND) {
				return client_print_color(id, 0, "%s Orajieto e dostapno ot ^3%d ^1rund!", PREFIX, AWPRND);
			}
			return VipMenuHandler(id, i);
		}
	}
	return 0;
}

public cmdVipMenu(id) {
	if(!isAllowToUse(id)) {
		return 0;
	}
	static szMenu[512], iLen, iKey;
	iKey = MENU_KEY_0;
#if defined ADMIN_LOADER
	new iExp = admin_expired(id);
	if(iExp > 0) {
		new sysTime = get_systime();
		if(iExp - sysTime > 0) {
			if((iExp - sysTime) / 86400 > 0) {
				iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%d дн.\r]^n^n", ((iExp - sysTime) / 86400));
			} else {
				iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%dч. %dмин.\r]^n^n", ((iExp - sysTime) / 3600), (((iExp - sysTime) / 60) - (((iExp - sysTime) / 3600) * 60)));
			}
		}
	} else if(iExp == 0) {
		iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu^n^n");
	}
#else
	iLen = formatex(szMenu, charsmax(szMenu), "\ySuperVIP Menu^n^n");
#endif
	iKey |= MENU_KEY_1|MENU_KEY_2|MENU_KEY_3;
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wBezplatno \yAK47^n\r2. \wBezplatno \yM4A1^n\r3. \wBezplatno \yFAMAS^n\");
	if(g_iRoundCount < AWPRND) {
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dBezplatno AWP \r[ot %d rund]^n^n", AWPRND);
	} else {
		iKey |= MENU_KEY_4;
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wBezplatno \yAWP^n\");
	}
#if defined FIFTH_ITEM
	iKey |= MENU_KEY_5;
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \wPokazwane na hitovete \r[\y%s\r]^n^n", g_isSwitchDmg[id] ? "Aktivno" : "Neaktivno");
#endif
	formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wIzhod");
	show_menu(id, iKey, szMenu, -1, "VipMenu");
	return PLUGIN_HANDLED;
}

public VipMenuHandler(id, iKey) {
#if defined FIFTH_ITEM
	if(iKey > 4 || g_bUseWeapon[id]) {
		return 0;
	}
#else
	if(iKey > 3 || g_bUseWeapon[id]) {
		return 0;
	}
#endif
	switch(iKey) {
		case 0..3: {
			static const szChoosedBP[] = { 90, 90, 90, 30 };
			static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_awp" };
			g_bUseWeapon[id] = true;
			return give_item_ex(id, szChoosedWP[iKey], szChoosedBP[iKey]);
		}
#if defined FIFTH_ITEM
		case 4: {
			g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
			num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
			client_cmd(id, "setinfo _damager %s", g_szText);
			return cmdVipMenu(id);
		}
#endif
	}
	return PLUGIN_HANDLED;
}

stock give_item_ex(id, currWeaponName[], ammoAmount) {
	rg_give_item(id, currWeaponName, GT_REPLACE);
	rg_set_user_bpammo(id, rg_get_weapon_info(currWeaponName, WI_ID), ammoAmount);
	engclient_cmd(id, currWeaponName);
	return PLUGIN_HANDLED;
}

bool:isAllowToUse(id) {
	if(!g_bUserVip[id]) {
		client_print_color(id, print_team_default, "%s Samo SuperVIP igrachite imat dostap do tazi komanda!", PREFIX);
		return false;
	}
	if(!is_user_alive(id)) {
		client_print_color(id, print_team_default, "%s Triabva da si jiv za da polzwash tazi komanda!", PREFIX);
		return false;
	}
	if(!g_iRoundCount) {
		client_print_color(id, print_team_default, "%s Tazi komanda e zabranena pyrvite rundove!", PREFIX);
		return false;
	}
	if(g_bUseWeapon[id]) {
		client_print_color(id, print_team_default, "%s Veche si wzel orajie tozi rund!", PREFIX);
		return false;
	}
	if(g_iRoundCount < VIPROUND) {
		client_print_color(id, print_team_default, "%s Bezplatnite orajiq shte sa dostapni ot ^3%d ^1rund!", PREFIX, VIPROUND);
		return false;
	}
	return true;
}

public cmdSwitchDmg(id) {
	if(!isUserVip(id)) {
		client_print_color(id, print_team_default, "%s Tazi komanda e samo za SuperVIP igrachi!", PREFIX);
		return 0;
	}
	g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
	num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
	client_cmd(id, "setinfo _damager %s", g_szText);
	new szSwitch[20];
	format(szSwitch, charsmax(szSwitch), "%s", g_isSwitchDmg[id] ? "Aktivira" : "Deaktivira");
	client_print_color(id, print_team_default, "%s Ti uspeshno ^3%s ^1pokazwaneto na hitovete", PREFIX, szSwitch);
	return PLUGIN_CONTINUE;
}

stock bool:ent_sees_ent(iEnt, iEnt2)
{
	static Float:fEntOrigin[3], Float:fEnt2Origin[3], Float:fResult[3];
	entity_get_vector(iEnt, EV_VEC_origin, fEntOrigin);
	entity_get_vector(iEnt2, EV_VEC_origin, fEnt2Origin);
	return trace_line(iEnt, fEntOrigin, fEnt2Origin, fResult) == iEnt2;
}
Докато AWP е все още заключено
Изображение

След като се отключи и AWP
Изображение

Може ли да оправите цветовете?

Аватар
TryAgain
Извън линия
Потребител
Потребител
Мнения: 182
Регистриран на: 25 Яну 2017, 16:59
Се отблагодари: 1 път
Получена благодарност: 26 пъти

Заявка за редактиране на VIP плъгин

Мнение от TryAgain » 27 Ное 2020, 06:17

За да смениш от кой рунд да ти е AWP-то го има на ред номер:33

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

#define AWPRND      	5 // С какого round доступны AWP и пулемет
Иначе пробвай така :)

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

/*************************************************************************************************
*  Возможности:
*  1. Префикс сообщений от плагина
*  2. VipMenu (vipmenu, /vipmenu) - оружия: ak47, m4a1, awp, пулемет.
*  3. Так же работают чат команды: /ak47, /m4a1, /awp, /b51.
*  4. AWP и Пулемет можно использовать с N round (настраивается).
*  5. Не работает на картах awp_, аim_, 35hp, fy_
*  6. Дополнительные HP за убийства (настраивается)
*  7. Автовыдача дигла при спавне (отключаемо), если включено можно выставить с N round (настраивается).
*  8. Автовыдача гранат при спавне (отключаемо), если включено можно выставить с N round (настраивается).
*  9. Выдача брони при спавне с N round (настраивается).
*  10. Выдача дефузов за кт при спавне с N round (настраивается).
*  11. Срок до конда с Admin Loader by Neugomon (отключаемо).
*  12. VIP статус в TAB (отключаемо).
*  13. Сообщение при подключении игрока.
*  14. Звук при заходе вип игрока (отключаемо).
*  15. Дамагер (отключаемо).
*  16. Переключение дамагера (setinfo) по команде в чат /damager
*************************************************************************************************/

#include <amxmodx>
#include <engine>
#include <reapi>

#if AMXX_VERSION_NUM < 183
	#include <colorchat>
#endif

/* Конфигурационные defines */
#define VIP_ACCESS      ADMIN_IMMUNITY      // Флаг доступа VIP (по дефолту флаг "t" ADMIN_LEVEL_H)
#define PREFIX          "^1[^4Sector SuperVIP^1]^1"    // Префикс перед сообщениями ( ^1 - желтый ^3 - цвет команды ^4 - зеленый )
#define VIPROUND        3                  // C какого round можно открыть VIP меню
#define AWPRND      	5 // С какого round доступны AWP и пулемет
#define ADDHP_HS        0.0               // Кол-во добавляемого HP за убийство в голову (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define ADDHP           0.0                // Кол-во добавляемого HP за убийство (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define MAXHP           100.0              // Максимальное количество HP
#define VIPAUTODEAGLE                      // В начале каждого round давать Deagle (закомментируйте если не надо)
#define VIPAUTOGRENADE                     // Давать в начале каждого round гранаты (закомментируйте если не надо)
#define ROUND_NADES     1                  // С какого round давать гранаты (если раскомментировано VIPAUTOGRENADE иначе нет смысла менять работать не будет)
#define ROUND_DEAGLE    1                  // С какого round давать deagle (если раскомментировано VIPAUTODEAGLE иначе нет смысла менять работать не будет)
#define ROUND_ARMOR     2                  // С какого round давать броню
#define ROUND_DEFUSE    1                  // С какого round давать defuse kit
#define AUTOVIPMENU                        // Автоматически открывать в начале рануда Вип меню (выключено по дефолту)
//#define VIPTAB                             // Показывать статус VIP в таблице на tab (закомментируйте если не надо)
//#define ADMIN_LOADER                       // Срок до конца с Admin Loader by Neugomon (закомментируйте если не надо)
//#define SOUND_CONNECT                      // Звук при заходе вип игрока (раскомментируйте если надо)
#define DAMAGER                            // дамагер лесенкой (раскомментируйте если надо)
#define FIFTH_ITEM                         // 5-й пункт в випке переключение дамагера по нажатию (раскомментируйте если надо + раскомментировать DAMAGER)
/* Конфигурационные defines */

#define isUserVip(%0) (get_user_flags(%0) & VIP_ACCESS)
#define isUserVipr(%0) ((get_user_flags(%0) & ADMIN_RESERVATION) || (get_user_flags(%0) & VIP_ACCESS))
#define IsPlayer(%1)  (1 <= %1 <= g_iMaxPlayers)

#if defined ADMIN_LOADER
	native admin_expired(index);
#endif

#if defined DAMAGER
	new const Float:g_fCoords[][] = { {0.52, 0.52}, {0.54, 0.54}, {0.56, 0.56}, {0.58, 0.58}, {0.60, 0.60}, {0.62, 0.62} };
	new g_iPlayerPos[33];
	new g_iSyncMsgDmg;
#endif

new g_iRoundCount;
new bool:g_bUseWeapon[33];
new bool:g_bBlockBonus;
new bool:g_bUserVip[33];
new g_iSyncMsgAddHP;
new g_iMaxPlayers;
new g_bShow = true;
new g_isSwitchDmg[33] = {0, ...};
new g_szText[3] = "";

public plugin_init() {
	register_plugin("[ReAPI] Vip System", "1.4.0", "Dager* *.* -G-");
#if defined DAMAGER
	register_clcmd("say /damager", "cmdSwitchDmg");
	register_clcmd("say_team /damager", "cmdSwitchDmg");
#endif
	register_clcmd("say /svipmenu", "cmdVipMenu");
	register_clcmd("say_team /svipmenu", "cmdVipMenu");
	register_clcmd("svipmenu", "cmdVipMenu");
	register_clcmd("say", "hook_say");
	register_clcmd("say_team", "hook_say");
#if defined FIFTH_ITEM
	register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5, "VipMenuHandler");
#else
	register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4, "VipMenuHandler");
#endif
	RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Pre", false);
	RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
	RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true);
#if defined DAMAGER
	RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
#endif
	new szMapName[32], iMap_Prefix[][] = { "awp_", "aim_", "35hp", "fy_" };
	rh_get_mapname(szMapName, charsmax(szMapName));
	for(new i; i < sizeof iMap_Prefix; i++) {
		if(containi(szMapName, iMap_Prefix[i]) != -1) {
			g_bBlockBonus = true;
		}
	}
#if defined VIPTAB
	if(!get_member_game(m_bMapHasVIPSafetyZone)) {
		register_message(get_user_msgid("ScoreAttrib"), "msgScoreAttrib");
	}
#endif
#if defined DAMAGER
	g_iSyncMsgDmg = CreateHudSyncObj();
#endif
	g_iSyncMsgAddHP = CreateHudSyncObj();
	g_iMaxPlayers = get_member_game(m_nMaxPlayers);
}

#if defined VIPTAB
public msgScoreAttrib() {
	if(isUserVipr(get_msg_arg_int(1)) && !get_msg_arg_int(2)) {
		set_msg_arg_int(2, ARG_BYTE, (1<<2));
	}
}
#endif

public CSGameRules_RestartRound_Pre() {
	if(get_member_game(m_bCompleteReset)) {
		g_iRoundCount = 0;
	}
	g_iRoundCount++;
	arrayset(g_bUseWeapon, false, sizeof g_bUseWeapon);
}

public client_putinserver(id) {
	if(g_bShow) {
		get_user_info(id, "_damager", g_szText, charsmax(g_szText));
		g_isSwitchDmg[id] = (g_szText[0]) ? str_to_num(g_szText) : 1;
	} else {
		g_isSwitchDmg[id] = 0;
	}
	if(!isUserVip(id)) {
		return;
	}
	static szName[32];
	get_entvar(id, var_netname, szName, charsmax(szName));
#if defined SOUND_CONNECT
	client_cmd(0, "spk buttons/blip1.wav");
#endif
	client_print_color(0, print_team_default, "%s ^1%s ^4vleze w servera! ", PREFIX, szName);
}

public CBasePlayer_Killed(pevVictim, pevAttacker) {
	if(IsPlayer(pevVictim) && IsPlayer(pevAttacker) && isUserVip(pevAttacker) && pevVictim != pevAttacker) {
		static Float:attackerHp, Float:addHp;
		attackerHp = Float:get_entvar(pevAttacker, var_health);
		addHp = get_member(pevVictim, m_bHeadshotKilled) ? ADDHP_HS : ADDHP;
		attackerHp += addHp;
		set_entvar(pevAttacker, var_health, attackerHp > MAXHP ? MAXHP : attackerHp);
		if(attackerHp >= MAXHP) {
			return;
		}
		if(addHp > 0.0) {
			set_hudmessage(0, 255, 0, 0.6, 0.4, 2, 1.0, 1.5, 0.1, 0.3, -1);
			ShowSyncHudMsg(pevAttacker, g_iSyncMsgAddHP, "+%.0f hp", addHp);
		}
	}
	return;
}

#if defined DAMAGER
public CBasePlayer_TakeDamage(victim, inflictor, attacker, Float:damage) {
	if(g_isSwitchDmg[attacker] && is_user_connected(attacker) && IsPlayer(attacker) && ent_sees_ent(attacker, victim) && get_member(victim, m_iTeam) != get_member(attacker, m_iTeam) && isUserVip(attacker)) {
		static g_iDamage;
		g_iDamage = floatround(damage, floatround_floor);
		if(g_iDamage > 0) {
			static iPos;
			iPos = ++g_iPlayerPos[attacker];
			if(iPos == sizeof(g_fCoords)) {
				iPos = g_iPlayerPos[attacker] = 0;
			}
			set_hudmessage(200, 100, 100, Float:g_fCoords[iPos][0], Float:g_fCoords[iPos][1], 2, 0.2, 0.5, 0.02, 0.5, -1);
			ShowSyncHudMsg(attacker, g_iSyncMsgDmg, "%d^n", g_iDamage);
		}
	}
}
#endif

public CBasePlayer_Spawn(id) {
	if(g_bBlockBonus || !is_user_alive(id)) {
		return 0;
	}
	if(isUserVip(id)) { 
		g_bUserVip[id] = true;
	} else { 
		return g_bUserVip[id] = false;
	}
#if defined VIPAUTOGRENADE
	if(g_iRoundCount >= ROUND_NADES) {
		rg_give_item(id, "weapon_hegrenade", GT_APPEND);
		rg_give_item(id, "weapon_flashbang", GT_APPEND);
		rg_give_item(id, "weapon_flashbang", GT_APPEND);
		rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
	}
#endif
#if defined VIPAUTODEAGLE
	if(g_iRoundCount >= ROUND_DEAGLE) {
		rg_give_item(id, "weapon_deagle", GT_REPLACE);
		rg_set_user_bpammo(id, WEAPON_DEAGLE, 35);
	}
#endif
	if(g_iRoundCount >= ROUND_ARMOR) {
		rg_set_user_armor(id, 100, ARMOR_VESTHELM);
	}
	if(g_iRoundCount >= ROUND_DEFUSE) {
		new TeamName:team = get_member(id, m_iTeam);
		if(team == TEAM_CT) {
			rg_give_defusekit(id, true);
		}
	}
#if defined AUTOVIPMENU
	return cmdVipMenu(id);
#else
	return 0;
#endif
}

public hook_say(id) {
	static szMsg[128];
	read_args(szMsg, 127);
	remove_quotes(szMsg);
	if(szMsg[0] != '/') {
		return 0;
	}
	static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp" };
	for(new i; i < sizeof szChoosedWP; i++) {
		if(!strcmp(szMsg, szChoosedWP[i])) {
			if(!isAllowToUse(id)) { 
				break;
			}
			if(i > 1 && g_iRoundCount < AWPRND) {
				return client_print_color(id, 0, "%s Orajieto e dostapno ot ^3%d ^1rund!", PREFIX, AWPRND);
			}
			return VipMenuHandler(id, i);
		}
	}
	return 0;
}

public cmdVipMenu(id) {
	if(!isAllowToUse(id)) {
		return 0;
	}
	static szMenu[512], iLen, iKey;
	iKey = MENU_KEY_0;
#if defined ADMIN_LOADER
	new iExp = admin_expired(id);
	if(iExp > 0) {
		new sysTime = get_systime();
		if(iExp - sysTime > 0) {
			if((iExp - sysTime) / 86400 > 0) {
				iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%d дн.\r]^n^n", ((iExp - sysTime) / 86400));
			} else {
				iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%dч. %dмин.\r]^n^n", ((iExp - sysTime) / 3600), (((iExp - sysTime) / 60) - (((iExp - sysTime) / 3600) * 60)));
			}
		}
	} else if(iExp == 0) {
		iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu^n^n");
	}
#else
	iLen = formatex(szMenu, charsmax(szMenu), "\ySuperVIP Menu^n^n");
#endif
	iKey |= MENU_KEY_1|MENU_KEY_2|MENU_KEY_3;
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wBezplatno \yAK47^n\r2. \wBezplatno \yM4A1^n\r3. \wBezplatno \yFAMAS^n");
	if(g_iRoundCount < AWPRND) {
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dBezplatno AWP \r[ot %d rund]^n^n", AWPRND);
	} else {
		iKey |= MENU_KEY_4;
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wBezplatno \yAWP^n^n");
	}
#if defined FIFTH_ITEM
	iKey |= MENU_KEY_5;
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \wPokazwane na hitovete \r[\y%s\r]^n^n", g_isSwitchDmg[id] ? "Aktivno" : "Neaktivno");
#endif
	formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y0\r. \wIzhod");
	show_menu(id, iKey, szMenu, -1, "VipMenu");
	return PLUGIN_HANDLED;
}

public VipMenuHandler(id, iKey) {
#if defined FIFTH_ITEM
	if(iKey > 4 || g_bUseWeapon[id]) {
		return 0;
	}
#else
	if(iKey > 3 || g_bUseWeapon[id]) {
		return 0;
	}
#endif
	switch(iKey) {
		case 0..3: {
			static const szChoosedBP[] = { 90, 90, 90, 30 };
			static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_awp" };
			g_bUseWeapon[id] = true;
			return give_item_ex(id, szChoosedWP[iKey], szChoosedBP[iKey]);
		}
#if defined FIFTH_ITEM
		case 4: {
			g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
			num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
			client_cmd(id, "setinfo _damager %s", g_szText);
			return cmdVipMenu(id);
		}
#endif
	}
	return PLUGIN_HANDLED;
}

stock give_item_ex(id, currWeaponName[], ammoAmount) {
	rg_give_item(id, currWeaponName, GT_REPLACE);
	rg_set_user_bpammo(id, rg_get_weapon_info(currWeaponName, WI_ID), ammoAmount);
	engclient_cmd(id, currWeaponName);
	return PLUGIN_HANDLED;
}

bool:isAllowToUse(id) {
	if(!g_bUserVip[id]) {
		client_print_color(id, print_team_default, "%s Samo SuperVIP igrachite imat dostap do tazi komanda!", PREFIX);
		return false;
	}
	if(!is_user_alive(id)) {
		client_print_color(id, print_team_default, "%s Triabva da si jiv za da polzwash tazi komanda!", PREFIX);
		return false;
	}
	if(!g_iRoundCount) {
		client_print_color(id, print_team_default, "%s Tazi komanda e zabranena pyrvite rundove!", PREFIX);
		return false;
	}
	if(g_bUseWeapon[id]) {
		client_print_color(id, print_team_default, "%s Veche si wzel orajie tozi rund!", PREFIX);
		return false;
	}
	if(g_iRoundCount < VIPROUND) {
		client_print_color(id, print_team_default, "%s Bezplatnite orajiq shte sa dostapni ot ^3%d ^1rund!", PREFIX, VIPROUND);
		return false;
	}
	return true;
}

public cmdSwitchDmg(id) {
	if(!isUserVip(id)) {
		client_print_color(id, print_team_default, "%s Tazi komanda e samo za SuperVIP igrachi!", PREFIX);
		return 0;
	}
	g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
	num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
	client_cmd(id, "setinfo _damager %s", g_szText);
	new szSwitch[20];
	format(szSwitch, charsmax(szSwitch), "%s", g_isSwitchDmg[id] ? "Aktivira" : "Deaktivira");
	client_print_color(id, print_team_default, "%s Ti uspeshno ^3%s ^1pokazwaneto na hitovete", PREFIX, szSwitch);
	return PLUGIN_CONTINUE;
}

stock bool:ent_sees_ent(iEnt, iEnt2)
{
	static Float:fEntOrigin[3], Float:fEnt2Origin[3], Float:fResult[3];
	entity_get_vector(iEnt, EV_VEC_origin, fEntOrigin);
	entity_get_vector(iEnt2, EV_VEC_origin, fEnt2Origin);
	return trace_line(iEnt, fEntOrigin, fEnt2Origin, fResult) == iEnt2;
}

Аватар
bruttarazza
Извън линия
Потребител
Потребител
Мнения: 26
Регистриран на: 18 Окт 2020, 19:51
Се отблагодари: 6 пъти
Получена благодарност: 5 пъти
Обратна връзка:

Заявка за редактиране на VIP плъгин

Мнение от bruttarazza » 27 Ное 2020, 15:06

TryAgain написа: 27 Ное 2020, 06:17 За да смениш от кой рунд да ти е AWP-то го има на ред номер:33

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

#define AWPRND      	5 // С какого round доступны AWP и пулемет
Иначе пробвай така :)

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

/*************************************************************************************************
*  Возможности:
*  1. Префикс сообщений от плагина
*  2. VipMenu (vipmenu, /vipmenu) - оружия: ak47, m4a1, awp, пулемет.
*  3. Так же работают чат команды: /ak47, /m4a1, /awp, /b51.
*  4. AWP и Пулемет можно использовать с N round (настраивается).
*  5. Не работает на картах awp_, аim_, 35hp, fy_
*  6. Дополнительные HP за убийства (настраивается)
*  7. Автовыдача дигла при спавне (отключаемо), если включено можно выставить с N round (настраивается).
*  8. Автовыдача гранат при спавне (отключаемо), если включено можно выставить с N round (настраивается).
*  9. Выдача брони при спавне с N round (настраивается).
*  10. Выдача дефузов за кт при спавне с N round (настраивается).
*  11. Срок до конда с Admin Loader by Neugomon (отключаемо).
*  12. VIP статус в TAB (отключаемо).
*  13. Сообщение при подключении игрока.
*  14. Звук при заходе вип игрока (отключаемо).
*  15. Дамагер (отключаемо).
*  16. Переключение дамагера (setinfo) по команде в чат /damager
*************************************************************************************************/

#include <amxmodx>
#include <engine>
#include <reapi>

#if AMXX_VERSION_NUM < 183
	#include <colorchat>
#endif

/* Конфигурационные defines */
#define VIP_ACCESS      ADMIN_IMMUNITY      // Флаг доступа VIP (по дефолту флаг "t" ADMIN_LEVEL_H)
#define PREFIX          "^1[^4Sector SuperVIP^1]^1"    // Префикс перед сообщениями ( ^1 - желтый ^3 - цвет команды ^4 - зеленый )
#define VIPROUND        3                  // C какого round можно открыть VIP меню
#define AWPRND      	5 // С какого round доступны AWP и пулемет
#define ADDHP_HS        0.0               // Кол-во добавляемого HP за убийство в голову (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define ADDHP           0.0                // Кол-во добавляемого HP за убийство (выставить 0.0 если не надо добавлять, так как закомментировать нельзя)
#define MAXHP           100.0              // Максимальное количество HP
#define VIPAUTODEAGLE                      // В начале каждого round давать Deagle (закомментируйте если не надо)
#define VIPAUTOGRENADE                     // Давать в начале каждого round гранаты (закомментируйте если не надо)
#define ROUND_NADES     1                  // С какого round давать гранаты (если раскомментировано VIPAUTOGRENADE иначе нет смысла менять работать не будет)
#define ROUND_DEAGLE    1                  // С какого round давать deagle (если раскомментировано VIPAUTODEAGLE иначе нет смысла менять работать не будет)
#define ROUND_ARMOR     2                  // С какого round давать броню
#define ROUND_DEFUSE    1                  // С какого round давать defuse kit
#define AUTOVIPMENU                        // Автоматически открывать в начале рануда Вип меню (выключено по дефолту)
//#define VIPTAB                             // Показывать статус VIP в таблице на tab (закомментируйте если не надо)
//#define ADMIN_LOADER                       // Срок до конца с Admin Loader by Neugomon (закомментируйте если не надо)
//#define SOUND_CONNECT                      // Звук при заходе вип игрока (раскомментируйте если надо)
#define DAMAGER                            // дамагер лесенкой (раскомментируйте если надо)
#define FIFTH_ITEM                         // 5-й пункт в випке переключение дамагера по нажатию (раскомментируйте если надо + раскомментировать DAMAGER)
/* Конфигурационные defines */

#define isUserVip(%0) (get_user_flags(%0) & VIP_ACCESS)
#define isUserVipr(%0) ((get_user_flags(%0) & ADMIN_RESERVATION) || (get_user_flags(%0) & VIP_ACCESS))
#define IsPlayer(%1)  (1 <= %1 <= g_iMaxPlayers)

#if defined ADMIN_LOADER
	native admin_expired(index);
#endif

#if defined DAMAGER
	new const Float:g_fCoords[][] = { {0.52, 0.52}, {0.54, 0.54}, {0.56, 0.56}, {0.58, 0.58}, {0.60, 0.60}, {0.62, 0.62} };
	new g_iPlayerPos[33];
	new g_iSyncMsgDmg;
#endif

new g_iRoundCount;
new bool:g_bUseWeapon[33];
new bool:g_bBlockBonus;
new bool:g_bUserVip[33];
new g_iSyncMsgAddHP;
new g_iMaxPlayers;
new g_bShow = true;
new g_isSwitchDmg[33] = {0, ...};
new g_szText[3] = "";

public plugin_init() {
	register_plugin("[ReAPI] Vip System", "1.4.0", "Dager* *.* -G-");
#if defined DAMAGER
	register_clcmd("say /damager", "cmdSwitchDmg");
	register_clcmd("say_team /damager", "cmdSwitchDmg");
#endif
	register_clcmd("say /svipmenu", "cmdVipMenu");
	register_clcmd("say_team /svipmenu", "cmdVipMenu");
	register_clcmd("svipmenu", "cmdVipMenu");
	register_clcmd("say", "hook_say");
	register_clcmd("say_team", "hook_say");
#if defined FIFTH_ITEM
	register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5, "VipMenuHandler");
#else
	register_menucmd(register_menuid("VipMenu"), MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4, "VipMenuHandler");
#endif
	RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Pre", false);
	RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
	RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true);
#if defined DAMAGER
	RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
#endif
	new szMapName[32], iMap_Prefix[][] = { "awp_", "aim_", "35hp", "fy_" };
	rh_get_mapname(szMapName, charsmax(szMapName));
	for(new i; i < sizeof iMap_Prefix; i++) {
		if(containi(szMapName, iMap_Prefix[i]) != -1) {
			g_bBlockBonus = true;
		}
	}
#if defined VIPTAB
	if(!get_member_game(m_bMapHasVIPSafetyZone)) {
		register_message(get_user_msgid("ScoreAttrib"), "msgScoreAttrib");
	}
#endif
#if defined DAMAGER
	g_iSyncMsgDmg = CreateHudSyncObj();
#endif
	g_iSyncMsgAddHP = CreateHudSyncObj();
	g_iMaxPlayers = get_member_game(m_nMaxPlayers);
}

#if defined VIPTAB
public msgScoreAttrib() {
	if(isUserVipr(get_msg_arg_int(1)) && !get_msg_arg_int(2)) {
		set_msg_arg_int(2, ARG_BYTE, (1<<2));
	}
}
#endif

public CSGameRules_RestartRound_Pre() {
	if(get_member_game(m_bCompleteReset)) {
		g_iRoundCount = 0;
	}
	g_iRoundCount++;
	arrayset(g_bUseWeapon, false, sizeof g_bUseWeapon);
}

public client_putinserver(id) {
	if(g_bShow) {
		get_user_info(id, "_damager", g_szText, charsmax(g_szText));
		g_isSwitchDmg[id] = (g_szText[0]) ? str_to_num(g_szText) : 1;
	} else {
		g_isSwitchDmg[id] = 0;
	}
	if(!isUserVip(id)) {
		return;
	}
	static szName[32];
	get_entvar(id, var_netname, szName, charsmax(szName));
#if defined SOUND_CONNECT
	client_cmd(0, "spk buttons/blip1.wav");
#endif
	client_print_color(0, print_team_default, "%s ^1%s ^4vleze w servera! ", PREFIX, szName);
}

public CBasePlayer_Killed(pevVictim, pevAttacker) {
	if(IsPlayer(pevVictim) && IsPlayer(pevAttacker) && isUserVip(pevAttacker) && pevVictim != pevAttacker) {
		static Float:attackerHp, Float:addHp;
		attackerHp = Float:get_entvar(pevAttacker, var_health);
		addHp = get_member(pevVictim, m_bHeadshotKilled) ? ADDHP_HS : ADDHP;
		attackerHp += addHp;
		set_entvar(pevAttacker, var_health, attackerHp > MAXHP ? MAXHP : attackerHp);
		if(attackerHp >= MAXHP) {
			return;
		}
		if(addHp > 0.0) {
			set_hudmessage(0, 255, 0, 0.6, 0.4, 2, 1.0, 1.5, 0.1, 0.3, -1);
			ShowSyncHudMsg(pevAttacker, g_iSyncMsgAddHP, "+%.0f hp", addHp);
		}
	}
	return;
}

#if defined DAMAGER
public CBasePlayer_TakeDamage(victim, inflictor, attacker, Float:damage) {
	if(g_isSwitchDmg[attacker] && is_user_connected(attacker) && IsPlayer(attacker) && ent_sees_ent(attacker, victim) && get_member(victim, m_iTeam) != get_member(attacker, m_iTeam) && isUserVip(attacker)) {
		static g_iDamage;
		g_iDamage = floatround(damage, floatround_floor);
		if(g_iDamage > 0) {
			static iPos;
			iPos = ++g_iPlayerPos[attacker];
			if(iPos == sizeof(g_fCoords)) {
				iPos = g_iPlayerPos[attacker] = 0;
			}
			set_hudmessage(200, 100, 100, Float:g_fCoords[iPos][0], Float:g_fCoords[iPos][1], 2, 0.2, 0.5, 0.02, 0.5, -1);
			ShowSyncHudMsg(attacker, g_iSyncMsgDmg, "%d^n", g_iDamage);
		}
	}
}
#endif

public CBasePlayer_Spawn(id) {
	if(g_bBlockBonus || !is_user_alive(id)) {
		return 0;
	}
	if(isUserVip(id)) { 
		g_bUserVip[id] = true;
	} else { 
		return g_bUserVip[id] = false;
	}
#if defined VIPAUTOGRENADE
	if(g_iRoundCount >= ROUND_NADES) {
		rg_give_item(id, "weapon_hegrenade", GT_APPEND);
		rg_give_item(id, "weapon_flashbang", GT_APPEND);
		rg_give_item(id, "weapon_flashbang", GT_APPEND);
		rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
	}
#endif
#if defined VIPAUTODEAGLE
	if(g_iRoundCount >= ROUND_DEAGLE) {
		rg_give_item(id, "weapon_deagle", GT_REPLACE);
		rg_set_user_bpammo(id, WEAPON_DEAGLE, 35);
	}
#endif
	if(g_iRoundCount >= ROUND_ARMOR) {
		rg_set_user_armor(id, 100, ARMOR_VESTHELM);
	}
	if(g_iRoundCount >= ROUND_DEFUSE) {
		new TeamName:team = get_member(id, m_iTeam);
		if(team == TEAM_CT) {
			rg_give_defusekit(id, true);
		}
	}
#if defined AUTOVIPMENU
	return cmdVipMenu(id);
#else
	return 0;
#endif
}

public hook_say(id) {
	static szMsg[128];
	read_args(szMsg, 127);
	remove_quotes(szMsg);
	if(szMsg[0] != '/') {
		return 0;
	}
	static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp" };
	for(new i; i < sizeof szChoosedWP; i++) {
		if(!strcmp(szMsg, szChoosedWP[i])) {
			if(!isAllowToUse(id)) { 
				break;
			}
			if(i > 1 && g_iRoundCount < AWPRND) {
				return client_print_color(id, 0, "%s Orajieto e dostapno ot ^3%d ^1rund!", PREFIX, AWPRND);
			}
			return VipMenuHandler(id, i);
		}
	}
	return 0;
}

public cmdVipMenu(id) {
	if(!isAllowToUse(id)) {
		return 0;
	}
	static szMenu[512], iLen, iKey;
	iKey = MENU_KEY_0;
#if defined ADMIN_LOADER
	new iExp = admin_expired(id);
	if(iExp > 0) {
		new sysTime = get_systime();
		if(iExp - sysTime > 0) {
			if((iExp - sysTime) / 86400 > 0) {
				iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%d дн.\r]^n^n", ((iExp - sysTime) / 86400));
			} else {
				iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu: \r[\y%dч. %dмин.\r]^n^n", ((iExp - sysTime) / 3600), (((iExp - sysTime) / 60) - (((iExp - sysTime) / 3600) * 60)));
			}
		}
	} else if(iExp == 0) {
		iLen = formatex(szMenu, charsmax(szMenu), "\yVipMenu^n^n");
	}
#else
	iLen = formatex(szMenu, charsmax(szMenu), "\ySuperVIP Menu^n^n");
#endif
	iKey |= MENU_KEY_1|MENU_KEY_2|MENU_KEY_3;
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wBezplatno \yAK47^n\r2. \wBezplatno \yM4A1^n\r3. \wBezplatno \yFAMAS^n");
	if(g_iRoundCount < AWPRND) {
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dBezplatno AWP \r[ot %d rund]^n^n", AWPRND);
	} else {
		iKey |= MENU_KEY_4;
		iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wBezplatno \yAWP^n^n");
	}
#if defined FIFTH_ITEM
	iKey |= MENU_KEY_5;
	iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r5. \wPokazwane na hitovete \r[\y%s\r]^n^n", g_isSwitchDmg[id] ? "Aktivno" : "Neaktivno");
#endif
	formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y0\r. \wIzhod");
	show_menu(id, iKey, szMenu, -1, "VipMenu");
	return PLUGIN_HANDLED;
}

public VipMenuHandler(id, iKey) {
#if defined FIFTH_ITEM
	if(iKey > 4 || g_bUseWeapon[id]) {
		return 0;
	}
#else
	if(iKey > 3 || g_bUseWeapon[id]) {
		return 0;
	}
#endif
	switch(iKey) {
		case 0..3: {
			static const szChoosedBP[] = { 90, 90, 90, 30 };
			static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_awp" };
			g_bUseWeapon[id] = true;
			return give_item_ex(id, szChoosedWP[iKey], szChoosedBP[iKey]);
		}
#if defined FIFTH_ITEM
		case 4: {
			g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
			num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
			client_cmd(id, "setinfo _damager %s", g_szText);
			return cmdVipMenu(id);
		}
#endif
	}
	return PLUGIN_HANDLED;
}

stock give_item_ex(id, currWeaponName[], ammoAmount) {
	rg_give_item(id, currWeaponName, GT_REPLACE);
	rg_set_user_bpammo(id, rg_get_weapon_info(currWeaponName, WI_ID), ammoAmount);
	engclient_cmd(id, currWeaponName);
	return PLUGIN_HANDLED;
}

bool:isAllowToUse(id) {
	if(!g_bUserVip[id]) {
		client_print_color(id, print_team_default, "%s Samo SuperVIP igrachite imat dostap do tazi komanda!", PREFIX);
		return false;
	}
	if(!is_user_alive(id)) {
		client_print_color(id, print_team_default, "%s Triabva da si jiv za da polzwash tazi komanda!", PREFIX);
		return false;
	}
	if(!g_iRoundCount) {
		client_print_color(id, print_team_default, "%s Tazi komanda e zabranena pyrvite rundove!", PREFIX);
		return false;
	}
	if(g_bUseWeapon[id]) {
		client_print_color(id, print_team_default, "%s Veche si wzel orajie tozi rund!", PREFIX);
		return false;
	}
	if(g_iRoundCount < VIPROUND) {
		client_print_color(id, print_team_default, "%s Bezplatnite orajiq shte sa dostapni ot ^3%d ^1rund!", PREFIX, VIPROUND);
		return false;
	}
	return true;
}

public cmdSwitchDmg(id) {
	if(!isUserVip(id)) {
		client_print_color(id, print_team_default, "%s Tazi komanda e samo za SuperVIP igrachi!", PREFIX);
		return 0;
	}
	g_isSwitchDmg[id] = (g_isSwitchDmg[id]) ? 0 : 1;
	num_to_str(g_isSwitchDmg[id], g_szText, charsmax(g_szText));
	client_cmd(id, "setinfo _damager %s", g_szText);
	new szSwitch[20];
	format(szSwitch, charsmax(szSwitch), "%s", g_isSwitchDmg[id] ? "Aktivira" : "Deaktivira");
	client_print_color(id, print_team_default, "%s Ti uspeshno ^3%s ^1pokazwaneto na hitovete", PREFIX, szSwitch);
	return PLUGIN_CONTINUE;
}

stock bool:ent_sees_ent(iEnt, iEnt2)
{
	static Float:fEntOrigin[3], Float:fEnt2Origin[3], Float:fResult[3];
	entity_get_vector(iEnt, EV_VEC_origin, fEntOrigin);
	entity_get_vector(iEnt2, EV_VEC_origin, fEnt2Origin);
	return trace_line(iEnt, fEntOrigin, fEnt2Origin, fResult) == iEnt2;
}
Много ти благодаря, видях си грешката, която се дължи на бързане.. На 2рия ред, където е else-a вместо 4, бях сложил 5.

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

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dBezplatno AWP \r[ot %d rund]^n^n", AWPRND);
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wBezplatno \yAWP^n^n");

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

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

Кой е на линия

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