- Хроники
- Master Class
- Исходники
- Присутствуют
- Сборка
- L2J_Mobius_12.3_Superion
Здравствуйте.
Есть две миссии клана " Достижения" Дворянин и Почетный статус.
За эти миссии не выдается награда по какой то причине.
Вот xml файл.
Вот код .
Алису AI я уже *****
Она пишет
Но ничего из этого не работает.
Есть две миссии клана " Достижения" Дворянин и Почетный статус.
За эти миссии не выдается награда по какой то причине.
Код:
<reward id="3025" name="Obtain Noblesse status" requiredCompletion="1">
<!-- Obtain the Noblesse status while in a clan. -->
<handler name="noblesse">
<param name="minLevel">85</param>
<param name="maxLevel">255</param>
</handler>
<items>
<item id="-200" count="30000" /> <!-- Clan Reputation -->
<item id="-300" count="3000" /> <!-- Fame -->
</items>
</reward>
<reward id="3026" name="Obtain Exalted Status" requiredCompletion="1">
<!-- Obtain the Exalted status while in a clan. -->
<handler name="exalted">
<param name="minLevel">85</param>
<param name="maxLevel">255</param>
</handler>
<items>
<item id="-200" count="90000" /> <!-- Clan Reputation -->
<item id="-300" count="9000" /> <!-- Fame -->
</items>
</reward>
Код:
package handlers.dailymissionhandlers;
import org.l2jmobius.gameserver.handler.AbstractDailyMissionHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.enums.player.DailyMissionStatus;
import org.l2jmobius.gameserver.model.actor.holders.player.DailyMissionDataHolder;
import org.l2jmobius.gameserver.model.actor.holders.player.DailyMissionPlayerEntry;
import org.l2jmobius.gameserver.model.events.Containers;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
/**
* @author CostyKiller
*/
public class NoblesseDailyMissionHandler extends AbstractDailyMissionHandler
{
private final int _amount;
private final int _minLevel;
private final int _maxLevel;
public NoblesseDailyMissionHandler(DailyMissionDataHolder holder)
{
super(holder);
_amount = holder.getRequiredCompletions();
_minLevel = holder.getParams().getInt("minLevel", 0);
_maxLevel = holder.getParams().getInt("maxLevel", Integer.MAX_VALUE);
}
@Override
public void init()
{
Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_BECOME_NOBLESSE, (OnPlayerBecomeNoblesse event) -> onPlayerBecomeNoblesse(event), this));
}
@Override
public boolean isAvailable(Player player)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
if (entry != null)
{
switch (entry.getStatus())
{
case NOT_AVAILABLE: // Initial state
{
if (entry.getProgress() >= _amount)
{
entry.setStatus(DailyMissionStatus.AVAILABLE);
storePlayerEntry(entry);
}
break;
}
case AVAILABLE:
{
return true;
}
}
}
return false;
}
private void onPlayerBecomeNoblesse(OnPlayerBecomeNoblesse event)
{
final Player player = event.getPlayer();
if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel))
{
return;
}
// Check if player is belonging to a clan and is noble.
if ((player.getClan() != null) && (player.getNobleLevel() > 0) && (player.getNobleLevel() == 1))
{
processPlayerProgress(player);
}
}
private void processPlayerProgress(Player player)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE)
{
if (entry.increaseProgress() >= _amount)
{
entry.setStatus(DailyMissionStatus.AVAILABLE);
}
storePlayerEntry(entry);
}
}
}
Алису AI я уже *****
Она пишет
- Отслеживание прогресса реализовано (<span>processPlayerProgress()</span> увеличивает счётчик).
- Смена статуса на <span>AVAILABLE</span> происходит при достижении <span>_amount</span>.
- Но нет логики выдачи награды — метод, который бы вызывал <span>giveReward()</span> или аналогичный, отсутствует.
Но ничего из этого не работает.
Вариант 1. Автоматическая выдача при достижении цели
Измените метод <span>processPlayerProgress()</span>
Код:
private void processPlayerProgress(Player player) {
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
if (entry.getStatus() == DailyMissionStatus.NOT_AVAILABLE) {
if (entry.increaseProgress() >= _amount) {
entry.setStatus(DailyMissionStatus.AVAILABLE);
// ВЫДАЧА НАГРАДЫ
giveReward(player, entry);
}
storePlayerEntry(entry);
}
}



























































