Фикс оверлеев

-=Batista=-

Просвященный
Сообщения
304
Реакции
88
Здравствуйте, господа хорошие. Имеются плагин оверлеев. Но. При убийстве ножом высвечивается оверлей простого убийства. Плюс после смерти не обнуляется количество убийств (сервер ДМ). Можно ли это как-то исправить?
 

Вложения

  • sm_killmessage_framework.sp
    2.4 КБ · Просмотры: 23
  • sm_killmessage_overlays_basicsupport.sp
    5.5 КБ · Просмотры: 17

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
[CS:GO/CS:S] sm_killmessage_overlays v1.3.1e & sm_killmessage_framework_v1.4e

Оффтоп
sm_killmessage_framework_v1.4e - расширенная версия "ядра" плагина. Позволяет задавать собственное время для любого из оверлеев.
Для этого, необходимо добавить в самом конце команды показа оверлея ваше новое время (после пробела), например:
ServerCommand("sm_killmessage_show %i %s 10.0",GetClientUserId(i),_sCTWinsOverlay);
где 10.0 - время показа (в данном случае, оверлея победы контр-террористов).
 

Вложения

  • sm_killmessage_framework_v1.4e.sp
    2.1 КБ · Просмотры: 86
  • sm_killmessage_overlays_basicsupport.sp
    4.5 КБ · Просмотры: 73
  • sm_killmessage_framework.sp
    2 КБ · Просмотры: 49
Последнее редактирование:

-=Batista=-

Просвященный
Сообщения
304
Реакции
88
-=Batista=-, попробуй. По крайней мере,

теперь должно быть. А с ножиком вроде правильно в этом модуле...
Оффтоп

Вот, теперь сбрасывает. А по поводу ножей понял причину - в игре же не один нож, надо знать точное название. Такие ножи, как knifegg (golden), bayonet, knife_gut завести удалось. Остальные - надо узнать точное название
 

-=Batista=-

Просвященный
Сообщения
304
Реакции
88
Сам сообразил, как вписать?
Конечно, если у них разные названия, то и работать они не будут в плагине. Просто обычное убийство.

Там соображать особо-то и нечего)) Только, чувствую, намучаюсь я с поиском верного названия... Если кто-то в курсе - прошу помощи
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Зря дал ссылку. Этот komashchenko заделался без исходников плагины выкладывать - исходника ядра нет, а там были бы все названия.
Но, не стал заниматься ерундой, вытащил всё у нормальных людей из оригинала.
C-подобный:
"weapon_bayonet"
"weapon_knife_gut"
"weapon_knife_flip"
"weapon_knife_m9_bayonet"
"weapon_knife_karambit"
"weapon_knife_tactical"
"weapon_knife_butterfly"
"weapon_knife"
"weapon_knifegg"
По коду: проверять !strcmp для bayonet и StrContains для прочих (просто вписать knife).
 

-=Batista=-

Просвященный
Сообщения
304
Реакции
88
Зря дал ссылку. Этот komashchenko заделался без исходников плагины выкладывать - исходника ядра нет, а там были бы все названия.
Но, не стал заниматься ерундой, вытащил всё у нормальных людей из оригинала.
C-подобный:
"weapon_bayonet"
"weapon_knife_gut"
"weapon_knife_flip"
"weapon_knife_m9_bayonet"
"weapon_knife_karambit"
"weapon_knife_tactical"
"weapon_knife_butterfly"
"weapon_knife"
"weapon_knifegg"
По коду: проверять !strcmp для bayonet и StrContains для прочих (просто вписать knife).

Проблема решена ;) Тему можно закрывать
 
N

NiGaByte

Две проблемы:

1 - Оверлей задирается (если быть точным, не опускается, выводится как и другие на одном уровне) при победе одной из команд происходит наложение, деффолтной таблицы и нашего оверлея.
attachment.php


2 - Счёт киллов не обнуляется если игрок остался жив в предыдущем раунде, если умер то всё в порядке.
 

Вложения

  • spr.jpg
    spr.jpg
    36.9 КБ · Просмотры: 393
N

NiGaByte

Предложения? Убрать стандартное лого?А там и нет такого кода. Вообще раунды никак не учитываются.

Или опустить оверлей ниже(не знаю возможно ли прописать координату), или удалить вообще, т.к стандартный лучше.

Ну не плохо было бы сбрасывать счётчик в конце каждого раунда, в остальном всё идеально, мне понравилось!
 

komashchenko

Идиот
Сообщения
916
Реакции
2,570
Две проблемы:

1 - Оверлей задирается (если быть точным, не опускается, выводится как и другие на одном уровне) при победе одной из команд происходит наложение, деффолтной таблицы и нашего оверлея.
attachment.php


2 - Счёт киллов не обнуляется если игрок остался жив в предыдущем раунде, если умер то всё в порядке.
Есть переменная для его отключения гдето видел ее но забыл
 
N

NiGaByte

Есть переменная для его отключения гдето видел ее но забыл

Да ну, по мне так его лучше оставить, а оверлей убрать, т.к стандартная панель несёт больше информации.

Добавлено через 12 часов 26 минут
Убрал оверлеи победы T\CT, но теперь таблица накладывается на оверлей последнего убийства.(предлагаю не показывать последний килл)
PHP:
new String:_sGrenadeOverlay[32],
	String:_sHeadShotOverlay[32],
	String:_sKnifeOverlay[32],
	String:_sKillOverlayNaming[32],
	_iMaxKillStreak,
	_aiKillStreak[MAXPLAYERS+1];

public Plugin:myinfo = 
{
	name = "Kill Message Overlays Basic Triggers",
	author = "Siang Chun & Black Haze & AlmazON edition",
	description = "Basic Triggers for Kill Message Overlays",
	version = "1.3e",
	url = "bslw.co.uk & beernweed.com"
}

public OnPluginStart()
{
	HookEvent("player_death", Event_PlayerDeath);
	decl Handle:h;
	HookConVarChange(h= CreateConVar("sm_killmessage_bs_grenade", "kill_grenade", "Name of the grenade kill overlay (no extension)"), GO);
	GetConVarString(h, _sGrenadeOverlay, 32);
	HookConVarChange(h= CreateConVar("sm_killmessage_bs_headshot", "kill_headshot", "Name of the headshot kill overlay (no extension)"), HO);
	GetConVarString(h, _sHeadShotOverlay, 32);
	HookConVarChange(h= CreateConVar("sm_killmessage_bs_knife", "kill_knife", "Name of the knife kill overlay (no extension)"), KO);
	GetConVarString(h, _sKnifeOverlay, 32);
	HookConVarChange(h= CreateConVar("sm_killmessage_bs_killnaming", "kill_", "Naming convention for the kill overlays (numbers are added automatically,no extension)"), KN);
	GetConVarString(h, _sKillOverlayNaming, 32);
	HookConVarChange(h= CreateConVar("sm_killmessage_bs_maxkillstreak", "10", "Amount of kills allowed in a killstreak (it'll restart at 1 after the end)"), KS);
	_iMaxKillStreak = GetConVarInt(h);
	CloseHandle(h);
	AutoExecConfig(true, "killmessage_basicsupport");	
}

public OnConfigsExecuted()
{
	ServerCommand("sm_killmessage_prepare %s",_sGrenadeOverlay);
	ServerCommand("sm_killmessage_prepare %s",_sHeadShotOverlay);
	ServerCommand("sm_killmessage_prepare %s",_sKnifeOverlay);
	for(new i=1; i<=_iMaxKillStreak; i++) ServerCommand("sm_killmessage_prepare %s%i",_sKillOverlayNaming,i);
}

public GO(Handle:c, String:o[], const String:n[]) strcopy(_sGrenadeOverlay, 32, n);
public HO(Handle:c, String:o[], const String:n[]) strcopy(_sHeadShotOverlay, 32, n);
public KO(Handle:c, String:o[], const String:n[]) strcopy(_sKnifeOverlay, 32, n);
public KN(Handle:c, String:o[], const String:n[]) strcopy(_sKillOverlayNaming, 32, n);
public KS(Handle:c, String:o[], String:n[]) _iMaxKillStreak = GetConVarInt(c);

public OnClientPostAdminCheck(client) _aiKillStreak[client] = 0;

public Event_PlayerDeath(Handle:event, String:name[], bool:dontBroadcast)
{
	decl userid, player;
	_aiKillStreak[GetClientOfUserId(player=GetEventInt(event, "userid"))] = 0;
	if((userid = GetEventInt(event, "attacker")) != player && (player = GetClientOfUserId(userid)) && IsFakeClient(player)==false)
	{
		if(++_aiKillStreak[player]>_iMaxKillStreak) _aiKillStreak[player] = 1;
		decl String:weapon[11];
		GetEventString(event, "weapon",weapon, 11);
		if(strcmp(weapon, "hegrenade")==0) ServerCommand("sm_killmessage_show %i %s 2.3",userid,_sGrenadeOverlay);
		else if(strcmp(weapon, "bayonet")==0 || StrContains(weapon, "knife") !=-1) ServerCommand("sm_killmessage_show %i %s 2.3",userid,_sKnifeOverlay);
		else if(GetEventBool(event, "headshot")) ServerCommand("sm_killmessage_show %i %s 1.7",userid,_sHeadShotOverlay);
		else ServerCommand("sm_killmessage_show %i %s%i 1.7",userid,_sKillOverlayNaming,_aiKillStreak[player]);
	}
}

P.S. Естественно обнуление оверлеев если выжил не сделал.
 
Последнее редактирование модератором:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
[CS:GO/CS:S] sm_killmessage_overlays v1.3.1e

Оффтоп В этой версии оверлей побед команд вырезан, все нестандартные оверлеи будут "скрыты" в конце раунда, а также сброшены "страйки" игроков.
P.S. Оверлей убийств после конца раунда будет отображён.
 

Вложения

  • sm_killmessage_overlays_basicsupport_v1.3.1e.sp
    4.4 КБ · Просмотры: 27
Последнее редактирование:

trueattack

Участник
Сообщения
134
Реакции
26
Re: [CS:GO/CS:S] sm_killmessage_overlays v1.3e & sm_killmessage_framework_v1.4e

Сделал. А с ножиком правильно в этом модуле, просто написано было под CS:S. Оффтоп

sm_killmessage_framework_v1.4e - расширенная версия "ядра" плагина. Позволяет задавать собственное время для любого из оверлеев.
Для этого, необходимо добавить в самом конце команды показа оверлея ваше новое время (после пробела), например:
ServerCommand("sm_killmessage_show %i %s 10.0",GetClientUserId(i),_sCTWinsOverlay);
где 10.0 - время показа (в данном случае, оверлея победы контр-террористов).

Ставлю 1.3е [CSS]. Как не менял пути - все равно не скачивает. Может кто пример свой скинуть? Вот мой:

PHP:
#include <sdktools_stringtables>

new Float:_dTimerLength,
	Handle:_atCleanTimer[MAXPLAYERS+1];

public Plugin:myinfo = 
{
	name = "Kill Message Overlays Framework",
	author = "Siang Chun & Black Haze & AlmazON edition",
	description = "Framework for Kill Message Overlays",
	version = "1.3e",
	url = "bslw.co.uk & beernweed.com"
}

public OnPluginStart()
{
	RegServerCmd("sm_killmessage_prepare", PrepareOverlay);
	RegServerCmd("sm_killmessage_show", ShowKillMessage);
	HookConVarChange(_atCleanTimer[0]=CreateConVar("sm_killmessage_overlays_length", "3.0", "Length of time an overlay is showed",FCVAR_PLUGIN|FCVAR_REPLICATED, true, 1.0),OL);
	_dTimerLength = GetConVarFloat(_atCleanTimer[0]);
}

public OL(Handle:C, String:O[], String:N[]) _dTimerLength = GetConVarFloat(C);

public Action:ShowKillMessage(A)
{
	if(A >1)
	{
		decl String:sOverLay[32];
		GetCmdArg(1, sOverLay, 32);
		if((A=GetClientOfUserId(StringToInt(sOverLay))))
		{
			if(_atCleanTimer[A] !=INVALID_HANDLE)
			{
				CloseHandle(_atCleanTimer[A]);
				ClientCommand(A, "r_screenoverlay \"\"");
			}GetCmdArg(2, sOverLay, 32);
			ClientCommand(A, "r_screenoverlay \"models/trueattack/pb/overlays/killmessage/%s.vtf\"",sOverLay);
			_atCleanTimer[A] = CreateTimer(_dTimerLength,CleanTimer,A);
		}
	}return Plugin_Handled;
}

public Action:CleanTimer(Handle:Timer, any:client)
{
	_atCleanTimer[client] = INVALID_HANDLE;
	if(IsClientInGame(client)) ClientCommand(client, "r_screenoverlay \"\"");
	return Plugin_Stop;
}

public Action:PrepareOverlay(A)
{
	if(A)
	{
		decl String:overlays_file[59], String:sOverLay[32];
		GetCmdArg(1, sOverLay, 32);
		FormatEx(overlays_file,59,"models/trueattack/pb/overlays/killmessage/%s.vtf",sOverLay);
		PrecacheDecal(overlays_file,true);
		FormatEx(overlays_file,59,"materials/models/trueattack/pb/overlays/killmessage/%s.vtf",sOverLay);
		AddFileToDownloadsTable(overlays_file);
		FormatEx(overlays_file,59,"models/trueattack/pb/overlays/killmessage/%s.vmt",sOverLay);
		PrecacheDecal(overlays_file,true);
		FormatEx(overlays_file,59,"materials/models/trueattack/pb/overlays/killmessage/%s.vmt",sOverLay);
		AddFileToDownloadsTable(overlays_file);
	}return Plugin_Handled;
}
 
N

NiGaByte

Chapaev, ты пытаешься загрузить ресурсы в папку models
PHP:
public Action:ShowKillMessage(A)
{
	if(A >1)
	{
		decl String:sOverLay[32];
		GetCmdArg(1, sOverLay, 32);
		if((A=GetClientOfUserId(StringToInt(sOverLay))))
		{
			if(_atCleanTimer[A] !=INVALID_HANDLE)
			{
				CloseHandle(_atCleanTimer[A]);
				ClientCommand(A, "r_screenoverlay \"\"");
			}GetCmdArg(2, sOverLay, 32);
			ClientCommand(A, "r_screenoverlay \"ТВОЯ_ПАПКА/%s.vtf\"",sOverLay);
			_atCleanTimer[A] = CreateTimer(GetCmdArg(3, sOverLay, 32) ? StringToFloat(sOverLay):_dTimerLength,CleanTimer,A);
		}
	}return Plugin_Handled;
}

public Action:CleanTimer(Handle:Timer, any:client)
{
	_atCleanTimer[client] = INVALID_HANDLE;
	if(IsClientInGame(client)) ClientCommand(client, "r_screenoverlay \"\"");
	return Plugin_Stop;
}

public Action:PrepareOverlay(A)
{
	if(A)
	{
		decl String:overlays_file[59], String:sOverLay[32];
		GetCmdArg(1, sOverLay, 32);
		FormatEx(overlays_file,59,"ТВОЯ_ПАПКА/%s.vtf",sOverLay);
		PrecacheDecal(overlays_file,true);
		FormatEx(overlays_file,59,"materials/ТВОЯ_ПАПКА/%s.vtf",sOverLay);
		AddFileToDownloadsTable(overlays_file);
		FormatEx(overlays_file,59,"ТВОЯ_ПАПКА/%s.vmt",sOverLay);
		PrecacheDecal(overlays_file,true);
		FormatEx(overlays_file,59,"materials/ТВОЯ_ПАПКА/%s.vmt",sOverLay);
		AddFileToDownloadsTable(overlays_file);
	}return Plugin_Handled;
}
 
N

NiGaByte

Оверлей убийств после конца раунда будет отображён, как и начнётся подсчёт страйков.
Не фига не понял! В конце раунда будут сброшены все страйки, и если игрок сделает страйк, то ему зачтётся на сдел. раунд? Т.е на след. раунде он начинает с одним страйком да?

Добавлено через 1 минуту
NiGaByte, а я что, зря делал? Оффтоп

Я ещё не протестировал, я обязательно отпишусь, а то не красиво получится с моей стороны.
 
Последнее редактирование модератором:
N

NiGaByte

AlmazON, лучше конечно полное, а с нагрузкой разберётся ЦП.
Кстати если учитывать тот момент что в конце раунда 50% мертвы(а как правила зачастую почти все, если это не easy win), то нагрузка отходит на второй план, она реально ничтожна!
 

trueattack

Участник
Сообщения
134
Реакции
26
AlmazON, лучше конечно полное, а с нагрузкой разберётся ЦП.
Кстати если учитывать тот момент что в конце раунда 50% мертвы(а как правила зачастую почти все, если это не easy win), то нагрузка отходит на второй план, она реально ничтожна!

А если у меня путь до файлов с километр, то я понимаю нормально их загрузить не получится? Придется упрощать путь до materials/killmessages/ ?
 

AlmazON

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

путь до файлов с километр, то я понимаю нормально их загрузить не получится?
Кстати, да, я там жёстко зафиксировал) Расчёт даже самого автора плагина был на то, что будете использовать его начальный путь, а не свой.
Если надо длиннющий, то меняй в загрузках все 59 на PLATFORM_MAX_PATH, а 32 - эдак на 64, чтобы наверняка:
PHP:
public Action:PrepareOverlay(A) 
{ 
    if(A) 
    { 
        decl String:overlays_file[PLATFORM_MAX_PATH], String:sOverLay[64]; 
        GetCmdArg(1, sOverLay, 64); 
        FormatEx(overlays_file,PLATFORM_MAX_PATH,"ТВОЯ_ПАПКА/%s.vtf",sOverLay); 
        PrecacheDecal(overlays_file,true); 
        FormatEx(overlays_file,PLATFORM_MAX_PATH,"materials/ТВОЯ_ПАПКА/%s.vtf",sOverLay); 
        AddFileToDownloadsTable(overlays_file); 
        FormatEx(overlays_file,PLATFORM_MAX_PATH,"ТВОЯ_ПАПКА/%s.vmt",sOverLay); 
        PrecacheDecal(overlays_file,true); 
        FormatEx(overlays_file,PLATFORM_MAX_PATH,"materials/ТВОЯ_ПАПКА/%s.vmt",sOverLay); 
        AddFileToDownloadsTable(overlays_file); 
    }return Plugin_Handled; 
}
 

Alraune

Участник
Сообщения
216
Реакции
52
AlmazON, Я пробовала все оверлеи. Сейчас у меняSourceMod (1.6.3) by AlliedModders LLC и плагин постоянно спамит ошибками, хотя и отображается у всех игроков. В данный момент стоит https://forums.alliedmods.net/attachment.php?attachmentid=83359&d=1299585285
[SM] Native "ClientCommand" reported: Client 10 is not connected
L 06/15/2015 - 23:44:06: [SM] Displaying call stack trace for plugin "sm_killmessage_framework.smx":
L 06/15/2015 - 23:44:06: [SM] [0] Line 62, /home/groups/sourcemod/upload_tmp/phpaipOjS.sp::ClearScreen
Вот как то так...(((
Готова заплатить за оверлей , который будет корректно работать на данном см..
 

WINS

Участник
Сообщения
264
Реакции
97
нужно добавить проверку IsClientConnected(client) в исходник и скомпилировать
 
Сверху Снизу