pollfank
Участник
- Сообщения
- 167
- Решения
- 1
- Реакции
- 32
- Баллы
- 28
Здравствуйте.
Пытаюсь отвязать плагин Damager от поддержки reapi. Есть нужда в этом.
Вот что получилось
Меню работает, настройки сохраняются, но не выводит в худ урон. Кто может подскажет что упустил...
Пытаюсь отвязать плагин Damager от поддержки reapi. Есть нужда в этом.
Вот что получилось
Меню работает, настройки сохраняются, но не выводит в худ урон. Кто может подскажет что упустил...
- Исходный код
- Код:
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <nvault_array> #define VISIBILITY_THROUGH_WALLS 2 /* comment out if you want that players saw a loss through walls * 1 - Players can select to see a loss through walls or not * 2 - Players cannot select. They will not see a loss through walls */ #define AUTO_RESET_INACTIVE_USERS 30 /* * 30 - days through how many to execute reset * comment out if you want to switch off this function */ new const g_szColors[][] = { { 255, 228, 181 }, { 30, 144, 255 }, { 255, 255, 0 }, { 50, 205, 50 }, { 144, 238, 144 } } new const Float: g_szCoords[][] = { { 0.50, 0.40 }, { 0.56, 0.44 }, { 0.60, 0.50 }, { 0.56, 0.56 }, { 0.50, 0.60 }, { 0.44, 0.56 }, { 0.40, 0.50 }, { 0.44, 0.44 } } #if !defined MAX_PLAYERS const MAX_PLAYERS = 32; #endif #if !defined MAX_AUTHID_LENGTH const MAX_AUTHID_LENGTH = 64; #endif #define DMG_BLAST (1<<6) new const PLUGIN_NAME[] = "Damager"; new const PLUGIN_VERSION[] = "0.0.5"; enum _:eData { STATE, STYLE, TYPE, INCOMING, #if defined VISIBILITY_THROUGH_WALLS #if VISIBILITY_THROUGH_WALLS == 1 VISIBLE, #endif #endif POSITION, AUTHID[MAX_AUTHID_LENGTH] } new g_iDamagerData[MAX_PLAYERS+1][eData]; enum _:eState { DISABLE = 0, ENABLE } enum _:eStyle { NUMBERS = 0, STARS } enum _:eType { DEFAULT = 0, CIRCLE } #if defined VISIBILITY_THROUGH_WALLS #if VISIBILITY_THROUGH_WALLS == 1 enum _:eVisible { INVISIBLE = 0, VISIBLE } #endif #endif new g_HudSyncMessage; new g_HudSyncMessage2; new const m_iMenu = 205; new const MENU_OFF = 0; #if defined VISIBILITY_THROUGH_WALLS #if VISIBILITY_THROUGH_WALLS == 1 const MENU_KEYS = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_0; #else const MENU_KEYS = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_0; #endif #else const MENU_KEYS = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_0; #endif new g_hVault; #if defined VISIBILITY_THROUGH_WALLS #if VISIBILITY_THROUGH_WALLS == 1 new const VAULT_FILE[] = "damager4"; #else new const VAULT_FILE[] = "damager5"; #endif #else new const VAULT_FILE[] = "damager5"; #endif #define IsBot(%1) (!g_iDamagerData[%1][AUTHID][0]) public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, "steelzzz"); register_cvar("damager_version", PLUGIN_VERSION, FCVAR_SERVER | FCVAR_SPONLY); // spy register_clcmd("say /damager", "Command_ShowDmgMenu"); register_menucmd(register_menuid("Command_ShowDmgMenu"), MENU_KEYS, "DmgMenu_Handler"); RegisterHam(Ham_TakeDamage, "player", "UserTakeDamage", true) //RegisterHookChain(RG_CBasePlayer_TakeDamage, "CPlayer_TakeDamage_Post", .post = true); g_HudSyncMessage = CreateHudSyncObj(); g_HudSyncMessage2 = CreateHudSyncObj(); g_hVault = nvault_open(VAULT_FILE); if(g_hVault == INVALID_HANDLE) { set_fail_state("[!] Opening nVault failed!"); } #if defined AUTO_RESET_INACTIVE_USERS else { nvault_prune(g_hVault, 0, get_systime() - (86400 * AUTO_RESET_INACTIVE_USERS)); } #endif register_dictionary("damager.txt"); } public plugin_end() { if(g_hVault != INVALID_HANDLE) { nvault_close(g_hVault); } } public client_authorized(iPlayer) { nVaultSaveData(iPlayer); } public client_putinserver(iPlayer) { g_iDamagerData[iPlayer][AUTHID][0] = 0; if(is_user_bot(iPlayer) || is_user_hltv(iPlayer)) { return; } get_user_authid(iPlayer, g_iDamagerData[iPlayer][AUTHID], MAX_AUTHID_LENGTH - 1); if(nvault_get_array(g_hVault, g_iDamagerData[iPlayer][AUTHID], g_iDamagerData[iPlayer], eData) <= 0) { g_iDamagerData[iPlayer][STATE] = ENABLE; g_iDamagerData[iPlayer][STYLE] = NUMBERS; #if defined VISIBILITY_THROUGH_WALLS #if VISIBILITY_THROUGH_WALLS == 1 g_iDamagerData[iPlayer][VISIBLE] = VISIBLE; #endif #endif g_iDamagerData[iPlayer][TYPE] = DEFAULT; g_iDamagerData[iPlayer][INCOMING] = DISABLE; } } public Command_ShowDmgMenu(iPlayer) { new szMenu[512]; new iLen; iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n^n", iPlayer, "MENU_TITLE"); iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n", iPlayer, "MENU_ITEM1", iPlayer, g_iDamagerData[iPlayer][STATE] ? "ENABLED" : "DISABLED"); iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n", iPlayer, "MENU_ITEM2", iPlayer, g_iDamagerData[iPlayer][STYLE] ? "STARS" : "NUMBERS"); iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n", iPlayer, "MENU_ITEM3", iPlayer, g_iDamagerData[iPlayer][TYPE] ? "CIRCLE" : "DEFAULT"); iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n", iPlayer, "MENU_ITEM4", iPlayer, g_iDamagerData[iPlayer][INCOMING] ? "ENABLED" : "DISABLED"); #if defined VISIBILITY_THROUGH_WALLS #if VISIBILITY_THROUGH_WALLS == 1 iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "%L^n", iPlayer, "MENU_ITEM5", iPlayer, g_iDamagerData[iPlayer][VISIBLE] ? "ENABLED" : "DISABLED"); #endif #endif formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n%L", iPlayer, "MENU_EXIT"); #if AMXX_VERSION_NUM < 183 set_pdata_int(iPlayer, m_iMenu, MENU_OFF); #endif show_menu(iPlayer, MENU_KEYS, szMenu, -1, "Command_ShowDmgMenu"); return PLUGIN_CONTINUE; } public DmgMenu_Handler(iPlayer, iKey) { if(iKey == 9) { nVaultSaveData(iPlayer); return PLUGIN_HANDLED; } #if defined VISIBILITY_THROUGH_WALLS #if VISIBILITY_THROUGH_WALLS == 1 new const iPtr[] = {STATE, STYLE, TYPE, INCOMING, VISIBLE}; #else new const iPtr[] = {STATE, STYLE, TYPE, INCOMING}; #endif #else new const iPtr[] = {STATE, STYLE, TYPE, INCOMING}; #endif iKey = iPtr[iKey]; g_iDamagerData[iPlayer][iKey] = !g_iDamagerData[iPlayer][iKey]; Command_ShowDmgMenu(iPlayer); return PLUGIN_HANDLED; } public UserTakeDamage(iVictim, weapon, iAttacker, Float:flDamage, iBitsDamageType) { if(!is_user_connected(iAttacker) || flDamage <= 1.0 || iVictim == iAttacker) { return; } if(iBitsDamageType & DMG_BLAST) { return; } #if defined VISIBILITY_THROUGH_WALLS #if VISIBILITY_THROUGH_WALLS == 1 if(!g_iDamagerData[iAttacker][STATE] || (!g_iDamagerData[iAttacker][VISIBLE] && !ExecuteHam(Ham_FVisible, iAttacker, iVictim))) #elseif VISIBILITY_THROUGH_WALLS == 2 if(!g_iDamagerData[iAttacker][STATE] || (!ExecuteHam(Ham_FVisible, iAttacker, iVictim))) #endif #else if(!g_iDamagerData[iAttacker][STATE]) #endif { return; } new iColor = random_num(0, charsmax(g_szColors)); if(g_iDamagerData[iAttacker][TYPE]) { new iPos = ++g_iDamagerData[iAttacker][POSITION]; if(iPos == sizeof(g_szCoords)) { iPos = g_iDamagerData[iAttacker][POSITION] = 0; } if(g_iDamagerData[iVictim][INCOMING]) { set_hudmessage(255, 0, 0, g_szCoords[iPos][0], g_szCoords[iPos][1]+0.06, 0, 0.1, 2.5, 0.02, 0.02, -1); ShowSyncHudMsg(iVictim, g_HudSyncMessage2, (g_iDamagerData[iVictim][STYLE]) ? "*" : "%.0f", flDamage); } set_hudmessage(g_szColors[iColor][0], g_szColors[iColor][1], g_szColors[iColor][2], g_szCoords[iPos][0], g_szCoords[iPos][1], 0, 0.1, 2.5, 0.02, 0.02, -1); } else { if(g_iDamagerData[iVictim][INCOMING]) { set_hudmessage(255, 0, 0, -1.0, 0.45, 2, 0.1, 4.0, 0.02, 0.02, -1); ShowSyncHudMsg(iVictim, g_HudSyncMessage2, (g_iDamagerData[iVictim][STYLE]) ? "*" : "%.0f", flDamage); } set_hudmessage(g_szColors[iColor][0], g_szColors[iColor][1], g_szColors[iColor][2], -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1); } ShowSyncHudMsg(iAttacker, g_HudSyncMessage, (g_iDamagerData[iAttacker][STYLE]) ? "*" : "%.0f", flDamage); } public nVaultSaveData(iPlayer) { if(!IsBot(iPlayer)) { nvault_set_array(g_hVault, g_iDamagerData[iPlayer][AUTHID], g_iDamagerData[iPlayer], eData); } }