package zone;
import com.aionemu.gameserver.controllers.observer.AbstractQuestZoneObserver;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.model.templates.zone.ZoneTemplate;
import com.aionemu.gameserver.network.aion.serverpackets.SM_QUEST_ACTION;
import com.aionemu.gameserver.network.aion.serverpackets.SM_QUEST_ACTION.ActionType;
import com.aionemu.gameserver.questEngine.model.QuestState;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.world.zone.handler.QuestZoneHandler;
import com.aionemu.gameserver.world.zone.handler.ZoneNameAnnotation;
/**
* @author Rolandas
*/
@ZoneNameAnnotation(
value = "LF1A_SENSORYAREA_Q1012_2_206005_4_210030000 LF1A_SENSORYAREA_Q1012_3_206006_6_210030000 LF1A_SENSORYAREA_Q1012_1_206004_8_210030000",
questId = 1012)
public class _1012SensoryArea extends QuestZoneHandler {
@Override
public AbstractQuestZoneObserver createObserver(Player player, ZoneTemplate zoneTemplate) {
return new AbstractQuestZoneObserver(player, zoneTemplate) {
@Override
public void onMoved(float distanceScouted, float distanceToCenter, int steps, long timeSpent) {
// Another way to do the same is like this:
//
// QuestEngine.getInstance().onEnterZone(new QuestEnv(null, player, questId), observedZone.getName());
//
// In this case, it will be handled inside the quest script. But you need to register
// each zone in the quest script. For scouting you may save distance, time and send the event back
// to the QuestEngine when the criteria are met. It will work like a delayed onEnterZone event.
final QuestState qs = player.getQuestStateList().getQuestState(questId);
if (qs == null || qs.getQuestVars().getQuestVars() != 1)
return;
qs.setQuestVarById(0, 2); // 2
PacketSendUtility.sendPacket(player, new SM_QUEST_ACTION(ActionType.UPDATE, qs));
}
};
}
}