Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Drop штраф
#11
Нет я ничего не менял, просто скопировал кусок с расчетом из файла, он чуть ниже того что ты написал в прошлом сообщении.

Если я правильно понял, то вначале идет описание откуда что берется, путь к sql и конкретному ИД моба, дроп которого будет расчитываться.

Тут "DropItem dropItem = new DropItem(dropTemplate);" показывается конкретный итем откуда берется.

Тут "dropItem.calculateCount(player.getRates().getDropRate());" сама формула с учетом рэйтов.

Ну и помимо этого куча всяких условий, по типам дропа...Может я что-то не так понял, особо не разбирался еще. Но поидее нужно написать условие ограничения как сделано с опытом, и вставить сюда. Но дл начала нужно разобраться что значат все тутошние параметры: типа dropRegistrationMap, dropItem, droppedItems, и как они связаны...

Добавлено через 2 минуты
droppedItems - наверное перечень всех итемов выпавших с моба, или вообще все итемы которые могут выпать...

DropItem - конкретный итем из числа итемов в droppedItems

:confused:
Ответ
#12
Скинь свой DropService.java. Я сравню. А то чет скрипты разные в нем. Не пойму.


Нашел старую ревизию и DropService.java такой же как у тебя, а в новой другой почему то, без определения квестовых вещей и в новой сборке квестовые предметы падают как простой дроп.


Файлы вложений
.txt   DropService.txt (Размер: 8.24 KB / Загрузок: 2)
Ответ
#13
Все правильно, у меня ревизия старая...со вчерашнего дня раза 2 минимум ковыряли уники этот файлик)) Прийдется новый смотреть))
Ответ
#14
Только они чет ни то наковыряли
В старом была формула с квестовым дропом а в новой нет. вот он и сыпется. Я на всякие пожарные сохранил старый. Можно исправить если че. )
Ответ
#15
Есть скрипт /**
* 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;

DropNpc dropNpc = dropRegistrationMap.get(npcId);
if(!dropNpc.containsKey(player.getObjectId()))
{
PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_LOOT_NO_RIGHT());
return;
}

if(dropNpc.isBeingLooted())
{
PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_LOOT_FAIL_ONLOOTING());
return;
}

dropNpc.setBeingLooted(player.getObjectId());

Set<DropItem> dropItems = currentDropMap.get(npcId);

if(dropItems == null)
{
dropItems = Collections.emptySet();
}

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

MINUS_5(-5, 1),
MINUS_4(-4, 1),
MINUS_3(-3, 1),
MINUS_2(-2, 1),
MINUS_1(-1, 1),
ZERO(0, 1),
PLUS_1(1, 1),
PLUS_2(2, 1),
PLUS_3(3, 1),
PLUS_4(4, 1),
PLUS_5(5, 1);


private int drRewardOut;

private int levelDifference;

private DRRewardEnum(int levelDifference,int drRewardOut)

{
this.levelDifference = levelDifference;
this.drRewardOut = drRewardOut;

}

public int rewardOut()

{
return drRewardOut;
}


public static int drRewardFrom(int levelDifference)
{
if(levelDifference < MINUS_5.levelDifference)
{
return MINUS_5.drRewardOut;
}
if(levelDifference > PLUS_5.levelDifference)
{
return PLUS_5.drRewardOut;
}

for(DRRewardEnum drReward : values())
{
if(drReward.levelDifference == levelDifference)
{
return drReward.drRewardOut;
}
}

throw new NoSuchElementException("DR reward for such level difference was not found");
}
}
Нужно его как то вписать в скрипт первый, что б он мог сравнивать. Если лвл игрока больше или меньше 5, то действие с открытием дроп листа не происходит, а если значения лвл равны, тем что в диапазоне, то происходит, что написано в первом скрипте. Тобишь открытие дроплиста. Помогите в правильном написание в ява.))
Ответ
#16
Если кому нужно скрипт на дроп штраф:

Index: src/com/aionemu/gameserver/services/DropService.java

for(DropTemplate dropTemplate : templates)
{
DropItem dropItem = new DropItem(dropTemplate);
dropItem.calculateCount(player.getRates().getDropRate());

if(npc.getLevel()+5 > player.getLevel())
dropItem.calculateCount(player.getRates().getDropRate());
else
dropItem.calculateCount(0);

if(dropItem.getCount() > 0)
{
dropItem.setIndex(index++);
droppedItems.add(dropItem);
}
Патч исправлю и залью.)
Разницу в лвл можете писать какая нужна
Ответ
#17
Shema Написал:Если кому нужно скрипт на дроп штраф:

Index: src/com/aionemu/gameserver/services/DropService.java

for(DropTemplate dropTemplate : templates)
{
DropItem dropItem = new DropItem(dropTemplate);
dropItem.calculateCount(player.getRates().getDropRate());

if(npc.getLevel()+5 > player.getLevel())
dropItem.calculateCount(player.getRates().getDropRate());
else
dropItem.calculateCount(0);

if(dropItem.getCount() > 0)
{
dropItem.setIndex(index++);
droppedItems.add(dropItem);
}
Патч исправлю и залью.)
Разницу в лвл можете писать какая нужна

При компиляции выдает ошибки , выложи патчик плз.
Ответ
#18
Замени с 90 по 114 строки Index: src/com/aionemu/gameserver/services/DropService.java
И все заработает.

public void registerDrop(Npc npc, Player player)
{
int npcUniqueId = npc.getObjectId();
int npcTemplateId = npc.getObjectTemplate().getTemplateId();

Set<DropItem> droppedItems = new HashSet<DropItem>();
Set<DropTemplate> templates = dropList.getDropsFor(npcTemplateId);
int index = 1;
if(templates != null)
{
for(DropTemplate dropTemplate : templates)
{
DropItem dropItem = new DropItem(dropTemplate);
if(npc.getLevel()+5 > player.getLevel())
dropItem.calculateCount(player.getRates().getDropRate());
else
dropItem.calculateCount(0);

if(dropItem.getCount() > 0)
{
dropItem.setIndex(index++);
droppedItems.add(dropItem);
}

if(npc.getLevel()-5 < player.getLevel())
dropItem.calculateCount(player.getRates().getDropRate());
else
dropItem.calculateCount(0);

if(dropItem.getCount() < 0)
{
dropItem.setIndex(index++);
droppedItems.add(dropItem);
}
}
}

questService.getQuestDrop(droppedItems, index, npc, player);
currentDropMap.put(npcUniqueId, droppedItems);


Если чел на 5 лвл больше или меньше моба, то ему дроп не будет падать.


Файлы вложений
.zip   DropService.zip (Размер: 2.5 KB / Загрузок: 6)
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Drop & Spawn new rev. dahtict 112 30,822 04-15-2010, 12:48 AM
Последний пост: Devilop
  Штраф по лвл Shema 4 2,447 03-09-2010, 11:48 AM
Последний пост: Shema

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)