Ищу плагины для cs go

Статус
В этой теме нельзя размещать новые ответы.

AMD

Участник
Сообщения
180
Реакции
18
Здравствуйте люди, ишу плагины:
1. Видел на одном сервере регинерацию хп, также в чате было написано что у играка с определённым флагом регинерация повышена.
2. Также видел, плагин позволяет закупать все гранаты.
3. Не знаю есть или нет, но нужно при спавне игрока выдавать ему больше хп, также игроку с определённым флагом выдавать ещё больше хп.

Спасибо.

P.S Сори если не там создал топик.
 

ALЬTAIR

Участник
Сообщения
335
Реакции
160
Ну про гранаты это в конфиге настраивается,а конкретно эти строки:
ammo_grenade_limit_flashbang 2 //сколько можно купить флешек за раз
ammo_grenade_limit_total 4 //сколько можно купить гранат всего
 
  • Мне нравится
Реакции: AMD

AMD

Участник
Сообщения
180
Реакции
18
Ну про гранаты это в конфиге настраивается,а конкретно эти строки:

А как выдавать игрокам гранаты при спавне и пополнять запасы гранат если игрок их тратит.
Примерно так:
Игрок бросил гранату через 30 сек ему её автоматический выдало, тоже самое для игроков с определёным флагом только лимит другой допустим 15 сек.
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Оффтоп
 
  • Мне нравится
Реакции: AMD

AMD

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

Ну так то ты прав, единственное что я знаю что это можно как то реализовать через set task, но что то поковырялся в доках, там такого нету.

Но суть я понимаю, нужно отлавливать момент когда игрок бросил гранату, потом проверять игрок с каким флагом, и в зависимости от полученного результата, делать delay на установленное для этого юзера время после чего give_weapons_grenade...

Но это в теории, и это всего лишь алгоритм из моей не посвящённой головы, как его реализовывать понятия не имею(((
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
при спавне игрока выдавать ему больше хп
На CS:S и CS:GO так:
PHP:
public OnPluginStart()
{
	HookEvent("player_spawn", PlayerSpawn)
}

public PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	SetEntProp(GetClientOfUserId(GetEventInt(event, "userid")), Prop_Send, "m_iHealth", 125);
}
Где 125 - количество хп при спавне (кваром, по желанию).
 
  • Мне нравится
Реакции: AMD

AMD

Участник
Сообщения
180
Реакции
18
На CS:S и CS:GO так:
PHP:
public OnPluginStart()
{
	HookEvent("player_spawn", PlayerSpawn)
}

public PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	SetEntProp(GetClientOfUserId(GetEventInt(event, "userid")), Prop_Send, "m_iHealth", 125);
}

Всё работает, а как сделать отдельную выдачу для игроков с определённым флагом, тоже самое хочу провернуть с бронёй) kevlar)))

Где 125 - количество хп при спавне (кваром, по желанию).

Дружище я с первого раза до твоего редактирования поста понял что ты имеешь ввиду :):good:
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
То же самое, но вместо "m_iHealth" - "m_ArmorValue".
с определённым флагом
Применяй if (GetUserFlagBits(client) & ADMFLAG_ROOT) return; иногда применяется и CheckCommandAccess.
Шаблон:
PHP:
public OnPluginStart()
{
	HookEvent("player_spawn", PlayerSpawn)
}

public PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid")), value_hp, value_armor;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)
	{
		value_hp = 150;
		value_armor = 150;
	}
	else
	{
		value_hp = 110;
		value_armor = 120;
	}
	SetEntProp(client, Prop_Send, "m_iHealth", value_hp);
	SetEntProp(client, Prop_Send, "m_ArmorValue", value_armor);
}
Админу добавляется из первого массива, а всем остальным - из второго.
P.S. С бронёй может быть проблема, либо у меня блокировка от плагинов (надо чистый сервер для проверок).
 
Последнее редактирование:
  • Мне нравится
Реакции: AMD

AMD

Участник
Сообщения
180
Реакции
18
То же самое, но вместо "m_iHealth" - "m_ArmorValue".

Применяй if (GetUserFlagBits(client) & ADMFLAG_ROOT) return; иногда применяется и CheckCommandAccess.
Шаблон:
PHP:
public OnPluginStart()
{
	HookEvent("player_spawn", PlayerSpawn)
}

public PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid")), value_hp, value_armor;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)
	{
		value_hp = 150;
		value_armor = 150;
	}
	else
	{
		value_hp = 110;
		value_armor = 120;
	}
	SetEntProp(client, Prop_Send, "m_iHealth", value_hp);
	SetEntProp(client, Prop_Send, "m_ArmorValue", value_armor);
}
Админу добавляется из первого массива, а всем остальным - из второго.
P.S. С бронёй может быть проблема, либо у меня блокировка от плагинов (надо чистый сервер для проверок).

Собственно ситуация получается следующая, я всё это делаю в тот плагин с гранатами что ты мне дал, так вот:
Тут всё отлично пашет, также вижу что идёт проверка на клиент больше 0 и если игрок жив то выполняем.
PHP:
public Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(client > 0 || IsPlayerAlive(client))
	{
		GivePlayerItem(client, "weapon_hegrenade");
		GivePlayerItem(client, "weapon_flashbang");
		GivePlayerItem(client, "weapon_smokegrenade");
		SetEntProp(client, Prop_Send, "m_iHealth", 200);
		SetEntProp(client, Prop_Send, "m_ArmorValue", 101);
		if(GetConVarBool(g_Msg)) PrintToChat(client, "\x01\x05[SM] \x03Получены гранаты");
	}
}

А это что я сейчас пытаюсь отладить:
PHP:
public Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid")), value_hp, value_armor;
	if (client > 0 || IsPlayerAlive(client) & (GetUserFlagBits(client) & ADMFLAG_ROOT))
    { 
        value_hp = 150; 
        value_armor = 150; 
    } 
    else 
    { 
        value_hp = 110; 
        value_armor = 120; 
    }
		GivePlayerItem(client, "weapon_hegrenade");
		GivePlayerItem(client, "weapon_flashbang");
		GivePlayerItem(client, "weapon_smokegrenade");
		SetEntProp(client, Prop_Send, "m_iHealth", value_hp);
		SetEntProp(client, Prop_Send, "m_ArmorValue", value_armor);
		if(GetConVarBool(g_Msg)) PrintToChat(client, "\x01\x05[SM] \x03Получены гранаты");
}
Идёт проверка, прошу обратить внимание что я попытался объединить проверку из плагина с гранатами что ты мне дал, и проверку на администратора, вот чувствую я что я что то делаю не так, ну во первых не понимаю для чего здесь client > 0, типо если на сервере больше одного игрока то выполнять? Как то не разумно учитывая Event_OnPlayerSpawn, понятное дело что всё будет работать как только заспавниться игрок, а если он заспавнился то уже client > 0, аналогично с IsPlayerAlive(client) зачем проверять что игрок жив если выполнение будет только при Event_OnPlayerSpawn, но хотя я из 1.6 как то слыхал что когда игрок заходит на сервер он как бы спавниться в наблюдателях, может и тут так, я не знаю.

Так вот о чём это я, проверка вызывает предупреждения:
//SourceMod Batch Compiler
// by the SourceMod Dev Team


//// autogrenade.sp
// D:\cs_go\csgo\addons\sourcemod\scripting\autogrenade.sp(19) : warning 213: ta
g mismatch
// D:\cs_go\csgo\addons\sourcemod\scripting\autogrenade.sp(24) : warning 217: lo
ose indentation
// D:\cs_go\csgo\addons\sourcemod\scripting\autogrenade.sp(29) : warning 217: lo
ose indentation
// Header size: 2220 bytes
// Code size: 3340 bytes
// Data size: 1652 bytes
// Stack/heap size: 16384 bytes; Total requirements: 23596 bytes
//
// 3 Warnings.
//
// Compilation Time: 0,48 sec
// ----------------------------------------

Press enter to exit ...

В первом варианте броня выдаётся правильно, а вот во втором как ты и сказал кривовато, хотя мне кажется что это из за не корректной проверки.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
не понимаю для чего здесь client > 0
Это обычная проверка индекса игрока, здесь он не должен быть равен 0 (0 - это консоль!).
когда игрок заходит на сервер он как бы спавниться в наблюдателях
Фактически так и есть, такое же гемморство наблюдал у себя в плагине, если не сделать защиты.
if (client > 0 || IsPlayerAlive(client) & (GetUserFlagBits(client) & ADMFLAG_ROOT))
Ещё один & ты забыл, в GetUserFlagBits это - правильно и можно без скобок.
Остальное - нет табуляции.
И client > 0 || IsPlayerAlive(client) лучше сделать общим. К тому же, по идее, вместо || должно быть &&, нет?
PHP:
public Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid")), value_hp, value_armor;
	if (client > 0 || IsPlayerAlive(client))
	{
		if (GetUserFlagBits(client) & ADMFLAG_ROOT)
		{ 
			value_hp = 150; 
			value_armor = 150; 
		} 
		else 
		{ 
			value_hp = 110; 
			value_armor = 120; 
		}
		GivePlayerItem(client, "weapon_hegrenade");
		GivePlayerItem(client, "weapon_flashbang");
		GivePlayerItem(client, "weapon_smokegrenade");
		SetEntProp(client, Prop_Send, "m_iHealth", value_hp);
		SetEntProp(client, Prop_Send, "m_ArmorValue", value_armor);
		if(GetConVarBool(g_Msg)) PrintToChat(client, "\x01\x05[SM]\x03 Получены гранаты");
	}
}
|| не менял, надеюсь на благоразумие автора того плагина.
 
  • Мне нравится
Реакции: AMD

AMD

Участник
Сообщения
180
Реакции
18
Это обычная проверка индекса игрока, здесь он не должен быть равен 0 (0 - это консоль!).

Фактически так и есть, такое же гемморство наблюдал у себя в плагине, если не сделать защиты.

Ещё один & ты забыл, в GetUserFlagBits это - правильно и можно без скобок.
Остальное - нет табуляции.
И client > 0 || IsPlayerAlive(client) лучше сделать общим. К тому же, по идее, вместо || должно быть &&, нет?
PHP:
public Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid")), value_hp, value_armor;
	if (client > 0 || IsPlayerAlive(client))
	{
		if (GetUserFlagBits(client) & ADMFLAG_ROOT)
		{ 
			value_hp = 150; 
			value_armor = 150; 
		} 
		else 
		{ 
			value_hp = 110; 
			value_armor = 120; 
		}
		GivePlayerItem(client, "weapon_hegrenade");
		GivePlayerItem(client, "weapon_flashbang");
		GivePlayerItem(client, "weapon_smokegrenade");
		SetEntProp(client, Prop_Send, "m_iHealth", value_hp);
		SetEntProp(client, Prop_Send, "m_ArmorValue", value_armor);
		if(GetConVarBool(g_Msg)) PrintToChat(client, "\x01\x05[SM]\x03 Получены гранаты");
	}
}
|| не менял, надеюсь на благоразумие автора того плагина.

С бронёй реально проблема, даже понять не могу толи рисуется неправильно толи выдаётся неправильно, || заменил на && работало, потом ради интереса заменил на & при компиляции ошибка, в итоге вернул обратно ||.

Броня вообще не понятно выдаётся то за админа 22 то за игрока 116, то ещё там числа всякие не округлённые.

P.S скорее всего выдаётся не правильно
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #13
AMD, последний код самый нормальный только там &&
Только советую делать это всё через таймер 0.2 примерно.
 

AMD

Участник
Сообщения
180
Реакции
18
AMD, последний код самый нормальный только там &&
Только советую делать это всё через таймер 0.2 примерно.

Проверку делать через таймер? :blink: Или же всё таки выдачу гранат?

P.S Дело в том что я хочу сделать выдачу гранат через таймер да ещё и админам свой игрокам свой, но не знаю как, вот такой я нуб.

Но я пытался посмотреть в другом плагине:
PHP:
#if TIMEBOMB
				if (GetConVarBool(g_Cvar_TimeBomb))
				{
					Format(MenuItem, sizeof(MenuItem),"%T", "Menu_TimeBomb", victim, GetConVarInt(g_Cvar_TimeBombTicks));
					AddMenuItem(menu,iStr,MenuItem);
				}

Вот ещё в доках со 150 попытки нашёл додумался timer в поиске забить
PHP:
native Handle:CreateTimer(Float:interval, Timer:func, any:data=INVALID_HANDLE, flags=0);

Float - число с плавающей запятой
Timer - для какой функции будет применен
И то в этом не уверен не говоря уже о том как это всё в код засунуть чтоб работало.

Не ну я пробую, у меня даже проходит компиляция с предупреждениями но работать не хочет(
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
советую делать это всё через таймер 0.2 примерно
Для брони - придётся. Жизнь прекрасно и правильно прибавляется.
пытался посмотреть в другом плагине:
Это для создание меню, а не таймера.
Ладно, так и быть:
PHP:
#include <sdktools_functions>

new Handle:g_Msg;

public OnPluginStart() 
{
	g_Msg = CreateConVar("sm_grenade_msg", "0", "Message On/Off", FCVAR_NOTIFY, true, 0.0, true, 1.0);
	HookEvent("player_spawn", Event_OnPlayerSpawn, EventHookMode_PostNoCopy);
	HookEvent("hegrenade_detonate", Event_HeGrenadeDetonate);
	HookEvent("flashbang_detonate", Event_FlashBangDetonate);
	HookEvent("smokegrenade_detonate", Event_SmokeGrenadeDetonate);
}

public Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(client > 0 && IsPlayerAlive(client))
		CreateTimer(0.2, GiveSpawn, client);
}

public Action:GiveSpawn(Handle:timer, any:client)
{
	new value_hp, value_armor;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT) 
	{  
		value_hp = 150;  
		value_armor = 125;  
	}  
	else  
	{  
		value_hp = 110;  
		value_armor = 120;  
	}
	GivePlayerItem(client, "weapon_hegrenade");
	GivePlayerItem(client, "weapon_flashbang");
	GivePlayerItem(client, "weapon_smokegrenade");
	if(GetConVarBool(g_Msg)) PrintToChat(client, "\x01\x05[SM] \x03Получены гранаты.");
	SetEntProp(client, Prop_Send, "m_iHealth", value_hp);
	SetEntProp(client, Prop_Send, "m_ArmorValue", value_armor);
}

public Event_HeGrenadeDetonate(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(client > 0 || IsPlayerAlive(client))
	CreateTimer(30.0, GiveHE, client);
}

public Action:GiveHE(Handle:timer, any:client)
{
	GivePlayerItem(client, "weapon_hegrenade");
	if(GetConVarBool(g_Msg)) PrintToChat(client, "\x01\x05[SM] \x03Получена HE граната!");
}

public Event_FlashBangDetonate(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(client > 0 || IsPlayerAlive(client))
	{
		GivePlayerItem(client, "weapon_flashbang");
		if(GetConVarBool(g_Msg)) PrintToChat(client, "\x01\x05[SM] \x03Получена FLASHBANG граната");
	}
}

public Event_SmokeGrenadeDetonate(Handle:event, const String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(client > 0 || IsPlayerAlive(client))
	{
		GivePlayerItem(client, "weapon_smokegrenade");
		if(GetConVarBool(g_Msg)) PrintToChat(client, "\x01\x05[SM] \x03Получена SMOKE граната");
	}
}
Максимально отображаемая броня - 125! Больше - работает, но показывает "аванс" от 125 (например, 22).
if(client > 0 && IsPlayerAlive(client)) - так правильно! Иначе гранаты выдаются мёртвым и время идёт ещё от спектаторов.
 
Последнее редактирование:
  • Мне нравится
Реакции: AMD

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #16
Да кстати забыл сказать, что значение хп и брони, которые отображаются и есть действительно могут отличаться. Это из-за ограничения в отображении. Так что не пугайся и не греши на плагины.

AlmazON, почему у тебя в последнем коде || ???
 
Последнее редактирование:

SenatoR

Участник
Сообщения
773
Реакции
344
Да кстати забыл сказать, что значение хп и брони, которые отображаются и есть действительно могут отличаться. Это из-за ограничения в отображении. Так что не пугайся и не греши на плагины.

AlmazON, почему у тебя в последнем коде || ???

Так в конце же подписал он, что так не стоит делать, а сделать надо &&

AMD, чтобы точно знать сколько все-таки у игрока брони, можно сделать таймер с получение брони и выводом его в HUD
 

AMD

Участник
Сообщения
180
Реакции
18
Да кстати забыл сказать, что значение хп и брони, которые отображаются и есть действительно могут отличаться. Это из-за ограничения в отображении. Так что не пугайся и не греши на плагины.
Да, да, в кс 1.6 например максимальный худ отоброжения 255 хп и брони, там это решали выводом худа средствами амхмодх.
 

SenatoR

Участник
Сообщения
773
Реакции
344
Да, да, в кс 1.6 например максимальный худ отоброжения 255 хп и брони, там это решали выводом худа средствами амхмодх.

Не думаю, что в ксго это можно решить посредством сурсмода.
В ксс например вальве только спустя несколько лет исправила этот косяк
 

AMD

Участник
Сообщения
180
Реакции
18
Так в конце же подписал он, что так не стоит делать, а сделать надо &&
AlmazON только все равно это не верно, надо только одну &.
Поясню:
& = and = И
ll = или

AMD, чтобы точно знать сколько все-таки у игрока брони, можно сделать таймер с получение брони и выводом его в HUD

Если делать одну и то получаю предупреждение, делаю ии всё хорошо.
Вообще всё отлично работает, я в один момен решил что игроки будут получать 50, игроки с флагом 100, так что с бронёй норм.

Добавлено через 1 минуту
Не думаю, что в ксго это можно решить посредством сурсмода.
В ксс например вальве только спустя несколько лет исправила этот косяк

Ну нет, я имею ввиду в 1.6 делали как ты написал:
AMD, чтобы точно знать сколько все-таки у игрока брони, можно сделать таймер с получение брони и выводом его в HUD
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу