root/trunk/AE-go_GameServer/data/scripts/system/handlers/quest/ascension/_2008Ascension.java
| 1003 | 1006 | ||
|---|---|---|---|
17 | package quest.ascension; | 17 | package quest.ascension; |
18 | 18 | ||
19 | import java.util.ArrayList; | 19 | import java.util.ArrayList; |
20 | import java.util.HashMap; | ||
20 | import java.util.List; | 21 | import java.util.List; |
22 | import java.util.Map; | ||
21 | 23 | ||
22 | import com.aionemu.gameserver.ai.events.Event; | 24 | import com.aionemu.gameserver.ai.events.Event; |
23 | import com.aionemu.gameserver.configs.Config; | 25 | import com.aionemu.gameserver.configs.Config; |
... | ... | ||
48 | { | 50 | { |
49 | 51 | ||
50 | private final static int questId = 2008; | 52 | private final static int questId = 2008; |
51 | private int activePlayerId = 0; | 53 | //TODO [ATracer] - do we really need activePlayer ids in script body ??? |
52 | private List<Npc> mobs = new ArrayList<Npc>(); | 54 | private Map<Integer, Integer> activePlayers = new HashMap<Integer, Integer>(); |
55 | private Map<Integer, List<Npc>> mobs = new HashMap<Integer, List<Npc>>(); | ||
53 | 56 | ||
54 | @Inject | 57 | @Inject |
55 | public _2008Ascension(SpawnsData spawnsData) | 58 | public _2008Ascension(SpawnsData spawnsData) |
... | ... | ||
72 | public boolean onKillEvent(QuestEnv env) | 75 | public boolean onKillEvent(QuestEnv env) |
73 | { | 76 | { |
74 | Player player = env.getPlayer(); | 77 | Player player = env.getPlayer(); |
78 | int instanceId = player.getInstanceId(); | ||
75 | QuestState qs = player.getQuestStateList().getQuestState(questId); | 79 | QuestState qs = player.getQuestStateList().getQuestState(questId); |
76 | if(qs == null || qs.getStatus() != QuestStatus.START) | 80 | if(qs == null || qs.getStatus() != QuestStatus.START) |
77 | return false; | 81 | return false; |
... | ... | ||
87 | { | 91 | { |
88 | qs.getQuestVars().setQuestVar(qs.getQuestVars().getQuestVars() + 1); | 92 | qs.getQuestVars().setQuestVar(qs.getQuestVars().getQuestVars() + 1); |
89 | updateQuestStatus(player, qs); | 93 | updateQuestStatus(player, qs); |
90 | if(mobs.contains(env.getVisibleObject())) | 94 | removeMobToInstance(instanceId, (Npc) env.getVisibleObject());; |
91 | mobs.remove(env.getVisibleObject()); | ||
92 | return true; | 95 | return true; |
93 | } | 96 | } |
94 | else if(var == 54) | 97 | else if(var == 54) |
95 | { | 98 | { |
96 | qs.getQuestVars().setQuestVar(5); | 99 | qs.getQuestVars().setQuestVar(5); |
97 | updateQuestStatus(player, qs); | 100 | updateQuestStatus(player, qs); |
98 | Monster mob = (Monster) QuestEngine.getInstance().addNewSpawn(320010000, 205041, 301f, | 101 | Monster mob = (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205041, 301f, |
99 | 259f, 205.5f, (byte) 0, false); | 102 | 259f, 205.5f, (byte) 0, false); |
100 | //TODO: Tempt decrease P attack. | 103 | //TODO: Tempt decrease P attack. |
101 | mob.getGameStats().setStat(StatEnum.MAIN_HAND_POWER, mob.getGameStats().getCurrentStat(StatEnum.MAIN_HAND_POWER)/3 ); | 104 | mob.getGameStats().setStat(StatEnum.MAIN_HAND_POWER, mob.getGameStats().getCurrentStat(StatEnum.MAIN_HAND_POWER)/3 ); |
102 | (mob).getAggroList().addDamageHate(player, 1000, 0); | 105 | (mob).getAggroList().addDamageHate(player, 1000, 0); |
103 | mob.getAi().handleEvent(Event.ATTACKED); | 106 | mob.getAi().handleEvent(Event.ATTACKED); |
104 | mobs.add(mob); | 107 | addMobToInstance(instanceId, mob); |
105 | return true; | 108 | return true; |
106 | } | 109 | } |
107 | } | 110 | } |
... | ... | ||
133 | public boolean onDialogEvent(QuestEnv env) | 136 | public boolean onDialogEvent(QuestEnv env) |
134 | { | 137 | { |
135 | final Player player = env.getPlayer(); | 138 | final Player player = env.getPlayer(); |
139 | final int instanceId = player.getInstanceId(); | ||
136 | final QuestState qs = player.getQuestStateList().getQuestState(questId); | 140 | final QuestState qs = player.getQuestStateList().getQuestState(questId); |
137 | if(qs == null) | 141 | if(qs == null) |
138 | return false; | 142 | return false; |
... | ... | ||
180 | updateQuestStatus(player, qs); | 184 | updateQuestStatus(player, qs); |
181 | PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(env.getVisibleObject() | 185 | PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(env.getVisibleObject() |
182 | .getObjectId(), 0)); | 186 | .getObjectId(), 0)); |
183 | player.getController().teleportTo(320010000, 457.65f, 426.8f, 230.4f, 0); | 187 | int newInstanceId = player.getPosition().getWorld().getNextAvailableInstanceId(320010000); |
188 | player.getController().teleportTo(320010000, newInstanceId, 457.65f, 426.8f, 230.4f, 0); | ||
184 | return true; | 189 | return true; |
185 | } | 190 | } |
186 | case 10005: | 191 | case 10005: |
... | ... | ||
289 | case 25: | 294 | case 25: |
290 | if(var == 99) | 295 | if(var == 99) |
291 | { | 296 | { |
292 | if(activePlayerId != 0 && activePlayerId != player.getObjectId()) | 297 | if(activePlayers.get(instanceId) != null && activePlayers.get(instanceId) != player.getObjectId()) |
293 | { | 298 | { |
294 | World world = player.getActiveRegion().getWorld(); | 299 | World world = player.getActiveRegion().getWorld(); |
295 | Player activePlayer = world.findPlayer(activePlayerId); | 300 | Player activePlayer = world.findPlayer(activePlayers.get(instanceId)); |
296 | if(!(activePlayer == null || !activePlayer.isOnline() || activePlayer.getWorldId() != 310010000)) | 301 | if(!(activePlayer == null || !activePlayer.isOnline() || activePlayer.getWorldId() != 310010000)) |
297 | return false; | 302 | return false; |
298 | } | 303 | } |
299 | activePlayerId = player.getObjectId(); | 304 | activePlayers.put(instanceId, player.getObjectId()); |
300 | for(Npc mob : mobs) | 305 | clearMobsInInstance(instanceId); |
301 | mob.getController().onDelete(); | 306 | |
302 | mobs.clear(); | ||
303 | PacketSendUtility.sendPacket(player, new SM_EMOTION(player, 6, 3001, 0)); | 307 | PacketSendUtility.sendPacket(player, new SM_EMOTION(player, 6, 3001, 0)); |
304 | qs.getQuestVars().setQuestVar(50); | 308 | qs.getQuestVars().setQuestVar(50); |
305 | updateQuestStatus(player, qs); | 309 | updateQuestStatus(player, qs); |
... | ... | ||
309 | { | 313 | { |
310 | qs.getQuestVars().setQuestVar(51); | 314 | qs.getQuestVars().setQuestVar(51); |
311 | updateQuestStatus(player, qs); | 315 | updateQuestStatus(player, qs); |
312 | mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(320010000, 205040, | 316 | addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205040, |
313 | 294f, 277f, 207f, (byte) 0, false)); | 317 | 294f, 277f, 207f, (byte) 0, false)); |
314 | mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(320010000, 205040, | 318 | addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205040, |
315 | 305f, 279f, 206.5f, (byte) 0, false)); | 319 | 305f, 279f, 206.5f, (byte) 0, false)); |
316 | mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(320010000, 205040, | 320 | addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205040, |
317 | 298f, 253f, 205.7f, (byte) 0, false)); | 321 | 298f, 253f, 205.7f, (byte) 0, false)); |
318 | mobs.add((Monster) QuestEngine.getInstance().addNewSpawn(320010000, 205040, | 322 | addMobToInstance(instanceId, (Monster) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 205040, |
319 | 306f, 251f, 206f, (byte) 0, false)); | 323 | 306f, 251f, 206f, (byte) 0, false)); |
320 | for(Npc mob : mobs) | 324 | List<Npc> monsters = mobs.get(instanceId); |
325 | for(Npc mob : monsters) | ||
321 | { | 326 | { |
322 | //TODO: Tempt decrease P attack. | 327 | //TODO: Tempt decrease P attack. |
323 | mob.getGameStats().setStat(StatEnum.MAIN_HAND_POWER, mob.getGameStats().getCurrentStat(StatEnum.MAIN_HAND_POWER)/3 ); | 328 | mob.getGameStats().setStat(StatEnum.MAIN_HAND_POWER, mob.getGameStats().getCurrentStat(StatEnum.MAIN_HAND_POWER)/3 ); |
... | ... | ||
348 | public boolean onLvlUpEvent(QuestEnv env) | 353 | public boolean onLvlUpEvent(QuestEnv env) |
349 | { | 354 | { |
350 | Player player = env.getPlayer(); | 355 | Player player = env.getPlayer(); |
356 | int instanceId = player.getInstanceId(); | ||
351 | QuestState qs = player.getQuestStateList().getQuestState(questId); | 357 | QuestState qs = player.getQuestStateList().getQuestState(questId); |
352 | if(qs != null) | 358 | if(qs != null) |
353 | { | 359 | { |
... | ... | ||
356 | int var = qs.getQuestVars().getQuestVars(); | 362 | int var = qs.getQuestVars().getQuestVars(); |
357 | if(var == 5 || (var >= 50 && var <= 55)) | 363 | if(var == 5 || (var >= 50 && var <= 55)) |
358 | { | 364 | { |
359 | if(activePlayerId == player.getObjectId() && player.getWorldId() == 320010000) | 365 | if(activePlayers.get(instanceId) != null |
366 | && activePlayers.get(instanceId)== player.getObjectId() | ||
367 | && player.getWorldId() == 320010000) | ||
360 | return false; | 368 | return false; |
361 | else | 369 | else |
362 | { | 370 | { |
... | ... | ||
386 | if(movieId != 152) | 394 | if(movieId != 152) |
387 | return false; | 395 | return false; |
388 | Player player = env.getPlayer(); | 396 | Player player = env.getPlayer(); |
397 | int instanceId = player.getInstanceId(); | ||
389 | QuestState qs = player.getQuestStateList().getQuestState(questId); | 398 | QuestState qs = player.getQuestStateList().getQuestState(questId); |
390 | if(qs == null || qs.getStatus() != QuestStatus.START || qs.getQuestVars().getQuestVars() != 5) | 399 | if(qs == null || qs.getStatus() != QuestStatus.START || qs.getQuestVars().getQuestVars() != 5) |
391 | return false; | 400 | return false; |
392 | mobs.add((Npc) QuestEngine.getInstance().addNewSpawn(320010000, 203550, 301.92999f, 274.26001f, 205.7f, (byte) 0, false)); | 401 | addMobToInstance(instanceId, (Npc) QuestEngine.getInstance().addNewSpawn(320010000, instanceId, 203550, 301.92999f, 274.26001f, 205.7f, (byte) 0, false)); |
393 | qs.getQuestVars().setQuestVar(6); | 402 | qs.getQuestVars().setQuestVar(6); |
394 | updateQuestStatus(player, qs); | 403 | updateQuestStatus(player, qs); |
395 | return true; | 404 | return true; |
... | ... | ||
405 | sendQuestDialog(player, env.getVisibleObject().getObjectId(), 5); | 414 | sendQuestDialog(player, env.getVisibleObject().getObjectId(), 5); |
406 | return true; | 415 | return true; |
407 | } | 416 | } |
417 | |||
418 | /** | ||
419 | * | ||
420 | * @param instanceId | ||
421 | * @param npc | ||
422 | */ | ||
423 | private void addMobToInstance(int instanceId, Npc npc) | ||
424 | { | ||
425 | List<Npc> mobList = mobs.get(instanceId); | ||
426 | if(mobList == null) | ||
427 | { | ||
428 | mobList = new ArrayList<Npc>(); | ||
429 | mobs.put(instanceId, mobList); | ||
430 | } | ||
431 | mobList.add(npc); | ||
432 | } | ||
433 | |||
434 | /** | ||
435 | * | ||
436 | * @param instanceId | ||
437 | * @param npc | ||
438 | */ | ||
439 | private void removeMobToInstance(int instanceId, Npc npc) | ||
440 | { | ||
441 | List<Npc> mobList = mobs.get(instanceId); | ||
442 | if(mobList != null && mobList.contains(npc)) | ||
443 | mobList.remove(npc); | ||
444 | } | ||
445 | |||
446 | /** | ||
447 | * | ||
448 | * @param instanceId | ||
449 | */ | ||
450 | private void clearMobsInInstance(int instanceId) | ||
451 | { | ||
452 | List<Npc> mobList = mobs.get(instanceId); | ||
453 | if(mobList != null) | ||
454 | { | ||
455 | for(Npc npc : mobList) | ||
456 | { | ||
457 | npc.getController().onDelete(); | ||
458 | } | ||
459 | mobList.clear(); | ||
460 | } | ||
461 | } | ||
408 | } | 462 | } |
Download diff