root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/QuestService.java

23262440
19
import java.util.ArrayList;
19
import java.util.ArrayList;
20
import java.util.List;
20
import java.util.List;
21
import java.util.Set;
21
import java.util.Set;
22
import java.util.concurrent.Future;
22
23
23
import com.aionemu.commons.utils.Rnd;
24
import com.aionemu.commons.utils.Rnd;
24
import com.aionemu.gameserver.configs.main.GroupConfig;
25
import com.aionemu.gameserver.configs.main.GroupConfig;
25
import com.aionemu.gameserver.dataholders.DataManager;
26
import com.aionemu.gameserver.dataholders.DataManager;
26
import com.aionemu.gameserver.dataholders.QuestsData;
27
import com.aionemu.gameserver.dataholders.QuestsData;
27
import com.aionemu.gameserver.model.PlayerClass;
28
import com.aionemu.gameserver.model.PlayerClass;
29
import com.aionemu.gameserver.model.TaskId;
28
import com.aionemu.gameserver.model.drop.DropItem;
30
import com.aionemu.gameserver.model.drop.DropItem;
29
import com.aionemu.gameserver.model.drop.DropTemplate;
31
import com.aionemu.gameserver.model.drop.DropTemplate;
30
import com.aionemu.gameserver.model.gameobjects.Npc;
32
import com.aionemu.gameserver.model.gameobjects.Npc;
...
...
41
import com.aionemu.gameserver.model.templates.quest.Rewards;
43
import com.aionemu.gameserver.model.templates.quest.Rewards;
42
import com.aionemu.gameserver.model.templates.spawn.SpawnTemplate;
44
import com.aionemu.gameserver.model.templates.spawn.SpawnTemplate;
43
import com.aionemu.gameserver.network.aion.serverpackets.SM_QUEST_ACCEPTED;
45
import com.aionemu.gameserver.network.aion.serverpackets.SM_QUEST_ACCEPTED;
44
import com.aionemu.gameserver.network.aion.serverpackets.SM_QUEST_STEP;
45
import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE;
46
import com.aionemu.gameserver.questEngine.QuestEngine;
46
import com.aionemu.gameserver.questEngine.QuestEngine;
47
import com.aionemu.gameserver.questEngine.model.QuestEnv;
47
import com.aionemu.gameserver.questEngine.model.QuestEnv;
48
import com.aionemu.gameserver.questEngine.model.QuestState;
48
import com.aionemu.gameserver.questEngine.model.QuestState;
...
...
50
import com.aionemu.gameserver.spawnengine.SpawnEngine;
50
import com.aionemu.gameserver.spawnengine.SpawnEngine;
51
import com.aionemu.gameserver.utils.MathUtil;
51
import com.aionemu.gameserver.utils.MathUtil;
52
import com.aionemu.gameserver.utils.PacketSendUtility;
52
import com.aionemu.gameserver.utils.PacketSendUtility;
53
import com.aionemu.gameserver.utils.ThreadPoolManager;
53
54
54
/**
55
/**
55
 * @author Mr. Poke
56
 * @author Mr. Poke
...
...
142
			{
143
			{
143
				player.getCommonData().addAp(rewards.getRewardAbyssPoint());
144
				player.getCommonData().addAp(rewards.getRewardAbyssPoint());
144
			}
145
			}
145
146
			
146
			//remove all worker list item if finished.
147
			//remove all worker list item if finished.
147
			QuestWorkItems qwi = questsData.getQuestById(id).getQuestWorkItems();
148
			QuestWorkItems qwi = questsData.getQuestById(id).getQuestWorkItems();
148
			
149
			
...
...
163
			QuestEngine.getInstance().onQuestFinish(env);
164
			QuestEngine.getInstance().onQuestFinish(env);
164
			qs.setStatus(QuestStatus.COMPLETE);
165
			qs.setStatus(QuestStatus.COMPLETE);
165
			qs.setCompliteCount(qs.getCompliteCount() + 1);
166
			qs.setCompliteCount(qs.getCompliteCount() + 1);
166
			PacketSendUtility.sendPacket(player, new SM_QUEST_STEP(id, qs.getStatus(), qs.getQuestVars().getQuestVars()));
167
			PacketSendUtility.sendPacket(player, new SM_QUEST_ACCEPTED(id, qs.getStatus(), qs.getQuestVars().getQuestVars()));
167
			player.getController().updateNearbyQuests();
168
			player.getController().updateNearbyQuests();
168
			QuestEngine.getInstance().onLvlUp(env);
169
			QuestEngine.getInstance().onLvlUp(env);
169
			return true;
170
			return true;
...
...
182
				return false;
183
				return false;
183
		}
184
		}
184
185
185
		if(player.getLevel() < template.getMinlevelPermitted())
186
		// min level - 2 so that the gray quest arrow shows when quest is almost available 
187
		// quest level will be checked again in QuestService.startQuest() when attempting to start
188
		if(player.getLevel() < template.getMinlevelPermitted() - 2)
186
		{
189
		{
187
			return false;
190
			return false;
188
		}
191
		}
...
...
242
245
243
			if(player.getLevel() < template.getMinlevelPermitted())
246
			if(player.getLevel() < template.getMinlevelPermitted())
244
			{
247
			{
245
				PacketSendUtility.sendPacket(player, new SM_SYSTEM_MESSAGE(0x13D866, template.getMinlevelPermitted()));
248
				// Should not reach this point. Except for a location started quest.
246
				return false;
249
				return false;
247
			}
250
			}
248
		}
251
		}
...
...
276
279
277
		qs.setQuestVarById(0, qs.getQuestVarById(0) + 1);
280
		qs.setQuestVarById(0, qs.getQuestVarById(0) + 1);
278
		qs.setStatus(QuestStatus.REWARD);
281
		qs.setStatus(QuestStatus.REWARD);
279
		PacketSendUtility.sendPacket(player, new SM_QUEST_STEP(id, qs.getStatus(), qs.getQuestVars().getQuestVars()));
282
		PacketSendUtility.sendPacket(player, new SM_QUEST_ACCEPTED(id, qs.getStatus(), qs.getQuestVars().getQuestVars()));
280
		player.getController().updateNearbyQuests();
283
		player.getController().updateNearbyQuests();
281
		return true;
284
		return true;
282
	}
285
	}
...
...
377
		}
380
		}
378
		return false;
381
		return false;
379
	}
382
	}
383
384
	/**
385
	* @param id
386
	* @param playerLevel
387
	* @return false if player is 2 or more levels below quest level 
388
	*/
389
	public static boolean checkLevelRequirement(int questId, int playerLevel)
390
	{
391
		QuestTemplate template = questsData.getQuestById(questId);
392
		return (playerLevel >= template.getMinlevelPermitted());
393
	}
394
	
395
	public static boolean questTimerStart(QuestEnv env, int timeInSeconds)
396
	{
397
		final Player player = env.getPlayer();
398
		final int id = env.getQuestId();
399
		
400
		// Schedule Action When Timer Finishes
401
		Future<?> task = ThreadPoolManager.getInstance().schedule(new Runnable(){
402
403
			@Override
404
			public void run()
405
			{
406
				QuestEngine.getInstance().onQuestTimerEnd(new QuestEnv(null, player, 0, 0));
407
				QuestEngine.getInstance().deleteQuest(player, id);
408
				PacketSendUtility.sendPacket(player, new SM_QUEST_ACCEPTED(id));
409
				player.getController().updateNearbyQuests();					
410
			}
411
		}, timeInSeconds * 1000);
412
		player.getController().addTask(TaskId.QUEST_TIMER, task);
413
		PacketSendUtility.sendPacket(player, new SM_QUEST_ACCEPTED(id, timeInSeconds));			
414
	return true;
415
	}
416
417
	public static boolean questTimerEnd(QuestEnv env)
418
	{
419
		final Player player = env.getPlayer();
420
		final int id = env.getQuestId();
421
		
422
		player.getController().cancelTask(TaskId.QUEST_TIMER);
423
		PacketSendUtility.sendPacket(player, new SM_QUEST_ACCEPTED(id, 0));
424
	return true;
425
	}	
380
}
426
}