[CS:GO] Выставить хедшот при убийстве

Z3R0M1ND

Участник
Сообщения
24
Реакции
1
CS:GO
Написал такой код согласно докам. Но при убийстве хедшот не проставляется
PHP:
HookEvent("player_death", OnPlayerDeath, EventHookMode_Post);

public Action:OnPlayerDeath(Handle:event,const String:name[],bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	
	if (client <= 0 || attacker <= 0) return Plugin_Continue;
	
	if (IsDonatorPlayer(attacker))
	{
		SetEventBool(event, "headshot", true);
		return Plugin_Changed;
	}
	return Plugin_Continue;
}
 

R1KO

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


Это не нужно:
Action:
return Plugin_Changed;
return Plugin_Continue;
 

AlmazON

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

artyrka94

Участник
Сообщения
181
Реакции
38
а у меня что то не робит:
PHP:
#include <sdktools>

public OnPluginStart() HookEvent("bullet_impact", Impact, EventHookMode_Pre);


public Action:Impact(Handle:event,const String:name[],bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(GetUserFlagBits(client) & ADMFLAG_ROOT)
	{
		new Float:pos[3];
		wS_GetLookPos(client, pos);
		SetEventFloat(event, "x", pos[0]);
		SetEventFloat(event, "y", pos[1]);
		SetEventFloat(event, "z", pos[2]);
	}return Plugin_Continue;
}

public bool:wS_GetLookPos_Filter(ent, mask, any:client) return client != ent;

wS_GetLookPos(client, Float:wS_Pos[3])
{
	decl Float:EyePosition[3], Float:EyeAngles[3], Handle:h_trace;
	GetClientEyePosition(client, EyePosition);
	GetClientEyeAngles(client, EyeAngles);
	h_trace = TR_TraceRayFilterEx(EyePosition, EyeAngles, MASK_SOLID, RayType_Infinite, wS_GetLookPos_Filter, client);
	TR_GetEndPosition(wS_Pos, h_trace);
	CloseHandle(h_trace);
}
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
PHP:
// в css проверил, в go не знаю
public Action:Event_OnPlayerDeath(Handle:event, const String:name[], bool:silent)
{
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));

	if (attacker > 0)
	{
		if (attacker != GetClientOfUserId(GetEventInt(event, "userid")))
		{
			if (Твоя_проверка[attacker])
			{
				SetEventBool(event, "headshot", true);
			}
		}
	}
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
if (attacker > 0)    {        if (attacker != GetClientOfUserId(GetEventInt(event, "userid")))        {            if (Твоя_проверка[attacker])
О, ещё один... Может ты нормально сможешь объяснить, почему ни в одну строчку проверяем? Неужели символьно && хуже нового if + {}?
 
Сообщения
13
Реакции
0
О, ещё один... Может ты нормально сможешь объяснить, почему ни в одну строчку проверяем? Неужели символьно && хуже нового if + {}?

Потому что логическая цыпочка ломается

PHP:
if (client == 0 || attacker == 0) будет выполнено если клиент или атакующий будут = 0

PHP:
if (client == 0 || attacker == 0 && IsDonatorPlayer(attacker)) будет выполнено если клиент будет = 0 или же если атакующий = 0 и он же является донатером
тоесть если клиент будет = -1, а атакующий будет != 0 и будет донатером, то код выполнится
 

AlmazON

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

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #10
Андрей Трегубенко, для этого есть (...)



Если

то как раз нужно будет. И

тоже (почти всегда ставится в конце).

Как раз то и не нужно. В данном случае даже на пре.
PHP:
funcenum EventHook
{
	/**
	 * Called when a game event is fired.
	 *
	 * @param event			Handle to event. This could be INVALID_HANDLE if every plugin hooking 
	 *						this event has set the hook mode EventHookMode_PostNoCopy.
	 * @param name			String containing the name of the event.
	 * @param dontBroadcast	True if event was not broadcast to clients, false otherwise.
	 * @return				Ignored for post hooks. Plugin_Handled will block event if hooked as pre.
	 */
	Action:public(Handle:event, const String:name[], bool:dontBroadcast),
	/**
	 * Called when a game event is fired.
	 *
	 * @param event			Handle to event. This could be INVALID_HANDLE if every plugin hooking 
	 *						this event has set the hook mode EventHookMode_PostNoCopy.
	 * @param name			String containing the name of the event.
	 * @param dontBroadcast	True if event was not broadcast to clients, false otherwise.
	 * @noreturn
	 */
	public(Handle:event, const String:name[], bool:dontBroadcast),
};

Тоесть оно или блочит Plugin_Handled или идет дальше Plugin_Continue;


Для большей уверености сам проверил - всё работает:
PHP:
#pragma semicolon 1

#include <sourcemod>

public OnPluginStart() HookEvent("player_death", OnPlayerDeath, EventHookMode_Pre); 

public OnPlayerDeath(Handle:event,const String:name[],bool:dontBroadcast) 
{ 
    new client = GetClientOfUserId(GetEventInt(event, "userid")); 
    new attacker = GetClientOfUserId(GetEventInt(event, "attacker")); 
    if (attacker && attacker != client) SetEventBool(event, "headshot", true);  
}

97dee16a61.jpg
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
В данном случае даже на пре
Написано: Plugin_Handled для блокировки. Подразумевается, что в прочих случаях ставится согласно Action.
В туториале SM также обязательно ставится return Plugin_Continue; для событий с Pre.
Таймер тоже работает, но ты же ставишь там return Plugin_Stop;, не так ли? Правильно делаешь. Здесь - не исключение.
 

semjef

semjef.ru
Сообщения
993
Реакции
444
AlmazON, верно ты говоришь, забей уже, за♥♥♥♥и сраться из-за мелочи. Ну переделают потом компилятор и не будет его код банально компилиться т.к. не верен вот и всё
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #13
AlmazON, вот именно, что return Plugin_Continue;
как я и написал:
Тоесть оно или блочит Plugin_Handled или идет дальше Plugin_Continue;

return Plugin_Changed; Ничего не даст.

А вот Action: на пре хуке даже если и нужен то и без него работает.


semjef, вот переделают тогда и будут писать как в вики
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
если и нужен то и без него работает
Таймер тоже работает, но ты же ставишь там return Plugin_Stop;
Не ставь в таймере - тоже ведь работает, останавливается. :-D
Оффтоп
EventHookMode_PostNoCopy тоже ты самолично проверял - одинаково все переменные получаем. Я думаю, это компилятор просто за нас всё правит.
 

R1KO

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

semjef

semjef.ru
Сообщения
993
Реакции
444
R1KO, вродеб запрет на повторный хук этого эвента в данном плагине. такто один эвентможно хоть 10 раз хукнуть в плагине и все сработают.
 
  • Мне нравится
Реакции: R1KO
Сверху Снизу