Заменить/Дать свойства entity на карте

Kruzi

Участник
Сообщения
153
Реакции
20
Возможно ли заменить мяч на карте, чтобы он стал легче или прыгучей, чтоли. Если нужно, могу сделать видео как сейчас и как должно быть(с другой карты). Мяч спавнится постоянно в одном месте.
 

FrozDark

Участник
Сообщения
1,769
Реакции
2,050
entity classname и его координаты спавна дай
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Как я пойму что это нужный мне предмет?
Оффтоп
Для "лентяев":
7fce599be40d.jpg
PHP:
#include <sdktools>

public OnPluginStart() RegConsoleCmd("sm_lowgravity", SetLowGravity, "Установить объекту на прицеле низкую гравитацию.");

public Action:SetLowGravity(client, args)
{
	if (client)
	{
		decl entity;
		if ((entity = GetClientAimTarget(client, false)) != -1)
		{
			SetEntityGravity(entity, 0.7);
			PrintToChat(client, "\x01Объекту \x03%i \x01установлена уменьшенная гравитация.", entity);
		}
	}
	return Plugin_Handled;
}

public OnGameFrame()
{
	static String:classname[32], entity;
	for (new i = 1; i <= MaxClients; ++i)
	{
		if (IsClientInGame(i) && (entity = GetClientAimTarget(i, false)) != -1)
		{
			GetEdictClassname(entity, classname, sizeof(classname));
			PrintHintText(i, "Вы смотрите на\nEntity index: %i classname: %s", entity, classname);
		}
	}
}

//public OnConfigsExecuted() ServerCommand("sv_hudhint_sound 0");
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #10
@Kruzi, индекс у мяча будет разным после каждого создания. тебе через FindEntityByClassname нужно искать свой мяч
 

Alnet

Участник
Сообщения
39
Реакции
0
В начале каждого раунда ищи индекс мяча по его стартовой координате.
 

Kruzi

Участник
Сообщения
153
Реакции
20
Оффтоп
Для "лентяев":
7fce599be40d.jpg
PHP:
#include <sdktools>

public OnPluginStart() RegConsoleCmd("sm_lowgravity", SetLowGravity, "Установить объекту на прицеле низкую гравитацию.");

public Action:SetLowGravity(client, args)
{
    if (client)
    {
        decl entity;
        if ((entity = GetClientAimTarget(client, false)) != -1)
        {
            SetEntityGravity(entity, 0.7);
            PrintToChat(client, "\x01Объекту \x03%i \x01установлена уменьшенная гравитация.", entity);
        }
    }
    return Plugin_Handled;
}

public OnGameFrame()
{
    static String:classname[32], entity;
    for (new i = 1; i <= MaxClients; ++i)
    {
        if (IsClientInGame(i) && (entity = GetClientAimTarget(i, false)) != -1)
        {
            GetEdictClassname(entity, classname, sizeof(classname));
            PrintHintText(i, "Вы смотрите на\nEntity index: %i classname: %s", entity, classname);
        }
    }
}

//public OnConfigsExecuted() ServerCommand("sv_hudhint_sound 0");
Не работает. В начале видео так как я хочу чтобы было, а дальше как на самом деле
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Ясное дело. Такая установка работает далеко не для всего и вся. Это лишь пример, как узнать необходимые данные и произвести над ним мгновенное действие. Само же действие нужно "подбирать" в func_physbox - Valve Developer Community, в частности, смотри Physics Override Parameters.
 

Kruzi

Участник
Сообщения
153
Реакции
20
@Kruzi, classname мяча какой?
func_physbox.
Ясное дело. Такая установка работает далеко не для всего и вся. Это лишь пример, как узнать необходимые данные и произвести над ним мгновенное действие. Само же действие нужно "подбирать" в func_physbox - Valve Developer Community, в частности, смотри Physics Override Parameters.
Кстати, на игроках гравитация уменьшается
 

AlmazON

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

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
C-подобный:
        int ball_entity = FindEntityByClassname(-1, "func_physbox");
        if (ball_entity != 0)
        {
            SetEntityGravity(ball_entity, 0.7);
        }
--- Добавлено позже ---
Еще как вариант.
C-подобный:
#pragma semicolon 1
#include <sdkhooks>
#pragma newdecls required
   
#if SOURCEMOD_V_MAJOR >= 1 && (SOURCEMOD_V_MINOR >= 8 || SOURCEMOD_V_MINOR >= 7 && SOURCEMOD_V_RELEASE >= 2)
public void OnEntityCreated(int entity, const char[] classname)
#else
public int OnEntityCreated(int entity, const char[] classname)
#endif
{
    if (IsValidEdict(entity) && IsValidEntity(entity))
    {
        if (StrEqual(classname, "func_physbox"))
        {
            SDKHook(entity, SDKHook_OnTakeDamage, OnEntityTakeDamage);
        }
    }
}

public Action OnEntityTakeDamage(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    if (IsValidEdict(client) && IsValidEntity(client))
    {
        SetEntityGravity(client, 0.7);
    }
    return Plugin_Continue;
}
 
Последнее редактирование:

Kruzi

Участник
Сообщения
153
Реакции
20
C-подобный:
        int ball_entity = FindEntityByClassname(-1, "func_physbox");
        if (ball_entity != 0)
        {
            SetEntityGravity(ball_entity, 0.7);
        }
--- Добавлено позже ---
Еще как вариант.
C-подобный:
#pragma semicolon 1
#include <sdkhooks>
#pragma newdecls required
  
#if SOURCEMOD_V_MAJOR >= 1 && (SOURCEMOD_V_MINOR >= 8 || SOURCEMOD_V_MINOR >= 7 && SOURCEMOD_V_RELEASE >= 2)
public void OnEntityCreated(int entity, const char[] classname)
#else
public int OnEntityCreated(int entity, const char[] classname)
#endif
{
    if (IsValidEdict(entity) && IsValidEntity(entity))
    {
        if (StrEqual(classname, "func_physbox"))
        {
            SDKHook(entity, SDKHook_OnTakeDamage, OnEntityTakeDamage);
        }
    }
}

public Action OnEntityTakeDamage(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    if (IsValidEdict(client) && IsValidEntity(client))
    {
        SetEntityGravity(client, 0.7);
    }
    return Plugin_Continue;
}
Оба варианта не помогли. Первый делал так:
PHP:
#include <sdktools>

public OnPluginStart() RegConsoleCmd("sm_lg", SetLowGravity, "Установить объекту на прицеле низкую гравитацию.");

public Action:SetLowGravity(client, args)
{
    if (client)
    {
        int ball_entity = FindEntityByClassname(-1, "func_physbox");
        if ((ball_entity = GetClientAimTarget(client, false)) != -1)
        {
              if (ball_entity != 0)
        {
                  SetEntityGravity(ball_entity, 0.01);
        }
        PrintToChat(client, "\x01Объекту \x03%i \x01установлена уменьшенная гравитация.", ball_entity);
        }
    }
    return Plugin_Handled;
}

public OnGameFrame()
{
    static String:classname[32], entity;
    for (new i = 1; i <= MaxClients; ++i)
    {
        if (IsClientInGame(i) && (entity = GetClientAimTarget(i, false)) != -1)
        {
            GetEdictClassname(entity, classname, sizeof(classname));
            PrintHintText(i, "Вы смотрите на\nEntity index: %i classname: %s", entity, classname);
        }
    }
}
 
Сверху Снизу