Block Weapon Drop

L.E.O.N

Source.org.ua
Сообщения
114
Реакции
7
Ищу плагин (если он есть конечно ) Block Weapon Drop

Описание : Запрет выкидывания всего оружие кроме скаут

P.S. Если не там создал сори . И если кто то может написать такой Буду благодарен
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <cstrike>

public Action:CS_OnCSWeaponDrop(client, weaponIndex)
{
	decl String:sWeapon[64];
	GetEntityClassname(weaponIndex, sWeapon, sizeof(sWeapon));
	if(StrEqual(sWeapon[7], "scout")) return Plugin_Continue;
	 return Plugin_Handled;
}
 

L.E.O.N

Source.org.ua
Сообщения
114
Реакции
7
А еще вопрос как сделать чтобы при смерти у игрока выпадало оружие ?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #5
L.E.O.N, Попробуй так:
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <cstrike>

public Action:CS_OnCSWeaponDrop(client, weaponIndex)
{
	if(IsPlayerAlive(client))
	{
		decl String:sWeapon[64];
		GetEntityClassname(weaponIndex, sWeapon, sizeof(sWeapon));
		if(StrEqual(sWeapon[7], "scout")) return Plugin_Continue;
		else return Plugin_Handled;
	}
	return Plugin_Continue;
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
R1KO, я почти также пробовал и твой вариант сейчас - разницы нет. Оружие выпадает из рук игрока ещё как бы ДО его фактической смерти.
В таком событии не ловит IsPlayerAlive(client) - всегда жив и всё.
Опять же вспоминаю кнопки:
// These defines are for client button presses.
#define IN_ATTACK (1 << 0)
#define IN_JUMP (1 << 1)
#define IN_DUCK (1 << 2)
#define IN_FORWARD (1 << 3)
#define IN_BACK (1 << 4)
#define IN_USE (1 << 5)
#define IN_CANCEL (1 << 6)
#define IN_LEFT (1 << 7)
#define IN_RIGHT (1 << 8)
#define IN_MOVELEFT (1 << 9)
#define IN_MOVERIGHT (1 << 10)
#define IN_ATTACK2 (1 << 11)
#define IN_RUN (1 << 12)
#define IN_RELOAD (1 << 13)
#define IN_ALT1 (1 << 14)
#define IN_ALT2 (1 << 15)
#define IN_SCORE (1 << 16) /**< Used by client.dll for when scoreboard is held down */
#define IN_SPEED (1 << 17) /**< Player is holding the speed key */
#define IN_WALK (1 << 18) /**< Player holding walk key */
#define IN_ZOOM (1 << 19) /**< Zoom key for HUD zoom */
#define IN_WEAPON1 (1 << 20) /**< weapon defines these bits */
#define IN_WEAPON2 (1 << 21) /**< weapon defines these bits */
#define IN_BULLRUSH (1 << 22)
#define IN_GRENADE1 (1 << 23) /**< grenade 1 */
#define IN_GRENADE2 (1 << 24) /**< grenade 2 */
#define IN_ATTACK3 (1 << 25)
Но нет такой, а это бы решило проблему со смертью.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #7
AlmazON, можно делать pre хук смерти игрока, ставить его глобальный бул в true, и в public Action:CS_OnCSWeaponDrop(client, weaponIndex) проверять бул, а при спавне обратно бул в false
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #9
Оффтоп



L.E.O.N,
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <cstrike>

new bool:g_bIsAlive[MAXPLAYERS+1];

public OnPluginStart()
{
	HookEvent("player_death", Event_OnPlayerDeath, EventHookMode_Pre);
	HookEvent("player_spawn", Event_OnPlayerSpawn);
}

public Event_OnPlayerDeath(Handle:hEvent, const String:name[], bool:dontBroadcast)
{
	g_bIsAlive[GetClientOfUserId(GetEventInt(hEvent, "userid"))] = false;
}

public Event_OnPlayerSpawn(Handle:hEvent, const String:name[], bool:dontBroadcast)
{
	g_bIsAlive[GetClientOfUserId(GetEventInt(hEvent, "userid"))] = true;
}


public Action:CS_OnCSWeaponDrop(iClient, weaponIndex)
{
	if(g_bIsAlive[iClient])
	{
		decl String:sWeapon[64];
		GetEntityClassname(weaponIndex, sWeapon, sizeof(sWeapon));
		if(StrEqual(sWeapon[7], "scout")) return Plugin_Continue;
		else return Plugin_Handled;
	}
	return Plugin_Continue;
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
R1KO, почти также делал. Твоё тоже не работает.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #11
AlmazON, можно попробыватьSDKHooks_DropWeapon ?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Оффтоп
Проверял у себя свой и твой, почему не работает.
Тест код:
PHP:
#include <cstrike>

new bool:g_bIsAlive[MAXPLAYERS+1];

public OnPluginStart()
{
	HookEvent("player_death", Event_OnPlayerDeath, EventHookMode_Pre);
	HookEvent("player_spawn", Event_OnPlayerSpawn);
}

public Event_OnPlayerDeath(Handle:hEvent, const String:name[], bool:dontBroadcast)
{
	g_bIsAlive[GetClientOfUserId(GetEventInt(hEvent, "userid"))] = false;
	PrintToChatAll("Dead!!! g_bIsAlive = %d.", g_bIsAlive[GetClientOfUserId(GetEventInt(hEvent, "userid"))]);
}

public Event_OnPlayerSpawn(Handle:hEvent, const String:name[], bool:dontBroadcast)
{
	g_bIsAlive[GetClientOfUserId(GetEventInt(hEvent, "userid"))] = true;
}


public Action:CS_OnCSWeaponDrop(iClient, weaponIndex)
{
	if(g_bIsAlive[iClient])
	{
		PrintToChatAll("Drop!!! g_bIsAlive = %d.", g_bIsAlive[iClient]);
		decl String:sWeapon[64];
		GetEntityClassname(weaponIndex, sWeapon, sizeof(sWeapon));
		if(StrEqual(sWeapon[7], "scout")) return Plugin_Continue;
		else return Plugin_Handled;
	}
	return Plugin_Continue;
}
Итого видим:
a83633f2cc5f.jpg

Судя по моим тестам, оружие "дропается" даже перед смертью с EventHookMode_Pre.
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #13
AlmazON, а если так:
PHP:
#include <cstrike>

new bool:g_bIsAlive[MAXPLAYERS+1];

public OnPluginStart()
{
	HookEvent("player_death", Event_OnPlayerDeath, EventHookMode_Pre);
	HookEvent("player_spawn", Event_OnPlayerSpawn);
}

public Event_OnPlayerDeath(Handle:hEvent, const String:name[], bool:dontBroadcast)
{
	new iClient = GetClientOfUserId(GetEventInt(hEvent, "userid"));
	if(iClient) g_bIsAlive[iClient] = false;
	PrintToChat(iClient, "Dead!!! g_bIsAlive = %d.", g_bIsAlive[iClient]);
}

public Event_OnPlayerSpawn(Handle:hEvent, const String:name[], bool:dontBroadcast)
{
	new iClient = GetClientOfUserId(GetEventInt(hEvent, "userid"));
	if(iClient) g_bIsAlive[iClient] = true;
	PrintToChat(iClient, "Spawn!!! g_bIsAlive = %d.", g_bIsAlive[iClient]);
}

public Action:CS_OnCSWeaponDrop(iClient, weaponIndex)
{
	if(g_bIsAlive[iClient])
	{
		PrintToChat(iClient, "Drop!!! g_bIsAlive = %d.", g_bIsAlive[iClient]);
		decl String:sWeapon[64];
		GetEntityClassname(weaponIndex, sWeapon, sizeof(sWeapon));
		if(StrEqual(sWeapon[7], "scout")) return Plugin_Continue;
		else return Plugin_Handled;
	}
	return Plugin_Continue;
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
R1KO, Drop = 1, Dead = 0. Теперь просто данные о смертях ботов в чате не вижу, лишь свои.
Я даже просто переменной new g_bIsAlive; блокировал, как общей для всех, создавая "окно" (с хуком смерти ДО - 0 и ПОСЛЕ - 1). Но "дропается" прежде, чем игрок умирает.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
...если при 1 спавне от ботов не оставалось оружия. Вот это да. :)

Добавлено через 26 минут
L.E.O.N, заметил ошибку в логах от плагина.
Вот, этот вариант исправлен
GetEventInt(event, "health")
заодно и короче:
PHP:
#include <cstrike> 

new bool:lock[MAXPLAYERS+1]; 

public OnPluginStart() 
{ 
	HookEvent("player_hurt", PlayerHurt, EventHookMode_PostNoCopy); 
	HookEvent("player_spawn", PlayerSpawn, EventHookMode_PostNoCopy); 
} 

public PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
	if (GetEventInt(event, "health") < 1) lock[GetClientOfUserId(GetEventInt(event, "userid"))] = false; 
} 

public PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) lock[GetClientOfUserId(GetEventInt(event, "userid"))] = true;

public Action:CS_OnCSWeaponDrop(client, index) 
{ 
	if (IsClientInGame(client) && lock[client]) 
	{ 
		decl String:weapon[25]; 
		GetEntityClassname(index, weapon, sizeof(weapon)); 
		if(StrEqual(weapon[7], "scout")) return Plugin_Continue; 
		else return Plugin_Handled; 
	} 
	return Plugin_Continue; 
}

Если игрок умирает от противника - оружие остаётся. Если его убить мгновенно, например, через админку - оружие исчезает вместе с убитым.
Просто выбросить оружие по прежнему нельзя, кроме scout'а.
Минус вообще такого кода, как и просто при обычной блокировке - нельзя купить основное оружие, если оно уже есть. Да и пистолеты не сменить.
 
Последнее редактирование:

L.E.O.N

Source.org.ua
Сообщения
114
Реакции
7
СпС . Этот плагин мне для Deathrun сервера . чтобы игроки не могли выкидывать оружие в спавн зонах,взял оружку и не*** выкидывать
 

Niver

Участник
Сообщения
4
Реакции
0
Привет. Можно как нибудь сделать, что бы при выбросе скаута. Скаут исчезал через не значительное промежуток времени. Убирал только тот скаут, который выбросил игрок.
 
Сверху Снизу