Nammi 147 Опубликовано 5 октября, 2017 Всем привет. У меня к тебе вопрос. Есть такое условие. i f (getStat().getLevel() < 20) { _recomLeft = 3; _recomHave--; } else if (getStat().getLevel() < 40) { _recomLeft = 6; _recomHave -= 2; } else { _recomLeft = 9; _recomHave -= 3; } if (_recomHave < 0) _recomHave = 0; Т.е. если персонаж до 20 уровня то у него всего 3 рекомендации. Если до 40 то у него 6 реков. А далее после 40 - 9 реков. Есть даже 2 вопроса. За что отвечает _recomHave ?Что оно значит я так и не понял. И еще вот такая фигня. Если я делаю так: if (getStat().getLevel() < 78) { _recomLeft = 1; _recomHave--; } else if (getStat().getLevel() < 79) { _recomLeft = 2; _recomHave -= 2; } else { _recomLeft = 3; _recomHave -= 3; } if (_recomHave < 0) _recomHave = 0; То выходит так что если я даю персу 78 лвл у него после релога появляется 1 рек. Если с 78 апаю его на 79 то после релога и даже рестарта сервера у него нет 2 реков хотя должно быть. Но если сразу апну с 0 на 79 то у него будет 2 река. В чем прикол не могу понять. 3 часа упорных занятий ничего не дало и ничего не поменяло. Буду очень благодарен за помощь и за то что ткнете носом на ошибку. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gvb 666 Опубликовано 5 октября, 2017 (изменено) Всем привет. У меня к тебе вопрос. Есть такое условие. i f (getStat().getLevel() < 20) { _recomLeft = 3; _recomHave--; } else if (getStat().getLevel() < 40) { _recomLeft = 6; _recomHave -= 2; } else { _recomLeft = 9; _recomHave -= 3; } if (_recomHave < 0) _recomHave = 0; Т.е. если персонаж до 20 уровня то у него всего 3 рекомендации. Если до 40 то у него 6 реков. А далее после 40 - 9 реков. Есть даже 2 вопроса. За что отвечает _recomHave ?Что оно значит я так и не понял. И еще вот такая фигня. Если я делаю так: if (getStat().getLevel() < 78) { _recomLeft = 1; _recomHave--; } else if (getStat().getLevel() < 79) { _recomLeft = 2; _recomHave -= 2; } else { _recomLeft = 3; _recomHave -= 3; } if (_recomHave < 0) _recomHave = 0; То выходит так что если я даю персу 78 лвл у него после релога появляется 1 рек. Если с 78 апаю его на 79 то после релога и даже рестарта сервера у него нет 2 реков хотя должно быть. Но если сразу апну с 0 на 79 то у него будет 2 река. В чем прикол не могу понять. 3 часа упорных занятий ничего не дало и ничего не поменяло. Буду очень благодарен за помощь и за то что ткнете носом на ошибку. _recomHave - Кол-во рекомендаций, полученных игроками _recomLeft - Кол-во рекомендаций, которых может дать игрок ### Есть такой класс где запускается таск на обновление чтобы понимать когда это дело обновится. public class TaskRecom extends Task { private static final Logger _log = Logger.getLogger(TaskRecom.class.getName()); private static final String NAME = "sp_recommendations"; /* (non-Javadoc) * @see ru.catssoftware.gameserver.taskmanager.Task#getName() */ @[member='override'] public String getName() { return NAME; } /* (non-Javadoc) * @see ru.catssoftware.gameserver.taskmanager.Task#onTimeElapsed(ru.catssoftware.gameserver.taskmanager.TaskManager.ExecutedTask) */ @[member='override'] public void onTimeElapsed(ExecutedTask task) { for (L2PcInstance player : L2World.getInstance().getAllPlayers()) { player.checkRecom(player.getRecomHave(), player.getRecomLeft()); // Вот тут срабатывает код который мы рассматриваем всем Pc(Игрокам) player.broadcastUserInfo(); } _log.info("Recommendation Global Task: launched."); } @[member='override'] public void initializate() { super.initializate(); TaskManager.addUniqueTask(NAME, TaskTypes.TYPE_GLOBAL_TASK, "1", "13:00:00", ""); } } ### if (getStat().getLevel() < 20) //Если игрок меньше 20 { _recomLeft = 3; //Даем 3 река _recomHave--; //Снимаем 1 рек } else if (getStat().getLevel() < 40) //Если меньше 40 но больше 20 { _recomLeft = 6; //Даем 6 реков _recomHave -= 2; //Снимаем 2 } else //В другом случае, а именно больше 40 лвл-а { _recomLeft = 9; //Даем 9 реков _recomHave -= 3; //Снимаем 3 } if (_recomHave < 0) //Если реков у персонажа полученных 0 или меньше _recomHave = 0; //Устанавливаем 0 В твоем случае if (getStat().getLevel() < 78) //Даем 1 и снимаем 1 если ты меньше 78 { _recomLeft = 1; _recomHave--; } else if (getStat().getLevel() < 79) //Даем 2 и снимаем 2 если ты меньше 79 { _recomLeft = 2; _recomHave -= 2; } else //В остальном даем 3 и снимаем 3 { _recomLeft = 3; _recomHave -= 3; } Изменено 5 октября, 2017 пользователем gvb 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 5 октября, 2017 ну как бы логично - ты же проверяешь во второй ветке на "меньше 79", а не "меньше или равно 79". правда непонятно тогда почему у тебя на 78 идет 1 рек, т.к. должна отработать вторая ветка и дать 2 река. хотя может просто отображается на единицу меньшее значение или где-то дальше еще уменьшается на 1. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gvb 666 Опубликовано 5 октября, 2017 (изменено) if (_lastRecomUpdate==0) //Если заходим первый раз то обновляем по тем условиям restartRecom(); else //Если уже заходил просто берет с базы значения { _recomHave = recsHave; _recomLeft = recsLeft; } Релог и рестарт не поможет Изменено 5 октября, 2017 пользователем gvb Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Nammi 147 Опубликовано 6 октября, 2017 (изменено) _recomHave - Кол-во рекомендаций, полученных игроками _recomLeft - Кол-во рекомендаций, которых может дать игрок ### Есть такой класс где запускается таск на обновление чтобы понимать когда это дело обновится. public class TaskRecom extends Task { private static final Logger _log = Logger.getLogger(TaskRecom.class.getName()); private static final String NAME = "sp_recommendations"; /* (non-Javadoc) * @see ru.catssoftware.gameserver.taskmanager.Task#getName() */ @[member='override'] public String getName() { return NAME; } /* (non-Javadoc) * @see ru.catssoftware.gameserver.taskmanager.Task#onTimeElapsed(ru.catssoftware.gameserver.taskmanager.TaskManager.ExecutedTask) */ @[member='override'] public void onTimeElapsed(ExecutedTask task) { for (L2PcInstance player : L2World.getInstance().getAllPlayers()) { player.checkRecom(player.getRecomHave(), player.getRecomLeft()); // Вот тут срабатывает код который мы рассматриваем всем Pc(Игрокам) player.broadcastUserInfo(); } _log.info("Recommendation Global Task: launched."); } @[member='override'] public void initializate() { super.initializate(); TaskManager.addUniqueTask(NAME, TaskTypes.TYPE_GLOBAL_TASK, "1", "13:00:00", ""); } } ### if (getStat().getLevel() < 20) //Если игрок меньше 20 { _recomLeft = 3; //Даем 3 река _recomHave--; //Снимаем 1 рек } else if (getStat().getLevel() < 40) //Если меньше 40 но больше 20 { _recomLeft = 6; //Даем 6 реков _recomHave -= 2; //Снимаем 2 } else //В другом случае, а именно больше 40 лвл-а { _recomLeft = 9; //Даем 9 реков _recomHave -= 3; //Снимаем 3 } if (_recomHave < 0) //Если реков у персонажа полученных 0 или меньше _recomHave = 0; //Устанавливаем 0 В твоем случае if (getStat().getLevel() < 78) //Даем 1 и снимаем 1 если ты меньше 78 { _recomLeft = 1; _recomHave--; } else if (getStat().getLevel() < 79) //Даем 2 и снимаем 2 если ты меньше 79 { _recomLeft = 2; _recomHave -= 2; } else //В остальном даем 3 и снимаем 3 { _recomLeft = 3; _recomHave -= 3; } Вот сделал так: if (getStat().getLevel() < 78) { _recomLeft = 1; _recomHave--; } else if (getStat().getLevel() < 79) { _recomLeft = 2; _recomHave -= 0; } else { _recomLeft = 3; _recomHave -= 0; } if (_recomHave < 0) _recomHave = 0; Значит на 80 должно давать 3 река верно? Я просто не совсем точно понимаю как данная система работает. Должна ли она сразу обновлять рекомендации или же только в 13 дня каждый день.. Вот что интересно.. Изменено 6 октября, 2017 пользователем Nammi Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Nammi 147 Опубликовано 6 октября, 2017 if (_lastRecomUpdate==0) //Если заходим первый раз то обновляем по тем условиям restartRecom(); else //Если уже заходил просто берет с базы значения { _recomHave = recsHave; _recomLeft = recsLeft; } Релог и рестарт не поможет Да и вот кроме таска еще такое нашел.. К чему оно надо? Calendar update = Calendar.getInstance(); if (update.get(Calendar.HOUR_OF_DAY) < 13) update.add(Calendar.DAY_OF_MONTH,-1); update.set(Calendar.HOUR_OF_DAY,13); _lastRecomUpdate = update.getTimeInMillis(); } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Nammi 147 Опубликовано 6 октября, 2017 В общем странно в таске поставил : TaskManager.addUniqueTask(NAME,TaskTypes.TYPE_GLOBAL_TASK, "1", "12:55:00", ""); Сделал релог в 12:55 ничего не изменилось реки не обновились. // If we have to update last update time, but it's now before 13, we should set it to yesterday Calendar update = Calendar.getInstance(); if (update.get(Calendar.HOUR_OF_DAY) < 13) update.add(Calendar.DAY_OF_MONTH,-1); update.set(Calendar.HOUR_OF_DAY,13); _lastRecomUpdate = update.getTimeInMillis(); И так же в 13 01 так же сделал релог тоже ничего не обновилось. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
EtoFiasko6PATAH 3 Опубликовано 6 октября, 2017 если кое что сделать(без софта) и потом просто когда меняешь саб будет начисляться по 9 реков везде работает но толку 0) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gvb 666 Опубликовано 6 октября, 2017 (изменено) Да и вот кроме таска еще такое нашел.. К чему оно надо? Calendar update = Calendar.getInstance(); if (update.get(Calendar.HOUR_OF_DAY) < 13) update.add(Calendar.DAY_OF_MONTH,-1); update.set(Calendar.HOUR_OF_DAY,13); _lastRecomUpdate = update.getTimeInMillis(); } Ну оно записывает в _lastRecomUpdate же. Выше я показывал как оно работает. Для чего это нужно? Для того чтобы условие (_lastRecomUpdate == 0) не срабатывало всегда, а только при первой загрузке, если у нас всегда будет 0, то при каждой загрузки Pc будет выдавать нам и снимать рекомендации. Разжевал уже все, там и понимать то нечего. если кое что сделать(без софта) и потом просто когда меняешь саб будет начисляться по 9 реков везде работает но толку 0) Если ты зашел в игру после создания персонажа, ты никак не попадешь на условие (_lastRecomUpdate == 0) И как не крути, все что ты будешь делать тебе не поможет для начисления реков Изменено 6 октября, 2017 пользователем gvb Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Nammi 147 Опубликовано 6 октября, 2017 Ну оно записывает в _lastRecomUpdate же. Выше я показывал как оно работает. Для чего это нужно? Для того чтобы условие (_lastRecomUpdate == 0) не срабатывало всегда, а только при первой загрузке, если у нас всегда будет 0, то при каждой загрузки Pc будет выдавать нам и снимать рекомендации. Разжевал уже все, там и понимать то нечего. Если ты зашел в игру после создания персонажа, ты никак не попадешь на условие (_lastRecomUpdate == 0) И как не крути, все что ты будешь делать тебе не поможет для начисления реков Так что сделать что бы они начислились не пойму...? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
EtoFiasko6PATAH 3 Опубликовано 6 октября, 2017 (изменено) Если ты зашел в игру после создания персонажа, ты никак не попадешь на условие (_lastRecomUpdate == 0) И как не крути, все что ты будешь делать тебе не поможет для начисления реков давай скажи мне сборку я сейчас найду сервер, зайду и сделаю. Изменено 6 октября, 2017 пользователем EtoFiasko6PATAH Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты