Сообщений: 314
Тем: 32
Зарегистрирован: Mar 2010
Репутация:
2,207
03-20-2010, 10:49 AM
(Сообщение последний раз редактировалось: 03-20-2010, 12:05 PM Shema.)
Нужна помощь в 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 по базе (как должно быть).
Просто из-за незнания явы у меня не получается скрипт).
По этому принципу сейчас работает дроплист.
Сообщений: 6
Тем: 1
Зарегистрирован: Mar 2010
Репутация:
0
Shema Написал:Нужна помощь в 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 совершенно разные вещи.
Сообщений: 314
Тем: 32
Зарегистрирован: Mar 2010
Репутация:
2,207
Возможно)) Я просто не шарю.
Сейчас скрипт такой в сборке юник
C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\utils\stats
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.
А если прописать как я показал то получится правилное получение опыта.
Сообщений: 69
Тем: 0
Зарегистрирован: Mar 2010
Репутация:
70
хм, а зачем так извращаться если в npc_templates.xml каждому мобу давно вбит параметр maxXp ? Просто нужно вытащить его оттуда в формулу расчета получаемой экспы, и все... но я тоже в яве не "бумбум"
Сообщений: 314
Тем: 32
Зарегистрирован: Mar 2010
Репутация:
2,207
03-20-2010, 12:28 PM
(Сообщение последний раз редактировалось: 03-20-2010, 02:00 PM Shema.)
Можно посмотреть скрип который идет на получение лута. Там есть значение номер квеста. Вроде если написать что то подобное, то получится что нам нужно.
Если кто знает как написан он, скинте пути к ниму, возможно я сам поковыряю его и чет выйдет.))
Добавлено через 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',);
Подскажите как правильно указать путь на это значение. Тогда при разнице лвл будет работать старая формула и за убийство моба будут давать опыт по базе.
Сообщений: 69
Тем: 0
Зарегистрирован: Mar 2010
Репутация:
70
Зачем тебе через sql это делать, если все уже сделано, но не воткнуто в формулу?...
Сообщений: 314
Тем: 32
Зарегистрирован: Mar 2010
Репутация:
2,207
03-20-2010, 04:34 PM
(Сообщение последний раз редактировалось: 03-20-2010, 06:39 PM Shema.)
Тогда еще проще)). Нужно внести значение maxXp=" "
Добавлено через 2 часа 4 минуты
Вроде бы нашел это значение.C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\model\templates\stats
Файл maxXp() находится здесь, но вот как его привязать к формуле не знаю. Пишет что символ неизвестен.
Сообщений: 26
Тем: 5
Зарегистрирован: Mar 2010
Репутация:
40
А смысл есть этим заниматься? Возможно юники что то придумают.
Сообщений: 69
Тем: 0
Зарегистрирован: Mar 2010
Репутация:
70
есть смысл, если кто-то шарит в яве и может в формулу внести максэксп, потом скинуть уникам они проверят и внесут в свн... я пробовал сделать, но знаний в яве нехватает чтобы правильно написать. Формула вполне хорошая и простая есть..
Проблема то из первоочередных, имхо, поважнее всяких шопов, портов и прочих фенек...
Сообщений: 314
Тем: 32
Зарегистрирован: Mar 2010
Репутация:
2,207
Нашел значение maxXp. Указал путь к нему. Скомпелировалось нормально, но значение равно 0, что означает при убийстве моба не видет значение maxXp этого нпц. Подскажите какое значение еще нужно добавить которое бы указывало путь к выбраному мобу.
Сдесь мы видем что значение лвл меняется в отношении выбраного объекта int targetLevel = target.getLevel();.
Нужноли создовать еще класс для поеснения какой нп выбран?
import com.aionemu.gameserver.model.templates.stats.NpcStatsTemplate;
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);
}
|