Написание плагинов

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393

Библиотека.

Описание: Если игрок пишет sm_s, то у игрока забирается все оружие, скин красится в черный цвет и он не может поднимать оружие, пока не будет доступен LR. Если игроку доступен LR, то команда sm_s блокируется.
P.S. плагин не проверял.

Ни когда, не пробовал писать скрипты для hosties. Попробуй эту версию.
PHP:
#pragma semicolon 1
#include <sdktools>
#include <sdkhooks>
#include <lastrequest>

new bool:b_s[MAXPLAYERS + 1]; // Использование оружия.
new bool:b_availableLR[MAXPLAYERS + 1]; // Если LR доступен.

// Список блокируемого оружия.
new const String:block_weapons_list[][] =
{
    "ak47", "aug", "mp7", "mp9", "scar20", "deagle", "revolver",
    "usp_silencer", "ump-45", "sawedoff", "nova", "negev",
    "m249", "m4a1", "m4a1-silencer", "awp", "g3sg1", "ssg08",
    "glock", "fiveseven", "cz75a", "elite", "decoy", "flashbang",
    "galilar", "galil", "hkp2000", "incgrenade", "molotov", "hegrenade",
    "c4", "smokegrenade", "sg556", "taser", "tec9", "p90", "tmp", "ump45",
    "knife"
};

#define Weapon_Count sizeof(block_weapons_list)

public OnPluginStart()
{
	RegConsoleCmd("sm_s", Cmd_S);
	HookEvent("player_spawn", Player_Spawn);
}

public Action:Cmd_S(client, args)
{
	if (client != 0)
	{
		if (IsClientInGame(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
		{
			if (b_availableLR[client] == false)
			{
				b_s[client] = true;
				RemoveAllPlayersWeapons(client);
				SetEntityRenderColor(client, 0, 0, 0, 255);
				PrintToChatAll("%N сдался!");
			}
		}
	}
	return Plugin_Handled;
}

// Запрещает использовать и поднимать запрещенное оружие.
public Action:WeaponEquip(client, weapon) 
{ 
    if(GetClientTeam(client) == 2 && b_s[client] == true) // Если игрок в команде Т и b_s[client] == true, то запрещаем поднимать оружие.
    {
        decl String:blockWeapon[32]; 
        GetEntityClassname(weapon, blockWeapon, sizeof(blockWeapon));

        for(new i = 0; i < Weapon_Count; ++i) 
        { 
            if(strcmp(blockWeapon[7], block_weapons_list[i]) == 0)
            {    
                return Plugin_Handled; 
            } 
        } 
    }
    return Plugin_Continue; 
}

public Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast){
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	
	if(IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
	{
		b_s[client] = false;
		b_availableLR[client] = false;
	}
}

public OnClientPostAdminCheck(client)
{
	SDKHook(client, SDKHook_WeaponEquip, WeaponEquip);
}

public OnClientDisconnect(client){
	b_s[client] = false;
	b_availableLR[client] = false;
	
	SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip);
}

/* Stocks */

stock RemoveAllPlayersWeapons(client)
{
    new weaponindex;
    for (new weaponslot = 0; weaponslot < 5; weaponslot++)
    {
        weaponindex = GetPlayerWeaponSlot(client, weaponslot);
        if (weaponindex != -1)
        {
            Util_RemovePlayerItem(client, weaponindex);
        }
    }
    
    WepLib_GrenadeStripAll(client);
}

stock Util_RemovePlayerItem(client, weaponindex)
{
    RemovePlayerItem(client, weaponindex);
    RemoveEdict(weaponindex);
}

stock WepLib_GrenadeStripAll(client)
{
    new grenade = GetPlayerWeaponSlot(client, 3);
    while (grenade != -1)
    {
        Util_RemovePlayerItem(client, grenade);
        grenade = GetPlayerWeaponSlot(client, 3);
    }
}

public OnAvailableLR(Announced)
{
	for(new i = 1; i <= MaxClients; i++)
	{
		b_s[i] = false; // Разрешаем игроку поднимать оружие.
		b_availableLR[i] = true; // Если игроку доступен LR, то запрещаем команду sm_s.
	}
}
 
Последнее редактирование:

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
Попробуй эту версию

если за т меньше 3 человек, и т пишет !s, во время lr оружие не появляется, может как-нито сделать, чтобы запрет во время активации !lr пропадал (больше 3, все работает)
 
Последнее редактирование:

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
если за т меньше 3 человек, и т пишет !s, во время lr оружие не появляется, может как-нито сделать, чтобы запрет во время активации !lr пропадал (больше 3, все работает)

Напиши полное ТЗ со всеми подробностями, как можно точнее и конкретнее.
 

₮αй₮оβый

Участник
Сообщения
317
Реакции
35
Напиши полное ТЗ со всеми подробностями

играю один КТ и один Т, если Т пишет !s, а потом !lr, то во время активации lr, он остается без оружия, а если допустим один КТ , на три и более Т, и кто-то пишет !s, потом должен умереть кто-то( в !lr играют только 2), остаются два Т, они пишут !lr и они уже с оружием. Может сделать доступ к команде когда за Т больше двух человек (если это возможно)
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
играю один КТ и один Т, если Т пишет !s, а потом !lr, то во время активации lr, он остается без оружия, а если допустим один КТ , на три и более Т, и кто-то пишет !s, потом должен умереть кто-то( в !lr играют только 2), остаются два Т, они пишут !lr и они уже с оружием. Может сделать доступ к команде когда за Т больше двух человек (если это возможно)

Не понимаю что ты пишешь. Смог разобрать только последнее предложение.
Если в команде T больше двух человек, то доступ к команде разрешен, ну и если меньше двух, то запрещаем доступ. (Это возможно).
 

Napas

Участник
Сообщения
832
Реакции
667
Реализуй, мне бы тоже интерестно посмотреть)
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
сделай пожалуйста

Если в команде T больше двух человек, то разрешаем выполнять команду sm_s , !s.
PHP:
#pragma semicolon 1
#include <sdktools>
#include <sdkhooks>
#include <lastrequest>

new bool:b_s[MAXPLAYERS + 1]; // Использование оружия.

// Список блокируемого оружия.
new const String:block_weapons_list[][] =
{
    "ak47", "aug", "mp7", "mp9", "scar20", "deagle", "revolver",
    "usp_silencer", "ump-45", "sawedoff", "nova", "negev",
    "m249", "m4a1", "m4a1-silencer", "awp", "g3sg1", "ssg08",
    "glock", "fiveseven", "cz75a", "elite", "decoy", "flashbang",
    "galilar", "galil", "hkp2000", "incgrenade", "molotov", "hegrenade",
    "c4", "smokegrenade", "sg556", "taser", "tec9", "p90", "tmp", "ump45",
    "knife"
};

#define Weapon_Count sizeof(block_weapons_list)

public OnPluginStart()
{
	RegConsoleCmd("sm_s", Cmd_S);
	HookEvent("player_spawn", Player_Spawn);
}

public Action:Cmd_S(client, args)
{
	if (client != 0)
	{
		if (IsClientInGame(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
		{
			if (GetPlayerCount() > 2) // Если в команде T больше двух человек, то выполняем команду !s
			{
				b_s[client] = true;
				RemoveAllPlayersWeapons(client);
				SetEntityRenderColor(client, 0, 0, 0, 255);
				PrintToChatAll("%N сдался!");
			}
		}
	}
	return Plugin_Handled;
}

// Запрещает использовать и поднимать запрещенное оружие.
public Action:WeaponEquip(client, weapon) 
{ 
    if(GetClientTeam(client) == 2 && b_s[client] == true) // Если игрок в команде Т и b_s[client] == true, то запрещаем поднимать оружие.
    {
        decl String:blockWeapon[32]; 
        GetEntityClassname(weapon, blockWeapon, sizeof(blockWeapon));

        for(new i = 0; i < Weapon_Count; ++i) 
        { 
            if(strcmp(blockWeapon[7], block_weapons_list[i]) == 0)
            {    
                return Plugin_Handled; 
            } 
        } 
    }
    return Plugin_Continue; 
}

public Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast){
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	
	if(IsClientInGame(client) && !IsFakeClient(client) && IsPlayerAlive(client) && GetClientTeam(client) == 2)
	{
		b_s[client] = false;
	}
}

public OnClientPostAdminCheck(client)
{
	SDKHook(client, SDKHook_WeaponEquip, WeaponEquip);
}

public OnClientDisconnect(client){
	b_s[client] = false;
	
	SDKUnhook(client, SDKHook_WeaponEquip, WeaponEquip);
}

/* Stocks */

stock RemoveAllPlayersWeapons(client)
{
    new weaponindex;
    for (new weaponslot = 0; weaponslot < 5; weaponslot++)
    {
        weaponindex = GetPlayerWeaponSlot(client, weaponslot);
        if (weaponindex != -1)
        {
            Util_RemovePlayerItem(client, weaponindex);
        }
    }
    
    WepLib_GrenadeStripAll(client);
}

stock Util_RemovePlayerItem(client, weaponindex)
{
    RemovePlayerItem(client, weaponindex);
    RemoveEdict(weaponindex);
}

stock WepLib_GrenadeStripAll(client)
{
    new grenade = GetPlayerWeaponSlot(client, 3);
    while (grenade != -1)
    {
        Util_RemovePlayerItem(client, grenade);
        grenade = GetPlayerWeaponSlot(client, 3);
    }
}

public OnAvailableLR(Announced)
{
    for(new i = 1; i <= MaxClients; i++)
    {
    	if (GetClientTeam(i) == 2)
    	{
        	b_s[i] = false; // Разрешаем игроку поднимать оружие.
        }
    }
}

/* Кол-во живых игроков */
stock int GetPlayerCount(){
	int iPlayers;
	for (int i = 1; i <= MaxClients; i++)
	{
		if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2)
		{
			iPlayers++;
		}
	}
	return iPlayers;
}
 

Slava Gil

Участник
Сообщения
2
Реакции
0
Всем привет. Можно накатать плагин для left 4 dead 2, когда выживший висит на уступе и при этом может стрелять из магнума?
 

Metamoto

Участник
Сообщения
407
Реакции
14
Ребят, напишите пожалуйста простенький плагин, он должен быть на подобии stb2 чтобы через меню админское банить людей и выбирать на сколько времени, а так же, чтобы можно было разбанивать через меню. База данных локальная. Ну и естественно, чтобы при выборе забаненного игрока показывало сколько ему осталось и с какого по какое он забанен, и чтобы была видна причина(но это не обязательно) Пожалуйста ответьте это же возможно?
 
Сообщения
10
Реакции
0
Доброго времени суток форумчане.
Если можно, напишите плагин для баланса команд.
Ситуация следующая:
Сервер ГГ, раунд бесконечный, если уходит сразу пара человек из одной команды, получается мясо.
Все плагины которые нашел в сети, работают после смены карты или победы одной из команд.
Хотелось-бы, чтобы плагин считывал количество игроков каждые скажем 30 секунд, и производил баланс с выводом в центр экрана сообщения для того кого переместил. Ну перемещение конечно после смерти.
 
Последнее редактирование:

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Александр Гужов, пробуй мой. Это ещё бета. Настроен по умолчанию по таймеру, перемещает после смерти человека. Квары смотри в исходнике, прописывай если что в server.cfg
 

Вложения

  • balanser.sp
    8.7 КБ · Просмотры: 14

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755

Artoksi

Участник
Сообщения
2
Реакции
0
Дорогие форумчане... помогите найти или написать плагин для Left 4 Dead 1 статистики в конце раунда
, а именно подсчитывает сколько человек за раунд сделал скитов, прикладов, вичек, и так далее... буду очень признателен Вам!


 
Последнее редактирование:
Сообщения
10
Реакции
0
Александр Гужов, пробуй мой. Это ещё бета. Настроен по умолчанию по таймеру, перемещает после смерти человека. Квары смотри в исходнике, прописывай если что в server.cfg
Спасибки огромное, опробую на днях :).
 

Artoksi

Участник
Сообщения
2
Реакции
0
Помогите найти или написать плагин для left 4 dead плагин статистики...


Плагин - подсчитывает скиты , приклады , общие количество убийств, вичек! в конце раунда.... и пишет все это в общий чат!
 
Сообщения
10
Реакции
0
Вообще никогда не понимал, зачем таймер в подобном балансе. Без него делается идеально и, в некотором роде, даже проще. Оффтоп
Перешел по ссылке, прочитал ваш комент, но, мгновенный пересчет тоже не есть хорошо. Лучше выставлять время, дабы не перекидывало каждые 2 секунды. Игроки заходят и выходят, порой на сервере текучка (особенно вечером) до 30 игроков в час, а перекидывать будет того, кто играет весь час. Если зашел не один человек, а с друзьями, и потом так-же вышел, то дисбаланс бывает 8-4, если сразу сбалансировать, то перекинет старых игроков. Сделать так пару раз, и основные игроки пойдут искать другой сервер :(.
 

AlmazON

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

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
AlmazON, писал как задумывалось, у твоего варианта есть плюсы так и минусы для меня.
 
Сверху Снизу