function main()
{
print("Most of this script is cobbled together from other scripts.)");
loadincludes();
GambleItOn=true;
// Town=new TownMove();
// Town.Init();
selling();
if (checkgrinding())
{
myweapongid = myweapon.gid;
print(myweapongid);
checkact();
if (AS_CheckInventory())
{
walkto(5106, 5043);
delay(100);
walkto(5110, 5065);
delay(100);
walkto(5123, 5058);
delay(100);
NPCinteract(stash);
delay(100);
walkto(5110, 5065);
delay(100);
}
gotoanya();
while (true)
{
while (!AS_CheckInventory())
{
while (checkgold() && !AS_CheckInventory())
{
anya = getUnit(1,"Anya");
delay(100);
anya.interact();
delay(500);
anya.useMenu(0x0D46);
delay(500);
GambleIt("Anya",anya);
delay(500);
GambleIt("Anya",anya);
// delay(500);
// GambleIt("Anya",anya);
// delay(500);
// GambleIt("Anya",anya);
anya.cancel(0);
}
while (!checkgold())
{
anya = getUnit(1,"Anya");
delay(100);
anya.interact();
delay(500);
anya.useMenu(0x0D44);
delay(500);
makegold();
anya.cancel(0);
}
}
gotostash();
walkto(5110, 5065);
delay(100);
gotoanya();
}
}
else
{
print("would be quitting");
// quit();
}
idle();
}
function loadincludes()
{
include("gamble-pwninclude.d2l");
include("gamble-pwnsettings.d2l");
include("gamble-Aet_Sta****.d2l");
include("gamble-bmpwnit.d2l");
}
function checkgrinding()
{
wep=weaponcheck();
print(myweapon.prefix);
if (myweapon.prefix != "Grinding")
{
weaponSwitch();
delay(500);
wep=weaponcheck();
print(myweapon.prefix);
if (myweapon.prefix != "Grinding")
{
print("Need a grinding weapon");
}
else return(true);
}
else return(true);
}
function weaponcheck() {
myweapon = getUnit(4,null,1);
if(myweapon)
while(myweapon.getNext(null,1))
{
if((myweapon.itemloc == 4 || myweapon.itemloc == 5) &&
myweapon.itemtype != 51 && myweapon.itemtype != 2 && myweapon.itemtype != 70 && myweapon.code != "aqv" &&
myweapon.code != "cqv")
{
weaponLoc = myweapon.itemloc;
return myweapon;
}
}
return false;
}
function grindsell()
{
grindwep = getUnit(4,null,1)
if(grindwep)
while(grindwep.getNext(null,1))
{
if(grindwep.prefix == "Grinding")
print("yay");
return grindwep
}
print("****");
return false;
}
function checkact()
{
if (me.act < 5)
{
print("You are not in act 5! Going from act #" + me.act + " to act #5");
switch (me.act)
{
case 1: roguechange(); break;
case 2:
walkto(5127, 5175);
walkto(5120, 5133);
walkto(5094, 5113);
walkto(5069, 5086);
break;
case 3:
walkto(5131, 5168);
walkto(5133, 5151);
walkto(5133, 5136);
walkto(5133, 5122);
walkto(5132, 5104);
walkto(5133, 5092);
walkto(5147, 5093);
walkto(5149, 5079);
walkto(5154, 5066);
walkto(5160, 5054);
walkto(5159, 5049);
break;
case 4: walkto(5044, 5019); break;
}
ChangeArea("Waypoint",109,0x6d)
position = "waypoint";
} else return true;
if (me.act != 5) print("You're not in act 5!");
}
function gotoanya()
{
walkto(5106,5043);
walkto(5110,5062);
walkto(5119,5085);
walkto(5129,5105);
walkto(5129,5112);
walkto(5118,5118);
walkto(5107,5116);
}
function dprint(string) {
logfile = "output/"+me.name+"-cowbot.txt";
//print(string);
f = fileOpen(logfile, 2);
if (!f) {
print("Failed to open " + logfile + " for logging"); }
else {
f.writeLine(string);
f.close();
}
}
function checkgold()
{
if (me.getStat(14)+me.getStat(15) >310000)
{
return(true);
}
else return(false);
}
function EnterTrade(npc,type) {
// If we called this function without assigning a NPC object, warn the user
if (!npc) {
dprint("EnterTrade() : No NPC object is entered");
return false;
}
else {
// If we are already interacted, stop right now
if (getUIFlag(0x0c) && getUnit(4,null,101)) {
dprint("EnterTrade() : Already in trade or gamble trade with " + npc.name);
return true;
}
}
// If the function is called without entering the type, set to 0 by default
if (arguments.length<2) { type=0; }
// Init the timer
var _timer = timeout * 1000;
// Loop while you are not interacted
do {
// For each second, retrade with the npc
if ((_timer % 1000) === 0) {
if (npc.name==larzuk) { npc.useMenu(0x0D06); }
else if (type == 1 && npc.name==anya) { npc.useMenu(0x0D46); }
else { npc.useMenu(0x0D44); }
}
_timer -= 50;
delay(50);
}while(!getUIFlag(0x0c) && _timer > 0);
// If we are still not trading with the npc
if(!getUIFlag(0x0c)) {
print("EnterTrade() : Failed to trade with " + npc.name + "!");
return false;
}
// Wait a certain delay before returning to the caller
DoDel(npcdelay);
return true;
}
function NPCinteract(who) {
if(who==stash) { npc = getUnit(2,stash); }
else { npc = getUnit(1,who); }
if (npc) {
EnterInteraction(npc);
switch (who) {
case qual:
if (!ReviveMerc(npc)) {
if (stopnomerc) { quitmessage("Restarting the game..."); }
}
break;
case larzuk:
EnterTrade(npc);
RepairItems(npc);
if (checkammo()) { buyammo(npc); }
break;
case malah:
ManageItems(npc);
break;
case anya:
if (GambleItOn) {
if (AS_MyGold() > MinGoldToGamble) {
EnterTrade(npc,1);
GambleIt(who,npc);
MenuCancel(npc,1);
EnterInteraction(npc);
}
}
break;
case stash:
AS_ManageStash();
break;
}
if (who==stash) { MenuCancel(npc,0); }
else { MenuCancel(npc,1); }
}
}
function EnterInteraction(npc) {
// If we called this function without assigning a NPC object, warn the user
if (!npc) {
dprint("EnterInteraction() : No NPC object is entered");
return false;
}
else {
// Enter the right uiflag depending if the npc is a stash or not.
var _uiflag=(npc.name==stash)?0x19:0x08;
// If we are already interacted, stop right now
if (getUIFlag(_uiflag)) {
dprint("EnterInteraction() : Already interacted with " + npc.name);
return true;
}
}
// Init the timer
var _timer = timeout * 1000;
// Loop while you are not interacted
do {
// For each second, reinteract with the npc
if ((_timer % 1000) === 0) {
if (_timer <= 6000) {
npc.cancel(1);
delay(250);
}
clickMap(0, 0, npc);
delay(clickdel + rnd(20,60));
clickMap(2, 0, npc);
}
_timer -= 50;
delay(50);
}while(!getUIFlag(_uiflag) && _timer > 0);
// After the loop, if we are still not interacted, log the error
if (!getUIFlag(_uiflag)) {
print("EnterInteract() : Failed to interact with " + npc.name);
return false;
}
// Wait a certain delay before returning to the caller
DoDel(npcdelay);
// If we got there, we are interacted
return true;
}
function MenuCancel(npc,how) {
// Check the arguments
if (!npc) {
dprint("PXP_IT_DoCancel() : No NPC object is entered");
return true;
}
else if (arguments.length<2) {
dprint("PXP_IT_DoCancel() : No enough arguments is entered");
return true;
}
// If there is no flags set to true, all is cancelled already
var UIFlagStatus = _PXP_IT_CheckUI();
if(!UIFlagStatus) {
dprint("PXP_IT_DoCancel() : Already cancelled!");
return false;
}
// Init the timer
var _timer = timeout * 1000;
// Loop while you are not interacted
do {
dprint("Timer now at " + _timer);
// For each 0.5 second, retry the cancel
if ((_timer % 500) === 0) {
if (_timer <= 6000) {
dprint("Now retrying to cancel");
npc.cancel(how);
}
}
_timer -= 25;
delay(25);
UIFlagStatus = _PXP_IT_CheckUI();
}while(UIFlagStatus && _timer > 0);
// Check if the cancel is correctly done
if (!UIFlagStatus) {
dprint("PXP_IT_DoCancel() : Menus cancel done!");
return false;
}
else {
dprint("PXP_IT_DoCancel() : Unable to cancel the menus!");
return true;
}
}
function _PXP_IT_CheckUI() {
dprint("_PXP_IT_CheckUI() : Checking the UI flags");
//Default flags
var _uiflags=[0x08,0x0c,0x0d,0x14,0x19,0x1a];
var _flags=false;
//Check if the flags are present, then push them into the array
for(j=0; j<_uiflags.length; j++) {
if(getUIFlag(_uiflags[j])) {
if(!_flags) { _flags=new Array(); }
_flags.push(_uiflags[j]);
}
}
// Return true if there is still flags in the array
if(!_flags || _flags.length<1) {
dprint("_PXP_IT_CheckUI() : The flags array is empty");
return false;
}
else {
dprint("_PXP_IT_CheckUI() : The flags array is not empty (the array got " + _flags.length + " elements)");
return true;
}
}
/*
function makegold()
{
if (getUIFlag(0x0c))
{
sendDDE(1,"mIRC","command","","/run makegold.aut");
delay(65000);
}
else
{
makegold();
}
}
*/
function makegold()
{
if (getUIFlag(0x0c))
{
// myweaponforsale=getUnitByGID(myweapongid);
// if (myweaponforsale != 0 && myweaponforsale != null)
myweapon.shop(anya,1);
while (me.getStat(14)+me.getStat(15) <810000)
{
anya = getUnit(1,"Anya");
ShopIt("Anya",anya);
getBoughtItem();
delay(75);
newitem.shop(anya,1);
delay(75);
}
delay(750);
ShopIt("Anya",anya);
}
else
{
makegold();
}
}
function gotostash()
{
walkto(5107,5116);
walkto(5118,5118);
walkto(5129,5112);
walkto(5129,5105);
walkto(5129,5085);
walkto(5110,5062);
walkto(5106,5043);
print("stashing");
walkto(5106, 5043);
walkto(5110, 5065);
walkto(5123, 5058);
delay(100);
NPCinteract(stash);
}
function getUnitByGID(gid)
{
item=getUnit(4);
if(item) do
{
if(item.gid==gid)
return item
} while(item.getNext());
return 0;
}
function selling()
{
sellarray = new Array();
sellitem = getUnit(4,null,1)
delay(100)
if (sellitem)
{
do {
sellarray.push(sellitem.gid);
}
while(sellitem.getNext(null,1));}
}
function getBoughtItem(item) {
//scanning for the new one
newitem = getUnit(4,null,1);
delay(100);
// If we have a item, check if it is in the old list
if (newitem) { do {
var new_item=true;
for (var x=0; x<sellarray.length; x+=1) {
if (sellarray[x]==newitem.gid) { new_item=false; }
}
if (new_item) { return newitem; }
} while (newitem.getNext(null,1)); }
return false;
}