Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
BorizzK

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

Рекомендованные сообщения

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

 

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

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





благодарочка за инфу

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 часов назад, BorizzK сказал:

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


5      15    0      0

51    5      0      0

 

Ага?)

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

Изменено пользователем NoNameUltima (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, NoNameUltima сказал:


5      15    0      0

51    5      0      0

 

Ага?)

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

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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 );
}

 

Изменено пользователем NoNameUltima (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, BorizzK сказал:

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

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

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

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

 

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

 

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

 

Объект А

15 79 81 92

 

Объект Б

157 9 81 92

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

15:79:81:92

и

157:9:81:92

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

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

 

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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) элементов.

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

Изменено пользователем NoNameUltima (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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штуку
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.