Ако съм сбъркал, извинявайте.
Ако, може да ми помогнете да преработя един сма файл, искам самия плъгин да може хем да блоква и хем да ънблоква демич.
Код за потвърждение: Избери целия код
/*
*
* Block Damage by Drekes
*
*
* Description:
* Enables / disables damage done by a player.
*
* Cvars:
* None
*
* Commands:
* amx_blockdamage <name/steamid/userid> <0> "Block / Unblock damage done by a player."
* amx_unblockdamage <name/steamid/userid <1>
* amx_blockdamage_list "List all the currently connected no-damage players"
*
* Credits:
* Pan1c: Came up with the idea as a request here: http://forums.alliedmods.net/showthread.php?t=149978
*
*
* Changelog:
* v1.0.0: Created plugin
* v1.0.1: Removed Trie
* v1.0.2: Optimized code
*
*/
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <nvault>
#pragma semicolon 1
#define VERSION "1.0.2"
#define IsPlayer(%1) (1 <= %1 <= g_iMaxPlayers)
new g_Vault,
g_iMaxPlayers;
new bool: g_bNoDamage[33];
public plugin_init()
{
register_plugin("Block Damage", VERSION, "Drekes");
register_cvar("blockdamage_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
register_concmd("amx_blockdamage", "CmdBlockDamage", ADMIN_BAN,
"<name/steamid/userid> <0/1> ^"Block / Unblock a player from doing damage.^"");
register_concmd("amx_unblockdamage", "CmdBlockDamage", ADMIN_BAN,
"<name/steamid/userid> <0/1> ^"Block / Unblock a player from doing damage.^"");
register_concmd("amx_blockdamage_list", "CmdBlockDamageList", ADMIN_BAN,
"Displays a list with all current connected no-damage players");
RegisterHam(Ham_TakeDamage, "player", "FwdPlayerTakeDamagePre", 0);
g_iMaxPlayers = get_maxplayers();
g_Vault = nvault_open("amx_blockdamage");
g_Vault = nvault_open("amx_unblockdamage");
if(g_Vault == INVALID_HANDLE)
set_fail_state("Could not open nvault.");
}
public client_authorized(id)
{
new szAuthId[35];
get_user_authid(id, szAuthId, charsmax(szAuthId));
new szDummy;
nvault_get(g_Vault, szAuthId, szDummy);
if(szDummy)
g_bNoDamage[id] = true;
else
g_bNoDamage[id] = false;
}
public CmdBlockDamage(id, iLvl, iCid)
{
if(!cmd_access(id, iLvl, iCid, 3))
return PLUGIN_HANDLED;
new szArg[35], szNum[2],
iPlayer;
read_argv(1, szArg, charsmax(szArg));
read_argv(2, szNum, charsmax(szNum));
iPlayer = cmd_target(id, szArg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS);
if(iPlayer)
{
new szAdminName[32], szAdminAuth[32];
new szPlayerName[32], szPlayerAuth[32];
get_user_name(id, szAdminName, charsmax(szAdminName));
get_user_name(iPlayer, szPlayerName, charsmax(szPlayerName));
get_user_authid(id, szAdminAuth, charsmax(szAdminAuth));
get_user_authid(iPlayer, szPlayerAuth, charsmax(szPlayerAuth));
new bool: bNoDamage = g_bNoDamage[iPlayer] = !(szNum[0] == 0);
if(bNoDamage)
nvault_set(g_Vault, szPlayerAuth, "1");
else
nvault_remove(g_Vault, szPlayerAuth);
console_print(id, "[AMXX] %slocked damage for player %s", bNoDamage ? "B" : "Unb", szPlayerName);
show_activity(id, szAdminName, "%slocked damage for %s", bNoDamage ? "B" : "Unb", szPlayerName);
log_amx("[AMXX] ADMIN ^"%s^" <%s> %slocked damage for ^"%s^" <%>", szAdminName, szAdminAuth,
bNoDamage ? "B" : "Unb", szPlayerName, szPlayerAuth);
}
public CmdBlockDamage(id, iLvl, iCid)
{
if(!cmd_access(id, iLvl, iCid, 3))
return PLUGIN_HANDLED;
new szArg[35], szNum[2],
iPlayer;
read_argv(1, szArg, charsmax(szArg));
read_argv(2, szNum, charsmax(szNum));
iPlayer = cmd_target(id, szArg, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_NO_BOTS);
if(iPlayer)
{
new szAdminName[32], szAdminAuth[32];
new szPlayerName[32], szPlayerAuth[32];
get_user_name(id, szAdminName, charsmax(szAdminName));
get_user_name(iPlayer, szPlayerName, charsmax(szPlayerName));
get_user_authid(id, szAdminAuth, charsmax(szAdminAuth));
get_user_authid(iPlayer, szPlayerAuth, charsmax(szPlayerAuth));
new bool: bNoDamage = g_bNoDamage[iPlayer] = !(szNum[0] == 0);
if(bNoDamage)
nvault_set(g_Vault, szPlayerAuth, "1");
else
nvault_remove(g_Vault, szPlayerAuth);
console_print(id, "[AMXX] %slocked damage for player %s", bNoDamage ? "B" : "Unb", szPlayerName);
show_activity(id, szAdminName, "%slocked damage for %s", bNoDamage ? "B" : "Unb", szPlayerName);
log_amx("[AMXX] ADMIN ^"%s^" <%s> %slocked damage for ^"%s^" <%>", szAdminName, szAdminAuth,
bNoDamage ? "B" : "Unb", szPlayerName, szPlayerAuth);
}
return PLUGIN_HANDLED;
}
public CmdBlockDamageList(id, iLvl, iCid)
{
if(!cmd_access(id, iLvl, iCid, 1))
return PLUGIN_HANDLED;
new szText[512], szName[32], iLen;
iLen = formatex(szText, charsmax(szText), "Currently connected no-damage players:^n");
new iPlayers[32], iNum, iPlayer, iBlockedPlayers;
get_players(iPlayers, iNum, "ch");
for(new i = 0; i < iNum; i++)
{
iPlayer = iPlayers[i];
if(!g_bNoDamage[iPlayer])
continue;
iBlockedPlayers++;
get_user_name(iPlayer, szName, charsmax(szName));
iLen += format(szText[iLen], charsmax(szText) - iLen, "- %s^n", szName);
}
if(!iBlockedPlayers)
formatex(szText, charsmax(szText), "No no-damage players connected.");
console_print(id, szText);
return PLUGIN_HANDLED;
}
public FwdPlayerTakeDamagePre(iVictim, iInflictor, iAttacker, Float: Damage, iDmgBits)
return (IsPlayer(iAttacker) && g_bNoDamage[iAttacker]) ? HAM_SUPERCEDE : HAM_IGNORED;