[Logo] Игровой форум КС 1.6, КСС, СОУРС, КСГО - сервера, новости из мира, аукцион
  [Search] Поиск   [Recent Topics] Последние темы   [Hottest Topics] Горячие темы   [Top Downloads] Топ загрузок   [Members] Список участников   [Groups] На главную страницу 
[Register] Регистрация /  [Login] Вход 
КС 1.6 Сервера КСC Сервера КСГО Сервера Добавить сервер Скачать КС 1.6
Защита заложников от убийства - Hostage Protection 1.8
Индекс форума » Плагины и код для КС 1.6, Counter-Strike 1.6
Автор Сообщение
FanCS


[Avatar]

Зарегистрирован: 10/06/2015 04:02:29
Сообщений: 62
Оффлайн

Этот плагин очень просто разбирается с игроками, которые килают заложников. Он работает только на картах с заложниками.
Вы можете указать наказание (при помощи cvars) для игроков которые убивают заложников. Плагин блокирует любое нанесение урона заложнику.

Cvars:
варианты наказаний - hp_punishment: 0 - ничего | 1 - наносит урон игроку | 2 - самойбийство | 3 - бан | 4 - случайное действие
урон игроку - hp_slap_value: от 0 до 100
время бана - hp_ban_time: время бана (0 навсегда)
кровь заложника - hp_showblood: 1 - да, 0 - нет.

Установка:
1 Скачайте файл.
2 Положите hostage_protection.amxx в addons/amxmodx/plugins
3 Откройте addons/amxmodx/configs/plugins.ini и добавьте в конец строку hostage_protection.amxx
4 Положите hostage_protection.txt в addons/amxmodx/data/lang
5 Перезапустите сервер или смените карту.

Код плагина:
/*
	Copyleft 2016 @ HamletEagle
	Plugin Theard: https://forums.alliedmods.net/showthread.php?t=242948

	Hostage Protection is free software;
	you can redistribute it and/or modify it under the terms of the
	GNU General Public License as published by the Free Software Foundation.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with Hostage Protection; if not, write to the
	Free Software Foundation, Inc., 59 Temple Place - Suite 330,
	Boston, MA 02111-1307, USA.
*/

#include <amxmodx>
#include <hamsandwich>
#include <engine>
#include <cstrike>
#include <fun>
#include <fakemeta>
#if AMXX_VERSION_NUM  >= 183
#include <csx>
#endif


	#define PluginName    "Hostage Protection"
	#define PluginVersion "1.8"
	#define PluginAuthor  "HamletEagle"
	
	#define ValidPlayer(%0) (1 <= %0 <= MaxPlayers)    

	enum _:CvarsData
	{
		Slap,
		Ban,
		Punish,
		Blood,
		Team
	}

	new MaxPlayers
	new HandleCvars[CvarsData]
	
	new bool:IsAmxBansRunning
	
	new HamHook:HandleCHostageTraceAttackHook
	new HamHook:HandleCHostageTakeDamageHook
	
	stock const m_rgpPlayerItems_CBasePlayer[ 6 ] = { 367 , 368 , ... }
	const XO_PLAYER = 5

public plugin_init()
{
	register_plugin
	(	
		.plugin_name  = PluginName,
		.version = PluginVersion, 
		.author	 = PluginAuthor
	)

	register_dictionary("hostage_protection.txt")
	
	new const HostageEntity[] = "hostage_entity"
	HandleCHostageTraceAttackHook = RegisterHam(Ham_TraceAttack, HostageEntity, "CHostage_TraceAttack",  false) 
	HandleCHostageTakeDamageHook  = RegisterHam(Ham_TakeDamage , HostageEntity, "CHostage_TakeDamage" ,  false)
	
	HandleCvars[Slap    ] = register_cvar("hp_slap_value", "25")
	HandleCvars[Ban     ] = register_cvar("hp_ban_time"  , "10")
	HandleCvars[Punish  ] = register_cvar("hp_punishment", "4" )
	HandleCvars[Blood   ] = register_cvar("hp_showblood" , "0" )
	HandleCvars[Team    ] = register_cvar("hp_blockteam" , "b" )
	
	register_event("HLTV", "OnNewRound_Event", "a", "1=0", "2=0")  
	MaxPlayers = get_maxplayers()
	
	CheckMapType()
}

public plugin_cfg()
{
	if(is_plugin_loaded("amxbans_core.amxx", true) != -1)
	{
		IsAmxBansRunning = true
	}
}

public plugin_pause()
{
	DisableHamForward(HandleCHostageTraceAttackHook)
	DisableHamForward(HandleCHostageTakeDamageHook)
}

public plugin_unpause()
{
	EnableHamForward(HandleCHostageTraceAttackHook)
	EnableHamForward(HandleCHostageTakeDamageHook)
}

CheckMapType()
{
	#if AMXX_VERSION_NUM < 183
	new const EntClasses[][] = 
	{ 
		"func_hostage_rescue", 
		"info_hostage_rescue", 
		"hostage_entity", 
		"monster_entity" 
	}

	for(new i; i < sizeof EntClasses;  i++)
	{
		if(find_ent_by_class(-1, EntClasses[i]))
		{
			//At least a needed ent is here, return
			return
		}
	}
	#else
	if(get_map_objectives() & MapObjective_Hostage)
    {
        return 
    }
	#endif

	log_amx("%L", LANG_SERVER, "HP_FAILPLUGIN")
	pause("a")	
}  

public CHostage_TraceAttack(Ent, Attacker) 
{
	if(GetTeamToBlock(get_user_team(Attacker)))
	{
		if(get_pcvar_num(HandleCvars[Punish]) != 0)
		{
			PunishPlayer(Attacker)
		}
		return HAM_SUPERCEDE
	}
	return HAM_IGNORED
}

public CHostage_TakeDamage(Victim, Inflictor, Attacker) 
{
	if(ValidPlayer(Attacker)) 
	{
		if(GetTeamToBlock(get_user_team(Attacker)))
		{
			if(get_pcvar_num(HandleCvars[Punish]) != 0)
			{
				PunishPlayer(Attacker)
			}
			return HAM_SUPERCEDE
		}
	}

	return HAM_IGNORED
}

public OnNewRound_Event()
{
		if(!get_pcvar_num(HandleCvars[Blood]))
		{
			EnableHamForward(HandleCHostageTraceAttackHook)
		}
		
		else
		{
			DisableHamForward(HandleCHostageTraceAttackHook)
		}
}

PunishPlayer(Attacker)
{
	new Userid = get_user_userid(Attacker)

	switch(get_pcvar_num(HandleCvars[Punish])) 
	{
		case 1: 
		{
			server_cmd("amx_slap #%i %i", Userid, get_pcvar_num(HandleCvars[Slap]))
		}

		case 2: 
		{
			server_cmd("amx_slay #%i", Userid)
		}
	
		case 3: 
		{
			if(!IsAmxBansRunning)
			{
				server_cmd("amx_ban #%i %i ^"%L^"", Userid, get_pcvar_num(HandleCvars[Ban]), Userid, "HP_NOTALLOWED")
			}
			else
			{
				server_cmd("amx_ban %i #%i ^"%L^"", get_pcvar_num(HandleCvars[Ban]), Userid, "HP_NOTALLOWED")
			}
		}

		case 4 :
		{
			switch(random_num(1, 3)) 
			{
				case 1: 
				{
					set_user_health(Attacker, (get_user_health(Attacker) / 2))
				}

				case 2: 
				{
					cs_set_user_money(Attacker, (cs_get_user_money(Attacker) / 2)) 
				}

				case 3: 
				{
					if(!HasOnlyKnife(Attacker))
					{
						strip_user_weapons(Attacker)
						give_item(Attacker, "weapon_knife")
					}
				}
			}	
		}	
	} 
}

HasOnlyKnife(id)
{
	for(new i = 1; i < 5; i++)//5 because on cs_ maps player can't have a c4
	{
		if(get_pdata_cbase(id, m_rgpPlayerItems_CBasePlayer[i], XO_PLAYER) != -1)
		{
			if(i != 3)
			{
				return false
			}
		}
	}
	return true
}

bool:GetTeamToBlock(PlayerTeam)
{
	new TeamIdentifier[2]
	get_pcvar_string(HandleCvars[Team], TeamIdentifier, charsmax(TeamIdentifier))
	
	new Index
	switch(TeamIdentifier[0])
	{
		 case 't':
		 {
			Index = 1
		 }
		 case 'c':
		 {
			Index = 2
		 }
		 case 'b':
		 {
			Index = 3
		 }
	}
	
	if(Index == 3 || PlayerTeam == Index)
	{
		return true
	}
	return false
}

 Имя файла hostage_protection.txt [Disk] Загрузить
 Описание Описание не предоставлено
 Размер файла 3 Kbytes
 Скачано:  0 раз

 Имя файла hostage_protection.amxx [Disk] Загрузить
 Описание Описание не предоставлено
 Размер файла 7 Kbytes
 Скачано:  0 раз

 
Индекс форума » Плагины и код для КС 1.6, Counter-Strike 1.6
Перейти:   
КС 1.6 Сервера КСC Сервера КСГО Сервера Добавить сервер Скачать КС 1.6
Яндекс.Метрика