gawric 49 Опубликовано 20 декабря, 2015 Здравствуйте. Как в ядре получить число убитых? пытаюсь activeChar.kills получаю пустой массив. и как узнать сколько времени находился в онлайн игрок пытаюсь activerChat.getOnlineTIme получаю какую-то ерунду 20620mc хотя я в игре был 1 час + счетчик не обновляется, только после релога Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Katsu 8 Опубликовано 20 декабря, 2015 В 20.12.2015 в 16:05, gawric сказал: Здравствуйте. Как в ядре получить число убитых? пытаюсь activeChar.kills получаю пустой массив. и как узнать сколько времени находился в онлайн игрок пытаюсь activerChat.getOnlineTIme получаю какую-то ерунду 20620mc хотя я в игре был 1 час + счетчик не обновляется, только после релога Здравствуйте, какие у вас хроники, и основа исходников. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 20 декабря, 2015 intelude l2jfrozen Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Katsu 8 Опубликовано 20 декабря, 2015 (изменено) это вы про это? public CustomMessage getOnlineTime(Player player) { int total = (int) player.getOnlineTime(); int days = total / (1000 * 60 * 60 * 24) % 7; int hours = total / (1000 * 60 * 60) % 24; int minute = total / (1000 * 60) % 60; if(days >= 1) return new CustomMessage("l2da.gameserver.model.Player.getOnlineTime.day", player).addNumber(days).addNumber(hours).addNumber(minute); else return new CustomMessage("l2da.gameserver.model.Player.getOnlineTime.hour", player).addNumber(hours).addNumber(minute); } public long getOnlineTime() { return _onlineTime; } Изменено 20 декабря, 2015 пользователем Katsu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 20 декабря, 2015 (изменено) public long getOnlineTime(){return _onlineTime;} да вот этот. Почему-то работает корректно Изменено 20 декабря, 2015 пользователем gawric Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Katsu 8 Опубликовано 20 декабря, 2015 В 20.12.2015 в 16:38, gawric сказал: public long getOnlineTime() { return _onlineTime; } да вот этот я вам готовый запрос дал под вывод онлайна. только он под оверов, адаптируете сами) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Katsu 8 Опубликовано 20 декабря, 2015 если помог +) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Katsu 8 Опубликовано 20 декабря, 2015 Что мешает вам, сделать по этому принципу и вывести то что вы хотите? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 20 декабря, 2015 В 20.12.2015 в 16:50, Katsu сказал: Что мешает вам, сделать по этому принципу и вывести то что вы хотите? то что getOnlineTime на сколько я вижу, после 1 часа в сети выдает в чате 20620мс что равняется 0.3 минуты. а то что вы скинули это все лишь арифметическая формула преобразования long в дни-часы. Я хотел узнать где происходит реализация getOnlineTime и ActiveChar.kill Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Katsu 8 Опубликовано 20 декабря, 2015 В 20.12.2015 в 16:53, gawric сказал: то что getOnlineTime на сколько я вижу, после 1 часа в сети выдает в чате 20620мс что равняется 0.3 минуты. а то что вы скинули это все лишь арифметическая формула преобразования long в дни-часы. Я хотел узнать где происходит реализация getOnlineTime и ActiveChar.kill Таймеры смотрите, для начала. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Katsu 8 Опубликовано 20 декабря, 2015 За вас бесплатно делать не кто не будет, так что я дал вам подсказку, если что пишите по контактам: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 20 декабря, 2015 а я разве говорил, что за меня нужно что-то делать? в любом случаи спс нашел то что искал. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Katsu 8 Опубликовано 20 декабря, 2015 В 20.12.2015 в 17:08, gawric сказал: а я разве говорил, что за меня нужно что-то делать? в любом случаи спс нашел то что искал. ну вот) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mangol 101 Опубликовано 20 декабря, 2015 (изменено) Скорей всего в базе данных sql что-то в стиле графы onlinetime, сколько пвп убийств тоже что-то в стиле графы pvpkills. Желательно грузить раз в час в кэш чтобы много раз не обращаться к базе. Как вернуть время в игре? Вот метод. Работает на J8. final Instant instant = Instant.ofEpochSecond(86068/** getOnlineTime()*/); final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault()); final int day = zonedDateTime.getDayOfYear(); final int hour = zonedDateTime.getHour(); final int minute = zonedDateTime.getMinute(); final int sec = zonedDateTime.getSecond(); Изменено 20 декабря, 2015 пользователем Mangol Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 20 декабря, 2015 В 20.12.2015 в 18:00, Mangol сказал: Скорей всего в базе данных sql что-то в стиле графы onlinetime, сколько пвп убийств тоже что-то в стиле графы pvpkills. Желательно грузить раз в час в кэш чтобы много раз не обращаться к базе. Как вернуть время в игре? Вот метод. Работает на J8. final Instant instant = Instant.ofEpochSecond(86068/** getOnlineTime()*/); final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault()); final int day = zonedDateTime.getDayOfYear(); final int hour = zonedDateTime.getHour(); final int minute = zonedDateTime.getMinute(); final int sec = zonedDateTime.getSecond(); я уже вырезал из стандартных часов. Но все равно спасибо запишу на всякий. С мобами конечно вышла промашка, хотел сделать считалку убитых - что-бы к ней прекрутить капачу, грузит заметно. Если после каждого убийства делать запись в бд. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mangol 101 Опубликовано 20 декабря, 2015 В 20.12.2015 в 19:14, gawric сказал: В 20.12.2015 в 18:00, Mangol сказал: Скорей всего в базе данных sql что-то в стиле графы onlinetime, сколько пвп убийств тоже что-то в стиле графы pvpkills. Желательно грузить раз в час в кэш чтобы много раз не обращаться к базе. Как вернуть время в игре? Вот метод. Работает на J8. final Instant instant = Instant.ofEpochSecond(86068/** getOnlineTime()*/); final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault()); final int day = zonedDateTime.getDayOfYear(); final int hour = zonedDateTime.getHour(); final int minute = zonedDateTime.getMinute(); final int sec = zonedDateTime.getSecond(); я уже вырезал из стандартных часов. Но все равно спасибо запишу на всякий. С мобами конечно вышла промашка, хотел сделать считалку убитых - что-бы к ней прекрутить капачу, грузит заметно. Если после каждого убийства делать запись в бд. Зачем каждое убийство записывать сразу в дб ? 1 -ый выход. Создать кэш на объекте игрока и записывать туда каждое убийство и по триду к примеру в час, либо при выходе чара записывать в базу. 2-ой выход. Создать кэш многопоточный и записывать туда всех игроков которые убили моба, и через час опять же записывать все в базу. 24 часа == 24 раза запишет в базу. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 621 Опубликовано 20 декабря, 2015 (изменено) В 20.12.2015 в 19:14, gawric сказал: С мобами конечно вышла промашка, хотел сделать считалку убитых - что-бы к ней прекрутить капачу, грузит заметно. Если после каждого убийства делать запись в бд.нда... каждое изменение счетчика у каждого игрока писать в базу - это абзац. вобще можно обойтись и без хранения этих данных в бд. заводим общий хэшмап: ключи - ид игроков, значения - количество убитых этим игроком мобов. ну и в обработке смерти мобов получаем старое значение из мапы, инкрементим и заносим обратно. так же при достижении определенных значений счетчика вызываем проверку на бота. ну и уже опционально, если сильно так надо - писать значение этого счетчика в переменные перса в бд при выходе из игры, ну и восстанавливать обратно при входе в игру. Изменено 20 декабря, 2015 пользователем Gaikotsu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 21 декабря, 2015 (изменено) сделал через HashMap. Но возник вопрос синхронизации- если одновременно в него будут записывать он не заблокируется? Изменено 21 декабря, 2015 пользователем gawric Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mangol 101 Опубликовано 21 декабря, 2015 (изменено) В 21.12.2015 в 12:59, gawric сказал: сделал через HashMap. Но возник вопрос синхронизации- если одновременно в него будут записывать он не заблокируется? Если одновременно то можно получить ошибку. Чтобы этого не получить: ConcurrentHashMap используй для таких целей. Либо блокируй пока не запишет. Но лучше возьми сразу то что я описал выше. + не забывай что Мапки держат только 1 уникальный индефикатор, если туда всунуть опять такой же оно перезапишет значение. Можно сделать таким образом. private final Map<Integer,Integer> kills = new ConcurrentHashMap<>(); public void addKillMob(final int objId, final int count) { if(kills.containsKey(objId)) { int kill = kills.get(objId); kill += count; kills.replace(objId, kill); } else { kills.put(objId, count); } } Изменено 21 декабря, 2015 пользователем Mangol 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 21 декабря, 2015 В 21.12.2015 в 13:02, Mangol сказал: Если одновременно то можно получить ошибку. Чтобы этого не получить: ConcurrentHashMap используй для таких целей. Либо блокируй пока не запишет. Но лучше возьми сразу то что я описал выше. + не забывай что Мапки держат только 1 уникальный индефикатор, если туда всунуть опять такой же оно перезапишет значение. Можно сделать таким образом. private final Map<Integer,Integer> kills = new ConcurrentHashMap<>(); public void addKillMob(final int objId, final int count) { if(kills.containsKey(objId)) { int kill = kills.get(objId); kill += count; kills.replace(objId, kill); } else { kills.put(objId, count); } } спс сделал ConcurrentHashMap<> что-то подобное сегодня думал уже сделать. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты