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

Форум администраторов игровых серверов (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);
}


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

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