Запрет сброс бомбы csgo

akvorok.ego

Участник
Сообщения
314
Реакции
186
Оффтоп

PHP:
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>

public OnPluginStart() 
{ 
    HookEvent("player_death", Event_PlayerDeath); 
} 

public OnClientPutInServer(client)
{
	SDKHook(client, SDKHook_Touch, Touch);
}

public Touch(ent1, ent2)
{
	if(IsClientConnected(ent1) && IsClientInGame(ent1) && IsPlayerAlive(ent1) && GetClientTeam(ent1) == CS_TEAM_CT)
	{
		decl String:name[50];
		GetEdictClassname(ent2, name, 50);
			
		if(StrContains(name, "weapon_c4") != -1)
		{
			SetEntProp(ent1, Prop_Send, "m_iTeamNum", 2);
			RemoveEdict(ent2);
			GivePlayerItem(ent1, "weapon_c4");
			SetEntProp(ent1, Prop_Send, "m_iTeamNum", 3);
		}
	}
}

public Action:Event_PlayerDeath(Handle:event, const String:name[], bool:broadcast)  
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	new String:weapon[32];
	GetEdictClassname(client, weapon, 32);
	if (IsClientInGame(attacker) && IsPlayerAlive(attacker) && GetClientTeam(attacker) == 3 && FindEntityByClassname(MaxClients+1, "planted_c4") == -1 && strcmp(weapon, "weapon_c4") == 0)
	{
		GivePlayerItem(attacker, "weapon_c4");
	} 
}

public Action:CS_OnCSWeaponDrop(client, weapon)  
{  
	if(IsClientInGame(client) && 0 < GetClientHealth(client))  
    { 
		decl String:classname[11];  
		GetEdictClassname(weapon, classname, 11);  
		if(strcmp(classname, "weapon_c4") == 0)  
        {  
			PrintToChat(client, "Облом... Бомба сбросу не подлежит!");  
			return Plugin_Handled;  
		}  
	}  
	return Plugin_Continue;  
}
Вроде должно работать.
 
Последнее редактирование:

DarklSide

Участник
Сообщения
931
Реакции
468
Всем привет. Если такой плагин Который бы запрещал сброс бомбы.? Или как можно запретить игроку сброс бомбы плюс наказание....для csgo Просто некоторые игроки не просто сбрасываю бомбу а стараются ее так спрятать,чтоб никто не нашел либо не смог достать.....Из этого страдают нормальные игроки теряя время как ее достать от куда не возможно...Просто уже бесит это.

PHP:
#include <sourcemod>
public OnPluginStart()
{
    AddCommandListener(dropb, "drop");
}
public Action:dropb(client, const String:command[], args)
{
    if(client && client <= MaxClients && IsClientInGame(client) && IsPlayerAlive(client))
    {
        new String:s_weapon[16];
        new i_weapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
        if(i_weapon > -1 && GetEdictClassname(i_weapon, s_weapon, sizeof(s_weapon)))
        {
            if(StrEqual(s_weapon, "weapon_c4", true))
            {
                PrintToChat(client, "Bang bang... Feuer frei!");  
                return Plugin_Handled;
            }
        }
    }
    return Plugin_Continue;
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
По мне, так самый интересный вариант: не давать бомбу, когда будущий минёр умирает, а сделать, чтобы бомба зависла в воздухе. Таким образом, она никуда не упадёт за текстуры. Другой подошёл, да забрал.
 

DarklSide

Участник
Сообщения
931
Реакции
468
AlmazON, интересный, но не оптимальный - вспомним surf карты с закладкой бомбы, и (если предложение, поднимать над землей, после падения бомбы, есть снизу телепорт на всю карту, там и будет лежать). На de_ картах, так можно её еще сложнее закинуть.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
так можно её еще сложнее закинуть
Нет, не так. Чтобы она вообще не падала никуда, а повисла на том месте, где умер террорист. На уровне его глаз или её собственных последних, при событии смерти. Как её можно закинуть то так? Игрок же за текстуры голову не просунет, значит там, где он был - бомба. А раз он там был и бомба там, то и другой может туда же залезть/подойти и забрать, что требуется. В общем, как бы физику выброса убрать.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #26
AlmazON, это легко сделать
 

akvorok.ego

Участник
Сообщения
314
Реакции
186
Нет, не так. Чтобы она вообще не падала никуда, а повисла на том месте, где умер террорист. На уровне его глаз или её собственных последних, при событии смерти. Как её можно закинуть то так? Игрок же за текстуры голову не просунет, значит там, где он был - бомба. А раз он там был и бомба там, то и другой может туда же залезть/подойти и забрать, что требуется. В общем, как бы физику выброса убрать.

PHP:
#include <sourcemod>
#include <sdktools>

public Action:CS_OnCSWeaponDrop(client, weaponIndex)
{
	if(IsClientInGame(client) && 0 < GetClientHealth(client) && GetClientTeam(client) == 2)  
	{ 
		decl String:classname[32];  
		GetEdictClassname(weaponIndex, classname, 32);  
		if(strcmp(classname, "weapon_c4") == 0)  
		{  
			CreateTimer(3.0, C4_Drop_Timer, EntIndexToEntRef(weaponIndex), TIMER_FLAG_NO_MAPCHANGE);
		}
	}
	return Plugin_Continue;  
}

public Action:C4_Drop_Timer(Handle:timer, any:ref)
{ 
	new weapon = EntRefToEntIndex(ref);
	decl Float:c4_ground_pos[3];
	GetEntPropVector(weapon, Prop_Send, "m_vecOrigin", c4_ground_pos);
	decl Float:c4_air_pos[3];
	c4_air_pos[0] = c4_ground_pos[0];
	c4_air_pos[1] = c4_ground_pos[1];
	c4_air_pos[2] = c4_ground_pos[2] + 50;
	TeleportEntity(weapon, c4_air_pos, NULL_VECTOR, NULL_VECTOR);
	
	new rotator = CreateEntityByName("func_rotating");
	if (rotator > 0)
	{
		DispatchKeyValueVector(rotator, "origin", c4_ground_pos);
		decl String:rotator_name[20];
		Format(rotator_name, 20, "rt_%d", rotator);
		DispatchKeyValue(rotator, "targetname", rotator_name);
		DispatchKeyValue(rotator, "maxspeed", "100");
		DispatchKeyValue(rotator, "dmg", "0");
		DispatchKeyValue(rotator, "solid", "0");
		DispatchKeyValue(rotator, "spawnflags", "64");
		DispatchSpawn(rotator);
		SetVariantString(rotator_name);
		AcceptEntityInput(weapon, "SetParent");
		AcceptEntityInput(rotator, "Start");
	} 
}

Сделать чтобы после смерти террориста с бомбой она поднималась в воздух я не смог.
 

DarklSide

Участник
Сообщения
931
Реакции
468
Оптимальным для всех карт будет так
PHP:
#include <sourcemod>
#include <sdktools_functions>
#include <sdktools_entinput>
public OnPluginStart()
{
    AddCommandListener(dropb, "drop");
    AddCommandListener(killb, "kill");
    AddCommandListener(killb, "joinclass");
    AddCommandListener(killb, "jointeam");
    AddCommandListener(killb, "spectate");
}
public Action:dropb(client, const String:command[], args)
{
    if (client && client <= MaxClients && IsClientInGame(client) && IsPlayerAlive(client) && !IsFakeClient(client))
    {
        if (b_dropbomp(client) > -1)
        {
            PrintToChat(client, "Bang bang... Feuer frei!");
            return Plugin_Handled;
        }
    }
    return Plugin_Continue;
}
public b_dropbomp(client)
{
    new String:s_weapon[16];
    new i_weapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
    if (i_weapon > -1 && GetEdictClassname(i_weapon, s_weapon, sizeof(s_weapon)))
    {
        if (StrEqual(s_weapon, "weapon_c4", true))
        {
            return i_weapon;
        }
    }
    return -1;
}
public Action:killb(client, const String:command[], args)
{
    if (IsClientInGame(client) && IsPlayerAlive(client))
    {
        new i_weapon2 = b_dropbomp(client);
        if (i_weapon2 != -1)
        {
            new i_drops = -1;
            for (new x = 1; x <= MaxClients; x++)
            {
                if (IsClientInGame(x) && client != x && IsPlayerAlive(x))
                {
                    if (GetClientTeam(x) == 2)
                    {
                        i_drops = x;
                    }
                    continue;
                }
            }
            if (i_drops != -1)
            {
                if (RemovePlayerItem(client, i_weapon2))
                {
                    if (GivePlayerItem(i_drops, "weapon_c4") > -1)
                    {
                        AcceptEntityInput(i_weapon2, "kill");
                    }
                }
            }
        }
    }
    return Plugin_Continue;
}
 

максимка27

Участник
Сообщения
513
Реакции
213
Хорошо работает мгновенный возврат бомбы после выброски, при смерти она выпадывает
 

vasil

Участник
Сообщения
115
Реакции
21
Оптимальным для всех карт будет так
PHP:
#include <sourcemod>
#include <sdktools_functions>
#include <sdktools_entinput>
public OnPluginStart()
{
    AddCommandListener(dropb, "drop");
    AddCommandListener(killb, "kill");
    AddCommandListener(killb, "joinclass");
    AddCommandListener(killb, "jointeam");
    AddCommandListener(killb, "spectate");
}
public Action:dropb(client, const String:command[], args)
{
    if (client && client <= MaxClients && IsClientInGame(client) && IsPlayerAlive(client) && !IsFakeClient(client))
    {
        if (b_dropbomp(client) > -1)
        {
            PrintToChat(client, "Bang bang... Feuer frei!");
            return Plugin_Handled;
        }
    }
    return Plugin_Continue;
}
public b_dropbomp(client)
{
    new String:s_weapon[16];
    new i_weapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
    if (i_weapon > -1 && GetEdictClassname(i_weapon, s_weapon, sizeof(s_weapon)))
    {
        if (StrEqual(s_weapon, "weapon_c4", true))
        {
            return i_weapon;
        }
    }
    return -1;
}
public Action:killb(client, const String:command[], args)
{
    if (IsClientInGame(client) && IsPlayerAlive(client))
    {
        new i_weapon2 = b_dropbomp(client);
        if (i_weapon2 != -1)
        {
            new i_drops = -1;
            for (new x = 1; x <= MaxClients; x++)
            {
                if (IsClientInGame(x) && client != x && IsPlayerAlive(x))
                {
                    if (GetClientTeam(x) == 2)
                    {
                        i_drops = x;
                    }
                    continue;
                }
            }
            if (i_drops != -1)
            {
                if (RemovePlayerItem(client, i_weapon2))
                {
                    if (GivePlayerItem(i_drops, "weapon_c4") > -1)
                    {
                        AcceptEntityInput(i_weapon2, "kill");
                    }
                }
            }
        }
    }
    return Plugin_Continue;
}

Код работает хорошо....Багов пока не обнаружено.
 
Сверху Снизу