Здравейте, може ли този плъгин да се редактира следното нещо.
От менюто да се премахне избора на M249, като на негово място се сложи FAMAS и бъде достъпен от рунд 3.
Заявка за редактиране на VIP плъгин
-
bruttarazza
Извън линия - Потребител
- Мнения: 26
- Регистриран на: 18 Окт 2020, 19:51
- Се отблагодари: 6 пъти
- Получена благодарност: 5 пъти
- Обратна връзка:
-
gadinkata
Извън линия - Потребител
- Мнения: 259
- Регистриран на: 21 Мар 2018, 12:33
- Местоположение: Враца
- Се отблагодари: 25 пъти
- Получена благодарност: 7 пъти
- Обратна връзка:
Заявка за редактиране на VIP плъгин
Код за потвърждение: Избери целия код
/*************************************************************************************************
* Возможности:
* 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 плъгин
Има ли някакъв вариант фамаса да се отдели от АВП-то. Защото сега на 3тия рунд отключва и авп-то, а идеята е авп-то да е достъпно на по-късен етап от играта.
EDIT 22:20/26.11.20 :
Успях да разделя AWP от FAMAS, но има проблем с оцветяването на съобщенията. 1. 2. 3. 4. 5. трябва да са в червено, но 4 и 5 се чупят. Прилагам снимки и прикачвам кода
Докато AWP е все още заключено
След като се отключи и AWP
Може ли да оправите цветовете?
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
Може ли да оправите цветовете?
-
TryAgain
Извън линия - Потребител
- Мнения: 182
- Регистриран на: 25 Яну 2017, 16:59
- Се отблагодари: 1 път
- Получена благодарност: 26 пъти
Заявка за редактиране на VIP плъгин
За да смениш от кой рунд да ти е 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 плъгин
Много ти благодаря, видях си грешката, която се дължи на бързане.. На 2рия ред, където е else-a вместо 4, бях сложил 5.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; }
Код за потвърждение: Избери целия код
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");
-
- Подобни теми
- Отговори
- Преглеждания
- Последно мнение
-
- 6 Отговори
- 2176 Преглеждания
-
Последно мнение от aBlack
-
- 2 Отговори
- 131 Преглеждания
-
Последно мнение от LuD s KniF3
-
- 1 Отговори
- 1735 Преглеждания
-
Последно мнение от mi0
-
- 1 Отговори
- 1183 Преглеждания
-
Последно мнение от To.To
-
- 4 Отговори
- 1429 Преглеждания
-
Последно мнение от Niku
-
- 0 Отговори
- 943 Преглеждания
-
Последно мнение от Niku
-
- 5 Отговори
- 2450 Преглеждания
-
Последно мнение от BeliaL
Кой е на линия
Потребители разглеждащи този форум: 0 регистрирани и 11 госта