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

281 lines
8.1 KiB
Java

import org.rscdaemon.server.quest.*;
import org.rscdaemon.server.model.*;
import org.rscdaemon.server.event.*;
/**
* 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();
}
});
}
}