Что такое object_id

Теги:
 

bssat

разработчик l2j-сервера
Собственно сабж. Как найти следующее число object_id для таблиц итемов, кланов, чарактеров и т.д. Подскажите плиз, могущественные знатоки.....
... Уж лучше голодать, чем что попало есть ... ------------------- Сайт по l2j серверам  
UA SoulKeeper #23.01.2007 19:41
+
-
edit
 

SoulKeeper

разработчик L2J Fortress

уникальный идентификатор L2Object
Все остальные классы которые имеют свой object_id так или иначе наследуются от L2Object
Разыскивается десятка с два датапакеров :) http://la2.wrk.ru/forum/viewtopic.php?id=50882  

bssat

разработчик l2j-сервера
Во, блин, помогли..... Это и так понятно. Как мне отыскать этот номер следующий после максимального для всей базы на текущий момент времени.
... Уж лучше голодать, чем что попало есть ... ------------------- Сайт по l2j серверам  
+
-
edit
 

Balancer

администратор
★★★★★
Для всей базы или для работающего Java-сервера? Это несколько идеологически разные вещи.

Для всей базы - собираешь в одну таблицу все ID, берёшь максимум, добавляешь 1 :)

Для Java - есть соответстсвующий метод в IDFactory. Что-то типа getNextObjectId() или в таком духе, на память не помню. Можно посмотреть в любых исходниках, хоть в SF. Эта часть у всех похожая.
 

bssat

разработчик l2j-сервера
Balancer> Для всей базы или для работающего Java-сервера? Это несколько идеологически разные вещи.
Balancer> Для всей базы - собираешь в одну таблицу все ID, берёшь максимум, добавляешь 1 :)
Balancer> Для Java - есть соответстсвующий метод в IDFactory. Что-то типа getNextObjectId() или в таком духе, на память не помню. Можно посмотреть в любых исходниках, хоть в SF. Эта часть у всех похожая.

Спасибо за быстрый ответ. Меня интересует для работающего сервера.
Я увидел таблицу temporaryobjecttable. Я так понимаю, что она и является сборкой всех ID. В исходниках, я нашел, что она и формируется как совокупность ID из всех таблиц. Так вот вопрос в том, в какой момент создается эта таблица?
... Уж лучше голодать, чем что попало есть ... ------------------- Сайт по l2j серверам  
+
-
edit
 
В момент загрузки сервера. Она используется для поиска максимального ид.
Пытаясь понять рекурсию, следи за тем, чтобы она не поняла тебя первой...  
+
-
edit
 

Balancer

администратор
★★★★★
Соответственно, во время работы сервера смотреть на БД уже нельзя. У сервера могут быть новые ObjectId, не сохранённые в БД.

Короче, см. методы в IDFactory.
 

bssat

разработчик l2j-сервера
Balancer> Соответственно, во время работы сервера смотреть на БД уже нельзя. У сервера могут быть новые ObjectId, не сохранённые в БД.
Balancer> Короче, см. методы в IDFactory.

Вот че я нарыл:

code text
  1. //create a temporary table
  2.             Statement s = con.createStatement();
  3.             try
  4.             {
  5.                 s.executeUpdate("drop table temporaryObjectTable");
  6.             }
  7.             catch (SQLException e)
  8.             {
  9.             }
  10.            
  11.             s.executeUpdate("create table temporaryObjectTable" + "
  12. (object_id int NOT NULL PRIMARY KEY)");
  13.            
  14.             s.executeUpdate("insert into temporaryObjectTable (object_id)"
  15. + " select obj_id from characters");
  16.             s.executeUpdate("insert into temporaryObjectTable (object_id)"
  17. + " select object_id from items");
  18.             s.executeUpdate("insert into temporaryObjectTable (object_id)"
  19. + " select clan_id from clan_data");
  20.             //s.executeUpdate("insert into temporaryObjectTable
  21. (object_id)" + " select crest_id from clan_data where crest_id > 0");
  22.             s.executeUpdate("insert into temporaryObjectTable (object_id)"
  23. + " select object_id from ItemsOnGround");
  24.            
  25.             ResultSet result = s.executeQuery("select count(object_id) from
  26. temporaryObjectTable");
  27.            
  28.             result.next();
  29.             int size = result.getInt(1);
  30.             int[] tmp_obj_ids = new int[size];
  31.             // _log.debugr("tmp table size: " + tmp_obj_ids.length);
  32.             result.close();
  33.            
  34.             result = s.executeQuery("select object_id from
  35. temporaryObjectTable ORDER BY object_id");
  36.            
  37.             int idx = 0;
  38.             while (result.next())
  39.             {
  40.                 tmp_obj_ids[idx++] = result.getInt(1);
  41.             }


Таким образом, получается, что в любой момент, когда кто-то что-то покупает или создает клан или выполняет другое действие, приводящее к новому ObjectID производится удаление таблицы и создание новой, а потом к последнему значению в ней добавляется 1. Или я не прав?
... Уж лучше голодать, чем что попало есть ... ------------------- Сайт по l2j серверам  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru