OrionClient MiningScript UORemedy: различия между версиями

Строка 1: Строка 1:
 
Скрипт сам крафтит себе тинкертулзы, лопаты, плавит, бьет элемов, хилится, относит весь стафф в банк. <br>
 
Скрипт сам крафтит себе тинкертулзы, лопаты, плавит, бьет элемов, хилится, относит весь стафф в банк. <br>
 
Для старта иметь в сумке пару лопат + тинкер тулзы.<br>
 
Для старта иметь в сумке пару лопат + тинкер тулзы.<br>
 +
Нужно создать List с названием Elementals, и добавить туда типы всех рудных элемов (по какой-то причине мне было лень это делать в скрипте). <br>
 
В массив minePoints по аналогии добавить точки, которые будет обкапывать <br>
 
В массив minePoints по аналогии добавить точки, которые будет обкапывать <br>
 
<pre>
 
<pre>

Версия 13:49, 26 марта 2020

Скрипт сам крафтит себе тинкертулзы, лопаты, плавит, бьет элемов, хилится, относит весь стафф в банк.
Для старта иметь в сумке пару лопат + тинкер тулзы.
Нужно создать List с названием Elementals, и добавить туда типы всех рудных элемов (по какой-то причине мне было лень это делать в скрипте).
В массив minePoints по аналогии добавить точки, которые будет обкапывать

var config = {
   "maxWeight"        : (Player.MaxWeight()-30), //Max Weight to smelt 
   "unloadWeight"     : (Player.MaxWeight()-150), //Max Weight to unloaad   
   "pickaxe"          : "0x0F39", //Pickaxe type(pickaxe, shovel etc)
   "pickaxe_keep"     : 5,
   "pickaxe_button"   : 177,
   "ore"              : "0x19B9", 
   "forge"            : "0x0FB1",
   "ingot"  		  : "0x1BF2",
   //"breakstone" 	  : "0x11EA",
   "tinkerTools"      : "0x1EB8",
   "tinkerTools_keep" : 2,
   "tinkerTools_button": 128,
   "forge"			  : "0x400094D2",      
   "toolQty"          : 1,        //For check_tools, alert when < toolQty
   "tileOffset"       : 2,     // Radius to dig (X+-2, Y+-2)

};

var moreStuff = [
	0x0EED,
	0x11EA,
	0x3194,
	0x3195,
	0x5732,
	0x3192,
	0x3193,
	0x0F28,
	0x3198,
	0x3197
];

var bankCoords = {
	"x" : 2513, "y" : 547
};

var forgeCoords = {
	"x" : 2563, "y" : 504	
};


var minePoints = {
	1 : {"x" : 2559, "y" : 496, "z" : 0 },
	2 : {"x" : 2563, "y" : 489, "z" : 0 }, 
};

function start()
{   
   init();   
   while(!Player.Dead())
   {
      for(var i in minePoints)
      {      
         Orion.Print('[i] Point '+i);      
         Orion.WalkTo(minePoints[i]["x"],minePoints[i]["y"], minePoints[i]["z"],0);
         for (var x = -config['tileOffset']; x <= config['tileOffset']; x++)
         {
            for (var y = -config['tileOffset']; y <= config['tileOffset']; y++)
            {
               mine(x,y);
            }
         }
      }
   }
}

function mine(x,y)
{
   Orion.Print("[i] Mining at offset X+"+x+" Y+"+y);
   while(!Player.Dead())
   {       
       if(checkTool())
       {
          if(Player.Weight() >= config['maxWeight'] )
             smelt(Player.X(),Player.Y(),Player.Z());

          if(Orion.ValidateTargetTileRelative('mine', x, y))
          {

          	//var _enemy = Orion.FindType("0x006D", "0xFFFF", 'ground')
          	var _enemy = Orion.FindList('Elementals',ground,'near|mobile', 18, )
   			if(_enemy != null && _enemy.length > 0)
		   	{
		   		Orion.Print("Found enemy");
		   		Orion.Print(_enemy[0]);
		   	   	Orion.Attack(_enemy[0]);
		   	   	follow(_enemy[0], Player.X(), Player.Y());
		   	   	Orion.Wait(500);		   	   	
		   	}

             if(Orion.HaveTarget())
                Orion.CancelWaitTarget();
             
             Orion.UseType(config['pickaxe']);   
             Orion.WaitJournal('Where do you wish', Orion.Now(), Orion.Now()+2000, 'me|sys');
             Orion.TargetTileRelative('mine', x, y, Player.Z());                          
             var result = Orion.WaitJournal('You put some|You loosen some|There is no metal|You can\'t|You have worn|You dig|Try mining|is too far|no line of|seen', Orion.Now(), (Orion.Now() + 7000), 'me|sys');          
             
             /*if(badOre.indexOf(result.Text()) > -1)
             {
             	Orion.Print("Low level ore found, skipping");
             	Orion.Wait(300);
             	break;
             }*/
             if(result && (result.FindTextID()==2 || result.FindTextID()==3))
             {

                Orion.Print("[i] Tile depleted");
                Orion.Wait(300);
                break;
             }                          

          }else{
             break;
          }       
       }else{ //Not enough tools
          break;
       }
   //Main Loop
   }
}
function smelt(x,y,z){
  	Orion.Print("[i] Smelting");     
  	while(Orion.WalkTo(forgeCoords["x"],forgeCoords["y"],0,0) != true)
  	{
  		Orion.WalkTo(forgeCoords["x"],forgeCoords["y"],0,0);
  	}

	if(Orion.WalkTo(forgeCoords["x"],forgeCoords["y"],0,0))			
	{
		Orion.Print("[i] Smelting spot reached")
		var ores = Orion.FindType(config['ore'],-1, 'backpack');
		if(ores && ores.length > 0)
		{
		   ores.forEach(function(items){		      
		      Orion.UseObject(items)
		      Orion.WaitJournal("Select the forge", Orion.Now(), Orion.Now()+1000, 'me|sys');
		      Orion.TargetObject(config["forge"]);
			  var result = Orion.WaitJournal("You have no|You burn away|You smelt", Orion.Now(), Orion.Now()+1000, 'me|sys');
		      Orion.Wait(500);
		      if(result && result.FindTextID()==0)
		      { 
		    		Orion.Print("[i] Cants smelt, skip");
		    		Orion.Wait(300);
		    		Orion.Ignore(items)
		   			continue;
		       }                          

		   });
		   check_and_craft(config["tinkerTools"], config["tinkerTools_keep"], config["tinkerTools_button"]);
		   Orion.Wait(1000);
		   check_and_craft(config["pickaxe"], config["pickaxe_keep"], config["pickaxe_button"]);
		   Orion.Wait(1000);
		   if(Player.Weight() >= config['unloadWeight'])
		   		unloadToBank(x,y,z)

		   while (Orion.WalkTo(x,y,z,0) != true)	
		   {
		   		Orion.WalkTo(x,y,z,0);
		   }
		}
	}  
   
}



function unloadToBank(x, y, z)
//function unloadToBank()
{
	while (Player.X() != bankCoords["x"] && Player.Y() != bankCoords["y"])
	{		
		Orion.WalkTo(bankCoords["x"],bankCoords["y"],0,0)
	}
	Orion.Say('bank');
	Orion.Wait(1000);
	var _ingots = Orion.FindType(config['ingot'], -1, 'backpack')
	if (_ingots && _ingots.length > 0)
	{
		Orion.Print("Found some ingots");
		_ingots.forEach(function(_item){
			Orion.Print("Moving...");
			Orion.MoveItem(_item, 0, Player.BankSerial());
			Orion.Wait(1000);
		});
	}

	moreStuff.forEach(function(_item){
		var _item_found = Orion.FindType(_item, -1, 'backpack');
		if(_item_found)
		{			
			Orion.MoveItem(_item_found, 0, Player.BankSerial());
			Orion.Wait(1000);		
		}
	});
	/*
	var _breakstone = Orion.FindType(config['breakstone'], -1, 'backpack')
	if(_breakstone)
	{
		Orion.Print("Found breakstone");
		Orion.MoveItem(_breakstone, 0, Player.BankSerial());
		Orion.Wait(1000);
	}

	var _gold = Orion.FindType(0x0EED, -1, 'backpack')
	if(_gold)
	{
		Orion.Print("Found some gold");
		Orion.MoveItem(_gold, 0, Player.BankSerial());
		Orion.Wait(1000);
	}*/

	while (Player.X() != x && Player.Y() != y)
	{		
		Orion.WalkTo(x, y, z, 0)
	}

}


function checkTool()
{   
   var tools = Orion.FindType(config['pickaxe'], -1, 'backpack');
   if(tools && tools.length >= config['toolQty'])
   {
      Orion.Print("[i] There is "+tools.length+" tools left");
      return true;
   }else{
      Orion.Print("[e] Not enough tools");      
      Orion.PlayWav("Alarm");
      Orion.PauseScript();            
      return false;
   }
}

function init()
{   

   if(Player.WarMode())
      Player.WarMode(false)
  Orion.Exec("AutoHealSelf",true)
  Orion.Exec("ability",true)
   Orion.Print("Initialization...");
}

function AutoHealSelf()
{ 
	while(!Player.Dead())
	{
		while(Player.Hits()<(Player.MaxHits()-20))
		{		
			Orion.ClearJournal();
			Orion.Say("[bandself");
			Orion.Wait(500);
			Orion.WaitJournal("You finish|not damaged|heal|barely help", Orion.Now(), Orion.Now()+20000);

			if(Orion.Count('0x0E21') < 10)
			{
				Orion.Print('33', ' [' + Orion.Count('0x0E21') + '] bandage left ! ');
			}
		}		
		Orion.Wait(100);										
	}
	Orion.Wait(100);
	Orion.IgnoreReset();	
}

function ability()
{
	while(!Player.Dead())
	{
		if(!Orion.AbilityStatus('primary'))
		{
			if(Player.Mana()>28)
				Orion.UseAbility('primary');
		}
		Orion.Wait(100);
	}
}

function follow(_target_serial, _original_x, _original_y)
{		
	while (Orion.FindObject(_target_serial) != null )
	{
		var _target = Orion.FindObject(_target_serial);
		if(_target && _target != null)
		{
			Orion.WalkTo(_target.X(), _target.Y(), _target.Z(),1);
			Orion.Wait(100);
		}
	}	
	Orion.Wait(3000);
	Orion.Print("Returning to position");
	Orion.WalkTo(_original_x, _original_y, Player.Z(), 0);
}


function check_and_craft(_item, _qty, _button)
{
	while (Orion.FindType(_item).length < _qty)
	{
		Orion.Print("In While")
		craft(config["tinkerTools"],_button);
	}
	Orion.Print("Tools ok")
}

//_tools -> Crafting tools type 
//_button -> Gump response id
function craft(_tools, _button)
{
	Orion.UseType(_tools);
	Orion.WaitGump(Orion.CreateGumpHook(_button));
	if(Orion.WaitForGump(2000))
	{		
		Orion.WaitGump(Orion.CreateGumpHook(0));
		Orion.Print("Crafted -> Closed?");
		Orion.Wait(10000); // @TODO: Fix harcoded delay
	}
	else
	{
		Orion.Print("Error crafting item, WaitForGump timeout exceeded");
		Orion.PauseScript();
	}
}