MoparClassic/GameServer/conf/server/queststmp/ImpCatcher.java

687 lines
29 KiB
Java

import org.rscdaemon.server.quest.*;
import org.rscdaemon.server.model.*;
import org.rscdaemon.server.event.*;
import org.rscdaemon.server.entityhandling.EntityHandler;
/**
* Quest: Imp Catcher (v1.0) 5/1/2009
* Status: COMPLETE
* Start: Talborn the wizard (id 17), 218, 1635
* Items: 231, 232, 233, 234
* Reward: 1 quest point, 350 magic xp
*
* @author punKrockeR
*/
public class ImpCatcher extends Quest
{
private static final int TALBORN_ID = 17;
private static final int RED_BEAD = 231;
private static final int YELLOW_BEAD = 232;
private static final int BLACK_BEAD = 233;
private static final int WHITE_BEAD = 234;
private static final int ITEM_REWARD = 235;
private static final int REWARD_XP = 350;
private static final String[] FIRST_MENU = new String[] { "No way you crazy bastard", "Sure, why not" };
private static final String[] SECOND_MENU = new String[] { "Yeah I did", "Not yet" };
private static final int DEFAULT_EVENT_DELAY = 3200;
private static final int QUEST_POINTS = 1;
/**
* @return the quest's name
*/
public String getName()
{
return "Imp Catcher";
}
/**
* @return this quest's unique id
*/
public int getUniqueID()
{
return 3;
}
/**
* Initialises the quest
*/
public void init()
{
associateNpc(TALBORN_ID);
}
/**
* Handles the given quest action
*/
public void handleAction(QuestAction action, Object[] args, final Player player)
{
int stage = player.getQuestStage(this);
if(action == action.TALKED_NPC)
{
if(!(args[0] instanceof Npc))
return;
final Npc npc = (Npc)args[0];
if(npc.getID() != TALBORN_ID)
return;
player.setBusy(true);
npc.blockedBy(player);
if(stage == -1)
startQuest(player, npc);
else
handleTalk(player, npc);
}
}
/**
* Handles npc chat if the quest hasn't been started yet
*/
private void startQuest(final Player player, final Npc npc)
{
sendChat("...Avada kedavra!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
spellPlayer(player, npc);
addSingleEvent(new SingleEvent(player, 1000)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Holy shit!", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("What? Huh? Get out of the way you fool!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("You shot me you stupid sod", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Hmm, indeed. But it worked!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Yeah it did. You burnt my sleeve.", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Collateral damage. A necessary casualty.", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Your sleeve is expendable in this war", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("What war?", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Well the war against those nasty little imps of course", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Imps? What threat could they possibly pose?", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Those little bastards stole my beads!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Riight.. your beads. And what's so special about these beads?", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Why, absolutely nothing. It's the principle of the matter.", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Surely it can't be that hard to get them to give them back", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Oh really? Why don't you try and get them back then", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Yeah right, chase imps around for free. You're crazier than I thought", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Free? Nonsense. I'd be happy to reward you.", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Hmm. What kind of reward?", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
npc.blockedBy(player);
player.setBusy(true);
sendChat("I've got a few valuable things lying around, I'll find something.", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
npc.blockedBy(player);
player.setBusy(true);
sendChat("How about it? Would you help an old wizard out?", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(false);
player.setMenuHandler(new MenuHandler(FIRST_MENU)
{
public void handleReply(final int option, final String reply)
{
player.setBusy(true);
npc.blockedBy(player);
sendChat(reply, player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
if(option == 1)
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Excellent! Begin at once if you wish to collect them within a decade", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("There are four beads! Red, white, black, yellow and black.", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Ahh you said... nevermind", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("I'll come back when I get the beads...", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("If! If you get the beads. Don't underestimate the little beasts!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Sure, whatever old man.", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
player.setQuestStage(getUniqueID(), 1);
sendChat("Tarantallegra!", npc, player);
spellPlayer(player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Ouch! Would you bloody wait til I'm gone!", player, npc);
player.setBusy(false);
npc.unblock();
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Move it!", npc, player);
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
} else
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Fine. But don't come to me when you need some pomegranate!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Okaaay...", player, npc);
player.setBusy(false);
npc.unblock();
}
});
}
}
});
}
});
player.getActionSender().sendMenu(FIRST_MENU);
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
/**
* Handles npc chat if the quest is started but not finished
*/
private void handleTalk(final Player player, final Npc npc)
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("I know you. You're that fellow that stole my beads!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
npc.blockedBy(player);
sendChat("What? No, I'm the one that offered to find them for you.", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
npc.blockedBy(player);
sendChat("It makes no difference, I still don't like you.", npc, player);
if(player.getQuestStage(getUniqueID()) != COMPLETE)
{
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
npc.blockedBy(player);
sendChat("But my beads, did you find them?", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(false);
npc.blockedBy(player);
player.setMenuHandler(new MenuHandler(SECOND_MENU)
{
public void handleReply(final int option, final String reply)
{
sendChat(reply, player, npc);
if(option == 0) // Yes
{
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
if(player.getInventory().hasItemId(RED_BEAD) && player.getInventory().hasItemId(YELLOW_BEAD) && player.getInventory().hasItemId(BLACK_BEAD) && player.getInventory().hasItemId(WHITE_BEAD))
{
sendChat("Excellent! Hand them over immediately", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Alright, calm down. I thought they were useless anyway", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Useless! Oh my dear " + (player.isMale() ? "boy" : "girl") + ", they are quite important", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
finishQuest(player, npc);
}
});
}
});
}
});
} else
{
sendChat("Bollocks! Don't return til you have them you fool", npc, player);
spellPlayer(player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Hey! Watch yourself old man", player, npc);
player.setBusy(false);
npc.unblock();
}
});
}
}
});
} else // No
{
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Well what are you doing here then? Move it!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
spellPlayer(player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Would you bugger off with the spells you mad fool!", player, npc);
player.setBusy(false);
npc.unblock();
}
});
}
});
}
});
}
}
});
player.getActionSender().sendMenu(SECOND_MENU);
}
});
}
});
} else
{
player.setBusy(false);
npc.unblock();
}
}
});
}
});
}
/**
* Finishes the quest
*/
private void finishQuest(final Player player, final Npc npc)
{
player.setBusy(true);
npc.blockedBy(player);
player.getActionSender().sendMessage("You hand over the beads");
player.getInventory().remove(YELLOW_BEAD, 1);
player.getInventory().remove(RED_BEAD, 1);
player.getInventory().remove(WHITE_BEAD, 1);
player.getInventory().remove(BLACK_BEAD, 1);
player.getActionSender().sendInventory();
player.getActionSender().sendSound("click");
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Alright, that's my half of the bargain.", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Now what of my reward?", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("Ah, your reward. I found this! You can take it.", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
player.getActionSender().sendMessage(EntityHandler.getNpcDef(TALBORN_ID).getName() + " gives you one " + EntityHandler.getItemDef(ITEM_REWARD).getName());
player.getInventory().add(new InvItem(ITEM_REWARD, 1));
player.getActionSender().sendInventory();
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("What am I supposed to do with this?", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("I don't know, whatever you like. I certainly don't want it", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("And have a read of this book", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
sendChat("It'll teach you a thing or two about magic!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
player.getActionSender().sendMessage("You read the wizard's book");
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
player.incExp(6, REWARD_XP, false);
player.getActionSender().sendStat(6);
addSingleEvent(new SingleEvent(player, 2000)
{
public void action()
{
player.setBusy(true);
npc.blockedBy(player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Now I have work to do! Leave my tower!", npc, player);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
spellPlayer(player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
sendChat("Damnit! Gladly...", player, npc);
addSingleEvent(new SingleEvent(player, DEFAULT_EVENT_DELAY)
{
public void action()
{
player.setQuestStage(getUniqueID(), Quest.COMPLETE);
player.incQuestPoints(QUEST_POINTS);
player.setBusy(false);
npc.unblock();
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
});
}
/**
* Casts an imaginary spell at the player
*/
private void spellPlayer(Player player, Npc npc)
{
player.setLastDamage(0);
player.informOfModifiedHits(player);
player.getActionSender().sendTeleBubble(npc.getLocation().getX(), npc.getLocation().getY(), false);
player.getActionSender().sendSound("combat1a");
}
/**
* Construct the quest (empty)
*/
public ImpCatcher()
{
}
}