Code review Part 5.
This commit is contained in:
		| @@ -71,14 +71,12 @@ public class SummonPc extends AbstractNpcAI | ||||
| 			final Attackable monster = (Attackable) npc; | ||||
| 			if (monster.getMostHated() != null) | ||||
| 			{ | ||||
| 				if (((monster.getMostHated() == attacker) && (chance < 50)) || (chance < 10)) | ||||
| 				if ((((monster.getMostHated() == attacker) && (chance < 50)) || (chance < 10)) // | ||||
| 					&& ((SUMMON_PC.getSkill().getMpConsume() < npc.getCurrentMp()) && (SUMMON_PC.getSkill().getHpConsume() < npc.getCurrentHp()) && !npc.isSkillDisabled(SUMMON_PC.getSkill()))) | ||||
| 				{ | ||||
| 					if ((SUMMON_PC.getSkill().getMpConsume() < npc.getCurrentMp()) && (SUMMON_PC.getSkill().getHpConsume() < npc.getCurrentHp()) && !npc.isSkillDisabled(SUMMON_PC.getSkill())) | ||||
| 					{ | ||||
| 						npc.setTarget(attacker); | ||||
| 						npc.doCast(SUMMON_PC.getSkill()); | ||||
| 						npc.getVariables().set("attacked", true); | ||||
| 					} | ||||
| 					npc.setTarget(attacker); | ||||
| 					npc.doCast(SUMMON_PC.getSkill()); | ||||
| 					npc.getVariables().set("attacked", true); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -63,7 +63,7 @@ public class Ingrit extends AbstractNpcAI | ||||
| 	{ | ||||
| 		if (npc.getId() == SOUL_TRACKER_INRGIT) | ||||
| 		{ | ||||
| 			QuestState qs = player.getQuestState("Q00933_ExploringTheWestWingOfTheDungeonOfAbyss"); | ||||
| 			final QuestState qs = player.getQuestState("Q00933_ExploringTheWestWingOfTheDungeonOfAbyss"); | ||||
| 			switch (event) | ||||
| 			{ | ||||
| 				case "1": | ||||
|   | ||||
| @@ -63,7 +63,7 @@ public class Iris extends AbstractNpcAI | ||||
| 	{ | ||||
| 		if (npc.getId() == SOUL_TRACKER_IRIS) | ||||
| 		{ | ||||
| 			QuestState qs = player.getQuestState("Q00935_ExploringTheEastWingOfTheDungeonOfAbyss"); | ||||
| 			final QuestState qs = player.getQuestState("Q00935_ExploringTheEastWingOfTheDungeonOfAbyss"); | ||||
| 			switch (event) | ||||
| 			{ | ||||
| 				case "1": | ||||
|   | ||||
| @@ -63,7 +63,7 @@ public class Magrit extends AbstractNpcAI | ||||
| 	{ | ||||
| 		if (npc.getId() == SOUL_TRACKER_MARGIT) | ||||
| 		{ | ||||
| 			QuestState qs = player.getQuestState("Q00933_ExploringTheWestWingOfTheDungeonOfAbyss"); | ||||
| 			final QuestState qs = player.getQuestState("Q00933_ExploringTheWestWingOfTheDungeonOfAbyss"); | ||||
| 			switch (event) | ||||
| 			{ | ||||
| 				case "1": | ||||
|   | ||||
| @@ -63,7 +63,7 @@ public class Rosammy extends AbstractNpcAI | ||||
| 	{ | ||||
| 		if (npc.getId() == SOUL_TRACKER_ROSAMMY) | ||||
| 		{ | ||||
| 			QuestState qs = player.getQuestState("Q00935_ExploringTheEastWingOfTheDungeonOfAbyss"); | ||||
| 			final QuestState qs = player.getQuestState("Q00935_ExploringTheEastWingOfTheDungeonOfAbyss"); | ||||
| 			switch (event) | ||||
| 			{ | ||||
| 				case "1": | ||||
|   | ||||
| @@ -70,7 +70,7 @@ public class AttributeMaster extends AbstractNpcAI | ||||
| 					spirit.upgrade(); | ||||
| 				} | ||||
| 			} | ||||
| 			UserInfo userInfo = new UserInfo(player); | ||||
| 			final UserInfo userInfo = new UserInfo(player); | ||||
| 			userInfo.addComponentType(UserInfoType.ATT_SPIRITS); | ||||
| 			player.sendPacket(userInfo); | ||||
| 			player.sendPacket(new ElementalSpiritInfo(player, player.getActiveElementalSpiritType(), (byte) 0x01)); | ||||
|   | ||||
| @@ -46,6 +46,8 @@ import ai.AbstractNpcAI; | ||||
|  */ | ||||
| public class OlyManager extends AbstractNpcAI implements IBypassHandler | ||||
| { | ||||
| 	private static final Logger LOGGER = Logger.getLogger(OlyManager.class.getName()); | ||||
| 	 | ||||
| 	// NPC | ||||
| 	private static final int MANAGER = 31688; | ||||
| 	// Misc | ||||
| @@ -56,7 +58,6 @@ public class OlyManager extends AbstractNpcAI implements IBypassHandler | ||||
| 		"watchmatch", | ||||
| 		"arenachange" | ||||
| 	}; | ||||
| 	private static final Logger LOGGER = Logger.getLogger(OlyManager.class.getName()); | ||||
| 	 | ||||
| 	private OlyManager() | ||||
| 	{ | ||||
|   | ||||
| @@ -39,6 +39,7 @@ import ai.AbstractNpcAI; | ||||
| public class EilhalderVonHellmann extends AbstractNpcAI | ||||
| { | ||||
| 	private static final Logger LOGGER = Logger.getLogger(EilhalderVonHellmann.class.getName()); | ||||
| 	 | ||||
| 	private static final int EILHALDER_VON_HELLMANN = 25328; | ||||
| 	private NpcSpawnTemplate _template; | ||||
| 	 | ||||
|   | ||||
| @@ -33,7 +33,7 @@ import ai.AbstractNpcAI; | ||||
|  */ | ||||
| public class NpcLocationInfo extends AbstractNpcAI | ||||
| { | ||||
| 	private static final List<Integer> NPC = new ArrayList<>(); | ||||
| 	private static final List<Integer> NPC = new ArrayList<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		NPC.add(30598); | ||||
| @@ -42,7 +42,7 @@ public class NpcLocationInfo extends AbstractNpcAI | ||||
| 		NPC.add(30601); | ||||
| 		NPC.add(30602); | ||||
| 	} | ||||
| 	private static final List<Integer> NPCRADAR = new ArrayList<>(); | ||||
| 	private static final List<Integer> NPCRADAR = new ArrayList<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		// Talking Island | ||||
| @@ -224,7 +224,9 @@ public class NpcLocationInfo extends AbstractNpcAI | ||||
| 			final int npcId = Integer.parseInt(event); | ||||
| 			if (NPCRADAR.contains(npcId)) | ||||
| 			{ | ||||
| 				int x = 0, y = 0, z = 0; | ||||
| 				int x = 0; | ||||
| 				int y = 0; | ||||
| 				int z = 0; | ||||
| 				final Spawn spawn = SpawnTable.getInstance().getAnySpawn(npcId); | ||||
| 				if (spawn != null) | ||||
| 				{ | ||||
| @@ -243,7 +245,7 @@ public class NpcLocationInfo extends AbstractNpcAI | ||||
| 	public String onTalk(Npc npc, PlayerInstance player) | ||||
| 	{ | ||||
| 		String htmltext = getNoQuestMsg(player); | ||||
| 		int npcId = npc.getId(); | ||||
| 		final int npcId = npc.getId(); | ||||
| 		if (NPC.contains(npcId)) | ||||
| 		{ | ||||
| 			htmltext = npcId + ".htm"; | ||||
| @@ -257,7 +259,7 @@ public class NpcLocationInfo extends AbstractNpcAI | ||||
| 		addTalkId(NPC); | ||||
| 	} | ||||
| 	 | ||||
| 	public static void main(String args[]) | ||||
| 	public static void main(String[] args) | ||||
| 	{ | ||||
| 		new NpcLocationInfo(); | ||||
| 	} | ||||
|   | ||||
| @@ -73,7 +73,7 @@ public class SellBuff implements IVoicedCommandHandler, IBypassHandler | ||||
| 	public boolean useBypass(String command, PlayerInstance player, Creature target) | ||||
| 	{ | ||||
| 		String cmd = ""; | ||||
| 		StringBuilder params = new StringBuilder(); | ||||
| 		final StringBuilder params = new StringBuilder(); | ||||
| 		final StringTokenizer st = new StringTokenizer(command, " "); | ||||
| 		 | ||||
| 		if (st.hasMoreTokens()) | ||||
| @@ -130,7 +130,7 @@ public class SellBuff implements IVoicedCommandHandler, IBypassHandler | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					StringBuilder title = new StringBuilder(); | ||||
| 					final StringBuilder title = new StringBuilder(); | ||||
| 					title.append("BUFF SELL: "); | ||||
| 					final StringTokenizer st = new StringTokenizer(params, " "); | ||||
| 					while (st.hasMoreTokens()) | ||||
|   | ||||
| @@ -543,12 +543,12 @@ public class MerrySquashmas extends LongTimeEvent | ||||
| 			{ | ||||
| 				case 13399: // Snowy Squash Seed | ||||
| 				{ | ||||
| 					randomSpawn(13402, 13401, 13400, npc, true); | ||||
| 					randomSpawn(13402, 13401, 13400, npc); | ||||
| 					break; | ||||
| 				} | ||||
| 				case 13403: // Large Snowy Squash Seed | ||||
| 				{ | ||||
| 					randomSpawn(13406, 13405, 13404, npc, true); | ||||
| 					randomSpawn(13406, 13405, 13404, npc); | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| @@ -600,7 +600,7 @@ public class MerrySquashmas extends LongTimeEvent | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void randomSpawn(int low, int medium, int high, Npc npc, boolean delete) | ||||
| 	private void randomSpawn(int low, int medium, int high, Npc npc) | ||||
| 	{ | ||||
| 		final int _random = Rnd.get(100); | ||||
| 		if (_random < 5) | ||||
|   | ||||
| @@ -542,12 +542,12 @@ public class SquashEvent extends LongTimeEvent | ||||
| 			{ | ||||
| 				case 12774: // Young Squash | ||||
| 				{ | ||||
| 					randomSpawn(13016, 12775, 12776, npc, true); | ||||
| 					randomSpawn(13016, 12775, 12776, npc); | ||||
| 					break; | ||||
| 				} | ||||
| 				case 12777: // Large Young Squash | ||||
| 				{ | ||||
| 					randomSpawn(13017, 12778, 12779, npc, true); | ||||
| 					randomSpawn(13017, 12778, 12779, npc); | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| @@ -599,7 +599,7 @@ public class SquashEvent extends LongTimeEvent | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void randomSpawn(int low, int medium, int high, Npc npc, boolean delete) | ||||
| 	private void randomSpawn(int low, int medium, int high, Npc npc) | ||||
| 	{ | ||||
| 		final int _random = Rnd.get(100); | ||||
| 		if (_random < 5) | ||||
|   | ||||
| @@ -540,12 +540,12 @@ public class WatermelonNinja extends LongTimeEvent | ||||
| 			{ | ||||
| 				case 13271: // Watermelon Seed | ||||
| 				{ | ||||
| 					randomSpawn(13274, 13273, 13272, npc, true); | ||||
| 					randomSpawn(13274, 13273, 13272, npc); | ||||
| 					break; | ||||
| 				} | ||||
| 				case 13275: // Honey Watermelon Seed | ||||
| 				{ | ||||
| 					randomSpawn(13278, 13277, 13276, npc, true); | ||||
| 					randomSpawn(13278, 13277, 13276, npc); | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| @@ -575,20 +575,10 @@ public class WatermelonNinja extends LongTimeEvent | ||||
| 		final int chance = Rnd.get(100); | ||||
| 		for (int[] drop : DROPLIST) | ||||
| 		{ | ||||
| 			if (npcId == drop[0]) | ||||
| 			if ((npcId == drop[0]) && (chance < drop[2])) | ||||
| 			{ | ||||
| 				if (chance < drop[2]) | ||||
| 				{ | ||||
| 					if (drop[1] > 6000) | ||||
| 					{ | ||||
| 						((MonsterInstance) mob).dropItem(player, drop[1], 1); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						((MonsterInstance) mob).dropItem(player, drop[1], 1); | ||||
| 					} | ||||
| 					continue; | ||||
| 				} | ||||
| 				((MonsterInstance) mob).dropItem(player, drop[1], 1); | ||||
| 				continue; | ||||
| 			} | ||||
| 			if (npcId < drop[0]) | ||||
| 			{ | ||||
| @@ -597,18 +587,18 @@ public class WatermelonNinja extends LongTimeEvent | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void randomSpawn(int low, int medium, int high, Npc npc, boolean delete) | ||||
| 	private void randomSpawn(int low, int medium, int high, Npc npc) | ||||
| 	{ | ||||
| 		final int _random = Rnd.get(100); | ||||
| 		if (_random < 5) | ||||
| 		final int random = Rnd.get(100); | ||||
| 		if (random < 5) | ||||
| 		{ | ||||
| 			spawnNext(low, npc); | ||||
| 		} | ||||
| 		if (_random < 10) | ||||
| 		if (random < 10) | ||||
| 		{ | ||||
| 			spawnNext(medium, npc); | ||||
| 		} | ||||
| 		else if (_random < 30) | ||||
| 		else if (random < 30) | ||||
| 		{ | ||||
| 			spawnNext(high, npc); | ||||
| 		} | ||||
|   | ||||
| @@ -144,7 +144,7 @@ public class EffectMasterHandler | ||||
| 		EffectHandler.getInstance().registerHandler("FatalBlowRate", FatalBlowRate::new); | ||||
| 		EffectHandler.getInstance().registerHandler("Fear", Fear::new); | ||||
| 		EffectHandler.getInstance().registerHandler("Feed", Feed::new); | ||||
|         EffectHandler.getInstance().registerHandler("FishingExpSpBonus", FishingExpSpBonus::new); | ||||
| 		EffectHandler.getInstance().registerHandler("FishingExpSpBonus", FishingExpSpBonus::new); | ||||
| 		EffectHandler.getInstance().registerHandler("Flag", Flag::new); | ||||
| 		EffectHandler.getInstance().registerHandler("FlipBlock", FlipBlock::new); | ||||
| 		EffectHandler.getInstance().registerHandler("FocusEnergy", FocusEnergy::new); | ||||
|   | ||||
| @@ -732,7 +732,6 @@ public class MasterHandler | ||||
| 				catch (Exception e) | ||||
| 				{ | ||||
| 					LOGGER.log(Level.WARNING, "Failed loading handler: " + c.getSimpleName(), e); | ||||
| 					continue; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -176,9 +176,9 @@ public class AdminBuffs implements IAdminCommandHandler | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				StringTokenizer st = new StringTokenizer(command, " "); | ||||
| 				final StringTokenizer st = new StringTokenizer(command, " "); | ||||
| 				st.nextToken(); | ||||
| 				int objectId = Integer.parseInt(st.nextToken()); | ||||
| 				final int objectId = Integer.parseInt(st.nextToken()); | ||||
| 				viewBlockedEffects(activeChar, objectId); | ||||
| 				return true; | ||||
| 			} | ||||
| @@ -362,6 +362,7 @@ public class AdminBuffs implements IAdminCommandHandler | ||||
| 		} | ||||
| 		catch (Exception e) | ||||
| 		{ | ||||
| 			// Checked bellow. | ||||
| 		} | ||||
| 		 | ||||
| 		if ((target != null) && (skillId > 0)) | ||||
| @@ -389,6 +390,7 @@ public class AdminBuffs implements IAdminCommandHandler | ||||
| 		} | ||||
| 		catch (Exception e) | ||||
| 		{ | ||||
| 			// Checked bellow. | ||||
| 		} | ||||
| 		 | ||||
| 		if (target != null) | ||||
|   | ||||
| @@ -120,7 +120,7 @@ public class AdminInstanceZone implements IAdminCommandHandler | ||||
| 		{ | ||||
| 			int hours = 0; | ||||
| 			int minutes = 0; | ||||
| 			int id = entry.getKey(); | ||||
| 			final int id = entry.getKey(); | ||||
| 			final long remainingTime = (entry.getValue() - System.currentTimeMillis()) / 1000; | ||||
| 			if (remainingTime > 0) | ||||
| 			{ | ||||
|   | ||||
| @@ -30,8 +30,8 @@ import org.l2jmobius.gameserver.network.SystemMessageId; | ||||
| import org.l2jmobius.gameserver.util.BuilderUtil; | ||||
|  | ||||
| /** | ||||
|  * This class handles following admin commands: - kill = kills target Creature - kill_monster = kills target non-player - kill <radius> = If radius is specified, then ALL players only in that radius will be killed. - kill_monster <radius> = If radius is specified, then ALL non-players only in | ||||
|  * that radius will be killed. | ||||
|  * This class handles following admin commands: - kill = kills target Creature - kill_monster = kills target non-player - kill <radius> = If radius is specified, then ALL players only in that radius will be killed. - kill_monster <radius> = If radius is specified, then ALL non-players only in that | ||||
|  * radius will be killed. | ||||
|  * @version $Revision: 1.2.4.5 $ $Date: 2007/07/31 10:06:06 $ | ||||
|  */ | ||||
| public class AdminKill implements IAdminCommandHandler | ||||
|   | ||||
| @@ -316,7 +316,7 @@ public class AdminQuest implements IAdminCommandHandler | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
| 				else if (n.isDirectory()) | ||||
| 				if (n.isDirectory()) | ||||
| 				{ | ||||
| 					sb.append("<a action=\"bypass -h admin_script_dir " + c + "\">" + c + "</a><br1>"); | ||||
| 				} | ||||
| @@ -348,7 +348,7 @@ public class AdminQuest implements IAdminCommandHandler | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
| 				else if (n.isDirectory()) | ||||
| 				if (n.isDirectory()) | ||||
| 				{ | ||||
| 					sb.append("<a action=\"bypass -h admin_script_dir " + currentPath + "/" + c + "\">" + (questReducedNames ? getQuestName(c) : c) + "</a><br1>"); | ||||
| 				} | ||||
|   | ||||
| @@ -69,7 +69,7 @@ public class AdminShop implements IAdminCommandHandler | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				int listId = Integer.parseInt(command.substring(16).trim()); | ||||
| 				final int listId = Integer.parseInt(command.substring(16).trim()); | ||||
| 				MultisellData.getInstance().separateAndSend(listId, activeChar, null, false); | ||||
| 			} | ||||
| 			catch (NumberFormatException | IndexOutOfBoundsException e) | ||||
| @@ -81,7 +81,7 @@ public class AdminShop implements IAdminCommandHandler | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				int listId = Integer.parseInt(command.substring(20).trim()); | ||||
| 				final int listId = Integer.parseInt(command.substring(20).trim()); | ||||
| 				MultisellData.getInstance().separateAndSend(listId, activeChar, null, true); | ||||
| 			} | ||||
| 			catch (NumberFormatException | IndexOutOfBoundsException e) | ||||
|   | ||||
| @@ -101,6 +101,7 @@ public class AdminSkill implements IAdminCommandHandler | ||||
| 			} | ||||
| 			catch (StringIndexOutOfBoundsException e) | ||||
| 			{ | ||||
| 				// Not important. | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_skill_list")) | ||||
| @@ -116,6 +117,7 @@ public class AdminSkill implements IAdminCommandHandler | ||||
| 			} | ||||
| 			catch (StringIndexOutOfBoundsException e) | ||||
| 			{ | ||||
| 				// Not important. | ||||
| 			} | ||||
| 		} | ||||
| 		else if (command.startsWith("admin_add_skill")) | ||||
|   | ||||
| @@ -84,7 +84,7 @@ public class FindPvP implements IBypassHandler | ||||
| 			// Check if the player's clan is already outnumbering the PvP | ||||
| 			if (player.getClan() != null) | ||||
| 			{ | ||||
| 				Map<Integer, Integer> clanNumbers = new HashMap<>(); | ||||
| 				final Map<Integer, Integer> clanNumbers = new HashMap<>(); | ||||
| 				int allyId = player.getAllyId(); | ||||
| 				if (allyId == 0) | ||||
| 				{ | ||||
|   | ||||
| @@ -33,7 +33,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ExItemAuctionInfoPacket; | ||||
|  | ||||
| public class ItemAuctionLink implements IBypassHandler | ||||
| { | ||||
| 	private static final SimpleDateFormat fmt = new SimpleDateFormat("HH:mm:ss dd.MM.yyyy"); | ||||
| 	private static final SimpleDateFormat SDF = new SimpleDateFormat("HH:mm:ss dd.MM.yyyy"); | ||||
| 	 | ||||
| 	private static final String[] COMMANDS = | ||||
| 	{ | ||||
| @@ -91,7 +91,7 @@ public class ItemAuctionLink implements IBypassHandler | ||||
| 					 | ||||
| 					if (nextAuction != null) | ||||
| 					{ | ||||
| 						player.sendMessage("The next auction will begin on the " + fmt.format(new Date(nextAuction.getStartingTime())) + "."); | ||||
| 						player.sendMessage("The next auction will begin on the " + SDF.format(new Date(nextAuction.getStartingTime())) + "."); | ||||
| 					} | ||||
| 					return true; | ||||
| 				} | ||||
|   | ||||
| @@ -408,7 +408,7 @@ public class NpcViewMod implements IBypassHandler | ||||
| 		{ | ||||
| 			final StringBuilder sb = new StringBuilder(); | ||||
| 			 | ||||
| 			int height = 64; | ||||
| 			final int height = 64; | ||||
| 			final DropHolder dropItem = dropList.get(i); | ||||
| 			final Item item = ItemTable.getInstance().getTemplate(dropItem.getItemId()); | ||||
| 			 | ||||
|   | ||||
| @@ -38,22 +38,19 @@ public class ChatPartyRoomAll implements IChatHandler | ||||
| 	@Override | ||||
| 	public void handleChat(ChatType type, PlayerInstance activeChar, String target, String text) | ||||
| 	{ | ||||
| 		if (activeChar.isInParty()) | ||||
| 		if (activeChar.isInParty() && activeChar.getParty().isInCommandChannel() && activeChar.getParty().isLeader(activeChar)) | ||||
| 		{ | ||||
| 			if (activeChar.getParty().isInCommandChannel() && activeChar.getParty().isLeader(activeChar)) | ||||
| 			if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type)) | ||||
| 			{ | ||||
| 				if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type)) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED_IF_YOU_TRY_TO_CHAT_BEFORE_THE_PROHIBITION_IS_REMOVED_THE_PROHIBITION_TIME_WILL_INCREASE_EVEN_FURTHER); | ||||
| 					return; | ||||
| 				} | ||||
| 				if (Config.JAIL_DISABLE_CHAT && activeChar.isJailed() && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED); | ||||
| 					return; | ||||
| 				} | ||||
| 				activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text), activeChar); | ||||
| 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED_IF_YOU_TRY_TO_CHAT_BEFORE_THE_PROHIBITION_IS_REMOVED_THE_PROHIBITION_TIME_WILL_INCREASE_EVEN_FURTHER); | ||||
| 				return; | ||||
| 			} | ||||
| 			if (Config.JAIL_DISABLE_CHAT && activeChar.isJailed() && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)) | ||||
| 			{ | ||||
| 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED); | ||||
| 				return; | ||||
| 			} | ||||
| 			activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text), activeChar); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
|   | ||||
| @@ -38,22 +38,19 @@ public class ChatPartyRoomCommander implements IChatHandler | ||||
| 	@Override | ||||
| 	public void handleChat(ChatType type, PlayerInstance activeChar, String target, String text) | ||||
| 	{ | ||||
| 		if (activeChar.isInParty()) | ||||
| 		if (activeChar.isInParty() && activeChar.getParty().isInCommandChannel() && activeChar.getParty().getCommandChannel().getLeader().equals(activeChar)) | ||||
| 		{ | ||||
| 			if (activeChar.getParty().isInCommandChannel() && activeChar.getParty().getCommandChannel().getLeader().equals(activeChar)) | ||||
| 			if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type)) | ||||
| 			{ | ||||
| 				if (activeChar.isChatBanned() && Config.BAN_CHAT_CHANNELS.contains(type)) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED_IF_YOU_TRY_TO_CHAT_BEFORE_THE_PROHIBITION_IS_REMOVED_THE_PROHIBITION_TIME_WILL_INCREASE_EVEN_FURTHER); | ||||
| 					return; | ||||
| 				} | ||||
| 				if (Config.JAIL_DISABLE_CHAT && activeChar.isJailed() && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)) | ||||
| 				{ | ||||
| 					activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED); | ||||
| 					return; | ||||
| 				} | ||||
| 				activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text), activeChar); | ||||
| 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED_IF_YOU_TRY_TO_CHAT_BEFORE_THE_PROHIBITION_IS_REMOVED_THE_PROHIBITION_TIME_WILL_INCREASE_EVEN_FURTHER); | ||||
| 				return; | ||||
| 			} | ||||
| 			if (Config.JAIL_DISABLE_CHAT && activeChar.isJailed() && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS)) | ||||
| 			{ | ||||
| 				activeChar.sendPacket(SystemMessageId.CHATTING_IS_CURRENTLY_PROHIBITED); | ||||
| 				return; | ||||
| 			} | ||||
| 			activeChar.getParty().getCommandChannel().broadcastCreatureSay(new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text), activeChar); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
|   | ||||
| @@ -143,38 +143,38 @@ public class DropSearchBoard implements IParseBoardHandler | ||||
| 	public boolean parseCommunityBoardCommand(String command, PlayerInstance player) | ||||
| 	{ | ||||
| 		final String navigation = HtmCache.getInstance().getHtm(player, NAVIGATION_PATH); | ||||
| 		String[] params = command.split(" "); | ||||
| 		final String[] params = command.split(" "); | ||||
| 		String html = HtmCache.getInstance().getHtm(player, "data/html/CommunityBoard/Custom/dropsearch/main.html"); | ||||
| 		switch (params[0]) | ||||
| 		{ | ||||
| 			case "_bbs_search_item": | ||||
| 			{ | ||||
| 				String itemName = buildItemName(params); | ||||
| 				String result = buildItemSearchResult(itemName); | ||||
| 				final String itemName = buildItemName(params); | ||||
| 				final String result = buildItemSearchResult(itemName); | ||||
| 				html = html.replace("%searchResult%", result); | ||||
| 				break; | ||||
| 			} | ||||
| 			case "_bbs_search_drop": | ||||
| 			{ | ||||
| 				final DecimalFormat chanceFormat = new DecimalFormat("0.00##"); | ||||
| 				int itemId = Integer.parseInt(params[1]); | ||||
| 				final int itemId = Integer.parseInt(params[1]); | ||||
| 				int page = Integer.parseInt(params[2]); | ||||
| 				List<CBDropHolder> list = DROP_INDEX_CACHE.get(itemId); | ||||
| 				final List<CBDropHolder> list = DROP_INDEX_CACHE.get(itemId); | ||||
| 				int pages = list.size() / 14; | ||||
| 				if (pages == 0) | ||||
| 				{ | ||||
| 					pages++; | ||||
| 				} | ||||
| 				 | ||||
| 				int start = (page - 1) * 14; | ||||
| 				int end = Math.min(list.size() - 1, start + 14); | ||||
| 				StringBuilder builder = new StringBuilder(); | ||||
| 				final int start = (page - 1) * 14; | ||||
| 				final int end = Math.min(list.size() - 1, start + 14); | ||||
| 				final StringBuilder builder = new StringBuilder(); | ||||
| 				final double dropAmountEffectBonus = player.getStat().getValue(Stats.BONUS_DROP_AMOUNT, 1); | ||||
| 				final double dropRateEffectBonus = player.getStat().getValue(Stats.BONUS_DROP_RATE, 1); | ||||
| 				final double spoilRateEffectBonus = player.getStat().getValue(Stats.BONUS_SPOIL_RATE, 1); | ||||
| 				for (int index = start; index <= end; index++) | ||||
| 				{ | ||||
| 					CBDropHolder cbDropHolder = list.get(index); | ||||
| 					final CBDropHolder cbDropHolder = list.get(index); | ||||
| 					 | ||||
| 					// real time server rate calculations | ||||
| 					double rateChance = 1; | ||||
| @@ -299,15 +299,15 @@ public class DropSearchBoard implements IParseBoardHandler | ||||
| 			} | ||||
| 			case "_bbs_npc_trace": | ||||
| 			{ | ||||
| 				int npcId = Integer.parseInt(params[1]); | ||||
| 				List<NpcSpawnTemplate> spawnList = SpawnsData.getInstance().getNpcSpawns(npc -> npc.getId() == npcId); | ||||
| 				final int npcId = Integer.parseInt(params[1]); | ||||
| 				final List<NpcSpawnTemplate> spawnList = SpawnsData.getInstance().getNpcSpawns(npc -> npc.getId() == npcId); | ||||
| 				if (spawnList.isEmpty()) | ||||
| 				{ | ||||
| 					player.sendMessage("Cannot find any spawn. Maybe dropped by a boss or instance monster."); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					NpcSpawnTemplate spawn = spawnList.get(Rnd.get(spawnList.size())); | ||||
| 					final NpcSpawnTemplate spawn = spawnList.get(Rnd.get(spawnList.size())); | ||||
| 					player.getRadar().addMarker(spawn.getSpawnLocation().getX(), spawn.getSpawnLocation().getY(), spawn.getSpawnLocation().getZ()); | ||||
| 				} | ||||
| 				break; | ||||
| @@ -330,8 +330,8 @@ public class DropSearchBoard implements IParseBoardHandler | ||||
| 	private String buildItemSearchResult(String itemName) | ||||
| 	{ | ||||
| 		int limit = 0; | ||||
| 		Set<Integer> existInDropData = DROP_INDEX_CACHE.keySet(); | ||||
| 		List<Item> items = new ArrayList<>(); | ||||
| 		final Set<Integer> existInDropData = DROP_INDEX_CACHE.keySet(); | ||||
| 		final List<Item> items = new ArrayList<>(); | ||||
| 		for (Item item : ItemTable.getInstance().getAllItems()) | ||||
| 		{ | ||||
| 			if (item == null) | ||||
| @@ -363,7 +363,7 @@ public class DropSearchBoard implements IParseBoardHandler | ||||
| 		 | ||||
| 		int line = 0; | ||||
| 		 | ||||
| 		StringBuilder builder = new StringBuilder(items.size() * 28); | ||||
| 		final StringBuilder builder = new StringBuilder(items.size() * 28); | ||||
| 		int i = 0; | ||||
| 		for (Item item : items) | ||||
| 		{ | ||||
| @@ -416,7 +416,7 @@ public class DropSearchBoard implements IParseBoardHandler | ||||
| 	 */ | ||||
| 	private String buildItemName(String[] params) | ||||
| 	{ | ||||
| 		StringJoiner joiner = new StringJoiner(" "); | ||||
| 		final StringJoiner joiner = new StringJoiner(" "); | ||||
| 		for (int i = 1; i < params.length; i++) | ||||
| 		{ | ||||
| 			joiner.add(params[i]); | ||||
|   | ||||
| @@ -99,7 +99,7 @@ public class HomeBoard implements IParseBoardHandler | ||||
| 	@Override | ||||
| 	public String[] getCommunityBoardCommands() | ||||
| 	{ | ||||
| 		List<String> commands = new ArrayList<>(); | ||||
| 		final List<String> commands = new ArrayList<>(); | ||||
| 		commands.addAll(Arrays.asList(COMMANDS)); | ||||
| 		commands.addAll(Arrays.asList(CUSTOM_COMMANDS)); | ||||
| 		return commands.stream().filter(Objects::nonNull).toArray(String[]::new); | ||||
| @@ -201,7 +201,7 @@ public class HomeBoard implements IParseBoardHandler | ||||
| 			{ | ||||
| 				player.destroyItemByItemId("CB_Buff", Config.COMMUNITYBOARD_CURRENCY, Config.COMMUNITYBOARD_BUFF_PRICE * buffCount, player, true); | ||||
| 				final PetInstance pet = player.getPet(); | ||||
| 				List<Creature> targets = new ArrayList<>(4); | ||||
| 				final List<Creature> targets = new ArrayList<>(4); | ||||
| 				targets.add(player); | ||||
| 				if (pet != null) | ||||
| 				{ | ||||
|   | ||||
| @@ -38,7 +38,7 @@ public class DispelBySlotMyself extends AbstractEffect | ||||
| 	 | ||||
| 	public DispelBySlotMyself(StatsSet params) | ||||
| 	{ | ||||
| 		String dispel = params.getString("dispel"); | ||||
| 		final String dispel = params.getString("dispel"); | ||||
| 		if ((dispel != null) && !dispel.isEmpty()) | ||||
| 		{ | ||||
| 			_dispelAbnormals = new HashSet<>(); | ||||
|   | ||||
| @@ -51,7 +51,7 @@ public class FatalBlow extends AbstractEffect | ||||
| 		_criticalChance = params.getDouble("criticalChance", 0); | ||||
| 		_overHit = params.getBoolean("overHit", false); | ||||
| 		 | ||||
| 		String abnormals = params.getString("abnormalType", null); | ||||
| 		final String abnormals = params.getString("abnormalType", null); | ||||
| 		if ((abnormals != null) && !abnormals.isEmpty()) | ||||
| 		{ | ||||
| 			_abnormals = new HashSet<>(); | ||||
|   | ||||
| @@ -87,7 +87,7 @@ public class RebalanceHP extends AbstractEffect | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			double percentHP = currentHPs / fullHP; | ||||
| 			final double percentHP = currentHPs / fullHP; | ||||
| 			for (PlayerInstance member : party.getMembers()) | ||||
| 			{ | ||||
| 				if (!member.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, member, true)) | ||||
|   | ||||
| @@ -70,7 +70,7 @@ public class RebalanceHPSummon extends AbstractEffect | ||||
| 		fullHP += effector.getMaxHp(); | ||||
| 		currentHPs += effector.getCurrentHp(); | ||||
| 		 | ||||
| 		double percentHP = currentHPs / fullHP; | ||||
| 		final double percentHP = currentHPs / fullHP; | ||||
| 		for (Summon summon : effector.getServitors().values()) | ||||
| 		{ | ||||
| 			if (!summon.isDead() && Util.checkIfInRange(skill.getAffectRange(), effector, summon, true)) | ||||
|   | ||||
| @@ -109,7 +109,7 @@ public class RestorationRandom extends AbstractEffect | ||||
| 				continue; | ||||
| 			} | ||||
| 			 | ||||
| 			long itemCount = (long) (createdItem.getCount() * Config.RATE_EXTRACTABLE); | ||||
| 			final long itemCount = (long) (createdItem.getCount() * Config.RATE_EXTRACTABLE); | ||||
| 			final ItemInstance newItem = player.addItem("Extract", createdItem.getId(), itemCount, effector, false); | ||||
| 			 | ||||
| 			if (createdItem.getMaxEnchant() > 0) | ||||
|   | ||||
| @@ -88,17 +88,14 @@ public class Enemy implements ITargetTypeHandler | ||||
| 		if (target.isAutoAttackable(creature) || forceUse) | ||||
| 		{ | ||||
| 			// Check for cast range if character cannot move. TODO: char will start follow until within castrange, but if his moving is blocked by geodata, this msg will be sent. | ||||
| 			if (dontMove) | ||||
| 			if (dontMove && (creature.calculateDistance2D(target) > skill.getCastRange())) | ||||
| 			{ | ||||
| 				if (creature.calculateDistance2D(target) > skill.getCastRange()) | ||||
| 				if (sendMessage) | ||||
| 				{ | ||||
| 					if (sendMessage) | ||||
| 					{ | ||||
| 						creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 					} | ||||
| 					 | ||||
| 					return null; | ||||
| 					creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 				} | ||||
| 				 | ||||
| 				return null; | ||||
| 			} | ||||
| 			 | ||||
| 			// Geodata check when character is within range. | ||||
| @@ -124,17 +121,14 @@ public class Enemy implements ITargetTypeHandler | ||||
| 			} | ||||
| 			 | ||||
| 			// Is this check still actual? | ||||
| 			if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) | ||||
| 			if (forceUse && (target.getActingPlayer() != null) && (creature.getActingPlayer() != null) && creature.getActingPlayer().isSiegeFriend(target)) | ||||
| 			{ | ||||
| 				if (creature.getActingPlayer().isSiegeFriend(target)) | ||||
| 				if (sendMessage) | ||||
| 				{ | ||||
| 					if (sendMessage) | ||||
| 					{ | ||||
| 						creature.sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); | ||||
| 					} | ||||
| 					 | ||||
| 					return null; | ||||
| 					creature.sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); | ||||
| 				} | ||||
| 				 | ||||
| 				return null; | ||||
| 			} | ||||
| 			 | ||||
| 			return target; | ||||
|   | ||||
| @@ -60,17 +60,14 @@ public class EnemyNot implements ITargetTypeHandler | ||||
| 		if (!target.isAutoAttackable(creature)) | ||||
| 		{ | ||||
| 			// Check for cast range if character cannot move. TODO: char will start follow until within castrange, but if his moving is blocked by geodata, this msg will be sent. | ||||
| 			if (dontMove) | ||||
| 			if (dontMove && (creature.calculateDistance2D(target) > skill.getCastRange())) | ||||
| 			{ | ||||
| 				if (creature.calculateDistance2D(target) > skill.getCastRange()) | ||||
| 				if (sendMessage) | ||||
| 				{ | ||||
| 					if (sendMessage) | ||||
| 					{ | ||||
| 						creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 					} | ||||
| 					 | ||||
| 					return null; | ||||
| 					creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 				} | ||||
| 				 | ||||
| 				return null; | ||||
| 			} | ||||
| 			 | ||||
| 			if ((skill.isFlyType()) && !GeoEngine.getInstance().canMoveToTarget(creature.getX(), creature.getY(), creature.getZ(), target.getX(), target.getY(), target.getZ(), creature.getInstanceWorld())) | ||||
|   | ||||
| @@ -88,17 +88,14 @@ public class EnemyOnly implements ITargetTypeHandler | ||||
| 		if (target.isAutoAttackable(creature)) | ||||
| 		{ | ||||
| 			// Check for cast range if character cannot move. TODO: char will start follow until within castrange, but if his moving is blocked by geodata, this msg will be sent. | ||||
| 			if (dontMove) | ||||
| 			if (dontMove && (creature.calculateDistance2D(target) > skill.getCastRange())) | ||||
| 			{ | ||||
| 				if (creature.calculateDistance2D(target) > skill.getCastRange()) | ||||
| 				if (sendMessage) | ||||
| 				{ | ||||
| 					if (sendMessage) | ||||
| 					{ | ||||
| 						creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 					} | ||||
| 					 | ||||
| 					return null; | ||||
| 					creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 				} | ||||
| 				 | ||||
| 				return null; | ||||
| 			} | ||||
| 			 | ||||
| 			// Geodata check when character is within range. | ||||
| @@ -124,17 +121,14 @@ public class EnemyOnly implements ITargetTypeHandler | ||||
| 			} | ||||
| 			 | ||||
| 			// Is this check still actual? | ||||
| 			if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null)) | ||||
| 			if ((target.getActingPlayer() != null) && (creature.getActingPlayer() != null) && creature.getActingPlayer().isSiegeFriend(target)) | ||||
| 			{ | ||||
| 				if (creature.getActingPlayer().isSiegeFriend(target)) | ||||
| 				if (sendMessage) | ||||
| 				{ | ||||
| 					if (sendMessage) | ||||
| 					{ | ||||
| 						creature.sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); | ||||
| 					} | ||||
| 					 | ||||
| 					return null; | ||||
| 					creature.sendPacket(SystemMessageId.FORCE_ATTACK_IS_IMPOSSIBLE_AGAINST_A_TEMPORARY_ALLIED_MEMBER_DURING_A_SIEGE); | ||||
| 				} | ||||
| 				 | ||||
| 				return null; | ||||
| 			} | ||||
| 			 | ||||
| 			return target; | ||||
|   | ||||
| @@ -63,16 +63,13 @@ public class NpcBody implements ITargetTypeHandler | ||||
| 		if (target.isDead()) | ||||
| 		{ | ||||
| 			// Check for cast range if character cannot move. TODO: char will start follow until within castrange, but if his moving is blocked by geodata, this msg will be sent. | ||||
| 			if (dontMove) | ||||
| 			if (dontMove && (creature.calculateDistance2D(target) > skill.getCastRange())) | ||||
| 			{ | ||||
| 				if (creature.calculateDistance2D(target) > skill.getCastRange()) | ||||
| 				if (sendMessage) | ||||
| 				{ | ||||
| 					if (sendMessage) | ||||
| 					{ | ||||
| 						creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 					} | ||||
| 					return null; | ||||
| 					creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 				} | ||||
| 				return null; | ||||
| 			} | ||||
| 			 | ||||
| 			// Geodata check when character is within range. | ||||
|   | ||||
| @@ -93,17 +93,14 @@ public class PcBody implements ITargetTypeHandler | ||||
| 			} | ||||
| 			 | ||||
| 			// Check for cast range if character cannot move. TODO: char will start follow until within castrange, but if his moving is blocked by geodata, this msg will be sent. | ||||
| 			if (dontMove) | ||||
| 			if (dontMove && (creature.calculateDistance2D(target) > skill.getCastRange())) | ||||
| 			{ | ||||
| 				if (creature.calculateDistance2D(target) > skill.getCastRange()) | ||||
| 				if (sendMessage) | ||||
| 				{ | ||||
| 					if (sendMessage) | ||||
| 					{ | ||||
| 						creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 					} | ||||
| 					 | ||||
| 					return null; | ||||
| 					creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 				} | ||||
| 				 | ||||
| 				return null; | ||||
| 			} | ||||
| 			 | ||||
| 			// Geodata check when character is within range. | ||||
|   | ||||
| @@ -62,17 +62,14 @@ public class Target implements ITargetTypeHandler | ||||
| 		} | ||||
| 		 | ||||
| 		// Check for cast range if character cannot move. TODO: char will start follow until within castrange, but if his moving is blocked by geodata, this msg will be sent. | ||||
| 		if (dontMove) | ||||
| 		if (dontMove && (creature.calculateDistance2D(target) > skill.getCastRange())) | ||||
| 		{ | ||||
| 			if (creature.calculateDistance2D(target) > skill.getCastRange()) | ||||
| 			if (sendMessage) | ||||
| 			{ | ||||
| 				if (sendMessage) | ||||
| 				{ | ||||
| 					creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 				} | ||||
| 				 | ||||
| 				return null; | ||||
| 				creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED); | ||||
| 			} | ||||
| 			 | ||||
| 			return null; | ||||
| 		} | ||||
| 		 | ||||
| 		if (skill.isFlyType() && !GeoEngine.getInstance().canMoveToTarget(creature.getX(), creature.getY(), creature.getZ(), target.getX(), target.getY(), target.getZ(), creature.getInstanceWorld())) | ||||
|   | ||||
| @@ -198,51 +198,48 @@ public class MonsterArena extends AbstractInstance | ||||
| 			case "supply_reward": | ||||
| 			{ | ||||
| 				final Instance world = npc.getInstanceWorld(); | ||||
| 				if ((world != null) && (npc.getId() == SUPPLIES) && (player.getLevel() > 39)) | ||||
| 				if ((world != null) && (npc.getId() == SUPPLIES) && (player.getLevel() > 39) && !REWARDED_PLAYERS.contains(player) && npc.isScriptValue(0)) | ||||
| 				{ | ||||
| 					if (!REWARDED_PLAYERS.contains(player) && npc.isScriptValue(0)) | ||||
| 					npc.setScriptValue(1); | ||||
| 					npc.doDie(npc); | ||||
| 					REWARDED_PLAYERS.add(player); | ||||
| 					ThreadPool.schedule(() -> | ||||
| 					{ | ||||
| 						npc.setScriptValue(1); | ||||
| 						npc.doDie(npc); | ||||
| 						REWARDED_PLAYERS.add(player); | ||||
| 						ThreadPool.schedule(() -> | ||||
| 						{ | ||||
| 							REWARDED_PLAYERS.remove(player); | ||||
| 						}, 60000); | ||||
| 						 | ||||
| 						// Mandatory reward. | ||||
| 						final Npc machine = world.getNpc(MACHINE); | ||||
| 						final int progress = GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue()); | ||||
| 						if (progress > 16) | ||||
| 						{ | ||||
| 							giveItems(player, BATTLE_BOX_4, 1); | ||||
| 						} | ||||
| 						else if (progress > 11) | ||||
| 						{ | ||||
| 							giveItems(player, BATTLE_BOX_3, 1); | ||||
| 						} | ||||
| 						else if (progress > 6) | ||||
| 						{ | ||||
| 							giveItems(player, BATTLE_BOX_2, 1); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							giveItems(player, BATTLE_BOX_1, 1); | ||||
| 						} | ||||
| 						 | ||||
| 						// Rare reward. | ||||
| 						if (getRandom(100) < 1) // 1% chance. | ||||
| 						{ | ||||
| 							giveItems(player, TICKET_L, 1); | ||||
| 						} | ||||
| 						else if (getRandom(100) < 1) // 1% chance. | ||||
| 						{ | ||||
| 							giveItems(player, TICKET_M, 1); | ||||
| 						} | ||||
| 						else if (getRandom(100) < 1) // 1% chance. | ||||
| 						{ | ||||
| 							giveItems(player, TICKET_H, 1); | ||||
| 						} | ||||
| 						REWARDED_PLAYERS.remove(player); | ||||
| 					}, 60000); | ||||
| 					 | ||||
| 					// Mandatory reward. | ||||
| 					final Npc machine = world.getNpc(MACHINE); | ||||
| 					final int progress = GlobalVariablesManager.getInstance().getInt(MONSTER_ARENA_VARIABLE + machine.getScriptValue()); | ||||
| 					if (progress > 16) | ||||
| 					{ | ||||
| 						giveItems(player, BATTLE_BOX_4, 1); | ||||
| 					} | ||||
| 					else if (progress > 11) | ||||
| 					{ | ||||
| 						giveItems(player, BATTLE_BOX_3, 1); | ||||
| 					} | ||||
| 					else if (progress > 6) | ||||
| 					{ | ||||
| 						giveItems(player, BATTLE_BOX_2, 1); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						giveItems(player, BATTLE_BOX_1, 1); | ||||
| 					} | ||||
| 					 | ||||
| 					// Rare reward. | ||||
| 					if (getRandom(100) < 1) // 1% chance. | ||||
| 					{ | ||||
| 						giveItems(player, TICKET_L, 1); | ||||
| 					} | ||||
| 					else if (getRandom(100) < 1) // 1% chance. | ||||
| 					{ | ||||
| 						giveItems(player, TICKET_M, 1); | ||||
| 					} | ||||
| 					else if (getRandom(100) < 1) // 1% chance. | ||||
| 					{ | ||||
| 						giveItems(player, TICKET_H, 1); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
|   | ||||
| @@ -180,6 +180,7 @@ public class ResidenceOfQueenNebula extends AbstractInstance | ||||
| 				{ | ||||
| 					world.finishInstance(); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case WATER_SLIME: | ||||
| 			{ | ||||
| @@ -217,6 +218,7 @@ public class ResidenceOfQueenNebula extends AbstractInstance | ||||
| 						skill.applyEffects(player, player); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
|   | ||||
| @@ -163,12 +163,9 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 			{ | ||||
| 				for (Creature charInside : _anakim_zone.getCharactersInside()) | ||||
| 				{ | ||||
| 					if (charInside != null) | ||||
| 					if ((charInside != null) && charInside.isPlayer()) | ||||
| 					{ | ||||
| 						if (charInside.isPlayer()) | ||||
| 						{ | ||||
| 							charInside.teleToLocation(-20185 + getRandom(50), 13476 + getRandom(50), -4901); | ||||
| 						} | ||||
| 						charInside.teleToLocation(-20185 + getRandom(50), 13476 + getRandom(50), -4901); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| @@ -177,12 +174,9 @@ public class SevenSignsRBs extends AbstractInstance | ||||
| 			{ | ||||
| 				for (Creature charInside : _lilith_zone.getCharactersInside()) | ||||
| 				{ | ||||
| 					if (charInside != null) | ||||
| 					if ((charInside != null) && charInside.isPlayer()) | ||||
| 					{ | ||||
| 						if (charInside.isPlayer()) | ||||
| 						{ | ||||
| 							charInside.teleToLocation(171346 + getRandom(50), -17599 + getRandom(50), -4901); | ||||
| 						} | ||||
| 						charInside.teleToLocation(171346 + getRandom(50), -17599 + getRandom(50), -4901); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00070_SagaOfThePhoenixKnight extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00070_SagaOfThePhoenixKnight extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -36,40 +36,40 @@ import org.l2jmobius.gameserver.util.Util; | ||||
| public class Q00071_SagaOfEvasTemplar extends Quest | ||||
| { | ||||
| 	// NPCs | ||||
| 	public final int SINDEN = 30852; | ||||
| 	public final int STEDMIEL = 30692; | ||||
| 	public final int RIFKEN = 34268; | ||||
| 	public final int CERENAS = 31281; | ||||
| 	public final int TABLET_OF_VISION_1 = 31646; | ||||
| 	public final int TABLET_OF_VISION_2 = 31648; | ||||
| 	public final int TABLET_OF_VISION_3 = 31653; | ||||
| 	public final int TABLET_OF_VISION_4 = 31655; | ||||
| 	public final int KNIGHT_KASTIEN = 31638; | ||||
| 	public static final int SINDEN = 30852; | ||||
| 	public static final int STEDMIEL = 30692; | ||||
| 	public static final int RIFKEN = 34268; | ||||
| 	public static final int CERENAS = 31281; | ||||
| 	public static final int TABLET_OF_VISION_1 = 31646; | ||||
| 	public static final int TABLET_OF_VISION_2 = 31648; | ||||
| 	public static final int TABLET_OF_VISION_3 = 31653; | ||||
| 	public static final int TABLET_OF_VISION_4 = 31655; | ||||
| 	public static final int KNIGHT_KASTIEN = 31638; | ||||
| 	// Monsters | ||||
| 	public final int ICE_MONSTER = 27316; | ||||
| 	public final int SPIRIT_OF_A_DROWNED = 27317; | ||||
| 	public final int SOUL_OF_COLD = 27318; | ||||
| 	public final int GHOST_OF_SOLITUDE = 27319; | ||||
| 	public final int FIEND_OF_COLD = 27320; | ||||
| 	public final int SPIRIT_OF_COLD = 27321; | ||||
| 	public final int SPAMPLAND_WATCHMAN = 21650; | ||||
| 	public final int FLAME_DRAKE = 21651; | ||||
| 	public final int FIERY_IFRIT = 21652; | ||||
| 	public final int IKEDIT = 21653; | ||||
| 	public final int GATEKEEPER_OF_THE_HOLY_EDICT = 27215; | ||||
| 	public final int BOUND_ELF_PANACEA = 27287; | ||||
| 	public final int HALISHA_ARCHON = 27219; | ||||
| 	public final int CURSED_KESADEIN = 27279; | ||||
| 	public static final int ICE_MONSTER = 27316; | ||||
| 	public static final int SPIRIT_OF_A_DROWNED = 27317; | ||||
| 	public static final int SOUL_OF_COLD = 27318; | ||||
| 	public static final int GHOST_OF_SOLITUDE = 27319; | ||||
| 	public static final int FIEND_OF_COLD = 27320; | ||||
| 	public static final int SPIRIT_OF_COLD = 27321; | ||||
| 	public static final int SPAMPLAND_WATCHMAN = 21650; | ||||
| 	public static final int FLAME_DRAKE = 21651; | ||||
| 	public static final int FIERY_IFRIT = 21652; | ||||
| 	public static final int IKEDIT = 21653; | ||||
| 	public static final int GATEKEEPER_OF_THE_HOLY_EDICT = 27215; | ||||
| 	public static final int BOUND_ELF_PANACEA = 27287; | ||||
| 	public static final int HALISHA_ARCHON = 27219; | ||||
| 	public static final int CURSED_KESADEIN = 27279; | ||||
| 	// Items | ||||
| 	public final int ICE_CRYSTAL_FRAGMENT = 49805; | ||||
| 	public final int HALISHA_BADGE = 7486; | ||||
| 	public final int RESONANCE_AMULET = 7269; | ||||
| 	public final int RESONANCE_AMULET_2 = 7300; | ||||
| 	public final int RESONANCE_AMULET_3 = 7331; | ||||
| 	public final int RESONANCE_AMULET_4 = 7362; | ||||
| 	public final int PURE_ICE = 7535; | ||||
| 	public static final int ICE_CRYSTAL_FRAGMENT = 49805; | ||||
| 	public static final int HALISHA_BADGE = 7486; | ||||
| 	public static final int RESONANCE_AMULET = 7269; | ||||
| 	public static final int RESONANCE_AMULET_2 = 7300; | ||||
| 	public static final int RESONANCE_AMULET_3 = 7331; | ||||
| 	public static final int RESONANCE_AMULET_4 = 7362; | ||||
| 	public static final int PURE_ICE = 7535; | ||||
| 	// Reward | ||||
| 	public final int BOOK_PEGASUS = 90039; | ||||
| 	public static final int BOOK_PEGASUS = 90039; | ||||
| 	// Misc | ||||
| 	private static final String KILL_COUNT_VAR = "KillCount"; | ||||
| 	 | ||||
| @@ -447,12 +447,9 @@ public class Q00071_SagaOfEvasTemplar extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00071_SagaOfEvasTemplar extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00072_SagaOfTheSwordMuse extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00072_SagaOfTheSwordMuse extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00073_SagaOfTheDuelist extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00073_SagaOfTheDuelist extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00074_SagaOfTheDreadnought extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00074_SagaOfTheDreadnought extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -57,7 +57,7 @@ public class Q00075_SagaOfTheTitan extends Quest | ||||
| 	private static final int FIERY_IFRIT = 21652; | ||||
| 	private static final int IKEDIT = 21653; | ||||
| 	private static final int WATCHER_OF_THE_ANCIENT_PLEDGE = 27216; | ||||
| 	private static final int FALLEN_NOBLE_ORC__MUHAKR = 27292; | ||||
| 	private static final int FALLEN_NOBLE_ORC_MUHAKR = 27292; | ||||
| 	private static final int HALISHA_ARCHON = 27219; | ||||
| 	private static final int GRANPAPA_ASKALIUS = 27283; | ||||
| 	// Items | ||||
| @@ -78,7 +78,7 @@ public class Q00075_SagaOfTheTitan extends Quest | ||||
| 		super(75); | ||||
| 		addStartNpc(LADANZA); | ||||
| 		addTalkId(LADANZA, GARVARENTZ, RIFKEN, LAZENBY, SAKE_DUN_ZU_HESTUI, TABLET_OF_VISION_1, TABLET_OF_VISION_2, TABLET_OF_VISION_3, TABLET_OF_VISION_4); | ||||
| 		addKillId(ICE_MONSTER, SPIRIT_OF_A_DROWNED, SOUL_OF_COLD, GHOST_OF_SOLITUDE, FIEND_OF_COLD, SPIRIT_OF_COLD, SPAMPLAND_WATCHMAN, FLAME_DRAKE, FIERY_IFRIT, IKEDIT, WATCHER_OF_THE_ANCIENT_PLEDGE, FALLEN_NOBLE_ORC__MUHAKR, HALISHA_ARCHON, GRANPAPA_ASKALIUS); | ||||
| 		addKillId(ICE_MONSTER, SPIRIT_OF_A_DROWNED, SOUL_OF_COLD, GHOST_OF_SOLITUDE, FIEND_OF_COLD, SPIRIT_OF_COLD, SPAMPLAND_WATCHMAN, FLAME_DRAKE, FIERY_IFRIT, IKEDIT, WATCHER_OF_THE_ANCIENT_PLEDGE, FALLEN_NOBLE_ORC_MUHAKR, HALISHA_ARCHON, GRANPAPA_ASKALIUS); | ||||
| 		registerQuestItems(BITTER_COLD_VODKA, ICE_CRYSTAL_FRAGMENT, HALISHA_BADGE); | ||||
| 		addCondMinLevel(76, "aiken02.htm"); | ||||
| 		addCondClassId(ClassId.DESTROYER, "aiken03.htm"); | ||||
| @@ -157,7 +157,7 @@ public class Q00075_SagaOfTheTitan extends Quest | ||||
| 			{ | ||||
| 				if (qs.isCond(8)) | ||||
| 				{ | ||||
| 					addSpawn(FALLEN_NOBLE_ORC__MUHAKR, npc, true, 0, true); | ||||
| 					addSpawn(FALLEN_NOBLE_ORC_MUHAKR, npc, true, 0, true); | ||||
| 					qs.setCond(9); | ||||
| 				} | ||||
| 				break; | ||||
| @@ -447,16 +447,13 @@ public class Q00075_SagaOfTheTitan extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case FALLEN_NOBLE_ORC__MUHAKR: | ||||
| 				case FALLEN_NOBLE_ORC_MUHAKR: | ||||
| 				{ | ||||
| 					if (qs.isCond(9)) | ||||
| 					{ | ||||
| @@ -469,13 +466,10 @@ public class Q00075_SagaOfTheTitan extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00076_SagaOfTheGrandKhavatari extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00076_SagaOfTheGrandKhavatari extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00077_SagaOfTheDominator extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00077_SagaOfTheDominator extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00078_SagaOfTheDoomcryer extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00078_SagaOfTheDoomcryer extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00079_SagaOfTheAdventurer extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00079_SagaOfTheAdventurer extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00080_SagaOfTheWindRider extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00080_SagaOfTheWindRider extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00081_SagaOfTheGhostHunter extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00081_SagaOfTheGhostHunter extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00082_SagaOfTheSagittarius extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00082_SagaOfTheSagittarius extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00083_SagaOfTheMoonlightSentinel extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00083_SagaOfTheMoonlightSentinel extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00084_SagaOfTheGhostSentinel extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00084_SagaOfTheGhostSentinel extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -457,12 +457,9 @@ public class Q00085_SagaOfTheCardinal extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -479,13 +476,10 @@ public class Q00085_SagaOfTheCardinal extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -457,12 +457,9 @@ public class Q00086_SagaOfTheHierophant extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -479,13 +476,10 @@ public class Q00086_SagaOfTheHierophant extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -36,40 +36,40 @@ import org.l2jmobius.gameserver.util.Util; | ||||
| public class Q00087_SagaOfEvasSaint extends Quest | ||||
| { | ||||
| 	// NPCs | ||||
| 	public final int ORVEN = 30857; | ||||
| 	public final int SERESIN = 30657; | ||||
| 	public final int RIFKEN = 34268; | ||||
| 	public final int VIVIAN = 30859; | ||||
| 	public final int TABLET_OF_VISION_1 = 31646; | ||||
| 	public final int TABLET_OF_VISION_2 = 31648; | ||||
| 	public final int TABLET_OF_VISION_3 = 31650; | ||||
| 	public final int TABLET_OF_VISION_4 = 31655; | ||||
| 	public final int ELIKIA = 31620; | ||||
| 	public static final int ORVEN = 30857; | ||||
| 	public static final int SERESIN = 30657; | ||||
| 	public static final int RIFKEN = 34268; | ||||
| 	public static final int VIVIAN = 30859; | ||||
| 	public static final int TABLET_OF_VISION_1 = 31646; | ||||
| 	public static final int TABLET_OF_VISION_2 = 31648; | ||||
| 	public static final int TABLET_OF_VISION_3 = 31650; | ||||
| 	public static final int TABLET_OF_VISION_4 = 31655; | ||||
| 	public static final int ELIKIA = 31620; | ||||
| 	// Monsters | ||||
| 	public final int ICE_MONSTER = 27316; | ||||
| 	public final int SPIRIT_OF_A_DROWNED = 27317; | ||||
| 	public final int SOUL_OF_COLD = 27318; | ||||
| 	public final int GHOST_OF_SOLITUDE = 27319; | ||||
| 	public final int FIEND_OF_COLD = 27320; | ||||
| 	public final int SPIRIT_OF_COLD = 27321; | ||||
| 	public final int SPAMPLAND_WATCHMAN = 21650; | ||||
| 	public final int FLAME_DRAKE = 21651; | ||||
| 	public final int FIERY_IFRIT = 21652; | ||||
| 	public final int IKEDIT = 21653; | ||||
| 	public final int GATEKEEPER_OF_THE_HOLY_EDICT = 27215; | ||||
| 	public final int FALLEN_ANGEL_NAVERIUS = 27266; | ||||
| 	public final int HALISHA_ARCHON = 27219; | ||||
| 	public final int FALLEN_ANGEL_TANAKIA = 27274; | ||||
| 	public static final int ICE_MONSTER = 27316; | ||||
| 	public static final int SPIRIT_OF_A_DROWNED = 27317; | ||||
| 	public static final int SOUL_OF_COLD = 27318; | ||||
| 	public static final int GHOST_OF_SOLITUDE = 27319; | ||||
| 	public static final int FIEND_OF_COLD = 27320; | ||||
| 	public static final int SPIRIT_OF_COLD = 27321; | ||||
| 	public static final int SPAMPLAND_WATCHMAN = 21650; | ||||
| 	public static final int FLAME_DRAKE = 21651; | ||||
| 	public static final int FIERY_IFRIT = 21652; | ||||
| 	public static final int IKEDIT = 21653; | ||||
| 	public static final int GATEKEEPER_OF_THE_HOLY_EDICT = 27215; | ||||
| 	public static final int FALLEN_ANGEL_NAVERIUS = 27266; | ||||
| 	public static final int HALISHA_ARCHON = 27219; | ||||
| 	public static final int FALLEN_ANGEL_TANAKIA = 27274; | ||||
| 	// Items | ||||
| 	public final int ICE_CRYSTAL_FRAGMENT = 49821; | ||||
| 	public final int HALISHA_BADGE = 7502; | ||||
| 	public final int RESONANCE_AMULET = 7285; | ||||
| 	public final int RESONANCE_AMULET_2 = 7316; | ||||
| 	public final int RESONANCE_AMULET_3 = 7347; | ||||
| 	public final int RESONANCE_AMULET_4 = 7378; | ||||
| 	public final int FOOD_SACK = 49837; | ||||
| 	public static final int ICE_CRYSTAL_FRAGMENT = 49821; | ||||
| 	public static final int HALISHA_BADGE = 7502; | ||||
| 	public static final int RESONANCE_AMULET = 7285; | ||||
| 	public static final int RESONANCE_AMULET_2 = 7316; | ||||
| 	public static final int RESONANCE_AMULET_3 = 7347; | ||||
| 	public static final int RESONANCE_AMULET_4 = 7378; | ||||
| 	public static final int FOOD_SACK = 49837; | ||||
| 	// Reward | ||||
| 	public final int BOOK_PEGASUS = 90039; | ||||
| 	public static final int BOOK_PEGASUS = 90039; | ||||
| 	// Misc | ||||
| 	private static final String KILL_COUNT_VAR = "KillCount"; | ||||
| 	 | ||||
| @@ -447,12 +447,9 @@ public class Q00087_SagaOfEvasSaint extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00087_SagaOfEvasSaint extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00088_SagaOfTheArchmage extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00088_SagaOfTheArchmage extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00089_SagaOfTheMysticMuse extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00089_SagaOfTheMysticMuse extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00090_SagaOfTheStormScreamer extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00090_SagaOfTheStormScreamer extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -457,12 +457,9 @@ public class Q00091_SagaOfTheArcanaLord extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -479,13 +476,10 @@ public class Q00091_SagaOfTheArcanaLord extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00092_SagaOfTheElementalMaster extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00092_SagaOfTheElementalMaster extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00093_SagaOfTheSpectralMaster extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00093_SagaOfTheSpectralMaster extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00094_SagaOfTheSoultaker extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00094_SagaOfTheSoultaker extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -446,12 +446,9 @@ public class Q00095_SagaOfTheHellKnight extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -468,13 +465,10 @@ public class Q00095_SagaOfTheHellKnight extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00096_SagaOfTheSpectralDancer extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00096_SagaOfTheSpectralDancer extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00097_SagaOfTheShillienTemplar extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00097_SagaOfTheShillienTemplar extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -447,12 +447,9 @@ public class Q00098_SagaOfTheShillienSaint extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -469,13 +466,10 @@ public class Q00098_SagaOfTheShillienSaint extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00099_SagaOfTheFortuneSeeker extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00099_SagaOfTheFortuneSeeker extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -444,12 +444,9 @@ public class Q00100_SagaOfTheMaestro extends Quest | ||||
| 				case GHOST_OF_SOLITUDE: | ||||
| 				case SPIRIT_OF_COLD: | ||||
| 				{ | ||||
| 					if (qs.isCond(3)) | ||||
| 					if (qs.isCond(3) && giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, ICE_CRYSTAL_FRAGMENT, 1, 50, 0.5, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4); | ||||
| 						} | ||||
| 						qs.setCond(4); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -466,13 +463,10 @@ public class Q00100_SagaOfTheMaestro extends Quest | ||||
| 				case FIERY_IFRIT: | ||||
| 				case IKEDIT: | ||||
| 				{ | ||||
| 					if (qs.isCond(12)) | ||||
| 					if (qs.isCond(12) && giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, HALISHA_BADGE, 1, 700, 0.5, true)) | ||||
| 						{ | ||||
| 							addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 							qs.setCond(13); | ||||
| 						} | ||||
| 						addSpawn(HALISHA_ARCHON, npc, true, 0, true); | ||||
| 						qs.setCond(13); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -182,14 +182,11 @@ public class Q00212_TrialOfDuty extends Quest | ||||
| 			case STRAIN: | ||||
| 			case GHOUL: | ||||
| 			{ | ||||
| 				if (qs.isMemoState(5) && !hasQuestItems(killer, TALIANUSS_REPORT)) | ||||
| 				if (qs.isMemoState(5) && !hasQuestItems(killer, TALIANUSS_REPORT) && giveItemRandomly(killer, npc, REPORT_PIECE.getId(), 1, REPORT_PIECE.getCount(), 1, true)) | ||||
| 				{ | ||||
| 					if (giveItemRandomly(killer, npc, REPORT_PIECE.getId(), 1, REPORT_PIECE.getCount(), 1, true)) | ||||
| 					{ | ||||
| 						takeItem(killer, REPORT_PIECE); | ||||
| 						giveItems(killer, TALIANUSS_REPORT, 1); | ||||
| 						qs.setCond(6); | ||||
| 					} | ||||
| 					takeItem(killer, REPORT_PIECE); | ||||
| 					giveItems(killer, TALIANUSS_REPORT, 1); | ||||
| 					qs.setCond(6); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
|   | ||||
| @@ -286,13 +286,10 @@ public class Q00213_TrialOfTheSeeker extends Quest | ||||
| 				} | ||||
| 				case NEER_GHOUL_BERSERKER: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, TERRYS_1ST_ORDER) && !hasQuestItems(killer, MYSTERIOUS_SPIRIT_ORE)) | ||||
| 					if (hasQuestItems(killer, TERRYS_1ST_ORDER) && !hasQuestItems(killer, MYSTERIOUS_SPIRIT_ORE) && getRandomBoolean()) | ||||
| 					{ | ||||
| 						if (getRandom(100) < 50) | ||||
| 						{ | ||||
| 							giveItems(killer, MYSTERIOUS_SPIRIT_ORE, 1); | ||||
| 							qs.setCond(3, true); | ||||
| 						} | ||||
| 						giveItems(killer, MYSTERIOUS_SPIRIT_ORE, 1); | ||||
| 						qs.setCond(3, true); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -388,7 +385,7 @@ public class Q00213_TrialOfTheSeeker extends Quest | ||||
| 		{ | ||||
| 			if (npc.getId() == MASTER_DUFNER) | ||||
| 			{ | ||||
| 				if ((player.getClassId() == ClassId.ROGUE) || (player.getClassId() == ClassId.ELVEN_SCOUT) || ((player.getClassId() == ClassId.ASSASSIN))) | ||||
| 				if ((player.getClassId() == ClassId.ROGUE) || (player.getClassId() == ClassId.ELVEN_SCOUT) || (player.getClassId() == ClassId.ASSASSIN)) | ||||
| 				{ | ||||
| 					if (player.getLevel() < MIN_LVL) | ||||
| 					{ | ||||
|   | ||||
| @@ -555,7 +555,7 @@ public class Q00214_TrialOfTheScholar extends Quest | ||||
| 		{ | ||||
| 			if (npc.getId() == MAGISTER_MIRIEN) | ||||
| 			{ | ||||
| 				if ((player.getClassId() == ClassId.WIZARD) || (player.getClassId() == ClassId.ELVEN_WIZARD) || ((player.getClassId() == ClassId.DARK_WIZARD))) | ||||
| 				if ((player.getClassId() == ClassId.WIZARD) || (player.getClassId() == ClassId.ELVEN_WIZARD) || (player.getClassId() == ClassId.DARK_WIZARD)) | ||||
| 				{ | ||||
| 					if (player.getLevel() < MIN_LVL) | ||||
| 					{ | ||||
|   | ||||
| @@ -302,13 +302,10 @@ public class Q00216_TrialOfTheGuildsman extends Quest | ||||
| 			case MANDRAGORA_SPROUT2: | ||||
| 			{ | ||||
| 				final QuestState qs = getQuestState(killer, false); | ||||
| 				if ((qs != null) && qs.isStarted() && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, true)) | ||||
| 				if ((qs != null) && qs.isStarted() && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, true) && hasQuestItems(killer, VALKONS_RECOMMENDATION) && !hasQuestItems(killer, MANDRAGORA_BERRY)) | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, VALKONS_RECOMMENDATION) && !hasQuestItems(killer, MANDRAGORA_BERRY)) | ||||
| 					{ | ||||
| 						giveItems(killer, MANDRAGORA_BERRY, 1); | ||||
| 						qs.setCond(4, true); | ||||
| 					} | ||||
| 					giveItems(killer, MANDRAGORA_BERRY, 1); | ||||
| 					qs.setCond(4, true); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
|   | ||||
| @@ -523,17 +523,14 @@ public class Q00217_TestimonyOfTrust extends Quest | ||||
| 				} | ||||
| 				case HIGH_PRIEST_BIOTIN: | ||||
| 				{ | ||||
| 					if (memoState == 19) | ||||
| 					if ((memoState == 19) && hasQuestItems(player, RECOMMENDATION_OF_HOLLIN)) | ||||
| 					{ | ||||
| 						if (hasQuestItems(player, RECOMMENDATION_OF_HOLLIN)) | ||||
| 						{ | ||||
| 							giveAdena(player, 252212, true); | ||||
| 							giveItems(player, MARK_OF_TRUST, 1); | ||||
| 							addExpAndSp(player, 1390298, 92782); | ||||
| 							qs.exitQuest(false, true); | ||||
| 							player.sendPacket(new SocialAction(player.getObjectId(), 3)); | ||||
| 							htmltext = "30031-01.html"; | ||||
| 						} | ||||
| 						giveAdena(player, 252212, true); | ||||
| 						giveItems(player, MARK_OF_TRUST, 1); | ||||
| 						addExpAndSp(player, 1390298, 92782); | ||||
| 						qs.exitQuest(false, true); | ||||
| 						player.sendPacket(new SocialAction(player.getObjectId(), 3)); | ||||
| 						htmltext = "30031-01.html"; | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -398,15 +398,12 @@ public class Q00218_TestimonyOfLife extends Quest | ||||
| 				} | ||||
| 				case UNICORN_OF_EVA: | ||||
| 				{ | ||||
| 					if (!hasQuestItems(killer, TEARS_OF_UNICORN) && hasQuestItems(killer, MOONFLOWER_CHARM, TALINS_SPEAR, GRAIL_OF_PURITY)) | ||||
| 					if (!hasQuestItems(killer, TEARS_OF_UNICORN) && hasQuestItems(killer, MOONFLOWER_CHARM, TALINS_SPEAR, GRAIL_OF_PURITY) && (npc.getKillingBlowWeapon() == TALINS_SPEAR)) | ||||
| 					{ | ||||
| 						if (npc.getKillingBlowWeapon() == TALINS_SPEAR) | ||||
| 						{ | ||||
| 							takeItems(killer, TALINS_SPEAR, 1); | ||||
| 							takeItems(killer, GRAIL_OF_PURITY, 1); | ||||
| 							giveItems(killer, TEARS_OF_UNICORN, 1); | ||||
| 							qs.setCond(19, true); | ||||
| 						} | ||||
| 						takeItems(killer, TALINS_SPEAR, 1); | ||||
| 						takeItems(killer, GRAIL_OF_PURITY, 1); | ||||
| 						giveItems(killer, TEARS_OF_UNICORN, 1); | ||||
| 						qs.setCond(19, true); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -216,6 +216,7 @@ public class Q00219_TestimonyOfFate extends Quest | ||||
| 						giveItems(killer, KASANDRAS_REMAINS, 1); | ||||
| 						qs.setCond(3, true); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case MARSH_STAKATO: | ||||
| 				case MARSH_STAKATO_WORKER: | ||||
| @@ -328,49 +329,37 @@ public class Q00219_TestimonyOfFate extends Quest | ||||
| 				} | ||||
| 				case BREKA_ORC_OVERLORD: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, BREKA_OVERLORD_SKULL)) | ||||
| 					if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, BREKA_OVERLORD_SKULL) && !hasQuestItems(killer, BREKA_OVERLORD_SKULL)) | ||||
| 					{ | ||||
| 						if (!hasQuestItems(killer, BREKA_OVERLORD_SKULL)) | ||||
| 						{ | ||||
| 							giveItems(killer, BREKA_OVERLORD_SKULL, 1); | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						giveItems(killer, BREKA_OVERLORD_SKULL, 1); | ||||
| 						playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case GRANDIS: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, GRANDISS_SKULL)) | ||||
| 					if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, GRANDISS_SKULL) && !hasQuestItems(killer, GRANDISS_SKULL)) | ||||
| 					{ | ||||
| 						if (!hasQuestItems(killer, GRANDISS_SKULL)) | ||||
| 						{ | ||||
| 							giveItems(killer, GRANDISS_SKULL, 1); | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						giveItems(killer, GRANDISS_SKULL, 1); | ||||
| 						playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case LETO_LIZARDMAN_OVERLORD: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, LETO_OVERLORD_SKULL)) | ||||
| 					if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, LETO_OVERLORD_SKULL) && !hasQuestItems(killer, LETO_OVERLORD_SKULL)) | ||||
| 					{ | ||||
| 						if (!hasQuestItems(killer, LETO_OVERLORD_SKULL)) | ||||
| 						{ | ||||
| 							giveItems(killer, LETO_OVERLORD_SKULL, 1); | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						giveItems(killer, LETO_OVERLORD_SKULL, 1); | ||||
| 						playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case KARUL_BUGBEAR: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, KARUL_BUGBEAR_SKULL)) | ||||
| 					if (hasQuestItems(killer, PALUS_CHARM, ARKENIAS_NOTE, PIXY_GARNET) && !hasQuestItems(killer, RED_FAIRY_DUST, KARUL_BUGBEAR_SKULL) && !hasQuestItems(killer, KARUL_BUGBEAR_SKULL)) | ||||
| 					{ | ||||
| 						if (!hasQuestItems(killer, KARUL_BUGBEAR_SKULL)) | ||||
| 						{ | ||||
| 							giveItems(killer, KARUL_BUGBEAR_SKULL, 1); | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						giveItems(killer, KARUL_BUGBEAR_SKULL, 1); | ||||
| 						playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -576,6 +565,7 @@ public class Q00219_TestimonyOfFate extends Quest | ||||
| 					{ | ||||
| 						htmltext = "30210-02.html"; | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case TETRARCH_THIFIELL: | ||||
| 				{ | ||||
|   | ||||
| @@ -314,19 +314,16 @@ public class Q00221_TestimonyOfProsperity extends Quest | ||||
| 				case MANDRAGORA_BLOSSOM: | ||||
| 				case MANDRAGORA_SPROUT2: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_1ST, BRIGHTS_LIST) && !hasQuestItems(killer, EMILYS_RECIPE)) | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_1ST, BRIGHTS_LIST) && !hasQuestItems(killer, EMILYS_RECIPE) && (getQuestItemsCount(killer, MANDRAGORA_PETAL) < 20)) | ||||
| 					{ | ||||
| 						if ((getQuestItemsCount(killer, MANDRAGORA_PETAL) < 20)) | ||||
| 						giveItems(killer, MANDRAGORA_PETAL, 1); | ||||
| 						if (getQuestItemsCount(killer, MANDRAGORA_PETAL) == 20) | ||||
| 						{ | ||||
| 							giveItems(killer, MANDRAGORA_PETAL, 1); | ||||
| 							if (getQuestItemsCount(killer, MANDRAGORA_PETAL) == 20) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| @@ -336,89 +333,77 @@ public class Q00221_TestimonyOfProsperity extends Quest | ||||
| 				case MARSH_STAKATO_SOLDIER: | ||||
| 				case MARSH_STAKATO_DRONE: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_2ND, NIKOLAS_LIST) && !hasAtLeastOneQuestItem(killer, CLAY_DOUGH, PATTERN_OF_KEYHOLE)) | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_2ND, NIKOLAS_LIST) && !hasAtLeastOneQuestItem(killer, CLAY_DOUGH, PATTERN_OF_KEYHOLE) && (getQuestItemsCount(killer, STAKATO_SHELL) < 20)) | ||||
| 					{ | ||||
| 						if ((getQuestItemsCount(killer, STAKATO_SHELL) < 20)) | ||||
| 						giveItems(killer, STAKATO_SHELL, 1); | ||||
| 						if (getQuestItemsCount(killer, STAKATO_SHELL) == 20) | ||||
| 						{ | ||||
| 							giveItems(killer, STAKATO_SHELL, 1); | ||||
| 							if (getQuestItemsCount(killer, STAKATO_SHELL) == 20) | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							if ((getQuestItemsCount(killer, TOAD_LORD_SAC) >= 10) && (getQuestItemsCount(killer, MARSH_SPIDER_THORN) >= 10)) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 								if ((getQuestItemsCount(killer, TOAD_LORD_SAC) >= 10) && (getQuestItemsCount(killer, MARSH_SPIDER_THORN) >= 10)) | ||||
| 								{ | ||||
| 									qs.setCond(8); | ||||
| 								} | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 								qs.setCond(8); | ||||
| 							} | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case GIANT_CRIMSON_ANT: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_1ST, BRIGHTS_LIST) && !hasQuestItems(killer, EMILYS_RECIPE)) | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_1ST, BRIGHTS_LIST) && !hasQuestItems(killer, EMILYS_RECIPE) && (getQuestItemsCount(killer, CRIMSON_MOSS) < 10)) | ||||
| 					{ | ||||
| 						if ((getQuestItemsCount(killer, CRIMSON_MOSS) < 10)) | ||||
| 						giveItems(killer, CRIMSON_MOSS, 1); | ||||
| 						if (getQuestItemsCount(killer, CRIMSON_MOSS) == 10) | ||||
| 						{ | ||||
| 							giveItems(killer, CRIMSON_MOSS, 1); | ||||
| 							if (getQuestItemsCount(killer, CRIMSON_MOSS) == 10) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case TOAD_LORD: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_2ND, NIKOLAS_LIST) && !hasAtLeastOneQuestItem(killer, CLAY_DOUGH, PATTERN_OF_KEYHOLE)) | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_2ND, NIKOLAS_LIST) && !hasAtLeastOneQuestItem(killer, CLAY_DOUGH, PATTERN_OF_KEYHOLE) && (getQuestItemsCount(killer, TOAD_LORD_SAC) < 10)) | ||||
| 					{ | ||||
| 						if ((getQuestItemsCount(killer, TOAD_LORD_SAC) < 10)) | ||||
| 						giveItems(killer, TOAD_LORD_SAC, 1); | ||||
| 						if (getQuestItemsCount(killer, TOAD_LORD_SAC) == 10) | ||||
| 						{ | ||||
| 							giveItems(killer, TOAD_LORD_SAC, 1); | ||||
| 							if (getQuestItemsCount(killer, TOAD_LORD_SAC) == 10) | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							if ((getQuestItemsCount(killer, STAKATO_SHELL) >= 20) && (getQuestItemsCount(killer, MARSH_SPIDER_THORN) >= 10)) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 								if ((getQuestItemsCount(killer, STAKATO_SHELL) >= 20) && (getQuestItemsCount(killer, MARSH_SPIDER_THORN) >= 10)) | ||||
| 								{ | ||||
| 									qs.setCond(8); | ||||
| 								} | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 								qs.setCond(8); | ||||
| 							} | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case MARSH_SPIDER: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_2ND, NIKOLAS_LIST) && !hasAtLeastOneQuestItem(killer, CLAY_DOUGH, PATTERN_OF_KEYHOLE)) | ||||
| 					if (hasQuestItems(killer, RING_OF_TESTIMONY_2ND, NIKOLAS_LIST) && !hasAtLeastOneQuestItem(killer, CLAY_DOUGH, PATTERN_OF_KEYHOLE) && (getQuestItemsCount(killer, MARSH_SPIDER_THORN) < 10)) | ||||
| 					{ | ||||
| 						if ((getQuestItemsCount(killer, MARSH_SPIDER_THORN) < 10)) | ||||
| 						giveItems(killer, MARSH_SPIDER_THORN, 1); | ||||
| 						if (getQuestItemsCount(killer, MARSH_SPIDER_THORN) == 10) | ||||
| 						{ | ||||
| 							giveItems(killer, MARSH_SPIDER_THORN, 1); | ||||
| 							if (getQuestItemsCount(killer, MARSH_SPIDER_THORN) == 10) | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							if ((getQuestItemsCount(killer, STAKATO_SHELL) >= 20) && (getQuestItemsCount(killer, TOAD_LORD_SAC) >= 10)) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 								if ((getQuestItemsCount(killer, STAKATO_SHELL) >= 20) && (getQuestItemsCount(killer, TOAD_LORD_SAC) >= 10)) | ||||
| 								{ | ||||
| 									qs.setCond(8); | ||||
| 								} | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 								qs.setCond(8); | ||||
| 							} | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -199,19 +199,16 @@ public class Q00223_TestOfTheChampion extends Quest | ||||
| 						case 0: | ||||
| 						{ | ||||
| 							npc.getVariables().set("lastAttacker", attacker.getObjectId()); | ||||
| 							if (hasQuestItems(attacker, WHITE_ROSE_INSIGNIA) && (getQuestItemsCount(attacker, HARPYS_EGG) < 30)) | ||||
| 							if (hasQuestItems(attacker, WHITE_ROSE_INSIGNIA) && (getQuestItemsCount(attacker, HARPYS_EGG) < 30) && getRandomBoolean()) | ||||
| 							{ | ||||
| 								if (getRandomBoolean()) | ||||
| 								if (getRandom(10) < 7) | ||||
| 								{ | ||||
| 									if (getRandom(10) < 7) | ||||
| 									{ | ||||
| 										addAttackPlayerDesire(addSpawn(HARPY_MATRIARCH, npc, true, 0, false), attacker); | ||||
| 									} | ||||
| 									else | ||||
| 									{ | ||||
| 										addAttackPlayerDesire(addSpawn(HARPY_MATRIARCH, npc, true, 0, false), attacker); | ||||
| 										addAttackPlayerDesire(addSpawn(HARPY_MATRIARCH, npc, true, 0, false), attacker); | ||||
| 									} | ||||
| 									addAttackPlayerDesire(addSpawn(HARPY_MATRIARCH, npc, true, 0, false), attacker); | ||||
| 								} | ||||
| 								else | ||||
| 								{ | ||||
| 									addAttackPlayerDesire(addSpawn(HARPY_MATRIARCH, npc, true, 0, false), attacker); | ||||
| 									addAttackPlayerDesire(addSpawn(HARPY_MATRIARCH, npc, true, 0, false), attacker); | ||||
| 								} | ||||
| 							} | ||||
| 							npc.setScriptValue(1); | ||||
| @@ -232,19 +229,16 @@ public class Q00223_TestOfTheChampion extends Quest | ||||
| 						case 0: | ||||
| 						{ | ||||
| 							npc.getVariables().set("lastAttacker", attacker.getObjectId()); | ||||
| 							if (hasQuestItems(attacker, MOUENS_1ST_ORDER) && (getQuestItemsCount(attacker, ROAD_RATMAN_HEAD) < 10)) | ||||
| 							if (hasQuestItems(attacker, MOUENS_1ST_ORDER) && (getQuestItemsCount(attacker, ROAD_RATMAN_HEAD) < 10) && getRandomBoolean()) | ||||
| 							{ | ||||
| 								if (getRandomBoolean()) | ||||
| 								if (getRandom(10) < 7) | ||||
| 								{ | ||||
| 									if (getRandom(10) < 7) | ||||
| 									{ | ||||
| 										addAttackPlayerDesire(addSpawn(ROAD_COLLECTOR, npc, true, 0, false), attacker); | ||||
| 									} | ||||
| 									else | ||||
| 									{ | ||||
| 										addAttackPlayerDesire(addSpawn(ROAD_COLLECTOR, npc, true, 0, false), attacker); | ||||
| 										addAttackPlayerDesire(addSpawn(ROAD_COLLECTOR, npc, true, 0, false), attacker); | ||||
| 									} | ||||
| 									addAttackPlayerDesire(addSpawn(ROAD_COLLECTOR, npc, true, 0, false), attacker); | ||||
| 								} | ||||
| 								else | ||||
| 								{ | ||||
| 									addAttackPlayerDesire(addSpawn(ROAD_COLLECTOR, npc, true, 0, false), attacker); | ||||
| 									addAttackPlayerDesire(addSpawn(ROAD_COLLECTOR, npc, true, 0, false), attacker); | ||||
| 								} | ||||
| 							} | ||||
| 							npc.setScriptValue(1); | ||||
| @@ -265,12 +259,9 @@ public class Q00223_TestOfTheChampion extends Quest | ||||
| 						case 0: | ||||
| 						{ | ||||
| 							npc.getVariables().set("lastAttacker", attacker.getObjectId()); | ||||
| 							if (hasQuestItems(attacker, IRON_ROSE_RING) && (getQuestItemsCount(attacker, BLOODY_AXE_HEAD) < 10)) | ||||
| 							if (hasQuestItems(attacker, IRON_ROSE_RING) && (getQuestItemsCount(attacker, BLOODY_AXE_HEAD) < 10) && getRandomBoolean()) | ||||
| 							{ | ||||
| 								if (getRandomBoolean()) | ||||
| 								{ | ||||
| 									addAttackPlayerDesire(addSpawn(BLOODY_AXE_ELITE, npc, true, 0, false), attacker); | ||||
| 								} | ||||
| 								addAttackPlayerDesire(addSpawn(BLOODY_AXE_ELITE, npc, true, 0, false), attacker); | ||||
| 							} | ||||
| 							npc.setScriptValue(1); | ||||
| 							break; | ||||
|   | ||||
| @@ -73,7 +73,7 @@ public class Q00225_TestOfTheSearcher extends Quest | ||||
| 	private static final int HANGMAN_TREE = 20144; | ||||
| 	private static final int ROAD_SCAVENGER = 20551; | ||||
| 	private static final int GIANT_FUNGUS = 20555; | ||||
| 	private static final int DELU_lIZARDMAN_SHAMAN = 20781; | ||||
| 	private static final int DELU_LIZARDMAN_SHAMAN = 20781; | ||||
| 	// Quest Monster | ||||
| 	private static final int NEER_BODYGUARD = 27092; | ||||
| 	private static final int DELU_CHIEF_KALKIS = 27093; | ||||
| @@ -85,8 +85,8 @@ public class Q00225_TestOfTheSearcher extends Quest | ||||
| 		super(225); | ||||
| 		addStartNpc(MASTER_LUTHER); | ||||
| 		addTalkId(MASTER_LUTHER, CAPTAIN_ALEX, TYRA, TREE, STRONG_WOODEN_CHEST, MILITIAMAN_LEIRYNN, DRUNKARD_BORYS, BODYGUARD_JAX); | ||||
| 		addKillId(HANGMAN_TREE, ROAD_SCAVENGER, GIANT_FUNGUS, DELU_lIZARDMAN_SHAMAN, NEER_BODYGUARD, DELU_CHIEF_KALKIS); | ||||
| 		addAttackId(DELU_lIZARDMAN_SHAMAN); | ||||
| 		addKillId(HANGMAN_TREE, ROAD_SCAVENGER, GIANT_FUNGUS, DELU_LIZARDMAN_SHAMAN, NEER_BODYGUARD, DELU_CHIEF_KALKIS); | ||||
| 		addAttackId(DELU_LIZARDMAN_SHAMAN); | ||||
| 		registerQuestItems(LUTHERS_LETTER, ALEXS_WARRANT, LEIRYNNS_1ST_ORDER, DELU_TOTEM, LEIRYNNS_2ND_ORDER, CHIEF_KALKIS_FANG, LEIRYNNS_REPORT, STRINGE_MAP, LAMBERTS_MAP, ALEXS_LETTER, ALEXS_ORDER, WINE_CATALOG, TYRAS_CONTRACT, RED_SPORE_DUST, MALRUKIAN_WINE, OLD_ORDER, JAXS_DIARY, TORN_MAP_PIECE_1ST, TORN_MAP_PIECE_2ND, SOLTS_MAP, MAKELS_MAP, COMBINED_MAP, RUSTED_KEY, GOLD_BAR, ALEXS_RECOMMEND); | ||||
| 	} | ||||
| 	 | ||||
| @@ -190,13 +190,10 @@ public class Q00225_TestOfTheSearcher extends Quest | ||||
| 	public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(attacker, false); | ||||
| 		if ((qs != null) && qs.isStarted()) | ||||
| 		if ((qs != null) && qs.isStarted() && npc.isScriptValue(0) && hasQuestItems(attacker, LEIRYNNS_1ST_ORDER)) | ||||
| 		{ | ||||
| 			if (npc.isScriptValue(0) && hasQuestItems(attacker, LEIRYNNS_1ST_ORDER)) | ||||
| 			{ | ||||
| 				npc.setScriptValue(1); | ||||
| 				addAttackPlayerDesire(addSpawn(NEER_BODYGUARD, npc, true, 200000), attacker); | ||||
| 			} | ||||
| 			npc.setScriptValue(1); | ||||
| 			addAttackPlayerDesire(addSpawn(NEER_BODYGUARD, npc, true, 200000), attacker); | ||||
| 		} | ||||
| 		return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 	} | ||||
| @@ -272,7 +269,7 @@ public class Q00225_TestOfTheSearcher extends Quest | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case DELU_lIZARDMAN_SHAMAN: | ||||
| 				case DELU_LIZARDMAN_SHAMAN: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, LEIRYNNS_1ST_ORDER) && (getQuestItemsCount(killer, DELU_TOTEM) < 10)) | ||||
| 					{ | ||||
|   | ||||
| @@ -55,7 +55,7 @@ public class Q00227_TestOfTheReformer extends Quest | ||||
| 	private static final int LETTER_OF_INTRODUCTION = 2823; | ||||
| 	private static final int SLAS_LETTER = 2824; | ||||
| 	private static final int GREETINGS = 2825; | ||||
| 	private static final int Ol_MAHUM_MONEY = 2826; | ||||
| 	private static final int OL_MAHUM_MONEY = 2826; | ||||
| 	private static final int KATARIS_LETTER = 2827; | ||||
| 	private static final int NYAKURIS_LETTER = 2828; | ||||
| 	private static final int UNDEAD_LIST = 2829; | ||||
| @@ -110,7 +110,7 @@ public class Q00227_TestOfTheReformer extends Quest | ||||
| 		addAttackId(NAMELESS_REVENANT, CRIMSON_WEREWOLF); | ||||
| 		addKillId(MISERY_SKELETON, SKELETON_ARCHER, SKELETON_MARKSMAN, SKELETON_LORD, SILENT_HORROR, NAMELESS_REVENANT, ARURAUNE, OL_MAHUM_INSPECTOR, OL_MAHUM_BETRAYER, OL_MAHUM_BETRAYER, CRIMSON_WEREWOLF, KRUDEL_LIZARDMAN); | ||||
| 		addSpawnId(OL_MAHUM_PILGRIM, OL_MAHUM_INSPECTOR, OL_MAHUM_BETRAYER, CRIMSON_WEREWOLF, KRUDEL_LIZARDMAN); | ||||
| 		registerQuestItems(BOOK_OF_REFORM, LETTER_OF_INTRODUCTION, SLAS_LETTER, GREETINGS, Ol_MAHUM_MONEY, KATARIS_LETTER, NYAKURIS_LETTER, UNDEAD_LIST, RAMUSS_LETTER, RAMUSS_LETTER, RIPPED_DIARY, HUGE_NAIL, LETTER_OF_BETRAYER, BONE_FRAGMENT4, BONE_FRAGMENT5, BONE_FRAGMENT6, BONE_FRAGMENT7, BONE_FRAGMENT8, KAKANS_LETTER, LETTER_GREETINGS1, LETTER_GREETINGS2); | ||||
| 		registerQuestItems(BOOK_OF_REFORM, LETTER_OF_INTRODUCTION, SLAS_LETTER, GREETINGS, OL_MAHUM_MONEY, KATARIS_LETTER, NYAKURIS_LETTER, UNDEAD_LIST, RAMUSS_LETTER, RAMUSS_LETTER, RIPPED_DIARY, HUGE_NAIL, LETTER_OF_BETRAYER, BONE_FRAGMENT4, BONE_FRAGMENT5, BONE_FRAGMENT6, BONE_FRAGMENT7, BONE_FRAGMENT8, KAKANS_LETTER, LETTER_GREETINGS1, LETTER_GREETINGS2); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| @@ -186,8 +186,8 @@ public class Q00227_TestOfTheReformer extends Quest | ||||
| 				qs.setCond(12, true); | ||||
| 				if (npc.getSummonedNpcCount() < 1) | ||||
| 				{ | ||||
| 					Npc pilgrim = addSpawn(OL_MAHUM_PILGRIM, -9282, -89975, -2331, 0, false, 0); | ||||
| 					Npc wolf = addSpawn(CRIMSON_WEREWOLF, -9382, -89852, -2333, 0, false, 0); | ||||
| 					final Npc pilgrim = addSpawn(OL_MAHUM_PILGRIM, -9282, -89975, -2331, 0, false, 0); | ||||
| 					final Npc wolf = addSpawn(CRIMSON_WEREWOLF, -9382, -89852, -2333, 0, false, 0); | ||||
| 					((Attackable) wolf).addDamageHate(pilgrim, 99999, 99999); | ||||
| 					wolf.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, pilgrim); | ||||
| 				} | ||||
| @@ -199,8 +199,8 @@ public class Q00227_TestOfTheReformer extends Quest | ||||
| 				qs.setCond(15, true); | ||||
| 				if (npc.getSummonedNpcCount() < 1) | ||||
| 				{ | ||||
| 					Npc pilgrim = addSpawn(OL_MAHUM_PILGRIM, 125947, -180049, -1778, 0, false, 0); | ||||
| 					Npc lizard = addSpawn(KRUDEL_LIZARDMAN, 126019, -179983, -1781, 0, false, 0); | ||||
| 					final Npc pilgrim = addSpawn(OL_MAHUM_PILGRIM, 125947, -180049, -1778, 0, false, 0); | ||||
| 					final Npc lizard = addSpawn(KRUDEL_LIZARDMAN, 126019, -179983, -1781, 0, false, 0); | ||||
| 					((Attackable) lizard).addDamageHate(pilgrim, 99999, 99999); | ||||
| 					lizard.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, pilgrim); | ||||
| 				} | ||||
| @@ -475,9 +475,9 @@ public class Q00227_TestOfTheReformer extends Quest | ||||
| 					} | ||||
| 					else if (memoState == 10) | ||||
| 					{ | ||||
| 						if (hasQuestItems(player, Ol_MAHUM_MONEY)) | ||||
| 						if (hasQuestItems(player, OL_MAHUM_MONEY)) | ||||
| 						{ | ||||
| 							takeItems(player, Ol_MAHUM_MONEY, 1); | ||||
| 							takeItems(player, OL_MAHUM_MONEY, 1); | ||||
| 							giveItems(player, GREETINGS, 1); | ||||
| 							giveItems(player, LETTER_GREETINGS1, 1); | ||||
| 							giveItems(player, LETTER_GREETINGS2, 1); | ||||
| @@ -553,8 +553,8 @@ public class Q00227_TestOfTheReformer extends Quest | ||||
| 						qs.setCond(6, true); | ||||
| 						if (npc.getSummonedNpcCount() < 1) | ||||
| 						{ | ||||
| 							Npc pilgrim = addSpawn(OL_MAHUM_PILGRIM, -4015, 40141, -3664, 0, false, 0); | ||||
| 							Npc inspector = addSpawn(OL_MAHUM_INSPECTOR, -4034, 40201, -3665, 0, false, 0); | ||||
| 							final Npc pilgrim = addSpawn(OL_MAHUM_PILGRIM, -4015, 40141, -3664, 0, false, 0); | ||||
| 							final Npc inspector = addSpawn(OL_MAHUM_INSPECTOR, -4034, 40201, -3665, 0, false, 0); | ||||
| 							((Attackable) inspector).addDamageHate(pilgrim, 99999, 99999); | ||||
| 							inspector.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, pilgrim); | ||||
| 						} | ||||
| @@ -638,7 +638,7 @@ public class Q00227_TestOfTheReformer extends Quest | ||||
| 				{ | ||||
| 					if (memoState == 7) | ||||
| 					{ | ||||
| 						giveItems(player, Ol_MAHUM_MONEY, 1); | ||||
| 						giveItems(player, OL_MAHUM_MONEY, 1); | ||||
| 						qs.setMemoState(8); | ||||
| 						htmltext = "30732-01.html"; | ||||
| 					} | ||||
|   | ||||
| @@ -221,38 +221,32 @@ public class Q00228_TestOfMagus extends Quest | ||||
| 				} | ||||
| 				case WYRM: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, SCORE_OF_ELEMENTS, SYLPH_CHARM) && (getQuestItemsCount(killer, WYRMS_WINGBONE) < 10)) | ||||
| 					if (hasQuestItems(killer, SCORE_OF_ELEMENTS, SYLPH_CHARM) && (getQuestItemsCount(killer, WYRMS_WINGBONE) < 10) && getRandomBoolean()) | ||||
| 					{ | ||||
| 						if (getRandom(100) < 50) | ||||
| 						giveItems(killer, WYRMS_WINGBONE, 1); | ||||
| 						if (getQuestItemsCount(killer, WYRMS_WINGBONE) >= 10) | ||||
| 						{ | ||||
| 							giveItems(killer, WYRMS_WINGBONE, 1); | ||||
| 							if (getQuestItemsCount(killer, WYRMS_WINGBONE) >= 10) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case WINDSUS: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, SCORE_OF_ELEMENTS, SYLPH_CHARM) && (getQuestItemsCount(killer, WINDSUS_MANE) < 10)) | ||||
| 					if (hasQuestItems(killer, SCORE_OF_ELEMENTS, SYLPH_CHARM) && (getQuestItemsCount(killer, WINDSUS_MANE) < 10) && getRandomBoolean()) | ||||
| 					{ | ||||
| 						if (getRandom(100) < 50) | ||||
| 						giveItems(killer, WINDSUS_MANE, 1); | ||||
| 						if (getQuestItemsCount(killer, WINDSUS_MANE) >= 10) | ||||
| 						{ | ||||
| 							giveItems(killer, WINDSUS_MANE, 1); | ||||
| 							if (getQuestItemsCount(killer, WINDSUS_MANE) >= 10) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| @@ -349,19 +343,16 @@ public class Q00228_TestOfMagus extends Quest | ||||
| 				} | ||||
| 				case GHOST_FIRE: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, SCORE_OF_ELEMENTS, SALAMANDER_CHARM) && (getQuestItemsCount(killer, FLAME_CRYSTAL) < 5)) | ||||
| 					if (hasQuestItems(killer, SCORE_OF_ELEMENTS, SALAMANDER_CHARM) && (getQuestItemsCount(killer, FLAME_CRYSTAL) < 5) && getRandomBoolean()) | ||||
| 					{ | ||||
| 						if (getRandom(100) < 50) | ||||
| 						giveItems(killer, FLAME_CRYSTAL, 1); | ||||
| 						if (getQuestItemsCount(killer, FLAME_CRYSTAL) >= 5) | ||||
| 						{ | ||||
| 							giveItems(killer, FLAME_CRYSTAL, 1); | ||||
| 							if (getQuestItemsCount(killer, FLAME_CRYSTAL) >= 5) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| @@ -380,7 +371,7 @@ public class Q00228_TestOfMagus extends Quest | ||||
| 		{ | ||||
| 			if (npc.getId() == BARD_RUKAL) | ||||
| 			{ | ||||
| 				if ((player.getClassId() == ClassId.WIZARD) || (player.getClassId() == ClassId.ELVEN_WIZARD) || ((player.getClassId() == ClassId.DARK_WIZARD))) | ||||
| 				if ((player.getClassId() == ClassId.WIZARD) || (player.getClassId() == ClassId.ELVEN_WIZARD) || (player.getClassId() == ClassId.DARK_WIZARD)) | ||||
| 				{ | ||||
| 					if (player.getLevel() < MIN_LVL) | ||||
| 					{ | ||||
|   | ||||
| @@ -339,38 +339,32 @@ public class Q00229_TestOfWitchcraft extends Quest | ||||
| 			{ | ||||
| 				case DIRE_WYRM: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, ALEXANDRIAS_BOOK, IKERS_LIST)) | ||||
| 					if (hasQuestItems(killer, ALEXANDRIAS_BOOK, IKERS_LIST) && (getQuestItemsCount(killer, DIRE_WYRM_FANG) < 20)) | ||||
| 					{ | ||||
| 						if (getQuestItemsCount(killer, DIRE_WYRM_FANG) < 20) | ||||
| 						giveItems(killer, DIRE_WYRM_FANG, 1); | ||||
| 						if (getQuestItemsCount(killer, DIRE_WYRM_FANG) >= 20) | ||||
| 						{ | ||||
| 							giveItems(killer, DIRE_WYRM_FANG, 1); | ||||
| 							if (getQuestItemsCount(killer, DIRE_WYRM_FANG) >= 20) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case ENCHANTED_STONE_GOLEM: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, ALEXANDRIAS_BOOK, IKERS_LIST)) | ||||
| 					if (hasQuestItems(killer, ALEXANDRIAS_BOOK, IKERS_LIST) && (getQuestItemsCount(killer, ENCHANTED_STONE_GOLEM_HEARTSTONE) < 20)) | ||||
| 					{ | ||||
| 						if (getQuestItemsCount(killer, ENCHANTED_STONE_GOLEM_HEARTSTONE) < 20) | ||||
| 						giveItems(killer, ENCHANTED_STONE_GOLEM_HEARTSTONE, 1); | ||||
| 						if (getQuestItemsCount(killer, ENCHANTED_STONE_GOLEM_HEARTSTONE) >= 20) | ||||
| 						{ | ||||
| 							giveItems(killer, ENCHANTED_STONE_GOLEM_HEARTSTONE, 1); | ||||
| 							if (getQuestItemsCount(killer, ENCHANTED_STONE_GOLEM_HEARTSTONE) >= 20) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| @@ -382,19 +376,16 @@ public class Q00229_TestOfWitchcraft extends Quest | ||||
| 				case LETO_LIZARDMAN_SHAMAN: | ||||
| 				case LETO_LIZARDMAN_OVERLORD: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, ALEXANDRIAS_BOOK, IKERS_LIST)) | ||||
| 					if (hasQuestItems(killer, ALEXANDRIAS_BOOK, IKERS_LIST) && (getQuestItemsCount(killer, LETO_LIZARDMAN_CHARM) < 20)) | ||||
| 					{ | ||||
| 						if (getQuestItemsCount(killer, LETO_LIZARDMAN_CHARM) < 20) | ||||
| 						giveItems(killer, LETO_LIZARDMAN_CHARM, 1); | ||||
| 						if (getQuestItemsCount(killer, LETO_LIZARDMAN_CHARM) >= 20) | ||||
| 						{ | ||||
| 							giveItems(killer, LETO_LIZARDMAN_CHARM, 1); | ||||
| 							if (getQuestItemsCount(killer, LETO_LIZARDMAN_CHARM) >= 20) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| @@ -402,19 +393,16 @@ public class Q00229_TestOfWitchcraft extends Quest | ||||
| 				case TAMLIN_ORC: | ||||
| 				case TAMLIN_ORC_ARCHER: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, VADINS_CRUCIFIX)) | ||||
| 					if (hasQuestItems(killer, VADINS_CRUCIFIX) && (getRandom(100) < 50) && (getQuestItemsCount(killer, TAMLIN_ORC_AMULET) < 20)) | ||||
| 					{ | ||||
| 						if ((getRandom(100) < 50) && (getQuestItemsCount(killer, TAMLIN_ORC_AMULET) < 20)) | ||||
| 						giveItems(killer, TAMLIN_ORC_AMULET, 1); | ||||
| 						if (getQuestItemsCount(killer, TAMLIN_ORC_AMULET) >= 20) | ||||
| 						{ | ||||
| 							giveItems(killer, TAMLIN_ORC_AMULET, 1); | ||||
| 							if (getQuestItemsCount(killer, TAMLIN_ORC_AMULET) >= 20) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| @@ -462,18 +450,15 @@ public class Q00229_TestOfWitchcraft extends Quest | ||||
| 				} | ||||
| 				case DREVANUL_PRINCE_ZERUEL: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, ORIMS_INSTRUCTIONS, BRIMSTONE_2ND, SWORD_OF_BINDING, SOULTRAP_CRYSTAL)) | ||||
| 					if (hasQuestItems(killer, ORIMS_INSTRUCTIONS, BRIMSTONE_2ND, SWORD_OF_BINDING, SOULTRAP_CRYSTAL) && (npc.getKillingBlowWeapon() == SWORD_OF_BINDING)) | ||||
| 					{ | ||||
| 						if (npc.getKillingBlowWeapon() == SWORD_OF_BINDING) | ||||
| 						{ | ||||
| 							npc.broadcastPacket(new NpcSay(npc, ChatType.NPC_GENERAL, NpcStringId.NO_I_HAVEN_T_COMPLETELY_FINISHED_THE_COMMAND_FOR_DESTRUCTION_AND_SLAUGHTER_YET)); | ||||
| 							takeItems(killer, SOULTRAP_CRYSTAL, 1); | ||||
| 							giveItems(killer, PURGATORY_KEY, 1); | ||||
| 							giveItems(killer, ZERUEL_BIND_CRYSTAL, 1); | ||||
| 							takeItems(killer, BRIMSTONE_2ND, 1); | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							qs.setCond(10); | ||||
| 						} | ||||
| 						npc.broadcastPacket(new NpcSay(npc, ChatType.NPC_GENERAL, NpcStringId.NO_I_HAVEN_T_COMPLETELY_FINISHED_THE_COMMAND_FOR_DESTRUCTION_AND_SLAUGHTER_YET)); | ||||
| 						takeItems(killer, SOULTRAP_CRYSTAL, 1); | ||||
| 						giveItems(killer, PURGATORY_KEY, 1); | ||||
| 						giveItems(killer, ZERUEL_BIND_CRYSTAL, 1); | ||||
| 						takeItems(killer, BRIMSTONE_2ND, 1); | ||||
| 						playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						qs.setCond(10); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| @@ -822,7 +807,7 @@ public class Q00229_TestOfWitchcraft extends Quest | ||||
| 	 | ||||
| 	private boolean checkWeapon(PlayerInstance player) | ||||
| 	{ | ||||
| 		ItemInstance weapon = player.getActiveWeaponInstance(); | ||||
| 		return ((weapon != null) && ((weapon.getId() == SWORD_OF_BINDING))); | ||||
| 		final ItemInstance weapon = player.getActiveWeaponInstance(); | ||||
| 		return ((weapon != null) && (weapon.getId() == SWORD_OF_BINDING)); | ||||
| 	} | ||||
| } | ||||
| @@ -520,6 +520,7 @@ public class Q00230_TestOfTheSummoner extends Quest | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case SHADOW_TUREN: | ||||
| 			{ | ||||
| @@ -563,6 +564,7 @@ public class Q00230_TestOfTheSummoner extends Quest | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case MIMI_THE_CAT: | ||||
| 			{ | ||||
| @@ -606,6 +608,7 @@ public class Q00230_TestOfTheSummoner extends Quest | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case UNICORN_PHANTASM: | ||||
| 			{ | ||||
| @@ -649,6 +652,7 @@ public class Q00230_TestOfTheSummoner extends Quest | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case SILHOUETTE_TILFO: | ||||
| 			{ | ||||
| @@ -692,6 +696,7 @@ public class Q00230_TestOfTheSummoner extends Quest | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return super.onAttack(npc, attacker, damage, isSummon); | ||||
|   | ||||
| @@ -258,38 +258,32 @@ public class Q00232_TestOfTheLord extends Quest | ||||
| 				case BREKA_ORC_SHAMAN: | ||||
| 				case BREKA_ORC_OVERLORD: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, ORDEAL_NECKLACE, VARKEES_CHARM, MANAKIAS_ORDERS) && !hasAtLeastOneQuestItem(killer, HUGE_ORC_FANG, MANAKIAS_AMULET)) | ||||
| 					if (hasQuestItems(killer, ORDEAL_NECKLACE, VARKEES_CHARM, MANAKIAS_ORDERS) && !hasAtLeastOneQuestItem(killer, HUGE_ORC_FANG, MANAKIAS_AMULET) && (getQuestItemsCount(killer, BREKA_ORC_FANG) < 20)) | ||||
| 					{ | ||||
| 						if (getQuestItemsCount(killer, BREKA_ORC_FANG) < 20) | ||||
| 						giveItems(killer, BREKA_ORC_FANG, 2); | ||||
| 						if (getQuestItemsCount(killer, BREKA_ORC_FANG) >= 20) | ||||
| 						{ | ||||
| 							giveItems(killer, BREKA_ORC_FANG, 2); | ||||
| 							if (getQuestItemsCount(killer, BREKA_ORC_FANG) >= 20) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
| 				case ENCHANTED_MONSTEREYE: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, ORDEAL_NECKLACE, CHIANTA_CHARM) && !hasQuestItems(killer, MONSTER_EYE_WOODCARVING)) | ||||
| 					if (hasQuestItems(killer, ORDEAL_NECKLACE, CHIANTA_CHARM) && !hasQuestItems(killer, MONSTER_EYE_WOODCARVING) && (getQuestItemsCount(killer, ENCHANTED_MONSTER_CORNEA) < 20)) | ||||
| 					{ | ||||
| 						if (getQuestItemsCount(killer, ENCHANTED_MONSTER_CORNEA) < 20) | ||||
| 						giveItems(killer, ENCHANTED_MONSTER_CORNEA, 1); | ||||
| 						if (getQuestItemsCount(killer, ENCHANTED_MONSTER_CORNEA) >= 20) | ||||
| 						{ | ||||
| 							giveItems(killer, ENCHANTED_MONSTER_CORNEA, 1); | ||||
| 							if (getQuestItemsCount(killer, ENCHANTED_MONSTER_CORNEA) >= 20) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
| @@ -301,19 +295,16 @@ public class Q00232_TestOfTheLord extends Quest | ||||
| 				case TIMAK_ORC_SHAMAN: | ||||
| 				case TIMAK_ORC_OVERLORD: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, ORDEAL_NECKLACE, HATOS_CHARM) && !hasQuestItems(killer, SWORD_INTO_SKULL)) | ||||
| 					if (hasQuestItems(killer, ORDEAL_NECKLACE, HATOS_CHARM) && !hasQuestItems(killer, SWORD_INTO_SKULL) && (getQuestItemsCount(killer, TIMAK_ORC_SKULL) < 10)) | ||||
| 					{ | ||||
| 						if (getQuestItemsCount(killer, TIMAK_ORC_SKULL) < 10) | ||||
| 						giveItems(killer, TIMAK_ORC_SKULL, 1); | ||||
| 						if (getQuestItemsCount(killer, TIMAK_ORC_SKULL) >= 10) | ||||
| 						{ | ||||
| 							giveItems(killer, TIMAK_ORC_SKULL, 1); | ||||
| 							if (getQuestItemsCount(killer, TIMAK_ORC_SKULL) >= 10) | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 							} | ||||
| 							else | ||||
| 							{ | ||||
| 								playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 							} | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_MIDDLE); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
| 						} | ||||
| 					} | ||||
| 					break; | ||||
|   | ||||
| @@ -324,12 +324,9 @@ public class Q00233_TestOfTheWarSpirit extends Quest | ||||
| 				case TAMLIN_ORC: | ||||
| 				case TAMLIN_ORC_ARCHER: | ||||
| 				{ | ||||
| 					if (hasQuestItems(killer, VENDETTA_TOTEM)) | ||||
| 					if (hasQuestItems(killer, VENDETTA_TOTEM) && giveItemRandomly(killer, npc, TAMLIN_ORC_HEAD, 1, 13, 1.0, true)) | ||||
| 					{ | ||||
| 						if (giveItemRandomly(killer, npc, TAMLIN_ORC_HEAD, 1, 13, 1.0, true)) | ||||
| 						{ | ||||
| 							qs.setCond(4, true); | ||||
| 						} | ||||
| 						qs.setCond(4, true); | ||||
| 					} | ||||
| 					break; | ||||
| 				} | ||||
|   | ||||
| @@ -417,7 +417,7 @@ public class Q00255_Tutorial extends Quest | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 		QuestState qs = getQuestState(player, true); | ||||
| 		final QuestState qs = getQuestState(player, true); | ||||
| 		if ((qs != null) && (qs.getMemoState() < 4) && STARTING_VOICE_HTML.containsKey(player.getClassId().getId())) | ||||
| 		{ | ||||
| 			startQuestTimer("start_newbie_tutorial", 5000, null, player); | ||||
|   | ||||
| @@ -126,7 +126,7 @@ public class Q00259_RequestFromTheFarmOwner extends Quest | ||||
| 	public String onKill(Npc npc, PlayerInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		if(qs != null) | ||||
| 		if (qs != null) | ||||
| 		{ | ||||
| 			giveItems(killer, SPIDER_SKIN, 1); | ||||
| 			playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET); | ||||
|   | ||||
| @@ -75,12 +75,9 @@ public class Q00261_CollectorsDream extends Quest | ||||
| 	public String onKill(Npc npc, PlayerInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, true)) | ||||
| 		if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, true) && giveItemRandomly(killer, SPIDER_LEG, 1, MAX_LEG_COUNT, 1, true)) | ||||
| 		{ | ||||
| 			if (giveItemRandomly(killer, SPIDER_LEG, 1, MAX_LEG_COUNT, 1, true)) | ||||
| 			{ | ||||
| 				qs.setCond(2); | ||||
| 			} | ||||
| 			qs.setCond(2); | ||||
| 		} | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
|   | ||||
| @@ -79,7 +79,7 @@ public class Q00262_TradeWithTheIvoryTower extends Quest | ||||
| 		} | ||||
| 		 | ||||
| 		final QuestState qs = getQuestState(partyMember, false); | ||||
| 		float chance = (MOBS_SAC.get(npc.getId()) * Config.RATE_QUEST_DROP); | ||||
| 		final float chance = (MOBS_SAC.get(npc.getId()) * Config.RATE_QUEST_DROP); | ||||
| 		if (getRandom(10) < chance) | ||||
| 		{ | ||||
| 			rewardItems(partyMember, SPORE_SAC, 1); | ||||
|   | ||||
| @@ -53,7 +53,7 @@ public class Q00267_WrathOfVerdure extends Quest | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		String htmltext = null; | ||||
| 		if(qs != null) | ||||
| 		if (qs != null) | ||||
| 		{ | ||||
| 			switch (event) | ||||
| 			{ | ||||
|   | ||||
| @@ -70,7 +70,7 @@ public class Q00271_ProofOfValor extends Quest | ||||
| 		if ((qs != null) && qs.isCond(1)) | ||||
| 		{ | ||||
| 			final long count = getQuestItemsCount(killer, KASHA_WOLF_FANG); | ||||
| 			int amount = ((getRandom(100) < 25) && (count < 49)) ? 2 : 1; | ||||
| 			final int amount = ((getRandom(100) < 25) && (count < 49)) ? 2 : 1; | ||||
| 			giveItems(killer, KASHA_WOLF_FANG, amount); | ||||
| 			if ((count + amount) >= 50) | ||||
| 			{ | ||||
|   | ||||
| @@ -63,7 +63,7 @@ public class Q00273_InvadersOfTheHolyLand extends Quest | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(player, false); | ||||
| 		String htmltext = null; | ||||
| 		if(qs != null) | ||||
| 		if (qs != null) | ||||
| 		{ | ||||
| 			switch (event) | ||||
| 			{ | ||||
| @@ -93,7 +93,7 @@ public class Q00273_InvadersOfTheHolyLand extends Quest | ||||
| 	public String onKill(Npc npc, PlayerInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		if(qs != null) | ||||
| 		if (qs != null) | ||||
| 		{ | ||||
| 			if (getRandom(100) <= MONSTERS.get(npc.getId())) | ||||
| 			{ | ||||
|   | ||||
| @@ -107,7 +107,7 @@ public class Q00293_TheHiddenVeins extends Quest | ||||
| 	public String onKill(Npc npc, PlayerInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		if(qs != null) | ||||
| 		if (qs != null) | ||||
| 		{ | ||||
| 			final int chance = getRandom(100); | ||||
| 			if (chance > 50) | ||||
|   | ||||
| @@ -65,12 +65,9 @@ public class Q00295_DreamingOfTheSkies extends Quest | ||||
| 	public String onKill(Npc npc, PlayerInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, true)) | ||||
| 		if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, true) && giveItemRandomly(killer, npc, FLOATING_STONE, (getRandom(100) > 25) ? 1 : 2, 50, 1.0, true)) | ||||
| 		{ | ||||
| 			if (giveItemRandomly(killer, npc, FLOATING_STONE, (getRandom(100) > 25) ? 1 : 2, 50, 1.0, true)) | ||||
| 			{ | ||||
| 				qs.setCond(2); | ||||
| 			} | ||||
| 			qs.setCond(2); | ||||
| 		} | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
|   | ||||
| @@ -89,7 +89,7 @@ public class Q00300_HuntingLetoLizardman extends Quest | ||||
| 				if (getQuestItemsCount(player, BRACELET_OF_LIZARDMAN) >= REQUIRED_BRACELET_COUNT) | ||||
| 				{ | ||||
| 					takeItems(player, BRACELET_OF_LIZARDMAN, -1); | ||||
| 					int rand = getRandom(1000); | ||||
| 					final int rand = getRandom(1000); | ||||
| 					if (rand < 500) | ||||
| 					{ | ||||
| 						giveItems(player, REWARD_ADENA); | ||||
|   | ||||
| @@ -82,12 +82,9 @@ public class Q00313_CollectSpores extends Quest | ||||
| 	public String onKill(Npc npc, PlayerInstance killer, boolean isSummon) | ||||
| 	{ | ||||
| 		final QuestState qs = getQuestState(killer, false); | ||||
| 		if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, false)) | ||||
| 		if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, false) && giveItemRandomly(killer, npc, SPORE_SAC, 1, REQUIRED_SAC_COUNT, 0.4, true)) | ||||
| 		{ | ||||
| 			if (giveItemRandomly(killer, npc, SPORE_SAC, 1, REQUIRED_SAC_COUNT, 0.4, true)) | ||||
| 			{ | ||||
| 				qs.setCond(2); | ||||
| 			} | ||||
| 			qs.setCond(2); | ||||
| 		} | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment