root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/QuestService.java
| 2326 | 2440 | ||
|---|---|---|---|
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 | } |
Download diff