TaibwoWannai is a dangerous open world mini-game,
players can earn favors by: repairing fence, cutting jungle vines and killing threats (npcs).
anti poison and good gear are required for survival, along with a pickaxe and machete
which might come in handy.
It was a project that has been sitting idle quite some time now, i tried to mimic it as close to the official D&D. It did took quite some effort. So i hope you like it, happy valentines mfs <3
Supports all correct animations, gfx and configs.
- jungle vines can now be cutted
- machetes added along with emote ids
- gives a % chance of spawning a npc depending of the vines
- 8 > 13% probability of spawning npcs in light vines
- 14 > 19% npc spawns on medium vines
- 28 > 36% npc spawn on dense vines
- added interface when within area
- added fence repairing (requires 1 of any spar, the better spar,the faster repair speed.)
- added favor % point system
- added point drain (0.5% every 46 seconds, just like rs, keeps player active)
- added NPC combatdefs & poison npcs
- added NPC start dialogue (must complete short intro of info)
- players may create skewer sticks from spars (+skill dialogue)
- players can create spider on stick from skewer sticks and spider carcass(dropped within npc vine list) and cook them healing random amount of 70 to 100 HP.
- added mahogany and teak tree encampment *cost 100 trading sticks (Best place in world to cut mahogany/teaks in official play)
-**partly finished broodoo combat. weakens player cb stats by 3, magic protection resolves this but has a 50% chance of still draining 1 point when engaged. (this is custom and not 100% accurate, change it how you want it)
-broodoo victims randomly spawn at 5-12% chance over the area every 2-3 minutes.
-small chance for a gem rock when cutting final piece of a jungle vine.
-gout tubers can be found when cutting jungles.
-gabootys exchange (trading sticks) was added.
//todo
-add broodoo antipoison/food and relicym balm for broodoo dmg effect
-add parcel service + inter
-add all villagers and dialogues
-add npc bonuses
-create your own store using trading sticks
-find a way to deal with broodoos if a player exits or leaves the mini game. (perhaps on a timer?)
-add villager robes (costume) to increase points while playing, every part should give +1% more or so.
/**
*
* @Tai bwo wannai minigame
* @author PhaseGFX
*
* Minigame Extends:
* Player class
* World class
* Woodcutting class
* Food class
* Dialogues
* Cooking class
* NPC class
*
*/
public static final boolean inArea(WorldTile tile) {
int destX = tile.getX();
int destY = tile.getY();
return ((tile.getX() <= 2817 && tile.getX() >= 2770 && tile.getY() <= 3052 && tile.getY() >= 3075)); //
}
public void sendInterfaces() {
WorldTasksManager.schedule(new WorldTask() {
private int ticks;
@Override
public void run() {
ticks++;
if (ticks == 1) {
player.refreshTBW();
ticks = 1;
return;
}
}
}, 0, 0);
}
public static void prayTribalStatue(Player player) {
Long pray = (Long) player.getTemporaryAttributtes().get("PRAY");
if (pray != null && pray + 60000 > Utils.currentTimeMillis() && (player.startedTaiBwoWannai == true)) { //10min
player.getDialogueManager().startDialogue("SimpleMessage", "Players may only pray once every 10 minutes during the mini-game!");
return;
} else {
final int maxPrayer = player.getSkills()
.getLevelForXp(Skills.PRAYER) * 10;
if (player.getPrayer().getPrayerpoints() < maxPrayer) {
player.lock(5);
player.getPackets().sendGameMessage(
"You pray to the tribal god...", true);
player.setNextAnimation(new Animation(645));
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
player.getPrayer().restorePrayer(
maxPrayer);
player.getPackets()
.sendGameMessage(
"...and recharged your prayer.",
true);
player.getTemporaryAttributtes().put("PRAY", Utils.currentTimeMillis());
}
}, 2);
} else
player.getPackets().sendGameMessage(
"You already have full prayer.");
}
}
public static void sendPrepare (final Player player) {
player.getInterfaceManager().sendInterface(327);
player.getPackets().sendIComponentText(327, 14, "<col=ff0000>Antipoison</col> for jungle insects.</br><br>"
+ "<col=ff0000>Food</col> for health and recovery</br><br>"
+ "<col=ff0000>Decent gear</col> for protection</br><br>"
+ "<col=ff0000>Knife & chisel</col> to craft encountered items</br><br>"
+ "<col=ff0000>Pickaxe & machete</col> might be usefull</br><br>");
}
public static void sendStartI (final Player player) {
player.stopAll();
player.lock(5);
player.getInterfaceManager().sendInterface(327);
player.getPackets().sendIComponentText(327, 14, "Be advised, You may encounter jungle species</br><br>"
+ "including<col=ff0000> broodoo victims</col>, they weaken;</br><br>"
+ "combat stats if not switching prayers correctly.</br><br> "
+ "Players should also know that favour is drained,</br><br>"
+ "by 1% approx; every minute. Remaining inactive</br><br>"
+ "results to quite significant <col=ff0000>favour loss.</col></br><br>"
+ "</br><br><col=ff0000>Note:</col> player's favour will never drain beneath 0.</br><br>"
+ "</br><br><col=ff0000>No items are safe upon death but gravestones.</br><br>"
+ "If intentions to quit, talk to Tutrifitus or leave area.");
}
public static void CheckSpar(final Player player,WorldObject object) {
if (player.getAttackedBy() != null
&& player.getAttackedByDelay() > Utils.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You can't do this while you're under combat.");
return;
}
if (player.withinDistance(object, 1)) {
player.faceObject(object);
if (player.startedTaiBwoWannai == false) {
player.getDialogueManager().startDialogue("SimpleMessage", "This activity requieres to play the minigame: Tai-Bwo Wannai.");
return;
} else
if (player.getInventory().containsItem(6281, 1)) { // light spar repair speed 18s
RepairFenceLight(player, object);
return;
}
if (player.getInventory().containsItem(6283, 1)) { // medium spar 12s
RepairFenceMedium(player, object);
return;
} if (player.getInventory().containsItem(6285, 1)) { // dense spar 6s
RepairFenceDense(player, object);
return;
} if (player.getTBWPoints() > 400) {
player.refreshTBW();
player.sm("You already obtained the maximum %precentage in favour, exchange for sticks!");
return;
} else
player.getDialogueManager().startDialogue("SimpleMessage", "You need: (1) light, medium or dense spar to partially repair the villager's fence.");
return;
}
}
//light = 14s
public static void RepairFenceLight(final Player player, WorldObject object) {
player.refreshTBW();
player.lock(14);
player.setNextAnimation(new Animation(2384));
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
player.setNextAnimation(new Animation(2385));
}
}, 1);
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
World.spawnTemporaryObject(new WorldObject(object.getId() + 1,
object.getType(), object.getRotation(), object.getX(),
object.getY(), object.getPlane()), 900000, true);
player.setNextAnimation(new Animation(2386));
player.stopAll();
player.getInventory().deleteItem(6281, 1);
if (object.getId() == 9028 && (player.startedTaiBwoWannai == true)) {
player.sm("You use your light spar to complete reinforcements. (+ 0.25% bonus)");
player.setTBWPoins(player.getTBWPoints() + 1);
} else if (object.getId() == 9029 && (player.startedTaiBwoWannai == true)) {
player.sm("You already reinforced this fence completely!");
} else
player.sm("You repaired and reinforced the villager's fence partly with light spars.");
player.setTBWPoins(player.getTBWPoints() + 2);
player.refreshTBW();
}
}, 14);
}
//medium = 10s
public static void RepairFenceMedium(final Player player, WorldObject object) {
if (player.getAttackedBy() != null
&& player.getAttackedByDelay() > Utils.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You can't do this while you're under combat.");
return;
} else
player.refreshTBW();
player.lock(10);
player.setNextAnimation(new Animation(2384));
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
player.setNextAnimation(new Animation(2385));
}
}, 1);
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
World.spawnTemporaryObject(new WorldObject(object.getId() + 1,
object.getType(), object.getRotation(), object.getX(),
object.getY(), object.getPlane()), 900000, true);
player.setNextAnimation(new Animation(2386));
player.stopAll();
player.getInventory().deleteItem(6283, 1);
if (object.getId() == 9028 && (player.startedTaiBwoWannai == true)) {
player.sm("You use your medium spar to complete reinforcements. (+0.50% bonus)");
player.setTBWPoins(player.getTBWPoints() + 2);
} else if (object.getId() == 9029 && (player.startedTaiBwoWannai == true)) {
player.sm("You already reinforced this fence completely!");
}
player.sm("You repaired and reinforced the villager's fence with medium spars.");
player.setTBWPoins(player.getTBWPoints() + 2);
player.refreshTBW();
}
}, 10);
}
//dense = 7sec
public static void RepairFenceDense(final Player player, WorldObject object) {
if (player.getAttackedBy() != null
&& player.getAttackedByDelay() > Utils.currentTimeMillis()) {
player.getPackets().sendGameMessage(
"You can't do this while you're under combat.");
return;
} else
player.refreshTBW();
player.lock(6);
player.setNextAnimation(new Animation(2384));
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
player.setNextAnimation(new Animation(2385));
}
}, 1);
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
World.spawnTemporaryObject(new WorldObject(object.getId() + 1,
object.getType(), object.getRotation(), object.getX(),
object.getY(), object.getPlane()), 900000, true);
player.setNextAnimation(new Animation(2386));
player.stopAll();
player.getInventory().deleteItem(6285, 1);
if (object.getId() == 9028 && (player.startedTaiBwoWannai == true)) {
player.sm("You use your dense spar to complete reinforcements. (+ 0.50% bonus)");
player.setTBWPoins(player.getTBWPoints() + 2);
} else if (object.getId() == 9029 && (player.startedTaiBwoWannai == true)) {
player.sm("You already reinforced this fence completely!");
}
player.sm("You repaired and reinforced the villager's fence with some dense spars.");
player.setTBWPoins(player.getTBWPoints() + 3);
player.refreshTBW();
}
}, 7);
}
public ThatchSpars(Spar spar, int quantity) {
this.spar = spar;
this.quantity = quantity;
}
public boolean checkAll(Player player) {
if (!player.getInventory().containsItemToolBelt(946, 1)){
player.getDialogueManager().startDialogue("ItemMessage", "You need a knife to complete the action.", 946);
return false;
}
if (player.getSkills().getLevel(Skills.CRAFTING) < spar
.getLevelRequired()) {
player.getDialogueManager().startDialogue(
"SimpleMessage",
"You need a crafting level of " + spar.getLevelRequired() + "to cut a "+ItemDefinitions
.getItemDefinitions(spar.getUncut())
.getName().toLowerCase());
return false;
}
if (!player.getInventory().containsOneItem(spar.getUncut())) {
player.getDialogueManager().startDialogue(
"SimpleMessage",
"You don't have any "
+ ItemDefinitions
.getItemDefinitions(spar.getUncut())
.getName().toLowerCase() + " to cut.");
return false;
}
return true;
}
@Override
public boolean start(Player player) {
if (checkAll(player)) {
setActionDelay(player, 3);
player.sm("You process the "
+ ItemDefinitions
.getItemDefinitions(spar.getUncut())
.getName().toLowerCase() + " to skewer sticks.");
player.setNextAnimation(new Animation(spar.getEmote()));
return true;
}
return false;
}
@Override
public boolean process(Player player) {
return checkAll(player);
}
@Override
public int processWithDelay(Player player) {
player.getInventory().deleteItem(spar.getUncut(), 1);
player.getInventory().addItem(spar.getCut(), Utils.random(3, 6));
quantity--;
if (quantity <= 0)
return -1;
player.setNextAnimation(new Animation(spar.getEmote())); // start the
// emote and add
// 2 delay
return 3;
}
@Override
public void stop(final Player player) {
setActionDelay(player, 3);
}
@Override
public Object[] getKeys() {
TaiBwoWannai.drainPoints = true;
return new Object[] { 2499, 2501, 2503 };
}
private String[] randomMessages = {"Vu da Voodoo! Weekah yu!", "Yu can sey i wek u!", "be di templu, ikke kurse u", "Mambooo, dooo, Voodoo!!"};
private String getRandomMessage() {
return randomMessages[Utils.random(randomMessages.length - 1)];
}
@Override
public int attack(NPC npc, Entity target) {
final NPCCombatDefinitions defs = npc.getCombatDefinitions();
int damage = 0;
npc.setCapDamage(target.getHitpoints() / 4);
if (npc.withinDistance(target, 1)) {
damage = getRandomMaxHit(npc, defs.getMaxHit(),
NPCCombatDefinitions.MELEE, target);
npc.setNextAnimation(new Animation(422));
delayHit(npc, 0, target, getMeleeHit(npc, damage));
if (Utils.getRandom(4) == 0) {
if (target instanceof Player) {
Player player = (Player) target;
Player targetPlayer = (Player) target;
player.resetReceivedDamage();
int magicskill = 6;
int attack = targetPlayer.getSkills().getLevel(Skills.ATTACK);
int defence = targetPlayer.getSkills().getLevel(Skills.DEFENCE);
int strength = targetPlayer.getSkills().getLevel(Skills.STRENGTH);
int ranged = targetPlayer.getSkills().getLevel(Skills.MAGIC);
int magic = targetPlayer.getSkills().getLevel(magicskill);
npc.setNextAnimation(new Animation(716));
npc.setNextGraphics(new Graphics(105));
npc.setNextForceTalk(new ForceTalk(getRandomMessage()));
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
World.sendProjectile(npc, target, 106, 2, 5, 50, 50, 16, 0);
}
}, 1);
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
target.setNextGraphics(new Graphics(107));
if (player.getPrayer().usingPrayer(0, 17)
|| player.getPrayer().usingPrayer(1, 7)) {
player.sm("You 'protected from magic' prayer recoils the weakening effect of the voodoo's...");
stop();
return;
}
target.setNextGraphics(new Graphics(107));
targetPlayer.getSkills().set(0, attack < 3 ? 0 : attack - (3));
targetPlayer.getSkills().set(1, defence < 3 ? 0 : defence - (3));
targetPlayer.getSkills().set(2, strength < 3 ? 0 : strength - (3));
targetPlayer.getSkills().set(4, ranged < 3 ? 0 : ranged - (3));
targetPlayer.getSkills().set(6, magic < 3 ? 0 : magic - (3));
targetPlayer.getPackets().sendGameMessage("The broodoo victim significantly drains your combat skills.");
stop();
}
}, 2);
}
}
return 4;
} else
delayHit(npc, 2, target, getMagicHit(npc, getRandomMaxHit(npc, npc.getMaxHit(), defs.getAttackStyle(), target)));
npc.setNextAnimation(new Animation(defs.getAttackEmote()));
if (Utils.getRandom(4) == 0) {
if (target instanceof Player) {
Player player = (Player) target;
Player targetPlayer = (Player) target;
int attack = targetPlayer.getSkills().getLevel(Skills.ATTACK);
int defence = targetPlayer.getSkills().getLevel(Skills.DEFENCE);
int strength = targetPlayer.getSkills().getLevel(Skills.STRENGTH);
int ranged = targetPlayer.getSkills().getLevel(Skills.RANGE);
int magic = targetPlayer.getSkills().getLevel(Skills.MAGIC);
npc.setNextAnimation(new Animation(716));
npc.setNextGraphics(new Graphics(105));
npc.setNextForceTalk(new ForceTalk(getRandomMessage()));
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
World.sendProjectile(npc, target, 106, 5, 5, 50, 50, 16, 0);
}
}, 1);
WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
target.setNextGraphics(new Graphics(107));
if (player.getPrayer().usingPrayer(0, 17)
|| player.getPrayer().usingPrayer(1, 7)) {
player.sm("You 'protected from magic' prayer recoils the weakening effect of the voodoo's.");
stop();
public int usingProtectFromMagic(Player player) {
if (player != null) {
boolean prot = player.getPrayer().usingPrayer(0, 17) || player.getPrayer().usingPrayer(1, 7);
if (prot) {
player.sm("You 'protected from magic' prayer recoils the weakening effect of the voodoo's.");
return 1;
}
}
return 0;
}
}
Spoiler for Player.java:
Code:
public boolean introducedTaiBwoWannai = false; //minigame introduction
public boolean startedTaiBwoWannai = false; //minigame
public boolean finishedTaiBwoWannai = false; //end
public long pointsDegeneration;
//Tai Bwo Wannai minigame
@Override
public void checkTaiBwoWannai() {
if (!started)
return;
boolean isAtTaiBwoWannai = isForceTaiBwoWannai() ? true : World.isTaiBwoWannai(this);
if (isAtTaiBwoWannai && startedTaiBwoWannai == true && !isAtTaiBwoWannai()) {
getControlerManager().startControler("TaiBwoWannai");
refreshTBW();
} else if (!isAtTaiBwoWannai) {
startedTaiBwoWannai = false;
getInterfaceManager().closeTaiBwoWannai();
}
}
public int setTBWFavourPoints ;
int TBW = 0;
public int getTBWPoints() {
return TBW;
}
public void setTBWPoins(int TBW) {
this.TBW = TBW;
}
public boolean touchedDoor;
public long EXCHANGED;
private int ticks;
SPIDER_ON_STICK {
@Override
public void effect(Object object) {
Player player = (Player) object;
player.getInventory().addItem(6305, 1);
player.getPackets().sendGameMessage(
"Yaikess.. Full of protein, you removed the spider and re-use the skewer stick.", true);
}
},
Spoiler for Cooking.java:
Under public enum Cookables {
Code:
/**
* Spider on stick
*/
SPIDER_ON_STICK(new Item(6293, 1), 16, 40, 48, new Item(6301, 1), new Item(6297, 1), false, false);
Spoiler for NPC.java:
PASTE RANDOMLY (spawn a NPC guard next to the tree encampment, and force talk if player tries to enter. or right click > quick-pay)
Code:
public static void TBWdoorWarning(Player player, NPC npc) {
if (player.touchedDoor == true) {
npc.faceEntity(player);
String[] warning = {"Hey! Stop right there.",
"What do you think your doing?",
"Stand ground adventurer!",
"Show tickets before entering!"};
int i = Misc.random(1, 4);
if (npc.getName().equalsIgnoreCase("Guard")) {
npc.setNextForceTalk(new ForceTalk(warning[i]));
}
}
}
Under public void drop() {
Code:
if (this.getId() >= 2489 && this.getId() <= 2497) { //TaiBwoWannai jungle species
int loop = 0;
NPCDefinitions defs = NPCDefinitions.getNPCDefinitions(id);
String name = defs.getName().toLowerCase();
if (killer1.startedTaiBwoWannai == true) {
if (killer1.getTBWPoints() > 401) {
killer.sm("You achieved maximum favour and nothing is gained from killing more.");
return;
}
loop++;
if (loop == 1) {
killer.sm("You slayed a "+name+" and gained some favour in return.");
killer1.setTBWPoins(killer1.getTBWPoints() + 2);
} else if (loop == 4) {
killer1.refreshTBW();
killer.refreshTBW();
}
}
}
if (this.getId() >= 2499 && this.getId() <= 2503) { //TaiBwoWannai jungle broodoos
int loop = 0;
if (killer1.startedTaiBwoWannai == true) {
if (killer1.getTBWPoints() > 401) {
killer.sm("You achieved maximum favour and nothing is gained from killing more.");
return;
}
loop++;
if (loop == 1) {
killer.sm("You neutralized the village greatest threat, +2.0% favour gained.");
killer1.setTBWPoins(killer1.getTBWPoints() + 8);
} else if (loop == 4) {
killer1.refreshTBW();
killer.refreshTBW();
}
}
}
Under public void processNPC() {
Code:
//broodoos
if (id >= 2489 && id <= 2503) {
setRandomWalk(true);
setForceAgressive(true);
}
Spoiler for ObjectHandler.java:
(Should've handled it in controller class)
you should know where to add them.
//TBW tree encampment
else if (id == 9038 || id == 9039) {
if (player.withinDistance(object, 1)) {
if (player.getX() == 2817) {
player.lock(3);
handleTBWCamp(player, object);
player.addWalkSteps(player.getX() == 2817 ? 2816 : 2817, player.getY() == 3083 ? 3083 : 3083, 0,
false);
player.setRun(false);
return;
} else
player.getDialogueManager().startDialogue("TBWTreeCamp");
}
}
Code:
case "tribal statue":
TaiBwoWannai.prayTribalStatue(player);
break;
if (id == 9025 || id == 9026 || id == 9027 || id == 9028) {
TaiBwoWannai.CheckSpar(player, object);
}
if (id == 9029 && (player.startedTaiBwoWannai == true)) {
player.getDialogueManager().startDialogue("SimpleMessage", "You already reinforced this fence completely!");
}
/* Jungle Light Vines */
}else if (id == 9010) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.LIGHT_JUNGLE_3));
}else if (id == 9011) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.LIGHT_JUNGLE_2));
}else if (id == 9012) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.LIGHT_JUNGLE_1));
}else if (id == 9013) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.LIGHT_JUNGLE_OUT));
/** Jungle Medium Vines */
}else if (id == 9015) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.MEDIUM_JUNGLE_3));
}else if (id == 9016) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.MEDIUM_JUNGLE_2));
}else if (id == 9017) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.MEDIUM_JUNGLE_1));
}else if (id == 9018) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.MEDIUM_JUNGLE_OUT));
/*** Jungle Dense Vines */
}else if (id == 9020) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.DENSE_JUNGLE_3));
}else if (id == 9021) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.DENSE_JUNGLE_2));
}else if (id == 9022) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.DENSE_JUNGLE_1));
}else if (id == 9023) {
player.getActionManager().setAction(new Woodcutting(object, TreeDefinitions.DENSE_JUNGLE_OUT));
/***
*/
Somewhere under handleOption2
Code:
//TBW tree encampment
else if (id == 9038 || id == 9039) {
if (player.getX() == 2817) {
handleTBWCamp(player, object);
player.addWalkSteps(player.getX() == 2817 ? 2816 : 2817, player.getY() == 3083 ? 3083 : 3083, 0,
false);
player.setRun(false);
return;
}
if (player.getInventory().containsItem(6306, 100)) {
player.getInventory().deleteItem(6306, 100);
player.lock(3);
handleTBWCamp(player, object);
player.addWalkSteps(player.getX() == 2816 ? 2817 : 2816, player.getY() == 3083 ? 3083 : 3083, 0,
false);
player.setRun(false);
} else {
player.getDialogueManager().startDialogue("SimpleMessage",
"100 trading sticks are requiered to enter this Tree encampment.");
}
}
@Override
public void start() {
player.touchedDoor = true;
for (NPC n : World.getNPCs())
if (n.getName().equalsIgnoreCase("Guard")) {
player.setNextFaceEntity(n);
NPC.TBWdoorWarning(player, n);
sendNPCDialogue(npcId, 9827, "What do you think you'r doing? This area is restricted.");
}
player.cancelFaceEntityNoCheck();
}
@Override
public void run(int interfaceId, int componentId) {
switch (stage) {
case -1:
player.cancelFaceEntityNoCheck();
sendPlayerDialogue(9827, "Why restricted? Is there another way to enter this 'camp'?");
player.touchedDoor = false;
stage = 0;
break;
case 0:
sendNPCDialogue(npcId, 9827, "Yes; Players may enter this tree encampment by paying 100-trading sticks.");
stage = 1;
break;
case 1:
if (player.getInventory().containsItem(6306, 100)) {
sendOptionsDialogue("Choose an Option", "Yes, i'll pay.", "No, that's too expensive.");
stage = 12;
break;
} else
sendOptionsDialogue("Choose an Option", "What are trading sticks?", "How can i obtain these sticks?", "Nevermind.");
stage = 2;
break;
case 2:
if(componentId == OPTION_1) {
sendPlayerDialogue(9827, "So what are these 'trading sticks'?, explain please.");
stage = 3;
break;
} else if(componentId == OPTION_2) {
sendPlayerDialogue(9827, "And how i obtain these trading-sticks?");
stage = 7;
break;
} else if(componentId == OPTION_3) {
sendPlayerDialogue(9827, "Nevermind, im good.");
stage = 22;
break;
}
break;
case 3:
sendNPCDialogue(npcId, 9827, "Trading sticks is a currency in the Tai Bwo Wannai minigame, and is mostly used to buy several items.");
stage = 4;
break;
case 4:
sendNPCDialogue(npcId, 9827, "There are several villagers that accept these sticks for machetes, villager's robes and other goodies.");
stage = 5;
break;
case 5:
sendOptionsDialogue("Choose an Option", "How can i obtain these sticks?", "Got it, thanks!.");
stage = 6;
break;
case 6: //inter q_dialogue
if(componentId == OPTION_1) {
sendPlayerDialogue(9827, "And how can i obtain these then?");
stage = 7;
break;
} else if(componentId == OPTION_2) {
sendPlayerDialogue(9827, "I guess i know enough, thanks!");
stage = 22;
break;
}
break;
case 7:
sendNPCDialogue(npcId, 9827, "These can be obtain by playing the minigame itself, "
+ " favour will be gained by doing various activities. "
+ " Once obtained, talk to a villager for a exchange.");
stage = 8;
break;
case 8:
sendNPCDialogue(npcId, 9827, "Players may not exchange their favour for tickets if they haven't repaired a fence part,"
+ " though you can earn more favour by cutting jungles, and slaying monsters.");
stage = 9;
break;
case 9:
sendPlayerDialogue(9827, "Is there more to it?");
stage = 10;
break;
case 10:
sendNPCDialogue(npcId, 9827, "If you want a more detailed explination about the minigame, talk to Tutrifitus. He can guide and inform you.");
stage = 11;
break;
case 11:
sendPlayerDialogue(9827, "Thanks!");
stage = 22;
break;
case 12:
if(componentId == OPTION_1) {
if (player.getInventory().containsItem(6306, 100)) {
player.getInventory().deleteItem(6306, 100);
player.lock(3);
// player.getDialogueManager().startDialogue(6306, "You hand over the trading-sticks...");
end();
player.addWalkSteps(player.getX() == 2816 ? 2817 : 2816, player.getY() == 3083 ? 3083 : 3083, 0,
false);
player.setRun(false);
stage = 22;
break;
} else if(componentId == OPTION_2) {
sendPlayerDialogue(9827, "Nah, that's too expensive...");
stage = 14;
break;
}
break;
}
case 14:
sendNPCDialogue(npcId, 9827, "Not even for the best teak tree area in the whole world...?");
stage = 22;
break;
private int npcId = 2521;
private boolean amount10 = false;
private boolean amount25 = false;
private boolean amount50 = false;
private boolean amount100 = false;
@Override
public void start() {
sendNPCDialogue(npcId, 9827, "My name's Gabooty, how can i be of service "+player.getDisplayName()+"?" );
}
@Override
public void run(int interfaceId, int componentId) {
switch(stage) {
case -1:
stage = 0;
sendOptionsDialogue(SEND_DEFAULT_OPTIONS_TITLE,
"<col=42d9f4>[EXC]</col> I want to exchange my favour to trading sticks.",
"I would like to see one of your commercial stores.",
"I'd like to know who are you and what you'r doing here.",
"Just wanted to start a conversation.");
break;
case 0:
if(componentId == OPTION_1) {
stage = 1;
sendPlayerDialogue(9827, "I'm here to exchange my favour points to trading sticks.");
break;
} else if (componentId == OPTION_2) {
stage = 3;
sendPlayerDialogue(9827, "Who are you exactly?");
break;
} else if (componentId == OPTION_3)
end();
break;
case 1:
if (player.EXCHANGED >= Utils.currentTimeMillis ()) {
sendNPCDialogue(npcId, 9827, "You've recently traded in your favour points, come back later.");
player.getPackets().sendGameMessage("Villager's will be able to trade again after 30 minutes from the trade before.");
stage = 15;
return;
}
sendNPCDialogue(npcId, 9827, "Sure thing, how many points would you like to trade in for trading sticks?");
stage = 2;
break;
case 2:
sendOptionsDialogue(SEND_DEFAULT_OPTIONS_TITLE,
"<col=42d9f4>[EXC]</col> 10% Favour > 100 Trading-sticks.",
"<col=42d9f4>[EXC]</col> 25% Favour > 250 Trading-sticks.",
"<col=42d9f4>[EXC]</col> 50% Favour > 500 Trading-sticks.",
"<col=42d9f4>[EXC]</col> 100% Favour > 1000 Trading-sticks.");
stage = 3;
break;
case 3:
if(componentId == OPTION_1) {
stage = 4;
sendNPCDialogue(npcId, 9827, "You are about to trade in 10% favour for 100 trading stick. Confirm?");
amount10 = true;
break;
} else if (componentId == OPTION_2) {
stage = 4;
sendNPCDialogue(npcId, 9827, "You are about to trade in 25% favour for 250 trading stick. Confirm?");
amount25 = true;
break;
} else if (componentId == OPTION_3) {
stage = 4;
sendNPCDialogue(npcId, 9827, "You are about to trade in 50% favour for 500 trading stick. Confirm?");
amount50 = true;
break;
} else if (componentId == OPTION_4) {
stage = 4;
sendNPCDialogue(npcId, 9827, "You are about to trade in 100% favour for 1000 trading stick. Confirm?");
amount100 = true;
break;
}
break;
case 4:
sendOptionsDialogue(SEND_DEFAULT_OPTIONS_TITLE,
"Confirm.",
"Cancel");
stage = 5;
break;
case 5:
if(componentId == OPTION_1) {
if (amount10 == true) {
sendPlayerDialogue(9827, "Yes, i'd like to exchange.");
stage = 9;
} else if (amount25 == true) {
sendPlayerDialogue(9827, "Yes, i'd like to exchange.");
stage = 16;
} else if (amount50 == true) {
sendPlayerDialogue(9827, "Yes, i'd like to exchange.");
stage = 17;
} else if (amount100 == true) {
sendPlayerDialogue(9827, "Yes, i'd like to exchange.");
stage = 18;
}
break;
} else if (componentId == OPTION_2) {
stage = -2;
sendPlayerDialogue(9827, "I changed up my mind.");
end();
break;
}
break;
case 6:
sendNPCDialogue(npcId, 9827, "Thanks for helping around the village!");
stage = 7;
break;
case 7:
sendPlayerDialogue(9827, "Pleasure is mine!");
stage = -2;
end();
break;
case 77:
stage = 8;
sendOptionsDialogue(SEND_DEFAULT_OPTIONS_TITLE,
"Yea, i'd like to have a look please.",
"I'm alright, thanks.");
break;
case 8:
if(componentId == OPTION_1) {
stage = -2;
ShopsHandler.openShop(player, 100);
end();
break;
} else if (componentId == OPTION_2) {
stage = -2;
sendPlayerDialogue(9827, "No thank you.");
end();
break;
}
break;
case 9: //10%
if (player.getTBWPoints() < 40) {
sendNPCDialogue(npcId, 9827, "It seems you have not accumulated sufficient favour points, please come back when you have some ");
stage = -2;
return;
}
sendItemDialogue(6306, "Gabooty hands you over some trading sticks > (100).");
player.getInventory().addItem(6306, 100);
player.setTBWPoins(player.getTBWPoints() - 40);
player.EXCHANGED = 1800000 + Utils.currentTimeMillis(); // 30min
amount10 = false;
stage = 13;
break;
case 16: //25%
if (player.getTBWPoints() < 100) {
sendNPCDialogue(npcId, 9827, "It seems you have not accumulated sufficient favour points, please come back when you have some.");
stage = -2;
return;
}
sendItemDialogue(6306, "Gabooty hands you over some trading sticks > (250).");
player.getInventory().addItem(6306, 250);
player.setTBWPoins(player.getTBWPoints() - 100);
player.EXCHANGED = 1800000 + Utils.currentTimeMillis(); // 30min
amount25 = false;
stage = 13;
break;
case 17: //50%
if (player.getTBWPoints() < 200) {
sendNPCDialogue(npcId, 9827, "It seems you have not accumulated sufficient favour points, please come back when you have some.");
stage = -2;
return;
}
sendItemDialogue(6306, "Gabooty hands you over some trading sticks > (500).");
player.getInventory().addItem(6306, 500);
player.setTBWPoins(player.getTBWPoints() - 200);
player.EXCHANGED = 1800000 + Utils.currentTimeMillis(); // 30min
amount50 = false;
stage = 13;
break;
case 18: //100%
if (!(player.getTBWPoints() > 400)) {
sendNPCDialogue(npcId, 9827, "It seems you have not accumulated sufficient favour points, please come back when you have some.");
stage = -2;
return;
}
sendItemDialogue(6306, "Gabooty hands you over some trading sticks > (1000).");
player.getInventory().addItem(6306, 1000);
player.setTBWPoins(player.getTBWPoints() - 400);
player.EXCHANGED = 1800000 + Utils.currentTimeMillis(); // 30min
amount100 = false;
stage = 13;
break;
case 10:
sendPlayerDialogue(9827, "That's fairly true...");
stage = -1;
break;
case 13:
sendNPCDialogue(npcId, 9827, "It's a pleasure doing these exchanges! Thanks for helping out the village.");
stage = 14;
break;
case 14:
sendPlayerDialogue(9827, "Pleasure is mine!");
stage = 15;
break;
case 15:
end();
stage = -2;
break;
default:
end();
break;
}
}
@Override
public void finish() {
// TODO Auto-generated method stub
@Override
public void start() {
npcId = 740;
sendEntityDialogue(
SEND_2_TEXT_CHAT,
new String[] {
NPCDefinitions.getNPCDefinitions(npcId).name,
"Salutions, "+player.getUsername()+"! What brings you to this small village?" },
IS_NPC, npcId, 9827);
stage = 0;
}
@Override
public void run(int interfaceId, int componentId) {
switch (stage) {
case 0:
sendOptionsDialogue(SEND_DEFAULT_OPTIONS_TITLE,
"<img=7>Ask about Tai-Bwo-Wannai minigame",
"What is this tree encampment?",
"Who are you?");
stage = 1;
break;
case 1:
switch (componentId) {
case OPTION_1:
sendNPCDialogue(npcId, 9850, "Alright, the following minigame is called Tai Bwo Wannai and can be a dangerous minigame.");
stage = 25;
break;
case OPTION_2:
sendPlayerDialogue(9827, "What is this tree-encampent?");
stage = 20;
break;
case OPTION_3:
stage = -2;
sendPlayerDialogue(9827, "Nevermind.");
break;
}
break;
case 25:
sendNPCDialogue(npcId, 9827, "The villagers who start to return are only overrun by jungle envoirment and other nasty suprises making it for most inaccessible.");
stage = 4;
break;
case 4:
sendNPCDialogue(npcId, 9827, "In order to help out, you must cut your way through jungles; repair fences, and slay monsters.");
stage = 5;
break;
case 5:
sendPlayerDialogue(9827, "Where was the fence for?");
stage = 6;
break;
case 6:
sendNPCDialogue(npcId, 9827, "It was to keep monsters away from the village, especially the scary broodoo victims. they attacked citizens with frightening vodoo magic. ");
stage = 7;
break;
case 7:
sendNPCDialogue(npcId, 9827, "At all cost, the player MUST repair atleast 3 pieces of the fence in order to exchange the points into trading sticks.");
stage = 8;
break;
case 8:
stage = 11;
sendOptionsDialogue(SEND_DEFAULT_OPTIONS_TITLE,
"What if i don't?",
"Is there more?",
player.startedTaiBwoWannai == true
? "I want to quit please." : "I'd like to start." );
break;
case 11:
switch (componentId) {
case OPTION_1:
sendPlayerDialogue(9827, "So if it happens i forgot to repair a fence, and like to trade in the points, can i?");
stage = 12;
break;
case OPTION_2:
stage = 26;
sendPlayerDialogue(9827, "Roger!");
break;
case OPTION_3:
stage = 29;
sendPlayerDialogue(9827, "I'd like to start! Let's go!");
break;
}
break;
case 12:
sendNPCDialogue(npcId, 9850, "If one forgets to repair the fence, the villagers will be angry and not trade in the points you earned for 30 minutes.");
stage = 13;
break;
case 13:
sendNPCDialogue(npcId, 9850, "That is so, because the citizens of the village don't feel protected enough. Eitherway, you'll have to wait 30 minutes after a successfull exchange.");
stage = 14;
break;
case 14:
sendPlayerDialogue(9850, "Guess it comes down to the same thing...");
stage = 0;
break;
case 20:
sendNPCDialogue(npcId, 9850, "This encampment contains; 4 Mahogany trees, and 9 teak trees, and can only be accessed by paying 100-Trading sticks.");
stage = 21;
break;
case 21:
sendOptionsDialogue(SEND_DEFAULT_OPTIONS_TITLE,
"How do i earn these Trading sticks?",
"Thanks!");
stage = 22;
break;
case 22:
switch (componentId) {
case OPTION_1:
sendPlayerDialogue(9827, "How do i earn these Trading sticks?");
stage = 23;
break;
case OPTION_2:
stage = -2;
sendPlayerDialogue(9827, "Thanks!");
break;
}
break;
case 23:
sendNPCDialogue(npcId, 9850, "Trading sticks can be earned by playing the Tai-Bwo-Wannai minigame!");
stage = 24;
break;
case 24:
sendPlayerDialogue(9827, "Awesome, Thanks!");
stage = -2;
break;
case 26:
sendNPCDialogue(npcId, 9850, "as mentioned earlier; this can be quite dangerous, many obstacles and monsters lurk within these areas. It is advised the player brings the following:");
stage = 27;
break;
case 28:
sendPlayerDialogue(9827, "Thanks!");
stage = -2;
break;
case 29:
if (player.startedTaiBwoWannai == true) {
sendNPCDialogue(npcId, 9850, "You have already started the mini-game! get back to it.");
stage = -2;
return;
}
if (player.introducedTaiBwoWannai == true && player.startedTaiBwoWannai == false) {
sendNPCDialogue(npcId, 9850, "Best of luck, Adventurer!");
player.sm("You have started the <img=7> <col=ff0000>Tai-Bwo-Wannai</col> mini-game, good luck!");
player.startedTaiBwoWannai = true;
stage = -2;
return;
} else
sendNPCDialogue(npcId, 9850, "It'd be wise to let me finish the essential requirements for survival");
player.sm("Let Trufitus explain what you might need before starting.");
stage = -2;
break;
@Override
public void start() {
this.spar = (Spar) parameters[0];
SkillsDialogue
.sendSkillsDialogue(
player,
SkillsDialogue.CUT,
"Choose how many you wish to cut,<br>then click on the item to begin.",
player.getInventory().getItems()
.getNumberOf(spar.getUncut()),
new int[] { spar.getUncut() }, null);
}
@Override
public void run(int interfaceId, int componentId) {
player.getActionManager().setAction(
new ThatchSpars(spar, SkillsDialogue.getQuantity(player)));
end();
}