diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java index 11356791cf..8bc352812f 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java @@ -185,12 +185,12 @@ public class KrofinNest extends AbstractInstance final Instance world = attacker.getInstanceWorld(); if (isInInstance(world)) { - final boolean KROPION_MINIONS_SPAWNED = world.getParameters().getBoolean("KROPION_MINIONS_SPAWNED", false); - final boolean KROSHA_FIRST_FORM_MINIONS_SPAWNED = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED", false); - final boolean KROSHA_FINAL_FORM_MINIONS_SPAWNED = world.getParameters().getBoolean("KROSHA_FINAL_FORM_MINIONS_SPAWNED", false); + final boolean kropionMinionsSpawned = world.getParameters().getBoolean("KROPION_MINIONS_SPAWNED", false); + final boolean kroshaFirstFormMinionsSpawned = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED", false); + final boolean kroshaFinalFormMinionsSpawned = world.getParameters().getBoolean("KROSHA_FINAL_FORM_MINIONS_SPAWNED", false); if ((world.getStatus() == 2) && (npc.getId() == KROPION)) { - if (!KROPION_MINIONS_SPAWNED) + if (!kropionMinionsSpawned) { world.getParameters().set("KROPION_MINIONS_SPAWNED", true); world.spawnGroup("KROPION_MINIONS"); @@ -198,12 +198,12 @@ public class KrofinNest extends AbstractInstance } else if (world.getStatus() == 5) { - if ((npc.getId() == KROSHA_FIRST_FORM) && !KROSHA_FIRST_FORM_MINIONS_SPAWNED) + if ((npc.getId() == KROSHA_FIRST_FORM) && !kroshaFirstFormMinionsSpawned) { world.getParameters().set("KROSHA_FIRST_FORM_MINIONS_SPAWNED", true); world.spawnGroup("KROSHA_FIRST_FORM_MINIONS"); } - else if ((npc.getId() == KROSHA_FINAL_FORM) && !KROSHA_FINAL_FORM_MINIONS_SPAWNED) + else if ((npc.getId() == KROSHA_FINAL_FORM) && !kroshaFinalFormMinionsSpawned) { world.getParameters().set("KROSHA_FINAL_FORM_MINIONS_SPAWNED", true); world.spawnGroup("KROSHA_FINAL_FORM_MINIONS"); @@ -219,17 +219,17 @@ public class KrofinNest extends AbstractInstance final Instance world = npc.getInstanceWorld(); if (isInInstance(world)) { - final boolean KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false); + final boolean kroshaFirstFormMinionsSpawnedTwice = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false); if (world.getStatus() == 5) { if (CommonUtil.contains(KROSHA_FIRST_FORM_MINIONS, npc.getId())) { - if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && !KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE) + if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && !kroshaFirstFormMinionsSpawnedTwice) { world.getParameters().set("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", true); world.spawnGroup("KROSHA_FIRST_FORM_MINIONS"); } - else if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE) + else if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && kroshaFirstFormMinionsSpawnedTwice) { world.despawnGroup("KROSHA_FIRST_FORM"); showOnScreenMsg(world, NpcStringId.QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true); diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java index 11356791cf..8bc352812f 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java @@ -185,12 +185,12 @@ public class KrofinNest extends AbstractInstance final Instance world = attacker.getInstanceWorld(); if (isInInstance(world)) { - final boolean KROPION_MINIONS_SPAWNED = world.getParameters().getBoolean("KROPION_MINIONS_SPAWNED", false); - final boolean KROSHA_FIRST_FORM_MINIONS_SPAWNED = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED", false); - final boolean KROSHA_FINAL_FORM_MINIONS_SPAWNED = world.getParameters().getBoolean("KROSHA_FINAL_FORM_MINIONS_SPAWNED", false); + final boolean kropionMinionsSpawned = world.getParameters().getBoolean("KROPION_MINIONS_SPAWNED", false); + final boolean kroshaFirstFormMinionsSpawned = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED", false); + final boolean kroshaFinalFormMinionsSpawned = world.getParameters().getBoolean("KROSHA_FINAL_FORM_MINIONS_SPAWNED", false); if ((world.getStatus() == 2) && (npc.getId() == KROPION)) { - if (!KROPION_MINIONS_SPAWNED) + if (!kropionMinionsSpawned) { world.getParameters().set("KROPION_MINIONS_SPAWNED", true); world.spawnGroup("KROPION_MINIONS"); @@ -198,12 +198,12 @@ public class KrofinNest extends AbstractInstance } else if (world.getStatus() == 5) { - if ((npc.getId() == KROSHA_FIRST_FORM) && !KROSHA_FIRST_FORM_MINIONS_SPAWNED) + if ((npc.getId() == KROSHA_FIRST_FORM) && !kroshaFirstFormMinionsSpawned) { world.getParameters().set("KROSHA_FIRST_FORM_MINIONS_SPAWNED", true); world.spawnGroup("KROSHA_FIRST_FORM_MINIONS"); } - else if ((npc.getId() == KROSHA_FINAL_FORM) && !KROSHA_FINAL_FORM_MINIONS_SPAWNED) + else if ((npc.getId() == KROSHA_FINAL_FORM) && !kroshaFinalFormMinionsSpawned) { world.getParameters().set("KROSHA_FINAL_FORM_MINIONS_SPAWNED", true); world.spawnGroup("KROSHA_FINAL_FORM_MINIONS"); @@ -219,17 +219,17 @@ public class KrofinNest extends AbstractInstance final Instance world = npc.getInstanceWorld(); if (isInInstance(world)) { - final boolean KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false); + final boolean kroshaFirstFormMinionsSpawnedTwice = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false); if (world.getStatus() == 5) { if (CommonUtil.contains(KROSHA_FIRST_FORM_MINIONS, npc.getId())) { - if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && !KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE) + if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && !kroshaFirstFormMinionsSpawnedTwice) { world.getParameters().set("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", true); world.spawnGroup("KROSHA_FIRST_FORM_MINIONS"); } - else if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE) + else if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && kroshaFirstFormMinionsSpawnedTwice) { world.despawnGroup("KROSHA_FIRST_FORM"); showOnScreenMsg(world, NpcStringId.QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true); diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/default/34542.htm b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/default/34542.htm index af918731ff..6351bea9f6 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/default/34542.htm +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/html/default/34542.htm @@ -8,5 +8,6 @@ Welcome! My name is Benusta. I help adventurers to travel to instance zones. I c + \ No newline at end of file diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/instances/KrofinNest110.xml b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/instances/KrofinNest110.xml new file mode 100644 index 0000000000..6882a1c565 --- /dev/null +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/instances/KrofinNest110.xml @@ -0,0 +1,111 @@ + + + + + diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java index 1cdf917ddd..3d4ecd8baa 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/instances/KrofinNest/KrofinNest.java @@ -36,41 +36,57 @@ import instances.AbstractInstance; */ public class KrofinNest extends AbstractInstance { - // NPC + // NPCs private static final int BENUSTA = 34542; - // Item - private static final ItemHolder BENUSTAS_REWARD_BOX = new ItemHolder(81151, 1); - // Misc - private static final int TEMPLATE_ID = 291; // Krofin Nest - private static final int DOOR1 = 23220101; - private static final int DOOR2 = 24250002; - private static final int DOOR3 = 24250004; - private static final int DOOR4 = 24250006; + private static final int KROSHA_FIRST_FORM = 26389; + private static final int KROSHA_FINAL_FORM = 26390; + private static final int KROSHA_FINAL_FORM_110 = 26467; + private static final int KROPION = 26396; + private static final int KROPION_110 = 26474; private static final int[] FIRST_AREA = { - 26396, + KROPION, 26398 }; + private static final int[] FIRST_AREA_110 = + { + 26479, + 26478, + 26477, + 26476 + }; private static final int[] SECOND_AREA = { - 26396, + KROPION, 26398 }; + private static final int[] SECOND_AREA_110 = + { + KROPION_110, + 26475 + }; private static final int[] THIRD_AREA = { 26395, 26397 }; + private static final int[] THIRD_AREA_110 = + { + 26470, + 26471 + }; private static final int[] FOURTH_AREA = { 26395, - 26396, + KROPION, 26397, 26398 }; - private static final int KROSHA_FIRST_FORM = 26389; - private static final int KROSHA_FINAL_FORM = 26390; - private static final int KROPION = 26396; + private static final int[] FOURTH_AREA_110 = + { + 26468, + 26469 + }; private static final int[] KROSHA_FIRST_FORM_MINIONS = { 26393, @@ -81,21 +97,40 @@ public class KrofinNest extends AbstractInstance 26391, 26392 }; + // Items + private static final ItemHolder BENUSTAS_REWARD_BOX = new ItemHolder(81151, 1); + private static final ItemHolder BENUSTAS_REWARD_BOX_110 = new ItemHolder(81741, 1); + // Misc + private static final int[] TEMPLATE_IDS = + { + 291, + 315 + }; + private static final int DOOR1 = 23220101; + private static final int DOOR2 = 24250002; + private static final int DOOR3 = 24250004; + private static final int DOOR4 = 24250006; public KrofinNest() { - super(TEMPLATE_ID); + super(TEMPLATE_IDS); addStartNpc(BENUSTA); addTalkId(BENUSTA); addAttackId(FIRST_AREA); + addAttackId(FIRST_AREA_110); addAttackId(SECOND_AREA); + addAttackId(SECOND_AREA_110); addAttackId(THIRD_AREA); + addAttackId(THIRD_AREA_110); addAttackId(FOURTH_AREA); + addAttackId(FOURTH_AREA_110); addAttackId(KROSHA_FIRST_FORM); addAttackId(KROSHA_FINAL_FORM); + addAttackId(KROSHA_FINAL_FORM_110); addKillId(KROSHA_FIRST_FORM_MINIONS); addKillId(ENHANCED_MINIONS); addKillId(KROSHA_FINAL_FORM); + addKillId(KROSHA_FINAL_FORM_110); } @Override @@ -106,13 +141,14 @@ public class KrofinNest extends AbstractInstance case "enterInstance": { // Cannot enter if player finished another instance. - if ((Chronos.currentTimeMillis() < InstanceManager.getInstance().getInstanceTime(player, 315))) + final int templateId = event.contains("110") ? TEMPLATE_IDS[1] : TEMPLATE_IDS[0]; + if ((Chronos.currentTimeMillis() < InstanceManager.getInstance().getInstanceTime(player, templateId == TEMPLATE_IDS[1] ? TEMPLATE_IDS[0] : TEMPLATE_IDS[1]))) { player.sendPacket(new SystemMessage(SystemMessageId.SINCE_C1_ENTERED_ANOTHER_INSTANCE_ZONE_THEREFORE_YOU_CANNOT_ENTER_THIS_DUNGEON).addString(player.getName())); return null; } - enterInstance(player, npc, TEMPLATE_ID); + enterInstance(player, npc, templateId); if (player.getInstanceWorld() != null) { startQuestTimer("check_status", 1000, null, player); @@ -126,6 +162,7 @@ public class KrofinNest extends AbstractInstance { return null; } + switch (world.getStatus()) { case 0: @@ -137,7 +174,7 @@ public class KrofinNest extends AbstractInstance } case 1: { - if (world.getAliveNpcs(FIRST_AREA).isEmpty()) + if (world.getAliveNpcs(world.getTemplateId() == TEMPLATE_IDS[0] ? FIRST_AREA : FIRST_AREA_110).isEmpty()) { showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true); world.setStatus(2); @@ -149,7 +186,7 @@ public class KrofinNest extends AbstractInstance } case 2: { - if (world.getAliveNpcs(SECOND_AREA).isEmpty()) + if (world.getAliveNpcs(world.getTemplateId() == TEMPLATE_IDS[0] ? SECOND_AREA : SECOND_AREA_110).isEmpty()) { showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true); world.setStatus(3); @@ -161,7 +198,7 @@ public class KrofinNest extends AbstractInstance } case 3: { - if (world.getAliveNpcs(THIRD_AREA).isEmpty()) + if (world.getAliveNpcs(world.getTemplateId() == TEMPLATE_IDS[0] ? THIRD_AREA : THIRD_AREA_110).isEmpty()) { showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true); world.setStatus(4); @@ -173,12 +210,12 @@ public class KrofinNest extends AbstractInstance } case 4: { - if (world.getAliveNpcs(FOURTH_AREA).isEmpty()) + if (world.getAliveNpcs(world.getTemplateId() == TEMPLATE_IDS[0] ? FOURTH_AREA : FOURTH_AREA_110).isEmpty()) { showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true); world.setStatus(5); world.getDoor(DOOR4).openMe(); - world.spawnGroup("KROSHA_FIRST_FORM"); + world.spawnGroup(world.getTemplateId() == TEMPLATE_IDS[0] ? "KROSHA_FIRST_FORM" : "KROSHA_FINAL_FORM"); } startQuestTimer("check_status", 10000, null, player); break; @@ -196,12 +233,12 @@ public class KrofinNest extends AbstractInstance final Instance world = attacker.getInstanceWorld(); if (isInInstance(world)) { - final boolean KROPION_MINIONS_SPAWNED = world.getParameters().getBoolean("KROPION_MINIONS_SPAWNED", false); - final boolean KROSHA_FIRST_FORM_MINIONS_SPAWNED = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED", false); - final boolean KROSHA_FINAL_FORM_MINIONS_SPAWNED = world.getParameters().getBoolean("KROSHA_FINAL_FORM_MINIONS_SPAWNED", false); - if ((world.getStatus() == 2) && (npc.getId() == KROPION)) + final boolean kropionMinionsSpawned = world.getParameters().getBoolean("KROPION_MINIONS_SPAWNED", false); + final boolean kroshaFirstFormMinionsSpawned = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED", false); + final boolean kroshaFinalFormMinionsSpawned = world.getParameters().getBoolean("KROSHA_FINAL_FORM_MINIONS_SPAWNED", false); + if ((world.getStatus() == 2) && ((npc.getId() == KROPION) || (npc.getId() == KROPION_110))) { - if (!KROPION_MINIONS_SPAWNED) + if (!kropionMinionsSpawned) { world.getParameters().set("KROPION_MINIONS_SPAWNED", true); world.spawnGroup("KROPION_MINIONS"); @@ -209,12 +246,12 @@ public class KrofinNest extends AbstractInstance } else if (world.getStatus() == 5) { - if ((npc.getId() == KROSHA_FIRST_FORM) && !KROSHA_FIRST_FORM_MINIONS_SPAWNED) + if ((npc.getId() == KROSHA_FIRST_FORM) && !kroshaFirstFormMinionsSpawned) { world.getParameters().set("KROSHA_FIRST_FORM_MINIONS_SPAWNED", true); world.spawnGroup("KROSHA_FIRST_FORM_MINIONS"); } - else if ((npc.getId() == KROSHA_FINAL_FORM) && !KROSHA_FINAL_FORM_MINIONS_SPAWNED) + else if (((npc.getId() == KROSHA_FINAL_FORM) || (npc.getId() == KROSHA_FINAL_FORM_110)) && !kroshaFinalFormMinionsSpawned) { world.getParameters().set("KROSHA_FINAL_FORM_MINIONS_SPAWNED", true); world.spawnGroup("KROSHA_FINAL_FORM_MINIONS"); @@ -230,17 +267,17 @@ public class KrofinNest extends AbstractInstance final Instance world = npc.getInstanceWorld(); if (isInInstance(world)) { - final boolean KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false); + final boolean kroshaFirstFormMinionsSpawnedTwice = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false); if (world.getStatus() == 5) { if (CommonUtil.contains(KROSHA_FIRST_FORM_MINIONS, npc.getId())) { - if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && !KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE) + if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && !kroshaFirstFormMinionsSpawnedTwice) { world.getParameters().set("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", true); world.spawnGroup("KROSHA_FIRST_FORM_MINIONS"); } - else if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE) + else if (world.getAliveNpcs(KROSHA_FIRST_FORM_MINIONS).isEmpty() && kroshaFirstFormMinionsSpawnedTwice) { world.despawnGroup("KROSHA_FIRST_FORM"); showOnScreenMsg(world, NpcStringId.QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true); @@ -264,6 +301,15 @@ public class KrofinNest extends AbstractInstance showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true); world.finishInstance(); } + else if (npc.getId() == KROSHA_FINAL_FORM_110) + { + for (PlayerInstance member : world.getPlayers()) + { + giveItems(member, BENUSTAS_REWARD_BOX_110); + } + showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true); + world.finishInstance(); + } else { world.setReenterTime(); diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/stats/npcs/26400-26499.xml b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/stats/npcs/26400-26499.xml index d86db7713f..641291b814 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/stats/npcs/26400-26499.xml +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/stats/npcs/26400-26499.xml @@ -2221,4 +2221,352 @@ + + BEAST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + + + BEAST + MALE + + + + + + + + + + + + + + + + + + + + + + +