Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
BorizzK

Постоянный id предмета в игре

Recommended Posts

Любоай предмет имеет свой persistent id (который его отличает от других в бд сервера)

 

Получить его просто
 

		int b1,b2,b3,b4;
		GetPersistentID( b1, b2, b3,b4 );
		string m_PersistenceId = b1.ToString() + b2.ToString() + b3.ToString() + b4.ToString();

 

Как использовать? Это решайте сами

 

Share this post


Link to post
Share on other sites



Я так понимаю он при перезапуске сервера не меняется ?

 

Share this post


Link to post
Share on other sites
12 часов назад, BorizzK сказал:

string m_PersistenceId = b1.ToString() + b2.ToString() + b3.ToString() + b4.ToString();


5      15    0      0

51    5      0      0

 

Ага?)

Если уж ты за чем то переводишь в string, то используй разделитель значений, как в примере с netId
Хотя не понятно - зачем в стринги перегонять....

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
2 часа назад, NoNameUltima сказал:


5      15    0      0

51    5      0      0

 

Ага?)

Если уж ты за чем то переводишь в string, то используй разделитель значений, как в примере с netId
Хотя не понятно - зачем в стринги перегонять....

это просто пример

А так я высчитываю хэш из этой строки и использую хэш как идентификатор

 

 

Share this post


Link to post
Share on other sites
3 часа назад, BorizzK сказал:

это просто пример

А так я высчитываю хэш из этой строки и использую хэш как идентификатор

 

 

И какая разница в хеше

51500

и

51500

 

?)))))))))))))))))))))))

 

array<int> US_GetPersistentId( EntityAI v_EntityAI )
{
	array<int>	v_Result	=	{ 0, 0, 0, 0 };
	
	v_EntityAI.GetPersistentID( v_Result[ 0 ], v_Result[ 1 ], v_Result[ 2 ], v_Result[ 3 ] );
	return v_Result;
}

bool US_IsEqualPerisitentId( array<int> v_A, array<int> v_B )
{
	if ( v_A.Count() < 4 )
	{
		return false;
	}
	if ( v_A.Count() != v_B.Count() )
	{
		return false;
	}
	for ( int v_I = 0; v_I < 4; v_I++ )
	{
		if ( v_A[ v_I ] != v_B[ v_I ] )
		{
			return false;
		}
	}
	return true;
}

bool US_IsEqualPerisitentId( EntityAI v_EntityAI, array<int> v_B )
{
	return US_IsEqualPerisitentId( US_GetPersistentId( v_EntityAI ), v_B );
}

 

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites

Ультма, ты что курил?

Там не бывает 0 5 и тп

Тып проверил что ли как оно работает и не писал куйни

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
10 часов назад, BorizzK сказал:

Ультма, ты что курил?

Там не бывает 0 5 и тп

Тып проверил что ли как оно работает и не писал куйни

Завязывай с тяжелыми.

 

Тебе дали пример с 4 типами Интегер.

 

Раз не понимаешь, вот тебе другой пример:

 

Объект А

15 79 81 92

 

Объект Б

157 9 81 92

 

Перегони в string и что будет?
У обоих объектов будет одинаковый ID в виде строки. И никакие хеши, и т.п. хренотень тебе не помогут.

Share this post


Link to post
Share on other sites

Или ты думал, что "дурачки" в богемии просто так NetId разделяют ":" ?
Разница между

15:79:81:92

и

157:9:81:92

вроде как очевидна не?

И по описанию функции, там 4 байта, что говорит о том, что там и 0 может быть. т.е. от 0 до 255 каждое значение.

Share this post


Link to post
Share on other sites

Уважаемый Ультима

Прежде чем пытаться что-то там преполагать, потрудитесь провести эксперимент

 

1. b1:b2:b3:b4

 

270248452:1515028858:1682406588:1047253099

 

2. В игре - в контексте одного класса (Например CarScript) ни одно число НИКОГДА не повторится - те для каждой тачки на сервере все эти числа будут УНИКАЛЬНЫ
 

3. Числа могут быть и отрицательными

 

И где ты в описании про БАЙТЫ увидел?

 

/! Returns blocks of bits of persistence id of this entity.
//! This id stays the same even after server restart.
  proto void GetPersistentID( out int b1, out int b2, out int b3, out int b4 );

 

Блоки битов, какие нафиг байты

 

Вот тапрмер - в ItemBase

 

Все будет такого вида

 

2037479044:-2109144610:1647918224:-235837304

И ВСЕ ЧИСЛА УНИКАЛЬНЫ ДЛЯ КАЖДОГО ПРЕДМЕТА!

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
12.07.2021 в 08:11, BorizzK сказал:

2. В игре - в контексте одного класса (Например CarScript) ни одно число НИКОГДА не повторится - те для каждой тачки на сервере все эти числа будут УНИКАЛЬНЫ

Кто это сказал? Где это гарантированно? Зачем тогда 4 числа? - Не хватит диапазона интегер? - Там астрономическое кол-во объектов чтоль?
 

12.07.2021 в 08:11, BorizzK сказал:

270248452:1515028858:1682406588:1047253099

3. Числа могут быть и отрицательными

И где ты в описании про БАЙТЫ увидел?

Если они могут быть отрицательными, то это говорит только о том, что там действительно интегер, + о тупости замазанного идиота который вместо 4 байт( а на деле хватило бы и 3 ), за каким то неведомым пистецом, заюзал аж 4 интегер.(Искренне надеюсь, что они по сети не передаются, как NetId)

P.S. Если там 4 интегер числа, то вероятность, что они повторятся даже пристыкуй их в строку - почти нулевая, и всеж 0.0000000000001% не то же самое, что 0.
Лучше писать так, как надо. Тем более что разницы никакой нет.
P.S.P.S. - Загугли операции сравнения чисел и строк. - Даже 100 if'ов для сравнения чисел будут работать быстрее чем сравнение строк. - Так что лучше не перегонять в строку, а брать как есть. - Например в массив из 3(4) элементов.

*Ты когда отвечаешь в тему, - ник выделяй, - в уведомлениях выползает, а так не видно что ответил....

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
3 часа назад, NoNameUltima сказал:

Кто это сказал? Где это гарантированно? Зачем тогда 4 числа? - Не хватит диапазона интегер? - Там астрономическое кол-во объектов чтоль?
 

Если они могут быть отрицательными, то это говорит только о том, что там действительно интегер, + о тупости замазанного идиота который вместо 4 байт( а на деле хватило бы и 3 ), за каким то неведомым пистецом, заюзал аж 4 интегер.(Искренне надеюсь, что они по сети не передаются, как NetId)

P.S. Если там 4 интегер числа, то вероятность, что они повторятся даже пристыкуй их в строку - почти нулевая, и всеж 0.0000000000001% не то же самое, что 0.
Лучше писать так, как надо. Тем более что разницы никакой нет.
P.S.P.S. - Загугли операции сравнения чисел и строк. - Даже 100 if'ов для сравнения чисел будут работать быстрее чем сравнение строк. - Так что лучше не перегонять в строку, а брать как есть. - Например в массив из 3(4) элементов.

*Ты когда отвечаешь в тему, - ник выделяй, - в уведомлениях выползает, а так не видно что ответил....

Это хэши судя по всему

чего хз - но работает
Про сранение строк я в курсе
Ток я не строки сравниваю
А получаю хэш строки от b1-b2-b3-b4 и использую полученное целое число - 1штуку
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.