Code review Part 5.

This commit is contained in:
MobiusDevelopment
2019-12-22 15:33:46 +00:00
parent 4a563b8832
commit 7f3befa63c
4071 changed files with 23938 additions and 28938 deletions

View File

@@ -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);
}
}
}

View File

@@ -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()
{

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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())

View File

@@ -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)

View File

@@ -36,129 +36,129 @@ import org.l2jmobius.gameserver.model.skills.SkillCaster;
*/
public class RudolphsBlessing extends LongTimeEvent
{
private static final int SANTA_CLAUS = 13285;
private static final int AGATHION_SEAL_BRACELET_RUDOLPH = 21709;
private static final int AGATHION_SEAL_BRACELET_RUDOLPH_NPC = 1598;
private static final int ICE_CANDY_PIECE = 21915;
private static final int SANTA_CLAUS_TREASURE_BOX = 21873;
private static final int RUDOLPH_PRICE = 2019; // Calendar.getInstance().get(Calendar.YEAR) can be used but need to replace htmls.
private static final SkillHolder RUDOLPH_TRYUCK = new SkillHolder(23181, 1);
private static final ItemHolder ITEM_REQUIREMENT = new ItemHolder(21872, 2);
public RudolphsBlessing()
{
addStartNpc(SANTA_CLAUS);
addFirstTalkId(SANTA_CLAUS);
addTalkId(SANTA_CLAUS);
Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_SUMMON_AGATHION, (OnPlayerSummonAgathion event) -> OnPlayerSummonAgathion(event), this));
Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_UNSUMMON_AGATHION, (OnPlayerUnsummonAgathion event) -> OnPlayerUnsummonAgathion(event), this));
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("rudolph_eat"))
{
if ((player != null) && player.isOnline())
{
if (takeItems(player, ITEM_REQUIREMENT.getId(), ITEM_REQUIREMENT.getCount()))
{
SkillCaster.triggerCast(player, player, RUDOLPH_TRYUCK.getSkill());
Skill RudolphsBlessing = SkillData.getInstance().getSkill(23297, 1);
RudolphsBlessing.applyEffects(player, player);
}
startQuestTimer("rudolph_eat", 10 * 60 * 1000, null, player);
}
}
if (player == null)
{
return null;
}
String htmltext = event;
switch (event)
{
case "rudolph":
{
if (hasQuestItems(player, AGATHION_SEAL_BRACELET_RUDOLPH))
{
htmltext = "13285-05.htm";
}
else if (player.getAdena() < RUDOLPH_PRICE)
{
htmltext = "13285-06.htm";
}
else
{
takeItems(player, Inventory.ADENA_ID, RUDOLPH_PRICE);
giveItems(player, AGATHION_SEAL_BRACELET_RUDOLPH, 1);
htmltext = "13285-04.htm";
}
break;
}
case "event_info":
{
htmltext = "13285-02.htm";
break;
}
case "reward":
{
if (getQuestItemsCount(player, ICE_CANDY_PIECE) >= 50)
{
takeItems(player, ICE_CANDY_PIECE, 50);
giveItems(player, SANTA_CLAUS_TREASURE_BOX, 1);
}
else
{
htmltext = "13285-03.htm";
}
break;
}
}
return htmltext;
}
private void OnPlayerSummonAgathion(OnPlayerSummonAgathion event)
{
if (event.getAgathionId() != AGATHION_SEAL_BRACELET_RUDOLPH_NPC)
{
return;
}
final PlayerInstance player = event.getPlayer();
if (player == null)
{
return;
}
startQuestTimer("rudolph_eat", 10 * 60 * 1000, null, player);
}
private void OnPlayerUnsummonAgathion(OnPlayerUnsummonAgathion event)
{
if (event.getAgathionId() != AGATHION_SEAL_BRACELET_RUDOLPH_NPC)
{
return;
}
final PlayerInstance player = event.getPlayer();
if (player == null)
{
return;
}
cancelQuestTimer("rudolph_eat", null, player);
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "13285.htm";
}
public static void main(String[] args)
{
new RudolphsBlessing();
}
private static final int SANTA_CLAUS = 13285;
private static final int AGATHION_SEAL_BRACELET_RUDOLPH = 21709;
private static final int AGATHION_SEAL_BRACELET_RUDOLPH_NPC = 1598;
private static final int ICE_CANDY_PIECE = 21915;
private static final int SANTA_CLAUS_TREASURE_BOX = 21873;
private static final int RUDOLPH_PRICE = 2019; // Calendar.getInstance().get(Calendar.YEAR) can be used but need to replace htmls.
private static final SkillHolder RUDOLPH_TRYUCK = new SkillHolder(23181, 1);
private static final ItemHolder ITEM_REQUIREMENT = new ItemHolder(21872, 2);
public RudolphsBlessing()
{
addStartNpc(SANTA_CLAUS);
addFirstTalkId(SANTA_CLAUS);
addTalkId(SANTA_CLAUS);
Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_SUMMON_AGATHION, (OnPlayerSummonAgathion event) -> OnPlayerSummonAgathion(event), this));
Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_UNSUMMON_AGATHION, (OnPlayerUnsummonAgathion event) -> OnPlayerUnsummonAgathion(event), this));
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
if (event.equals("rudolph_eat"))
{
if ((player != null) && player.isOnline())
{
if (takeItems(player, ITEM_REQUIREMENT.getId(), ITEM_REQUIREMENT.getCount()))
{
SkillCaster.triggerCast(player, player, RUDOLPH_TRYUCK.getSkill());
final Skill RudolphsBlessing = SkillData.getInstance().getSkill(23297, 1);
RudolphsBlessing.applyEffects(player, player);
}
startQuestTimer("rudolph_eat", 10 * 60 * 1000, null, player);
}
}
if (player == null)
{
return null;
}
String htmltext = event;
switch (event)
{
case "rudolph":
{
if (hasQuestItems(player, AGATHION_SEAL_BRACELET_RUDOLPH))
{
htmltext = "13285-05.htm";
}
else if (player.getAdena() < RUDOLPH_PRICE)
{
htmltext = "13285-06.htm";
}
else
{
takeItems(player, Inventory.ADENA_ID, RUDOLPH_PRICE);
giveItems(player, AGATHION_SEAL_BRACELET_RUDOLPH, 1);
htmltext = "13285-04.htm";
}
break;
}
case "event_info":
{
htmltext = "13285-02.htm";
break;
}
case "reward":
{
if (getQuestItemsCount(player, ICE_CANDY_PIECE) >= 50)
{
takeItems(player, ICE_CANDY_PIECE, 50);
giveItems(player, SANTA_CLAUS_TREASURE_BOX, 1);
}
else
{
htmltext = "13285-03.htm";
}
break;
}
}
return htmltext;
}
private void OnPlayerSummonAgathion(OnPlayerSummonAgathion event)
{
if (event.getAgathionId() != AGATHION_SEAL_BRACELET_RUDOLPH_NPC)
{
return;
}
final PlayerInstance player = event.getPlayer();
if (player == null)
{
return;
}
startQuestTimer("rudolph_eat", 10 * 60 * 1000, null, player);
}
private void OnPlayerUnsummonAgathion(OnPlayerUnsummonAgathion event)
{
if (event.getAgathionId() != AGATHION_SEAL_BRACELET_RUDOLPH_NPC)
{
return;
}
final PlayerInstance player = event.getPlayer();
if (player == null)
{
return;
}
cancelQuestTimer("rudolph_eat", null, player);
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "13285.htm";
}
public static void main(String[] args)
{
new RudolphsBlessing();
}
}

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -142,7 +142,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);

View File

@@ -734,7 +734,6 @@ public class MasterHandler
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Failed loading handler: " + c.getSimpleName(), e);
continue;
}
}
}

View File

@@ -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)

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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>");
}

View File

@@ -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)

View File

@@ -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"))

View File

@@ -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)
{

View File

@@ -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;
}

View File

@@ -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());

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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]);

View File

@@ -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)
{

View File

@@ -36,7 +36,7 @@ public class DisableSkill extends AbstractEffect
public DisableSkill(StatsSet params)
{
String disable = params.getString("disable");
final String disable = params.getString("disable");
if ((disable != null) && !disable.isEmpty())
{
disableSkills = new HashSet<>();

View File

@@ -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<>();

View File

@@ -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<>();

View File

@@ -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))

View File

@@ -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))

View File

@@ -123,7 +123,7 @@ public class RestorationRandom extends AbstractEffect
}
}
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)

View File

@@ -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;

View File

@@ -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()))

View File

@@ -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;

View File

@@ -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.

View File

@@ -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.

View File

@@ -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()))

View File

@@ -46,7 +46,7 @@ public class Q00032_AnObviousLie extends Quest
// Misc
private static final int MIN_LVL = 45;
// Reward
private static final Map<String, Integer> EARS = new HashMap<>();
private static final Map<String, Integer> EARS = new HashMap<>();
static
{
EARS.put("cat", 6843); // Cat Ears

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -48,7 +48,7 @@ public class Q00110_ToThePrimevalIsle extends Quest
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
QuestState qs = getQuestState(player, false);
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return getNoQuestMsg(player);

View File

@@ -258,7 +258,7 @@ public class Q00111_ElrokianHuntersProof extends Quest
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
QuestState qs = getQuestState(player, true);
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs == null)
{

View File

@@ -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;
}

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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:
{

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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))
{

View File

@@ -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";
}

View File

@@ -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)
{

View File

@@ -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));
}
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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()))
{

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -81,19 +81,16 @@ public class Q00319_ScentOfDeath extends Quest
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, false) && (getQuestItemsCount(killer, ZOMBIES_SKIN) < REQUIRED_ITEM_COUNT))
if ((qs != null) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, killer, false) && (getQuestItemsCount(killer, ZOMBIES_SKIN) < REQUIRED_ITEM_COUNT) && (getRandom(10) > MIN_CHANCE))
{
if (getRandom(10) > MIN_CHANCE)
giveItems(killer, ZOMBIES_SKIN, 1);
if (getQuestItemsCount(killer, ZOMBIES_SKIN) < REQUIRED_ITEM_COUNT)
{
giveItems(killer, ZOMBIES_SKIN, 1);
if (getQuestItemsCount(killer, ZOMBIES_SKIN) < REQUIRED_ITEM_COUNT)
{
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
else
{
qs.setCond(2, true);
}
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
else
{
qs.setCond(2, true);
}
}
return super.onKill(npc, killer, isSummon);

View File

@@ -63,13 +63,10 @@ public class Q00324_SweetestVenom extends Quest
{
final QuestState qs = getQuestState(player, false);
String htmltext = null;
if(qs != null)
if ((qs != null) && event.equals("30351-04.htm"))
{
if (event.equals("30351-04.htm"))
{
qs.startQuest();
htmltext = event;
}
qs.startQuest();
htmltext = event;
}
return htmltext;
}
@@ -112,19 +109,16 @@ public class Q00324_SweetestVenom extends Quest
if ((qs != null) && qs.isCond(1))
{
long sacs = getQuestItemsCount(player, VENOM_SAC);
if (sacs < REQUIRED_COUNT)
if ((sacs < REQUIRED_COUNT) && (getRandom(100) < MONSTERS.get(npc.getId())))
{
if (getRandom(100) < MONSTERS.get(npc.getId()))
giveItems(player, VENOM_SAC, 1);
if ((++sacs) < REQUIRED_COUNT)
{
giveItems(player, VENOM_SAC, 1);
if ((++sacs) < REQUIRED_COUNT)
{
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
else
{
qs.setCond(2, true);
}
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
else
{
qs.setCond(2, true);
}
}
}

View File

@@ -72,7 +72,7 @@ public class Q00326_VanquishRemnants extends Quest
{
final QuestState qs = getQuestState(player, false);
String htmltext = null;
if(qs != null)
if (qs != null)
{
switch (event)
{

Some files were not shown because too many files have changed in this diff Show More