Заказать Сервер Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

Страница 1 из 11
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Индекс игрока создавшего ентити
Индекс игрока создавшего ентити
tonline_kms65 Дата: Воскресенье, 12.06.2016, 17:54:38 | Сообщение # 1
Сообщений: 179
Репутация: 2 [ +/- ]
Вопрос такой.
Нужно получить индекс игрока который создал энтити.

Можно например вот так:

SetEntPropEnt(ent, Prop_Data, "m_hOwnerEntity", client); записали индекс создателя. (при создании ENT)
client = GetEntPropEnt(Ent, Prop_Data, "m_hOwnerEntity"); извлекли индекс создателя.

Но по ряду причин такой вариант не подходит.
Какие еще есть варианты получения индекса создателя энтити? Именно через саму энтитю естественно.
 
SourceSamil Дата: Воскресенье, 12.06.2016, 18:03:25 | Сообщение # 2
Сообщений: 237
Репутация: [ +/- ]
Создавай массив энтит и храни в них индекс создателя, но т.к. ентит много, скорее всего массив будет большой
 
«SeReGa»☆ Дата: Воскресенье, 12.06.2016, 18:08:35 | Сообщение # 3
Сообщений: 395
Репутация: 37 [ +/- ]
tonline_kms65, попробуй
Код
SetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity", client);//записали индекс создателя. (при создании ENT)
Owner = GetEntProp(entity, Prop_Send, "m_hOwnerEntity");//извлекли индекс создателя.
 
«SeReGa»☆ Дата: Воскресенье, 12.06.2016, 18:22:31 | Сообщение # 4
Сообщений: 395
Репутация: 37 [ +/- ]
tonline_kms65, почему же??
 
tonline_kms65 Дата: Воскресенье, 12.06.2016, 18:25:35 | Сообщение # 5
Сообщений: 179
Репутация: 2 [ +/- ]
Цитата «SeReGa»☆ ()
tonline_kms65, почему же??


Потому что самому создателю этой энтити через модель тогда можно проходить. Нет столкновений.
 
«SeReGa»☆ Дата: Воскресенье, 12.06.2016, 18:36:48 | Сообщение # 6
Сообщений: 395
Репутация: 37 [ +/- ]
тогда попробуй масив создать что то типо такого
Код

new Owner[MAXPLAYERS+1];

Owner[client] = iEntity;

if(iEntity==Owner[client])
{

}
 
SourceSamil Дата: Воскресенье, 12.06.2016, 19:30:59 | Сообщение # 7
Сообщений: 237
Репутация: [ +/- ]
О боже
new iIndexEntity[ 2049 ];
Ent = CreateEntity (Ну типа создал)
iIndexEntity[ Ent ] = GetClientUserId( iClient );

Или

new Handle: hTrie = CreateTrie( );
Ent = CreateEntity (Ну типа создал);
new iRef = EntIndexToEntRef( Ent );
decl String: sIndex[ 16 ];
FormatEx( sIndex, ( sizeof( sIndex ) - 1 ), "%i", iRef );
SetTrieValue( hTrie, sIndex, GetClientUserId( iClient ) );
Так записали, потом в обратном порядке получение, ну и удалять, когда тебе нужно, все ключи делай через ref, а индексы игроков переводи в userid
 
GodlikE145 Дата: Понедельник, 13.06.2016, 05:27:16 | Сообщение # 8
Сообщений: 33
Репутация: 9 [ +/- ]
Цитата SourceSamil ()
Потому что самому создателю этой энтити через модель тогда можно проходить. Нет столкновений.

Если ты используешь флаг "Break on Touch", чтобы сломать энтити, то лучше используй SDKHook_OnStartTouch. С ним прокатывает и такой способ поиска хозяина энтити
 
tonline_kms65 Дата: Понедельник, 13.06.2016, 07:37:12 | Сообщение # 9
Сообщений: 179
Репутация: 2 [ +/- ]
В общем выяснилась основная проблема. Поймал ошибку.

Это по поводу плагина Дрон. Значит вроде все нормально, до тех пор пока дрона не сбивают в воздухе и он начинает, как бы, свободное падение. То есть Дрон просто падает по направлению к земле.
Я сделал перехват ущерба HookSingleEntityOutput(ent_dron, "OnHealthChanged", EntityOutput:Health_Changed, false);(кстати не пойму как здесь передается создатель т.е. activator)

Пока Дрон находится под управлением т.е. OnPlayerRunCmd определение нанесенного ущерба и кем нанесен этот ущерб работает отлично.
Если я теряю управление, Дрон начинает падать, ударяется об землю и разрушается (если HP мало) создатель определяется не иначе как Consol. Со всеми вытекающими косяками. Индекс не определен и пошло - поехало.
Что за бред. Не пойму почему консоль. Какое отношение имеет консоль к ущербу.

Создателя (activator) я беру из public Health_Changed(const String:output[], caller, activator, Float:delay){
PrintToChat(killer, "Ты сбил Дрона %N!", activator); (N я определяю полное имя создателя. проверю индекс создателя %i сообщу какой индекс имеет Console)

Если я сам разрушаю Дрона, например из оружия, то пишет (все нормально, правильно)
Ты уничтожил своего Дрона!

А когда Дрон падает на землю с высоты и разбивается пишет
Ты сбил Дрона Console!
Здесь создатель Дрона определен как Consol, хотя создатель этого Дрона я сам, с индексом 1

Получается что я сбил Дрона которого создал не кто иной как Console. Это еще как понять? Кто с таким имел дело - напишите. Интересно а у консоли есть индекс?
Со временем напряженка большая.

Цитата GodlikE145 ()
Если ты используешь флаг "Break on Touch", чтобы сломать энтити, то лучше используй SDKHook_OnStartTouch. С ним прокатывает и такой способ поиска хозяина энтити

Поломка модели(разрушение) я забил при компиляции модели. Проще говоря она взрывается когда HP=0

$keyvalues


Сообщение отредактировал tonline_kms65 - Понедельник, 13.06.2016, 07:57:11
 
TEIN Дата: Понедельник, 13.06.2016, 08:05:35 | Сообщение # 10
Сообщений: 550
Репутация: 73 [ +/- ]
так и должно быть, по идее, console = 0, можешь ловить, когда стреляют по дрону, кто последний стрельнул, тот и убийца, а когда хп меняется, если activator = 0, то ставишь убийцу, которого ты нашел ранее
 
tonline_kms65 Дата: Понедельник, 13.06.2016, 08:09:00 | Сообщение # 11
Сообщений: 179
Репутация: 2 [ +/- ]
Ты сбил Дрона Console! 0
Индекс этой самой консоли оказывается 0.

Добавлено (13.06.2016, 08:09:00)
---------------------------------------------
Цитата tonline_kms65 ()
так и должно быть, по идее, console = 0, можешь ловить, когда стреляют по дрону, кто последний стрельнул, тот и убийца, а когда хп меняется, если activator = 0, то ставишь убийцу, которого ты нашел ранее


Да я уже понял. Попробую. Спасибо.
Хоть понятнее стало. Не думал что у консоли есть индекс. Хотя как её вызывать не подумал.

Интересно, что будет если созданной энтитьке попробовать присвоить свой индекс.


Сообщение отредактировал tonline_kms65 - Понедельник, 13.06.2016, 08:13:36
 
Scarface_slv Дата: Вторник, 14.06.2016, 10:51:49 | Сообщение # 12
Сообщений: 749
Репутация: 61 [ +/- ]
http://world-source.ru/forum/102-2521-1 т.е хозяина можно записать m_PredictableID так же в targetname


Сообщение отредактировал Scarface_slv - Вторник, 14.06.2016, 10:55:18
 
tonline_kms65 Дата: Среда, 15.06.2016, 07:18:52 | Сообщение # 13
Сообщений: 179
Репутация: 2 [ +/- ]
Цитата Scarface_slv ()
http://world-source.ru/forum/102-2521-1 т.е хозяина можно записать m_PredictableID так же в targetname

m_PredictableID очень интересная штука. Индекс выдает правильно. Отличная замена m_hOwnerEntity.

Дело все таки не в определении индекса. Когда Дрон разбивается об землю - всегда одна и та же ошибка:

L 06/15/2016 - 07:46:09: [SM] [0] GetEntProp
L 06/15/2016 - 07:46:09: [SM] [1] Line 311, C:\Program Files\Valve\cstrike\addons\sourcemod\scripting\include\entity_prop_stocks.inc::GetEntityFlags()


Пытается получить флаг. В инклюде:



Добавлено (15.06.2016, 07:17:28)
---------------------------------------------
Все. Разобрался.
Как обычно все. Сам накосячил. Определение скорости не туда затолкал.
Вот и ищет кому бы скорость посчитать.

Спасибо за m_PredictableID.
Очень пригодится на будущее.

Тему можно закрыть.


Сообщение отредактировал tonline_kms65 - Среда, 15.06.2016, 07:20:09
 
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Индекс игрока создавшего ентити
Страница 1 из 11
Поиск: