Не компилируется плагин при отключении //#define SHOW_DAMAGER

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
56
Реакции
1
Компилятор
Локальный
Amx Mod X
1.9.0
Исходный код
#include <amxmodx>
#include <reapi>

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

/* ########### Настройка плагина ############ */
#define ACCESS_FLAG ADMIN_LEVEL_H // Флаги доступа к вип системе, вип меню, выдача амуниции и др.

/* ***** Настройка функционала плагина. Для откл. закоментируйте строку ***** */
//#define SHOW_DAMAGER // Вкл/выкл дамагер для випов
#define HP_ADD // Вкл/выкл прибавление ХП для випов (Вампирка)
#define ADMIN_LOADER // Совместимость с Admin Loader от неугомона (https://www.neugomon.ru/threads/486/)
#define SAY_WEAPONS // Позволяет включить чат команды "/ak47", "/m4a1", "/famas", "/awp", "/b51"
#define AUTO_MENU // Автоматически открывать в начале рануда Вип меню, включения происходит с WEAPONSRND раунда, по ум. отключено
#define VIP_SHOW_INFO // Оповещение при заходе вип игрока на сервер
#define VIP_TAB // Вип в табе

#define GIVE_PISTOL // Выдавать пистолет на спавне
#define GIVE_HEGRENADE // Выдавать взрывную гранату на спавне
#define GIVE_FlASHBANG // Выдавать две световые гранаты на спавне
#define GIVE_SMOKE // Выдавать дымовую гранату на спавне
#define GIVE_ARMOR // Выдавать броню и шлем на спавне
#define GIVE_DEFUSEKIT // Выдавать набор сапёра
/* **** Конец настройки **** */

#define VIPMENU 1 // C какого раунда можно открыть вип меню, для откл. закоментируйте строку (Для тех у кого есть разминка перед основными раундами)
#define WEAPONSRND 2 // C какого раунда доступно оружие
#define AWPM249RND 4 // С какого раунда доступны AWP и пулемет

#if defined HP_ADD
/* Настройка прибавления хп для випов */
//#define HP_MAP_BLOCK // Отключать вампирку на картах BLOCK_MAPS
#define HP_ADD_ACCESS ADMIN_LEVEL_H // С каким флагом доступена вампирка
#define HP_OFF 1 // C какого раунда включать прибавление ХП (0 - откл. функцию)
#define HP_MAX 100.0 // макс. кол-во HP
#define HP_BODY 10.0 // за убийство в тело
#define HP_HS 15.0 // за убийство в голову
#endif

#if defined SHOW_DAMAGER
/* Настройка дамагера */
//#define DMG_MAP_BLOCK // Отключать дамагер на картах BLOCK_MAPS
#define DAMAGER_ACCESS ADMIN_LEVEL_H // С каким флагом доступен дамагер
//#define DAMAGER_OFF // Возможность откл. дамагер в вип меню
#endif

#if defined VIP_SHOW_INFO
//#define CONNECTED_SOUND "misc/vip.wav" // Дополненине к VIP_SHOW_INFO, звук при заходе вип игрока на сервер, по ум. отключено
#endif

#define PREFIX "^1[^4VipInfo^1]" // Тег чата
#define NAME_SERVER "Only-Friends" // Название сервера в вип меню, макс. размерность массива 47 байт.

#define BLOCK_MAPS "awp_", "aim_", "fy_", "35hp", "$2000$" // Блокируемые карты
/* ########### Конец настройки плагина ############# */

#if !defined MAX_NAME_LENGTH
#define MAX_NAME_LENGTH 32
#endif

#define IsUserVip(%1) (get_user_flags(%1) & ACCESS_FLAG)
#define MenuKey (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)

#pragma semicolon 1

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

new iPistol[MAX_CLIENTS+1], bool:g_bUseWeapon[MAX_CLIENTS+1];
new HookChain:HookPlayer_Spawn, HookChain:HookPlayer_Killed, HookChain:HookPlayer_TakeDamage;
new g_iRound, bool:g_bMapsBlock;

#if defined DAMAGER_OFF
new bool:g_bUseDamager[MAX_CLIENTS+1];
#endif
#if defined VIP_TAB
new Msg_ScoreAttrib;
#endif
#if defined HP_ADD
new g_iSyncMsgAddHP;
#endif
#if defined SHOW_DAMAGER
new g_iSyncMsgDamage;
#endif

#if defined CONNECTED_SOUND
public plugin_precache()
precache_sound(CONNECTED_SOUND);
#endif

public plugin_init() {
register_plugin("[ReAPI] VIP System", "1.3.1", "pUzzlik");

register_event("TextMsg", "evNewRound", "a", "2=#Game_will_restart_in", "2=#Game_Commencing");
register_event("HLTV", "evRoundStart", "a", "1=0", "2=0");

HookPlayer_Spawn = RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
EnableHookChain(HookPlayer_Spawn);
#if defined HP_ADD
HookPlayer_Killed = RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed", true);
EnableHookChain(HookPlayer_Killed);
g_iSyncMsgAddHP = CreateHudSyncObj();
#endif
#if defined SHOW_DAMAGER
HookPlayer_TakeDamage = RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
EnableHookChain(HookPlayer_TakeDamage);
g_iSyncMsgDamage = CreateHudSyncObj();
#endif

register_clcmd("weaponmenu", "ShowMenu");
register_clcmd("say /vipmenu", "ShowMenu");
register_clcmd("say_team /vipmenu", "ShowMenu");

#if defined SAY_WEAPONS
register_clcmd("say", "hook_say");
register_clcmd("say_team", "hook_say");
#endif

register_menucmd(register_menuid("Vip Menu"), MenuKey, "MenuHandler");

#if defined VIP_TAB
Msg_ScoreAttrib = get_user_msgid("ScoreAttrib");
#endif
}

public plugin_cfg() {
new map[32]; rh_get_mapname(map, charsmax(map));
new BlockMap[][] = { BLOCK_MAPS };
for(new i; i < sizeof BlockMap; i++)
if(containi(map, BlockMap[i]) != -1) {
DisableHookChain(HookPlayer_Spawn);
#if defined HP_MAP_BLOCK
DisableHookChain(HookPlayer_Killed);
#endif
#if defined DMG_MAP_BLOCK
DisableHookChain(HookPlayer_TakeDamage);
#endif
g_bMapsBlock = true;
}
}

public evNewRound() g_iRound = 0;

public evRoundStart() {
arrayset(g_bUseWeapon, false, sizeof(g_bUseWeapon)); g_iRound++;
}

public client_putinserver(id) {
if(IsUserVip(id)) {
#if defined DAMAGER_OFF
if(id > 0 || id < 33) {
new sUserInfo[16]; get_user_info(id, "_dmg", sUserInfo, charsmax(sUserInfo));
if(sUserInfo[0] && equal(sUserInfo, "off")) g_bUseDamager[id] = false;
else g_bUseDamager[id] = true;
}
#endif
#if defined VIP_SHOW_INFO
new name[MAX_NAME_LENGTH]; get_entvar(id, var_netname, name, charsmax(name));
new players[MAX_CLIENTS], num; get_players(players, num, "ch");

for(new i; i < num ; i++) {
client_print_color(players[i], -3, "%s ^1На сервер зашёл ^3VIP ^1клиент ^4%s", PREFIX, name);

#if defined CONNECTED_SOUND
client_cmd(players[i], "spk %s", CONNECTED_SOUND);
#endif
}
#endif
}
}

#if defined HP_ADD
public CBasePlayer_Killed(const pevVictim, pevAttacker) {
#if HP_OFF > 0
if(HP_OFF >= g_iRound) return;
#endif
if( is_user_connected(pevAttacker)
&& get_user_flags(pevAttacker) & HP_ADD_ACCESS
&& pevVictim != pevAttacker)
{
static Float:attackerHp, Float:addHp;

attackerHp = Float:get_entvar(pevAttacker, var_health);
addHp = get_member(pevVictim, m_bHeadshotKilled) ? HP_HS : HP_BODY;

attackerHp += addHp;
set_entvar(pevAttacker, var_health, attackerHp > HP_MAX ? HP_MAX : attackerHp);

if(attackerHp >= HP_MAX) return;

set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 1.0, 1.0, 0.1, 0.1, -1);
ShowSyncHudMsg(pevAttacker, g_iSyncMsgAddHP, "Добавлено +%d HP", floatround(addHp));
}
}
#endif

#if defined SHOW_DAMAGER
public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, pevAttacker, Float:damage, bitsDamageType) {
#if defined DAMAGER_OFF
if(pevAttacker < 1 || pevAttacker > 32 || !g_bUseDamager[pevAttacker]) return;
#endif
if( is_user_connected(pevAttacker)
&& get_user_flags(pevAttacker) & DAMAGER_ACCESS
&& rg_is_player_can_takedamage(pevVictim, pevAttacker))
{
set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1);
ShowSyncHudMsg(pevAttacker, g_iSyncMsgDamage, "%d", floatround(damage));
}
}
#endif

public CBasePlayer_Spawn(const id) {
if(is_bonus_spawn(id)) {
#if defined GIVE_PISTOL
switch(iPistol[id]) {
case 0: { rg_give_item(id, "weapon_deagle", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_DEAGLE, 35); }
case 1: { rg_give_item(id, "weapon_usp", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_USP, 100); }
case 2: { rg_give_item(id, "weapon_glock18", GT_REPLACE); rg_set_user_bpammo(id, WEAPON_GLOCK18, 120); }
}
#endif
#if defined GIVE_HEGRENADE
rg_give_item(id, "weapon_hegrenade", GT_APPEND);
#endif
#if defined GIVE_FlASHBANG
rg_give_item(id, "weapon_flashbang", GT_APPEND);
rg_give_item(id, "weapon_flashbang", GT_APPEND);
#endif
#if defined GIVE_SMOKE
rg_give_item(id, "weapon_smokegrenade", GT_APPEND);
#endif
#if defined GIVE_ARMOR
rg_set_user_armor(id, 100, ARMOR_VESTHELM);
#endif
#if defined GIVE_DEFUSEKIT
new TeamName:team = get_member(id, m_iTeam);
if(team == TEAM_CT) rg_give_defusekit (id, true);
#endif

#if defined VIP_TAB
message_begin(MSG_BROADCAST, Msg_ScoreAttrib);
write_byte(id);
write_byte(4);
message_end();
#endif

#if defined AUTO_MENU
if(g_iRound >= WEAPONSRND) ShowMenu(id);
#endif
}
}

#if defined SAY_WEAPONS
public hook_say(id) {
static szMsg[32]; read_args(szMsg, charsmax(szMsg)); remove_quotes(szMsg);
static const szChoosedWP[][] = { "/ak47", "/m4a1", "/famas", "/awp", "/b51" };

for(new a; a < sizeof szChoosedWP; a++) {
if(!strcmp(szMsg, szChoosedWP[a])) {
if(!is_allow_use(id)) break;
return MenuHandler(id, a);
}
}
return HC_CONTINUE;
}
#endif

public ShowMenu(id) {
if(!is_allow_use(id)) return HC_CONTINUE;

static szMenu[512], szNameServer[48], iLen, key, name[MAX_NAME_LENGTH];
get_entvar(id, var_netname, name, charsmax(name));
formatex(szNameServer, charsmax(szNameServer), "%s", NAME_SERVER);

key = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5;
iLen = formatex(szMenu, charsmax(szMenu), "\rVIP меню \w[\d%s\w]^n\wПривет, [\y%s\w]^n", szNameServer, name);

#if defined ADMIN_LOADER
new exp = admin_expired(id);
if(exp > 0) {
new sys = get_systime();
if((exp - sys) / 86400 > 0) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yВипки осталось: \w%d дн.!^n^n", (exp - sys) / 86400);
else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yВипки осталось: \w1 день!^n^n");
}
else if(exp == 0) iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\yДействие вип: \wне ограничено!^n^n");
#else
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n");
#endif

if(g_iRound < WEAPONSRND)
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \dВзять AK47 \r[%d раунд]^n\r2. \dВзять M4A1 \r[%d раунд]^n\r3. \dВзять Famas \r[%d раунд]^n", WEAPONSRND, WEAPONSRND, WEAPONSRND);
else if(g_bUseWeapon[id])
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \dВзять AK47^n\r2. \dВзять M4A1^n\r3. \dВзять Famas^n");
else
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wВзять AK47^n\r2. \wВзять M4A1^n\r3. \wВзять Famas^n");

if(g_iRound < AWPM249RND)
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dВзять AWP \r[%d раунд]^n\r5. \dВзять Пулемет \r[%d раунд]^n^n", AWPM249RND, AWPM249RND);
else if(g_bUseWeapon[id])
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \dВзять AWP^n\r5. \dВзять Пулемет^n^n");
else
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r4. \wВзять AWP^n\r5. \wВзять Пулемет^n^n");

#if defined GIVE_PISTOL
key |= MENU_KEY_6;
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. \yПистолет при спавне \d[\w%s\d]^n", iPistol[id] == 0 ? "Deagle" : iPistol[id] == 1 ? "USP" : "Glock");
#if defined DAMAGER_OFF
key |= MENU_KEY_7;
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r7. \yДамагер \d[\w%s\d]^n^n", g_bUseDamager[id] ? "ON" : "OFF");
#endif
#endif
#if !defined GIVE_PISTOL
#if defined DAMAGER_OFF
key |= MENU_KEY_6;
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r6. \yДамагер \d[\w%s\d]^n^n", g_bUseDamager[id] ? "ON" : "OFF");
#endif
#endif

formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \rВыход");

set_member(id, m_iMenu, Menu_OFF);
return show_menu(id, key, szMenu, -1, "Vip Menu");
}

public MenuHandler(id, key) {
if(key <= 4) {
if(g_bUseWeapon[id]) return client_print_color(id, 0, "%s Вы ^3уже брали ^1оружие в этом раунде!", PREFIX);
if(g_iRound < WEAPONSRND) return client_print_color(id, 0, "%s Этот поединок на ^3пистолетах^1!", PREFIX);
if(3 <= key <= 4)
if(g_iRound < AWPM249RND) return client_print_color(id, 0, "%s Оружие доступно только с^3 %d ^1раунда!", PREFIX, AWPM249RND);

g_bUseWeapon[id] = true;
}

static const szChoosedBP[] = { 90, 90, 90, 30, 250 };
static const szChoosedWP[][] = { "weapon_ak47", "weapon_m4a1", "weapon_famas", "weapon_awp", "weapon_m249" };

#if defined GIVE_PISTOL
switch(key) {
case 5: {
iPistol[id] >= 2 ? (iPistol[id] = 0) : iPistol[id]++;
ShowMenu(id);
}
#if defined DAMAGER_OFF
case 6: ShowDamage(id);
#endif
}
#endif
#if !defined GIVE_PISTOL
#if defined DAMAGER_OFF
switch(key) {
case 5: ShowDamage(id);
}
#endif
#endif

if(key > 4) return HC_CONTINUE;
return rg_give_items(id, szChoosedWP[key], szChoosedBP[key]);
}

#if defined DAMAGER_OFF
public ShowDamage(id) {
g_bUseDamager[id] = !g_bUseDamager[id];
if(g_bUseDamager[id]) client_cmd(id, "setinfo _dmg on");
else client_cmd(id, "setinfo _dmg off");

client_print_color(id, 0, "%s Вы ^3%s ^1дамагер.", PREFIX, g_bUseDamager[id] ? "включили" : "отключили");
}
#endif

stock rg_give_items(id,currWeaponName[],ammoAmount) {
rg_give_item(id, currWeaponName, GT_DROP_AND_REPLACE);
rg_set_user_bpammo(id, rg_get_weapon_info(currWeaponName, WI_ID), ammoAmount);
return HC_CONTINUE;
}

bool:is_bonus_spawn(id) {
if(!is_user_alive(id)) return false;
if(!IsUserVip(id)) return false;
return true;
}

bool:is_allow_use(id) {
if(!is_user_alive(id)) {
client_print_color(id, -2, "%s Для использования данной команды вы должны быть ^3живы^1!", PREFIX);
return false;
}
if(!IsUserVip(id)) {
client_print_color(id, 0, "%s Только ^4VIP-игрок ^1может пользоваться этой командой!", PREFIX);
return false;
}
if(g_bMapsBlock) {
client_print_color(id, 0, "%s На данной карте брать оружие ^3запрещено^1!", PREFIX);
return false;
}
#if defined VIPMENU
if(VIPMENU > g_iRound) {
client_print_color(id, -2, "%s Разминочный раунд. ^3Запрещено ^1пользоваться командой!", PREFIX);
return false;
}
#endif
return true;
}
Сама ошибка
 
В этой теме было размещено решение! Перейти к решению.

Вложения

Сообщения
3,257
Реакции
1,437
Помог
121 раз(а)
так плагин скомпилировался.
 
Сообщения
3,257
Реакции
1,437
Помог
121 раз(а)
niggaz772, да. Ну если сильно мозолит глаза, то:

Код:
-new HookChain:HookPlayer_Spawn, HookChain:HookPlayer_Killed, HookChain:HookPlayer_TakeDamage;

+new HookChain:HookPlayer_Spawn, HookChain:HookPlayer_Killed;
+#if defined SHOW_DAMAGER
+new HookChain:HookPlayer_TakeDamage;
+endif
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу