Java EXP
Нужна помощь в Java .
Я создал правильное получение exp с моба. Но нужно помощь в скрипте. Принцип прост. Создается дополнительная таблица : Database (C: \ gameserver \ data \ static_data \) файл EXP.sql В нем : EXP TABLE IF EXISTS `explist`; CREATE TABLE `explist` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `mobId` int(11) NOT NULL DEFAULT 0, `expId` int(11) NOT NULL DEFAULT 0, `lvlPlayer` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO droplist (mobId, expId, lvlPlayer,) VALUES -- START Ishalgen -- Highland Sparkle (210645,100,1,), (210645,100,2,), (210645,100,3,), (210645,90,4,), (210645,60,5,), (210645,50,6,), (210645,40,7,), (210645,30,8,), (210645,20,9,), (210645,10,10,), -- Wanderer Sprigg (210729,100,1,), (210729,100,2,), (210729,100,3,), (210729,90,4,), (210729,60,5,), (210729,50,6,), (210729,40,7,), (210729,30,8,), (210729,20,9,), (210729,10,10,), И нужно написать скирипт который ссылался б на нее при убийстве моба. if targetLevel = playerLevel goto (mobId, expId, lvlPlayer,) Тогда просто правильно заполнив таблицы, игрок сможет получать exp по базе (как должно быть). Просто из-за незнания явы у меня не получается скрипт). По этому принципу сейчас работает дроплист. |
Re: Java Scrip
Цитата:
|
Re: Java Scrip
Возможно)) Я просто не шарю.
Сейчас скрипт такой в сборке юник C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\utils\sta ts public static long calculateSoloExperienceReward(Player player, Creature target) { int playerLevel = player.getCommonData().getLevel(); int targetLevel = target.getLevel(); //TODO take baseXP from target object (additional attribute in stats template is needed) int baseXP = targetLevel * 80; int xpPercentage = XPRewardEnum.xpRewardFrom(targetLevel - playerLevel); return (int) Math.floor(baseXP * xpPercentage * player.getRates().getXpRate() / 100); } Он просто всем мобам присваивает * 80. И выходит что все мобы например 10 лвл дают одинаково exp. А если прописать как я показал то получится правилное получение опыта. |
Re: Java EXP
хм, а зачем так извращаться если в npc_templates.xml каждому мобу давно вбит параметр maxXp ? Просто нужно вытащить его оттуда в формулу расчета получаемой экспы, и все... но я тоже в яве не "бумбум" :(
|
Re: Java EXP
Можно посмотреть скрип который идет на получение лута. Там есть значение номер квеста. Вроде если написать что то подобное, то получится что нам нужно.
Если кто знает как написан он, скинте пути к ниму, возможно я сам поковыряю его и чет выйдет.)) Добавлено через 1 час 17 минут Можно сделать проще : C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\utils\sta ts public static long calculateSoloExperienceReward(Player player, Creature target) { int playerLevel = player.getCommonData().getLevel(); int targetLevel = target.getLevel(); //TODO take baseXP from target object (additional attribute in stats template is needed) int baseXP = targetLevel * 80; int xpPercentage = XPRewardEnum.xpRewardFrom(targetLevel - playerLevel); return (int) Math.floor(baseXP * xpPercentage * player.getRates().getXpRate() / 100); } В строке int baseXP = targetLevel * 80; значение "targetLevel * 80" нужно заменить на `exp` параметр который можно будет добавить в дроплист. DROP TABLE IF EXISTS `droplist`; CREATE TABLE `droplist` ( `Id` int(11) NOT NULL auto_increment, `mobId` int(11) NOT NULL default '0', `itemId` int(11) NOT NULL default '0', `min` int(11) NOT NULL default '0', `max` int(11) NOT NULL default '0', `chance` float NOT NULL default '0', `quest` int(11) NOT NULL default '0', `exp` int(11) NOT NULL default '0', PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of droplist -- ---------------------------- INSERT INTO `droplist` VALUES ('260175', '210372', '167000230', '1', '1', '0.63', '0', '111',); Подскажите как правильно указать путь на это значение. Тогда при разнице лвл будет работать старая формула и за убийство моба будут давать опыт по базе. |
Re: Java EXP
Зачем тебе через sql это делать, если все уже сделано, но не воткнуто в формулу?...
|
Re: Java EXP
Тогда еще проще)). Нужно внести значение maxXp=" "
Добавлено через 2 часа 4 минуты Вроде бы нашел это значение.C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\model\tem plates\stats Файл maxXp() находится здесь, но вот как его привязать к формуле не знаю. Пишет что символ неизвестен. |
Re: Java EXP
А смысл есть этим заниматься? Возможно юники что то придумают.
|
Re: Java EXP
есть смысл, если кто-то шарит в яве и может в формулу внести максэксп, потом скинуть уникам они проверят и внесут в свн... я пробовал сделать, но знаний в яве нехватает чтобы правильно написать. Формула вполне хорошая и простая есть..
Проблема то из первоочередных, имхо, поважнее всяких шопов, портов и прочих фенек... |
Re: Java EXP
Нашел значение maxXp. Указал путь к нему. Скомпелировалось нормально, но значение равно 0, что означает при убийстве моба не видет значение maxXp этого нпц. Подскажите какое значение еще нужно добавить которое бы указывало путь к выбраному мобу.
Сдесь мы видем что значение лвл меняется в отношении выбраного объекта int targetLevel = target.getLevel();. Нужноли создовать еще класс для поеснения какой нп выбран? import com.aionemu.gameserver.model.templates.stats.NpcSt atsTemplate; public class StatFunctions { private static Logger log = Logger.getLogger(StatFunctions.class); /** * * @param player * @param target * @return XP reward from target */ public static long calculateSoloExperienceReward(Player player, Creature target) { NpcStatsTemplate E = new NpcStatsTemplate (); int playerLevel = player.getCommonData().getLevel(); int targetLevel = target.getLevel(); //TODO take baseXP from target object (additional attribute in stats template is needed) int baseXP = E.getMaxXp(); int xpPercentage = XPRewardEnum.xpRewardFrom(targetLevel - playerLevel); return (int) Math.floor(baseXP * xpPercentage * player.getRates().getXpRate() / 100); } |
Re: Java EXP
На этом форуме нет ни кого кто бы шарил в яве.))) Все тырят у юника и здесь размещают. Так что те нуно на юнике раздувать эту тему, тогда будет толк. ))
|
Re: Java EXP
Ребята! Осталось совсем чуть чуть. Нужен коллективный мозг. )) Всеволишь надо понять как присвоить значение target к maxXp.
Ведь target.getLevel() работает в формуле и значение присваивается лвл мобу правильный как по базе. Просто когда я ввожу target.maxXp(), то пишет неизвестный символ maxXp(). Возможно ошибка в соединении с npc_templates.xml и maxXp() просто не видит тех значений которые там указаны. Когда ввожу так: public static long calculateSoloExperienceReward(Player player, Creature target) { NpcStatsTemplate E = new NpcStatsTemplate (); int playerLevel = player.getCommonData().getLevel(); int targetLevel = target.getLevel(); //TODO take baseXP from target object (additional attribute in stats template is needed) int baseXP = E.getMaxXp(); int xpPercentage = XPRewardEnum.xpRewardFrom(targetLevel - playerLevel); return (int) Math.floor(baseXP * xpPercentage * player.getRates().getXpRate() / 100); } То опыт равен 0. Так как он не видит числа maxXp() |
Re: Java EXP
Цитата:
|
Re: Java EXP
Для того чтобы во всем этом разобраться нужно разобрать иерархию классов эмулятора. Кода столько, что чёрт ногу сломит %) Пытаюсь всё это разобрать - мозг уходит в перезагрузку.
|
Re: Java EXP
Нужна помощь в написание правильного скрипта.
Он должен находиться сдесь: C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\utils\sta ts Название например NpcXp.java В нем нужно указать что то вроде: public int getmaxXp() { return getObjectTemplate().getMaxXp(); } После этого в C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\utils\sta ts В файле StatFunctions.java нужно заменить int baseXP = targetLevel*80 на int baseXP = targetLevel.getmaxXp(); Ну еще и прописать путь к файлу. и поидее все заработает. ))) Так просто прописан скрипт определения лвл для мобов у юников. |
Re: Java EXP
Щас попробую методом проб и ошибок)))
Добавлено через 34 минуты Смотри, вот тут вроде вписан максэксп, или это не то? src\com\aionemu\gameserver\model\templates\stats NpcStatsTemplate.java Добавлено через 37 минут Или может сюда нужно добавить параметр максэксп? AE-go_GameServer\src\com\aionemu\gameserver\model\tem plates NpcTemplate.java |
Re: Java EXP
Смотри. Параметр максХп он видит, он не видит для кого это значение.
Юники прописали для лвл отдельно скрипт, что б при нажатие на моба определялся его лвл , который можно было умножить на 80. Что на данный момент и происходит. Сейчас нужно просто добавить скрипт который определял принадлежность максХп к мобу и тогда все будет ок. |
Re: Java EXP
Хм, а где ты скрипт на определение лвл моба нашел?
target.getLevel() и targetLevel только в StatFunctions.java присутствуют и больше нигде.. |
Re: Java EXP
public byte getLevel()
{ return getObjectTemplate().getLevel(); } находится он тут C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\model\gam eobjects\npc |
Re: Java EXP
Сделаю одно - выдает ошибку в другом, поправлю другое - ошибку в третьем... башка взрывается уже))
|
Re: Java EXP
Посоветовали здесь добавить скрипт для определения моба с его хпр
C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\controlle rs\MonsterController.java Я только не понял как там getOwner() присвоилось к мобу. Мозг летит в топку но чувствую конец близок)) Ща разберусь с этим скриптом только public void doReward(Creature creature) { super.doReward(creature); if(creature instanceof Player) { Player player = (Player) creature; if(player.getPlayerGroup() == null) //solo { long xpReward = StatFunctions.calculateSoloExperienceReward(player , getOwner()); player.getCommonData().addExp(xpReward); Такое ощущение что приехал в Китай и пытаюсь написать стихотворение на их языке. ))) |
Re: Java EXP
Вобщем фигня какая-то. Экспа прописана в NpcStatsTemplate.java,
тут "public static long calculateSoloExperienceReward(Player player, Creature target)" как я понял идет проверка intов в соответствии с файлами "player" и "Creature" остается понять как правильно из NpcStatsTemplate.java выдернуть макс эксп и описать ее чтобы ява поняла... Добавлено через 1 час 1 минуту Написал так: Цитата:
Поидее если скомпилится, то должно заработать... |
Re: Java EXP
Не NPC а Creature...
Добавлено через 32 секунды Т.е. ((Creature) target).getObjectTemplate().getStatsTemplate().get MaxXp() |
Re: Java EXP
Нужно правильно указать класс с символами, а то он просто ни видит этих символов и выдает ошибку.
Нужно в этом классе прописать значение класса NpcStatsTempletes и его внутренней переменной getMaxXp(), тогда все заработает. Я просто не знаю как синтаксически правильно написать это. Кто в яве шарит, то смогут быстро это сделать. На серверах ,где вобло зарабатываю это уже исправили(( Я просил что б дали скрипт, мне сказали 300 у.е. (( жлобы. |
Re: Java EXP
Ну вобщем в StatFunctions чуть ниже есть формулы расчета ДП, там указывается ранк моба. Делаю аналогично для экспы, и вот ошибку с этой скобкой выдает((
Щас проверю еще одну мысль, может получится.. Добавлено через 3 часа 3 минуты Вот же я тупил ппц)) Вобщем мозговой штурм увенчался окончательной победой)) Делаем так, и наслаждаемся: public static long calculateSoloExperienceReward(Player player, Creature target) { int playerLevel = player.getCommonData().getLevel(); int targetLevel = target.getLevel(); int maxXp = ((Npc) target).getObjectTemplate().getStatsTemplate().get MaxXp(); //TODO take baseXP from target object (additional attribute in stats template is needed) int baseXP = maxXp; int xpPercentage = XPRewardEnum.xpRewardFrom(targetLevel - playerLevel); return (int) Math.floor(baseXP * xpPercentage * player.getRates().getXpRate() / 100); } |
Re: Java EXP
Молодца. Респект и уважуха.
Теперь нужно мозг добить со штрафом на дроп по лвл и вооще супер будет. Там формулу можно взять их по процентам на разницу лвл. Как всегда просто добавть строку в получении дропа. )))) |
Re: Java EXP
Shema, celler, у вас это компилируется?
|
Re: Java EXP
У меня нет...
|
Re: Java EXP
Вложений: 1
Все работает. Поменяйте файл перед компиляцией.
C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\utils\sta ts |
Re: Java EXP
Для пати нужно прописать другую формулу. Где
int baseXP = maxXp нужно умножить или поделить (кому как нравится) на количество игроков в пати; Но где определение количества членов в группе я ни нашел. Если кто знает киньте путь. И тогда будет правильное распределение экспы. |
Re: Java EXP
Да там вообще нужно поковырять штрафы, а то я так мельком проверил. Если перс меньше моба на 5лвл, то дается на 20% больше базовой экспы. Если моб меньше на 5лвл, то дается на 50% меньше базового значения... Для пати формулу не смотрел, тамже вроде работало распределение опыта, нужно только узнать какой коэффициент понижения получаемого опыта от моба в пати на офе, и вставить его в расчет.
Также вроде у всей элитки прописано неверное кол-во максэксп, ресурса на котором можно былобы его узнать я так и не нашел, если у кого-то есть линки то поделитесь) Можн оконечно прописать в 5-8 раз больше опыта чем с обычного моба, но хотелосьбы точные значения знать.. |
Re: Java EXP
Вложений: 1
Я добавил количество % за разницу в лвл и в пати умножил 0.8 каждому опыт. Теперь если в пати 10 лвл и 20 лвл и они бьют моба с 11 лвл(опыт с него например 400), то 10лвл получит 336 опыта , а 20 лвл 32 опыта.
Пользуйтесь и наслаждайтесь. )) Теперь штарф на дроп сделать и супер будет.)) |
Re: Java EXP
Млин не обратил внимание что там стоит "double" в расчете опыта на группу)) тогда все довольно просто. Спасибо)
|
Re: Java EXP
Выражаю огромную признательность celler и Shema!
Не зная языка написать это...Вы, товарищи, образцы для пословицы "Терпенье и труд всё перетрут" :) |
Re: Java EXP
А что там писать то, одна строчка) Зато теперь представляю как правильно пути к нужным данным на яве пишутся)
Добавлено через 20 часов 17 минут Никто незнает базы гдебы указывалось кол-во экспы получаемой с элитки? решил поисправлять сам, а то там фигню дают, а точной информации нигде нету... Знаю что примерно раз в 6-7 должны давать больше чем с простых мобов... |
Re: Java EXP
Блин всеравно есть косяк... Опыт на пати должен делиться, это правильно. но если мы описываем так:
double baseXP = maxXp * 0.8; - то каждый член пати получает по 80% от максэксп моба. Всебы хорошо, но если персонаж в пати и члены пати находятся далеко, то он всеравно получает 80% экспы. Также у нас неполучается зависимости от лвлов персонажей в пати, все сводится к щтрафу за разницу в лвле с мобом каждого из персонажей...что не есть хорошо. Если пишем например так: int baseXP = maxXp * 8 / 5; - То общее кол-во опыта получаемое патей с каждого моба будет на 60% больше, при этом опыт получаемый каждым членом пати будет равно "baseXP/(количество членов пати)", и будет зависеть от лвл персонажей (если все лвл в пати равны - то опыта всем поровну, если лвл больше - то ему больше опыта, а тому кто меньше лвл - меньше опыта). При этом если персонаж находясь в пати находится один - то он получает опыта с каждого моба больше на 60%... Все это тоже косяк.. Вобщем второй вариант более корректен, но нужно придумать как сделать чтобы: 1) Получаемое на пати количество опыта, увеличивалось пропорционально кол-ву членов пати, например с каждым новым членом +30-40%. 2) При этом сделать так, чтобы при выходе за радиус распределения опыта в пати, персонаж получал опыта столькоже сколько получалбы соло. Еще я начал править максэксп элитки, но не располагаю точными источниками инфы, во всех известных базах опыт с элитных мобов не указан. Если знаете базу в которой опыт с элитки указан, то поделитесь линком плз.. |
Re: Java EXP
Нужно написать формулу , что если 2 человека в группе , то / на 2, если 3 то на 3 и т.д. до 5.
При этом добавить радиус агра моба для пати, если ктото выходит за его приделы , то опыт не получает. Я ща с дропом разберусь и попробую формулу написать. |
Re: Java EXP
Там похоже не так все просто, есть например файлик GroupService.java, там расчеты относительно распределения опыта, если не ошибаюсь... и чета даже ума не приложу как описать увеличение базового кол-ва экспы к увеличению кол-ва членов пати..
|
Re: Java EXP
Вложений: 1
Вот, может кому нужно) Фикс на опыт в пати.
|
Текущее время: 12:36. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot