Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Серверная часть (https://forum.zone-game.info/forumdisplay.php?f=148)
-   -   Java EXP (https://forum.zone-game.info/showthread.php?t=7105)

Shema 20.03.2010 10:49

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 по базе (как должно быть).
Просто из-за незнания явы у меня не получается скрипт).

По этому принципу сейчас работает дроплист.

stpavel 20.03.2010 11:37

Re: Java Scrip
 
Цитата:

Сообщение от Shema (Сообщение 59996)
Нужна помощь в Java Scrip.
Я создал правильное получение 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 по базе (как должно быть).
Просто из-за незнания явы у меня не получается скрипт).

По этому принципу сейчас работает дроплист.

Вы наверное имели ввиду java ? java и java script совершенно разные вещи.

Shema 20.03.2010 11:42

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.
А если прописать как я показал то получится правилное получение опыта.

celler 20.03.2010 12:26

Re: Java EXP
 
хм, а зачем так извращаться если в npc_templates.xml каждому мобу давно вбит параметр maxXp ? Просто нужно вытащить его оттуда в формулу расчета получаемой экспы, и все... но я тоже в яве не "бумбум" :(

Shema 20.03.2010 12:28

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',);

Подскажите как правильно указать путь на это значение. Тогда при разнице лвл будет работать старая формула и за убийство моба будут давать опыт по базе.

celler 20.03.2010 14:38

Re: Java EXP
 
Зачем тебе через sql это делать, если все уже сделано, но не воткнуто в формулу?...

Shema 20.03.2010 16:34

Re: Java EXP
 
Тогда еще проще)). Нужно внести значение maxXp=" "

Добавлено через 2 часа 4 минуты
Вроде бы нашел это значение.C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\model\tem plates\stats

Файл maxXp() находится здесь, но вот как его привязать к формуле не знаю. Пишет что символ неизвестен.

DIIZ 20.03.2010 20:25

Re: Java EXP
 
А смысл есть этим заниматься? Возможно юники что то придумают.

celler 20.03.2010 21:56

Re: Java EXP
 
есть смысл, если кто-то шарит в яве и может в формулу внести максэксп, потом скинуть уникам они проверят и внесут в свн... я пробовал сделать, но знаний в яве нехватает чтобы правильно написать. Формула вполне хорошая и простая есть..

Проблема то из первоочередных, имхо, поважнее всяких шопов, портов и прочих фенек...

Shema 21.03.2010 09:45

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);
}

DIIZ 21.03.2010 12:08

Re: Java EXP
 
На этом форуме нет ни кого кто бы шарил в яве.))) Все тырят у юника и здесь размещают. Так что те нуно на юнике раздувать эту тему, тогда будет толк. ))

Shema 21.03.2010 12:38

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()

celler 21.03.2010 13:23

Re: Java EXP
 
Цитата:

Сообщение от Shema (Сообщение 60157)
/**
*
* @param player
* @param target
* @return XP reward from target
*/

Может нужно еще тут параметр максэксп указать как-то...вроде должно быть что-то вроде targetMaxXp, и в формуле target.getMaxXP() А может и нет, непонимаю в яве и всетут(

ViAl 21.03.2010 19:00

Re: Java EXP
 
Для того чтобы во всем этом разобраться нужно разобрать иерархию классов эмулятора. Кода столько, что чёрт ногу сломит %) Пытаюсь всё это разобрать - мозг уходит в перезагрузку.

Shema 23.03.2010 12:56

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();
Ну еще и прописать путь к файлу.
и поидее все заработает. )))

Так просто прописан скрипт определения лвл для мобов у юников.

celler 23.03.2010 13:56

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

Shema 23.03.2010 16:10

Re: Java EXP
 
Смотри. Параметр максХп он видит, он не видит для кого это значение.
Юники прописали для лвл отдельно скрипт, что б при нажатие на моба определялся его лвл , который можно было умножить на 80. Что на данный момент и происходит. Сейчас нужно просто добавить скрипт который определял принадлежность максХп к мобу и тогда все будет ок.

celler 23.03.2010 16:56

Re: Java EXP
 
Хм, а где ты скрипт на определение лвл моба нашел?

target.getLevel() и targetLevel только в StatFunctions.java присутствуют и больше нигде..

Shema 23.03.2010 16:59

Re: Java EXP
 
public byte getLevel()
{
return getObjectTemplate().getLevel();
}

находится он тут C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\model\gam eobjects\npc

celler 23.03.2010 19:55

Re: Java EXP
 
Сделаю одно - выдает ошибку в другом, поправлю другое - ошибку в третьем... башка взрывается уже))

Shema 23.03.2010 21:15

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);

Такое ощущение что приехал в Китай и пытаюсь написать стихотворение на их языке. )))

celler 24.03.2010 14:31

Re: Java EXP
 
Вобщем фигня какая-то. Экспа прописана в NpcStatsTemplate.java,

тут "public static long calculateSoloExperienceReward(Player player, Creature target)" как я понял идет проверка intов в соответствии с файлами "player" и "Creature"

остается понять как правильно из NpcStatsTemplate.java выдернуть макс эксп и описать ее чтобы ява поняла...

Добавлено через 1 час 1 минуту
Написал так:
Цитата:

public static long calculateSoloExperienceReward(Player player, Creature target)
{
int playerLevel = player.getCommonData().getLevel();
int targetLevel = target.getLevel();
NpcStatsTemplate maxXp = ((Npc) target).getObjectTemplate().getStatsTemplate().get MaxXp();
при компиляции тыкает на ошибку вот в этйо скобке NpcStatsTemplate maxXp = ((Npc) target).getObjectTemplate().getStatsTemplate().get MaxXp()

Поидее если скомпилится, то должно заработать...

zaqwer 24.03.2010 16:27

Re: Java EXP
 
Не NPC а Creature...

Добавлено через 32 секунды
Т.е. ((Creature) target).getObjectTemplate().getStatsTemplate().get MaxXp()

Shema 24.03.2010 17:05

Re: Java EXP
 
Нужно правильно указать класс с символами, а то он просто ни видит этих символов и выдает ошибку.
Нужно в этом классе прописать значение класса NpcStatsTempletes и его внутренней переменной getMaxXp(), тогда все заработает.
Я просто не знаю как синтаксически правильно написать это. Кто в яве шарит, то смогут быстро это сделать. На серверах ,где вобло зарабатываю это уже исправили(( Я просил что б дали скрипт, мне сказали 300 у.е. (( жлобы.

celler 24.03.2010 17:10

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);
}

Shema 24.03.2010 22:01

Re: Java EXP
 
Молодца. Респект и уважуха.

Теперь нужно мозг добить со штрафом на дроп по лвл и вооще супер будет.

Там формулу можно взять их по процентам на разницу лвл. Как всегда просто добавть строку в получении дропа. ))))

ViAl 25.03.2010 09:09

Re: Java EXP
 
Shema, celler, у вас это компилируется?

zaqwer 25.03.2010 09:36

Re: Java EXP
 
У меня нет...

Shema 25.03.2010 09:59

Re: Java EXP
 
Вложений: 1
Все работает. Поменяйте файл перед компиляцией.
C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\utils\sta ts

Shema 25.03.2010 13:51

Re: Java EXP
 
Для пати нужно прописать другую формулу. Где
int baseXP = maxXp нужно умножить или поделить (кому как нравится) на количество игроков в пати;
Но где определение количества членов в группе я ни нашел. Если кто знает киньте путь.
И тогда будет правильное распределение экспы.

celler 25.03.2010 14:09

Re: Java EXP
 
Да там вообще нужно поковырять штрафы, а то я так мельком проверил. Если перс меньше моба на 5лвл, то дается на 20% больше базовой экспы. Если моб меньше на 5лвл, то дается на 50% меньше базового значения... Для пати формулу не смотрел, тамже вроде работало распределение опыта, нужно только узнать какой коэффициент понижения получаемого опыта от моба в пати на офе, и вставить его в расчет.

Также вроде у всей элитки прописано неверное кол-во максэксп, ресурса на котором можно былобы его узнать я так и не нашел, если у кого-то есть линки то поделитесь) Можн оконечно прописать в 5-8 раз больше опыта чем с обычного моба, но хотелосьбы точные значения знать..

Shema 25.03.2010 15:14

Re: Java EXP
 
Вложений: 1
Я добавил количество % за разницу в лвл и в пати умножил 0.8 каждому опыт. Теперь если в пати 10 лвл и 20 лвл и они бьют моба с 11 лвл(опыт с него например 400), то 10лвл получит 336 опыта , а 20 лвл 32 опыта.

Пользуйтесь и наслаждайтесь. )) Теперь штарф на дроп сделать и супер будет.))

celler 25.03.2010 15:36

Re: Java EXP
 
Млин не обратил внимание что там стоит "double" в расчете опыта на группу)) тогда все довольно просто. Спасибо)

ViAl 26.03.2010 08:21

Re: Java EXP
 
Выражаю огромную признательность celler и Shema!
Не зная языка написать это...Вы, товарищи, образцы для пословицы "Терпенье и труд всё перетрут" :)

celler 26.03.2010 13:58

Re: Java EXP
 
А что там писать то, одна строчка) Зато теперь представляю как правильно пути к нужным данным на яве пишутся)

Добавлено через 20 часов 17 минут
Никто незнает базы гдебы указывалось кол-во экспы получаемой с элитки? решил поисправлять сам, а то там фигню дают, а точной информации нигде нету... Знаю что примерно раз в 6-7 должны давать больше чем с простых мобов...

celler 27.03.2010 19:54

Re: Java EXP
 
Блин всеравно есть косяк... Опыт на пати должен делиться, это правильно. но если мы описываем так:

double baseXP = maxXp * 0.8; - то каждый член пати получает по 80% от максэксп моба. Всебы хорошо, но если персонаж в пати и члены пати находятся далеко, то он всеравно получает 80% экспы. Также у нас неполучается зависимости от лвлов персонажей в пати, все сводится к щтрафу за разницу в лвле с мобом каждого из персонажей...что не есть хорошо.

Если пишем например так:

int baseXP = maxXp * 8 / 5; - То общее кол-во опыта получаемое патей с каждого моба будет на 60% больше, при этом опыт получаемый каждым членом пати будет равно "baseXP/(количество членов пати)", и будет зависеть от лвл персонажей (если все лвл в пати равны - то опыта всем поровну, если лвл больше - то ему больше опыта, а тому кто меньше лвл - меньше опыта). При этом если персонаж находясь в пати находится один - то он получает опыта с каждого моба больше на 60%... Все это тоже косяк..

Вобщем второй вариант более корректен, но нужно придумать как сделать чтобы:
1) Получаемое на пати количество опыта, увеличивалось пропорционально кол-ву членов пати, например с каждым новым членом +30-40%.

2) При этом сделать так, чтобы при выходе за радиус распределения опыта в пати, персонаж получал опыта столькоже сколько получалбы соло.


Еще я начал править максэксп элитки, но не располагаю точными источниками инфы, во всех известных базах опыт с элитных мобов не указан. Если знаете базу в которой опыт с элитки указан, то поделитесь линком плз..

Shema 27.03.2010 20:09

Re: Java EXP
 
Нужно написать формулу , что если 2 человека в группе , то / на 2, если 3 то на 3 и т.д. до 5.
При этом добавить радиус агра моба для пати, если ктото выходит за его приделы , то опыт не получает. Я ща с дропом разберусь и попробую формулу написать.

celler 27.03.2010 20:49

Re: Java EXP
 
Там похоже не так все просто, есть например файлик GroupService.java, там расчеты относительно распределения опыта, если не ошибаюсь... и чета даже ума не приложу как описать увеличение базового кол-ва экспы к увеличению кол-ва членов пати..

celler 07.04.2010 02:05

Re: Java EXP
 
Вложений: 1
Вот, может кому нужно) Фикс на опыт в пати.


Текущее время: 12:36. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot