by talon00302 » Mon Apr 21, 2014 5:03 am
A few things that might be helpful to some players that I've found over the last few years.
Made by APX, Kerrigan, and some made by CDev
- Code: Select all
//#! uniq = pumpkineater_apxproductions
//#! name = CarrotEater
//#! tooltip = Eat Carrot DL east plot
//#! icon = gfx/invobjs/pumpkinflesh
include("jBotAPI");
//var foodWait = 1000 * 60 * 1;
// function checkBuff()
// {
// var buffs = jGetBuffs();
// var need_update = true;
// for (var i = 0; i < buffs.length; i++) {
// if (buffs[i].name().indexOf("In the Fog") >= 0) {
// if (buffs[i].time() > 25) {
// need_update = false;
// }
// }
// }
// if (need_update)
// {
// var hemps = inventory.getItems("hemp-cured");
// if (hemps.length > 0) {
// inventory.sortItems(hemps, "amount", true);
// var hemp = hemps[0];
// var equip = checkEquipment();
// if (equip.resName(1).indexOf("pipe") >= 0) {
// hemp.take();
// jWaitDrag(actionTimeout);
// equip.itemact(1);
// jWaitDrop(actionTimeout);
// equip.iact(1);
// if (jWaitPopup(actionTimeout)) {
// jSelectContextMenu("Light");
// }
// }
// }
// }
// }
// function prepareToEat()
// {
// var chair = jFindObjectByName("furniture/chair", 55);
// jDoClick(chair, 3, 0);
// while (!jObjectPos(chair).equals(jMyCoords())) jSleep(100);
// jSleep(2000);
// }
// function eatFromTable()
// {
// var table = jFindObjectByName("table", 11);
// jDoClick(table, 3, 0);
// jDropLastWindow();
// var table_wnd = jWaitNewWindow("Table", actionTimeout);
// waitInventory(table_wnd, 0);
// var table_inv = table_wnd.getInventories()[1];
// table_wnd.pushButton("Feast!");
// while (!jIsCursor("eat")) jSleep(100);
// while (true) {
// var food = table_inv.getItems("");
// if (jGetHungry() > 95) return;
// if (food.length == 0) jSleep(foodWait);
// for (var i = 0; i < food.length; i++) {
// if (food[i].isActual()) {
// food[i].take();
// jWaitProgress(actionTimeout);
// if (jGetHungry() > 95) return;
// }
// }
// }
// }
function GotoWellOffset()
{
var well = jFindObjectByName("terobjs/well", 30);
var pos = well.position().add(jCoord(1*11, 2*11));
MoveToPosSafe(pos);
}
function FillBuckets()
{
var inventory = checkInventory();
var buckets = inventory.getItems("buckete");
var well = jFindObjectByName("terobjs/well", 30);
for (var i = 0; i < buckets.length; i++)
{
var bucket_coord = buckets[i].coord();
buckets[i].take();
jWaitDrag(actionTimeout);
well.interactClick(0);
var bucket = jGetDraggingItem();
while (bucket.resName().indexOf("bucket-water") <= 0) jSleep(100);
inventory.drop(bucket_coord);
jWaitDrop(actionTimeout);
}
}
function ProceedStarv()
{
while (jGetHungry() > 58)
{
jSetSpeed(3);
FillBuckets();
GotoWellOffset();
jMoveStep(jCoord(0, 52));
jWaitStartMove(actionTimeout);
drinkWater();
jWaitEndMove(actionTimeout);
jMoveStep(jCoord(0, -52));
jWaitStartMove(actionTimeout);
drinkWater();
jWaitEndMove(actionTimeout);
}
}
function DropFromCursor()
{
while (jIsDragging())
{
jDropObject(0);
jSleep(300);
}
}
function TakeCarrot()
{
while (true)
{
if (jIsDragging())
{
DropFromCursor();
return true;
}
var shitId = jFindObjectByName("gfx/terobjs/items/carrot", 30);
if (shitId == null)
{
return false;
}
MoveToPosSafe(shitId.position());
if (shitId.isActual()) shitId.doClick(3, 0);
jSleep(100);
}
}
function EatCarrot()
{
var inventory = checkInventory();
while (true)
{
var food = inventory.getItems("gfx/invobjs/carrot");
if (jGetHungry() > 95) return false;
if (food.length == 0) return true;
for (var i = 0; i < food.length; i++)
{
if (food[i].isActual())
{
food[i].iact();
jWaitPopup();
jSelectContextMenu("Eat")
waitUnActual(food[i]);
if (jGetHungry() > 95) return false;
}
}
}
}
function Eat()
{
while (true)
{
var isMore = TakeCarrot();
if (!EatCarrot()) break;
if (!isMore)
{
jPrint("No more carrot");
jExit();
}
}
}
function main()
{
var startPos = jMyCoords();
while (true)
{
// checkBuff();
// prepareToEat();
// eatFromTable();
// resetCursor();
Eat();
MoveToPosSafe(startPos);
GotoWellOffset();
ProceedStarv();
GotoWellOffset();
MoveToPosSafe(startPos);
}
}
main();
- Code: Select all
//#! uniq = CELLARDIGGERBOT
//#! tooltip = Digs cellars
//#! name = Cellar digger
//#! icon = paginae/build/cellardoor
include("jBotAPI");
function main()
{
checkInventory();
while(1)
{
if(jGetHungry() < 55) return;
var cd = jFindObjectByName("door-cellar", 5);
if(cd == null) break;
cd.doClick(3, 0);
var digged = false;
while(1)
{
if(jFindObjectByName("bumlings/02", 3) != null) break;
if(jFindObjectByName("stairs", 0) != null) // 3)
{
digged = true;
break;
}
jSleep(500);
}
if(digged) return;
jOffsetClick(jCoord(1, 0), 3, 0);
jWaitMove();
if(jGetStamina() < 40) drinkWater();
var bum = jFindObjectByName("bumlings/02", 5);
jSendDoubleAction("swrk", "runestone");
jWaitCursor("chi", 20000);
bum.doClick(1, 0);
while(jFindObjectByName("bumlings/02", 3) != null) jSleep(3000);
if(jGetStamina() < 40) drinkWater();
while(jFindObjectByName("runestone", 3) != null)
{
jSendAction("destroy");
jWaitCursor("mine", 20000);
var rs = jFindObjectByName("runestone", 3);
rs.doClick(1, 0);
jWaitProgress(90000);
if(jGetStamina() < 40) drinkWater();
jSleep(500);
}
}
}
main();
- Code: Select all
//#! uniq = CURIOEATER
//#! tooltip = Puts curios in study, drinks tea. Multiple chars.
//#! name = Curio Eater
//#! icon = gfx/invobjs/tinyabacus
include("jBotAPI");
//// Set your account and character names - ["accName", "charName"], ////////////
var accCharNames =
[
["abc", "xyz"],
// ...
];
//// Delay between eating, minutes
var eatingDelay = 30;
//// Curios list with priority. Upper - more priority, lower - less. ////////////
var curioList =
[
"pearl",
"bluebell",
"tinyabacus",
"flotsam",
"edelweiss",
"glimmermoss",
"stuffedbear",
"bronzesteed",
"entronedtoad",
"strawdoll",
"seerstealeaves",
"ants-empress",
"ants-queen",
"ants-soldiers",
"emerald",
"itsyweb",
"bloatedbolete",
"frogscrown",
"toadstool",
"conecow",
"barkboat",
"stalagoom",
"ladysmantle",
"seersbowl",
"tinsoldier",
];
function InsertCurio()
{
if(!jHaveWindow("Character Sheet"))
{
jToggleSheet();
while (!jHaveWindow("Character Sheet"))
{
jSleep(100);
}
}
for (var n = 0; n < curioList.length; n++)
{
var items = checkInventory().getItems(curioList[n]);
var quality = -1;
var num = -1;
for (var i = 0; i < items.length; i++)
{
if (items[i].quality() > quality)
{
quality = items[i].quality();
num = i;
}
}
if (num == -1) continue;
var curio = items[num];
curio.transfer();
jSleep(200);
}
jSleep(15*1000);
}
function DrinkTea()
{
var needDrink = false;
var buffs = jGetBuffs();
for (i = 0; i < buffs.length; i++)
{
jPrint(buffs[i].name());
if (buffs[i].name() == "The Warmth of Tea")
{
needDrink = (buffs[i].time() < 20);
break;
}
}
if (!needDrink) return;
var flasks = checkInventory().getItems("mug-hot");
if (flasks.length > 0)
{
var flask = flasks[0];
if (flask.isActual())
{
flask.iact();
if (jWaitPopup(actionTimeout))
{
jSelectContextMenu("Drink");
jWaitProgress();
}
}
}
}
function main()
{
jLogout();
jSleep(5*1000);
while (true)
{
for (var i = 0; i < accCharNames.length; i++)
{
Login(accCharNames[i][0], accCharNames[i][1]);
InsertCurio();
DrinkTea();
jLogout();
}
jSleep(eatingDelay*60*1000);
}
}
main();
- Code: Select all
//#! uniq = ForagingBotMaker
//#! name = Foraging Bot Maker
//#! tooltip = Learning bots to move right way.
//#! icon = gfx/hud/skills/srv
include("jBotAPI");
// rabbit jackalope
// "gfx/invobjs/jackalope"
// "gfx/kritter/hare/body/standing/standing-0"
function main()
{
// select forager type
var modeList = ["Mountain", "Swamp", "Cave", "Forest", "Lake", "OmgWipe!", "Guard"]; //, "ChaoticCreature"];
var modeWnd = jGUIWindow(jCoord(250, 250), jCoord(220, 20 + modeList.length*30+30), "Forager bot maker");
for (var n = 0; n < modeList.length; n++)
{
jGUIButton(modeWnd, jCoord(10, 10 + n*30), 200, modeList[n]);
}
jGUIButton(modeWnd, jCoord(10, 10 + modeList.length*30 + 10), 200, "Exit");
var modeText = modeWnd.waitButtonClick();
modeWnd.destroy();
if (modeText == "Exit") return;
// tune forager
var selectWindow = jGUIWindow(jCoord(250, 250), jCoord(280, 440), "Forager bot maker");
var regionNameEnt = jGUIEntry(selectWindow, jCoord(10, 10), jCoord(260, 20), "Region name [coords]");
var accNameEnt = jGUIEntry(selectWindow, jCoord(10, 40), jCoord(260, 20), "Account name");
var charNameEnt = jGUIEntry(selectWindow, jCoord(10, 70), jCoord(260, 20), "Character name");
var curiosAllNm = []; // name
var curiosAllId = []; // world id
var curiosAllPk = []; // pack id
var curiosAllCollDef = []; // collect default
var curiosAllDropDef = []; // keep default min quality
var modeNum = -1;
if (modeText == modeList[0]) // mountain
{
curiosAllNm = ["Edelweiss", "Frog's crown", "Glimmermoss", "Feldspar"];
curiosAllId = ["edelweiss", "frogscrown", "glimmermoss", "feldspar"];
curiosAllPk = ["edelweiss", "frogscrown", "glimmermoss", "feldspar"];
curiosAllCollDef = [true, true, false, false];
curiosAllDropDef = [20, 20, 20, 50];
modeNum = 0;
}
if (modeText == modeList[1]) // swamp
{
curiosAllNm = ["Bluebell", "Toadstool", "Lady's Mantle", "Bloated bolete"];
curiosAllId = ["bluebell", "toadstool", "ladysmantle", "bloatedbolete"];
curiosAllPk = ["bluebell", "toadstool", "ladysmantle", "bloatedbolete"];
curiosAllCollDef = [true, true, false, true];
curiosAllDropDef = [1, 25, 100, 15];
modeNum = 1;
}
if (modeText == modeList[2]) // cave
{
curiosAllNm = ["Glimmermoss", "Stalagoom", "Cavebulb", "Cave clay"];
curiosAllId = ["glimmermoss", "stalagoom", "cavebulb", "caveclay"];
curiosAllPk = ["glimmermoss", "stalagoom", "cavebulb", "clay-cave"];
curiosAllCollDef = [true, true, false, false];
curiosAllDropDef = [20, 20, 1, 65];
modeNum = 2;
}
if (modeText == modeList[3]) // forest
{
curiosAllNm = ["Bloated bolete", "Blueberries", "Chantrelles", "Rustroot"];
curiosAllId = ["bloatedbolete", "blueberry", "chantrelle", "rustroot"];
curiosAllPk = ["bloatedbolete", "blueberry", "chantrelle", "rustroot"];
curiosAllCollDef = [true, false, false, false];
curiosAllDropDef = [20, 1, 1, 1];
modeNum = 3;
}
if (modeText == modeList[4]) // lake
{
curiosAllNm = ["Flotsam", "Mussel", "Gray clay"];
curiosAllId = ["flotsam", "mussel", "grayclay"];
curiosAllPk = ["flotsam", "mussel", "clay-gray"];
curiosAllCollDef = [true, false, false];
curiosAllDropDef = [1, 1, 1];
modeNum = 4;
}
if (modeText == modeList[5]) // noobs (spindlytaproot - spindlytaproot)
{
curiosAllNm = ["WWW", "Nettle", "Clover", "Candleberry"];
curiosAllId = ["windweed", "stingingnettle", "fourleafclover", "candleberry"];
curiosAllPk = ["windweed", "stingingnettle", "fourleafclover", "candleberry"];
curiosAllCollDef = [true, false, false, false];
curiosAllDropDef = [1, 1, 1, 1];
modeNum = 5;
}
if (modeText == modeList[6]) // shocked
{
curiosAllNm = [];
curiosAllId = [];
curiosAllPk = [];
curiosAllCollDef = [];
curiosAllDropDef = [];
modeNum = 6;
}
if (modeText == modeList[7]) // shocked
{
curiosAllNm = ["Bluebell also"];
curiosAllId = ["bluebell"];
curiosAllPk = ["bluebell"];
curiosAllCollDef = [true];
curiosAllDropDef = [1];
modeNum = 7;
}
var curiosBoxesColl = [];
var curiosBoxesDrop = [];
for (var n = 0; n < curiosAllNm.length; n++)
{
curiosBoxesColl[n] = jGUICbox(selectWindow, jCoord(10, 100 + n*30), "Collect "+curiosAllNm[n]);
curiosBoxesColl[n].setChecked(curiosAllCollDef[n]);
curiosBoxesDrop[n] = jGUIEntry(selectWindow, jCoord(160, 100 + n*30 + 14), jCoord(50, 20), curiosAllDropDef[n].toString());
}
var startBtn = "Start";
var addPointBtn = "AddPoint";
var saveBtn = "Save";
var exitBtn = "Exit";
jGUIButton(selectWindow, jCoord(10, 250), 260, startBtn);
jGUIButton(selectWindow, jCoord(10, 305), 260, addPointBtn);
jGUIButton(selectWindow, jCoord(10, 360), 260, saveBtn);
jGUIButton(selectWindow, jCoord(220, 410), 50, exitBtn);
selectWindow.toggleCloseButton();
var uniqName = ["Mountain_Forager_", "Swamp_Forager_", "Cave_Forager_", "Forest_Forager_", "Lake_Forager_", "OmgWipe_Forager_", "Guard_", "Shocked_Forager_"];
var tooltipText = ["Collects curios at mountain", "Collects curios at swamp", "Collects curios in cave", "Collects curios it the forest", "Collects curios at lake", "Collects noobs items", "Oversees your area for rams and enemy activity", "Collects Shocked frogs"];
var iconName = ["gfx/invobjs/herbs/edelweiss", "gfx/invobjs/herbs/chimingbluebell", "gfx/invobjs/herbs/cavebulb", "gfx/invobjs/herbs/bloatedbolete", "gfx/invobjs/herbs/flotsam", "gfx/invobjs/herbs/fourleafclover", "gfx/hud/skills/ranger", "gfx/invobjs/frog"];
var mainFunctionName = ["CollectMount2", "CollectSwamp2", "CollectMount2", "CollectSwamp2", "CollectLake2", "CollectSwamp2", "CheckRams", "CollectShocked"];
var wpts = [];
var startPos = jMyCoords(0, 0);
var isStarted = false;
while (true)
{
var btext = selectWindow.waitButtonClick();
if (btext == startBtn)
{
jSendDoubleAction("theTrav", "hearth");
jInGamePrint("Teleporting to HF. Wait.");
jWaitProgress(actionTimeout);
startPos = jMyCoords();
isStarted = true;
wpts = [];
jInGamePrint("Started!");
}
if (btext == addPointBtn)
{
var pos = jMyCoords();
wpts.push(jCoord((pos.x-startPos.x)/11, (pos.y-startPos.y)/11));
jInGamePrint("New waypoint, offset = "+(pos.x-startPos.x)/11+", "+(pos.y-startPos.y)/11);
}
if (btext == saveBtn)
{
var regionName = regionNameEnt.getText();
var accName = accNameEnt.getText();
var charName = charNameEnt.getText();
var f = new java.io.FileWriter("New_Forager.jbot");
f.write("//#! uniq = "+uniqName[modeNum]+Random(10000000, 100000000)+"\n");
f.write("//#! name = "+charName+" - "+regionName+"\n");
f.write("//#! tooltip = "+tooltipText[modeNum]+"\n");
f.write("//#! icon = "+iconName[modeNum]+"\n");
f.write("\n");
f.write('include(\"jBotAPI\");'+"\n");
f.write("\n");
f.write('// Before start set camera mode "Fixed" or "Borderizer"'+"\n");
f.write("\n");
f.write('var accName = "'+accName+'"; // account name'+"\n");
f.write('var charName = "'+charName+'"; // character name'+"\n");
f.write("\n");
var collectStr = "";
var nonCollectStr = "";
var dropStr = "";
var nonDropStr = "";
var dropQualityStr = "";
var nonDropQualityStr = "";
for (var n = 0; n < curiosAllId.length; n++)
{
if (curiosBoxesColl[n].isChecked())
{
collectStr = collectStr + '"' + curiosAllId[n] + '", ';
dropStr = dropStr + '"' + curiosAllPk[n] + '", ';
dropQualityStr = dropQualityStr + curiosBoxesDrop[n].getInt() + ', ';
}
else
{
nonCollectStr = nonCollectStr + '"' + curiosAllId[n] + '", ';
nonDropStr = nonDropStr + '"' + curiosAllPk[n] + '", ';
nonDropQualityStr = nonDropQualityStr + curiosBoxesDrop[n].getInt() + ', ';
}
curiosBoxesDrop[n].setText(curiosBoxesDrop[n].getInt().toString());
}
f.write('collectCurios = ['+collectStr+']; // '+nonCollectStr+"\n");
f.write('dropCurios = ['+dropStr+']; // '+nonDropStr+"\n");
f.write('dropQuality = ['+dropQualityStr+']; // '+nonDropQualityStr+"\n");
f.write("\n");
f.write("// Path depends on the marsh mountain or lake etc"+"\n");
f.write("var startPos = jCoord(0, 0);"+"\n");
f.write("var waypoints ="+"\n");
f.write("["+"\n");
for (var i = 0; i < wpts.length; i++)
{
f.write(" ["+wpts[i].x+", "+wpts[i].y+"],"+"\n");
}
f.write("];"+"\n");
f.write("\n");
f.write("function main()"+"\n");
f.write("{"+"\n");
f.write(" "+mainFunctionName[modeNum]+"(accName, charName, collectCurios, dropCurios, dropQuality, startPos, waypoints);"+"\n");
f.write("}"+"\n");
f.write("\n");
f.write("main();"+"\n");
f.close();
jInGamePrint("Script file <New_Forager.jbot> created. Rename and put it to /Scripts directory");
}
if (btext == exitBtn)
{
break;
}
}
selectWindow.destroy();
}
main();
- Code: Select all
//#! uniq = WOODCUTTER
//#! tooltip = Cut trees and tp logs to totem
//#! name = Woodcutter22
//#! icon = gfx/invobjs/small/log
include("jBotAPI(2)");
//// Logs need ////////////////////////////////////
var logsMax = 550;
//// Where to drop logs, offset from totem ////////
var waypoints =
[
[6, 0],
// [-6, 0],
// [-47, -35],
// [-55, 2],
];
///////////////////////////////////////////////////
function Finish(itext)
{
jPrint("Exit - "+itext);
jExit();
}
function DropFromCursor()
{
while (jIsDragging())
{
jDropObject(0);
jSleep(300);
}
}
function DropWoodBlocksFromInv()
{
var inv = checkInventory();
var items = inv.getItems("wood");
if (items.length > 0)
{
items[0].dropSuchAll();
//waits dropping
while (inv.getItems("wood").length > 0) jSleep(300);
}
}
function DropFromInv(resName)
{
var inv = checkInventory();
var items = inv.getItems(resName);
if (items.length > 0)
{
items[0].dropSuchAll();
//waits dropping
while (inv.getItems(resName).length > 0) jSleep(300);
}
}
function FromCursorToInv(resName)
{
DropFromCursor();
var res = jFindObjectByName(resName, 1);
if (res != null)
{
res.doClick(3, 0);
jSleep(500);
if (jIsDragging()) DropFromCursor();
}
}
function GetInvFree()
{
var inv = checkInventory();
return inv.freeSlots();
}
function GetInvResCount(resName)
{
var inv = checkInventory();
var invItems = inv.getItems(resName);
return invItems.length;
}
function GetWindow(objWndName)
{
var wnd;
while (true)
{
wnd = jGetWindow(objWndName);
if (wnd != null) return wnd;
jSleep(300);
}
}
//---------------------------------------------------------------------
// chop trees
//---------------------------------------------------------------------
function TakeAxe()
{
var inv = checkInventory();
var equip = checkEquipment();
if (equip.name(6) == "Stone Axe") return;
if (equip.name(7) == "Stone Axe") return;
while (true)
{
equip.transfer(6);
equip.transfer(7);
if (equip.name(6) == "") break;
if (equip.name(7) == "") break;
jSleep(300);
}
DropFromCursor();
var axe = inv.getItems("axe");
if (axe.length == 0) Finish("no axe");
while (!jIsDragging())
{
axe[0].take();
jSleep(300);
}
while (jIsDragging())
{
equip.dropTo(6);
jSleep(300);
}
}
function TakeShovel()
{
var inv = checkInventory();
var equip = checkEquipment();
if (equip.name(6) == "Shovel") return;
if (equip.name(7) == "Shovel") return;
while (true)
{
equip.transfer(6);
equip.transfer(7);
if (equip.name(6) == "") break;
if (equip.name(7) == "") break;
jSleep(300);
}
DropFromCursor();
var shovel = inv.getItems("shovel");
if (shovel.length == 0) Finish("no shovel");
while (!jIsDragging())
{
shovel[0].take();
jSleep(300);
}
while (jIsDragging())
{
equip.dropTo(6);
jSleep(300);
}
}
function RemoveStump(stump)
{
resetCursor();
DropFromCursor();
DropWoodBlocksFromInv();
drinkWater();
TakeShovel();
stump.doClick(3, 0);
jWaitPopup(actionTimeout);
if (jHavePopup())
{
jSelectContextMenu("Remove");
jWaitProgress(actionTimeout);
}
DropFromCursor();
DropWoodBlocksFromInv();
}
function ChopTree(tree)
{
resetCursor();
DropFromCursor();
DropWoodBlocksFromInv();
//drinkWater();
TakeAxe();
tree.doClick(3, 0);
jWaitPopup(actionTimeout);
if (jHavePopup())
{
jSelectContextMenu("Chop");
jWaitProgress(actionTimeout);
}
jSleep(500);
}
function TakeLog()
{
var offsetAround = [[11, 11], [11, 0], [11, -11], [0, 11], [0, -11], [-11, 11], [-11, 0], [-11, -11]];
var treesList = ["/stump", "/trees/fir", "/trees/pine"];
while (true)
{
jSleep(1000);
if (!MoveRandomDirection(3)) return false;
if (!noMoreWine())
{
var logsAll = jGetObjects(45, jCoord(0, 0), "/trees/log");
for (var i = 0; i < logsAll.length; i++)
{
var log = logsAll[i];
if (!jIsPathFree(log.position())) continue;
// debug
//MoveToPos(log.position());
MoveToPosSafe(log.position());
resetCursor();
DropFromCursor();
var me = jGob(jGetMyID());
jSendAction("carry");
jWaitCursor("chi", actionTimeout);
log.doClick(1, 0);
while (!me.isCarrying())
{
jSleep(1000);
}
return true;
}
}
// no log avaliable - chop tree and remove stumps
treeEnd:
for (var k = 0; k < treesList.length; k++)
{
var treesAll = jGetObjects(75, jCoord(0, 0), treesList[k]);
for (var i = 0; i < treesAll.length; i++)
{
var tree = treesAll[i];
var num = -1;
for (var n = 0; n < offsetAround.length; n++)
{
var pos = jCoord(tree.position().x + offsetAround[n][0], tree.position().y + offsetAround[n][1]);
if (jIsPathFree(pos))
{
num = n;
break;
}
}
if (num == -1) continue;
var startPos = jMyCoords();
var pos = jCoord(tree.position().x + offsetAround[num][0], tree.position().y + offsetAround[num][1]);
// debug
//MoveToPos(pos);
MoveToPosSafe(pos);
// debug
//if (CheckHostile()) return false;
if ((tree.name() == "gfx/terobjs/trees/pine/stump") || (tree.name() == "gfx/terobjs/trees/fir/stump"))
{
RemoveStump(tree);
}
else
{
ChopTree(tree);
}
// debug
//MoveToPos(startPos);
MoveToPosSafe(startPos);
break treeEnd;
}
}
}
Finish("no more trees in range");
return true;
}
function UnloadWoodLog()
{
// ïðèâÿçêà
var totem = jFindObjectByName("vclaim", 10);
if (totem == null) Finish("no totem O_o");
// move to factory
var initPos = totem.position();
var startPos = jCoord(0, 0);
for (var i = 0; i < waypoints.length; i++)
{
MoveToPosSafe(jCoord(initPos.x + (waypoints[i][0] - startPos.x)*11, initPos.y + (waypoints[i][1] - startPos.y)*11));
}
// drop
var me = jGob(jGetMyID());
if (me == null) Finish("no me? O_o");
if(me.isCarrying())
{
jAbsClick(jMyCoords(), 3, 0);
while (me.isCarrying())
{
jSleep(1000);
}
}
// print count
var logsList = jGetObjects(2, jCoord(0, 0), "/trees/log");
jPrint("logs count = "+logsList.length);
return logsList.length;
}
function ChopAndDeliverTrees()
{
var equip = checkEquipment();
var axeEquipped = false;
if (equip.name(6) == "Stone Axe") axeEquipped = true;
if (equip.name(7) == "Stone Axe") axeEquipped = true;
var shovelEquipped = false;
if (equip.name(6) == "Shovel") shovelEquipped = true;
var inv = checkInventory();
var axe = inv.getItems("axe");
var shovel = inv.getItems("shovel");
var buckets = inv.getItems("bucket-wine");
var glass = inv.getItems("glass-wine");
if (((axe.length == 0)&&(!axeEquipped))||((shovel.length == 0)&&(!shovelEquipped))||(buckets.length == 0)||(glass.length == 0))
{
sayArea("Need axe, shovel, bucket with wine and wine glass!");
Finish("Must be equipped with axe, shovel, bucket with wine and wine glass.");
}
jSetSpeed(1);
TeleportHF();
while (true)
{
DropFromCursor();
DropWoodBlocksFromInv();
if (!TakeLog())
{ // hostile spotted!
jPrint("fukin bear!");
TeleportToTotem();
sayArea("fukin bear!");
WaitRespawn();
continue;
}
if (!TeleportToTotem())
{
jLogout();
Finish("finished. cannot teleport to totem. possibly no wine.")
}
var logsCount = UnloadWoodLog();
if (logsCount > logsMax)
{
Finish("work done. "+logsMax+" logs ready.");
}
TeleportHF();
}
}
//---------------------------------------------------------------------
function main()
{
jDropLastWindow();
ChopAndDeliverTrees();
}
main();
jBotAPI(2)
- Code: Select all
include("jClusters");
var actionTimeout = 1000 * 60 * 1;
function waitUnActual(item) {
while (item.isActual()) {
jSleep(100);
}
}
function resetCursor() {
if (!jIsCursor("arw")) {
jAbsClick(jCoord(0, 0), 3, 0);
jWaitCursor("arw", actionTimeout);
}
}
function checkInventory() {
if(!jHaveWindow("Inventory")) {
jToggleInventory();
while(!jHaveWindow("Inventory"))
jSleep(100);
}
return jGetWindow("Inventory").getInventories()[0];
}
function checkEquipment() {
if(!jHaveWindow("Equipment")) {
jToggleEquipment();
while(!jHaveWindow("Equipment"))
jSleep(100);
}
return jGetJSEquip();
}
function waitInventoryObject(inv, objname) {
while (true) {
var objs = inv.getItems(objname);
if (objs.length > 0) break;
else jSleep(100);
}
}
function drinkWater() {
var inventory = checkInventory();
var buckets = inventory.getItems("bucket-water");
if (buckets.length > 0) {
inventory.sortItems(buckets, "amount", false);
var bucket = buckets[0];
var bucket_coord = bucket.coord();
if (bucket.isActual()) {
bucket.take();
jWaitDrag();
var flasks = inventory.getItems("waterflask", "waterskin", "kuksa");
if (flasks.length > 0) {
var flask = flasks[0];
if (flask.isActual()) {
flask.itemact(0);
jSleep(500);
inventory.drop(bucket_coord);
jWaitDrop();
}
}
}
}
var flasks = inventory.getItems("waterflask", "waterskin", "kuksa");
if (flasks.length > 0) {
var flask = flasks[0];
if (flask.isActual()) {
flask.iact();
if (jWaitPopup(actionTimeout)) {
jSelectContextMenu("Drink");
jWaitProgress();
}
}
}
}
function dropItem(coord) {
var items = checkInventory().getItems("");
for (var i = 0; i < items.length; i++) {
if (items[i].coord().x == coord.x && items[i].coord().y == coord.y) {
items[i].drop();
break;
}
}
}
function waitDragName(name) {
while (true) {
// Unsafe
try {
var item = jGetDraggingItem();
if (item != null && item.isActual()) {
if (item.resName() != null) {
if (item.resName().indexOf(name) >= 0) {
break;
} else {
jSleep(100);
}
} else jSleep(100);
} else {
break;
}
} catch (ex) {
jSleep(200);
}
}
}
function waitPFEndMove() {
while (true) {
jWaitEndMove();
jSleep(500);
if (!jIsMoving()) {
return;
}
}
}
function travelCount() {
var buffs = jGetBuffs();
for (var i = 0; i < buffs.length; i++) {
if (buffs[i].name().indexOf("Travel Weariness") >= 0) {
return buffs[i].meter();
}
}
return 0;
}
function noMoreWine() {
var buffs = jGetBuffs();
for (var i = 0; i < buffs.length; i++) {
if (buffs[i].name().indexOf("Drunk and Riotous") >= 0) {
return true;
}
}
return false;
}
function _pf_click(id) {
if (!jIsPathFree(jGob(id).position())) {
resetCursor();
if (jPFClick(id) > 0) {
if (jWaitStartMove(1000)) {
waitPFEndMove();
while (jIsMoving() || jMyCoords().dist(jGob(id).position()) > 33) {
jSleep(100);
}
return true;
}
}
} else {
resetCursor();
jGob(id).doClick(3, 0);
}
return false;
}
function _pf_move(coord) {
if (!jIsPathFree(coord)) {
resetCursor();
if (jPFMove(coord) > 0) {
if (jWaitStartMove(1000)) {
waitPFEndMove();
while (jIsMoving() || jMyCoords().dist(coord) > 1) {
jSleep(100);
}
return true;
}
}
} else {
resetCursor();
jAbsClick(coord, 1, 0);
if (jWaitStartMove(1000)) {
jWaitEndMove();
return true;
}
}
return false;
}
function dropAll() {
if (jIsDragging()) {
jDropObject(0);
jWaitDrop(actionTimeout);
}
}
function waitChat(name, timeout) {
var time = 0;
while (true) {
var chats = haven.getChats();
for (var i = 0; i < chats.length; i++) {
if (chats[i].chatName().indexOf(name) >= 0) {
return true;
}
}
jSleep(100);
time += 100;
if (time > timeout) return false;
}
}
// Ãîâîðèò òåêñò â àðåà ÷àò
function sayArea(text)
{
var chats = jGetChats();
for (var i = 0; i < chats.length; i++)
{
if (chats[i].chatName().indexOf("Area Chat") >= 0)
{
chats[i].sendMessage(text);
break;
}
}
}
// Ãîâîðèò òåêñò â äåðåâåíñêèé ÷àò
function sayVillage(text)
{
var chats = jGetChats();
for (var i = 0; i < chats.length; i++)
{
if (chats[i].chatName().indexOf("Village") >= 0)
{
chats[i].sendMessage(text);
break;
}
}
}
function dropAll() {
if (jIsDragging()) {
jDropObject(0);
jWaitDrop(actionTimeout);
}
}
function dropItem(coord) {
var inventory = checkInventory();
var items = inventory.getItems("");
for (var i = 0; i < items.length; i++) {
if (items[i].coord().x == coord.x && items[i].coord().y == coord.y) {
items[i].drop();
break;
}
}
}
function moveFromObject(objid, tiles) {
var direction = jGob(objid).position().sub(jMyCoords());
var direction_normal = direction.div(direction.abs());
resetCursor();
jAbsClick(jGob(objid).position().sub(direction_normal.mul(tiles, tiles)), 1, 0);
jWaitMove(actionTimeout);
}
function travelCount() {
var buffs = jGetBuffs();
for (var i = 0; i < buffs.length; i++) {
if (buffs[i].name().indexOf("Travel Weariness") >= 0) {
return buffs[i].meter();
}
}
return 0;
}
function noMoreWine() {
var buffs = jGetBuffs();
for (var i = 0; i < buffs.length; i++) {
if (buffs[i].name().indexOf("Drunk and Riotous") >= 0) {
return true;
}
}
return false;
}
function drinkWine() {
var inventory = checkInventory();
var buckets = inventory.getItems("bucket-wine");
if (buckets.length > 0) {
inventory.sortItems(buckets, "amount", false);
var bucket = buckets[0];
var bucket_coord = bucket.coord();
if (bucket.isActual()) {
bucket.take();
jWaitDrag(actionTimeout);
var flasks = inventory.getItems("glass-wine");
if (flasks.length > 0) {
var flask = flasks[0];
if (flask.isActual()) {
flask.itemact(0);
jSleep(500);
inventory.drop(bucket_coord);
jWaitDrop(actionTimeout);
}
}
}
}
var flasks = inventory.getItems("glass-wine");
if (flasks.length > 0) {
var flask = flasks[0];
if (flask.isActual()) {
flask.iact();
if (jWaitPopup(actionTimeout)) {
jSelectContextMenu("Drink");
jWaitProgress(actionTimeout);
return true;
}
}
}
return false;
}
// IGNORE
var _ignore_array = new Array();
function addIgnoreId(id) {
_ignore_array.push(id);
}
function removeIgnoreId(id) {
}
function clearIgnoreList() {
_ignore_array = [];
}
function iGetObjects(radius, offset, name) {
var objs = jGetObjects(radius, offset, name);
var ret = new Array();
for (var i = 0; i < objs.length; i++) {
if (_ignore_array.indexOf(objs[i]) == -1) {
ret.push(objs[i]);
}
}
return ret;
}
function iGetNearestObject(radius, name) {
var objs = iGetObjects(radius, jCoord(0, 0), name);
var min_len = 100500; var obj = 0;
for (var i = 0; i < objs.length; i++) {
if (jGob(objs[i]).position().dist(jMyCoords()) < min_len) {
obj = objs[i];
min_len = jGob(objs[i]).position().dist(jMyCoords());
}
}
return obj;
}
//////////////////////////////////////////////
// Bunin Flameforge
//////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
// Test function
//////////////////////////////////////////////////////////////////
function dropEverything() {
if (apiCheckInventory().getItems("mussel", "flotsam", "itsybitsy", "itsyweb").length > 0) {
var self = apiSelf();
var pos = self.position();
var containers = new ContainerCluster(Direction.South);
containers.update(30, "cclosed");
//containers._containers = sortClusterObjs(containers._containers);
containers.putItems(function () {
var _myinv = apiCheckInventory();
return _myinv.getItems("mussel", "flotsam", "itsybitsy", "itsyweb");
});
apiAbsMove(pos);
}
}
function waitPFEndMove() {
while (true) {
jWaitEndMove();
jSleep(500);
if (!jIsMoving()) {
return;
}
}
}
function chestMus(){
var chest = jFindObjectByName("lchest", 39);
_pf_click(chest.position());
waitPFEndMove();
jDoClick(chest.getID(), 3, 0); jWaitMove(actionTimeout );
jWaitWindow("Chest", actionTimeout);
if (jGetWindow("Inventory").getInventories()[0].getItems("mussel")[0] != undefined){
jGetWindow("Inventory").getInventories()[0].getItems("mussel")[0].transferSuchAll();
}
}
function TpAndDrop() {
TeleportHF();
PutBoat();
TeleportToTotem();
chestMus();
TeleportHF();
}
///////////////////////////////////////////////////////////////////
// Test END
//////////////////////////////////////////////////////////////////
function DropMuss() {
if (jGetWindow("Inventory").getInventories()[0].getItems("mussel")[0] != undefined){
jGetWindow("Inventory").getInventories()[0].getItems("mussel")[0].dropSuchAll();
}
}
function TeleportToTotem()
{
// drink wine
if (travelCount() > 85)
{
while (noMoreWine())
{
jSleep(2*1000);
return false;
}
drinkWine();
}
// teleport
jSendDoubleAction("theTrav", "village");
jWaitProgress(actionTimeout);
while (true)
{
if (jFindObjectByName("vclaim", 10) != null) break;
jSleep(1000);
}
return true;
}
// village unload
function VillageUnload()
{
// drink wine
// tp totem
// hunger from overstuffed
// find all chests in 20 sq
// get random
// go with patfinding
// if failed - go next or tp to totem
// unload
// repeat until all unloaded
// if no chests - stop
// logoff
}
function CheckHostile()
{
if (jFindObjectByName("kritter/bear", 75) != null) return true;
if (jFindObjectByName("kritter/boar", 65) != null) return true;
// humans
var objList = jGetObjects(75, jCoord(0, 0), "gfx/borka/s");
for (var n = 0; n < objList.length; n++)
{
var enemy = objList[n];
if (!enemy.isActual()) continue;
var isPlayer = enemy.isPlayer();
var inVillage = enemy.isInYourVillage();
var isKin = enemy.isKin();
var kinGroup = enemy.getKinGroup();
if (enemy.getID() == jGetMyID()) continue;
if (!isPlayer) continue;
if (inVillage) continue;
if (isKin)
{
if (kinGroup == 1) continue; // green kin
}
return true;
}
return false;
}
function Random(min, max)
{
return Math.floor((Math.random()*(max-min)) + min);
}
var moveTimeout = 60*1000;
function WaitMoveAndCheckHostile()
{
if (CheckHostile()) return false;
// jWaitMove(actionTimeout);
jWaitMove(moveTimeout);
if (CheckHostile()) return false;
return true;
}
function MoveRandomDirection(dist)
{
dx = Random(-dist, dist);
dy = Random(-dist, dist);
jMoveStep(jCoord(dx, dy));
return WaitMoveAndCheckHostile();
}
function MoveToPosDelta(pos, delta)
{
while (true)
{
jAbsClick(pos, 1, 0);
if (!WaitMoveAndCheckHostile()) return false;
var curPos = jMyCoords();
if ((Math.abs(curPos.x-pos.x) <= delta)&&(Math.abs(curPos.y-pos.y) <= delta)) break;
// to enter claim
jAbsClick(pos, 1, 0);
if (!WaitMoveAndCheckHostile()) return false;
curPos = jMyCoords();
if ((Math.abs(curPos.x-pos.x) <= delta)&&(Math.abs(curPos.y-pos.y) <= delta)) break;
jSleep(300);
if (!MoveRandomDirection(4)) return false;
}
return true;
}
function MoveToPos(pos)
{
return MoveToPosDelta(pos, 3);
}
function MoveRandomDirectionSafe(dist)
{
dx = Random(-dist, dist);
dy = Random(-dist, dist);
jMoveStep(jCoord(dx, dy));
// jWaitMove(actionTimeout);
jWaitMove(moveTimeout);
}
function MoveToPosSafeDelta(pos, delta)
{
while (true)
{
jAbsClick(pos, 1, 0);
// jWaitMove(actionTimeout);
jWaitMove(moveTimeout);
var curPos = jMyCoords();
if ((Math.abs(curPos.x-pos.x) <= delta)&&(Math.abs(curPos.y-pos.y) <= delta)) break;
// to enter claim
jAbsClick(pos, 1, 0);
// jWaitMove(actionTimeout);
jWaitMove(moveTimeout);
curPos = jMyCoords();
if ((Math.abs(curPos.x-pos.x) <= delta)&&(Math.abs(curPos.y-pos.y) <= delta)) break;
jSleep(300);
MoveRandomDirectionSafe(4);
}
}
function MoveToPosSafe(pos)
{
MoveToPosSafeDelta(pos, 3);
}
function CollectCurio(curio)
{
if (curio == null) return;
var startPos = jMyCoords();
// move to curio
if (!MoveToPos(curio.position())) return false;
// take
curio.doClick(3, 0);
jWaitPopup(actionTimeout);
if (jHavePopup())
{
jSelectContextMenu("Pick");
jWaitProgress(actionTimeout);
}
// return
if (!MoveToPos(startPos)) return false;
return true;
}
function DropCurios(curioName, minKeepQuality)
{
var inventory = checkInventory();
var items = inventory.getItems(curioName);
for (var i = 0; i < items.length; i++)
{
if (items[i].quality() < minKeepQuality) items[i].drop();
}
}
function TeleportHF()
{
jSendDoubleAction("theTrav", "hearth");
jWaitProgress(actionTimeout);
while (true)
{
if (jFindObjectByName("hearth-play", 1) != null) break;
jSleep(1000);
}
}
function WaitRespawn()
{
// jSleep(17*60*1000 + 30*1000 + 6*60*1000);
jSleep(20*60*1000);
}
function Login(iaccName, icharName)
{
while (true)
{
jLogin(iaccName);
jSleep(2000);
if (jHaveCharlist()) break;
}
while (true)
{
if (jSelectChar(icharName)) break;
jSleep(2000);
}
while (!jHaveWindow(icharName))
{
jSleep(2000);
if (jHaveWindow("Menu"))
{
jSleep(1000);
return;
}
}
jSleep(1000);
jGetWindow(icharName).pushButton("Your hearth fire");
while (!jHaveWindow("Menu"))
{
jSleep(2000);
}
jSleep(1000);
}
function CollectSwamp(iaccName, icharName, icollectCurios, idropCurios, istartPos, iwaypoints)
{ // legacy
var dropQuality = [];
for (var i = 0; i < idropCurios; i++)
{
dropQuality[i] = 200;
}
CollectSwamp2(iaccName, icharName, icollectCurios, idropCurios, dropQuality, istartPos, iwaypoints);
}
function CollectSwamp2(iaccName, icharName, icollectCurios, idropCurios, idropQuality, istartPos, iwaypoints)
{
while(1)
{
jDropLastWindow();
jSendAction("crime");
jSetSpeed(0);
TeleportHF();
var initPos = jMyCoords();
evacuate:
for (var i = 0; i < iwaypoints.length; i++)
{
if (!MoveToPos(jCoord(initPos.x + (iwaypoints[i][0] - istartPos.x)*11, initPos.y + (iwaypoints[i][1] - istartPos.y)*11))) break evacuate;
//////////////////////////////////////////////////////////
while (true)
{
var curio;
for(var n = 0; n < icollectCurios.length; n++)
{
curio = jFindObjectByName(icollectCurios[n], 40);
if (curio != null) break;
}
if (curio == null) break;
if (!CollectCurio(curio)) break evacuate;
for(var k = 0; k < idropCurios.length; k++)
{
DropCurios(idropCurios[k], idropQuality[k]);
}
var inventory = checkInventory();
if (inventory.freeSlots() == 0)
{
// TODO: maybe unload to cupboards here
jLogout();
jExit();
}
}
//////////////////////////////////////////////////////////
}
jLogout();
WaitRespawn();
Login(iaccName, icharName);
}
}
function CollectMount(iaccName, icharName, icollectCurios, idropCurios, istartPos, iwaypoints)
{ // legacy
var dropQuality = [];
for (var i = 0; i < idropCurios; i++)
{
dropQuality[i] = 200;
}
CollectMount2(iaccName, icharName, icollectCurios, idropCurios, dropQuality, istartPos, iwaypoints);
}
function CollectMount2(iaccName, icharName, icollectCurios, idropCurios, idropQuality, istartPos, iwaypoints)
{
while(1)
{
jDropLastWindow();
jSendAction("crime");
jSetSpeed(0);
TeleportHF();
var initPos = jMyCoords();
evacuate:
for (var i = 0; i < iwaypoints.length; i++)
{
if (!MoveToPos(jCoord(initPos.x + (iwaypoints[i][0] - istartPos.x)*11, initPos.y + (iwaypoints[i][1] - istartPos.y)*11))) break evacuate;
//////////////////////////////////////////////////////////
for(var n = 0; n < icollectCurios.length; n++)
{
// get all visible curios list
var curiosList = jGetObjects(40, jCoord(0, 0), icollectCurios[n]);
for (var s = 0; s < curiosList.length; s++)
{
var curio = curiosList[s];
// check curio path
if (curio == null) break;
var isPathFree = jIsPathFree(curio.position());
if (!isPathFree) continue;
if (curio == null) break;
if (!CollectCurio(curio)) break evacuate;
for(var k = 0; k < idropCurios.length; k++)
{
DropCurios(idropCurios[k], idropQuality[k]);
}
var inventory = checkInventory();
if (inventory.freeSlots() == 0)
{
// TODO: maybe unload to cupboards here
jLogout();
jExit();
}
}
}
//////////////////////////////////////////////////////////
}
jLogout();
WaitRespawn();
Login(iaccName, icharName);
}
}
var myBoat = null;
function PutBoat()
{
var me = jGob(jGetMyID());
if(me == null) return;
if(!me.isCarrying()) return;
jAbsClick(jMyCoords().add(0, 22), 3, 0);
while(me.isCarrying())
{
jSleep(1000);
}
}
function TakeBoat()
{
var me = jGob(jGetMyID());
var boat = jFindObjectByName("boat", 10);
if (boat == null) return false;
jSendAction("carry");
jWaitCursor("chi", actionTimeout);
boat.doClick(1, 0);
while (!me.isCarrying())
{
jSleep(1000);
}
myBoat = boat;
return true;
}
function PutBoatOnLake(ipos)
{
var me = jGob(jGetMyID());
jAbsClick(ipos, 3, 0);
while (me.isCarrying())
{
jSleep(1000);
}
myBoat = jFindObjectByName("boat", 2);
}
function GetIntoBoat()
{
myBoat.doClick(3, 0);
jWaitPopup(actionTimeout);
jSelectContextMenu("Avast!");
var me = jGob(jGetMyID());
while (!me.isSitting())
{
jSleep(1000);
}
}
function GetFromBoatAndTakeIt()
{
jAbsClick(jMyCoords().add(0, -33), 1, 2);
var me = jGob(jGetMyID());
while (me.isSitting())
{
jSleep(1000);
}
jSendAction("carry");
jWaitCursor("chi", actionTimeout);
myBoat.doClick(1, 0);
while (!me.isCarrying())
{
jSleep(1000);
}
}
function CollectCurioLake(icurio)
{
if (icurio == null) return;
var startPos = jMyCoords();
jAbsClick(icurio.position(), 1, 0);
jWaitMoveGob(myBoat.getID(), actionTimeout);
var curPos = jMyCoords();
if ((Math.abs(curPos.x-icurio.position().x) <= 2)&&(Math.abs(curPos.y-icurio.position().y) <= 2))
{
icurio.doClick(3, 0);
jWaitPopup(actionTimeout);
if (jHavePopup())
{
jSelectContextMenu("Pick");
jWaitProgress(actionTimeout);
}
}
jAbsClick(startPos, 1, 0);
jWaitMoveGob(myBoat.getID(), actionTimeout);
}
function CollectLake(iaccName, icharName, icollectCurios, idropCurios, istartPos, iwaypoints)
{ // legacy
var dropQuality = [];
for (var i = 0; i < idropCurios; i++)
{
dropQuality[i] = 200;
}
CollectLake2(iaccName, icharName, icollectCurios, idropCurios, dropQuality, istartPos, iwaypoints);
}
function CollectLake2(iaccName, icharName, icollectCurios, idropCurios, idropQuality, istartPos, iwaypoints)
{
if (iwaypoints.length < 2)
{
jLogout();
jExit();
}
while(1)
{
jDropLastWindow();
if(!TakeBoat())
{
jLogout();
jExit();
}
TeleportHF();
initPos = jMyCoords();
var shoreBeginPos = jCoord(initPos.x + (iwaypoints[0][0] - istartPos.x)*11, initPos.y + (iwaypoints[0][1] - istartPos.y)*11);
PutBoatOnLake(shoreBeginPos);
GetIntoBoat();
for(var i = 1; i < iwaypoints.length; i++)
{
jAbsClick(jCoord(initPos.x + (iwaypoints[i][0] - istartPos.x)*11, initPos.y + (iwaypoints[i][1] - istartPos.y)*11), 1, 0);
jWaitMoveGob(myBoat.getID(), actionTimeout);
//////////////////////////////////////////////////////////
for(var n = 0; n < icollectCurios.length; n++)
{
// get all visible curios list
var curiosList = jGetObjects(45, jCoord(0, 0), icollectCurios[n]);
for (var s = 0; s < curiosList.length; s++)
{
var inventory = checkInventory();
if (inventory.freeSlots() == 0) break;
var curio = curiosList[s];
if (curio == null) break;
CollectCurioLake(curio);
for(var k = 0; k < idropCurios.length; k++)
{
DropCurios(idropCurios[k], idropQuality[k]);
}
}
}
//////////////////////////////////////////////////////////
}
GetFromBoatAndTakeIt();
TeleportHF();
PutBoat();
TeleportToTotem();
dropEverything();
TeleportHF();
var inventory = checkInventory();
if (inventory.freeSlots() == 0)
{
// TODO: maybe unload to cupboards here
jLogout();
jExit();
}
jLogout();
WaitRespawn();
Login(iaccName, icharName);
}
}
function CollectShocked(iaccName, icharName, icollectCurios, idropCurios, idropQuality, istartPos, iwaypoints)
{
var droppedToadsCount = 0;
while(1)
{
jDropLastWindow();
jSendAction("crime");
jSetSpeed(0);
TeleportHF();
var initPos = jMyCoords();
evacuate:
for (var i = 0; i < iwaypoints.length; i++)
{
if (!MoveToPos(jCoord(initPos.x + (iwaypoints[i][0] - istartPos.x)*11, initPos.y + (iwaypoints[i][1] - istartPos.y)*11))) break evacuate;
//////////////////////////////////////////////////////////
while (true)
{
var curio;
for(var n = 0; n < icollectCurios.length; n++)
{
curio = jFindObjectByName(icollectCurios[n], 40);
if (curio != null) break;
}
if (curio == null) break;
if (!CollectCurio(curio)) break evacuate;
for(var k = 0; k < idropCurios.length; k++)
{
DropCurios(idropCurios[k], idropQuality[k]);
}
var inventory = checkInventory();
if (inventory.freeSlots() == 0)
{
// TODO: maybe unload to cupboards here
jLogout();
jExit();
}
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
var startPos = jMyCoords();
var frogsList = jGetObjects(40, jCoord(0, 0), "rat");
var frogsCount = frogsList.length;
while (true)
{
//if (frogsCount == 0) break;
var hasActual = false;
for (var s = 0; s < frogsCount; s++)
{
if (frogsList[s] == null) continue;
if (!frogsList[s].isActual()) continue;
hasActual = true;
break;
}
if (!hasActual) break;
var curPos = jMyCoords();
var minDist = 1000000000;
var nearestFrog = -1;
for (var s = 0; s < frogsCount; s++)
{
if (frogsList[s] == null) continue;
if (!frogsList[s].isActual()) continue;
var frogPos = frogsList[s].position();
var frogDist = (curPos.x-frogPos.x)*(curPos.x-frogPos.x) + (curPos.y-frogPos.y)*(curPos.y-frogPos.y);
if (frogDist < minDist)
{
minDist = frogDist;
nearestFrog = s;
}
}
if (nearestFrog == -1) break;
var frog = frogsList[nearestFrog];
frogsCount = frogsCount - 1;
frogsList[nearestFrog] = frogsList[frogsCount];
if (!frog.isActual()) continue;
if (frog.isMoving()) continue;
var startFrogPos = frog.position();
// move to frog
if (!MoveToPos(startFrogPos)) break evacuate;
if (!frog.isActual()) continue;
if ((frog.position().x == startFrogPos.x)&&(frog.position().y == startFrogPos.y))
{
// take
if (!frog.isActual()) continue;
frog.doClick(3, 0);
jSleep(1000);
}
else
{
if (!frog.isActual()) continue;
if ((Math.abs(frog.position().x - startFrogPos.x) < 8*11) && (Math.abs(frog.position().y - startFrogPos.y) < 8*11)) // && (!frog.isMoving())
{
// take
if (!frog.isActual()) continue;
frog.doClick(3, 0);
jSleep(8000);
}
}
// drop toads, keep shockeds
var inventory = checkInventory();
var items = inventory.getItems("frog");
for (var s = 0; s < items.length; s++)
{
if (items[s].name() == "Toad")
{
droppedToadsCount = droppedToadsCount + 1;
jPrint("toads dropped = "+droppedToadsCount);
items[s].drop();
}
}
// drop rats, dragonflies
//DropCurios("rat", 200);
if (inventory.freeSlots() == 0)
{
// TODO: maybe unload to cupboards here
jLogout();
jExit();
}
}
// return
if (!MoveToPos(startPos)) break evacuate;
//////////////////////////////////////////////////////////
}
jLogout();
WaitRespawn();
Login(iaccName, icharName);
}
}
function CheckRams(iaccName, icharName, icollectCurios, idropCurios, idropQuality, istartPos, iwaypoints)
{
jDropLastWindow();
jSendAction("crime");
jSetSpeed(1);
TeleportHF();
var allClear = true;
var initPos = jMyCoords();
for (var i = 0; i < iwaypoints.length; i++)
{
MoveToPosSafe(jCoord(initPos.x + (iwaypoints[i][0] - istartPos.x)*11, initPos.y + (iwaypoints[i][1] - istartPos.y)*11));
var objList = jGetObjects(75, jCoord(0, 0), "/");
for (var n = 0; n < objList.length; n++)
{
var enemy = objList[n];
if (!enemy.isActual()) continue;
if (enemy.name() == "gfx/kritter/bram/s")
{
allClear = false;
var hfOffsetTiles = jCoord((enemy.position().x - initPos.x)/11, (enemy.position().y - initPos.y)/11);
var hfOffsetMMaps = jCoord(hfOffsetTiles.x/100, hfOffsetTiles.y/100);
jPrint("RAM DETECTED !!! Offset from hf = "+hfOffsetMMaps+" minimaps");
sayVillage("ALARM !!! ALARM !!! ALARM !!!");
sayVillage("RAM DETECTED !!! RAM DETECTED !!!");
sayVillage("Offset from hf <"+icharName+"> = "+hfOffsetMMaps+" minimaps");
sayVillage("ALARM !!! ALARM !!! ALARM !!!");
}
if (enemy.name() == "gfx/borka/s")
{
var isPlayer = enemy.isPlayer();
var inVillage = enemy.isInYourVillage();
var isKin = enemy.isKin();
var kinGroup = enemy.getKinGroup();
var isAggroed = jYouAggroedId(enemy.getID());
if (enemy.getID() == jGetMyID()) continue;
if (!isPlayer) continue;
if (inVillage) continue;
if (isKin)
{
if (kinGroup == 1) continue; // green kin
}
allClear = false;
var hfOffsetTiles = jCoord((enemy.position().x - initPos.x)/11, (enemy.position().y - initPos.y)/11);
var hfOffsetMMaps = jCoord(hfOffsetTiles.x/100, hfOffsetTiles.y/100);
jPrint("Suspicious guy detected!!! Offset from hf = "+hfOffsetMMaps+" minimaps");
sayVillage("WARNING !!!");
sayVillage("Suspicious guy detected!!!");
sayVillage("Offset from hf <"+icharName+"> = "+hfOffsetMMaps+" minimaps");
if (isAggroed)
{
jPrint("He aggroed me!!!");
sayVillage("He aggroed guard <"+icharName+"> !!!");
}
sayVillage("WARNING !!!");
}
}
}
if (allClear)
{
jPrint("Check finished. All clear.");
}
else
{
jPrint("WARNING! Check finished. RAM OR ENEMIES DETECTED!!!");
}
}
//////////////////////////////////////////////
// Bunin Flameforge
//////////////////////////////////////////////
Last edited by talon00302 on Tue Apr 22, 2014 11:59 pm, edited 2 times in total.