Присвоить и получить родителя обьекта

Banana

Участник
Сообщения
892
Реакции
113
Здравствуйте, нужно присвоить родителя (игрока) предмету, после чего нужно узнать родителя предмета.

AcceptEntityInput(ent, "SetParent", client); - так присваиваем родителя предмету ent

А как получить родителя зная ent ?

Или предложите свое решение, если считаете что я мыслю не в том направлении.
 

_wS_

Участник
Сообщения
383
Реакции
760
PHP:
public OnPluginStart()
{
    new t1, t2;

    if ((t1 = CreateEntityByName("info_target")) > MaxClients && (t2 = CreateEntityByName("info_target")) > MaxClients)
    {
        PrintToServer("-> t1 %d, t2 %d", t1, t2);
        DispatchKeyValue(t1, "targetname", "oslek");
        
        SetVariantString("oslek");
        AcceptEntityInput(t2, "SetParent", t1, t2);
        
        decl String:name[24];
        GetEntPropString(t2, Prop_Data, "m_iParent", name, sizeof(name));
        PrintToServer("-> '%s'", name);
        
        PrintToServer("-> '%d'", GetEntPropEnt(t1, Prop_Data, "m_hMoveParent"));
        PrintToServer("-> '%d'", GetEntPropEnt(t1, Prop_Data, "m_hMoveChild"));
        
        PrintToServer("-> '%d'", GetEntPropEnt(t2, Prop_Data, "m_hMoveParent"));
        PrintToServer("-> '%d'", GetEntPropEnt(t2, Prop_Data, "m_hMoveChild"));
        
    }

    if (t1 > 0) AcceptEntityInput(t1, "Kill");
    if (t2 > 0) AcceptEntityInput(t2, "Kill");
}

C-подобный:
] sm plugins load c
-> t1 30, t2 31
-> 'oslek'
-> '-1'
-> '31'
-> '30'
-> '-1'
 

Banana

Участник
Сообщения
892
Реакции
113
Есть граната с индексом ent

Делаем вот так:
PHP:
char s_indexplayer[5];
IntToString(client, s_indexplayer, 5);

SetVariantString(s_indexplayer);
AcceptEntityInput(ent, "SetParent", client, ent);

// Получаем       
        char s_indexplayer[5];
        GetEntPropString(ent, Prop_Data, "m_iParent", s_indexplayer, sizeof(s_indexplayer));
        int client = StringToint(s_indexplayer);
        PrintToServer("-> '%N'", client);

Я все верно понял?
 

_wS_

Участник
Сообщения
383
Реакции
760
Если s_indexplayer это имя игрока, то да, только это плохо PrintToServer("-> '%N'", client);
Он же мог покинуть сервер, а еще мог успеть зайти другой client с таким же индексом, поэтому может стоит userid в имени указывать, а не index.
Лучше опиши что сделать хочешь.

У летящей _projectile гранаты есть "m_hThrower":
new client = GetEntPropEnt(entity, Prop_Send, "m_hThrower");
if (client > 0 && client <= MaxClients) ..

Если это обычная в руках, то можно наверно и:
new client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity");

А имя игрока лучше не переписывать, а делать как-то так:

PHP:
stock GetClientTargetName(client, String:name[], size)
{
    GetEntPropString(client, Prop_Data, "m_iName", name, size);
    if (!name[0])
    {
        FormatEx(name, size, "%dplr", client);
        DispatchKeyValue(client, "targetname", name);
    }
}
 

Banana

Участник
Сообщения
892
Реакции
113
Если s_indexplayer это имя игрока - нет это индекс.. но вы правы что стоит сделать userid.

После взрыва гранаты мне нужно узнать кто ее взорвал и окрасить игроков которые получили демак в цвет соотвествующий некому "цвету" игрока кинувшего гранату)
--- Добавлено позже ---
Подскажите если дымит дымовая граната можно ли получить индекс этого дима и игрока который ее кинул?
 
Последнее редактирование:

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Возможно я не прав, но я обычно делаю 2 вариантами:
1. в глобал имя ent, при ее создании, записываю юзеid создателя(строковое). Это поле все равно не используется.
2. при создании ent, в массив, дополнительно записываю юзерid создателя(числовое).
Пока ent живое - есть и возможность получить эти значения.
 
Сверху Снизу