Drop штраф - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Aion > Серверная часть

Важная информация

Серверная часть Обсуждения вопросов по установке и настройке эмулятора Aion-Emu, для совершенно новой и необыкновенно красивой игры - Aion.

Ответ
Опции темы
Непрочитано 19.03.2010, 19:33   #1
Аватар для Shema
Герой

Автор темы (Топик Стартер) Drop штраф

Сейчас пытаюсь написать скрип по поводу штрафа на лут. Например если ты 10 лвл то с моба 1 лвл ни чего не падает. А если 5 лвл то по 50% то % выпадания по базе.
Скрипт похож на штраф exp по лвл. Если кто то уже подобное делал, подскажите плиз.
Shema вне форума Ответить с цитированием
Непрочитано 25.03.2010, 10:59   #2
Аватар для Shema
Герой

Автор темы (Топик Стартер) Re: Drop штраф

Скрипт пишу без % соотношения. Просто если лвл < -5лвл или лвл >5лвл, то значение будет равно , например 1
Скипт размещаю здесь:
C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\utils\sta ts
название DPRewardEnum.java


package com.aionemu.gameserver.utils.stats;

import java.util.NoSuchElementException;

/**
*
*/


public enum DPRewardEnum

/**
* int DpFallout = DpRewardEnum.DpRewardFrom(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 dpRewardOut;

private int levelDifference;

private DPRewardEnum(int levelDifference,int dpRewardOut)

{
this.levelDifference = levelDifference;
this.dpRewardOut = dpRewardOut;

}

public int rewardOut()

{
return dpRewardOut;
}


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

for(DPRewardEnum dpReward : values())
{
if(dpReward.levelDifference == levelDifference)
{
return dpReward.dpRewardOut;
}
}

throw new NoSuchElementException("DP reward for such level difference was not found");
}
}

Добавлено через 2 минуты
Нужно вписать строку :
int DpFallout = DPRewardEnum.dpRewardFrom(targetLevel - playerLevel);

Возможно ее указать просто в скрипте StatFunctions.java
например здесь :
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 DpFallout = DpRewardEnum.DpRewardFrom(targetLevel - playerLevel);


int xpPercentage = XPRewardEnum.xpRewardFrom(targetLevel - playerLevel);

return (int) Math.floor(baseXP * xpPercentage * player.getRates().getXpRate() / 100);
}

Добавлено через 6 минут
Теперь в MonsterController.java
C:\ae-go\AE-go_GameServer\src\com\aionemu\gameserver\controlle rs

Нужно указать, что если разница лвл игрока = разница лвл моба, то дроп падет. ))
Вот здесь я и загруз, как это сделать. )))

Последний раз редактировалось Shema; 25.03.2010 в 11:55. Причина: Добавлено сообщение
Shema вне форума Ответить с цитированием
Непрочитано 25.03.2010, 11:09   #3
Аватар для zaqwer
Пользователь

По умолчанию Re: Drop штраф

У меня последняя сборка. Я 50 моб 3, ни фига не падает, а если ты 3 то полный дроп. На фиг заново велосипед изобретать?
zaqwer вне форума Ответить с цитированием
Непрочитано 25.03.2010, 11:11   #4
Аватар для Shema
Герой

Автор темы (Топик Стартер) Re: Drop штраф

У меня сборка 1674, последняя. Все падет, Я 50 лвл бью моба 9 лвл и мне падет грин шмот. Ни то. Ты просто не тех бьешь. Штаф нужен обязательно что б меньше фармили хаи на мелких.

Добавлено через 6 часов 2 минуты
Кто то знает к какому значению можно при ровнять int DpFallout, что б если лвл человека меньше или больше 5, то лут ни падает.

public class MonsterController extends NpcController
{
@Override
public void doDrop(Player player)
{
super.doDrop(player);

sp.getDropService().registerDrop(getOwner() , player);
PacketSendUtility.broadcastPacket(this.getOwner(), new SM_LOOT_STATUS(this.getOwner().getObjectId(), 0));
}

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

//DPreward
int currentDp = player.getCommonData().getDp();
int dpReward = StatFunctions.calculateSoloDPReward(player, getOwner());
player.getCommonData().setDp(dpReward + currentDp);
//AP reward in abyss basic
if(player.getWorldId() == WorldMapType.RESHANTA.getId())
sp.getAbyssService().doReward(getOwner(), player);
sp.getQuestEngine().onKill(new QuestEnv(getOwner(), player, 0 , 0));
}
else
{
sp.getGroupService().doReward(player.getPlayerGrou p(), getOwner());
}
}
}

@Override
public void onRespawn()
{
super.onRespawn();
sp.getDropService().unregisterDrop(getOwner());
}

@Override
public Monster getOwner()
{
return (Monster) super.getOwner();
}
}

Последний раз редактировалось Shema; 25.03.2010 в 17:13. Причина: Добавлено сообщение
Shema вне форума Ответить с цитированием
Непрочитано 26.03.2010, 14:49   #5
Пользователь

По умолчанию Re: Drop штраф

все непойму, причем тут DP?
celler вне форума Ответить с цитированием
Непрочитано 26.03.2010, 14:52   #6
Аватар для Shema
Герой

Автор темы (Топик Стартер) Re: Drop штраф

DP это я в сокращении написал Drop, можно и по другому написать.)

Я тут думал возможно просто написать, что если разница лвл игрока совпадает с с диапазоном разницы по лвл моба, то дроп падает, а если нет то ни чего не происходит.
Возможно просто ссылку прописать в формуле на MonsterController.java, что если действие правильное то то процесс работает, если нет то финиш.
Shema вне форума Ответить с цитированием
Непрочитано 26.03.2010, 14:57   #7
Пользователь

По умолчанию Re: Drop штраф

DP это энергия для некоторых скиллов, полоска которой находится под маной.

А дроп тут
D:\Aion-Game\AE-go_GameServer\src\com\aionemu\gameserver\model\dro p

Добавлено через 1 минуту
А тут если неошибаюсь формулы дропа
D:\Aion-Game\AE-go_GameServer\src\com\aionemu\gameserver\services

в DropService.java

Последний раз редактировалось celler; 26.03.2010 в 14:58. Причина: Добавлено сообщение
celler вне форума Ответить с цитированием
Непрочитано 26.03.2010, 15:03   #8
Аватар для Shema
Герой

Автор темы (Топик Стартер) Re: Drop штраф

О. спасибо. Ни там смотрел значит.))

Выходит в этой формуле нужно добавить значение разницы по лвл.
/**
* 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);
}
Shema вне форума Ответить с цитированием
Непрочитано 26.03.2010, 16:03   #9
Пользователь

По умолчанию Re: Drop штраф

Расчет с формулой там чуть ниже, вот:

/**
* After NPC dies - it can register arbitrary drop
*
* @param npc
*/
public void registerDrop(Npc npc, Player player)
{
int npcUniqueId = npc.getObjectId();
int npcTemplateId = npc.getObjectTemplate().getTemplateId();

Set<DropTemplate> templates = dropList.getDropsFor(npcTemplateId);
if(templates != null)
{
Set<DropItem> droppedItems = new HashSet<DropItem>();

int index = 1;
for(DropTemplate dropTemplate : templates)
{
DropItem dropItem = new DropItem(dropTemplate);
int questId = dropItem.getDropTemplate().getQuest();
if(questId != 0)
{
if(player == null)
continue;
QuestState qs = player.getQuestStateList().getQuestState(questId);
if(qs == null || qs.getStatus() != QuestStatus.START)
continue;
}
dropItem.calculateCount(player.getRates().getDropR ate());

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

currentDropMap.put(npcUniqueId, droppedItems);

// TODO player should not be null
if(player != null)
{
if(player.isInGroup())
{
dropRegistrationMap.put(npcUniqueId, new DropNpc(groupService.getMembersToRegistrateByRules (player,
player.getPlayerGroup())));
}
else
{
List<Integer> singlePlayer = new ArrayList<Integer>();
singlePlayer.add(player.getObjectId());
dropRegistrationMap.put(npcUniqueId, new DropNpc(singlePlayer));
}
}

}
}
celler вне форума Ответить с цитированием
Непрочитано 26.03.2010, 16:35   #10
Аватар для Shema
Герой

Автор темы (Топик Стартер) Re: Drop штраф

Ты тут поменял местами? Какой принцип тут получается с этого скрипта?
Shema вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drop & Spawn new rev. dahtict Серверная часть 112 15.04.2010 00:48
Штраф по лвл Shema Серверная часть 4 09.03.2010 11:48
Drop+Монстры. warman4ik Рынок / Marketplace 25 16.02.2010 20:10
Drop item Gracia Shot Работа со скриптами 3 13.10.2009 08:50
Spawn, Npc, Drop Kamael reptily Работа со скриптами 1 06.06.2008 09:36


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 21:15. Часовой пояс GMT +3.

Вверх