TzHaar Caves Guide
Definition:
The world "TzHaar" means "holy (sacred) fire"
Music Unlocks:
In the Pits - The main area of TzHaar City
Fire and Brimstone - In the TzHaar Fight Pit minigame
TzHaar! - In the TzHaar Fight Cave minigame
Maps:


NPC's:
TzHaar-Hur: Level 74 
TzHaar-Mej: Level 103 
TzHaar-Xil: Level 133 
Tzhaar-Ket: Level 149 
TzHaar-Hur-Lek 
TzHaar-Hur-Tel 
TzHaar-Mej-Roh 
TzHaar-Mej-Jal 
TzHaar-Mej-Kah 
TzHaar-Ket-Zuh 
Shops:
Note: The shops will not accept coins as currency; only Tokkul. If players sell any items to the shops, they will also receive Tokkul in return, instead of coins.
Location 
Speak to: TzHaar-Hur-Lek

* Copper ore (5): 20 TokKul
* Iron ore (2): 17 TokKul
* Onyx bolt tips (50): 1,000 TokKul
* Tin ore (5): 20 TokKul
* Uncut emerald (1): 50 TokKul
* Uncut onyx (1): 300,000 TokKul
* Uncut sapphire (1): 25 TokKul
Location 
Speak to: TzHaar-Hur-Tel

* Obsidian cape (∞): 90,000 TokKul
* Toktz-ket-xil (∞): 67,500 TokKul
* Toktz-mej-tal (∞): 52,500 TokKul
* Toktz-xil-ak (∞): 60,000 TokKul
* Toktz-xil-ek (∞): 37,500 TokKul
* Toktz-xil-ul (∞): 375 TokKul
* Tzhaar-ket-em (∞): 45,000 TokKul
* Tzhaar-ket-om (∞): 75,000 TokKul
Location 
Speak to: TzHaar-Mej-Roh

* Air rune (∞): 26 TokKul
* Body rune (∞): 24 TokKul
* Chaos rune (∞): 210 TokKul
* Death rune (∞): 465 TokKul
* Earth rune (∞): 26 TokKul
* Fire rune (∞): 26 TokKul
* Mind rune (∞): 26 TokKul
* Water rune (∞): 26 TokKul
Bank:
Trade with TzHarr-Ket-Zuh 
Its the little on the map.
Smithing:
You can smith in the lava forge as in the picture below.

Minigames:
Fight Pits:
SAFE MINIGAME
Basic Gameplay
The rules of the Fight Pits are simple: the last man standing, wins. Winners will receive a red skull icon above their head, signifying them as the winner.
The winner can either re-enter the waiting room and collect a reward of Tokkul, or they can wait in the gameplay area for the next game to begin.
Equipment
The Fight Pits is an 'anything goes' minigame: any weapon or armour type can be used, with the exception of the dwarf multicannon. This makes the game very popular for high-leveled players wearing Barrows armour or using Ancient Magicks.
Basic Strategy
* Teams: Many players will agree to 'team up' in the waiting room. After all other enemies have been defeated, player of a team either take turns winning or then turn on each other. This is a very popular strategy of clans.
* Hiding: An often-ridiculed strategy, hiding consists of concealing oneself in a remote corner of the gameplay area, waiting for the various players and teams to weaken each other.
* The waiting game: A very common strategy in which a player waits where all the fights are going on, waiting for someone to attack them while the other's weaken each other.

Fight Caves:
SAFE MINIGAME


Tactical analysis
In order for one to reach TzTok-Jad, one must first endure 62 rounds of fighting progressively tougher monsters. TzTok-Jad himself is a level 702, huge, four-legged behemoth and uses Magic, Melee, & Ranged attacks - he will only melee you when you are adjacent to him; otherwise he alternates between using Magic and Range. All of these can deal enough damage in a single blow to kill even the most powerful of players if not guarded against via using the correct protection prayer. TzTok-Jad has a max hit of 97. It is rumoured he can hit higher, up to 102, but this hasn't been confirmed. When TzTok-Jad is down to half health, he will summon four Yt-HurKots (level 108 with 60 HP and tiny in comparison) which will heal him, effectively causing him to regenerate endlessly until you deal with them. In order to stop them from healing you need to hit them once to draw their attention to you. In order to compensate from Yt-HurKot's 14-Hitpoint damage, turn on the Steel Skin prayer, or kill them. Alternatively, when all of them are attacking you, simply run through TzTok-Jad and they will become trapped behind him (this is not advised unless you are experienced and know his actions). You can use a bow such as Karil's crossbow or the Crystal bow to attack.
Note: When attacking the healers with a bow/crossbow to turn their attention to you, it is advised to set the attack style to longrange first, otherwise you may walk too close to TzTok-Jad, and get hit by its melee attack.
Survival depends on watching his movements; he warns the player before attacking with non-melee attacks. By listening for certain sounds and watching his forelegs prior to his attack, he/she can switch to the appropriate protection prayer and avoid severe damage.
Reaching TzTok-Jad takes a considerable amount of time and resources, requiring usually 2-3 hours of continuous playing and a considerable number of potions.
Actually defeating TzTok-Jad requires a huge amount of persistance and determination, as TzTok-Jad is rarely defeated in the first few tries from even the best RuneScape players.
Contrary to popular belief, a player's Ranged or Combat Level to a point do not considerably affect the player's performance in the Fight Caves, as the immense difficulty of dealing with the trials and the final battle with TzTok-Jad still remains. A higher defence level, however, DOES help the player to get to TzTok-Jad easier, as the player can equip better armour and will get hit less often.
For players who wish to save their high-healing foods for later fights may choose to find a safespot and wait until their hitpoints heal. This is very time consuming, but casting a Lunar Dream spell, having a bracelet of regeneration equip or Rapid Heal turned on will speed up the healing process
Waves
1. 22
2. 22, 22
3. 45
4. 45, 22
5. 45, 45
6. 90
7. 90, 22
8. 90, 22, 22
9. 90, 45
10. 90, 45, 22
11. 90, 45, 22, 22
12. 90, 45, 45
13. 90, 90
14. 180
15. 180, 22
16. 180, 22, 22
17. 180, 45
18. 180, 45, 22
19. 180, 45, 22, 22
20. 180, 45, 45
21. 180, 90
22. 180, 90, 22
23. 180, 90, 22, 22
24. 180, 90, 45
25. 180, 90, 45, 22
26. 180, 90, 45, 22, 22
27. 180, 90, 45, 45
28. 180, 90, 90
29. 180, 180
30. 360
31. 360, 22
32. 360, 22, 22
33. 360, 45
34. 360, 45, 22
35. 360, 45, 22, 22
36. 360, 45, 45
37. 360, 90
38. 360, 90, 22
39. 360, 90, 22, 22
40. 360, 90, 45
41. 360, 90, 45, 22
42. 360, 90, 45, 22, 22
43. 360, 90, 45, 45
44. 360, 90, 90
45. 360, 180
46. 360, 180, 22
47. 360, 180, 22, 22
48. 360, 180, 45
49. 360, 180, 45, 22
50. 360, 180, 45, 22, 22
51. 360, 180, 45, 45
52. 360, 180, 90
53. 360, 180, 90, 22
54. 360, 180, 90, 22, 22
55. 360, 180, 90, 45
56. 360, 180, 90, 45, 22
57. 360, 180, 90, 45, 22, 22
58. 360, 180, 90, 45, 45
59. 360, 180, 90, 90
60. 360, 180, 180
61. 360, 360
62. 702 TzTok-Jad, four Level 108 healers when TzTok-Jad is at half health


Reward is Firecape, for cpmpleting all of the waves. 
RSBot Scripts for TzHaar caves:
RevivedCaviak V1.69 ~A really good script!


import java.io.*;
import java.util.*;
import com.speljohan.rsbot.script.Random;
import com.speljohan.rsbot.script.wrappers.RSInterface;
public class BreakHandler extends Random {
private final String confFile = "Settings/breaks.txt";
private long startTime = System.currentTimeMillis();
private ArrayList<Break> breaks = new ArrayList<Break>();
private Break curBreak;
private boolean reset;
private Iterator<Break> it;
private boolean setConfigs = true;
private long curTime = System.currentTimeMillis();
public String getName() {
return "Break Handler";
}
public String getAuthor() { // ported to RSBot by ngovil21
return "regex, sean, pd";
}
public double getVersion() {
return 1;
}
public void getConfig() {
Configuration conf = new Configuration(confFile);
for (String prop : conf.propertyNames()) {
String val = conf.get(prop);
String breakVal = val.substring(0, val.indexOf(',')).trim();
String lengthVal = val.substring(val.indexOf(',') + 1).trim();
long breakAtMin, breakAtMax, lengthMin, lengthMax;
try {
if (breakVal.indexOf('|') != -1) {
breakAtMin = Long.parseLong(breakVal.substring(0,
breakVal.indexOf('|')).trim());
breakAtMax = Long.parseLong(breakVal.substring(
breakVal.indexOf('|') + 1).trim());
} else {
breakAtMax = Long.parseLong(breakVal);
breakAtMin = breakAtMax - breakAtMax / 4;
}
if (lengthVal.indexOf('|') != -1) {
lengthMin = Long.parseLong(lengthVal.substring(0,
lengthVal.indexOf('|')).trim());
lengthMax = Long.parseLong(lengthVal.substring(
lengthVal.indexOf('|') + 1).trim());
} else {
lengthMax = Long.parseLong(lengthVal);
lengthMin = lengthMax / 2;
}
} catch (Exception ex) {
log("Exception loading BreakHandler config (" + prop + " = "
+ val + ")");
ex.printStackTrace();
continue;
}
// convert to ms
breakAtMin *= 60000;
breakAtMax *= 60000;
lengthMin *= 60000;
lengthMax *= 60000;
Break b = new Break(breakAtMin, breakAtMax, lengthMin, lengthMax);
breaks.add(b);
}
Collections.sort(breaks, new Comparator<Break>() {
public int compare(Break b1, Break b2) {
return (int) (b1.getBreakAtMin() - b2.getBreakAtMin());
}
});
it = breaks.iterator();
}
public boolean activateCondition() {
if (setConfigs) {
getConfig();
startTime = System.currentTimeMillis();
setConfigs = false;
}
if (breaks.isEmpty()) {
return false;
}
if (reset) {
it = breaks.iterator();
startTime = System.currentTimeMillis();
reset = false;
}
if (curBreak == null) {
curBreak = it.next();
}
curTime = System.currentTimeMillis();
if (curBreak.shouldBreak(startTime, curTime)) {
return true;
}
return false;
}
public int loop() {
if (curBreak == null) {
return -1;
}
if (curBreak.getLengthMin() <= 0) {
log("After " + cTime(curTime - startTime) + ", shutting down.");
logout();
reset = true;
stopAllScripts();
} else {
long breakLength = curBreak.randLength();
log("After " + cTime(curTime - startTime) + ", taking break for "
+ cTime(breakLength));
logout();
wait(random(1000, 2000));
if(isLoggedIn()) {
log("still logged in, waiting a few seconds");
return random(5000, 6000);
}
curBreak = null;
if (!it.hasNext()) {
reset = true;
}
return (int) breakLength;
}
// give the bot ample time to log out, so run() isn't called
// again and values reset before the break has been taken.
return -1;
}
private String cTime(long eTime) {
long hrs = eTime / 1000 / 3600;
eTime -= hrs * 3600 * 1000;
long mins = eTime / 1000 / 60;
eTime -= mins * 60 * 1000;
long secs = eTime / 1000;
return String.format("%1$02d:%2$02d:%3$02d", hrs, mins, secs);
}
/*public boolean logout() {
if (!RSInterface.getInterface(548).isValid()) {
return false;
}
atInterface(548, 91);
wait(random(400, 700));
atInterface(182, 6);
return true;
}*/
protected class Break {
private final long breakAtMin;
private final long breakAtMax;
private final long lengthMin;
private final long lengthMax;
private long randBreak = 0;
Break(long breakAtMin, long breakAtMax, long lengthMin, long lengthMax) {
this.breakAtMin = breakAtMin;
this.breakAtMax = breakAtMax;
this.lengthMin = lengthMin;
this.lengthMax = lengthMax;
randBreak = randBreakAt();
}
private long randLong(long min, long max) {
return min + (long) (java.lang.Math.random() * (max - min));
}
public long getBreakAtMin() {
return breakAtMin;
}
public long getBreakAtMax() {
return breakAtMax;
}
public long getLengthMin() {
return lengthMin;
}
public long getLengthMax() {
return lengthMax;
}
public long randBreakAt() {
return randLong(breakAtMin, breakAtMax);
}
public long randLength() {
return randLong(lengthMin, lengthMax);
}
public boolean shouldBreak(long startTime, long curTime) {
if (curTime - startTime > randBreak) {
randBreak = randBreakAt();
return true;
} else {
return false;
}
}
}
public class Configuration {
private File loadedFrom;
private Properties props;
private boolean xml;
/**
* Reads and parses the specified file; can parse as both XML and
* standard Properties syntax. If fileName ends with .xml, XML format is
* assumed.
*
* @param fileName The name of the file to parse
*/
public Configuration(String fileName) {
loadedFrom = new File(fileName);
if (fileName.toLowerCase().endsWith(".xml")) {
xml = true;
}
props = new Properties();
if (loadedFrom.exists()) {
FileInputStream fis = null;
try {
fis = new FileInputStream(loadedFrom);
if (xml) {
props.loadFromXML(fis);
} else {
props.load(new FileInputStream(loadedFrom));
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* Saves the configuration
*/
public void save() {
save(loadedFrom, xml);
}
/**
* Saves the configuration to specified filename; if the filename ends
* with .xml, saves in XML format.
*
* @param fileName Filename to save to.
*/
public void save(String fileName) {
File f = new File(fileName);
save(f);
}
/**
* Saves the configuration to specified File; if the name of the file
* ends with .xml, saves in XML format.
*
* @param f File object to save to
*/
public void save(File f) {
save(f, f.getName().toLowerCase().endsWith(".xml"));
}
/**
* Saves the configuration to specified File
*
* @param f File object to save to
* @param xml Whether to save in XML format
*/
public void save(File f, boolean xml) {
FileOutputStream fos = null;
try {
if (f.exists()) {
f.delete();
}
f.createNewFile();
fos = new FileOutputStream(f);
if (xml) {
props.storeToXML(fos, null);
} else {
props.store(fos, null);
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* Gets the value of a key
*
* @param key The key to retrieve
* @return The String value of the given key
*/
public String get(String key) {
String rv = props.getProperty(key);
return rv == null ? "" : rv;
}
/**
* Gets the value of a key, with a default value to fall back on
*
* @param key The key to retrieve
* @param defaultValue The default value to use if no such key was
* available
* @return The String value of the given key, or the default value
*/
public String get(String key, String defaultValue) {
return props.getProperty(key, defaultValue);
}
public int getInt(String key) {
String l = get(key);
if (!l.equalsIgnoreCase("")) {
return Integer.parseInt(l);
} else {
return -1;
}
}
/**
* Gets an Enumeration of available property names
*
* @return Enumeration object containing available properties
*/
public Set<String> propertyNames() {
return props.stringPropertyNames();
}
/**
* Puts a key/value pair into the configuration
*
* @param key The key to assign a value to
* @param value The value to assign
* @return The previous value of the key, or null if it did not have one
*/
public Object put(String key, String value) {
return props.setProperty(key, value);
}
/**
* Returns the number of available properties
*
* @return The number of properties
*/
public int size() {
return props.size();
}
}
}
RuneSeller
import java.util.Map;
import com.speljohan.rsbot.bot.Bot;
import com.speljohan.rsbot.event.listeners.PaintListener;
import com.speljohan.rsbot.script.Script;
public class RuneSeller extends Script {
int RuneID1 = 554 ;
int RuneID2 = 562;
public double getVersion() {
return 1.0;
}
public String getName() {
return "RuneSeller";
}
public String getAuthor() {
return "Killa";
}
public String getScriptCategory() {
return "Killa/MoneyMaking";
}
public boolean onStart(Map<String, String>args) {
return true;
}
void ClickRune() {
if(inventoryContains(RuneID1)) {
atInventoryItem(RuneID1, "50");
} else {
if (inventoryContains(RuneID2)) {
atInventoryItem(RuneID2, "50");
}
}
}
public int loop() {
ClickRune();
return (random(10,50));
}
}
What to spend tokkul on?

A bunch of the pictures and some of the infro was not 100% made by me so i will not take full credit for this guide.
__________________
To view links or images in signatures your post count must be 0 or greater. You currently have 0 posts.
To view links or images in signatures your post count must be 0 or greater. You currently have 0 posts.
To view links or images in signatures your post count must be 0 or greater. You currently have 0 posts.
To view links or images in signatures your post count must be 0 or greater. You currently have 0 posts.
|