Не забирает фраг за самоубийство и тимкилл

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
Идея и часть кода отсюда
PHP:
#include <sourcemod>

public OnPluginStart()
{
    HookEvent("player_falldamage", FallDamage);
    HookEvent("player_death", Death);
}

public FallDamage(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (GetEntProp(client, Prop_Send, "m_iHealth") <=  GetEventFloat(event, "damage") && GetEntProp(client, Prop_Data,  "m_takedamage") > 0)
    {
        SetEntProp(client, Prop_Data, "m_iFrags", GetClientFrags(client) + 1);
    }
}

public Death(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client;
    if ((client = GetEventInt(event, "userid")) == GetEventInt(event, "attacker"))
    {
        client = GetClientOfUserId(client);
        SetEntProp(client, Prop_Data, "m_iFrags", GetClientFrags(client) + 1);
    }
}
При убийстве игрока от зоны trigger_hurt, фраг идет в минус. Чтоб не забирало

Надо чтоб при убийстве товарища по команде не вычитало фраг, а прибавляло.

Помогите разобраться :)
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
За убийство лазером на карте zm_amongus дает -1 фраг и 1 смерть.
Если убить себя через админку он дает +1 фраг и 1 смерть.

Добавлено через 13 минут
А нельзя ли просто заблокировать чтобы фраги минусовались?
 
Последнее редактирование:

tooshkan4uk

Участник
Сообщения
455
Реакции
446
C-подобный:
#include <sourcemod>

public OnPluginStart() 
    HookEvent("player_death", Event_OnPlayerDeath);

public Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid")),
    new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
    if (attacker)
    {
            frags = GetClientFrags(attacker);
        if (client == attacker)
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 1);
            
        if (GetClientTeam(client) == GetClientTeam(attacker))
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 2);
    }
    else
    {
            SetEntProp(client, Prop_Data, "m_iFrags", frags + 1);
    }
}
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
C-подобный:
#include <sourcemod>

public OnPluginStart() 
    HookEvent("player_death", Event_OnPlayerDeath);

public Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid")),
    new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
    if (attacker)
    {
            frags = GetClientFrags(attacker);
        if (client == attacker)
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 1);
            
        if (GetClientTeam(client) == GetClientTeam(attacker))
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 2);
    }
    else
    {
            SetEntProp(client, Prop_Data, "m_iFrags", frags + 1);
    }
}
C-подобный:
//// suicide_frag.sp
// suicide_frag.sp(9) : error 020: invalid symbol name ""
// suicide_frag.sp(9) : error 017: undefined symbol "attacker"
// suicide_frag.sp(10) : error 017: undefined symbol "attacker"
// suicide_frag.sp(12) : error 017: undefined symbol "frags"
// suicide_frag.sp(12) : error 017: undefined symbol "attacker"
// suicide_frag.sp(13) : warning 217: loose indentation
// suicide_frag.sp(13) : error 017: undefined symbol "attacker"
// suicide_frag.sp(14) : error 017: undefined symbol "attacker"
// suicide_frag.sp(16) : error 017: undefined symbol "attacker"
// suicide_frag.sp(17) : error 017: undefined symbol "attacker"
// suicide_frag.sp(21) : error 017: undefined symbol "frags"
// suicide_frag.sp(9) : warning 203: symbol is never used: ""
//
// 10 Errors.
//
// Compilation Time: 0,33 sec
// ----------------------------------------
 

The Night Fury

Участник
Сообщения
1,300
Реакции
1,395
EPacker2,

PHP:
#include <sourcemod>

public OnPluginStart() 
    HookEvent("player_death", Event_OnPlayerDeath);

public Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
           new frags = GetClientFrags(attacker);
    if ( attacker )
    {
        if (client == attacker)
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 1);
            
        if (GetClientTeam(client) == GetClientTeam(attacker))
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 2);
    }
    else
    {
            SetEntProp(client, Prop_Data, "m_iFrags", frags + 1);
    }
}
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
EPacker2,

PHP:
#include <sourcemod>

public OnPluginStart() 
    HookEvent("player_death", Event_OnPlayerDeath);

public Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
           new frags = GetClientFrags(attacker);
    if ( attacker )
    {
        if (client == attacker)
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 1);
            
        if (GetClientTeam(client) == GetClientTeam(attacker))
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 2);
    }
    else
    {
            SetEntProp(client, Prop_Data, "m_iFrags", frags + 1);
    }
}
C-подобный:
//// suicide_frag.sp
// suicide_frag.sp(10) : warning 217: loose indentation
// suicide_frag.sp(11) : warning 217: loose indentation
// Header size:           1940 bytes
// Code size:              692 bytes
// Data size:              252 bytes
// Stack/heap size:      16384 bytes; Total requirements:   19268 bytes
//
// 2 Warnings.
//
// Compilation Time: 0,37 sec
// ----------------------------------------
 

The Night Fury

Участник
Сообщения
1,300
Реакции
1,395
EPacker2, обновил, рабоатет теперь.
frags не объявлена была для отправки клиенту m_iFrags
 

The Night Fury

Участник
Сообщения
1,300
Реакции
1,395
EPacker2, warning - не так и страшно, но если доставляет, то попробуй
if ( attacker ) заменить на if ( attacker == 1), только не уверен, что сработает правильно. Но ошибок не будет.
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
Не-не, там дело было в пробелах перед new frags = GetClientFrags(attacker);
Удалил - норм компильнулось. :)
 

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
+1 фраг за слэй
-1 за триггерхерт

Добавлено через 1 минуту
Мне надо чтобы если упал с крыши, убился kill'ом, убился админский slay'ем, убился картой(trigger_hurt и т.п.) - фраг не уменьшается, а остается прежним. (frags + 1)
А если убил товарища, то дается +1 фраг! (frags + 2)

Добавлено через 4 минуты
Для упал с крыши идет этот кусок.
PHP:
#include <sourcemod>

public OnPluginStart()
{
    HookEvent("player_falldamage", FallDamage);
}

public FallDamage(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (GetEntProp(client, Prop_Send, "m_iHealth") <=  GetEventFloat(event, "damage") && GetEntProp(client, Prop_Data,  "m_takedamage") > 0)
    {
        SetEntProp(client, Prop_Data, "m_iFrags", GetClientFrags(client) + 1);
    }
}
 
Последнее редактирование:

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759
PHP:
#include <sourcemod>

public OnPluginStart()
{
    HookEvent("player_falldamage", FallDamage);
    HookEvent("player_death", Event_OnPlayerDeath);
}

public FallDamage(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (GetEntProp(client, Prop_Send, "m_iHealth") <=  GetEventFloat(event, "damage") && GetEntProp(client, Prop_Data,  "m_takedamage") > 0)
    {
        SetEntProp(client, Prop_Data, "m_iFrags", GetClientFrags(client) + 1);
    }
}

public Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
    new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
    if (attacker)
    {
        new client = GetClientOfUserId(GetEventInt(event, "userid")),
            frags = GetClientFrags(attacker);
        if (client == attacker)
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 1);
            
        if (GetClientTeam(client) == GetClientTeam(attacker))
            SetEntProp(attacker, Prop_Data, "m_iFrags", frags + 2);
        else
            SetEntProp(client, Prop_Data, "m_iFrags", GetClientFrags(client) + 1);
    }
}
Соединил коды, теперь он падающему с крыши не отнимает фраг, остальные так же.
Что делать с trigger_hurt?

Добавлено через 21 минуту
Dok_1997, задолбал сообщения удалять.
 
Последнее редактирование:

EPacker2

3D-моделист
Сообщения
1,040
Реакции
759

Вложения

  • zm_lila_impact0003.jpg
    zm_lila_impact0003.jpg
    83.6 КБ · Просмотры: 31

_wS_

Участник
Сообщения
383
Реакции
760
PHP:
#pragma semicolon 1
#include <sourcemod>

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

public player_death(Handle:event, const String:name[], bool:silent)
{
	new victim_id = GetEventInt(event, "userid");
	new attack_id = GetEventInt(event, "attacker");

	// Если игрока убил 'мир' или это самоубийство
	if (attack_id < 1 || attack_id == victim_id)
	{
		victim_id = GetClientOfUserId(victim_id);
		SetEntProp(victim_id, Prop_Data, "m_iFrags", GetClientFrags(victim_id) + 1);
		return;
	}

	attack_id = GetClientOfUserId(attack_id);

	// Убийство товарища
	if (attack_id > 0 && GetClientTeam(attack_id) == GetClientTeam(GetClientOfUserId(victim_id)))
	{
		SetEntProp(attack_id, Prop_Data, "m_iFrags", GetClientFrags(attack_id) + 2);
	}
}
82ebbb2b18add1193c19beb62a1c42f4.gif
 
Сверху Снизу