Advertisement
lu4kedr

Orion Autoload

Mar 19th, 2021
541
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // #### NASTAVENI ####
  2. var debug = false;
  3. var MonsterPositions="OA/MonsterMapData.txt";
  4. var Sound_ignTorchPath='D:\\Software\\Erebor\\OrionData\\OA\\igntorch.wav';
  5. var any = '0xFFFF';
  6. var prodlevaCost = 180; // ~235
  7.  
  8. var NightSightDrink = false; // na hlasku je spatne videt automaticky vypije/zacaruje svetlo [true -> potion, false -> spell,  null-> vypnuto]
  9. var CriticalHits = 40; // HP pod ktere se pije GH
  10. var AutoDrinkHeal = true; // povoleni autopiti GH
  11. var MinVoodooObetHP = 85; // Minimum HP pod ktere se voodooobet neprovede
  12. var GPAmount = 5000; // mnozstvi GP  kdy provede prikaz .mesec
  13. var CheckLineOfSight = true;  // kontroluje LOS targetu pri casteni na cil -- NEVIDI v domech
  14.  
  15. // Nastaveni spellu pro autosipku
  16. var AutoArrow = true; // povoleni autosipky
  17. var AutoUnParalyzeSpell = 'Harm';
  18.  
  19. //autoheal
  20. var Shaman = false; // true-pouziva ciste bandy  false - spinave bandaze
  21. // minimum HP pro autobandeni sebe v %
  22. var MinimumHP=90;
  23. // minimum HP pro autobandeni ostatnich v %
  24. var MinTargetHP=97;
  25.  
  26. var AutoObet= true;
  27. var ObetManaGain=40;
  28.  
  29.  
  30.  
  31.  
  32. // Prepsani nastaveni pro dane charactery -> neobsahuje-li dane nastaveni pouzije se defaultni z predchozich radku
  33. var CharacterSettings = {};
  34. CharacterSettings['TEMPLATE'] =
  35. {
  36.     NightSightDrink : true,
  37.     CriticalHits : 50,
  38.     AutoDrinkHeal : true,
  39.     MinVoodooObetHP : 90,
  40.     GPAmount : 5000,
  41.     CheckLineOfSight : true,
  42.     AutoArrow : true,
  43.     AutoUnParalyzeSpell :'Harm',
  44.     Shaman : false,
  45.     MinimumHP : 100,
  46.     MinTargetHP :97,
  47.     AutoObet : true,
  48.     CheckLineOfSight :false
  49. };
  50.  
  51. CharacterSettings['Mannaz'] =
  52. {
  53.     NightSightDrink : false,
  54.     CriticalHits : 70,
  55.     AutoDrinkHeal : true,
  56.     MinVoodooObetHP : 90,
  57.     GPAmount : 5000,
  58.     CheckLineOfSight : true,
  59.     AutoArrow : true,
  60.     AutoUnParalyzeSpell :'Harm',
  61.     Shaman : false,
  62.     MinimumHP : 85,
  63.     MinTargetHP :95,
  64.     AutoObet : false,
  65.     CheckLineOfSight :false
  66. };
  67.  
  68. CharacterSettings['Sam Daily'] =
  69. {
  70.     NightSightDrink : true,
  71.     CriticalHits : 50,
  72.     AutoDrinkHeal : true,
  73.     MinVoodooObetHP : 90,
  74.     GPAmount : 5000,
  75.     CheckLineOfSight : true,
  76.     AutoArrow : true,
  77.     AutoUnParalyzeSpell :'Harm',
  78.     Shaman : false,
  79.     MinimumHP : 100,
  80.     MinTargetHP :97,
  81.     AutoObet : true,
  82.     CheckLineOfSight :false
  83. };
  84.  
  85.  
  86. CharacterSettings['Stomegeor'] =
  87. {
  88.     AutoDrinkHeal : true,
  89.     MinVoodooObetHP : 90,
  90.     GPAmount : 5000,
  91.     CheckLineOfSight : true,
  92.     AutoArrow : true,
  93.     AutoUnParalyzeSpell :'Harm',
  94.     Shaman : false,
  95.     MinimumHP : 100,
  96.     MinTargetHP :97,
  97.     AutoObet : true,
  98.     CheckLineOfSight :true,
  99.     NightSightDrink : false,
  100.     CriticalHits : 55,
  101.     Shaman : false
  102. };
  103.  
  104.  
  105. CharacterSettings['Scathach'] =
  106. {
  107.     NightSightDrink : false,
  108.     CriticalHits : 50,
  109.     AutoDrinkHeal : true,
  110.     MinVoodooObetHP : 90,
  111.     AutoObet : false ,
  112.     AutoArrow : true,
  113.     AutoUnParalyzeSpell :'Harm',
  114.     Shaman : true,
  115.     MinimumHP : 90,
  116.     MinTargetHP :99,
  117.     ObetManaGain : 70
  118. };
  119.  
  120. /// KONSTANTY ///
  121. var spells = {}; // spells [Nazev, Prodleva]
  122. spells["Harm"] = 1300;
  123. spells["Magic Arrow"] = 2200;
  124. spells["Fireball"] = 1950;
  125. spells["Lightning"] = 3300;
  126. spells["Energy Bolt"] = 3000;
  127. spells["frostbolt"] = 2750;
  128. spells["necrobolt"] = 2700;
  129. spells["Mind Blast"] = 3400;
  130. spells["Paralyze"] = 5100;
  131. spells["Flame Strike"] = 3800;
  132. spells["Meteor Swarm"] = 6600;
  133. spells["Energy Field"] = 5500;
  134. spells["Magic Reflection"] = 4350;
  135. spells["Night Sight"] = 1800;
  136. spells["Protection"] = 1900;
  137. spells["Cunning"] = 1900;
  138. spells["Agility"] = 2000;
  139. spells["Strength"] = 2000;
  140. spells["Bless"] = 3400;
  141. spells["Dispel Field"] = 3100;
  142. spells["Reactive Armor"] = 1900;
  143. spells["Cure"] = 1900;
  144. spells["Invisibility"] = 3500;
  145. spells["Dispel"] = 2800;
  146. spells["Dispel Field"] = 2600;
  147. spells['Mass Dispel'] = 3900;
  148. spells["Reveal"] = 1850;
  149. spells['Recall'] =9000;
  150. spells['Chain Lightning']=5000;
  151. spells['Teleport']=2200;
  152. spells['Summon Daemon']=4500;
  153. spells['Earth Elemental']=4500;
  154.  
  155. var pots = [ // name, color, delay, duration
  156.     ["heal", 0x0160, 21000, 0],
  157.     ["cure", 0x008E, 21000, 390000],
  158.     ["cure", 0x002B, 21000, 200000],
  159.     ["invis", 0x0447, 21000, 200000],
  160.     ["refresh", 0x00ED, 21000, 0],
  161.     ["refresh", 0x0027, 16000, 0],
  162.     ["reflex", 0x0985, 21000, 500000],
  163.     ["mobility", 0x000F, 6000, 30000],
  164.     ["nightsight", 0x0980, 6000, 0],
  165.     ["agility", 0x00CF, 6000, 600000],
  166.     ["agility", 0x0005, 6000, 300000],
  167.     ["strength", 0x076B, 6000, 600000],
  168.     ["strength", 0x0388, 6000, 300000],
  169.     ["clever", 0x047D, 6000, 600000],
  170.     ["clever", 0x073E, 6000, 300000],
  171.     ["stoneskin", 0x0999, 6000, 600000],
  172.     ["reactive", 0x0A82, 21000, 10000]
  173.  
  174. ];
  175. // TODO
  176. var allContainers = '0x0E76|0x0E75|0x09B0|0x0E79|0x09AB|0x0E7C|0x0E7D|0x09AA|0x0E7E|0x09A9|0x0E83|0x0E42|0x0E43|0x09A8|0x0E80';
  177. var containerTypes = [
  178.     { Graphic: 0x0E76, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 }, //
  179.     { Graphic: 0x0E75, MinX: 44, MinY: 65, MaxX: 142, MaxY: 132 }, //
  180.     { Graphic: 0x09B0, MinX: 44, MinY: 65, MaxX: 142, MaxY: 132 }, //
  181.     { Graphic: 0x0E79, MinX: 44, MinY: 65, MaxX: 142, MaxY: 132 }, //
  182.     { Graphic: 0x09AB, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 },
  183.     { Graphic: 0x0E7C, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 },
  184.     { Graphic: 0x0E7D, MinX: 16, MinY: 51, MaxX: 106, MaxY: 104 },///
  185.     { Graphic: 0x09AA, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 },
  186.     { Graphic: 0x0E7E, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 },
  187.     { Graphic: 0x09A9, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 },
  188.     { Graphic: 0x0E83, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 },
  189.     { Graphic: 0x0E42, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 },
  190.     { Graphic: 0x0E43, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 },
  191.     { Graphic: 0x09A8, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 },
  192.     { Graphic: 0x0E80, MinX: 30, MinY: 35, MaxX: 95, MaxY: 100 }
  193. ]
  194.  
  195.  
  196. var journalActions = [
  197.     {
  198.         Text: "exp?",
  199.         Command: "sys",
  200.         Action: function() {
  201.             var xp = GetActualExp();
  202.             var xpp = (xp.Min - parseInt(Orion.GetGlobal("ExpStart"))).toFixed(1);
  203.             var xp2do = (xp.Max - xp.Min);
  204.             var cas = ((Orion.Now() - parseInt(Orion.GetGlobal("ExpStartTime"))) / 60000).toFixed(2);
  205.             var prum = (xpp / cas).toFixed(2);
  206.             Orion.Print("Ziskano " + xpp + " zkusenosti.");
  207.             Orion.Print("Do dalsiho lvl zbyva: " + xp2do + " zkusenosti.");
  208.             Orion.Print("Prumerne " + prum + " expu za minutu.");
  209.             Orion.Print("Celkovy cas: " + cas + " minut.");
  210.         }
  211.     },
  212.     {
  213.         Text: " silnejsi ranu!",
  214.         Command: "sys",
  215.         Action: function() {
  216.             CharPrintDelayed(self, '0x0071', "Kritik",15);
  217.         }
  218.     },
  219.     {
  220.         Text: "Nyni budes kouzlit s vetsim usilim.",
  221.         Command: "sys",
  222.         Action: function() {
  223.             Orion.SetGlobal('standCast','true');
  224.             CharPrintDelayed(self, '0x0091', "StandCast ON",15);
  225.             if(Orion.DisplayTimerExists(293)){
  226.                 Orion.RemoveDisplayTimer(293);
  227.             }
  228.             Orion.AddDisplayTimer(293, 9999999, 'RightBottom', 'Rectangle', 'StandCast', 0, 0, '0x0021', '0xFF', 'red');
  229.  
  230.         }
  231.     },
  232.     {
  233.         Text: "Tve usili polevilo.",
  234.         Command: "sys",
  235.         Action: function() {
  236.             Orion.SetGlobal('standCast','false');
  237.             CharPrintDelayed(self, '0x0081', "StandCast OFF",15);
  238.             if(Orion.DisplayTimerExists(293)){
  239.                 Orion.RemoveDisplayTimer(293);
  240.             }
  241.         }
  242.     },
  243.     {
  244.         Text: 'Save imminent',
  245.         Command: "my|sys",
  246.         Action: function() {  
  247.        
  248.             Orion.CharPrint(self, 0x0026, 'Cmucham SAVE');
  249.             Orion.SetGlobal('save','true');
  250.             if(Orion.DisplayTimerExists(555)){
  251.                 Orion.RemoveDisplayTimer(555);
  252.             }
  253.             Orion.AddDisplayTimer(555, 1800000, 'RightTop', 'Circle|Bar', 'Next Save', 0, 0, '0x0044', 0xFF, 'lime');
  254.  
  255.         }
  256.     },
  257.     {
  258.         Text: 'Next scheduled save in 30 minutes',
  259.         Command: "my|sys",
  260.         Action: function()
  261.         {
  262.             Orion.SetGlobal('save','false');
  263.             Orion.CharPrint(self, 0x0026, 'Cmucham SAVE');
  264.         }
  265.     },
  266.     {
  267.         Text: 'Pokousis se vylecit ',
  268.         Command: "my|sys",
  269.         Action: function() {
  270.             Orion.SetGlobal("bandageDone", false);
  271.         }
  272.     },
  273.     {
  274.         Text: '#500876|uspesne osetren|Leceni se ti nepovedlo.| neni zranen.| krvacet.| Nevidis cil.| moc daleko.| se ti nepovedlo.',
  275.         Command: "my|sys",
  276.         Action: function() {
  277.             Orion.Wait(parseInt(Orion.GetGlobal('DynamicHealPause')));
  278.             Orion.SetGlobal("bandageDone", true);
  279.         }
  280.     },
  281.     {
  282.         Text: 'Leceni nesmis uspechat!',
  283.         Command: "my|sys",
  284.         Action: function() {
  285.             Orion.Print("!!!!!! MOC SPECHAS !!!!! ");
  286.             Orion.SetGlobal('DynamicHealPause',parseInt(Orion.GetGlobal('DynamicHealPause'))+50);
  287.         }
  288.     },
  289.     {
  290.         Text: " vypadla zbran z ruky",
  291.         Command: "my|sys",
  292.         Action: function() {
  293.             Orion.Exec('Bandage');
  294.         }
  295.     },
  296.     {
  297.         Text: "Anna Tir Esgal",
  298.         Command: "",
  299.         Action: function() {
  300.             var params = [Orion.GetGlobal('txtSerial'), 1000, 4, "Zed za ", 15]
  301.             Orion.Exec('CustomCountDown', false, params);
  302.         }
  303.     },
  304.     {
  305.         Text: "Anna Tir Kemen",
  306.         Command: "",
  307.         Action: function() {
  308.             var params = [Orion.GetGlobal('txtSerial'), 1000, 6, "Zed za ", 15]
  309.             Orion.Exec('CustomCountDown', false, params);
  310.         }
  311.     },
  312.     {
  313.         Text: "Ruth Fuin Val",
  314.         Command: "my",
  315.         Action: function() {
  316.             var params = [Orion.GetGlobal('txtSerial'), 800, 3, "", 19]
  317.             Orion.Exec('CustomCountDown', false, params);
  318.         }
  319.     },
  320.     {
  321.         Text: "gatah",
  322.         Command: "sys",
  323.         Action: function() {
  324.             var rune = Orion.FindType('0x1F14', '0x0005', 'backpack');
  325.             Orion.Cast('Gate Travel', rune);
  326.         }
  327.     },
  328.     {
  329.         Text: "undress",
  330.         Command: "sys",
  331.         Action: function() {
  332.             var name = (Orion.GetGlobal('txtContent')).slice(17);
  333.             name = name.split("'")[0];
  334.             Orion.Print(name);
  335.             UnDres(name);
  336.         }
  337.     },
  338.     {
  339.         Text: "dress",
  340.         Command: "sys",
  341.         Action: function() {
  342.             var name = (Orion.GetGlobal('txtContent')).slice(15);
  343.             name = name.split("'")[0];
  344.             Dres(name);
  345.         }
  346.     },
  347.     {
  348.         Text: "Heru Morgul Kel",
  349.         Command: "my",
  350.         Action: function() {
  351.             var params = [Orion.GetGlobal('txtSerial'), 850, 8, "Recall za: ", 0x0171]
  352.             Orion.Exec('CustomCountDown', false, params);
  353.         }
  354.     },
  355.     {
  356.         Text: "drop",
  357.         Command: "sys",
  358.         Action: function() {
  359.             var name = (Orion.GetGlobal('txtContent')).slice(14);
  360.             name = name.split("'")[0];
  361.             DropItem(name);
  362.         }
  363.     }
  364.     ,
  365.     {
  366.         Text: 'nohama ti projela silna bolest|citis, ze se nemuzes hybat.|crying awfully.|Unknown Cliloc #500111',
  367.         Command: "sys",
  368.         Action: function() {
  369.             if(GetAutoArrow()){
  370.                 xCast(GetAutoUnParalyzeSpell(),self);
  371.             }
  372.         }
  373.     }
  374.     ,
  375.     {
  376.         Text: 'Je spatne videt.',
  377.         Command: "sys",
  378.         Action: function() {
  379.             var opt=GetNightSightDrink();
  380.             switch (opt) {
  381.                 case true:
  382.                     Potion('nightsight');
  383.                     break;
  384.                 case false:
  385.                     BandCast('Night Sight',self);
  386.                     break;
  387.                 default:
  388.                     break;
  389.             }
  390.             //Orion.SetLight(true,1);
  391.         }
  392.     }
  393. ];
  394.  
  395. /*
  396. ######################################################
  397. ### File: Scripts/Abilities/Leap.oajs
  398. ######################################################
  399. */
  400.  
  401. // Leap - pouziti ability Leap + oznameni o pouziti
  402. function Leap() {
  403.     if (Orion.GetGlobal('LeapTime') > Orion.Now()) {
  404.         var delta = Orion.GetGlobal('LeapTime') - Orion.Now();
  405.         Orion.CharPrint('self', '0x011A', "Jeste nemuzes [" + delta + "]");
  406.         return;
  407.     }
  408.     var trg = Orion.FindObject(lasttarget);
  409.     if (!trg) {
  410.         Orion.Print("Nevidis na cil");
  411.         return;
  412.     }
  413.     Orion.Attack(trg.Serial());
  414.     if (Orion.GetDistance(trg.Serial()) < 10) {
  415.         Orion.Say('.leap');
  416.         var time = Orion.Now() + 3700;
  417.         Orion.SetGlobal('LeapTime', time);
  418.         Orion.Wait(3500);
  419.         Orion.CharPrint('self', '0x011A', "< LEAP >");
  420.     } else {
  421.         Orion.CharPrint('lasttarget', '0x011F', 'Moc Daleko -> ' + Orion.GetDistance(trg.Serial()));
  422.     }
  423. }
  424. /*
  425. ######################################################
  426. ### File: Scripts/Abilities/Stab.oajs
  427. ######################################################
  428. */
  429.  
  430. //Probo - ON/Off fce pro pouziti ability Probodnuti ze zalohy u Thiefa, pokud postava neni v Hidden stavu pouzije fci Hid
  431. //          pri priblizovani se k cili v hidu vypisuje jeho vzdalenost
  432. function Probo() {
  433.     var dist = 100;
  434.     var scim = Orion.FindType('0x13B5|0x13B6', any, 'backpack');
  435.     if (!Player.Hidden()) {
  436.         Hid();
  437.         return;
  438.     }
  439.     if (Orion.GetGlobal("probo") == 'true') {
  440.         Orion.SetGlobal("probo", false);
  441.        // CharPrintDelayed('self', '0x00FA', "Probo Off");
  442.         return;
  443.     }
  444.     Orion.SetGlobal("probo", true);
  445.     CharPrintDelayed('self', '0x00F1', "Probo ON");
  446.     var toWait = Orion.GetGlobal("hidTime") - (Orion.Now() - 3000);
  447.     Orion.Print(toWait);
  448.     if((Orion.Now() - 3000) < Orion.GetGlobal("hidTime")){
  449.         Orion.AddDisplayTimer(0, toWait, 'AboveChar', 'line|bar', '', 0, 0, '0x0038', 0, 'yellow');
  450.     }
  451.     while ((Orion.Now() - 3000) < Orion.GetGlobal("hidTime")) {
  452.         Orion.Wait(100);
  453.         if (Orion.GetGlobal("probo") == 'false') {
  454.             CharPrintDelayed('self', '0x00FA', "Probo Off");
  455.             return;
  456.         }
  457.         if (!Player.Hidden()) {
  458.             Orion.SetGlobal("probo", false);
  459.             Hid();
  460.             return;
  461.         }
  462.     }
  463.     CharPrintDelayed('self', '0x00AA', "Bodam");
  464.     while (Player.Hidden()) {
  465.         if (Orion.GetGlobal("probo") == 'false') {
  466.             CharPrintDelayed('self', '0x00FA', "Probo Off");
  467.             return;
  468.         }
  469.         while(Orion.GetGlobal('save'=='true'))
  470.         {
  471.             Orion.Wait(200);
  472.         }
  473.         if (Orion.GetDistance(lasttarget) < 5) {
  474.  
  475.             if (Orion.GetDistance(lasttarget) < 2) {
  476.                 Orion.WaitTargetObject(lasttarget);
  477.                 if(scim.length>0){
  478.                     Orion.UseObject(scim[0]);
  479.                 }
  480.                 else{
  481.                     Orion.Say(".usehand");
  482.                 }
  483.                
  484.                 Orion.Wait(200);
  485.                 EquipWeap();
  486.             }
  487.             if (dist != Orion.GetDistance(lasttarget)) {
  488.                 dist = Orion.GetDistance(lasttarget);
  489.                 Orion.CharPrint(lasttarget, '0x000F', 'Distance : ' + dist);
  490.             }
  491.         }
  492.         Orion.Wait(100);
  493.     }
  494.     Orion.SetGlobal("probo", false);
  495.     Orion.Wait(100);
  496.     Hid();
  497. }
  498.  
  499. /*
  500. ######################################################
  501. ### File: Scripts/Abilities/Throw.oajs
  502. ######################################################
  503. */
  504.  
  505. // Throw - fce pro hazeni vrhacich nozu s odpoctem
  506. function Throw() {
  507.     if (Orion.GetGlobal("throwDelay") == '') Orion.SetGlobal("throwDelay", Orion.Now());
  508.     if (Orion.GetGlobal("throwDelay") > Orion.Now()) {
  509.         CharPrintDelayed('self', '0x00A1', 'Jeste nemuzes Hazet');
  510.         return;
  511.     }
  512.     if (Orion.GetDistance(lasttarget) > 6) {
  513.         CharPrintDelayed('self', '0x00A1', 'Moc Daleko <' + Orion.GetDistance(lasttarget) + '>');
  514.     } else {
  515.         var start = Orion.Now();
  516.         Orion.Attack(lasttarget);
  517.         Orion.Say(".throw");
  518.         Orion.Wait(200);
  519.         if (Orion.InJournal('Nevidis na cil!', 'sys|my') != null) {
  520.             Orion.ClearJournal('Nevidis na cil!');
  521.             Orion.Arm(Orion.GetGlobal("weap"));
  522.             return;
  523.         }
  524.         Orion.Arm(Orion.GetGlobal("weap"));
  525.         Orion.Wait(200);
  526.         Orion.SetGlobal("throwDelay", Orion.Now() + 4800);
  527.         Orion.Wait(1300);
  528.         CharPrintDelayed('self', '0x00AD', ' <  3  >');
  529.         Orion.Wait(1100);
  530.         CharPrintDelayed('self', '0x00AD', ' <  2  >');
  531.         Orion.Wait(1300);
  532.         CharPrintDelayed('self', '0x00AD', ' <  1  >');
  533.         Orion.Wait(1200);
  534.         CharPrintDelayed('self', '0x00AD', '<< HAZEJ >>');
  535.     }
  536. }
  537.  
  538.  
  539. // ThrowSmart - fce pro inteligentni vykudlovani cile - automaticky hodi kudlu, kdyz je cil bliz nez 3 pole
  540. function ThrowSmart() {
  541.     if (Orion.GetGlobal('throw') == 'true') {
  542.         Orion.SetGlobal('throw', false);
  543.         Orion.CharPrint('self', 33, 'Smart Throw Off');
  544.         return;
  545.     } else {
  546.         Orion.SetGlobal('throw', true);
  547.         Orion.CharPrint('self', 53, 'Smart Throw  On');
  548.     }
  549.  
  550.     while (true) {
  551.         if (Orion.GetGlobal('throw') == 'false') break;
  552.         if (Orion.FindType('0x0F51', any, 'backpack').length < 1) {
  553.             Orion.Print("nemas Kudle");
  554.             Orion.SetGlobal('throw', false);
  555.             continue;
  556.         }
  557.         if (!lasttarget) {
  558.             Orion.Wait(200);
  559.             continue;
  560.         }
  561.         if (Orion.GetDistance(lasttarget) < 3 && Orion.GetGlobal("throwDelay") < Orion.Now()) {
  562.             Throw();
  563.         }
  564.     }
  565.  
  566. }
  567. /*
  568. ######################################################
  569. ### File: Scripts/Abilities/Voodoo.oajs
  570. ######################################################
  571. */
  572.  
  573. // VoodooBoost - fce pro selfBoost shamana
  574. function VoodooBoost(typ) {
  575.     var str = Orion.FindType(0x0F0E, 0x0835, 'backpack');
  576.     var dex = Orion.FindType(0x0F0E, 0x0006, 'backpack');
  577.     var int = Orion.FindType(0x0F0E, 0x06C2, 'backpack');
  578.     var ar = Orion.FindType(0x0F0E, 0x0999, 'backpack');
  579.     var heads = [];
  580.     var head = Orion.FindType('0x1CE9|0x1CE9|0x1DA0|0x1DAE', 0x0000, backpack, true);
  581.     for (var i = 0; i < head.length; i++) {
  582.         heads.push(head[i]);
  583.     }
  584.     for (var i = 0; i < heads.length; i++) {
  585.         var h = Orion.FindObject(heads[i]);
  586.         Orion.Click(heads[i]);
  587.         Orion.Wait(100);
  588.         if (!h) continue;
  589.         if (h.Name() == Player.Name()) {
  590.             if (typ == "str") {
  591.                 Orion.WaitTargetObject(str[0]);
  592.                 Orion.UseObject(heads[i]);
  593.             }
  594.             if (typ == "dex") {
  595.                 Orion.WaitTargetObject(dex[0]);
  596.                 Orion.UseObject(heads[i]);
  597.             }
  598.             if (typ == "int") {
  599.                 Orion.WaitTargetObject(int[0]);
  600.                 Orion.UseObject(heads[i]);
  601.             }
  602.             if (typ == "ar") {
  603.                 Orion.WaitTargetObject(ar[0]);
  604.                 Orion.UseObject(heads[i]);
  605.             }
  606.         }
  607.     }
  608. }
  609.  
  610.  
  611. function VoodooB(bottle,head)
  612. {
  613.     var pause=3500;
  614.     Orion.ClearJournal('Nepovedlo se|Jeste nelze pouzit.| seslano uspesne|Cil podlehl |Prokleti nenalezlo cil.');
  615.     var start=Orion.Now();
  616.     Orion.WaitTargetObject(bottle);
  617.     Orion.UseObject(head);
  618.  
  619.     var tmp = Orion.WaitJournal('Nepovedlo se|Jeste nelze pouzit.|Cil podlehl |Prokleti nenalezlo cil.', start, Orion.Now() + 8000);
  620.      if(Orion.InJournal(' nenalezlo cil', start, 0))
  621.     {
  622.         Orion.ClearJournal('Prokleti nenalezlo cil.');
  623.         Orion.Wait(pause);
  624.         return false;
  625.     }
  626.     if(Orion.InJournal('Cil podlehl ', start, 0))
  627.     {
  628.         Orion.ClearJournal('Cil podlehl voodoo!');
  629.         //Orion.Wait(pause);
  630.         return true;
  631.     }
  632.     else
  633.     {
  634.     Orion.Wait(pause);
  635.         return VoodooB(bottle,head);
  636.     }
  637.     return true;
  638. }
  639.  
  640. ///shamanboost
  641. function Boost()
  642. {
  643.     Orion.Print("Zamer batoh s bagl boosty")
  644.     Orion.AddObject("tmp");
  645.     while (Orion.HaveTarget()) {
  646.         Orion.Wait(100);
  647.     }
  648.     var str = Orion.FindType(0x0F0E, 0x0835, 'backpack',true);
  649.     var dex = Orion.FindType(0x0F0E, 0x0006, 'backpack',true);
  650.     var int = Orion.FindType(0x0F0E, 0x06C2, 'backpack',true);
  651.     var ar = Orion.FindType(0x0F0E, 0x0999, 'backpack',true);
  652.  
  653.     var dexBag=Orion.FindObject('DEXboost');
  654.     var strBag=Orion.FindObject('STRboost');
  655.     var intBag=Orion.FindObject('INTboost');
  656.  
  657.     var heads = Orion.FindType('0x1CE9|0x1DAE|0x1CE1|0x1DA0', '0xFFFF', dexBag.Serial());
  658.     for (var i = 0; i < heads.length; i++) {
  659.         var e = heads[i];
  660.         if(!e)continue;
  661.         if(!VoodooB(dex[0],e))continue;
  662.         VoodooB(ar[0],e);  
  663.     }
  664.  
  665.     var heads = Orion.FindType('0x1CE9|0x1DAE|0x1CE1|0x1DA0', '0xFFFF', intBag.Serial());
  666.      Orion.Print(heads.length);
  667.  
  668.     for (var i = 0; i < heads.length; i++) {
  669.         var e = heads[i];
  670.         if(!e)continue;
  671.          if(!VoodooB(int[0],e))continue;
  672.         VoodooB(ar[0],e);
  673.     }
  674.       var  heads = Orion.FindType('0x1CE9|0x1DAE|0x1CE1|0x1DA0', '0xFFFF', strBag.Serial());
  675.     for (var i = 0; i < heads.length; i++) {
  676.         var e = heads[i];
  677.         if(!e)continue;
  678.          if(!VoodooB(str[0],e))continue;
  679.         VoodooB(ar[0],e);
  680.     }
  681. }
  682.  
  683.  
  684.  
  685.  
  686. // VooDooObet - fce hlidajici HP pri voodooobeti Shamana
  687. function VooDooObet() {
  688.     Orion.SetGlobal('voodooInProgress','true');
  689.     var minHP= Player.MaxHits()/100*80;
  690.     if (Player.Hits() < minHP) {
  691.         Orion.CharPrint(Player.Serial(), 0x00E0, 'Mas mene nez ' + minHP + ' HP!');
  692.         Bandage();
  693.         return;
  694.     }
  695.     if (Player.Mana() == Player.MaxMana()) {
  696.         Orion.CharPrint(Player.Serial(), 0x00E0, 'Mas plnou Manu!');
  697.         Bandage();
  698.         return;
  699.     }
  700.  
  701.     Orion.Say(".voodooobet");
  702.     Orion.Wait(100);
  703.     if(Orion.GetGlobal("isCasting") == "false") {
  704.         Bandage();
  705.     }
  706.  
  707. }
  708.  
  709. // BloodPact - shamanuv bloodpact + info o znovupouziti
  710. function BloodPact() {
  711.     Orion.Say(".bloodpact");
  712.     while (Orion.HaveTarget()) {
  713.         Orion.Wait(100);
  714.     }
  715.     var endTime = Orion.Now() + 400000;
  716.     while (Orion.Now() < endTime) {
  717.         Orion.Wait(3000);
  718.     }
  719.     Orion.CharPrint(Player.Serial(), 0x00E0, 'Voodoo Blood Pact');
  720.     Orion.Print('Voodoo Blood Pact');
  721. }
  722.  
  723.  
  724. // VoodooBoostyAFK - fce pro boost automat
  725. function VoodooBoostyAFK() {
  726.     Orion.Terminate('all', ['VoodooBoostyAFK']);
  727.     Orion.ClearJournal();
  728.     var Heads = {}; //[];
  729.     var HeadsCount = 0;
  730.     Orion.Print("Zamer bednu s hlavama - musi obsahovat i boost potiony");
  731.     Orion.AddObject("hlav");
  732.    
  733.     while (Orion.HaveTarget()) Orion.Wait(100);
  734.     var target = Orion.FindObject('hlav');
  735.     var hlavy = Orion.FindType('0x1CE9|0x1DAE|0x1CE1|0x1DA0', '0xFFFF', target.Serial());
  736.     HeadsCount = hlavy.length;
  737.     for (var i = 0; i < hlavy.length; i++) {
  738.         var h = Orion.FindObject(hlavy[i]);
  739.         Orion.RequestName(h.Serial(), 250);
  740.         if (!Heads[h.Name()]) //)==-1)
  741.         {
  742.             var hea = { Name: h.Name(), Serial: h.Serial() };
  743.             Heads[h.Name()] = h.Serial() //.push(hea);
  744.             Orion.Print("add " + hea.Name + ", " + hea.Serial);
  745.         }
  746.     }
  747.     Orion.RemoveObject('hlav');
  748.     var str = Orion.FindType(0x0F0E, 0x0835, target.Serial());
  749.     var dex = Orion.FindType(0x0F0E, 0x0006, target.Serial());
  750.     var int = Orion.FindType(0x0F0E, 0x06C2, target.Serial());
  751.     var ar = Orion.FindType(0x0F0E, 0x0999, target.Serial());
  752.     var lastSelfBoost = Orion.Now();
  753.     while (!Player.Dead()) {
  754.         Orion.Wait(200);
  755.         var boostWait = Orion.WaitJournal('str:|dex:|int:|ar:|svetlo:|cure:', Orion.Now(), Orion.Now() + 5000);
  756.         Orion.Print(boostWait);
  757.         if (!boostWait) {
  758.             var seeds = Orion.FindType('0x0C4F|0x0C5A|0x1EBD|0x0DF9', '0xFFFF', 'ground');
  759.             if (seeds) {
  760.                 for (var i = 0; i < seeds.length; i++) {
  761.                     Orion.UseObject(seeds[i]);
  762.                     Orion.Wait(200);
  763.                     var itb = Orion.FindType('0x0C4F|0x0C5A|0x1EBD|0x0DF9', '0xFFFF', 'backpack');
  764.                     for (var x = 0; x < itb.length; x++) {
  765.                         Orion.MoveItem(itb[x], 0, '0x400545AE'); // bedna na seno
  766.                     }
  767.                 }
  768.             }
  769.             if (lastSelfBoost < Orion.Now()) {
  770.                 Orion.UseFromGround('0x097B');
  771.                 Orion.Cast('Night Sight', self);
  772.                 Orion.Wait(spells['Night Sight']);
  773.                 lastSelfBoost = Orion.Now() + (60000 * 5); //5 min?
  774.             }
  775.             var humans = Orion.FindType('0x0190|0x0191', '-1', ground, 'mobile|human', '4', 'red');
  776.             if (humans) {
  777.                 for (var i = 0; i < humans.length; i++) {
  778.                     var hmn = Orion.FindObject(humans[i]);
  779.                     if (hmn.Hits() < 90) {
  780.                         BandageTarget(hmn.Serial(), GetShaman());
  781.                     }
  782.                 }
  783.             }
  784.             if (!Player.Hidden()) {
  785.                 Orion.Exec('Hid');
  786.             }
  787.             continue;
  788.         }
  789.         var t = Orion.FindObject(boostWait.Serial());
  790.         Orion.RequestName(t.Serial(), 250);
  791.         Orion.Print(Heads[t.Name()]);
  792.         if (!Heads.hasOwnProperty(t.Name())) //i].Name==t.Name())
  793.         {
  794.             Orion.SayEmote('Nenaleza hlavu ' + t.Name());
  795.         } else {
  796.             var ser = Heads[t.Name()]; //i].Serial;
  797.             var he = Orion.FindObject(ser);
  798.             var pos = { x: he.X(), y: he.Y() };
  799.             Orion.MoveItem(ser, 1, 'backpack');
  800.             Orion.Wait(100);
  801.             if (boostWait.Text() == "str:") {
  802.                 Orion.WaitTargetObject(str[0]);
  803.                 Orion.Wait(150);
  804.                 Orion.UseObject(ser);
  805.                 Orion.Wait(150);
  806.  
  807.                 Orion.SayEmote("Smaci hlavu " + t.Name() + " v lektvaru sily.");
  808.             }
  809.             if (boostWait.Text() == "dex:") {
  810.                 Orion.WaitTargetObject(dex[0]);
  811.                                 Orion.Wait(150);
  812.                 Orion.UseObject(ser);
  813.                 Orion.Wait(150);
  814.                 Orion.SayEmote("Smaci hlavu " + t.Name() + " v lektvaru obratnosti.");
  815.             }
  816.             if (boostWait.Text() == "int:") {
  817.                 Orion.WaitTargetObject(int[0]);
  818.                                 Orion.Wait(150);
  819.                 Orion.UseObject(ser);
  820.                 Orion.Wait(150);
  821.                 Orion.SayEmote("Smaci hlavu " + t.Name() + " v lektvaru moudrosti.");
  822.  
  823.             }
  824.             if (boostWait.Text() == "ar:") {
  825.                 Orion.WaitTargetObject(ar[0]);
  826.                                 Orion.Wait(150);
  827.                 Orion.UseObject(ser);
  828.                 Orion.Wait(150);
  829.                 Orion.SayEmote("Smaci hlavu " + t.Name() + " v lektvaru kamenne kuze.");
  830.             }
  831.             if (boostWait.Text() == "svetlo:") {
  832.                 Orion.Cast("Night Sight", t.Serial());
  833.                 Orion.Wait(1500);
  834.                 continue;
  835.             }
  836.             if (boostWait.Text() == "cure:") {
  837.                 Orion.Cast("Cure", t.Serial());
  838.                 Orion.Wait(2000);
  839.                 continue;
  840.             }
  841.             Orion.Wait(200);
  842.             Orion.MoveItem(ser, 1, target.Serial(), pos.x, pos.y);
  843.             var tmp = Orion.WaitJournal('Nepovedlo se|Jeste nelze pouzit.|seslano uspesne', 0, Orion.Now() + 2000);
  844.             if (Orion.InJournal('Nepovedlo se|Jeste nelze pouzit.', 'my|sys')) {
  845.                 Orion.ClearJournal('Nepovedlo se|Jeste nelze pouzit.');
  846.                 Orion.Wait(3300);
  847.                 Orion.SayEmote('Selhal v ritualu VooDoo');
  848.             } else {
  849.                 Orion.ClearJournal('Nepovedlo se|Jeste nelze pouzit.|seslano uspesne');
  850.                 Orion.Wait(3300);
  851.                 Orion.SayEmote('Dokoncil ritual VooDoo');
  852.             }
  853.         }
  854.     }
  855. }
  856.  
  857.  
  858.  
  859.  
  860. /*
  861. ######################################################
  862. ### File: Scripts/Spells/ArrowToAll.oajs
  863. ######################################################
  864. */
  865.  
  866. function ArrowAll()
  867. {
  868.     var enemies = Orion.FindType('!0x0190|!0x0191', any, ground, 'mobile|ignoreself|ignorefriends', '17', 'murderer');
  869.     for (var i = 0; i < enemies.length; i++) {
  870.         var targ = enemies[i];
  871.         BandCast('Magic Arrow',targ);
  872.         Orion.Wait(200);
  873.     }
  874. }
  875.  
  876. /*
  877. ######################################################
  878. ### File: Scripts/Spells/CastCure.oajs
  879. ######################################################
  880. */
  881.  
  882. // Cure - zacasti na sebe Cure a projde FriendList jeslti nekdo v okoli nema take poison -> Cure na nej
  883. function Cure() {
  884.     if (Player.Poisoned()) {
  885.         BandCast('Cure', self);
  886.             CharPrintDelayed(self, 0x0034, '-- Cure --',12);
  887.  
  888.     }
  889.     var list = Orion.GetFriendList();
  890.     for (var i = 0; i < list.length; i++) {
  891.         var targ = Orion.FindObject(list[i]);
  892.         if (!targ) continue;
  893.         if (targ.Poisoned()) {
  894.             BandCast('Cure', targ.Serial());
  895.                 CharPrintDelayed(targ.Serial(), 0x0034, '-- Cure --',12);
  896.  
  897.         }
  898.     }
  899. }
  900.  
  901. /*
  902. ######################################################
  903. ### File: Scripts/Spells/ReactiveArmor.oajs
  904. ######################################################
  905. */
  906.  
  907.  
  908. // Reactiv - zacasti na sebe ReactiveArmor, uprednostnuje svitky, upozorni na vyprchavajici efekt, na target po zacasteni zautoci
  909. function Reactiv() {
  910.  
  911.     var time = Orion.Now();
  912.     if(Orion.DisplayTimerExists(666)){
  913.         Orion.RemoveDisplayTimer(666);
  914.     }
  915.     if(BandCast("Reactive Armor",self)){
  916.         Orion.AddDisplayTimer(666, 9800, 'AboveChar', 'line|bar', '', 0, 0, '0x0038', 0, 'green');
  917.         Orion.Attack(lasttarget);
  918.         Orion.Wait(9500);
  919.         CharPrintDelayed(self, '30', 'Reactiv Off',7);
  920.     }
  921.  
  922. }
  923.  
  924. function SetReactiveTarget()
  925. {
  926.     Orion.AddObject("reactiveTarget");
  927.     while (Orion.HaveTarget()) Orion.Wait(100);
  928. }
  929.  
  930. function ReactiveTarget()
  931. {
  932.     var target = Orion.FindObject("reactiveTarget");
  933.     if(BandCast("Reactive Armor",target))
  934.     {
  935.         Orion.Wait(6500);
  936.         CharPrintDelayed(self, '31', 'Recast Reactiv Target',10);
  937.     }
  938. }
  939. /*
  940. ######################################################
  941. ### File: Scripts/Spells/SpellCast.oajs
  942. ######################################################
  943. */
  944.  
  945. // BandCast - zacasti  spell (spellName - musi odpovidat polozce v spells) na target (neni-li uveden vyhodi target)
  946. //              nejsou-li HP na 100% tak se pokusi pouzit bandaze, pokud jiz leceni neprobiha
  947. function BandCast(spellName, target)
  948. {
  949.     if (Player.Hits() != Player.MaxHits())
  950.     {
  951.         if(GetShaman() && Player.Mana() <= (Player.MaxMana() - GetObetManaGain()))
  952.         {
  953.             if(GetAutoObet()){
  954.                 VooDooObet();
  955.             }else{
  956.                 CharPrintDelayed(self, 0x0039, '-- OBETUJ SE --',15);
  957.             }
  958.  
  959.         }
  960.         else
  961.         {
  962.             Bandage();
  963.         }
  964.     }
  965.     else
  966.     {
  967.         if(GetShaman() && Player.Mana() <= (Player.MaxMana() - GetObetManaGain()))
  968.         {
  969.  
  970.             if(GetAutoObet()){
  971.                 VooDooObet();
  972.             }else{
  973.                 CharPrintDelayed(self, 0x0039, '-- OBETUJ SE --',15);
  974.             }
  975.         }
  976.     }
  977.     Orion.CancelTarget();
  978.    Orion.CancelWaitTarget();
  979.  
  980.     return xCast(spellName,target);
  981. }
  982.  
  983. // Prepina moznost fizzovat spell u xCast
  984. function SwitchForceSpell(){
  985.     switch (Orion.GetGlobal("trgModeSpell")) {
  986.         case 'pvp':
  987.             Orion.SetGlobal("trgModeSpell", 'pvm');
  988.             Orion.Print('0x0116',"PVM");
  989.             return;
  990.         case 'pvm':
  991.             Orion.SetGlobal("trgModeSpell", 'pvp');
  992.             Orion.Print('0x001B',"PVP");
  993.         return;
  994.     }
  995.  
  996. }
  997. function ManageStandCast(spellName){
  998.     var standCastSpellnames=['Fireball','Lightning','Energy Bolt','frostbolt','necrobolt','Mind Blast','Paralyze','Flame Strike','Meteor Swarm','Chain Lightning'];
  999.     if(standCastSpellnames.indexOf(spellName)<0 && Orion.GetGlobal('standCast')=='true'){
  1000.         Orion.Say(".standcast");
  1001.         while (Orion.GetGlobal('isCasting')=='true') {
  1002.             Orion.Wait(200);
  1003.         }
  1004.         Orion.Wait(100);
  1005.         Orion.Say(".standcast");
  1006.     }
  1007. }
  1008.  
  1009. // xCast - zacasti  spell (spellName - musi odpovidat polozce v spells [settings.oajs]) na target (neni-li uveden vyhodi target)
  1010. function xCast(spellName, target){
  1011.     var rtn=true;
  1012.     var failSafe=Orion.Now();
  1013.     while (Orion.GetGlobal("isCasting") == "true") {
  1014.         Orion.Wait(50)
  1015.         if(Orion.GetGlobal('trgModeSpell')=='pvp'){
  1016.             Orion.SetGlobal("isCasting", "false");
  1017.             break;
  1018.         }
  1019.         if((Orion.Now()-failSafe)>6500){
  1020.             Orion.SetGlobal("isCasting", "false");
  1021.         }
  1022.     }
  1023.     var params = [spellName];
  1024.     Orion.Exec('ManageStandCast',true,params);
  1025.     Orion.SetGlobal("isCasting", "true");
  1026.     switch(spellName){
  1027.         case 'frostbolt':
  1028.             Orion.Say(".frostbolt");
  1029.         break;
  1030.    
  1031.         case 'necrobolt':
  1032.             Orion.Say(".necrobolt");
  1033.         break;
  1034.  
  1035.         default:
  1036.             Orion.Cast(spellName);
  1037.         break;
  1038.     }
  1039.     Orion.WaitForTarget(100);
  1040.     var _xCast = Orion.Now();
  1041.     if (Orion.HaveTarget())
  1042.     {
  1043.  
  1044.         while((target!=null && !Orion.InLOS(target)))
  1045.         {
  1046.             Orion.Wait(50);
  1047.             if (Orion.GetGlobal('GetCheckLineOfSight')=='false') break;
  1048.             if (Orion.WaitJournal('line of sight|see the target|Nevidis na cil.|Targeting Cancelled|Unexpected target info| see that.', _xCast, Orion.Now() + 500)) {
  1049.                 rtn=false;
  1050.                 break;
  1051.             }
  1052.             if(!Orion.HaveTarget()) break;
  1053.         }
  1054.         if (Orion.GetGlobal('GetCheckLineOfSight')=='false' || Orion.InLOS(target))
  1055.         {              
  1056.             Orion.TargetObject(target)
  1057.             Orion.AddDisplayTimer(0, spells[spellName], 'AboveChar', 'line|bar', '', 0, 0, '0x0038', 0, 'orange');
  1058.             if (Orion.WaitJournal('Kouzlo se nezdarilo.|line of sight|see the target|Nevidis na cil.|Unexpected target info|Targeting Cancelled| see that.', _xCast, Orion.Now() + spells[spellName], ''))
  1059.             {
  1060.                 Orion.AddDisplayTimer(0, 0, 'UnderChar', 'line|bar', '', 0, 0, '0x0038', 0, 'orange');
  1061.                 rtn=false;
  1062.             }
  1063.         }
  1064.         else
  1065.         {
  1066.             while(Orion.HaveTarget())
  1067.             {
  1068.                 Orion.Wait(50);
  1069.             }
  1070.             Orion.AddDisplayTimer(0, spells[spellName], 'AboveChar', 'line|bar', '', 0, 0, '0x0038', 0, 'orange');
  1071.             if (Orion.WaitJournal('Kouzlo se nezdarilo.|line of sight|see the target|Nevidis na cil.|Targeting Cancelled|Unexpected target info| see that.', _xCast, Orion.Now() + spells[spellName]))
  1072.             {
  1073.                 Orion.AddDisplayTimer(0, 0, 'UnderChar', 'line|bar', '', 0, 0, '0x0038', 0, 'orange');
  1074.                 rtn=false;
  1075.             }
  1076.            
  1077.         }
  1078.     }
  1079.     Orion.SetGlobal('lastSpell', spellName);
  1080.     Orion.SetGlobal('lastSpellDelay', spells[spellName]);
  1081.     Orion.SetGlobal("isCasting", "false");
  1082.     return rtn;
  1083. }
  1084.  
  1085.  
  1086. // AutoCast - ON/Off funkce, casti posledni vycarovany spell na lasttarget
  1087. function AutoCast() {
  1088.     var spell=Orion.GetGlobal('lastSpell');
  1089.     Orion.ClearJournal();
  1090.     if (Orion.GetGlobal('autoCast') == 'true') {
  1091.         Orion.SetGlobal('autoCast', false);
  1092.         Orion.CharPrint('self', 33, 'AutoCast Off');
  1093.         return;
  1094.     } else {
  1095.         Orion.SetGlobal('autoCast', true);
  1096.         Orion.CharPrint('self', 53, 'AutoCast On');
  1097.     }
  1098.     while (Orion.GetGlobal('autoCast') == 'true') {
  1099.         Orion.Wait(100);
  1100.         if (Player.Hidden()) {
  1101.             Orion.SetGlobal('autoCast', false);
  1102.             Orion.CharPrint('self', 33, 'AutoCast Off');
  1103.             return;
  1104.         }
  1105.         if (Orion.FindObject(lasttarget) == null) {
  1106.             Orion.SetGlobal('autoCast', false);
  1107.             Orion.CharPrint('self', 33, 'AutoCast Off');
  1108.             return;
  1109.         }
  1110.         if(!BandCast(spell, lasttarget)){
  1111.             Orion.ClearJournal();
  1112.             Orion.Wait(Orion.GetGlobal('lastSpellDelay'));
  1113.         }
  1114.     }
  1115. }
  1116.  
  1117.  
  1118. function SwitchCastLOS(){
  1119.     if (Orion.GetGlobal('checkLineOfSight') == 'false') {
  1120.         Orion.SetGlobal("checkLineOfSight", true);
  1121.         Orion.Print('LOS: ON');
  1122.     }
  1123.     else{
  1124.         Orion.SetGlobal("checkLineOfSight", false);
  1125.         Orion.Print('LOS: OFF');
  1126.     }
  1127. }
  1128. /*
  1129. ######################################################
  1130. ### File: Scripts/Spells/Summon.oajs
  1131. ######################################################
  1132. */
  1133.  
  1134. // Summon, SummonHere - v dialogu pro summony vybere podle parametru(NAME) summona a vycasti (Target, nebo na sebe)
  1135. function Summon(Name)
  1136. {
  1137.     Orion.Cast("Summ. Creature");
  1138.     Orion.Wait(200);
  1139.     Orion.SelectMenu('What do you want to summon ?', Name);
  1140. }
  1141.  
  1142. function SummonHere(Name)
  1143. {
  1144.     Orion.Cast("Summ. Creature");
  1145.     Orion.Wait(200);
  1146.     Orion.WaitTargetObject(self);
  1147.     Orion.SelectMenu('What do you want to summon ?', Name);
  1148. }
  1149.  
  1150. function Rename(name)
  1151. {
  1152.     Orion.AddObject("target");
  1153.  
  1154.     while(Orion.HaveTarget())
  1155.     {
  1156.         Orion.Wait(50);
  1157.     }
  1158.     var target = Orion.FindObject("target");
  1159.     Orion.RenameMount(target.Serial(),name);
  1160.  
  1161. }
  1162. /*
  1163. ######################################################
  1164. ### File: Scripts/Spells/Teleport.oajs
  1165. ######################################################
  1166. */
  1167.  
  1168.  
  1169. // Telep - fce zacasti Teleport na cil pokud je v dosahu, pokud ma postava svitky Teleport tak prvni pouzije je, jinak z knihy
  1170. function Telep() { //TODO predelat na BandCast - cas teleportu
  1171.     Bandage();
  1172.     var teleSc = Orion.FindType('0x1F42', '0x0000', 'backpack', 'item', true);
  1173.     if (Orion.GetDistance(lasttarget) > 12) {
  1174.         Orion.CharPrint(lasttarget, '0x0000', 'Moc Daleko');
  1175.         return;
  1176.     }
  1177.  
  1178.     if (teleSc.length) {
  1179.         Orion.WaitTargetObject(lasttarget);
  1180.         Orion.UseObject(teleSc[0]);
  1181.     } else {
  1182.         //BandCast("teleport", lasttarget);
  1183.         Orion.Cast("teleport", lasttarget);
  1184.     }
  1185. }
  1186. /*
  1187. ######################################################
  1188. ### File: Scripts/Skills/Healing.oajs
  1189. ######################################################
  1190. */
  1191.  
  1192.  
  1193. function AutoHealOnOff()
  1194. {
  1195.     if(Orion.GetGlobal('autohealState')=='true'){
  1196.         if (Orion.ScriptRunning('AutoHeal')) {
  1197.            // Orion.Terminate('AutoHeal');
  1198.         }
  1199.         Orion.SetGlobal('autohealState',false);
  1200.         Orion.Print("AUTOHEAL: OFF")
  1201.     }
  1202.     else{
  1203.         Orion.Exec("AutoHeal");
  1204.         Orion.SetGlobal('autohealState','true');
  1205.         Orion.Print("AUTOHEAL: ON")
  1206.  
  1207.     }
  1208. }
  1209. // AutoHeal - fce pro automaticke leceni postav ve FriendsListu
  1210. function AutoHeal(__private){
  1211.     Orion.SetGlobal('crystal','false');
  1212.     var tempTarget=null;
  1213.     var tempLowestHp=GetMinTargetHP;
  1214.     var list = Orion.GetFriendList();
  1215.    
  1216.     if (!Orion.ScriptRunning('JournalCheck')) {
  1217.         Orion.Exec('JournalCheck');
  1218.     }
  1219.  
  1220.     while(Orion.GetGlobal('autohealState') == 'true'){
  1221.          if(Orion.GetGlobal('autohealState') != 'true'){
  1222.             if (Orion.ScriptRunning('AutoHeal')) {
  1223.                 Orion.Terminate('AutoHeal');
  1224.             }
  1225.             Orion.SetGlobal('autohealState',false);
  1226.             Orion.Print("AUTOHEAL: OFF")
  1227.         }
  1228.         tempLowestHp=GetMinTargetHP();
  1229.         tempTarget=null;
  1230.  
  1231.         if (Player.Dead() ) {
  1232.             Orion.Wait(100);
  1233.             continue;
  1234.         }
  1235.         if (Player.Hidden() && !GetShaman()) {
  1236.             Orion.Wait(100);
  1237.             continue;
  1238.         }
  1239.         if (Orion.GetGlobal('isCasting') == 'true') {
  1240.             Orion.Wait(200);
  1241.             Orion.Wait(parseInt(Orion.GetGlobal('castDelay') ));
  1242.             continue;
  1243.         }
  1244.         while(Orion.GetGlobal('save')=='true')
  1245.         {
  1246.             Orion.Wait(200);
  1247.         }
  1248.         if(Orion.GetGlobal('voodooInProgress') == 'true')
  1249.         {
  1250.             Orion.SetGlobal('bandageDone', 'false');
  1251.             Orion.SetGlobal('voodooInProgress','false');
  1252.             continue;
  1253.         }
  1254.         if (Player.Hits() < Player.MaxHits()/100*GetMinimumHP()) {
  1255.             if(Orion.GetGlobal('voodooInProgress') == 'true')
  1256.             {
  1257.                 Orion.SetGlobal('bandageDone', 'false');
  1258.                 Orion.SetGlobal('voodooInProgress','false');
  1259.             }
  1260.             Bandage();
  1261.             // Orion.Wait(200);
  1262.             continue;
  1263.         }
  1264.  
  1265.         for (var i = 0; i < list.length; i++) {
  1266.             var tmp = Orion.FindObject(list[i]);
  1267.             if (!tmp) {
  1268.                 continue;
  1269.             }
  1270.             if (Orion.GetDistance(list[i]) > 6) continue;
  1271.             if (tmp.Hits() < tempLowestHp && tmp.Hits() > 0 && !tmp.Dead()) {
  1272.                 tempLowestHp = tmp.Hits();
  1273.                 tempTarget = tmp;
  1274.             }
  1275.         }
  1276.         if (!tempTarget) {
  1277.             if (Orion.GetGlobal('crystal') == 'true') {
  1278.                 Orion.SetGlobal('crystal','false');
  1279.                 if(GetShaman()){
  1280.                     //Orion.Say('.improvement');
  1281.                 }//
  1282.                 else{
  1283.                     //EquipWeap();
  1284.                     Orion.Say(".enlightment");
  1285.                 }
  1286.             }
  1287.             if (Player.Hits() < GetMinimumHP()) {
  1288.             Bandage();
  1289.             Orion.Wait(200);
  1290.             continue;
  1291.         }
  1292.         }
  1293.         else{
  1294.             if (Orion.GetGlobal('music') == 'true' && tempLowestHp > 80) {
  1295.                 continue;
  1296.             }
  1297.             if (Orion.GetGlobal('res') == 'true') {
  1298.                 Orion.Wait(100);
  1299.                 continue;
  1300.             }
  1301.             if (Orion.GetGlobal('crystal')=='false' && Orion.GetGlobal("bandageDone") == 'true') {
  1302.                 Orion.SetGlobal('crystal','true');
  1303.                 if(GetShaman()){
  1304.                     Orion.Say('.improvement');
  1305.                 }
  1306.                 else{
  1307.                     Orion.Say(".enlightment");
  1308.                 }
  1309.                 Orion.Wait(100);
  1310.             }
  1311.            
  1312.             BandageTarget(tempTarget.Serial(), GetShaman());
  1313.             Orion.Wait(100);
  1314.         }
  1315.     }
  1316. }
  1317.  
  1318. // Bandage - fce pro leceni bandazemi s hlidanim, zda jiz leceni neprobiha
  1319. function Bandage() {
  1320.     BandageTarget(null, GetShaman(), false);
  1321.  
  1322. }
  1323.  
  1324.  
  1325. // OnHitBandage - fce provede leceni "po rane" (hlasky)
  1326. function OnHitBandage() {
  1327.     while (true)
  1328.     {
  1329.         var tmp = Orion.WaitJournal('Tvuj cil krvaci.|Skvely zasah!|Kriticky zasah!|Vysavas staminu|Vysavas zivoty!|Naprazeni k rychlemu utoku!', Orion.Now(), 0);
  1330.         Orion.ClearJournal(tmp.Text() );
  1331.        if (Player.Hits() < Player.MaxHits()-10)
  1332.        {
  1333.         var lh = Orion.ObjAtLayer('LeftHand');
  1334.             if (lh.Graphic() == '0x1405' || lh.Graphic() == '0x1404') continue;
  1335.             Bandage();
  1336.         }
  1337.     }
  1338. }
  1339.  
  1340.  
  1341. // Res - fce pro resovani mrtvol pomoci bandazi
  1342. function Res() {
  1343.     Orion.IgnoreReset();
  1344.     var list = Orion.FindType('0x2006', any, ground, 2);
  1345.     var resInProg = 'Duch neni ve war modu.|Necht se navrati k zivotu !|Pokousis se ozivit mrtvolu zvirete.';
  1346.     var resDone = 'Ozivil jsi |Ozivila jsi | jsi v ozivovani.|Oziveni uspesne.|Tomu uz nepomuze ani svecena voda|Toto neni zvire.|Zvire je vykuchane.| nemuzes ozivovat pomoci obvazu.';
  1347.     if (GetShaman() == true) {
  1348.         var band = Orion.FindType('0x0E20', any, backpack);
  1349.     } else {
  1350.         var band = Orion.FindType('0x0E21', any, backpack);
  1351.     }
  1352.     if (!list) return;
  1353.     for (var i = 0; i < list.length; i++) {
  1354.         Orion.WaitTargetObject(list[i]);
  1355.         Orion.UseObject(band[0]);
  1356.         var start = Orion.Now();
  1357.         Orion.Wait(150);
  1358.         if (Orion.WaitJournal(resInProg, start, Orion.Now() + 500)) {
  1359.             if (Orion.InJournal('Duch neni ve war modu.', 'sys', any, any, start, Orion.Now())) {
  1360.                 Orion.Say("Zapni War");
  1361.                 Orion.SetGlobal("res", false);
  1362.                 return;
  1363.             } else {
  1364.                 Orion.SetGlobal("res", true);
  1365.                 Orion.WaitJournal(resDone, start, Orion.Now() + 11000);
  1366.                 Orion.SetGlobal("res", false);
  1367.                 return;
  1368.             }
  1369.  
  1370.         }
  1371.     }
  1372. }
  1373.  
  1374. function bandageT(target, bloodbandage) {
  1375.     BandageTarget(target, bloodbandage, false)
  1376. }
  1377.  
  1378.  
  1379. // HealPet - leci peta do plna
  1380. function HealPet() {
  1381.     if (Orion.GetGlobal('healpet') == 'true') {
  1382.         Orion.SetGlobal('healpet', 'false');
  1383.         Orion.Arm(Orion.GetGlobal("weap"));
  1384.         Orion.Print('Pet heal OFF');
  1385.         return;
  1386.     }
  1387.     Orion.SetGlobal('healpet', 'true');
  1388.     Orion.Print('Pet heal On');
  1389.     var pet = Orion.FindObject('pet');
  1390.     if (!pet) {
  1391.         Orion.Print("Nemas nastaveny Pet");
  1392.         Orion.SetGlobal('healpet', 'false');
  1393.         Orion.Print('Pet heal OFF');
  1394.         return;
  1395.     }
  1396.  
  1397.     while (pet.Hits() != pet.MaxHits()) {
  1398.         if (Orion.GetGlobal('healpet') == 'false') {
  1399.             Orion.Print('Pet heal OFF');
  1400.             Orion.Arm(Orion.GetGlobal("weap"));
  1401.             return;
  1402.         }
  1403.         Orion.Wait(200);
  1404.         Orion.WaitTargetObject(pet.Serial());
  1405.         Orion.UseType(0x0E20); //ciste bandy
  1406.         Orion.Wait(200);
  1407.         Orion.Arm(Orion.GetGlobal("weap"));
  1408.         var x = Orion.WaitJournal(' byl uspesne osetren.|Osetreni se ti nepovedlo.| neni zranen.|Moc daleko', Orion.Now(), Orion.Now() + 7000);
  1409.     }
  1410.     Orion.SetGlobal('healpet', 'false');
  1411.     Orion.Print('Pet heal OFF');
  1412. }
  1413.  
  1414.  
  1415.  
  1416. // BandageTarget - fce pro leceni bandazemi s hlidanim, zda jiz leceni neprobiha
  1417. function BandageTarget(Serial, BloodBandage, WeapEquipOff) {
  1418.     // var BloodBandage = Orion.GetGlobal('GetShaman()') =='true';
  1419.       if (Orion.GetGlobal('bandageDone') == 'false') {
  1420.           if (!WeapEquipOff) {
  1421.               EquipWeap();
  1422.           }
  1423.           if (Orion.Now() > Orion.GetGlobal('bandageStart')) {
  1424.               Orion.SetGlobal('bandageDone', true);
  1425.           }
  1426.           return;
  1427.       }
  1428.  
  1429.       var serial = self;
  1430.       var selfBandage = false;
  1431.       if (Serial) {
  1432.           serial = Serial;
  1433.       } else {
  1434.  
  1435.           selfBandage = true;
  1436.           if (Player.Hits() == Player.MaxHits()) {
  1437.               EquipWeap();
  1438.               return;
  1439.           }
  1440.       }
  1441.       if (BloodBandage) {
  1442.           var cnt = Orion.FindType('0x0E20', any, backpack);
  1443.           if (!cnt) {
  1444.               Orion.Print('Nemas spinave Bandaze');
  1445.               return;
  1446.           }
  1447.       } else {
  1448.           var cnt = Orion.FindType('0x0E21', any, backpack);
  1449.           if (!cnt) {
  1450.               Orion.Print('Nemas ciste Bandaze');
  1451.               return;
  1452.           }
  1453.       }
  1454.  
  1455.       var start = Orion.Now();
  1456.       Orion.CancelTarget();
  1457.       Orion.CancelWaitTarget();
  1458.       Orion.WaitTargetObject(serial);
  1459.       if (!BloodBandage) {
  1460.           if(selfBandage){
  1461.               Orion.Say('.heal0');
  1462.           }else{
  1463.               Orion.UseType(0x0E21); //ciste bandy
  1464.           }
  1465.  
  1466.       } else {
  1467.           if(selfBandage){
  1468.               Orion.Say('.samheal0');
  1469.           }else{
  1470.           Orion.UseType(0x0E20); // krvave bandy
  1471.           }
  1472.       }
  1473.  
  1474.       Orion.Wait(200);
  1475.       CharPrintDelayed(serial, 0x0034, '-- Heal --',12);
  1476.       if (!WeapEquipOff) {
  1477.           EquipWeap();
  1478.       }
  1479.        
  1480.           if (selfBandage || BloodBandage) {
  1481.               Orion.SetGlobal('bandageStart', Orion.Now() + 6500);
  1482.           } else {
  1483.               if (Orion.SkillValue('Healing', 'real') < 1400) {
  1484.                   Orion.SetGlobal('bandageStart', Orion.Now() + 1000);
  1485.               } else {
  1486.                   Orion.SetGlobal('bandageStart', Orion.Now() + 500);
  1487.               }
  1488.           }
  1489.           if(BloodBandage && Orion.GetGlobal('crystal')=='true'){
  1490.              // Orion.Print("Vypinam");
  1491.               Orion.SetGlobal('crystal','false');
  1492.               Orion.Say('.improvement');
  1493.               Orion.Wait(100);
  1494.           }
  1495.   }
  1496.  
  1497. /*
  1498. ######################################################
  1499. ### File: Scripts/Skills/Hidding.oajs
  1500. ######################################################
  1501. */
  1502.  
  1503. // Hid - funkce pro skill hidding, pouziva AlwaysRun pro hidovani za behu
  1504. function Hid() {
  1505.     Orion.ClearJournal();
  1506.  
  1507.  
  1508.     Orion.WarMode(false);
  1509.         Orion.Wait(50);
  1510.     var HidDelay = 2400;
  1511.     if (Orion.SkillValue(21, 'real') > 750) {
  1512.         HidDelay = 1750;
  1513.     } else {
  1514.         HidDelay = 2100;
  1515.     }
  1516.     var first = true;
  1517.     Orion.AddDisplayTimer(9, HidDelay, 'AboveChar', 'line|bar', '', 0, 0, '0x0038', 0, 'red');
  1518.  
  1519.     Orion.OptionAlwaysRun(true);
  1520.     Orion.UseSkill(21); //hiding
  1521.     var start = Orion.Now();
  1522.     var params = [self, 500, 3, "", 0x00FD];
  1523.     Orion.Exec('CustomCountDown', false, params);
  1524.  
  1525.     if (!HidWait(HidDelay - 175)) {
  1526.         Orion.OptionAlwaysRun(true);
  1527.         Orion.RemoveDisplayTimer(9);
  1528.         Orion.Print("hidwait fail");
  1529.         CharPrintDelayed('self', '0x099B', 'Hidden Failed');
  1530.         return;
  1531.     }
  1532.     Orion.OptionAlwaysRun(false);
  1533.     var x = Orion.WaitJournal('Nepovedlo se ti schovat.|Skryti se povedlo.', Orion.Now() - (HidDelay), Orion.Now() + 500);
  1534.     if (!x) {
  1535.         Orion.OptionAlwaysRun(true);
  1536.         return;
  1537.     }
  1538.     if (x.Text() == 'Nepovedlo se ti schovat.') {
  1539.         CharPrintDelayed('self', '0x099B', 'Hidden Failed');
  1540.         Orion.OptionAlwaysRun(true);
  1541.         return;
  1542.     }
  1543.     while (Player.Hidden()) {
  1544.         if (first) {
  1545.             first = false;
  1546.             Orion.SetGlobal("hidTime", Orion.Now());
  1547.             CharPrintDelayed('self', '0x00FD', 'Hidden Success');
  1548.  
  1549.         }
  1550.         if(Player.Hits()!=Player.MaxHits())
  1551.         {
  1552.             Bandage();
  1553.         }
  1554.         Orion.Wait(100);
  1555.     }
  1556.  
  1557.     Orion.OptionAlwaysRun(true);
  1558.     Orion.PlayWav(Sound_ignTorchPath);
  1559.     return;
  1560. }
  1561.  
  1562. function HidWait(Limit) {
  1563.     var start = Orion.Now();
  1564.     var loop = start + parseInt(Limit);
  1565.     var tmpHP=Player.Hits();
  1566.     while (loop > Orion.Now()) {
  1567.         if (Orion.InJournal('Nepovedlo se ti schovat.', 'my|sys', 0, 0xFFFF, start)) {
  1568.             return false;
  1569.         }
  1570.         if(tmpHP-10>Player.Hits()){ //dmg aspon 10hp (pois,bleed)
  1571.             return false;
  1572.         }
  1573.         Orion.Wait(100);
  1574.     }
  1575.     return true;
  1576. }
  1577. /*
  1578. ######################################################
  1579. ### File: Scripts/Skills/Music.oajs
  1580. ######################################################
  1581. */
  1582.  
  1583. // EnticLastTarget - pouzije skill Enticement na lasttarget
  1584. function EnticLastTarget() {
  1585.     var target = lasttarget;
  1586.     Orion.SetGlobal('Music', true);
  1587.     Orion.WarMode(true);
  1588.     Orion.Wait(100);
  1589.     Orion.WarMode(false);
  1590.     Orion.Wait(200);
  1591.     if (Orion.GetDistance(target) > 18) return;
  1592.     var Start = Orion.Now();
  1593.     Orion.WarMode(false);
  1594.     Orion.UseSkill(15, target); // entic
  1595.     var rtn = Orion.WaitJournal('Zameruj jen monstra|Tohle nemuzes oslabit.|Oslabeni teto prisery presahuje tve moznosti|Oslabeni bylo uspesne.|Oslabeni se nepovedlo.|Nespechej s pouzivanim dovednosti.', Start, Start + 3500);
  1596.     Orion.ClearJournal(rtn.Text());
  1597.     Orion.SetGlobal('Music', false);
  1598.     Orion.Attack(lasttarget);
  1599.      
  1600. }
  1601.  
  1602. // PeaceLastTarget - pouzije skill Peacemaking na lasttarget
  1603. function PeaceLastTarget() {
  1604.     var target = lasttarget;
  1605.     Orion.SetGlobal('Music', true);
  1606.     Orion.WarMode(true);
  1607.     Orion.Wait(100);
  1608.     Orion.WarMode(false);
  1609.     Orion.Wait(200);
  1610.     if (Orion.GetDistance(target) > 18) return;
  1611.     var Start = Orion.Now();
  1612.     Orion.WarMode(false);
  1613.     Orion.UseSkill(9, target); //peace
  1614.     var rtn = Orion.WaitJournal('Uklidneni se povedlo.|Jiz neni co uklidnovat!|Tohle nemuzes|Uklidnovani nezabralo.|You play poorly.|nespechej s pouzivanim dovednosti.|tve moznosti.', Start, Start + 4500);
  1615.     Orion.ClearJournal(rtn.Text());
  1616.     Orion.SetGlobal('Music', false);
  1617.      
  1618.  
  1619. }
  1620.  
  1621. // Provo - vyprovokovani nastavenych cilu
  1622. function Provo() {
  1623.     Orion.WarMode(true);
  1624.     Orion.Wait(100);
  1625.     Orion.WarMode(false);
  1626.     Orion.Wait(200);
  1627.     var start = Orion.Now() + 1000;
  1628.     Orion.WaitTargetObject('trg1');
  1629.     Orion.Say(".provo");
  1630.     while (!Orion.HaveTarget()) {
  1631.         Orion.Wait(100);
  1632.         if (Orion.Now() > start) return;
  1633.     }
  1634.     Orion.TargetObject('trg2');
  1635. }
  1636.  
  1637. function ProvoAuto(){
  1638.     Orion.ClearJournal();
  1639.     while(!Orion.InJournal('Provokace se povedla.')){
  1640.         var xStart=Orion.Now();
  1641.         Provo();
  1642.         Orion.WaitJournal(' nereaguje na provokaci.|  presahuje tve moznosti|t see that.|Nespechej s pouzivanim skillu', xStart, Orion.Now() + 6500)
  1643.         if(Orion.InJournal(' presahuje tve moznosti') )break;
  1644.         Orion.ClearJournal(' nereaguje na provokaci.');
  1645.         Orion.Wait(200);
  1646.     }
  1647.     Orion.ClearJournal('Provokace se povedla.|  presahuje tve moznosti|t see that.|Nespechej s pouzivanim skillu');
  1648. }
  1649.  
  1650.  
  1651. // AddProvo - fce pro prirazeni 2 cilu k provokaci
  1652. function AddProvo() {
  1653.     var start = Orion.Now() + 6000;
  1654.     Orion.AddObject('trg1');
  1655.     while (Orion.HaveTarget()) {
  1656.         Orion.Wait(100);
  1657.         if (Orion.Now() > start) return;
  1658.     }
  1659.     Orion.AddObject('trg2');
  1660. }
  1661.  
  1662.  
  1663. /*
  1664. ######################################################
  1665. ### File: Scripts/Skills/Poisoning.oajs
  1666. ######################################################
  1667. */
  1668.  
  1669. // SetPois - nastavi poison potion pro pouzivani fce Pois
  1670. function SetPois() {
  1671.     Orion.AddObject("Poison");
  1672.     while (Orion.HaveTarget()) {
  1673.         Orion.Wait(100);
  1674.     }
  1675. }
  1676.  
  1677.  
  1678. // Pois - otravi 1H zbran v ruce
  1679. function Pois() {
  1680.     Orion.WarMode('false');
  1681.     var btl = Orion.FindObject("Poison");
  1682.     var pois = Orion.FindType(btl.Graphic(), btl.Color(), 'backpack', '', '', '', true);
  1683.     if (pois.length <= 0) return;
  1684.     var weap = Orion.ObjAtLayer('RightHand');
  1685.     Orion.WaitTargetObject(weap.Serial());
  1686.     Orion.UseObject(btl.Serial());
  1687.      
  1688. }
  1689.  
  1690. /*
  1691. ######################################################
  1692. ### File: Scripts/Skills/Taming.oajs
  1693. ######################################################
  1694. */
  1695.  
  1696.  
  1697. function Taming(){
  1698.     Orion.ClearJournal();
  1699.     Orion.Print("Co budeme tamovat ?");
  1700.     Orion.AddObject("target");
  1701.  
  1702.     while(Orion.HaveTarget())
  1703.     {
  1704.         Orion.Wait(50);
  1705.     }
  1706.  
  1707.     var target = Orion.FindObject("target");
  1708.     var mountName='IchiZviratko';
  1709.    
  1710.     Orion.RenameMount(target.Serial(),mountName);
  1711.  
  1712.     Orion.UseType(0x097B,0x0000,backpack,true);
  1713.     Orion.UseType(0x097B,0x0000,backpack,true);
  1714.  
  1715.     //svetlo
  1716.     Orion.Cast('night sight',self);
  1717.     Orion.Wait(3000);
  1718.     var counter = 0;
  1719.     while(true)
  1720.     {
  1721.         var xStart=Orion.Now();
  1722.  
  1723.         if(counter>10){
  1724.             //jidlo
  1725.             Orion.UseType(0x097B,0x0000,backpack,true);
  1726.             Orion.UseType(0x097B,0x0000,backpack,true);
  1727.             //svetlo
  1728.             Orion.Cast('night sight',self);
  1729.             Orion.Wait(3000);
  1730.             counter=0;
  1731.  
  1732.             //nakrm
  1733.             Orion.WaitTargetObject(target.Serial());
  1734.             Orion.Wait(100);
  1735.             Orion.Say('.nakrm');
  1736.         }
  1737.         //Orion.WaitTargetObject(target.Serial());
  1738.         //Orion.Wait(100);
  1739.         Orion.UseSkill('Animal Taming',target.Serial()); // entic
  1740.         var text='Nepovedlo se |Zda se, ze te |Zvire je jiz ochocene.|Jsi prilis daleko.|Nevidis na cil|Ztratil jsi ';
  1741.         Orion.WaitJournal('Nepovedlo se |Zda se, ze te |Zvire je jiz ochocene.|Jsi prilis daleko.|Nevidis na cil|Ztratil jsi ', xStart, xStart + 30000);
  1742.         if (Orion.InJournal('Zda se, ze te |Zvire je jiz ')) {
  1743.  
  1744.             Orion.Say('all stay');
  1745.             Orion.Wait(200);
  1746.             Orion.RenameMount(target.Serial(),mountName);
  1747.             Orion.Wait(200);
  1748.             Orion.Say(mountName+' release');
  1749.             Orion.Wait(200);
  1750.         }
  1751.  
  1752.         Orion.ClearJournal(text);
  1753.         counter++;
  1754.         Orion.Wait(200);
  1755.     }
  1756. }
  1757.  
  1758. function TamingRes(){
  1759.     Orion.ClearJournal();
  1760.     Orion.Print("Co budeme tamovat ?");
  1761.     Orion.AddObject("target");
  1762.  
  1763.     while(Orion.HaveTarget())
  1764.     {
  1765.         Orion.Wait(50);
  1766.     }
  1767.  
  1768.     var target = Orion.FindObject("target");
  1769.     var mountName='Persi je pan';
  1770.    
  1771.     Orion.RenameMount(target.Serial(),mountName);
  1772.  
  1773.     Orion.UseType('0x13F4|0x13F5',any,backpack,true); //crooka
  1774.  
  1775.     while(true)
  1776.     {
  1777.         var xStart=Orion.Now();
  1778.  
  1779.         Orion.UseSkill('Animal Taming',target.Serial()); // entic
  1780.         var text='Nepovedlo se |Zda se, ze te |Zvire je jiz ochocene.|Jsi prilis daleko.|Nevidis na cil|Ztratil jsi ';
  1781.         Orion.WaitJournal('Nepovedlo se |Zda se, ze te |Zvire je jiz ochocene.|Jsi prilis daleko.|Nevidis na cil|Ztratil jsi ', xStart, xStart + 30000);
  1782.         if (Orion.InJournal('Zda se, ze te |Zvire je jiz ')) {
  1783.  
  1784.             Orion.Say('all stay');
  1785.             Orion.Wait(200);
  1786.             Orion.RenameMount(target.Serial(),mountName);
  1787.             Orion.Wait(200);
  1788.             Orion.Say('Persi je pan'+' friend');
  1789.             Orion.Wait(200);
  1790.         }
  1791.         Orion.ClearJournal(text);
  1792.         Orion.Wait(200);
  1793.     }
  1794. }
  1795. /*
  1796. ######################################################
  1797. ### File: Scripts/Skills/Tracking.oajs
  1798. ######################################################
  1799. */
  1800.  
  1801.  
  1802. // TrackXXX - fce pro vypis ze skillu tracking
  1803. function TrackPlayers() {
  1804.     Track(3);
  1805. }
  1806.  
  1807. function TrackAnimals() {
  1808.     Track(0);
  1809. }
  1810.  
  1811. function TrackMonsters() {
  1812.     Track(1);
  1813. }
  1814. function TrackAll() {
  1815.     Track(4);
  1816. }
  1817.  
  1818.  
  1819. // Track - fce vypisujici vystopovane cile s filtraci jmen v FriendListu
  1820. function Track(choice) {
  1821.     var list = Orion.GetFriendList();
  1822.     var listName = [];
  1823.     for (i = 0; i < list.length; i++) {
  1824.         var obj = Orion.FindObject(list[i]);
  1825.         if (!obj) continue;
  1826.         listName.push(obj.Name());
  1827.     }
  1828.  
  1829.     Orion.WarMode(false);
  1830.     Orion.CancelWaitMenu();
  1831.     Orion.Wait(200);
  1832.     Orion.WaitMenu('Tracking', choice);
  1833.     Orion.UseSkill(38);// track
  1834.     Orion.Wait(300);
  1835.     var menu = Orion.GetMenu(0);
  1836.     Orion.Wait(100);
  1837.     if (Orion.InJournal('You see ')) {
  1838.         menu.Close();
  1839.         Orion.ClearJournal('You see ');
  1840.         return;
  1841.     }
  1842.     var count = menu.ItemsCount();
  1843.     var items = {};
  1844.  
  1845.     for (var i = 0; i < count; i++) {
  1846.         var add = true;
  1847.         for (a = 0; a < listName.length; a++) {
  1848.             if (listName[a] == menu.ItemName(i)) {
  1849.                 add = false;
  1850.                 break;
  1851.             }
  1852.         }
  1853.         if (add == true) {
  1854.             if (!items[menu.ItemName(i)]) {
  1855.                 items[menu.ItemName(i)] = 1;
  1856.             } else {
  1857.                 items[menu.ItemName(i)] = items[menu.ItemName(i)] + 1;
  1858.             }
  1859.         }
  1860.     }
  1861.     menu.Close();
  1862.     Orion.Wait(100);
  1863.     Orion.Print('Na tracku : ' + count);
  1864.  
  1865.     for (var key in items) {
  1866.         var cn = parseInt(items[key]);
  1867.         if (cn > 1) {
  1868.             Orion.Print("   " + key + " : " + cn);
  1869.         } else {
  1870.             Orion.Print("   " + key);
  1871.         }
  1872.     }
  1873.  
  1874. }
  1875. /*
  1876. ######################################################
  1877. ### File: Scripts/Helpers/AFKPeri.oajs
  1878. ######################################################
  1879. */
  1880.  
  1881. function KillBirds()
  1882. {
  1883.     Orion.Print('Zamer nejaky item v pack lame');
  1884.     Orion.AddObject("cont");
  1885.     while (Orion.HaveTarget()) Orion.Wait(100);
  1886.     var container = Orion.FindObject("cont");
  1887.     container = container.Container();
  1888.     Orion.Print(container);
  1889.     Orion.Say('.jezdik');
  1890.     while(!Player.Dead()){
  1891.  
  1892.         if(!AttackNearestMonster()){
  1893.             Orion.Say('all stop');
  1894.             Orion.Wait(100);
  1895.             FeatherToLama(container);
  1896.             Orion.Exec('Hid');
  1897.             Orion.Wait(60000); // neni monster ceka minutu
  1898.         }else{
  1899.             Carv();
  1900.             Orion.Wait(1000);
  1901.         }
  1902.     }
  1903. }
  1904.  
  1905. function AttackNearestMonster() {
  1906.     Orion.Ignore('self');
  1907.  
  1908.     var creatures = Orion.FindType(any, any, ground, 'mobile|ignorefriends', '18', 'gray');
  1909.     if (!creatures.length) {
  1910.         Orion.Print('-1', 'no creature found, resetting ignore list');
  1911.         Orion.IgnoreReset();
  1912.         return false;
  1913.     }
  1914.     Orion.RemoveObject("target");
  1915.     Orion.AddObject("target", creatures[0]);
  1916.     var target = Orion.FindObject("target");
  1917.  
  1918.     //Runs to the target
  1919.     Orion.WalkTo(target.X(), target.Y(), 0);
  1920.     Orion.Wait(100);
  1921.     Orion.WaitTargetObject("target");
  1922.     Orion.Wait(100);
  1923.     Orion.Attack("target");
  1924.  
  1925.     while (target.Exists()) {
  1926.         Orion.WalkTo(target.X(), target.Y(), 0);
  1927.         Orion.Wait(1000);
  1928.         Orion.Attack("target");
  1929.     }
  1930.     Orion.Wait(500);
  1931.     return true;
  1932. }
  1933.  
  1934.  
  1935. function FeatherToLama(lamaBag){
  1936.     Orion.Say('.jezdik');
  1937.     Orion.Wait(200);
  1938.     Orion.Say('all stop');
  1939.     Orion.Wait(200);
  1940.     var feathers = Orion.FindType('0x1BD1', '0x0000', 'lotBag', true);
  1941.     for (var i = 0; i < feathers.length; i++) {
  1942.         var e = feathers[i];
  1943.         Orion.MoveItem(e, 0, lamaBag);
  1944.  
  1945.     }
  1946.     Orion.Wait(200);
  1947.     Orion.Say('.jezdik');
  1948. }
  1949. /*
  1950. ######################################################
  1951. ### File: Scripts/Helpers/AStar.oajs
  1952. ######################################################
  1953. */
  1954.  
  1955. function createArr(x, y) {
  1956.     var arr = new Array(x);
  1957.  
  1958.     for (var i = 0; i < x; i++) {
  1959.         arr[i] = new Array(y);
  1960.     }
  1961.  
  1962.     return arr;
  1963. }
  1964.  
  1965. var astar = {
  1966.     init: function(grid) {
  1967.         for(var x = 0; x < grid.length; x++) {
  1968.             for(var y = 0; y < grid[x].length; y++) {
  1969.                 var node = grid[x][y];
  1970.                 node.f = 0;
  1971.                 node.g = 0;
  1972.                 node.h = 0;
  1973.                 node.cost = 1;
  1974.                 node.visited = false;
  1975.                 node.closed = false;
  1976.                 node.parent = null;
  1977.                 node.isWall = grid[x][y] == 0;
  1978.                 var tmp ={ x:x,y:y};
  1979.                 node.pos =tmp;
  1980.             }
  1981.         }
  1982.     },
  1983.     heap: function() {
  1984.         return new BinaryHeap(function(node) {
  1985.             return node.f;
  1986.         });
  1987.     },
  1988.     search: function(grid, start, end, diagonal, heuristic) {
  1989.         astar.init(grid);
  1990.         heuristic = heuristic || astar.manhattan;
  1991.         diagonal = !!diagonal;
  1992.  
  1993.         var openHeap = astar.heap();
  1994.  
  1995.         openHeap.push(start);
  1996.  
  1997.         while(openHeap.size() > 0) {
  1998.  
  1999.             // Grab the lowest f(x) to process next.  Heap keeps this sorted for us.
  2000.             var currentNode = openHeap.pop();
  2001.  
  2002.             // End case -- result has been found, return the traced path.
  2003.             if(currentNode === end) {
  2004.                 var curr = currentNode;
  2005.                 var ret = [];
  2006.                 while(curr.parent) {
  2007.                     ret.push(curr);
  2008.                     curr = curr.parent;
  2009.                 }
  2010.                 Orion.Print("dd");
  2011.                 return ret.reverse();
  2012.             }
  2013.  
  2014.             // Normal case -- move currentNode from open to closed, process each of its neighbors.
  2015.             currentNode.closed = true;
  2016.  
  2017.             // Find all neighbors for the current node. Optionally find diagonal neighbors as well (false by default).
  2018.             var neighbors = astar.neighbors(grid, currentNode, diagonal);
  2019.  
  2020.             for(var i=0; i < neighbors.length; i++) {
  2021.                 var neighbor = neighbors[i];
  2022.  
  2023.                 if(neighbor.closed || neighbor.isWall()) {
  2024.                     // Not a valid node to process, skip to next neighbor.
  2025.                     continue;
  2026.                 }
  2027.  
  2028.                 // The g score is the shortest distance from start to current node.
  2029.                 // We need to check if the path we have arrived at this neighbor is the shortest one we have seen yet.
  2030.                 var gScore = currentNode.g + neighbor.cost;
  2031.                 var beenVisited = neighbor.visited;
  2032.  
  2033.                 if(!beenVisited || gScore < neighbor.g) {
  2034.  
  2035.                     // Found an optimal (so far) path to this node.  Take score for node to see how good it is.
  2036.                     neighbor.visited = true;
  2037.                     neighbor.parent = currentNode;
  2038.                     neighbor.h = neighbor.h || heuristic(neighbor.pos, end.pos);
  2039.                     neighbor.g = gScore;
  2040.                     neighbor.f = neighbor.g + neighbor.h;
  2041.  
  2042.                     if (!beenVisited) {
  2043.                         // Pushing to heap will put it in proper place based on the 'f' value.
  2044.                         openHeap.push(neighbor);
  2045.                     }
  2046.                     else {
  2047.                         // Already seen the node, but since it has been rescored we need to reorder it in the heap
  2048.                         openHeap.rescoreElement(neighbor);
  2049.                     }
  2050.                 }
  2051.             }
  2052.         }
  2053.  
  2054.         // No result was found - empty array signifies failure to find path.
  2055.         return [];
  2056.     },
  2057.     manhattan: function(pos0, pos1) {
  2058.         // See list of heuristics: http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html
  2059.  
  2060.         var d1 = Math.abs (pos1.x - pos0.x);
  2061.         var d2 = Math.abs (pos1.y - pos0.y);
  2062.         return d1 + d2;
  2063.     },
  2064.     neighbors: function(grid, node, diagonals) {
  2065.         var ret = [];
  2066.         var x = node.x;
  2067.         var y = node.y;
  2068.  
  2069.         // West
  2070.         if(grid[x-1] && grid[x-1][y]) {
  2071.             ret.push(grid[x-1][y]);
  2072.         }
  2073.  
  2074.         // East
  2075.         if(grid[x+1] && grid[x+1][y]) {
  2076.             ret.push(grid[x+1][y]);
  2077.         }
  2078.  
  2079.         // South
  2080.         if(grid[x] && grid[x][y-1]) {
  2081.             ret.push(grid[x][y-1]);
  2082.         }
  2083.  
  2084.         // North
  2085.         if(grid[x] && grid[x][y+1]) {
  2086.             ret.push(grid[x][y+1]);
  2087.         }
  2088.  
  2089.         if (diagonals) {
  2090.  
  2091.             // Southwest
  2092.             if(grid[x-1] && grid[x-1][y-1]) {
  2093.                 ret.push(grid[x-1][y-1]);
  2094.             }
  2095.  
  2096.             // Southeast
  2097.             if(grid[x+1] && grid[x+1][y-1]) {
  2098.                 ret.push(grid[x+1][y-1]);
  2099.             }
  2100.  
  2101.             // Northwest
  2102.             if(grid[x-1] && grid[x-1][y+1]) {
  2103.                 ret.push(grid[x-1][y+1]);
  2104.             }
  2105.  
  2106.             // Northeast
  2107.             if(grid[x+1] && grid[x+1][y+1]) {
  2108.                 ret.push(grid[x+1][y+1]);
  2109.             }
  2110.  
  2111.         }
  2112.  
  2113.         return ret;
  2114.     }
  2115. };
  2116.  
  2117.  
  2118. function AStarTest()
  2119. {
  2120.     var monsters = Orion.FindTypeEx(any, any, 'ground', 'near|mobile|live|ignoreself|ignorefriends', 18, 'red');
  2121.     var pX=Player.X();
  2122.     var pY=Player.Y();
  2123.  
  2124.     var grid = createArr(36,36);
  2125.     for (var x = 0; x < grid.length; x++) {
  2126.         for (var y = 0; y < grid[x].length; y++) {
  2127.             if(Orion.CanWalk('n',pX+x-18,pY+y-18,Player.Z()))
  2128.             {
  2129.                 grid[x][y] = 1;
  2130.             }
  2131.             else
  2132.             {
  2133.                 grid[x][y] = 0;
  2134.             }
  2135.            
  2136.         }
  2137.        
  2138.     }
  2139.     if(monsters.length>0){
  2140.         for (var i = 0; i < monsters.length; i++) {
  2141.             var tmpX=monsters[i].X().pX+18;
  2142.             var tmpY=monsters[i].Y().pY+18;
  2143.             grid[tmpX][tmpY]=0;
  2144.         }
  2145.     }
  2146.  
  2147.     var start = grid[18][18];
  2148.     var end = grid[22,22];
  2149.     var rtn = astar.search(grid,start,end,true);
  2150.     Orion.Print(rtn.length);
  2151.     // for (var x = 0; x < grid.length; x++) {
  2152.     //     for (var y = 0; y < grid[x].length; y++) {
  2153.     //         Orion.Print(grid[x][y]);
  2154.     //     }
  2155.  
  2156.     // }
  2157. }
  2158.  
  2159.  
  2160.  
  2161. // function BinaryHeap(scoreFunction){
  2162. //     this.content = [];
  2163. //     this.scoreFunction = scoreFunction;
  2164. //   }
  2165.  
  2166. //   BinaryHeap.prototype = {
  2167. //     push: function(element) {
  2168. //       // Add the new element to the end of the array.
  2169. //       this.content.push(element);
  2170. //       // Allow it to bubble up.
  2171. //       this.bubbleUp(this.content.length - 1);
  2172. //     },
  2173.  
  2174. //     pop: function() {
  2175. //       // Store the first element so we can return it later.
  2176. //       var result = this.content[0];
  2177. //       // Get the element at the end of the array.
  2178. //       var end = this.content.pop();
  2179. //       // If there are any elements left, put the end element at the
  2180. //       // start, and let it sink down.
  2181. //       if (this.content.length > 0) {
  2182. //         this.content[0] = end;
  2183. //         this.sinkDown(0);
  2184. //       }
  2185. //       return result;
  2186. //     },
  2187.  
  2188. //     remove: function(node) {
  2189. //       var length = this.content.length;
  2190. //       // To remove a value, we must search through the array to find
  2191. //       // it.
  2192. //       for (var i = 0; i < length; i++) {
  2193. //         if (this.content[i] != node) continue;
  2194. //         // When it is found, the process seen in 'pop' is repeated
  2195. //         // to fill up the hole.
  2196. //         var end = this.content.pop();
  2197. //         // If the element we popped was the one we needed to remove,
  2198. //         // we're done.
  2199. //         if (i == length - 1) break;
  2200. //         // Otherwise, we replace the removed element with the popped
  2201. //         // one, and allow it to float up or sink down as appropriate.
  2202. //         this.content[i] = end;
  2203. //         this.bubbleUp(i);
  2204. //         this.sinkDown(i);
  2205. //         break;
  2206. //       }
  2207. //     },
  2208.  
  2209. //     size: function() {
  2210. //       return this.content.length;
  2211. //     },
  2212.  
  2213. //     bubbleUp: function(n) {
  2214. //       // Fetch the element that has to be moved.
  2215. //       var element = this.content[n], score = this.scoreFunction(element);
  2216. //       // When at 0, an element can not go up any further.
  2217. //       while (n > 0) {
  2218. //         // Compute the parent element's index, and fetch it.
  2219. //         var parentN = Math.floor((n + 1) / 2) - 1,
  2220. //         parent = this.content[parentN];
  2221. //         // If the parent has a lesser score, things are in order and we
  2222. //         // are done.
  2223. //         if (score >= this.scoreFunction(parent))
  2224. //           break;
  2225.  
  2226. //         // Otherwise, swap the parent with the current element and
  2227. //         // continue.
  2228. //         this.content[parentN] = element;
  2229. //         this.content[n] = parent;
  2230. //         n = parentN;
  2231. //       }
  2232. //     },
  2233.  
  2234. //     sinkDown: function(n) {
  2235. //       // Look up the target element and its score.
  2236. //       var length = this.content.length,
  2237. //       element = this.content[n],
  2238. //       elemScore = this.scoreFunction(element);
  2239.  
  2240. //       while(true) {
  2241. //         // Compute the indices of the child elements.
  2242. //         var child2N = (n + 1) * 2, child1N = child2N - 1;
  2243. //         // This is used to store the new position of the element,
  2244. //         // if any.
  2245. //         var swap = null;
  2246. //         // If the first child exists (is inside the array)...
  2247. //         if (child1N < length) {
  2248. //           // Look it up and compute its score.
  2249. //           var child1 = this.content[child1N],
  2250. //           child1Score = this.scoreFunction(child1);
  2251. //           // If the score is less than our element's, we need to swap.
  2252. //           if (child1Score < elemScore)
  2253. //             swap = child1N;
  2254. //         }
  2255. //         // Do the same checks for the other child.
  2256. //         if (child2N < length) {
  2257. //           var child2 = this.content[child2N],
  2258. //           child2Score = this.scoreFunction(child2);
  2259. //           if (child2Score < (swap == null ? elemScore : child1Score))
  2260. //             swap = child2N;
  2261. //         }
  2262.  
  2263. //         // No need to swap further, we are done.
  2264. //         if (swap == null) break;
  2265.  
  2266. //         // Otherwise, swap and continue.
  2267. //         this.content[n] = this.content[swap];
  2268. //         this.content[swap] = element;
  2269. //         n = swap;
  2270. //       }
  2271. //     }
  2272. //   };
  2273. /*
  2274. ######################################################
  2275. ### File: Scripts/Helpers/AutoBoost.oajs
  2276. ######################################################
  2277. */
  2278.  
  2279. // AutoBoosty - fce pro cast boostu na zadost
  2280. function AutoBoosty()
  2281. {
  2282.     while (true)
  2283.     {
  2284.         var startTime=Orion.Now();
  2285.         Orion.Wait(300);
  2286.         var boostWait = Orion.WaitJournal('str:|dex:|int:|ar:|svetlo:|cure:|bless:',startTime,Orion.Now()+500);      
  2287.         if (!boostWait || Player.Hidden()) continue;
  2288.         var t = Orion.FindObject(boostWait.Serial());
  2289.         Orion.RequestName(t.Serial(), 500);
  2290.         if (t.Notoriety() != Player.Notoriety()) continue;
  2291.  
  2292.         switch (boostWait.Text()) {
  2293.             case "svetlo:":
  2294.                 BandCast("Night Sight", t.Serial());
  2295.             break;
  2296.             case "cure:":
  2297.                 BandCast("Cure", t.Serial());
  2298.             break;
  2299.             case "bless:":
  2300.                 BandCast("Bless", t.Serial());
  2301.             break;
  2302.             case "str:":
  2303.                 BandCast("Strength", t.Serial());
  2304.             break;
  2305.             case "dex:":
  2306.                 BandCast("Agility", t.Serial());
  2307.             break;
  2308.             case "int:":
  2309.                 BandCast("Cunning", t.Serial());
  2310.             break;
  2311.             case "ar:":
  2312.                 BandCast("Protection", t.Serial());
  2313.             break;
  2314.  
  2315.  
  2316.         }
  2317.      
  2318.    }  
  2319. }
  2320.  
  2321. /*
  2322. ######################################################
  2323. ### File: Scripts/Helpers/AutoExping.oajs
  2324. ######################################################
  2325. */
  2326.  
  2327. var any = '0xFFFF';
  2328. function KeepDistance(distance){
  2329. var central={X:Player.X(),Y:Player.Y()};
  2330.     while(!Player.Dead()){
  2331.         var monsters= GetMonstersCoord();
  2332.     Orion.Print("Monsters: "+monsters.size());
  2333.         if(Orion.GetDistance(monsters.content[0].X,monsters.content[0].Y)<distance){
  2334.             var gotoCoord = GetOptimalCoords(monsters, central).pop();
  2335.             //Orion.Print(gotoCoord.X+":"+gotoCoord.Y);
  2336.             WalkToEx(gotoCoord.X,gotoCoord.Y);
  2337.         }
  2338.  
  2339.         Orion.Wait(200);
  2340.     }
  2341. }
  2342.  
  2343. function WalkToEx(coords){
  2344.     var monster = Orion.FindTypeEx(any, any, 'ground', 'near|mobile|live|ignoreself|ignorefriends', 15, 'red')[0];
  2345.  
  2346.     var dist=Orion.GetDistance(monster.X(),monster.Y());
  2347.     var walkDist = Orion.GetDistance(coords.X,coords.Y)-1;
  2348.     while(!Player.Dead()){
  2349.         Orion.WalkTo(coords.X,coords.Y,-1000,walkDist);
  2350.         if(dist<Orion.GetDistance(monster.X(),monster.Y())){
  2351.             break;
  2352.         }
  2353.     }
  2354.  
  2355.  
  2356. }
  2357.  
  2358. function GetOptimalCoords(monsters, centralCoord){
  2359.     Orion.Print("Get optimal");
  2360.     var dist=8;
  2361.     var closestMonster = monsters.content[0];
  2362.     var closestCoords;
  2363.     var pass=false;
  2364.     var validCoords=new BinaryHeap(function (m) {
  2365.         return EuclidDist(m,centralCoord);
  2366.   });
  2367.  
  2368.     while (validCoords.size()<1) {
  2369.          Orion.Wait(100);
  2370.         closestCoords = GetDistanceCoords(dist,closestMonster);
  2371.         for (var c = 0; c < dist; c++) {
  2372.             pass=false;
  2373.             for (var i = 0; i < monsters.size(); i++) {
  2374.                 pass = EuclidDist(closestCoords[c],monsters.content[i])>=dist;
  2375.                 Orion.Print(pass);
  2376.                 if(!pass)continue;
  2377.             }
  2378.             if(pass){
  2379.                 validCoords.push(closestCoords[c]);
  2380.             }
  2381.             Orion.Print("valid: "+validCoords.length);
  2382.         }
  2383.         dist++;
  2384.     }
  2385.     return validCoords;
  2386. }
  2387. function EuclidDist(a, b) {
  2388.     return Math.sqrt((a.X - b.X) * (a.X - b.X) + (a.Y - b.Y) * (a.Y - b.Y));
  2389. }
  2390.  
  2391. function GetDistanceCoords(distance, initCoords){
  2392.     var coords = [
  2393.         { X: initCoords.X - distance,Y: initCoords.Y - distance },
  2394.         { X: initCoords.X + 0, Y: initCoords.Y - distance },
  2395.         { X: initCoords.X + distance, Y: initCoords.Y - distance },
  2396.         { X: initCoords.X + distance, Y: initCoords.Y + 0 },
  2397.         { X: initCoords.X + distance, Y: initCoords.Y + distance },
  2398.         { X: initCoords.X + 0, Y: initCoords.Y + distance },
  2399.         { X: initCoords.X - distance,Y: initCoords.Y + distance },
  2400.         { X: initCoords.X - distance,Y: initCoords.Y + 0 }
  2401. ];
  2402.     return coords;
  2403. }
  2404.  
  2405. function GetMonstersCoord() {
  2406.   var monstTmp = Orion.FindTypeEx(any, any, 'ground', 'mobile|live|ignoreself|ignorefriends', 18, 'red');
  2407.  
  2408.   var monsters = new BinaryHeap(function (m) {
  2409.     return Orion.GetDistance(m.X, m.Y);
  2410.   });
  2411.   for (var i = 0; i < monstTmp.length; i++) {
  2412.     var e = monstTmp[i];
  2413.     if (e.CanChangeName()) continue;
  2414.     var t = {X:e.X(),Y:e.Y(),Dir:e.Direction()};
  2415.     monsters.push(t);
  2416.   }
  2417.   return monsters;
  2418.  
  2419. }
  2420.  
  2421.  
  2422.  
  2423.  
  2424. function BinaryHeap(scoreFunction) {
  2425.     this.content = [];
  2426.     this.scoreFunction = scoreFunction;
  2427.   }
  2428.  
  2429.   BinaryHeap.prototype = {
  2430.     push: function (element) {
  2431.       // Add the new element to the end of the array.
  2432.       this.content.push(element);
  2433.       // Allow it to bubble up.
  2434.       this.bubbleUp(this.content.length - 1);
  2435.     },
  2436.  
  2437.     pop: function () {
  2438.       // Store the first element so we can return it later.
  2439.       var result = this.content[0];
  2440.       // Get the element at the end of the array.
  2441.       var end = this.content.pop();
  2442.       // If there are any elements left, put the end element at the
  2443.       // start, and let it sink down.
  2444.       if (this.content.length > 0) {
  2445.         this.content[0] = end;
  2446.         this.sinkDown(0);
  2447.       }
  2448.       return result;
  2449.     },
  2450.  
  2451.     remove: function (node) {
  2452.       var length = this.content.length;
  2453.       // To remove a value, we must search through the array to find
  2454.       // it.
  2455.       for (var i = 0; i < length; i++) {
  2456.         if (this.content[i] != node) continue;
  2457.         // When it is found, the process seen in 'pop' is repeated
  2458.         // to fill up the hole.
  2459.         var end = this.content.pop();
  2460.         // If the element we popped was the one we needed to remove,
  2461.         // we're done.
  2462.         if (i == length - 1) break;
  2463.         // Otherwise, we replace the removed element with the popped
  2464.         // one, and allow it to float up or sink down as appropriate.
  2465.         this.content[i] = end;
  2466.         this.bubbleUp(i);
  2467.         this.sinkDown(i);
  2468.         break;
  2469.       }
  2470.     },
  2471.  
  2472.     size: function () {
  2473.       return this.content.length;
  2474.     },
  2475.  
  2476.     bubbleUp: function (n) {
  2477.       // Fetch the element that has to be moved.
  2478.       var element = this.content[n],
  2479.         score = this.scoreFunction(element);
  2480.       // When at 0, an element can not go up any further.
  2481.       while (n > 0) {
  2482.         // Compute the parent element's index, and fetch it.
  2483.         var parentN = Math.floor((n + 1) / 2) - 1,
  2484.           parent = this.content[parentN];
  2485.         // If the parent has a lesser score, things are in order and we
  2486.         // are done.
  2487.         if (score >= this.scoreFunction(parent))
  2488.           break;
  2489.  
  2490.         // Otherwise, swap the parent with the current element and
  2491.         // continue.
  2492.         this.content[parentN] = element;
  2493.         this.content[n] = parent;
  2494.         n = parentN;
  2495.       }
  2496.     },
  2497.  
  2498.     sinkDown: function (n) {
  2499.       // Look up the target element and its score.
  2500.       var length = this.content.length,
  2501.         element = this.content[n],
  2502.         elemScore = this.scoreFunction(element);
  2503.  
  2504.       while (true) {
  2505.         // Compute the indices of the child elements.
  2506.         var child2N = (n + 1) * 2,
  2507.           child1N = child2N - 1;
  2508.         // This is used to store the new position of the element,
  2509.         // if any.
  2510.         var swap = null;
  2511.         // If the first child exists (is inside the array)...
  2512.         if (child1N < length) {
  2513.           // Look it up and compute its score.
  2514.           var child1 = this.content[child1N],
  2515.             child1Score = this.scoreFunction(child1);
  2516.           // If the score is less than our element's, we need to swap.
  2517.           if (child1Score < elemScore)
  2518.             swap = child1N;
  2519.         }
  2520.         // Do the same checks for the other child.
  2521.         if (child2N < length) {
  2522.           var child2 = this.content[child2N],
  2523.             child2Score = this.scoreFunction(child2);
  2524.           if (child2Score < (swap == null ? elemScore : child1Score))
  2525.             swap = child2N;
  2526.         }
  2527.  
  2528.         // No need to swap further, we are done.
  2529.         if (swap == null) break;
  2530.  
  2531.         // Otherwise, swap and continue.
  2532.         this.content[n] = this.content[swap];
  2533.         this.content[swap] = element;
  2534.         n = swap;
  2535.       }
  2536.     }
  2537.   };
  2538. /*
  2539. ######################################################
  2540. ### File: Scripts/Helpers/AutoExpyFena.oajs
  2541. ######################################################
  2542. */
  2543.  
  2544. // function AfkExp() {
  2545. //   var expPath = [];
  2546. //   expPath.push({
  2547. //     X: 2826,
  2548. //     Y: 3646
  2549. //   });
  2550. //   expPath.push({
  2551. //     X: 2738,
  2552. //     Y: 3660
  2553. //   });
  2554.  
  2555.  
  2556.  
  2557. //   Orion.Print('Zamer Poison Phoenixe');
  2558. //   Orion.AddObject("fena");
  2559. //   while (Orion.HaveTarget()) Orion.Wait(100);
  2560. //   var fena = Orion.FindObject("fena");
  2561. //   Orion.Wait(500);
  2562. //   Orion.Say('all come');
  2563. //   for (var i = 0; i < expPath.length; i++) {
  2564. //     GoToExpLoc(expPath[i], fena);
  2565.  
  2566. //   }
  2567. // }
  2568.  
  2569. // function SafeWalkToFena(x, y, fena) {
  2570. //   Orion.GetStatus(fena.Serial());
  2571. //   while (Player.X() != x && Player.Y != y) {
  2572. //     var dist = Orion.GetDistance(x,y);
  2573. //     Orion.WalkTo(x, y, Player.Z(), dist-5); // po 5 polich az na souradky
  2574. //     var monstTmp = GetMonstersCoord();
  2575. //     if (monstTmp.size() > 0) {
  2576. //       return;
  2577. //     }
  2578. //     if (Orion.GetDistance(fena.X(), fena.Y()) > 6) {
  2579. //       Orion.Print("fena daleko, cekam");
  2580. //       Orion.WalkTo(fena.X(), fena.Y(), Player.Z(), 3);
  2581. //       Orion.Wait(150);
  2582. //     }
  2583. //   }
  2584.  
  2585.  
  2586. // }
  2587.  
  2588. // function GoToExpLoc(pos, fena) {
  2589. //   var holding = false;
  2590. //   while (Player.X() != pos.X && Player.Y() != pos.Y) {
  2591. //     Orion.Wait(155);
  2592. //     if (Orion.GetDistance(fena.X(), fena.Y()) > 9) {
  2593. //       Orion.Print("fena daleko, cekam");
  2594. //       Orion.WalkTo(fena.X(), fena.Y(), Player.Z(), 4);
  2595. //       Orion.Wait(1500);
  2596. //     } else {
  2597. //       Orion.Print("jdu na: " + pos.X + ":" + pos.Y);
  2598. //       SafeWalkToFena(pos.X, pos.Y, fena);
  2599. //       Orion.Wait(100);
  2600. //     }
  2601. //     Orion.Wait(100);
  2602. //     var monsters = GetMonstersCoord();
  2603. //     Orion.Print(monsters.size() + " Nalezeno monster, attack ?");
  2604. //     if (monsters.size() > 0) {
  2605. //       Orion.Wait(500);
  2606. //       Orion.Exec('KillAll');
  2607. //       Orion.Wait(500);
  2608. //       holding = true;
  2609. //       if (!Orion.ScriptRunning('HoldDistance')) {
  2610. //         var params = [fena.X(), fena.Y()];
  2611. //         Orion.Exec('HoldDistance', false, params);
  2612. //       }
  2613. //       var startKill=Orion.Now()+10000;
  2614. //       while (monsters.size() > 0) {
  2615. //         monsters = GetMonstersCoord();
  2616. //         Orion.Wait(500);
  2617. //         Orion.Print("pocet monster: " + monsters.size());
  2618. //         if(Orion.Now()>startKill && Orion.Now()<startKill+1000)
  2619. //         {
  2620. //           Orion.Exec('KillAll');
  2621. //         }
  2622. //       }
  2623.  
  2624. //     } else {
  2625. //       if (holding) {
  2626. //         HoldDistance(fena.X(), fena.Y());
  2627. //         holding = false;
  2628. //         Orion.Print('todo lot corpses');
  2629. //         Orion.Say('all come');
  2630.  
  2631. //       }
  2632. //     }
  2633. //     if (Orion.GetDistance(pos.X, pos.Y) < 5) {
  2634. //       return;
  2635. //     }
  2636. //   }
  2637. // }
  2638.  
  2639.  
  2640. // function HoldDistance(centX, centY) {
  2641. //   if (Orion.GetGlobal('holdDist') == 'true') {
  2642. //     Orion.SetGlobal('holdDist', 'false');
  2643. //     Orion.Print("Hold Dist Off");
  2644. //     Orion.OptionAlwaysRun(false);
  2645. //     return false;
  2646. //   } else {
  2647. //     Orion.SetGlobal('holdDist', 'true');
  2648. //     Orion.Print("Hold Dist ON");
  2649. //     Orion.OptionAlwaysRun(true);
  2650. //   }
  2651. //   var centralCoord = [];
  2652. //   centralCoord[0] = centX;
  2653. //   centralCoord[1] = centY;
  2654. //   Orion.SetGlobal('centX', Player.X());
  2655. //   Orion.SetGlobal('centY', Player.Y());
  2656. //   while (!Player.Dead()) {
  2657. //     if (Orion.GetGlobal('holdDist') == 'false') {
  2658. //       break;
  2659. //     }
  2660. //     Orion.Wait(100);
  2661. //     var coords = GetCoords(9);
  2662. //     var monsters = GetMonstersCoord();
  2663. //     if (monsters.size() < 1) continue;
  2664. //     var closest = monsters.content[0];
  2665. //     if (Orion.GetDistance(closest[0], closest[1]) < 7) {
  2666. //       // Orion.Print("closest: "+Orion.GetDistance(monsters[0][0],monsters[0][1]));
  2667. //       var rtn = FindOptimalCoord(coords, monsters, centralCoord, 6);
  2668. //       if (rtn) {
  2669. //         // Orion.Print(rtn[0]+", "+rtn[1]+"  jdu daleko: "+Orion.GetDistance(rtn[0],rtn[1]));
  2670. //         var dist = Orion.GetDistance(rtn[0],rtn[1]);
  2671. //         Orion.WalkTo(rtn[0],rtn[1],-1000,dist-2);
  2672.  
  2673. //       }
  2674.  
  2675. //     }
  2676.  
  2677. //   }
  2678. // }
  2679.  
  2680. // function GetCoords(dist) {
  2681. //   var coords = [];
  2682. //   for (var x = -dist; x < dist; x++) {
  2683. //     for (var y = -dist; y < dist; y++) {
  2684. //       if (x == 0 || y == 0) {
  2685. //         continue;
  2686. //       }
  2687. //       var tmp = [];
  2688. //       tmp[0] = x + Player.X();
  2689. //       tmp[1] = y + Player.Y();
  2690. //       coords.push(tmp);
  2691. //     }
  2692.  
  2693. //   }
  2694. //   return coords;
  2695. // }
  2696.  
  2697. // function GetMonstersCoord() {
  2698. //   var monstTmp = Orion.FindTypeEx(any, any, 'ground', 'mobile|live|ignoreself|ignorefriends', 18, 'red');
  2699.  
  2700. //   var monsters = new BinaryHeap(function (m) {
  2701. //     return Orion.GetDistance(m[0], m[1]);
  2702. //   });
  2703. //   for (var i = 0; i < monstTmp.length; i++) {
  2704. //     var e = monstTmp[i];
  2705. //     if (e.CanChangeName()) continue;
  2706. //     var t = [];
  2707. //     t[0] = e.X();
  2708. //     t[1] = e.Y();
  2709. //     t[2] = e.Direction();
  2710. //     monsters.push(t);
  2711. //   }
  2712. //   return monsters;
  2713.  
  2714. // }
  2715.  
  2716. // function FindOptimalCoord(coords, monsters, centralCoord, minDist) {
  2717. //   if (monsters.size() < 1) return coords[0];
  2718. //   // monsters=monsters.sort(CompareDist);
  2719. //   // Orion.Print("monsters: "+monsters.length);
  2720. //   var goodCoords = new BinaryHeap(function (m) {
  2721. //     return EuclidDist(m, centralCoord);
  2722. //     //return Orion.GetDistance(m[0],m[1]);
  2723.  
  2724. //   });
  2725.  
  2726. //   for (var i = 0; i < coords.length; i++) {
  2727. //     var rtnDist = false;
  2728. //     var dOpt = ManhattanDist(coords[i], centralCoord);
  2729. //     if (dOpt > 25) continue;
  2730. //     for (var j = 0; j < monsters.size(); j++) {
  2731. //       var d = EuclidDist(coords[i], monsters.content[j]);
  2732. //       //Orion.Print("monsterCoord: "+d);
  2733. //       if (d > minDist) {
  2734. //         rtnDist = true;
  2735. //       } else {
  2736. //         rtnDist = false;
  2737. //         break;
  2738. //       }
  2739. //     }
  2740. //     if (rtnDist) {
  2741. //       // Orion.Print("whyL");
  2742. //       goodCoords.push(coords[i]);
  2743. //     }
  2744. //   }
  2745. //   //Orion.Print("goodCoords: "+goodCoords.content.length);
  2746.  
  2747.  
  2748. //   return goodCoords.pop()
  2749. // }
  2750.  
  2751. // function EuclidDist(a, b) {
  2752. //   return Math.sqrt((a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]));
  2753. // }
  2754.  
  2755. // function ManhattanDist(a, b) {
  2756. //   return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);
  2757. // }
  2758.  
  2759. // function CompareDist(a, b) {
  2760.  
  2761. //   if (Orion.GetDistance(a[0], a[1]) < Orion.GetDistance(b[0], b[1]))
  2762. //     return -1;
  2763. //   if (Orion.GetDistance(a[0], a[1]) > Orion.GetDistance(b[0], b[1]))
  2764. //     return 1;
  2765. //   return 0;
  2766. // }
  2767.  
  2768.  
  2769. // function CompareDistToCenter(a, b) {
  2770. //   var cent = [];
  2771. //   cent[0] = parseInt(Orion.GetGlobal('centX'))
  2772. //   cent[1] = parseInt(Orion.GetGlobal('centY'))
  2773. //   if (EuclidDist(a, cent) < EuclidDist(b, cent))
  2774. //     return -1;
  2775. //   if (EuclidDist(a, cent) > EuclidDist(b, cent))
  2776. //     return 1;
  2777. //   return 0;
  2778. // }
  2779.  
  2780.  
  2781.  
  2782.  
  2783. // function BinaryHeap(scoreFunction) {
  2784. //   this.content = [];
  2785. //   this.scoreFunction = scoreFunction;
  2786. // }
  2787.  
  2788. // BinaryHeap.prototype = {
  2789. //   push: function (element) {
  2790. //     // Add the new element to the end of the array.
  2791. //     this.content.push(element);
  2792. //     // Allow it to bubble up.
  2793. //     this.bubbleUp(this.content.length - 1);
  2794. //   },
  2795.  
  2796. //   pop: function () {
  2797. //     // Store the first element so we can return it later.
  2798. //     var result = this.content[0];
  2799. //     // Get the element at the end of the array.
  2800. //     var end = this.content.pop();
  2801. //     // If there are any elements left, put the end element at the
  2802. //     // start, and let it sink down.
  2803. //     if (this.content.length > 0) {
  2804. //       this.content[0] = end;
  2805. //       this.sinkDown(0);
  2806. //     }
  2807. //     return result;
  2808. //   },
  2809.  
  2810. //   remove: function (node) {
  2811. //     var length = this.content.length;
  2812. //     // To remove a value, we must search through the array to find
  2813. //     // it.
  2814. //     for (var i = 0; i < length; i++) {
  2815. //       if (this.content[i] != node) continue;
  2816. //       // When it is found, the process seen in 'pop' is repeated
  2817. //       // to fill up the hole.
  2818. //       var end = this.content.pop();
  2819. //       // If the element we popped was the one we needed to remove,
  2820. //       // we're done.
  2821. //       if (i == length - 1) break;
  2822. //       // Otherwise, we replace the removed element with the popped
  2823. //       // one, and allow it to float up or sink down as appropriate.
  2824. //       this.content[i] = end;
  2825. //       this.bubbleUp(i);
  2826. //       this.sinkDown(i);
  2827. //       break;
  2828. //     }
  2829. //   },
  2830.  
  2831. //   size: function () {
  2832. //     return this.content.length;
  2833. //   },
  2834.  
  2835. //   bubbleUp: function (n) {
  2836. //     // Fetch the element that has to be moved.
  2837. //     var element = this.content[n],
  2838. //       score = this.scoreFunction(element);
  2839. //     // When at 0, an element can not go up any further.
  2840. //     while (n > 0) {
  2841. //       // Compute the parent element's index, and fetch it.
  2842. //       var parentN = Math.floor((n + 1) / 2) - 1,
  2843. //         parent = this.content[parentN];
  2844. //       // If the parent has a lesser score, things are in order and we
  2845. //       // are done.
  2846. //       if (score >= this.scoreFunction(parent))
  2847. //         break;
  2848.  
  2849. //       // Otherwise, swap the parent with the current element and
  2850. //       // continue.
  2851. //       this.content[parentN] = element;
  2852. //       this.content[n] = parent;
  2853. //       n = parentN;
  2854. //     }
  2855. //   },
  2856.  
  2857. //   sinkDown: function (n) {
  2858. //     // Look up the target element and its score.
  2859. //     var length = this.content.length,
  2860. //       element = this.content[n],
  2861. //       elemScore = this.scoreFunction(element);
  2862.  
  2863. //     while (true) {
  2864. //       // Compute the indices of the child elements.
  2865. //       var child2N = (n + 1) * 2,
  2866. //         child1N = child2N - 1;
  2867. //       // This is used to store the new position of the element,
  2868. //       // if any.
  2869. //       var swap = null;
  2870. //       // If the first child exists (is inside the array)...
  2871. //       if (child1N < length) {
  2872. //         // Look it up and compute its score.
  2873. //         var child1 = this.content[child1N],
  2874. //           child1Score = this.scoreFunction(child1);
  2875. //         // If the score is less than our element's, we need to swap.
  2876. //         if (child1Score < elemScore)
  2877. //           swap = child1N;
  2878. //       }
  2879. //       // Do the same checks for the other child.
  2880. //       if (child2N < length) {
  2881. //         var child2 = this.content[child2N],
  2882. //           child2Score = this.scoreFunction(child2);
  2883. //         if (child2Score < (swap == null ? elemScore : child1Score))
  2884. //           swap = child2N;
  2885. //       }
  2886.  
  2887. //       // No need to swap further, we are done.
  2888. //       if (swap == null) break;
  2889.  
  2890. //       // Otherwise, swap and continue.
  2891. //       this.content[n] = this.content[swap];
  2892. //       this.content[swap] = element;
  2893. //       n = swap;
  2894. //     }
  2895. //   }
  2896. // };
  2897. /*
  2898. ######################################################
  2899. ### File: Scripts/Helpers/AutoHideCorpses.oajs
  2900. ######################################################
  2901. */
  2902.  
  2903.  
  2904. function AutoHideCorpses() {
  2905.     while (true) {
  2906.         Orion.Wait(1000);
  2907.         if (Player.Dead()) continue;
  2908.         var cnt = Orion.FindType('0x2006', any, ground);
  2909.         for (var i = 0; i < cnt.length; i++) {
  2910.             Orion.Hide(cnt[i]);
  2911.         }
  2912.     }
  2913. }
  2914.  
  2915.  
  2916.  
  2917. /*
  2918. ######################################################
  2919. ### File: Scripts/Helpers/AutoLoot.oajs
  2920. ######################################################
  2921. */
  2922.  
  2923. function AutoLoot_Ground_ItemMapGoldRegsGems() {
  2924.     while (true) {
  2925.         Orion.Wait(1000);
  2926.         if (Player.Dead()) { continue; }
  2927.         Lot(ground, "LotItemMaps");
  2928.         Lot(ground, "LotGold");
  2929.         Lot(ground, "LotRegs");
  2930.         Lot(ground, "LotGems");
  2931.     }
  2932. }
  2933.  
  2934. // fce pro autoloot ruznych poskupin, kazda cerpa ze sveho FindListu
  2935. function AutoLoot_ItemMap() {
  2936.     var corpse;
  2937.     while (true) {
  2938.         Orion.Wait(200);
  2939.         if (Player.Dead() || Player.Hidden()) continue;
  2940.         corpse = FindCorpse();
  2941.         if (corpse == null) continue;
  2942.         var it = Orion.FindType(any, any, corpse.Serial());
  2943.         if (it.length > 9) {
  2944.             continue;
  2945.         }
  2946.         Lot(corpse.Serial(), "LotItemMaps");
  2947.     }
  2948. }
  2949.  
  2950. function AutoLoot_Gold() {
  2951.     var corpse;
  2952.     while (true) {
  2953.         Orion.Wait(200);
  2954.         if (Player.Dead() || Player.Hidden()) continue;
  2955.         corpse = FindCorpse();
  2956.         if (corpse == null) continue;
  2957.         var it = Orion.FindType(any, any, corpse.Serial());
  2958.         if (it.length > 9) {
  2959.             continue;
  2960.         }
  2961.         Lot(corpse.Serial(), "LotGold");
  2962.     }
  2963. }
  2964.  
  2965. function AutoLoot_Regs() {
  2966.     var corpse;
  2967.     while (true) {
  2968.         Orion.Wait(200);
  2969.         if (Player.Dead() || Player.Hidden()) continue;
  2970.         corpse = FindCorpse();
  2971.         if (corpse == null) continue;
  2972.         var it = Orion.FindType(any, any, corpse.Serial());
  2973.         if (it.length > 9) {
  2974.             continue;
  2975.         }
  2976.         Lot(corpse.Serial(), "LotRegs");
  2977.     }
  2978. }
  2979.  
  2980. function AutoLoot_Gems() {
  2981.     var corpse;
  2982.     while (true) {
  2983.         Orion.Wait(200);
  2984.         if (Player.Dead() || Player.Hidden()) continue;
  2985.         corpse = FindCorpse();
  2986.         if (corpse == null) continue;
  2987.         var it = Orion.FindType(any, any, corpse.Serial());
  2988.         if (it.length > 9) {
  2989.             continue;
  2990.         }
  2991.         Lot(corpse.Serial(), "LotGems");
  2992.     }
  2993. }
  2994.  
  2995. function AutoLoot_LeatherFeather() {
  2996.     var corpse;
  2997.     while (true) {
  2998.         Orion.Wait(200);
  2999.         if (Player.Dead() || Player.Hidden()) continue;
  3000.         corpse = FindCorpse();
  3001.         if (corpse == null) continue;
  3002.         var it = Orion.FindType(any, any, corpse.Serial());
  3003.         if (it.length > 9) {
  3004.             continue;
  3005.         }
  3006.         Lot(corpse.Serial(), "LotLeather");
  3007.         Lot(corpse.Serial(), "LotFeather");
  3008.     }
  3009. }
  3010.  
  3011. function AutoLoot_Custom() {
  3012.     var corpse;
  3013.     while (true) {
  3014.         Orion.Wait(200);
  3015.         if (Player.Dead() || Player.Hidden()) continue;
  3016.         corpse = FindCorpse();
  3017.         if (corpse == null) continue;
  3018.         var it = Orion.FindType(any, any, corpse.Serial());
  3019.         if (it.length > 9) {
  3020.             continue;
  3021.         }
  3022.         Lot(corpse.Serial(), "LotCustom");
  3023.     }
  3024. }
  3025.  
  3026. // LotSipky - loti sipky a sipy ze zeme + vyhazuje sipy od NPC
  3027. function LotSipky()
  3028. {
  3029.     if(Orion.GetGlobal('lotSipky')=='true'){
  3030.         Orion.SetGlobal('lotSipky','false');
  3031.         CharPrintDelayed(self, '0x0021', "Lot Sipky OFF",25);
  3032.     }
  3033.     else{
  3034.         Orion.SetGlobal('lotSipky','true');
  3035.         CharPrintDelayed(self, '0x0111', "Lot Sipky ON",25);
  3036.     }
  3037.    
  3038.     while(!Player.Dead())
  3039.     {
  3040.         if(Orion.GetGlobal('lotSipky')=='false'){
  3041.             break;
  3042.         }
  3043.         var suxsipy = Orion.FindType('0x0F3F', '0x0000', 'backpack',true);
  3044.         if (suxsipy.length > 0) {
  3045.             for (var i = 0; i < suxsipy.length; i++) {
  3046.                 Orion.DropHere(suxsipy[i], 0);
  3047.             }
  3048.         }
  3049.         var sipky =Orion.FindTypeEx('0x1BFB|0x38D8|0x0F3F', any, ground, '', 3);
  3050.         for (var i = 0; i < sipky.length; i++)
  3051.          {
  3052.             var e = sipky[i];
  3053.             if(e.Color()=='0x0000')
  3054.             {
  3055.                 Orion.Ignore(e.Serial());
  3056.                 continue;
  3057.             }
  3058.             if (Math.abs(Player.Z() - e.Z()) > 2) continue;
  3059.             Orion.MoveItem(e.Serial(), 0, backpack);
  3060.             Orion.Wait(200);
  3061.             if (e.Container() != backpack)
  3062.             {
  3063.                 Orion.Ignore(e.Serial());
  3064.             }
  3065.         }
  3066.  
  3067.         var corpse = Orion.FindType('0x2006', any, ground);
  3068.         if (corpse.length < 1) continue;
  3069.         else
  3070.         {
  3071.             for (var i = 0; i < corpse.length; i++)
  3072.             {
  3073.                 var e = corpse[i];
  3074.                 var it = Orion.FindType(any, any, e);
  3075.                 var itSipky = Orion.FindTypeEx('0x1BFB|0x38D8|0x0F3F', any, e);
  3076.                 if (it.length > 9)
  3077.                 {
  3078.                     continue;
  3079.                 }
  3080.                 for (var a = 0; a < itSipky.length; a++) {
  3081.                     var s = itSipky[a];
  3082.                     Orion.MoveItem(s.Serial(),0,backpack);
  3083.                     Orion.Wait(200);
  3084.                     if (s.Container() != backpack)
  3085.                     {
  3086.                         Orion.Ignore(s.Serial());
  3087.                     }
  3088.                 }
  3089.  
  3090.             }
  3091.         }
  3092.  
  3093.     }
  3094.     if(Player.Dead()){
  3095.         Orion.SetGlobal('lotSipky','false');
  3096.         CharPrintDelayed(self, '0x0021', "Lot Sipky OFF",25);
  3097.     }
  3098. }
  3099.  
  3100.  
  3101.  
  3102.  
  3103. function FindCorpse(_private) {
  3104.     var FindLists = ['LotItemMaps']; //,'LotRegs','LotGems','LotFeather','LotLeather','LotCustom','LotGold'];
  3105.     if (Orion.ScriptRunning('AutoLoot_Gold')) FindLists.push('LotGold');
  3106.     if (Orion.ScriptRunning('AutoLoot_Custom')) FindLists.push('LotCustom');
  3107.     if (Orion.ScriptRunning('AutoLoot_LeatherFeather')) {
  3108.         FindLists.push('LotLeather');
  3109.         FindLists.push('LotFeather');
  3110.     }
  3111.     if (Orion.ScriptRunning('AutoLoot_Gems')) FindLists.push('LotGems');
  3112.     if (Orion.ScriptRunning('AutoLoot_Regs')) FindLists.push('LotRegs');
  3113.     var list = Orion.FindType('0x2006', '0xFFFF', ground, '', '3');
  3114.     if (!list) return null;
  3115.     var list2 = list.filter(function(fil) {
  3116.         var items = [];
  3117.         for (var i = 0; i < FindLists.length; i++) {
  3118.             items = items.concat(Orion.FindList(FindLists[i], fil));
  3119.         }
  3120.         if (items.length) return true;
  3121.         return false;
  3122.     });
  3123.     if (list2.length) {
  3124.         return Orion.FindObject(list2[0]);
  3125.     }
  3126.     return null;
  3127. }
  3128.  
  3129. function Lot(corpse, listName) {
  3130.     var list = Orion.FindList(listName, corpse);
  3131.     if (!list.length) {
  3132.         return false;
  3133.     }
  3134.     try{
  3135.     for (var i = 0; i < list.length; i++) {
  3136.         if (Orion.GetDistance(corpse) > 3 && corpse != ground) {
  3137.             return false;
  3138.         }
  3139.         if (corpse == ground && Orion.GetDistance(list[i]) > 2) continue;
  3140.         if (corpse == ground && Math.abs(Player.Z() - item.Z()) > 3) continue;
  3141.         var item = Orion.FindObject(list[i]);
  3142.         if (item) {
  3143.             if (item.Graphic() == 0x0E76) {
  3144.                 if (item.Color() != 0x0430) continue;
  3145.             }
  3146.             if (item.Graphic() == 0x0EED) {
  3147.                 if (item.Count() < 10) continue;
  3148.             }
  3149.         }
  3150.         if (Orion.GetGlobal('Equipping') == 'true') {
  3151.             Orion.Wait(500);
  3152.         }
  3153.         while(Orion.GetGlobal('save'=='true'))
  3154.         {
  3155.             Orion.Wait(200);
  3156.         }
  3157.         Orion.MoveItem(list[i], 0, 'lotBag'); //,60,140);
  3158.         Orion.Wait(100);
  3159.         if (item.Container() != Orion.GetSerial('lotBag')) { Orion.Wait(200); }
  3160.     }
  3161.     return true;
  3162. }
  3163. catch(ex){
  3164.     Debug(ex);
  3165. }
  3166. }
  3167.  
  3168.  
  3169. /*
  3170. ######################################################
  3171. ### File: Scripts/Helpers/AutoPackCoins.oajs
  3172. ######################################################
  3173. */
  3174.  
  3175. // Automesec - co 5 vterin prohledava backpack a pocita kolik GP obsahuje, po prekroceni nastavene hodnoty pouzije prikaz ".mesec"
  3176. //              najde-li vice mescu tak je sesype
  3177. function AutoMesec() {
  3178.     while (true) {
  3179.         Orion.Wait(5000);
  3180.         if (Player.Dead()) continue;
  3181.         var gp = Orion.Count('0x0EED');
  3182.         if (gp > GetGPAmount()) // nad kolik GP dela mesce
  3183.             Orion.Say(".mesec");
  3184.         var gpBags = Orion.FindType('0x0E76', '0x0995', 'backpack');
  3185.         if (gpBags.length > 1) {
  3186.             for (var i = 1; i < gpBags.length; i++) {
  3187.                 Orion.MoveItem(gpBags[i], 1, gpBags[0]);
  3188.             }
  3189.         }
  3190.     }
  3191. }
  3192. /*
  3193. ######################################################
  3194. ### File: Scripts/Helpers/Autostart.oajs
  3195. ######################################################
  3196. */
  3197.  
  3198. function Autostart() {
  3199.     Orion.Terminate('all', ['Autostart']);
  3200.  
  3201.  
  3202.     Orion.SetLOSOptions('sphere|spherecheckcorners');
  3203.     SwitchArm(1);
  3204.  
  3205.     Orion.Exec("PotionWatch");
  3206.     Orion.Exec("AutoMesec");
  3207.  
  3208.     Orion.Exec("OnHitBandage");
  3209.     Orion.Exec("JournalCheck");
  3210.     Orion.Exec("HPCheck");
  3211.     Orion.Exec('HPCheckLastTarget');
  3212.     Orion.Exec("AutoLoot_Ground_ItemMapGoldRegsGems");
  3213.    // Orion.Exec("AutoLoot_Custom");
  3214.    // Orion.Exec("AutoLoot_LeatherFeather");
  3215.     Orion.Exec("AutoLoot_Gems");
  3216.     Orion.Exec("AutoLoot_Regs");
  3217.     Orion.Exec("AutoLoot_Gold");
  3218.     Orion.Exec("AutoLoot_ItemMap");
  3219.     Orion.Exec("LogMonstersToFile");
  3220.     Orion.Exec("CheckLOS");
  3221.     Orion.Exec("GetNamesLastContainer");
  3222.    // Orion.Exec("ShowTimeBetweenHit");
  3223.    // Orion.Exec("Naprahy");
  3224.        
  3225.     Orion.OptionScaleSpeechDelay(60);
  3226.     Orion.Print(Player.Name());
  3227.     Orion.SetGlobal('LeapTime', Orion.Now() + 3000);
  3228.     Orion.SetGlobal('save','false');
  3229.  
  3230.     Orion.SetGlobal('DynamicHealPause',100);
  3231.     Orion.SetGlobal('isHidding','false');
  3232.     Orion.SetGlobal("probo", false);
  3233.  
  3234.     Orion.SetGlobal("trgMode", 1);
  3235.     Orion.Print('0x0044',"Target Monsters");
  3236.     Orion.SetGlobal("trgModeSpell", 'pvm');
  3237.  
  3238.     Orion.SetGlobal('autoCast', false);
  3239.     Orion.SetGlobal("bandageDone", true);
  3240.     Orion.SetGlobal("isCasting", false);
  3241.     Orion.SetGlobal("GetCheckLineOfSight", GetCheckLineOfSight());
  3242.  
  3243.     Orion.Wait(200);
  3244.     Orion.Print(" Na sebe nastav Equip0 pro bandeni");
  3245.     GetProdleva();
  3246.     Orion.Say(".standcast");
  3247.     Orion.Wait(100);
  3248.     Orion.Say(".standcast");
  3249.  
  3250. }
  3251. /*
  3252. ######################################################
  3253. ### File: Scripts/Helpers/BinaryHeap.oajs
  3254. ######################################################
  3255. */
  3256.  
  3257.  
  3258.  
  3259. function BinaryHeap(scoreFunction) {
  3260.     this.content = [];
  3261.     this.scoreFunction = scoreFunction;
  3262.   }
  3263.  
  3264.   BinaryHeap.prototype = {
  3265.     push: function (element) {
  3266.       // Add the new element to the end of the array.
  3267.       this.content.push(element);
  3268.       // Allow it to bubble up.
  3269.       this.bubbleUp(this.content.length - 1);
  3270.     },
  3271.  
  3272.     pop: function () {
  3273.       // Store the first element so we can return it later.
  3274.       var result = this.content[0];
  3275.       // Get the element at the end of the array.
  3276.       var end = this.content.pop();
  3277.       // If there are any elements left, put the end element at the
  3278.       // start, and let it sink down.
  3279.       if (this.content.length > 0) {
  3280.         this.content[0] = end;
  3281.         this.sinkDown(0);
  3282.       }
  3283.       return result;
  3284.     },
  3285.  
  3286.     remove: function (node) {
  3287.       var length = this.content.length;
  3288.       // To remove a value, we must search through the array to find
  3289.       // it.
  3290.       for (var i = 0; i < length; i++) {
  3291.         if (this.content[i] != node) continue;
  3292.         // When it is found, the process seen in 'pop' is repeated
  3293.         // to fill up the hole.
  3294.         var end = this.content.pop();
  3295.         // If the element we popped was the one we needed to remove,
  3296.         // we're done.
  3297.         if (i == length - 1) break;
  3298.         // Otherwise, we replace the removed element with the popped
  3299.         // one, and allow it to float up or sink down as appropriate.
  3300.         this.content[i] = end;
  3301.         this.bubbleUp(i);
  3302.         this.sinkDown(i);
  3303.         break;
  3304.       }
  3305.     },
  3306.  
  3307.     size: function () {
  3308.       return this.content.length;
  3309.     },
  3310.  
  3311.     bubbleUp: function (n) {
  3312.       // Fetch the element that has to be moved.
  3313.       var element = this.content[n],
  3314.         score = this.scoreFunction(element);
  3315.       // When at 0, an element can not go up any further.
  3316.       while (n > 0) {
  3317.         // Compute the parent element's index, and fetch it.
  3318.         var parentN = Math.floor((n + 1) / 2) - 1,
  3319.           parent = this.content[parentN];
  3320.         // If the parent has a lesser score, things are in order and we
  3321.         // are done.
  3322.         if (score >= this.scoreFunction(parent))
  3323.           break;
  3324.  
  3325.         // Otherwise, swap the parent with the current element and
  3326.         // continue.
  3327.         this.content[parentN] = element;
  3328.         this.content[n] = parent;
  3329.         n = parentN;
  3330.       }
  3331.     },
  3332.  
  3333.     sinkDown: function (n) {
  3334.       // Look up the target element and its score.
  3335.       var length = this.content.length,
  3336.         element = this.content[n],
  3337.         elemScore = this.scoreFunction(element);
  3338.  
  3339.       while (true) {
  3340.         // Compute the indices of the child elements.
  3341.         var child2N = (n + 1) * 2,
  3342.           child1N = child2N - 1;
  3343.         // This is used to store the new position of the element,
  3344.         // if any.
  3345.         var swap = null;
  3346.         // If the first child exists (is inside the array)...
  3347.         if (child1N < length) {
  3348.           // Look it up and compute its score.
  3349.           var child1 = this.content[child1N],
  3350.             child1Score = this.scoreFunction(child1);
  3351.           // If the score is less than our element's, we need to swap.
  3352.           if (child1Score < elemScore)
  3353.             swap = child1N;
  3354.         }
  3355.         // Do the same checks for the other child.
  3356.         if (child2N < length) {
  3357.           var child2 = this.content[child2N],
  3358.             child2Score = this.scoreFunction(child2);
  3359.           if (child2Score < (swap == null ? elemScore : child1Score))
  3360.             swap = child2N;
  3361.         }
  3362.  
  3363.         // No need to swap further, we are done.
  3364.         if (swap == null) break;
  3365.  
  3366.         // Otherwise, swap and continue.
  3367.         this.content[n] = this.content[swap];
  3368.         this.content[swap] = element;
  3369.         n = swap;
  3370.       }
  3371.     }
  3372.   };
  3373. /*
  3374. ######################################################
  3375. ### File: Scripts/Helpers/Carving.oajs
  3376. ######################################################
  3377. */
  3378.  
  3379. // Carv - funkce rozreze mrtvoly a pavuciny v dosahu nastavenou zbrani (Lists/Objects) + hlida zda mrtvola neni jezditko
  3380. function Carv() {
  3381.     var carvTool = Orion.FindObject('carv');
  3382.     if (carvTool == null) {
  3383.         Orion.Print("Nemas nastaveny nuz - carv");
  3384.         return;
  3385.     }
  3386.     Orion.IgnoreReset();
  3387.     var corpses = Orion.FindType('0x2006|0x0EE3|0x0EE4|0x0EE5|0x0EE6', any, ground, 3);
  3388.     if (!corpses.length) return;
  3389.     for (i = 0; i < corpses.length; i++) {
  3390.         Orion.CancelTarget();
  3391.         var name = Orion.RequestName(corpses[i]);
  3392.         if (Orion.Contains(name, 'mustang|oclock|orn|zostrich|ledni|ridgeback|zostrich', true)) continue;
  3393.         Orion.WaitTargetObject(corpses[i]);
  3394.         Orion.UseObject(carvTool.Serial());
  3395.         Orion.Wait(250);
  3396.     }
  3397.     Orion.Arm(Orion.GetGlobal("weap"));
  3398. }
  3399.  
  3400. /*
  3401. ######################################################
  3402. ### File: Scripts/Helpers/CheckLastTargetLOS.oajs
  3403. ######################################################
  3404. */
  3405.  
  3406. function CheckLOS()
  3407. {
  3408.     var target=Orion.GetSerial(lasttarget);
  3409.     while (true) {
  3410.         Orion.Wait(200);
  3411.         if (Player.Dead()) {
  3412.             Orion.Wait(500);
  3413.             continue;
  3414.         }
  3415.         try
  3416.         {
  3417.             var lt = Orion.GetSerial(lasttarget);
  3418.             if(target!=lt){
  3419.                 Orion.ClearHighlightCharacters(true);
  3420.             }
  3421.             if(Orion.InLOS(lt)){
  3422.                 Orion.AddHighlightCharacter(lt, 0x0035,true);
  3423.                 target=lt;
  3424.             }
  3425.             else{
  3426.                 Orion.ClearHighlightCharacters(true);
  3427.             }
  3428.  
  3429.        
  3430.         } catch (ex) {
  3431.             Debug(ex);
  3432.         }
  3433.            
  3434.  
  3435.     }
  3436. }
  3437. /*
  3438. ######################################################
  3439. ### File: Scripts/Helpers/CutLeather.oajs
  3440. ######################################################
  3441. */
  3442.  
  3443. // CutLeather - fce striha kuze v batohu, pokud najde nuzky
  3444. function CutLeather() {
  3445.     var siccors = Orion.FindType('0x0F9E|0x0F9F', any, backpack);
  3446.     var leathers = Orion.FindType('0x1078', any, backpack);
  3447.     if (!siccors || !siccors) return;
  3448.     for (var i = 0; i < leathers.length; i++) {
  3449.         Orion.WaitTargetObject(leathers[i]);
  3450.         Orion.UseType('0x0F9E|0x0F9F');
  3451.         Orion.Wait(300);
  3452.     }
  3453.  
  3454. }
  3455.  
  3456. /*
  3457. ######################################################
  3458. ### File: Scripts/Helpers/Follow.oajs
  3459. ######################################################
  3460. */
  3461.  
  3462. function follow(){
  3463.     Orion.AddObject("follow");
  3464.     while (Orion.HaveTarget()) Orion.Wait(100);
  3465.     var target = Orion.FindObject('follow');
  3466.  
  3467.     while(!Player.Dead()){
  3468.         Orion.Follow(target.Serial(),true);
  3469.         Orion.Wait(100);
  3470.     }
  3471. }
  3472.  
  3473. function CleverFollow(distance){
  3474.    
  3475. }
  3476. /*
  3477. ######################################################
  3478. ### File: Scripts/Helpers/GetActualEquipIDs.oajs
  3479. ######################################################
  3480. */
  3481.  
  3482. // PrintEq - vypise ID aktualniho equipu
  3483. function PrintActualEquip(__private) {
  3484.     var layers = [6, 18, 10, 8, 14, 17, 22, 20, 7, 19, 13, 4];
  3485.     TextWindow.Open();
  3486.     TextWindow.Clear();
  3487.     for (var i = 0; i < layers.length; i++) {
  3488.         var obj = Orion.ObjAtLayer(layers[i]);
  3489.         if (!obj) continue;
  3490.         TextWindow.Print(obj.Serial() + ",");
  3491.     }
  3492. }
  3493. /*
  3494. ######################################################
  3495. ### File: Scripts/Helpers/GetCoinsFromPack.oajs
  3496. ######################################################
  3497. */
  3498.  
  3499. // VysypPokladnicky - vyhleda v batohu sechny pokladnicky a postupne je vysype do zvoleneho batohu - pracuje dokud v backpacku najde nejakou pokladnicku
  3500. function VysypPokladnicky() {
  3501.     Orion.AddObject("trg");
  3502.     Orion.Print("Zamer kam vysypat pokladnicky");
  3503.     while (Orion.HaveTarget()) Orion.Wait(100);
  3504.     var target = Orion.FindObject('trg');
  3505.     Orion.RemoveObject('trg');
  3506.     var gpPack = Orion.FindType('0x0E76|0x0E80|0x09A8', '0x0995', backpack);
  3507.     while (gpPack) {
  3508.         while(Orion.GetGlobal('save'=='true'))
  3509.         {
  3510.             Orion.Wait(200);
  3511.         }
  3512.         Orion.Wait(200);
  3513.         Orion.UseObject(gpPack[0]);
  3514.         Orion.Wait(200);
  3515.         var gum = Orion.GetLastGump();
  3516.         Orion.Wait(200);
  3517.         var hook = Orion.CreateGumpHook(2);
  3518.         gum.Select(hook);
  3519.         Orion.Wait(100);
  3520.         var gp = Orion.FindType(0x0EED, 0x0000, backpack);
  3521.         for (var i = 0; i < gp.length; i++) {
  3522.             Orion.MoveItem(gp[i], 0, target.Serial());
  3523.         }
  3524.         gpPack = Orion.FindType('0x0E76|0x0E80|0x09A8', '0x0995', backpack);
  3525.     }
  3526.     Orion.Print("Pokladnicky nenalezeny");
  3527. }
  3528.  
  3529. /*
  3530. ######################################################
  3531. ### File: Scripts/Helpers/HPChecker.oajs
  3532. ######################################################
  3533. */
  3534.  
  3535. // HPCheck - fce hlidajici HP a pripadne pouzije heal potion + vypis zmen HP
  3536. function HPCheck() {
  3537.     var lastHP = Player.Hits();
  3538.     var change = 0;
  3539.     while (true) {
  3540.         Orion.Wait(100);
  3541.         if (Player.Dead()) {
  3542.             Debug("Vypinam HPPrint");
  3543.  
  3544.             break;
  3545.         }
  3546.         if (lastHP != Player.Hits()) {
  3547.             if (lastHP < Player.Hits() && (Player.Hits() - lastHP) > 4) {
  3548.                 change = Player.Hits() - lastHP;
  3549.                 if (change < 4) continue;
  3550.                 CharPrintDelayed('self', '0x0044', "+" + Math.ceil((change / (Player.MaxHits() / 100)).toFixed(2))); // +HP
  3551.             } else {
  3552.                 change = lastHP - Player.Hits();
  3553.                 if (change < 4) continue;
  3554.                 CharPrintDelayed('self', '0x0087', "-" + Math.ceil((change / (Player.MaxHits() / 100)).toFixed(2))); // +HP
  3555.             }
  3556.             lastHP = Player.Hits();
  3557.         }
  3558.         if (!Player.Dead() && Player.Hits() < GetCriticalHits() && Player.Hits() > 0 && GetAutoDrinkHeal() && !Player.Dead()) {
  3559.             var params = ['heal'];
  3560.             Orion.Exec('Potion', false, params);
  3561.         }
  3562.     }
  3563. }
  3564.  
  3565. // HPCheck - fce hlidajici HP a pripadne pouzije heal potion + vypis zmen HP
  3566. function HPCheckLastTarget() {
  3567.     var lastHP = 100;
  3568.     var target = Orion.FindObject(lasttarget);
  3569.     var change = 0;
  3570.     while (true) {
  3571.         target = Orion.FindObject(lasttarget);
  3572.         Orion.Wait(100);
  3573.         if (Player.Dead()) {
  3574.             Debug("Vypinam HPPrint");
  3575.             Orion.Wait(1000);
  3576.             continue;
  3577.         }
  3578.         if(target==null) continue;
  3579.         var textColor=0x038A;
  3580.         if (lastHP != target.Hits()) {
  3581.             if (lastHP < target.Hits() && (target.Hits() - lastHP) > 2) {// Bila - tyrkys
  3582.                 change = target.Hits() - lastHP;
  3583.                 if (change < 2) continue;
  3584.                 var text ="+" + Math.ceil((change / (target.MaxHits() / 100)).toFixed(2))+" ["+target.Hits()+"]";
  3585.                 CharPrintDelayed('self', textColor, text); // +HP
  3586.                 Orion.CharPrint(target.Serial(), '0x0044', text)
  3587.             } else {
  3588.                 change = lastHP - target.Hits();
  3589.                 if (change < 2) continue;
  3590.                 var text="-" + Math.ceil((change / (target.MaxHits() / 100)).toFixed(2))+" ["+target.Hits()+"]";
  3591.                 CharPrintDelayed('self', textColor, text); // +HP
  3592.                 Orion.CharPrint(target.Serial(), '0x0087', text)
  3593.             }
  3594.             lastHP = target.Hits();
  3595.         }
  3596.  
  3597.     }
  3598. }
  3599.  
  3600. /*
  3601. ######################################################
  3602. ### File: Scripts/Helpers/InfoItems.oajs
  3603. ######################################################
  3604. */
  3605.  
  3606. function InfoItem(Serial) {
  3607.     var staffTypes = ['0x13F9', '0x13F8', '0x0DF0', '0x0DF1']; //GN,GN,BS,BS
  3608.     var target = Orion.FindObject(Serial);
  3609.     for (var a = 0; a < containerTypes.length; a++) {
  3610.         if (target.Graphic() == containerTypes[a].Graphic) {
  3611.             Orion.Print("Kontejner, preskakuju");
  3612.             return;
  3613.         }
  3614.     }
  3615.     Orion.ClearJournal();
  3616.     Orion.Click(target.Serial());
  3617.     Orion.Wait(300);
  3618.     var txt = "";
  3619.     var txt1 = "";
  3620.     var txt2 = "";
  3621.     var ln;
  3622.     for (var i = 0; i < Orion.JournalCount(); i++) {
  3623.         ln = Orion.JournalLine(i);
  3624.         if (ln.Serial() == target.Serial()) {
  3625.             var staff = false;
  3626.             txt = ln.Text();
  3627.             for (var a = 0; a < staffTypes.length; a++) {
  3628.                 if (target.Graphic() == staffTypes[a]) {
  3629.                     staff = true;
  3630.                 }
  3631.             }
  3632.             try {
  3633.                 if (!staff) {
  3634.                     txt1 = Orion.JournalLine(i + 1).Text();
  3635.                     txt2 = Orion.JournalLine(i + 2).Text();
  3636.                 } else {
  3637.                     txt1 = Orion.JournalLine(i + 3).Text();
  3638.                     txt2 = Orion.JournalLine(i + 4).Text();
  3639.                 }
  3640.             } catch (err) {}
  3641.             Orion.ClearJournal();
  3642.         }
  3643.     }
  3644.  
  3645.     TextWindow.Print(txt + "|" + txt1 + "|" + txt2);
  3646.     return {Name:txt,ID:ln.Serial()};
  3647. }
  3648.  
  3649.  
  3650.  
  3651. // InfoItems - Projde vsechny itemy v zamerene truhle a vypise jejich vlastnosti
  3652. function InfoItems() {
  3653.     Orion.Print('Zamer item truhlu');
  3654.     Orion.AddObject("vetech");
  3655.     while (Orion.HaveTarget()) {
  3656.         Orion.Wait(100);
  3657.     }
  3658.     var itemList=[];
  3659.     var target = Orion.FindObject('vetech');
  3660.     Orion.RemoveObject("vetech");
  3661.     TextWindow.Clear();
  3662.     TextWindow.Open();
  3663.     var items = Orion.FindType(any, any, target.Serial());
  3664.     for (var i = 0; i < items.length; i++) {
  3665.        
  3666.         itemList.push(InfoItem(items[i]));
  3667.     }
  3668.  
  3669.     //sort
  3670.     var stealth='0x40049936'; //rogues
  3671.     var hidding='0x4003D0C4'; //rogues
  3672.     var blocking='0x40063EAE'; //Blocking
  3673.     var healing='0x400763B1';
  3674.     var anatomy='0x40073203';
  3675.     var str_Tactics='0x4006C11B';
  3676.     var animalkilling='0x40067469';
  3677.     var humankilling='0x4007CCF0';
  3678.     var golemkilling='0x40034F1D';
  3679.     var demonilling='0x4004FB3D';
  3680.     var provo='0x4007A203';
  3681.     var entic='0x40067042';
  3682.     var spiritspeak='0x4007698B';
  3683.     var magery='0x40004E1C';
  3684.     var peacemaking='0x400763B1';
  3685.  
  3686.     for (var i = 0; i < itemList.length; i++) {
  3687.  
  3688.         if(Orion.Contains(itemList[i].Name, 'Rogue', true)){
  3689.             Orion.MoveItem(itemList[i].ID, 0, stealth);
  3690.             continue;
  3691.         }
  3692.  
  3693.         if(Orion.Contains(itemList[i].Name, 'Blocking', true)){
  3694.             Orion.MoveItem(itemList[i].ID, 0, blocking);
  3695.             continue;
  3696.         }
  3697.  
  3698.         if(Orion.Contains(itemList[i].Name, 'Healers', true)){
  3699.             Orion.MoveItem(itemList[i].ID, 0, healing);
  3700.             continue;
  3701.         }
  3702.  
  3703.         if(Orion.Contains(itemList[i].Name, 'Scholar', true)){
  3704.             Orion.MoveItem(itemList[i].ID, 0, anatomy);
  3705.             continue;
  3706.         }
  3707.  
  3708.         if(Orion.Contains(itemList[i].Name, 'Titans|Warrior', true)){
  3709.             Orion.MoveItem(itemList[i].ID, 0, str_Tactics);
  3710.             continue;
  3711.         }
  3712.  
  3713.         if(Orion.Contains(itemList[i].Name, 'Animalkilling', true)){
  3714.             Orion.MoveItem(itemList[i].ID, 0, animalkilling);
  3715.             continue;
  3716.         }
  3717.  
  3718.         if(Orion.Contains(itemList[i].Name, 'Ogrekiller', true)){
  3719.             Orion.MoveItem(itemList[i].ID, 0, humankilling);
  3720.             continue;
  3721.         }
  3722.  
  3723.         if(Orion.Contains(itemList[i].Name, 'Mechanicslaying', true)){
  3724.             Orion.MoveItem(itemList[i].ID, 0, golemkilling);
  3725.             continue;
  3726.         }
  3727.  
  3728.         if(Orion.Contains(itemList[i].Name, 'Demonslayer', true)){
  3729.             Orion.MoveItem(itemList[i].ID, 0, demonilling);
  3730.             continue;
  3731.         }
  3732.  
  3733.         if(Orion.Contains(itemList[i].Name, 'Bards', true)){
  3734.             Orion.MoveItem(itemList[i].ID, 0, provo);
  3735.             continue;
  3736.         }
  3737.  
  3738.         if(Orion.Contains(itemList[i].Name, 'Bard', true)){
  3739.             Orion.MoveItem(itemList[i].ID, 0, entic);
  3740.             continue;
  3741.         }
  3742.  
  3743.         if(Orion.Contains(itemList[i].Name, 'Medium', true)){
  3744.             Orion.MoveItem(itemList[i].ID, 0, spiritspeak);
  3745.             continue;
  3746.         }
  3747.  
  3748.         if(Orion.Contains(itemList[i].Name, 'Peacemakers', true)){
  3749.             Orion.MoveItem(itemList[i].ID, 0, peacemaking);
  3750.             continue;
  3751.         }
  3752.  
  3753.         if(Orion.Contains(itemList[i].Name, 'Bard', true)){
  3754.             Orion.MoveItem(itemList[i].ID, 0, entic);
  3755.             continue;
  3756.         }
  3757.     }
  3758.  
  3759. }
  3760. /*
  3761. ######################################################
  3762. ### File: Scripts/Helpers/JournalChecker.oajs
  3763. ######################################################
  3764. */
  3765.  
  3766. // JournalCheck - hlida Journal a na dane zpravy reguje
  3767. function JournalCheck() {
  3768.     Orion.Wait(4000);
  3769.     var loop= true;
  3770.     Orion.ClearJournal();
  3771.     var expstart = GetActualExp();
  3772.     Orion.SetGlobal("ExpStart", expstart.Min);
  3773.     Orion.SetGlobal("ExpStartTime", Orion.Now());
  3774.     var lastMsg;
  3775.     while (loop) {
  3776.         Orion.Wait(100);
  3777.  
  3778.             if (Orion.LastJournalMessage() == lastMsg) {
  3779.                 continue;
  3780.             }
  3781.             for (var key in journalActions) {
  3782.                 if (journalActions.hasOwnProperty(key)) {
  3783.                     var element = journalActions[key];
  3784.                     var txt = Orion.InJournal(element.Text, element.Command);
  3785.                     if (txt) {
  3786.                         Orion.SetGlobal('txtSerial', txt.Serial());
  3787.                         Orion.SetGlobal('txtContent', txt.Text());
  3788.                         element.Action();
  3789.                         Orion.ClearJournal(element.Text);
  3790.                     }
  3791.  
  3792.                 }
  3793.             }
  3794.             lastMsg = Orion.LastJournalMessage();
  3795.  
  3796.     }
  3797. }
  3798.  
  3799.  
  3800. /*
  3801. ######################################################
  3802. ### File: Scripts/Helpers/LastContainerGetNames.oajs
  3803. ######################################################
  3804. */
  3805.  
  3806. function GetNamesLastContainer(){
  3807.     var tmp =  Orion.GetSerial(lastcontainer);
  3808.     while(true){
  3809.         Orion.Wait(500);
  3810.         var lc =Orion.GetSerial(lastcontainer);
  3811.         if(tmp!=lc){
  3812.             tmp=lastcontainer;
  3813.            
  3814.             GetRuneNames(tmp);
  3815.         }
  3816.     }
  3817. }
  3818.  
  3819. function GetRuneNames(container){
  3820.     var items=Orion.FindTypeEx('0x1F17|0x1F14|0x1F15|0x1F16|0x1CE9|0x1DAE|0x1CE1|0x1DA0', any, container,true); //hlavy 0x1CE9|0x1DAE|0x1CE1|0x1DA0 a runy
  3821.     for (var i = 0; i < items.length; i++) {
  3822.         var e = items[i];
  3823.         if(e.Name().length==0){
  3824.             Orion.RequestName(e.Serial(), 500);
  3825.         }
  3826.     }
  3827. }
  3828. /*
  3829. ######################################################
  3830. ### File: Scripts/Helpers/LogMonsters.oajs
  3831. ######################################################
  3832. */
  3833.  
  3834. // zaznamenava souradnice monster s cervenou karmou pro dalsi zpracovani a pridani do UOMapy
  3835. function LogMonstersToFile(){
  3836.     var logged =[];
  3837.     var file = Orion.NewFile();
  3838.     file.Open(MonsterPositions);
  3839.     while(true){
  3840.         Orion.Wait(2000);
  3841.         var monsters = Orion.FindType('-1', '-1', ground, 'mobile', '18', 'murderer');
  3842.         file.Append(MonsterPositions);
  3843.  
  3844.         for(var i=0;i<monsters.length;i++){
  3845.             var monster = Orion.FindObject(monsters[i]);
  3846.             if(logged.indexOf(monsters[i])==-1 && monster.Graphic() != '0x0190' && monster.Graphic() != '0x0191' ){
  3847.                 logged.push(monsters[i]);
  3848.                 var txt= monster.Serial()+";+Monster: "+monster.X()+" "+monster.Y()+" 1 "+monster.Name();
  3849.                 file.WriteLine(txt);
  3850.             }
  3851.         }
  3852.         file.Close();
  3853.         if(logged.length >200){
  3854.         logged =[];
  3855.         }
  3856.     }
  3857. }
  3858. /*
  3859. ######################################################
  3860. ### File: Scripts/Helpers/MoveItems.oajs
  3861. ######################################################
  3862. */
  3863.  
  3864. function DropItem() {
  3865.     Orion.Print("Zamezery item vyhazuje po 1 ks krok po kroku 9x");
  3866.     DropItem(9);
  3867. }
  3868.  
  3869.  
  3870. //postupne vyhazuje zvoleny item pod nohy, hleda pouze v kontejneru ve kterem se nachazel zvoleny item
  3871. function DropItem(coun) {
  3872.     var memory = {};
  3873.     var count = parseInt(coun);
  3874.     Orion.Print("Zamer item k vyhazovani -> " + count);
  3875.     Orion.AddObject("trg");
  3876.     while (Orion.HaveTarget()) Orion.Wait(100);
  3877.     var target = Orion.FindObject('trg');
  3878.     var graphic = target.Graphic();
  3879.     var color = target.Color();
  3880.     var container = target.Container();
  3881.     var cnt = 0;
  3882.     Orion.ClearJournal("stop");
  3883.     var myX = Player.X();
  3884.     var myY = Player.Y();
  3885.     var item = Orion.FindType(graphic, color, container);
  3886.     if (item.length < 1) {
  3887.         Orion.Print("Nemas predmety");
  3888.         return;
  3889.     }
  3890.     Orion.DropHere(item[0], 1);
  3891.     Orion.Print(myX + ":" + myY);
  3892.     memory[myX + ":" + myY] = true;
  3893.     if (memory[myX + ":" + myY] === true) {
  3894.         Orion.Print("WOOWOWO");
  3895.     }
  3896.  
  3897.     while (!Orion.InJournal('stop', 'my')) {
  3898.         if (Player.X() != myX || Player.Y() != myY) {
  3899.             myX = Player.X();
  3900.             myY = Player.Y();
  3901.             if (cnt >= count) return;
  3902.             if (memory[myX + ":" + myY] === true) continue;
  3903.             var item = Orion.FindType(graphic, color, container);
  3904.             if (item.length < 1) {
  3905.                 Orion.Print("Nemas predmety");
  3906.                 return;
  3907.             }
  3908.  
  3909.             Orion.DropHere(item[0], 1);
  3910.  
  3911.  
  3912.             memory[myX + ":" + myY] = true;
  3913.             Orion.Wait(200);
  3914.             cnt = cnt + 1;
  3915.         }
  3916.         Orion.Wait(200);
  3917.     }
  3918.     Orion.Print("konec");
  3919. }
  3920.  
  3921.  
  3922. // TakeAll - presune vsechny predmety do lotbaglu ze zamereneho kontejneru- treba jej prvne otevrit
  3923. function TakeAll() {
  3924.     Orion.AddObject("trg");
  3925.     while (Orion.HaveTarget()) Orion.Wait(100);
  3926.     var target = Orion.FindObject('trg');
  3927.     var items = Orion.FindType(any, any, target.Serial());
  3928.  
  3929.     for (var i = 0; i < items.length; i++) {
  3930.         if (Player.Weight() > Player.MaxWeight() - 20) break;
  3931.         Orion.MoveItem(items[i], 0, 'lotBag');
  3932.         Orion.Wait(100);
  3933.     }
  3934.     Orion.RemoveObject('trg');
  3935. }
  3936.  
  3937.  
  3938. function DropR(x,y,z){
  3939.     Orion.DropDraggedItemRelative(x,y,z);
  3940. }
  3941.  
  3942.  
  3943. // OpenAllContainers - otevre vsechny kontejnery ve zvojelen kontejneru
  3944. function OpenAllContainers(serial) {
  3945.     Orion.OpenContainer(serial, 500);
  3946.     var fnd = Orion.FindType(allContainers, '0xFFFF', serial);
  3947.     if (!fnd.length) return;
  3948.     for (var i = 0; i < fnd.length; i++) {
  3949.         OpenAllContainers(fnd[i]);
  3950.         Orion.Wait(100);
  3951.     }
  3952. }
  3953.  
  3954. // Presun - presune vsechny predmety z 1 do 2 kontejneru, v pripadepresunu k postave zastavi po dosazeni maximalni vahy
  3955. function Presun() {
  3956.     Orion.Print('Zamer bagl odkud ');
  3957.     Orion.AddObject("vetech");
  3958.     while (Orion.HaveTarget()) {
  3959.         Orion.Wait(100);
  3960.     }
  3961.     var bagl = Orion.FindObject('vetech');
  3962.     Orion.Click(bagl.Serial());
  3963.     Orion.RemoveObject("vetech");
  3964.     Orion.Print('Zamer bagl KAM ');
  3965.     Orion.AddObject("vetech");
  3966.     while (Orion.HaveTarget()) {
  3967.         Orion.Wait(100);
  3968.     }
  3969.     var bagl2 = Orion.FindObject('vetech');
  3970.     Orion.RemoveObject("vetech");
  3971.  
  3972.     var items = Orion.FindType(any, any, bagl.Serial());
  3973.     Orion.Print("items: "+items.length);
  3974.     for (var i = 0; i < items.length; i++) {
  3975.         if (Player.Weight() > Player.MaxWeight() - 20) break;
  3976.         Orion.MoveItem(items[i], 1, bagl2.Serial());
  3977.         Orion.Wait(200);
  3978.  
  3979.     }
  3980. }
  3981.  
  3982. /*
  3983. ######################################################
  3984. ### File: Scripts/Helpers/OpanDoors.oajs
  3985. ######################################################
  3986. */
  3987.  
  3988.  
  3989. // OpenDoor - otevira/zavira dvere
  3990. function OpenDoor() {
  3991.     var portaFechada = Orion.FindType('0x3EB2|0x3EB1|0x0675|0x0677|0x0679|0x067B|0x067D|0x067F|0x0681|0x0683|0x0685|0x0687|0x0689|0x068B|0x068D|0x068F|0x0691|0x0693|0x0695|0x0697|0x0699|0x069B|0x069D|0x069F|0x06A1|0x06A3|0x06A5|0x06A7|0x06A9|0x06AB|0x06AD|0x06AF|0x06B1|0x06B3|0x06B5|0x06B7|0x06B9|0x06BB|0x06BD|0x06BF|0x06C1|0x06C3|0x06C5|0x06C7|0x06C9|0x06CB|0x06CD|0x06CF|0x06D1|0x06D3|0x06D5|0x06D7|0x06D9|0x06DB|0x06DD|0x06DF|0x06E1|0x06E3|0x06E5|0x06E7|0x06E9|0x06EB|0x06ED|0x06EF|0x06F1|0x06F3|0x06F5|0x0824|0x0826|0x0828|0x082A|0x082C|0x082E|0x0830|0x0832|0x0839|0x083B|0x083D|0x083F|0x0841|0x0843|0x0845|0x0847|0x084C|0x084E|0x0850|0x0852|0x0854|0x0856|0x0858|0x085A|0x0866|0x0868|0x086A|0x086C|0x086E|0x0870|0x0872|0x0874|0x1FED|0x1FEF|0x1FF1|0x1FF3|0x1FF5|0x1FF7|0x1FF9|0x1FFB|0x00E8|0x00EA|0x00EC|0x00EE|0x00F0|0x00F2|0x00F4|0x00F6|0x0314|0x0316|0x0318|0x031A|0x031C|0x031E|0x0320|0x0322|0x0324|0x0326|0x0328|0x032A|0x032C|0x032E|0x0330|0x0332|0x0334|0x0336|0x0338|0x033A|0x033C|0x033E|0x0340|0x0342|0x0344|0x0346|0x0348|0x034A|0x034C|0x034E|0x0350|0x0352|0x0354|0x0356|0x0358|0x035A|0x035C|0x035E|0x0360|0x0362', '-1', ground, '', 2);
  3992.     var portaAberta = Orion.FindType('0x3ED5|0x3ED4|0x0676|0x0678|0x067A|0x067C|0x067E|0x0680|0x0682|0x0684|0x0686|0x0688|0x068A|0x068C|0x068E|0x0690|0x0692|0x0694|0x0696|0x0698|0x069A|0x069C|0x069E|0x06A0|0x06A2|0x06A4|0x06A6|0x06A8|0x06AA|0x06AC|0x06AE|0x06B0|0x06B2|0x06B4|0x06B6|0x06B8|0x06BA|0x06BC|0x06BE|0x06C0|0x06C2|0x06C4|0x06C6|0x06C8|0x06CA|0x06CC|0x06CE|0x06D0|0x06D2|0x06D4|0x06D6|0x06D8|0x06DA|0x06DC|0x06DE|0x06E0|0x06E2|0x06E4|0x06E6|0x06E8|0x06EA|0x06EC|0x06EE|0x06F0|0x06F2|0x06F4|0x06F6|0x0825|0x0827|0x0829|0x082A|0x082C|0x082E|0x0831|0x0833|0x083A|0x083C|0x083E|0x0840|0x0842|0x0844|0x0846|0x0848|0x084D|0x084F|0x0851|0x0853|0x0855|0x0857|0x0859|0x085B|0x0867|0x0869|0x086B|0x086D|0x086F|0x0871|0x0873|0x0875|0x1FEE|0x1FF0|0x1FF2|0x1FF4|0x1FF6|0x1FF8|0x1FFA|0x1FFC|0x00E9|0x00EB|0x00ED|0x00EF|0x00F1|0x00F3|0x00F5|0x00F7|0x0315|0x0317|0x0319|0x031B|0x031D|0x031F|0x0321|0x0323|0x0325|0x0327|0x0329|0x032B|0x032D|0x032F|0x0331|0x0333|0x0335|0x0337|0x0339|0x033B|0x033D|0x033F|0x0341|0x0343|0x0345|0x0347|0x0349|0x034B|0x034D|0x034F|0x0351|0x0353|0x0355|0x0357|0x0359|0x035B|0x035D|0x035F|0x0361|0x0363', '-1', ground, '', 3);
  3993.     var shipDoorOpen = Orion.FindType('0x3EB2|0x3EB1|0x3E8A|0x3E85', '-1', ground, '', 18);
  3994.     var shipDoorClosed = Orion.FindType('0x3E89|0x3E84', '-1', ground, '', 18);
  3995.  
  3996.     if (portaAberta.length > 0) {
  3997.         var porta = portaAberta;
  3998.     } else {
  3999.         var porta = portaFechada;
  4000.     }
  4001.     if (porta.length) {
  4002.         var quantity = porta.length;
  4003.         Orion.Print(quantity);
  4004.         for (i = 0; i < quantity; i++) {
  4005.             Orion.UseObject(porta[i]);
  4006.             Orion.Wait(30);
  4007.         }
  4008.     }
  4009.     if (shipDoorClosed.length > 0) {
  4010.         var porta = portaAberta;
  4011.     } else {
  4012.         var porta = shipDoorOpen;
  4013.     }
  4014.     if (porta.length) {
  4015.         var quantity = porta.length;
  4016.         Orion.Print(quantity);
  4017.         for (i = 0; i < quantity; i++) {
  4018.             Orion.UseObject(porta[i]);
  4019.             Orion.Wait(30);
  4020.         }
  4021.     }
  4022. }
  4023.  
  4024. /*
  4025. ######################################################
  4026. ### File: Scripts/Helpers/PathWalking.oajs
  4027. ######################################################
  4028. */
  4029.  
  4030. /// Cesty pro autoprojiti naslapek - pro pouziti prekomentovat
  4031. // Mahat Pavouci
  4032. var pathPavouci = ['N', 'N', 'N', 'NW', 'NE', 'N', 'NW', 'NE', 'NE', 'N', 'NW', 'NW', 'NE', 'N', 'NE', 'N', 'NW', 'N', 'NW', 'N', 'NE', 'N', 'NE', 'N', 'NW', 'N', 'NW', 'N', 'NE', 'N', 'NE', 'N', 'NW', 'N', 'NW', 'N', 'NE', 'N', 'NE', 'N', 'NW', 'N', 'NW', 'N', 'NE', 'N', 'NE', 'N', 'NW', 'N', 'NW', 'N', 'NE', 'N', 'NE', 'N', 'NW', 'N', 'NW', 'N', 'NE', 'N', 'NE', 'N'];
  4033. //Mahat nemrtvi
  4034. var pathNemrtvi = ['N', 'NW', 'N', 'NE', 'N', 'N', 'NW', 'N', 'N', 'N', 'NE', 'N', 'N', 'N', 'N', 'NW', 'N', 'N', 'N', 'N', 'N', 'NE', 'N', 'N', 'N', 'N', 'NW', 'N', 'N', 'N', 'NE', 'N', 'N', 'NW', 'N'];
  4035. //---------------------------------------------------------//
  4036.  
  4037. // WalkPath - projde nastavenou cestu
  4038. function MahatCestaNemrtvi() {
  4039.     var x = Player.X();
  4040.     var y = Player.Y();
  4041.     for (var i = 0; i < pathNemrtvi.length; i++) {
  4042.         Orion.Print('krok cislo: ' + i + ' smer: ' + pathNemrtvi[i]);
  4043.         Walk(pathNemrtvi[i]);
  4044.         while (Player.X() == x && Player.Y() == y) {
  4045.             Orion.Wait(200);
  4046.         }
  4047.     }
  4048.     Orion.Print('Konec Cesty');
  4049. }
  4050.  
  4051. function MahatCestaPavouci() {
  4052.     var x = Player.X();
  4053.     var y = Player.Y();
  4054.     for (var i = 0; i < pathPavouci.length; i++) {
  4055.         Orion.Print('krok cislo: ' + i + ' smer: ' + pathPavouci[i]);
  4056.         Walk(pathPavouci[i]);
  4057.         while (Player.X() == x && Player.Y() == y) {
  4058.             Orion.Wait(200);
  4059.         }
  4060.     }
  4061.     Orion.Print('Konec Cesty');
  4062. }
  4063.  
  4064.  
  4065. // Walk - pomocna fce pro chozeni
  4066. function Walk(dir) {
  4067.     var numDir = null;
  4068.     switch (dir) {
  4069.         case 'N':
  4070.             {
  4071.                 numDir = 0;
  4072.                 break;
  4073.             }
  4074.         case 'NE':
  4075.             {
  4076.                 numDir = 1;
  4077.                 break;
  4078.             }
  4079.         case 'E':
  4080.             {
  4081.                 numDir = 2;
  4082.                 break;
  4083.             }
  4084.         case 'SE':
  4085.             {
  4086.                 numDir = 3;
  4087.                 break;
  4088.             }
  4089.         case 'S':
  4090.             {
  4091.                 numDir = 4;
  4092.                 break;
  4093.             }
  4094.         case 'SW':
  4095.             {
  4096.                 numDir = 5;
  4097.                 break;
  4098.             }
  4099.         case 'W':
  4100.             {
  4101.                 numDir = 6;
  4102.                 break;
  4103.             }
  4104.         case 'NW':
  4105.             {
  4106.                 numDir = 7;
  4107.                 break;
  4108.             }
  4109.     }
  4110.     if (numDir == null) return;
  4111.     Orion.Step(numDir);
  4112.     Orion.Wait(200);
  4113. }
  4114.  
  4115. function Follow(distance){
  4116.     var target=Orion.FindObject(lasttarget);
  4117.     if(Orion.GetGlobal('follow')=='true'){
  4118.         Orion.SetGlobal('follow','false');
  4119.         Orion.Follow(target.Serial(),false);
  4120.         Orion.Print("Follow Off");
  4121.     }
  4122.     else{
  4123.         Orion.SetGlobal('follow','true');
  4124.         Orion.Follow(target.Serial(),true);
  4125.         Orion.Print("Follow ON");
  4126.     }
  4127.  
  4128.    
  4129. }
  4130. /*
  4131. ######################################################
  4132. ### File: Scripts/Helpers/Potions.oajs
  4133. ######################################################
  4134. */
  4135.  
  4136.  
  4137. // Potion - fce zajistujici, ze lze pouzit potion az po prodleve, ne driv + oznameni
  4138. function Potion(name) {
  4139.     //Orion.Print(name);
  4140.         if (Orion.GetGlobal("potionDelay") == '') Orion.SetGlobal("potionDelay", Orion.Now());
  4141.         if (Orion.GetGlobal("potionDelay") > Orion.Now()) {
  4142.             CharPrintDelayed('self', '0x00CD', 'Jeste nemuzes Pit  [' + (Orion.GetGlobal("potionDelay") - Orion.Now()) + ']');
  4143.             return;
  4144.         }
  4145.    
  4146.         switch (name) {
  4147.             case "heal":
  4148.                 {
  4149.                     if (Orion.FindType(0x0F0E, pots[0][1], backpack, 'item', true).length) {
  4150.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[0][2]);
  4151.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[0][3]);
  4152.                         Orion.Say(".potion" + name);
  4153.                         Orion.Print("pijes heal");
  4154.                     }
  4155.                     break;
  4156.                 }
  4157.             case "cure":
  4158.                 {
  4159.                     if (Orion.FindType(0x0F0E, pots[1][1], backpack, 'item', true).length) {
  4160.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[1][2]);
  4161.                         Orion.SetGlobal("cureDuration", Orion.Now() + pots[1][3]);
  4162.                         Orion.Say(".potion" + name);
  4163.                         if(Orion.DisplayTimerExists(47)){
  4164.                             Orion.RemoveDisplayTimer(47);
  4165.                         }
  4166.                         Orion.AddDisplayTimer(47, pots[1][3], 'UnderChar', 'Line|Bar', 'Cure', 0, 0, '0x00F3', 0xFF, 'orange');
  4167.    
  4168.                     } else {
  4169.                         if (Orion.FindType(0x0F0E, pots[2][1], backpack, 'item', true).length) {
  4170.                             Orion.SetGlobal("potionDelay", Orion.Now() + pots[2][2]);
  4171.                             Orion.SetGlobal("cureDuration", Orion.Now() + pots[2][3]);
  4172.                             Orion.Say(".potion" + name);
  4173.                             if(Orion.DisplayTimerExists(47)){
  4174.                                 Orion.RemoveDisplayTimer(47);
  4175.                             }
  4176.                             Orion.AddDisplayTimer(47, pots[2][3], 'UnderChar', 'Line|Bar', 'Cure', 0, 0, '0x00F3', 0xFF, 'orange');
  4177.                         } else Orion.Print("Nemas " + name + " potion");
  4178.                     }
  4179.    
  4180.    
  4181.                     break;
  4182.                 }
  4183.             case "invis":
  4184.                 {
  4185.                     if (Orion.FindType(0x0F0E, pots[3][1], backpack, 'item', true).length) {
  4186.                         Orion.WarMode(0);
  4187.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[3][2]);
  4188.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[3][3]);
  4189.                         Orion.Say(".potion" + name);
  4190.                     } else {
  4191.                         Orion.Print("Nemas " + name + " potion");
  4192.                     }
  4193.                     break;
  4194.                 }
  4195.             case "refresh":
  4196.                 {
  4197.                     if (Orion.FindType(0x0F0E, pots[4][1], backpack, 'item', true).length) {
  4198.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[4][2]);
  4199.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[4][3]);
  4200.                         Orion.Say(".potion" + name);
  4201.                     } else {
  4202.                         if (Orion.FindType(0x0F0E, pots[5][1], backpack, 'item', true).length) {
  4203.                             Orion.SetGlobal("potionDelay", Orion.Now() + pots[5][2]);
  4204.                             Orion.SetGlobal("potionDuration", Orion.Now() + pots[5][3]);
  4205.                             Orion.Say(".potion" + name);
  4206.                         } else Orion.Print("Nemas " + name + " potion");
  4207.                     }
  4208.                     break;
  4209.                 }
  4210.             case "reflex":
  4211.                 {
  4212.                     if (Orion.FindType(0x0F0E, pots[6][1], backpack, 'item', true).length) {
  4213.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[6][2]);
  4214.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[6][3]);
  4215.                         Orion.Say(".potion" + name);
  4216.                     } else {
  4217.                         Orion.Print("Nemas " + name + " potion");
  4218.                     }
  4219.                     break;
  4220.                 }
  4221.             case "mobility":
  4222.                 {
  4223.                     if (Orion.FindType(0x0F0E, pots[7][1], backpack, 'item', true).length) {
  4224.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[7][2]);
  4225.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[7][3]);
  4226.                         Orion.Say(".potion" + name);
  4227.                     } else {
  4228.                         Orion.Print("Nemas " + name + " potion");
  4229.                     }
  4230.                     break;
  4231.                 }
  4232.             case "nightsight":
  4233.                 {
  4234.                     if (Orion.FindType(0x0F0E, pots[8][1], backpack, 'item', true).length) {
  4235.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[8][2]);
  4236.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[8][3]);
  4237.                         Orion.Say(".potion" + name);
  4238.                        // Orion.SetLight(1, 0);
  4239.                        // Orion.SetLight(0, 0);
  4240.                     } else {
  4241.                         Orion.Print("Nemas " + name + " potion");
  4242.                     }
  4243.                     break;
  4244.                 }
  4245.             case "agility":
  4246.                 {
  4247.                     if (Orion.FindType(0x0F0E, pots[9][1], backpack, 'item', true).length) {
  4248.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[9][2]);
  4249.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[9][3]);
  4250.                         Orion.Say(".potion" + name);
  4251.                     } else {
  4252.                         if (Orion.FindType(0x0F0E, pots[10][1], backpack, 'item', true).length) {
  4253.                             Orion.SetGlobal("potionDelay", Orion.Now() + pots[10][2]);
  4254.                             Orion.SetGlobal("potionDuration", Orion.Now() + pots[10][3]);
  4255.                             Orion.Say(".potion" + name);
  4256.                         } else Orion.Print("Nemas " + name + " potion");
  4257.                     }
  4258.                     break;
  4259.                 }
  4260.             case "strength":
  4261.                 {
  4262.                     if (Orion.FindType(0x0F0E, pots[11][1], backpack, 'item', true).length) {
  4263.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[11][2]);
  4264.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[11][3]);
  4265.                         Orion.Say(".potion" + name);
  4266.                     } else {
  4267.                         if (Orion.FindType(0x0F0E, pots[12][1], backpack, 'item', true).length) {
  4268.                             Orion.SetGlobal("potionDelay", Orion.Now() + pots[12][2]);
  4269.                             Orion.SetGlobal("potionDuration", Orion.Now() + pots[12][3]);
  4270.                             Orion.Say(".potion" + name);
  4271.                         } else Orion.Print("Nemas " + name + " potion");
  4272.                     }
  4273.                     break;
  4274.                 }
  4275.             case "clever":
  4276.                 {
  4277.                     if (Orion.FindType(0x0F0E, pots[13][1], backpack, 'item', true).length) {
  4278.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[13][2]);
  4279.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[13][3]);
  4280.                         Orion.Say(".potion" + name);
  4281.                     } else {
  4282.                         if (Orion.FindType(0x0F0E, pots[14][1], backpack, 'item', true).length) {
  4283.                             Orion.SetGlobal("potionDelay", Orion.Now() + pots[14][2]);
  4284.                             Orion.SetGlobal("potionDuration", Orion.Now() + pots[14][3]);
  4285.                             Orion.Say(".potion" + name);
  4286.                         } else Orion.Print("Nemas " + name + " potion");
  4287.                     }
  4288.                     break;
  4289.                 }
  4290.             case "stoneskin":
  4291.                 {
  4292.                     if (Orion.FindType(0x0F0E, pots[15][1], backpack, 'item', true).length) {
  4293.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[15][2]);
  4294.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[15][3]);
  4295.                         Orion.Say(".potion" + name);
  4296.                     } else {
  4297.                         Orion.Print("Nemas " + name + " potion");
  4298.                     }
  4299.                     break;
  4300.                 }
  4301.             case "reactive":
  4302.                 {
  4303.                     if (Orion.FindType(0x0F0E, pots[16][1], backpack, 'item', true).length) {
  4304.                         Orion.SetGlobal("potionDelay", Orion.Now() + pots[16][2]);
  4305.                         Orion.SetGlobal("potionDuration", Orion.Now() + pots[16][3]);
  4306.                         Orion.Say(".potion" + name);
  4307.                     } else {
  4308.                         Orion.Print("Nemas " + name + " potion");
  4309.                     }
  4310.                     break;
  4311.                 }
  4312.         }
  4313.         if (Orion.GetGlobal("potionDelay") >= Orion.Now()) {
  4314.             Orion.Print("Pouzit potion: " + name);
  4315.         }
  4316.         if(!Orion.DisplayTimerExists(25)){
  4317.             var ti=parseInt(Orion.GetGlobal("potionDelay"))-Orion.Now();
  4318.             Orion.AddDisplayTimer(25,ti,'Top', 'Circle|Bar', 'Potion Delay', 0, 0, '0x0029', 0xFF, 'green');
  4319.         }
  4320.         Bandage();
  4321.     }
  4322.    
  4323.  
  4324.     function ComparePots(a, b) {
  4325.         var aa = Orion.FindObject(a);
  4326.         var bb = Orion.FindObject(a);
  4327.         if (aa.Graphic() == '0x0F0E')
  4328.             return -1;
  4329.         if (bb.Graphic() == '0x0F0E')
  4330.             return 1;
  4331.         return 0;
  4332.     }
  4333.  
  4334.     // MoveAllPots - ve zvolenem kontejneru najde vsechny podkontejnery a ve vsech hleda potion, ktere nasledne presune do 1 zvoleneho kontejneru
  4335. function MoveAllPots() {
  4336.     Orion.Print("Zamer kde hledat");
  4337.     Orion.AddObject("one");
  4338.     var target = Orion.FindObject("one");
  4339.     while (Orion.HaveTarget()) Orion.Wait(100);
  4340.     if (target == null) {
  4341.         Orion.Print("Zamer kde hledat");
  4342.         target = Orion.FindObject("one");
  4343.         while (Orion.HaveTarget()) Orion.Wait(100);
  4344.     }
  4345.     Orion.Print("Zamer kam davat");
  4346.     Orion.AddObject("vysyp");
  4347.     var vys = Orion.FindObject("vysyp");
  4348.     while (Orion.HaveTarget()) Orion.Wait(100);
  4349.     if (vys == null) {
  4350.         Orion.Print("Zamer kam davat");
  4351.         vys = Orion.FindObject("vysyp");
  4352.         while (Orion.HaveTarget()) Orion.Wait(100);
  4353.     }
  4354.     OpenAllContainers(target.Serial());
  4355.     Orion.Wait(200);
  4356.     var fnd = Orion.FindType('0x0F0E', '0xFFFF', target.Serial());
  4357.     for (var i = 0; i < fnd.length; i++) {
  4358.  
  4359.         Orion.MoveItem(fnd[i], 0, vys.Serial());
  4360.         Orion.Wait(100);
  4361.     }
  4362.     Orion.RemoveObject("one");
  4363.     Orion.RemoveObject("vysyp");
  4364. }
  4365.  
  4366. // PotionWatch - fce hlida, kdy postava muze znovu pouzit potion + upozorni na vyprchani Cure efektu
  4367. function PotionWatch() {
  4368.     var annouced = false;
  4369.     var CureAnnouced = false;
  4370.     while (true) {
  4371.         Orion.Wait(500);
  4372.         if (Orion.GetGlobal("cureDuration") < Orion.Now()) {
  4373.             if (!CureAnnouced) {
  4374.                 CureAnnouced = true;
  4375.                 CharPrintDelayed('self', '0x002A', ' !! CURE vyprchalo!!');
  4376.                 Orion.Print(' !! CURE vyprchalo!!');
  4377.             }
  4378.         } else CureAnnouced = false;
  4379.         if (Orion.GetGlobal("potionDelay") < Orion.Now()) {
  4380.             if (!annouced) {
  4381.                 annouced = true;
  4382.                 CharPrintDelayed('self', '0x0044', ' > MUZES PIT <');
  4383.                 Orion.Print(' > MUZES PIT <');
  4384.             }
  4385.         } else {
  4386.  
  4387.         }
  4388.     }
  4389. }
  4390.  
  4391.  
  4392. /*
  4393. ######################################################
  4394. ### File: Scripts/Helpers/RuneBook.oajs
  4395. ######################################################
  4396. */
  4397.  
  4398.  
  4399. function RuneBook(type, runeNum)
  4400. {
  4401.  
  4402.     TextWindow.Clear();
  4403.     Orion.Print('Zamer Truhlu s Runama');
  4404.     var runesMem={};
  4405.     Orion.AddObject("runes");
  4406.     while (Orion.HaveTarget()) Orion.Wait(100);
  4407.     var runesBox = Orion.FindObject('runes');
  4408.     OpenAllContainers(runesBox.Serial());
  4409.     Orion.Wait(200);
  4410.     var fnd = Orion.FindType('0x1F14|0x1F15|0x1F16|0x1F17', any, runesBox.Serial());
  4411.     for (var i = 0; i < fnd.length; i++) {
  4412.         var rune=Orion.FindObject(fnd[i]);
  4413.         Orion.RequestName(rune.Serial(), 100);
  4414.         TextWindow.Print(i+': '+rune.Name());
  4415.  
  4416.         if (!runesMem[rune.Name()])
  4417.         {
  4418.             runesMem[rune.Name()] = rune.Serial();
  4419.             runesMem[i] = rune.Serial();
  4420.         }
  4421.  
  4422.     }
  4423.     TextWindow.Open();
  4424.     Orion.Print('Napis prikaz pro pokracovani! Napriklad recall 0; recall Rhun');
  4425.     var tmp=Orion.WaitJournal('recall |gate ',Orion.Now(), Orion.Now()+30000, 'my');
  4426.     var cmd = tmp.Text().split(' ');
  4427.  
  4428.     if(cmd[0] =='recall'){
  4429.     Orion.Cast('Recall', runesMem[cmd[1]]);
  4430.     return;
  4431.     }
  4432.         if(cmd[0] =='gate'){
  4433.         Orion.Cast('Gate Travel', runesMem[cmd[1]]);
  4434.     return;
  4435.    
  4436.     }
  4437.  
  4438.  
  4439. }
  4440.  
  4441.  
  4442.  
  4443. /*
  4444. ######################################################
  4445. ### File: Scripts/Helpers/ScriptFunctions.oajs
  4446. ######################################################
  4447. */
  4448.  
  4449. function Debug(source, msg) {
  4450.     if (debug) {
  4451.         var time = new Date();
  4452.         TextWindow.Print(source+" [" + time.getHours() + ":" + time.getMinutes() + "] : " + msg);
  4453.         TextWindow.Open();
  4454.     }
  4455. }
  4456.  
  4457. function Map(x, in_min, in_max, out_min, out_max) {
  4458.     return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  4459. };
  4460.  
  4461.  
  4462. function GetProdleva(_private) {
  4463.     Orion.Say(".explevel");
  4464.     Orion.Wait(300);
  4465.     var gum = Orion.GetLastGump();
  4466.     var prod = parseInt(gum.Text(10));
  4467.     gum.Select(Orion.CreateGumpHook(0));
  4468.  
  4469.     return prod;
  4470. }
  4471.  
  4472.  
  4473. function GetNightSightDrink(__private){  
  4474.     var rtn = NightSightDrink;
  4475.     var settings = CharacterSettings[Player.Name()];
  4476.     if(!settings){
  4477.         return rtn;
  4478.     }
  4479.     return settings.NightSightDrink;
  4480. }
  4481.  
  4482. function GetCriticalHits(__private){  
  4483.     var rtn = CriticalHits;
  4484.     var settings = CharacterSettings[Player.Name()];
  4485.     if(!settings){
  4486.         return rtn;
  4487.     }
  4488.     var subSettings = settings.CriticalHits;
  4489.     if(!subSettings){
  4490.         return rtn;
  4491.     }
  4492.     return subSettings;
  4493. }
  4494. function GetAutoDrinkHeal(__private){  
  4495.     var rtn = AutoDrinkHeal;
  4496.     var settings = CharacterSettings[Player.Name()];
  4497.     if(!settings){
  4498.         return rtn;
  4499.     }
  4500.     return settings.AutoDrinkHeal;
  4501. }
  4502. function GetMinVoodooObetHP(__private){  
  4503.     var rtn = MinVoodooObetHP;
  4504.     var settings = CharacterSettings[Player.Name()];
  4505.     if(!settings){
  4506.         return rtn;
  4507.     }
  4508.     var subSettings = settings.MinVoodooObetHP;
  4509.     if(!subSettings){
  4510.         return rtn;
  4511.     }
  4512.     return subSettings;
  4513. }
  4514. function GetGPAmount(__private){  
  4515.     var rtn = GPAmount;
  4516.     var settings = CharacterSettings[Player.Name()];
  4517.     if(!settings){
  4518.         return rtn;
  4519.     }
  4520.     var subSettings = settings.GPAmount;
  4521.     if(!subSettings){
  4522.         return rtn;
  4523.     }
  4524.     return subSettings;
  4525. }
  4526. function GetCheckLineOfSight(__private){  
  4527.     var rtn = CheckLineOfSight;
  4528.     var settings = CharacterSettings[Player.Name()];
  4529.     if(!settings){
  4530.         return rtn;
  4531.     }
  4532.  
  4533.     return settings.CheckLineOfSight;
  4534. }
  4535. function GetAutoArrow(__private){  
  4536.     var rtn = AutoArrow;
  4537.     var settings = CharacterSettings[Player.Name()];
  4538.     if(!settings){
  4539.         return rtn;
  4540.     }
  4541.     return settings.AutoArrow;;
  4542. }
  4543. function GetAutoUnParalyzeSpell(__private){  
  4544.     var rtn = AutoUnParalyzeSpell;
  4545.     var settings = CharacterSettings[Player.Name()];
  4546.     if(!settings){
  4547.         return rtn;
  4548.     }
  4549.     var subSettings = settings.AutoUnParalyzeSpell;
  4550.     if(!subSettings){
  4551.         return rtn;
  4552.     }
  4553.     return subSettings;
  4554. }
  4555. function GetShaman(__private){  
  4556.     var rtn = Shaman;
  4557.     var settings = CharacterSettings[Player.Name()];
  4558.     if(!settings){
  4559.         return rtn;
  4560.     }
  4561.  
  4562.     return settings.Shaman;
  4563. }
  4564. function GetMinimumHP(__private){  
  4565.     var rtn = MinimumHP;
  4566.     var settings = CharacterSettings[Player.Name()];
  4567.     if(!settings){
  4568.         return rtn;
  4569.     }
  4570.     var subSettings = settings.MinimumHP;
  4571.     if(!subSettings){
  4572.         return rtn;
  4573.     }
  4574.     return subSettings;
  4575. }
  4576.  
  4577. function GetMinTargetHP(__private){  
  4578.     var rtn = MinTargetHP;
  4579.     var settings = CharacterSettings[Player.Name()];
  4580.     if(!settings){
  4581.         return rtn;
  4582.     }
  4583.     var subSettings = settings.MinTargetHP;
  4584.     if(!subSettings){
  4585.         return rtn;
  4586.     }
  4587.     return subSettings;
  4588. }
  4589.  
  4590.  
  4591. function GetAutoObet(__private){  
  4592.     var rtn = AutoObet;
  4593.     var settings = CharacterSettings[Player.Name()];
  4594.     if(!settings){
  4595.         return rtn;
  4596.     }
  4597.     return settings.AutoObet
  4598. }
  4599.  
  4600. function GetObetManaGain(__private){  
  4601.     var rtn = ObetManaGain;
  4602.     var settings = CharacterSettings[Player.Name()];
  4603.     if(!settings){
  4604.         return rtn;
  4605.     }
  4606.     var subSettings = settings.ObetManaGain;
  4607.     if(!subSettings){
  4608.         return rtn;
  4609.     }
  4610.     return subSettings;
  4611. }
  4612.  
  4613.  
  4614. function GetCheckLineOfSight(__private){  
  4615.     var rtn = CheckLineOfSight;
  4616.     var settings = CharacterSettings[Player.Name()];
  4617.     if(!settings){
  4618.         return rtn;
  4619.     }
  4620.  
  4621.     return settings.CheckLineOfSight;
  4622. }
  4623.  
  4624.  
  4625.  
  4626. // CustomCountDown - pomocna fce pro odpocet s rychlym "zmizenim" textu
  4627. function CustomCountDown(serial, partDelay, parts, text, color) {
  4628.     for (i = parts; i > 0; i--) {
  4629.         Orion.Wait(partDelay);
  4630.         CharPrintDelayed(serial, color, text + " " + i);
  4631.     }
  4632. }
  4633.  
  4634.  
  4635. // GetActualXEp - pomocna funkce, vytahne z explevel gumpu informace o expech
  4636. function GetActualExp(__private) {
  4637.     Orion.Say(".explevel");
  4638.     Orion.Wait(200);
  4639.     var gum = Orion.GetLastGump();
  4640.     var exp = gum.Text(2);
  4641.     gum.Select(Orion.CreateGumpHook(0));
  4642.     var expS = exp.split('/');
  4643.     var rtn = { Min: expS[0], Max: expS[1] };
  4644.     return rtn;
  4645. }
  4646. /*
  4647. ######################################################
  4648. ### File: Scripts/Helpers/SwitchArms.oajs
  4649. ######################################################
  4650. */
  4651.  
  4652. // SwitchArm - fce pro prehazovani nastavenych zbrani v zalozce Agents/Dress pod oznacenim 1,2,3,4
  4653. function SwitchArm2() {
  4654.     SwitchArm(2);
  4655. }
  4656.  
  4657. function SwitchArm3() {
  4658.     SwitchArm(3);
  4659. }
  4660.  
  4661. function SwitchArm4() {
  4662.     SwitchArm(4);
  4663. }
  4664.  
  4665. // SwitchArm - fce pro prehazovani nastavenych zbrani v zalozce Agents/Dress pod oznacenim 1,2,3,4
  4666. function SwitchArm(max) {
  4667.     for (var i = 0; i <= max; i++) {
  4668.         if (Orion.GetGlobal("weap") == i) {
  4669.             if ((i + 1) > max) {
  4670.                 Orion.Arm(1);
  4671.                 Orion.SetGlobal("weap", 1);
  4672.             } else {
  4673.                 Orion.Arm(i + 1);
  4674.                 Orion.SetGlobal("weap", i + 1);
  4675.             }
  4676.             var prodleva = GetProdleva();
  4677.             Orion.SetGlobal("prodleva", prodleva);
  4678.             Orion.Print("Equipnuta zbran : " + Orion.GetGlobal("weap") + " prodleva uderu: " + prodleva);
  4679.             var lhand = Orion.ObjAtLayer('LeftHand');
  4680.             var rhand = Orion.ObjAtLayer('RightHand');
  4681.             if(lhand!=null){
  4682.                 Orion.SetGlobal('lhand',lhand.Serial());
  4683.             }
  4684.             if(rhand!=null){
  4685.                 Orion.SetGlobal('rhand',rhand.Serial());
  4686.             }
  4687.             return;
  4688.         }
  4689.     }
  4690. }
  4691.  
  4692.  
  4693. // EquipWeap - pomocna fce nahazujici aktualni zbran set (1,2,3,4...) do ruky
  4694. function EquipWeap(_private) {
  4695.     Orion.SetGlobal('Equipping', true);
  4696.     Orion.Wait(100);
  4697.     var lhand = Orion.ObjAtLayer('LeftHand');
  4698.     var rhand = Orion.ObjAtLayer('RightHand');
  4699.  
  4700.     if(lhand!=null){
  4701.         if(lhand.Serial()!=Orion.GetGlobal('lhand'))
  4702.         {
  4703.             Orion.Arm(Orion.GetGlobal("weap"));
  4704.         }
  4705.     }
  4706.     if(rhand==null){
  4707.         if(rhand==null ||rhand.Serial()!=Orion.GetGlobal('rhand'))
  4708.         {
  4709.             Orion.Arm(Orion.GetGlobal("weap"));
  4710.         }
  4711.     }
  4712.     if (IsShieldEquiped()) {
  4713.         Orion.Arm(Orion.GetGlobal("weap"));
  4714.     }
  4715.     Orion.SetGlobal('Equipping', false);
  4716. }
  4717.  
  4718.  
  4719. // IsShieldEquiped - pomocna fce pro zjisteni, zda je stit v ruce
  4720. function IsShieldEquiped(__private) {
  4721.     var shields = ['0x1B76', '0x1B77', '0x1B7B'];
  4722.     var lhand = Orion.ObjAtLayer('LeftHand');
  4723.     if (!lhand) return false;
  4724.     for (var i = 0; i < shields.length; i++) {
  4725.         if (lhand.Graphic() == shields[i]) {
  4726.             return true;
  4727.         }
  4728.     }
  4729.     return false;
  4730. }
  4731.  
  4732. /*
  4733. ######################################################
  4734. ### File: Scripts/Helpers/Targeting.oajs
  4735. ######################################################
  4736. */
  4737.  
  4738. // SwitchTarget - prepinani pro fci TargetNext mezi Mordor,Gondor a PVM rezimem
  4739. function SwitchTarget() {
  4740.     switch (Orion.GetGlobal("trgMode")) {
  4741.         case '0': // All -> Monsters
  4742.             Orion.SetGlobal("trgMode", 1);
  4743.             Orion.Print('0x0044',"Target Monsters");
  4744.             return;
  4745.         case '1': // Monsters -> Red
  4746.             Orion.SetGlobal("trgMode", 2);
  4747.             Orion.Print('0x0022',"Target Red Humans");
  4748.         return;
  4749.         case '2': // Red Humanoids => blue
  4750.             Orion.SetGlobal("trgMode", 3);
  4751.             Orion.Print('0x0005',"Target Blue Humans");
  4752.         return;
  4753.         case '3': // Blue Humanoids => All
  4754.             Orion.SetGlobal("trgMode", 0);
  4755.             Orion.Print('0x038A',"Target All");
  4756.         return;
  4757.         default:
  4758.             Orion.SetGlobal("trgMode", 0);
  4759.             Orion.Print('0x038A',"Target All");
  4760.         return;
  4761.     }
  4762.  
  4763. }
  4764.  
  4765. // TargetNext - Najde a zatargetuje cil, podle nastaveni G,M,PVM
  4766. function TargetNext() {
  4767.     var serial = FindNearestTarget();
  4768.     if (!serial.length) return;
  4769.     CharPrintDelayed(serial, '30', Orion.RequestName(serial, 100) + ' - TARGET',15);
  4770.     Orion.ClientLastTarget(serial);
  4771.     Orion.TargetObject(serial);
  4772.     var trg = Orion.FindObject(serial);
  4773.     Orion.RequestName(lasttarget, 200);
  4774.  
  4775.     var color = 0x0DA;
  4776.     if (trg.Notoriety() == 1) {
  4777.         color = 0x05A;
  4778.     }
  4779.     if (trg.Notoriety() == 6) {
  4780.         color = 0x08A;
  4781.     }
  4782.     Orion.Print(color, trg.Name() + " [" + trg.Hits() + "% HP] dist: " + Orion.GetDistance(lasttarget));
  4783.     Orion.Ignore(serial);
  4784. }
  4785.  
  4786. // TargetClosestRed - targetne nejblizsi charakter s cervenou karmou
  4787. function TargetClosestRed() {
  4788.     Orion.IgnoreReset();
  4789.     var humans = Orion.FindType(any, any, ground, 'near|mobile|ignoreself|ignorefriends', '18', 'murderer');
  4790.    
  4791.     if (humans.length) {
  4792.         CharPrintDelayed(humans[0], '30', Orion.RequestName(humans[0], 100) + ' - TARGET');
  4793.         Orion.ClientLastTarget(humans[0]);
  4794.         Orion.TargetObject(humans[0]);
  4795.         Orion.Ignore(humans[0]);
  4796.     }
  4797. }
  4798.  
  4799.  
  4800. // SetTarg - fce pro manualni oznaceni aktualniho targetu + vytahnuti zalozky na nastavene souradnice
  4801. function SetTarg() {
  4802.     Orion.Print("zamer novy target");
  4803.     Orion.AddObject("trg");
  4804.     while (Orion.HaveTarget()) Orion.Wait(100);
  4805.     var obj = Orion.FindObject("trg");
  4806.     Orion.RemoveObject("trg");
  4807.     if (obj == null) return;
  4808.     Orion.ClientLastTarget(obj.Serial());
  4809.     Orion.TargetObject(obj.Serial());
  4810. }
  4811.  
  4812. // FindNearestTarget - pomocna fce pro targetovani, ignoruje sebe a postavy s Friends Listu
  4813. function FindNearestTarget(__private) {
  4814.     var targets = Orion.FindType(any, any, ground, 'near|mobile|ignoreself|ignorefriends', '18');
  4815.     for (i = 0; i < targets.length; i++) {
  4816.         var tmp = Orion.FindObject(targets[i]).CanChangeName();
  4817.         if (tmp) {
  4818.             Orion.Ignore(targets[i]);
  4819.         }
  4820.     }
  4821.     switch (Orion.GetGlobal("trgMode")) {
  4822.         case '0': // All
  4823.             targets = Orion.FindType(any, any, ground, 'mobile|ignoreself|ignorefriends', '18');
  4824.             break;
  4825.         case '1': // Monsters
  4826.             targets = Orion.FindType('!0x0190|!0x0191', any, ground, 'mobile|ignoreself|ignorefriends', '18', 'murderer');
  4827.             break;
  4828.         case '2': // Red Humanoids
  4829.             targets = Orion.FindType('0x0190|0x0191', any, ground, 'human|ignoreself|ignorefriends', '18', 'murderer');
  4830.             break;
  4831.         case '3': // Blue Humanoids
  4832.             targets = Orion.FindType('0x0190|0x0191', any, ground, 'human|ignoreself|ignorefriends', '18', 'innocent');
  4833.             break;
  4834.     }
  4835.     //Orion.Print(targets.length);
  4836.         if (targets.length < 1) {
  4837.         Orion.IgnoreReset();
  4838.         return '';
  4839.     }
  4840.     if (targets.length < 2) {
  4841.         Orion.IgnoreReset();
  4842.     }
  4843.     //Orion.Ignore(targets[0]);
  4844.     return targets[0];
  4845.  
  4846. }
  4847.  
  4848. // KillALl - fce pouzije prikaz all kill na vsechny cervene v okoli s vyjimkou summonu a zvere, kterym porouci
  4849. function KillAll() {
  4850.     var list = Orion.FindType(any, any, ground, 'mobile|ignoreself|ignorefriends', '17', 'murderer');
  4851.     for (var i = 0; i < list.length; i++) {
  4852.         var targ = Orion.FindObject(list[i]);
  4853.         if (targ.CanChangeName()) {
  4854.             continue;
  4855.         }
  4856.         Orion.Say("all kill");
  4857.         Orion.WaitTargetObject(list[i]);
  4858.         Orion.Wait(250);
  4859.     }
  4860.  
  4861. }
  4862.  
  4863.  
  4864. function AttackLast() {
  4865.     Orion.Attack(lasttarget);
  4866.     var trg = Orion.FindObject(lasttarget);
  4867.     Orion.RequestName(lasttarget, 200);
  4868.  
  4869.     // blue 0x05A
  4870.     // red 0x08A
  4871.     // purple 0x0DA
  4872.     var color = 0x0DA;
  4873.     if (trg.Notoriety() == 1) {
  4874.         color = 0x05A;
  4875.     }
  4876.     if (trg.Notoriety() == 6) {
  4877.         color = 0x08A;
  4878.     }
  4879.     Orion.Print(color, trg.Name() + " [" + trg.Hits() + "% HP] dist: " + Orion.GetDistance(lasttarget));
  4880.     Orion.SetGlobal('attack',true);
  4881.     if (Orion.GetGlobal("probo") == 'true'){
  4882.         Orion.Print("Nemuzes utocit kdyz chces bodat");
  4883.     }
  4884.  
  4885. }
  4886. /*
  4887. ######################################################
  4888. ### File: Scripts/Helpers/TidyBackpack.oajs
  4889. ######################################################
  4890. */
  4891.  
  4892. //    { Graphic: 0x0E79, MinX: 44, MinY: 65, MaxX: 142, MaxY: 132 }, //
  4893. // Uklid - fce usporadajici itemy v conteiner, primarne potiony
  4894. function Uklid() { // rozmery chest bednicky
  4895.     var MinX = 0;
  4896.     var MinY = 0;
  4897.     var MaxX = 0;
  4898.  
  4899.     Orion.AddObject("tt");
  4900.     while (Orion.HaveTarget()) Orion.Wait(100);
  4901.     var target = Orion.FindObject('tt');
  4902.     for (var i = 0; i < containerTypes.length; i++) {
  4903.         if (containerTypes[i].Graphic == target.Graphic()) {
  4904.             MinX = containerTypes[i].MinX;
  4905.             MinY = containerTypes[i].MinY;
  4906.             MaxX = containerTypes[i].MaxX;
  4907.             MaxY = containerTypes[i].MaxY;
  4908.             break;
  4909.         }
  4910.     }
  4911.     var x = MinX;
  4912.     var y = MinY;
  4913.  
  4914.     var items = Orion.FindType('0xFFFF', '0xFFFF', target.Serial());
  4915.     items.sort(ComparePots);
  4916.     Orion.Print(items.length);
  4917.     for (var i = 0; i < items.length; i++) {
  4918.         Orion.Print(x + ": " + y);
  4919.         Orion.MoveItem(items[i], 0, target.Serial(), x, y);
  4920.         Orion.Wait(100);
  4921.         x += 13;
  4922.         if (x >= MaxX) {
  4923.             x = MinX;
  4924.             y += 20;
  4925.         }
  4926.     }
  4927.     Orion.RemoveObject("tt");
  4928. }
  4929. /*
  4930. ######################################################
  4931. ### File: Scripts/Helpers/TimedCharPrint.oajs
  4932. ######################################################
  4933. */
  4934.  
  4935. // CharPrintDelayed - fce pro rychle mizijici text nad postavou
  4936. function CharPrintDelayed(serial, color, text, speechDelay) {
  4937.     var sDelay = 15;
  4938.     if (speechDelay) {
  4939.         sDelay = speechDelay;
  4940.     }
  4941.     var oldUse = Orion.OptionScaleSpeech();
  4942.     var oldDelay = Orion.OptionScaleSpeechDelay();
  4943.  
  4944.     Orion.OptionScaleSpeech(true);
  4945.     Orion.OptionScaleSpeechDelay(sDelay);
  4946.  
  4947.     Orion.CharPrint(serial, color, text);
  4948.     Orion.Wait(100);
  4949.  
  4950.     Orion.OptionScaleSpeech(oldUse);
  4951.     Orion.OptionScaleSpeechDelay(55);
  4952. }
  4953. /*
  4954. ######################################################
  4955. ### File: Scripts/Helpers/Vetesnik.oajs
  4956. ######################################################
  4957. */
  4958.  
  4959. // ID - fce pro identifikaci vsech predmetu v zamerenem batohu vyuzivajici gump po osloveni vetesnika
  4960. function ID() {
  4961.     Orion.Print('Zamer vetesnika');
  4962.     Orion.AddObject("vetech");
  4963.     while (Orion.HaveTarget()) {
  4964.         Orion.Wait(100);
  4965.     }
  4966.     var vete = Orion.FindObject('vetech');
  4967.     Orion.RemoveObject("vetech");
  4968.  
  4969.     Orion.Print('Zamer bagl s itemama k ID');
  4970.     Orion.AddObject("vetech");
  4971.     while (Orion.HaveTarget()) {
  4972.         Orion.Wait(100);
  4973.     }
  4974.     var bagl = Orion.FindObject('vetech');
  4975.     Orion.RemoveObject("vetech");
  4976.     var items = Orion.FindType(any, any, bagl.Serial());
  4977.     for (var i = 0; i < items.length; i++) {
  4978.         Orion.UseObject(vete.Serial());
  4979.         Orion.Wait(200);
  4980.         var gum = Orion.GetLastGump();
  4981.         gum.Select(Orion.CreateGumpHook(1));
  4982.         Orion.WaitTargetObject(items[i]);
  4983.         Orion.Wait(200);
  4984.     }
  4985. }
  4986.  
  4987. // InfoItems - Projde vsechny itemy v zamerene truhle a vypise jejich vlastnosti
  4988. function InfoItems() {
  4989.     Orion.Print('Zamer item truhlu');
  4990.     Orion.AddObject("vetech");
  4991.     while (Orion.HaveTarget()) {
  4992.         Orion.Wait(100);
  4993.     }
  4994.     var target = Orion.FindObject('vetech');
  4995.     Orion.RemoveObject("vetech");
  4996.     TextWindow.Clear();
  4997.     TextWindow.Open();
  4998.     var items = Orion.FindType(any, any, target.Serial());
  4999.     for (var i = 0; i < items.length; i++) {
  5000.         InfoItem(items[i]);
  5001.     }
  5002. }
  5003.  
  5004. function InfoItem(Serial) {
  5005.     var staffTypes = ['0x13F9', '0x13F8', '0x0DF0', '0x0DF1']; //GN,GN,BS,BS
  5006.     var target = Orion.FindObject(Serial);
  5007.     for (var a = 0; a < containerTypes.length; a++) {
  5008.         if (target.Graphic() == containerTypes[a].Graphic) {
  5009.             Orion.Print("Kontejner, preskakuju");
  5010.             return;
  5011.         }
  5012.     }
  5013.     Orion.ClearJournal();
  5014.     Orion.Click(target.Serial());
  5015.     Orion.Wait(300);
  5016.     var txt = "";
  5017.     var txt1 = "";
  5018.     var txt2 = "";
  5019.     for (var i = 0; i < Orion.JournalCount(); i++) {
  5020.         var ln = Orion.JournalLine(i);
  5021.         if (ln.Serial() == target.Serial()) {
  5022.             var staff = false;
  5023.             txt = ln.Text();
  5024.             for (var a = 0; a < staffTypes.length; a++) {
  5025.                 if (target.Graphic() == staffTypes[a]) {
  5026.                     staff = true;
  5027.                 }
  5028.             }
  5029.             try {
  5030.                 if (!staff) {
  5031.                     txt1 = Orion.JournalLine(i + 1).Text();
  5032.                     txt2 = Orion.JournalLine(i + 2).Text();
  5033.                 } else {
  5034.                     txt1 = Orion.JournalLine(i + 3).Text();
  5035.                     txt2 = Orion.JournalLine(i + 4).Text();
  5036.                 }
  5037.             } catch (err) {}
  5038.             Orion.ClearJournal();
  5039.         }
  5040.     }
  5041.  
  5042.     TextWindow.Print(txt + "|" + txt1 + "|" + txt2);
  5043. }
  5044.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement