Преработка на block damage

Въведение в PAWN скриптинга и поддръжка за същия.
Аватар
stancho156
Извън линия
Потребител
Потребител
Мнения: 75
Регистриран на: 04 Фев 2018, 11:32
Се отблагодари: 5 пъти

Преработка на block damage

Мнение от stancho156 » 30 Ное 2019, 17:56

Здравейте и отново не знам дали тука трябваше да слагам темата или в помощ и подръжка.
Ако съм сбъркал, извинявайте.
Ако, може да ми помогнете да преработя един сма файл, искам самия плъгин да може хем да блоква и хем да ънблоква демич.

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

/*
*
*	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;

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Преработка на block damage

Мнение от OciXCrom » 30 Ное 2019, 20:22

Не си объркал раздела ако искаш сам да го направиш, а ние да ти помогнем. Ако искаш друг да ти го даде наготово, тогава си го объркал.

Та, какъв е проблемът в момента? Както виждам има команди и за двете неща които си написал.

Аватар
stancho156
Извън линия
Потребител
Потребител
Мнения: 75
Регистриран на: 04 Фев 2018, 11:32
Се отблагодари: 5 пъти

Преработка на block damage

Мнение от stancho156 » 30 Ное 2019, 22:14

OciXCrom написа: 30 Ное 2019, 20:22 Не си объркал раздела ако искаш сам да го направиш, а ние да ти помогнем. Ако искаш друг да ти го даде наготово, тогава си го объркал.

Та, какъв е проблемът в момента? Както виждам има команди и за двете неща които си написал.
Вие да ми помогнете разбира се!

Проблема е че сложих ---> amx_unblockdamage <name/steamid/userid <1> и не иска да бачка самия плъгин така.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Преработка на block damage

Мнение от OciXCrom » 30 Ное 2019, 22:18

Защо си сложил това обаче? Самата команда amx_blockdamage има опция за изключване.

Аватар
stancho156
Извън линия
Потребител
Потребител
Мнения: 75
Регистриран на: 04 Фев 2018, 11:32
Се отблагодари: 5 пъти

Преработка на block damage

Мнение от stancho156 » 30 Ное 2019, 22:24

То има, проблема е че не иска да работи.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Преработка на block damage

Мнение от OciXCrom » 30 Ное 2019, 22:31

Как точно пишеш командата в конзолата?

Аватар
stancho156
Извън линия
Потребител
Потребител
Мнения: 75
Регистриран на: 04 Фев 2018, 11:32
Се отблагодари: 5 пъти

Преработка на block damage

Мнение от stancho156 » 30 Ное 2019, 22:56

amx_blockdamage "nick" "0"
amx_blockdamage "nick" "1"
Но и в двата случая блокирва.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Преработка на block damage

Мнение от OciXCrom » 01 Дек 2019, 01:11

Моля те предостави оригиналния код, защото нещата които си променил са доста нелогични.

Аватар
stancho156
Извън линия
Потребител
Потребител
Мнения: 75
Регистриран на: 04 Фев 2018, 11:32
Се отблагодари: 5 пъти

Преработка на block damage

Мнение от stancho156 » 01 Дек 2019, 19:02

OciXCrom написа: 01 Дек 2019, 01:11 Моля те предостави оригиналния код, защото нещата които си променил са доста нелогични.
Заповядай.

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

/*
*
*	Block Damage by Drekes
*	
*
*	Description:
*		Enables / disables damage done by a player.
*
*	Cvars:
*		None
*	
*	Commands:
*		amx_blockdamage <name/steamid/userid> <0/1> 	"Block / Unblock damage done by a player." 
*		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_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");
	
	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);
	}
	
	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;

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Преработка на block damage

Мнение от OciXCrom » 01 Дек 2019, 20:28

Обясни какво изписва след като напишеш командата с 0.

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

Обратно към “Скриптиране”

Кой е на линия

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