03-26-2010, 05:36 PM (Сообщение последний раз редактировалось: 03-26-2010, 05:38 PM celler.)
Нет я ничего не менял, просто скопировал кусок с расчетом из файла, он чуть ниже того что ты написал в прошлом сообщении.
Если я правильно понял, то вначале идет описание откуда что берется, путь к sql и конкретному ИД моба, дроп которого будет расчитываться.
Тут "DropItem dropItem = new DropItem(dropTemplate);" показывается конкретный итем откуда берется.
Тут "dropItem.calculateCount(player.getRates().getDropRate());" сама формула с учетом рэйтов.
Ну и помимо этого куча всяких условий, по типам дропа...Может я что-то не так понял, особо не разбирался еще. Но поидее нужно написать условие ограничения как сделано с опытом, и вставить сюда. Но дл начала нужно разобраться что значат все тутошние параметры: типа dropRegistrationMap, dropItem, droppedItems, и как они связаны...
Добавлено через 2 минуты
droppedItems - наверное перечень всех итемов выпавших с моба, или вообще все итемы которые могут выпать...
DropItem - конкретный итем из числа итемов в droppedItems
03-26-2010, 05:55 PM (Сообщение последний раз редактировалось: 03-26-2010, 06:47 PM Shema.)
Скинь свой DropService.java. Я сравню. А то чет скрипты разные в нем. Не пойму.
Нашел старую ревизию и DropService.java такой же как у тебя, а в новой другой почему то, без определения квестовых вещей и в новой сборке квестовые предметы падают как простой дроп.
Только они чет ни то наковыряли
В старом была формула с квестовым дропом а в новой нет. вот он и сыпется. Я на всякие пожарные сохранил старый. Можно исправить если че. )
Есть скрипт /**
* When player clicks on dead NPC to request drop list
*
* @param player
* @param npcId
*/
public void requestDropList(Player player, int npcId)
{
if(player == null || !dropRegistrationMap.containsKey(npcId))
return;
PacketSendUtility.sendPacket(player, new SM_LOOT_ITEMLIST(npcId, dropItems, player));
// PacketSendUtility.sendPacket(player, new SM_LOOT_STATUS(npcId, size > 0 ? size - 1 : size));
PacketSendUtility.sendPacket(player, new SM_LOOT_STATUS(npcId, 2));
player.unsetState(CreatureState.ACTIVE);
player.setState(CreatureState.LOOTING);
PacketSendUtility.broadcastPacket(player, new SM_EMOTION(player, 35, 0, npcId), true);
// if dropitems is empty, resend droplist for close loot
if(dropItems.size() == 0)
resendDropList(player, npcId, dropItems);
}
Когда нажимаешь на мертвого моба появляется дроп лист.
Есть скрипт с разницей в лвл:
public enum DRRewardEnum
{
/**
* int DrFallout = DrRewardEnum.DrRewardFrom(targetLevel - playerLevel);
*
*/
throw new NoSuchElementException("DR reward for such level difference was not found");
}
}
Нужно его как то вписать в скрипт первый, что б он мог сравнивать. Если лвл игрока больше или меньше 5, то действие с открытием дроп листа не происходит, а если значения лвл равны, тем что в диапазоне, то происходит, что написано в первом скрипте. Тобишь открытие дроплиста. Помогите в правильном написание в ява.))