MoparClassic/GameServer/conf/server/quests_back/SheepShearer.java
2011-04-27 14:55:20 +10:00

298 lines
8.7 KiB
Java

import msc.gs.Instance; import msc.gs.event.SingleEvent;
import msc.gs.Instance; import msc.gs.model.InvItem;
import msc.gs.Instance; import msc.gs.model.MenuHandler;
import msc.gs.Instance; import msc.gs.model.Npc;
import msc.gs.Instance; import msc.gs.model.Player;
import msc.gs.Instance; import msc.gs.quest.Quest;
import msc.gs.Instance; import msc.gs.quest.QuestAction;
/**
* Quest: Sheep Shearer (v1.0) Status: COMPLETE Start: Fred the farmer (id 77),
* 159, 619 Items: 207x20 Reward: 1 quest point, 60 gold, Crafting 350 xp
*
* @author Konijn
*/
public class SheepShearer extends Quest {
private final int FRED_ID = 77;
private final int ITEM_WOOL = 207;
private final int REWARD_XP = 350;
private final int REWARD_GP = 330;
private final String[] FIRST_MENU = new String[] {
"Sure, what do I need to do?", "No thanks, I'm good." };
private final String[] SECOND_MENU = new String[] {
"Sorry, I don't like the sound of that.", "I'd be happy to help." };
public void init() {
associateNpc(FRED_ID);
}
public SheepShearer() {
}
public String getName() {
return "Sheep Shearer";
}
public int getUniqueID() {
return 1;
}
public void handleAction(QuestAction action, Object[] args,
final Player player) {
int stage = player.getQuestStage(this);
if (stage == -1) // Quest hasn't been started
{
if (action == action.TALKED_NPC) {
if (!(args[0] instanceof Npc))
return;
final Npc npc = (Npc) args[0];
if (npc.getID() != FRED_ID)
return;
player.setBusy(true);
npc.blockedBy(player);
sendChat("Hi there, traveller. Care to make some money?", npc,
player);
addSingleEvent(new SingleEvent(player, 2000) {
public void action() {
player.setBusy(false);
player.setMenuHandler(new MenuHandler(FIRST_MENU) {
public void handleReply(final int option,
final String reply) {
player.setBusy(true);
switch (option) {
case 1:
player.setBusy(false);
npc.unblock();
sendChat("No thanks, I'm good.", player,
npc);
break;
case 0:
sendChat("Sure, what do I need to do?",
player, npc);
addSingleEvent(new SingleEvent(player, 2000) {
public void action() {
sendChat(
"If you collect 20 balls of wool for me, I'll pay you 500 coins.",
npc, player);
addSingleEvent(new SingleEvent(
player, 2000) {
public void action() {
sendChat(
"Maybe I'll teach you a thing or two about crafting, too.",
npc, player);
addSingleEvent(new SingleEvent(
player, 2000) {
public void action() {
sendChat(
"I'm afraid you'll have to find your own shears, but the sheep are outside.",
npc, player);
addSingleEvent(new SingleEvent(
player,
2000) {
public void action() {
player
.setBusy(false);
player
.setMenuHandler(new MenuHandler(
SECOND_MENU) {
public void handleReply(
final int option,
final String reply) {
player
.setBusy(true);
switch (option) {
case 1:
sendChat(
"I'd be happy to help.",
player,
npc);
addSingleEvent(new SingleEvent(
player,
2000) {
public void action() {
sendChat(
"Great! Come back and see me when you're done.",
npc,
player);
addSingleEvent(new SingleEvent(
player,
2000) {
public void action() {
player
.setQuestStage(
getUniqueID(),
1);
player
.setBusy(false);
npc
.unblock();
}
});
}
});
break;
case 0:
sendChat(
"Sorry, I don't like the sound of that.",
player,
npc);
addSingleEvent(new SingleEvent(
player,
2000) {
public void action() {
sendChat(
"Suit yourself. Come and see me if you change your mind.",
npc,
player);
player
.setBusy(false);
npc
.unblock();
}
});
break;
default:
player
.setBusy(false);
npc
.unblock();
break;
}
}
});
owner
.getActionSender()
.sendMenu(
SECOND_MENU);
}
});
}
});
}
});
}
});
break;
default:
player.setBusy(false);
npc.unblock();
break;
}
}
});
owner.getActionSender().sendMenu(FIRST_MENU);
}
});
} else
return;
} else if (stage == 1) {
if (action == action.TALKED_NPC) {
if (!(args[0] instanceof Npc))
return;
final Npc npc = (Npc) args[0];
if (npc.getID() != FRED_ID)
return;
player.setBusy(true);
npc.blockedBy(player);
sendChat("Ahh, you've returned! Do you have my wool?", npc,
player);
addSingleEvent(new SingleEvent(player, 2000) {
public void action() {
player.setBusy(false);
player.setMenuHandler(new MenuHandler(new String[] {
"I'm afraid not.", "Yes, I do." }) {
public void handleReply(final int option,
final String reply) {
player.setBusy(true);
sendChat(reply, player, npc);
if (option == 0) {
addSingleEvent(new SingleEvent(player, 2000) {
public void action() {
sendChat(
"Well, come and see me when you do. The offer still stands",
npc, player);
player.setBusy(false);
npc.unblock();
}
});
} else if (option == 1) {
addSingleEvent(new SingleEvent(player, 2000) {
public void action() {
// check items
if (player.getInventory()
.hasItemId(ITEM_WOOL)
&& player.getInventory()
.countId(ITEM_WOOL) >= 20) {
finishQuest(player, npc);
} else {
sendChat(
"Um, no you don't. Get back to me when you do. The reward still stands!",
npc, player);
player.setBusy(false);
npc.unblock();
}
}
});
}
}
});
owner.getActionSender()
.sendMenu(
new String[] { "I'm afraid not.",
"Yes, I do." });
}
});
}
} else if (stage == 0) {
if (action == action.TALKED_NPC) {
if (!(args[0] instanceof Npc))
return;
final Npc npc = (Npc) args[0];
if (npc.getID() != FRED_ID)
return;
player.setBusy(true);
npc.blockedBy(player);
sendChat("Hello " + player.getUsername() + "!", npc, player);
player.setBusy(false);
npc.unblock();
}
}
}
private void finishQuest(final Player player, final Npc npc) {
sendChat("Thank you very much! As promised, here's your reward.", npc,
player);
addSingleEvent(new SingleEvent(player, 2000) {
public void action() {
player.incExp(12, REWARD_XP, false);
player.getActionSender().sendStat(12);
player.setQuestStage(getUniqueID(), Quest.COMPLETE);
for (int i = 0; i < 20; i++)
player.getInventory().remove(ITEM_WOOL, 1);
player.getInventory().add(new InvItem(10, REWARD_GP));
player.getActionSender().sendInventory();
player.incQuestPoints(1);
player.setBusy(false);
npc.unblock();
}
});
}
}