mirror of
https://github.com/moparisthebest/MoparClassic
synced 2024-11-14 05:05:10 -05:00
687 lines
29 KiB
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()
|
|
{
|
|
}
|
|
} |