Advertisement
dzik

Diablo 2 - ETAL - NTUniversalDiabloLeechNoLeader.ntj

Jun 14th, 2014
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var Diablo_PreMessage = "";
  2. var _trapsPreCasted;
  3. var _portalleech = true, trigger = false;
  4. var leechwarn = false;
  5. var SealBoss1 = false, SealBoss2 = false, SealBoss3 = false;
  6. var DiabloDead = false;
  7.  
  8. function NTMain() {
  9.     Include("libs/common/NTCommon.ntl");
  10.     NTC_IncludeLibs();
  11.  
  12.     NTC_IncludeConfig("NTBot/char_configs");
  13.     NT_LoadConfig();
  14.  
  15.     NTSI_LoadNIPFiles("NTBot/item_configs");
  16.  
  17.     NTA_Initialize();
  18.    
  19.     if(!NTTM_CheckAct(4)){
  20.         NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
  21.         return;
  22.     }
  23.  
  24.     NTTMGR_TownManager();
  25.     NTTM_TownMove("portalspot");
  26.    
  27.     if(NTConfig_LeechChaos >= 1)
  28.     {
  29.         RegisterEvent(EVENT_GAMEMSG, UCL_Chat);
  30.         if(NTConfig_UseChatCommandPortal){
  31.             while(!NT_DiabloLeechMessageHandler() && !DiabloDead){             
  32.                 Delay(500);
  33.             }
  34.             for(var i = 0 ; i < 100 && me.areaid == 103 ; i++){
  35.                 if(DiabloDead == true){break;}
  36.                 NTM_UsePortal("BluePortal", 108);
  37.                 Delay(500);
  38.             }
  39.         }
  40.         else
  41.         {
  42.             myStartArea = me.areaid;
  43.             while(1){
  44.                 NTM_UsePortal("BluePortal", 108);
  45.                 if(me.areaid == 108){
  46.                     break;
  47.                 }
  48.                 Delay(500);
  49.             }
  50.         }
  51.  
  52.     }
  53.    
  54.    
  55.     if(NTConfig_LeechChaos == 2 && me.areaid == 108)
  56.     {  
  57.         if(NTConfig_LeechBo){NTP_DoPrecast(true, NTConfig_LeechBo);}
  58.         if(!NTConfig_LeechBo){ Delay(Random(3, 5)); }
  59.    
  60.  
  61.         if (me.y > 5353){
  62.             NTCS_ClearPosition(30, EntranceSort);
  63.             var FrontToStarX = [7792, 7794, 7791, 7777, 7813, 7769, 7782, 7802, 7819, 7768, 7770, 7791, 7819, 7804];
  64.             var FrontToStarY = [5564, 5529, 5495, 5486, 5486, 5445, 5421, 5421, 5446, 5390, 5355, 5355, 5376, 5340];
  65.             for (var i = 0; i < FrontToStarX.length; i += 1) {
  66.                 NTM_MoveTo(108, FrontToStarX[i], FrontToStarY[i]);
  67.                 NTCS_ClearPosition(35, EntranceSort);
  68.             }
  69.         }
  70.  
  71.         for (i = 0; i < 2; i += 1) {
  72.             NTM_MoveTo(108, 7784, 5310);
  73.             NTCS_ClearPosition(30, SealSort);
  74.             NTC_PingDelay(i < 1 ? 1000 : 10);
  75.         }
  76.  
  77.  
  78.         NTCS_ClearPosition(30, SealSort);
  79.  
  80.         if (!NT_OpenSealsInt()) {
  81.             NTC_SendMsgToScript("NTBotGame.ntj", "NT_OpenSealsInt()");
  82.             return;
  83.         }
  84.         if(me.classid == NTC_CHAR_CLASS_SORCERESS)
  85.             //NTM_MoveTo(108, 7793, 5278);
  86.             NTM_MoveTo(108, 7796, 5294);
  87.         else
  88.             NTM_MoveTo(108, 7796, 5294);
  89.  
  90.         var _diablo
  91.         while(!_diablo && !DiabloDead)
  92.         {
  93.             _diablo = NTC_FindUnit(NTC_UNIT_MONSTER, 243);
  94.             NTCS_DiaSpam();
  95.         }
  96.  
  97.         NTA_KillMonster(243);
  98.    
  99.         NTSI_PickItems();
  100.     }
  101.    
  102.     if(me.areaid == 108 && NTConfig_LeechChaos == 1)
  103.             ChaosLeechFollow();
  104.    
  105.     if(NTConfig_LeechChaos == 0)
  106.     {
  107.         RegisterEvent(EVENT_GAMEMSG, UCL_ChaosChat);
  108.         while(_portalleech) {NTC_Delay(250);}
  109.     }
  110.    
  111.     //NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
  112.     ExitGame();
  113. }
  114.  
  115. function NT_OpenSealsInt() {
  116.     var _unit;
  117.     var _result;
  118.  
  119.     _unit = GetPresetUnits(108, NTC_UNIT_OBJECT, 396);
  120.  
  121.     if (!_unit) {
  122.         return false;
  123.     }
  124.     if (_unit[0].roomy * 5 + _unit[0].y == 5275) {
  125.         _result = NT_OpenVizierSealInt(1);
  126.     } else {
  127.         _result = NT_OpenVizierSealInt(2);
  128.     }
  129.  
  130.     //NTP_DoPrecast(true);
  131.  
  132.     _unit = GetPresetUnits(108, NTC_UNIT_OBJECT, 394);
  133.     if (_unit[0].roomx * 5 + _unit[0].x == 7773) {
  134.         _result = NT_OpenDeSeisSealInt(1);
  135.     } else {
  136.         _result = NT_OpenDeSeisSealInt(2);
  137.     }
  138.     if (!_result) {
  139.         return false;
  140.     }
  141.     //NTP_DoPrecast(true, NTConfig_LeechBo);
  142.     NTCS_ClearPosition(40, SealSortB);
  143.  
  144.     _unit = GetPresetUnits(108, NTC_UNIT_OBJECT, 392);
  145.     if (!_unit) {
  146.         return false;
  147.     }
  148.     if (_unit[0].roomx * 5 + _unit[0].x == 7893) {
  149.         _result = NT_OpenVenomSealInt(1);
  150.     } else {
  151.         _result = NT_OpenVenomSealInt(2);
  152.     }
  153.     //NTP_DoPrecast(true);
  154.     return _result;
  155. }
  156.  
  157. function NT_OpenVizierSealInt(type) {
  158.     var i;
  159.  
  160.  
  161.         if (type === 1) {
  162.             var vx = [7767, 7756, 7744, 7747, 7750, 7741, 7729, 7720, 7720, 7721, 7719, 7712, 7700, 7687, 7676, 7666];
  163.             var vy = [5292, 5284, 5275, 5290, 5303, 5310, 5314, 5312, 5301, 5288, 5273, 5292, 5294, 5294, 5292, 5307];
  164.         } else {
  165.             var vx = [7768, 7755, 7741, 7733, 7723, 7714, 7707, 7680, 7666, 7655];
  166.             var vy = [5289, 5295, 5282, 5291, 5300, 5282, 5315, 5310, 5311, 5282];
  167.         }
  168.         for (i = 0; i < vx.length; i += 1) {
  169.             NTM_MoveTo(108, vx[i], vy[i]);
  170.             NTCS_ClearPosition(30, SealSort);
  171.         }
  172.  
  173.  
  174.     if (!NT_OpenSealInt(395) || !NT_OpenSealInt(396)) {
  175.         return false;
  176.     }
  177.     if (type == 1) {
  178.         NTM_MoveTo(108, 7691, 5292);
  179.     } else {
  180.         NTM_MoveTo(108, 7695, 5316);
  181.     }
  182.  
  183.     NTCS_Preattack(GetLocaleString(2851));
  184.     NTCS_ClearPosition(40, DistanceSort);
  185.     NTA_KillMonster(GetLocaleString(2851)); // Grand Vizier of Chaos
  186.     NTCS_ClearPosition(40, DistanceSort);
  187.  
  188.     if(NTConfig_IdInField){
  189.         NT_FieldID();
  190.     } return true;
  191. }
  192.  
  193. function NT_OpenDeSeisSealInt(type) {
  194.     var i, n;
  195.  
  196.  
  197.         if (type === 1) {
  198.             var sx = [7791, 7783, 7800, 7809, 7785, 7773, 7773, 7776, 7794, 7811, 7817, 7815, 7798]; // Shape of "2"
  199.             var sy = [5265, 5256, 5247, 5232, 5230, 5222, 5212, 5194, 5194, 5193, 5177, 5157, 5155];
  200.         } else {
  201.             var sx = [7786, 7801, 7786, 7787, 7810, 7811, 7810, 7790, 7774, 7773, 7794]; // shape of an "S" or "5"
  202.             var sy = [5263, 5249, 5245, 5227, 5233, 5215, 5198, 5194, 5181, 5156, 5154];
  203.         }
  204.         for (var i = 0; i < sx.length; i += 1) {
  205.             NTM_MoveTo(108, sx[i], sy[i]);
  206.             NTCS_ClearPosition(30, type === 1 ? SealSort : SealSortB);
  207.         }
  208.  
  209.     if (!NT_OpenSealInt(394)) {
  210.         return false;
  211.     }
  212.     if (type == 1) {
  213.         NTM_MoveTo(108, 7797, 5201);
  214.         for (i = 0; i < 3; i += 1) {
  215.             NTM_TeleportTo(7794, 5227);
  216.         }
  217.     } else {
  218.         NTM_MoveTo(108, 7798, 5186);
  219.     }
  220.  
  221.     NTCS_Preattack(GetLocaleString(2852));
  222.     NTCS_ClearPosition(40, DistanceSort);
  223.     NTA_KillMonster(GetLocaleString(2852)); // Lord De Seis
  224.     NTCS_ClearPosition(40, DistanceSort);
  225.  
  226.     if(NTConfig_IdInField){
  227.         NT_FieldID();
  228.     } return NTM_MoveTo(108, 7800, 5255);
  229. }
  230.  
  231. function NT_OpenVenomSealInt(type) {
  232.  
  233.         if (type === 1) {
  234.             var IX = [7825, 7827, 7834, 7845, 7855, 7852, 7875, 7896, 7917]; // shape of a "t"
  235.             var IY = [5293, 5276, 5291, 5315, 5301, 5278, 5293, 5295, 5291];
  236.         } else {
  237.             var IX = [7822, 7826, 7832, 7850, 7868, 7877, 7891, 7907, 7927, 7932]; // looks like a hook
  238.             var IY = [5297, 5278, 5307, 5278, 5297, 5276, 5276, 5276, 5279, 5298];
  239.         }
  240.         for (var i = 0; i < IX.length; i += 1) {
  241.             NTM_MoveTo(108, IX[i], IY[i]);
  242.             NTCS_ClearPosition(30, type === 1 ? SealSort : SealSortB);
  243.         }
  244.  
  245.  
  246.     if (!NT_OpenSealInt(393) || !NT_OpenSealInt(392)) {
  247.         return false;
  248.     }
  249.     if (type === 1) {
  250.         type = 1; // temp
  251.     } else {
  252.         NTM_MoveTo(108, 7933, 5299);
  253.     }
  254.  
  255.     NTCS_Preattack(GetLocaleString(2853));
  256.     NTCS_ClearPosition(40, DistanceSort);
  257.     NTA_KillMonster(GetLocaleString(2853)); // Infector of Souls
  258.     NTCS_ClearPosition(40, DistanceSort);
  259.  
  260.     if(NTConfig_IdInField){
  261.         NT_FieldID();
  262.     }
  263.     if (NTC_PutSkill(124, NTC_HAND_RIGHT)) {
  264.         NTC_PingDelay(1000);
  265.     } return true;
  266. }
  267.  
  268. function NT_OpenSealInt(classid) {
  269.     var warn;
  270.     if(classid == 395 || classid == 393)
  271.         return true;
  272.     switch (classid) {
  273.     case 396:
  274.     case 394:
  275.     case 392:
  276.         warn = true;
  277.         break;
  278.     default:
  279.         warn = false;
  280.         break;
  281.     }
  282.     var i, seal;
  283.     for (i = 0; i < 5; i += 1) {
  284.         NTM_MoveToPresetUnit(108, 2, classid, classid === 394 ? 5 : 2, classid === 394 ? -5 : 0);
  285.         seal = NTC_FindUnit(NTC_UNIT_OBJECT, classid);
  286.         if (!seal) {
  287.             return false;
  288.         }
  289.  
  290.         //NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, seal);
  291.         NTC_Delay(classid === 394 ? 1000 : 500);
  292.  
  293.         while(!seal.mode) {
  294.                 NTC_Delay(350);
  295.             }
  296.         if(seal.mode)
  297.             return true;
  298.         }
  299.     return false;
  300. }
  301.  
  302. function NTA_MonsterStats(unit) {
  303.     this.name = unit.name;
  304.     this.x = unit.x;
  305.     this.y = unit.y;
  306.     this.gid = unit.gid;
  307.     this.classid = unit.classid;
  308.     this.spectype = unit.spectype;
  309. }
  310.  
  311. function DistanceSort(unitA, unitB) {
  312.     if (GetDistance(me.x, me.y, unitA.x, unitA.y) < GetDistance(me.x, me.y, unitB.x, unitB.y)) {
  313.         return -1;
  314.     }
  315.     return 1;
  316. }
  317.  
  318. function EntranceSort(unitA, unitB) {
  319.     if (GetDistance(unitA.x, unitA.y, 7790, 5544) < GetDistance(unitB.x, unitB.y, 7790, 5544)) {
  320.         return -1;
  321.     }
  322.     return 1;
  323. }
  324.  
  325. function SealSort(unitA, unitB) {
  326.     if (GetDistance(unitA.x, unitA.y, 7784, 5310) < GetDistance(unitB.x, unitB.y, 7784, 5310)) {
  327.         return -1;
  328.     }
  329.     return 1;
  330. }
  331.  
  332. function SealSortB(unitA, unitB) {
  333.     if (GetDistance(unitA.x, unitA.y, 7800, 5255) < GetDistance(unitB.x, unitB.y, 7800, 5255)) {
  334.         return -1;
  335.     }
  336.     return 1;
  337. }
  338.  
  339. function NTCS_Preattack(name) {
  340.     var i, n, target, pos, positions;
  341.  
  342.     target = NTC_FindUnit(1, name, 10);
  343.  
  344.     switch (me.classid) {
  345.         case 0:
  346.             break;
  347.         case 1:
  348.             break;
  349.         case 2:
  350.             break;
  351.         case 3:
  352.             if (!target) {
  353.                 return;
  354.             }
  355.             positions = [[6, 11], [0, 8], [8, -1], [-9, 2], [0, -11], [8, -8]];
  356.             for (i = 0; i < positions.length; i += 1) {
  357.                 if (CheckCollision(me.areaid, target.x + positions[i][0], target.y + positions[i][1], 1)) { // check if we can move there
  358.                     NTM_MoveTo(108, target.x + positions[i][0], target.y + positions[i][1]);
  359.                     NTC_PutSkill(NTConfig_AttackSkill[2], NTC_HAND_RIGHT);
  360.                     for (n = 0; n < 8; n += 1) {
  361.                         NTC_CastSkill(NTConfig_AttackSkill[1], 2);
  362.                     }
  363.                     break;
  364.                 }
  365.             }
  366.             break;
  367.         case 4:
  368.             if (!target || NTConfig_AttackSkill[0] < 0) {
  369.                 return;
  370.             }
  371.             pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, 20, 4);
  372.             if (pos) {
  373.                 NTM_MoveTo(108, pos[0], pos[1]);
  374.             }
  375.             for (i = 0; i < 2; i += 1) {
  376.                 NTC_CastSkill(130, NTC_HAND_RIGHT);
  377.                 NTC_Delay(150);
  378.             }
  379.             break;
  380.         case 5:
  381.             break;
  382.         case 6:
  383.             break;
  384.     }
  385. }
  386.  
  387. function OpenStashes(range) {
  388.     var i, unit,
  389.         objects = [GetLocaleString(3274)],
  390.         orgx = me.x,
  391.         orgy = me.y;
  392.  
  393.     for (i = 0; i < objects.length; i += 1) {
  394.         unit = NTC_FindUnit(NTC_UNIT_OBJECT, objects[i]);
  395.         if (unit) {
  396.             do {
  397.                 if (GetDistance(orgx, orgy, unit.x, unit.y) <= range) {
  398.                     if (NTC_OpenChest(unit)) {
  399.                         NTSI_PickItems();
  400.                     }
  401.                 }
  402.             } while (unit.GetNext());
  403.         }
  404.     }
  405. }
  406.  
  407. function NTT_CheckPotionSafe() {
  408.     var i, items, hpCheck, mpCheck;
  409.     items = me.GetItems();
  410.     if (NTConfig_BeltColType.indexOf("hp") > -1) {
  411.         for (i = 0; i < items.length; i += 1) {
  412.             if (!hpCheck && items[i].mode === 2 && items[i].code.indexOf("hp") > -1) {
  413.                 hpCheck = true;
  414.             }
  415.         }
  416.     } else {
  417.         hpCheck = true;
  418.     }
  419.     if (NTConfig_BeltColType.indexOf("mp") > -1) {
  420.         for (i = 0; i < items.length; i += 1) {
  421.             if (!mpCheck && items[i].mode === 2 && items[i].code.indexOf("mp") > -1) {
  422.                 mpCheck = true;
  423.             }
  424.         }
  425.     } else {
  426.         mpCheck = true;
  427.     }
  428.     return !(hpCheck && mpCheck);
  429. }
  430.  
  431. function NTA_Dodge(target, distance) {
  432.     var i, j, coordx, coordy, monster, count,
  433.         maxcount = 999,
  434.         coords = [],
  435.         goodCoords = [],
  436.         monList = [],
  437.         angles = [45, 90, 135, 180, 225, 270, 305, 360];
  438.     for (i = 0; i < angles.length; i += 1) {
  439.         coordx = Math.round((Math.cos(angles[i] * Math.PI / 180)) * distance + target.x);
  440.         coordy = Math.round((Math.sin(angles[i] * Math.PI / 180)) * distance + target.y);
  441.         if (CheckCollision(me.areaid, coordx, coordy, 1)) {
  442.             coords.push([coordx, coordy]);
  443.         }
  444.     }
  445.     if (coords.length === 0) { // no valid positions - don't move
  446.         return true;
  447.     }
  448.     coords.sort(NTA_SortRooms);
  449.     monster = GetUnit(1);
  450.     if (monster) {
  451.         do {
  452.             if (monster.hp > 0) {
  453.                 monList.push(new NTA_MonsterStats(target));
  454.             }
  455.         } while (monster.GetNext());
  456.     }
  457.     for (i = 0; i < coords.length; i += 1) {
  458.         count = 0;
  459.         for (j = 0; j < monList.length; j += 1) {
  460.             if (monList[j].hp > 0 && GetDistance(monList[j].x, monList[j].y, coords[i][0], coords[i][1]) < 10) {
  461.                 count += 1;
  462.             }
  463.         }
  464.         if (count < maxcount) {
  465.             goodCoords = [coords[i][0], coords[i][1]];
  466.             maxcount = count;
  467.             if (count === 0) {
  468.                 break;
  469.             }
  470.         }
  471.     }
  472.     if (goodCoords.length > 0) { // just in case goodCoords is empty (shouldn't happen)
  473.         if (Math.abs(me.x - goodCoords[0]) < 3 && Math.abs(me.y - goodCoords[1]) < 3) { // close enough
  474.             return true;
  475.         }
  476.         Say("!Dodge " + target.name);
  477.         NTM_MoveTo(me.areaid, goodCoords[0], goodCoords[1]);
  478.     }
  479.     return true;
  480. }
  481.  
  482. function NTCS_ClearPosition(range, sortFunc, spectype, classid) {
  483.     var i, orgx, orgy, monList, ignoreList, target, result,
  484.         gidAttack = [],
  485.         dodgeIDs = [310, 362],
  486.         attackcount = 0;
  487.     if (NTConfig_AttackSkill[1] < 0 || NTConfig_AttackSkill[3] < 0) {
  488.         return false;
  489.     }
  490.     switch (arguments.length) {
  491.     case 0:
  492.         range = 20;
  493.     case 1:
  494.         sortFunc = DistanceSort;
  495.     case 2:
  496.         spectype = false;
  497.     case 3:
  498.         classid = false;
  499.         break;
  500.     }
  501.     orgx = me.x;
  502.     orgy = me.y;
  503.     ignoreList = [];
  504.     MainLoop : while (attackcount < 300) {
  505.         monList = [];
  506.         target = NTC_FindUnit(NTC_UNIT_MONSTER);
  507.         if (target) {
  508.             do {
  509.                 if (target.IsAttackable()) {
  510.                     if ((me.classid === 1 || me.classid === 2 || me.classid === 6) && NTConfig_Dodge && GetDistance(me, target) < 7 && dodgeIDs.indexOf(target.classid) > -1) {
  511.                         NTA_Dodge(target, 15);
  512.                         continue MainLoop;
  513.                     }
  514.                     if (ignoreList.indexOf(target.gid) < 0 && GetDistance(orgx, orgy, target.x, target.y) <= range) {
  515.                         if (NTA_IsValidMonster(target)) {
  516.                             monList.push(new NTA_MonsterStats(target));
  517.                         } else {
  518.                             ignoreList.push(target.gid);
  519.                         }
  520.                     }
  521.                 }
  522.             } while (target.GetNext());
  523.         }
  524.         if (monList.length === 0) {
  525.             break;
  526.         }
  527.         monList.sort(sortFunc);
  528.         target = NTC_FindUnit(NTC_UNIT_MONSTER, monList[0].gid);
  529.         if (target && target.IsAttackable() && OutOfBounds(target)) {
  530.             result = NTA_Attack(target, attackcount % 30 === 0);
  531.             switch (result) {
  532.             case 1:
  533.                 monList.shift();
  534.                 ignoreList.push(target.gid);
  535.                 break;
  536.             case 2:
  537.             case 3:
  538.                 if(!gidAttack[target.gid]) {
  539.                     gidAttack[target.gid] = 0;
  540.                 }
  541.                 gidAttack[target.gid] += 1;
  542.                 if (gidAttack[target.gid] > NTConfig_LowMaxAttacks) {
  543.                     monList.shift();
  544.                     ignoreList.push(target.gid);
  545.                 }
  546.                 attackcount += 1;
  547.                 if (target.mode === 0 || target.mode === 12) {
  548.                     NTSI_FastPick();
  549.                 }
  550.                 break;
  551.             default:
  552.                 return false;
  553.             }
  554.         } else {
  555.             monList.shift();
  556.             ignoreList.push(target.gid);
  557.         }
  558.     }
  559.     switch (me.classid) {
  560.         case NTC_CHAR_CLASS_PALADIN:
  561.             if (attackcount > 2 && (parseInt(me.hp * 100/ me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp * 100 / me.mpmax) < NTConfig_UseRedemptionMP)) {
  562.                 if (NTC_PutSkill(124, NTC_HAND_RIGHT)) {
  563.                     NTC_PingDelay(1000);
  564.                 }
  565.             }
  566.             break;
  567.         case NTC_CHAR_CLASS_NECROMANCER:
  568.             if (typeof(NTA_SkeletonArmy) === 'function') { // old summon code
  569.                 NTA_SkeletonArmy(NTConfig_SkeletonArmy);
  570.                 NTA_MageArmy(NTConfig_MageArmy);
  571.                 NTA_ReviveArmy(NTConfig_ReviveArmy);
  572.             } else {
  573.                 NTA_RaiseArmy(); // new summon code
  574.             }
  575.             break;
  576.         case NTC_CHAR_CLASS_SORCERESS:
  577.             if (me.GetState(30) === 0) {
  578.                 NTC_CastSkill(58, NTC_HAND_RIGHT);
  579.             }
  580.             break;
  581.         case NTC_CHAR_CLASS_BARBARIAN:
  582.             if (attackcount > 0) {
  583.                 if (typeof(MWL_FindItem) === 'function') { // in case of using muddy's item find (like myself)
  584.                     MWL_FindItem(20);
  585.                 } else if (NTConfig_UseFindItem && !NTA_CheckForCloseMonsters(10)) {
  586.                     NTA_FindItem(NTConfig_FindItemRange);
  587.                 }
  588.             }
  589.             break;
  590.     }
  591.     if (attackcount > 0) {
  592.         NTSI_PickItems();
  593.     }
  594.     if (NTConfig_OpenChest) {
  595.         OpenStashes(range);
  596.     }
  597.     if (NTT_CheckMerc()) {
  598.         NTTMGR_VisitTown();
  599.     }
  600.     if (NTT_CheckPotionSafe()) {
  601.         NTTMGR_VisitTown();
  602.     }
  603.     if (NTConfig_IdInField) {
  604.         if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
  605.             NT_FieldID();
  606.         }
  607.     } return true;
  608. }
  609.  
  610. function NTA_SortRooms(a, b) {
  611.     if (GetDistance(me.x, me.y, a[0], a[1]) < GetDistance(me.x, me.y, b[0], b[1])) {
  612.         return -1;
  613.     }
  614.     return 1;
  615. }
  616.  
  617. function NT_DiabloLeechMessageHandler(){/////
  618.     var _msg = NT_File("logs/messagecomands/"+me.charname+"-diablo.txt", 0);
  619.     if (_msg && _msg != Diablo_PreMessage){
  620.         Diablo_PreMessage = _msg;
  621.         if(_msg.substring(_msg.indexOf("/") + 1) == "takedtp"){
  622.             //Print(COLOR_2 + "retrieved take tp message diablo");
  623.             return true;
  624.         }
  625.     }
  626.     return false;
  627. }
  628.  
  629. function UCL_Chat(msg, type)
  630. {
  631.     if(type == 0 && (msg.indexOf(NTConfig_TakeTpDiablo) != -1) && (msg.indexOf(NTConfig_Leader) != -1))
  632.     {
  633.         if(me.areaid == 103)
  634.         {
  635.             if(NTConfig_LeechChaos == 1){Delay(NTConfig_followDelay);}
  636.             while(me.areaid != 108)
  637.             {
  638.                 NTM_UsePortal("BluePortal", 108);
  639.                 Delay(50);
  640.             }
  641.         return;
  642.         }
  643.     }
  644.    
  645.     if(type == 0 && !trigger && (msg.indexOf(NTConfig_CS_SafeTP) != -1) && (msg.indexOf(NTConfig_Leader) != -1) && me.areaid == 108 && me.y > 5405)
  646.         {
  647.             trigger = true;return;
  648.         }
  649.    
  650.     if(type == 0 && (msg.indexOf("Vizier dead.") != -1) && (msg.indexOf(NTConfig_Leader) != -1))
  651.         {SealBoss1 = true; return;}
  652.        
  653.     if(type == 0 && (msg.indexOf("De Seis dead.") != -1) && (msg.indexOf(NTConfig_Leader) != -1))
  654.         {   SealBoss2 = true; return;}
  655.    
  656.     if(type == 0 && (msg.indexOf("Infector dead.") != -1) && (msg.indexOf(NTConfig_Leader) != -1))
  657.         {   SealBoss3 = true; return;}
  658.    
  659.     if(type == 0 && (msg.indexOf("Diablo Dead.") != -1) && (msg.indexOf(NTConfig_Leader) != -1))
  660.         {   DiabloDead = true;
  661.             //if(me.areaid == 103){NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");}
  662.             //return;
  663.         }
  664.        
  665.     return;
  666. }
  667.  
  668. function UCL_ChaosChat(msg, type)
  669. {
  670.     if(type == 0) {
  671.         var _split = msg.split(":");
  672.         if(_split.length >= 1 && _split[1] != undefined) {
  673.             var _sender = _split[0].substring(3, _split[0].length - 3);
  674.             var _msg = _split[1].substring(1);
  675.             if(_sender == NTConfig_Leader) {
  676.                 switch(_msg) {
  677.                     case "Leech TP up.":
  678.                             NTC_Delay(100);
  679.                             if(me.areaid == 103){
  680.                                 NTM_UsePortal("BluePortal", 108);
  681.                                 NTP_DoPrecast(true);
  682.                             }
  683.                             break;
  684.                     case "Vizier dead.":
  685.                     case "De Seis dead.":
  686.                     case "Infector dead.":                 
  687.                             NTC_Delay(100);
  688.                             if(me.areaid == 108){
  689.                                 NTM_UsePortal("BluePortal", 103);
  690.                                 if(me.areaid != 103){NTTM_CheckAct();}
  691.                                 NTTM_TownMove("portalspot");
  692.                             }
  693.                             break;                     
  694.                     case "Diablo TP up.":
  695.                             NTC_Delay(100);
  696.                             if(me.areaid == 103){
  697.                                 NTM_UsePortal("BluePortal", 108);
  698.                                 Delay(500);
  699.                                 NTM_MoveTo(me.areaid, ChaosLocx, ChaosLocy);
  700.                                 NTP_DoPrecast(true);
  701.                             }
  702.                             break;
  703.                     }
  704.                 }
  705.             }
  706.         }
  707.     if(type == 0 && msg.indexOf("Diablo Dead.") != -1 && msg.indexOf(NTConfig_Leader) != -1) {
  708.             if(me.areaid == 108)
  709.                 {Delay(500);
  710.                 NTM_MoveTo(me.areaid, 7769, 5284);
  711.                 NTM_UsePortal("BluePortal", 103);
  712.                 _portalleech = false;
  713.                 }
  714.         }
  715.        
  716.     return;
  717. }
  718.  
  719. var chaosentrance = [7791, 5571,7793, 5553, 7793, 5535, 7793, 5520, 7793, 5505, 7776, 5490, 7769, 5475,  7769, 5460, 7769, 5445, 7769, 5430, 7776, 5415, 7776, 5400, 7769, 5385, 7769, 5370, 7776, 5355, 7776, 5340, 7776, 5325]
  720. var chaosfollow = [7776, 5340, 7776, 5325, 7768, 5314, 7752, 5314, 7730, 5314, 7709 , 5291];
  721. var chaosfollow1 =[7725, 5276, 7750, 5273, 7770, 5271, 7774, 5260, 7777, 5250, 7785, 5241, 7800, 5232, 7814, 5229];
  722. var chaosfollow2 =[7814, 5232, 7814, 5229, 7814, 5245, 7814, 5262, 7821, 5280, 7835, 5280, 7845, 5280, 7855, 5290, 7874, 5293];
  723.  
  724. function ChaosLeechFollow()
  725. {  
  726.     NTConfig_SnagRange = 15;
  727.  
  728.     //me.showenemyonautomap = true;
  729.    
  730.     if (me.y > 5353 && me.areaid == 108) {
  731.  
  732.         NTM_MoveTo(108, 7792, 5540);
  733.         NTP_DoPrecast(true, NTConfig_LeechBo);
  734.         for(var e = 4 ; e < chaosentrance.length ; e+=2){
  735.             while(!My_Safetoadvance())
  736.                 {   if( e == 0){FallBack(); return;}
  737.                     if(leechwarn && e >= 2)
  738.                         {e=e-2;NTM_MoveTo(108, chaosentrance[e], chaosentrance[e+1]);}
  739.                     Delay(100);
  740.                     if(trigger)
  741.                     {
  742.                         NTTM_CheckAct();
  743.                         //Print("Trigger");
  744.                         Delay(300);
  745.                         while(me.areaid !=108){ NTM_UsePortal("BluePortal", 108);Delay(300);}
  746.                         return ChaosLeechFollow();
  747.                     }
  748.                    
  749.                 }
  750.             NTM_MoveTo(108, chaosentrance[e], chaosentrance[e+1]);
  751.  
  752.         }
  753.     }
  754.    
  755.     sealbosswaitloc(396);
  756.  
  757.     NTP_DoPrecast(true, NTConfig_LeechBo);
  758.    
  759.     for(var e = 2 ; e < chaosfollow.length ; e+=2){
  760.             while(!My_Safetoadvance())
  761.                 {   if(leechwarn && e == 0){FallBack(); return;}
  762.                     if(leechwarn && e > 0)
  763.                         {e=e-2;NTM_MoveTo(108, chaosfollow[e], chaosfollow[e+1]);}
  764.                     Delay(100);
  765.                 }
  766.             NTM_MoveTo(108, chaosfollow[e], chaosfollow[e+1]);
  767.  
  768.         }
  769.    
  770.     while(!SealBoss1){Delay(200);}
  771.    
  772.     sealbosswaitloc(394);
  773.     NTP_DoPrecast(true, NTConfig_LeechBo);
  774.     for(var e = 0 ; e < chaosfollow1.length ; e+=2){
  775.             while(!My_Safetoadvance())
  776.                 {   if(leechwarn && e == 0){FallBack(); return;}
  777.                     if(leechwarn && e > 0)
  778.                         {e=e-2;NTM_MoveTo(108, chaosfollow1[e], chaosfollow1[e+1]);}
  779.                     Delay(100);
  780.                 }
  781.             NTM_MoveTo(108, chaosfollow1[e], chaosfollow1[e+1]);
  782.         }
  783.    
  784.     while(!SealBoss2){Delay(200);}
  785.  
  786.     sealbosswaitloc(392);
  787.     NTP_DoPrecast(true, NTConfig_LeechBo); 
  788.     for(var e = 0 ; e < chaosfollow2.length ; e+=2){
  789.             while(!My_Safetoadvance())
  790.                 {   if(leechwarn && e == 0){FallBack(); return;}
  791.                     if(leechwarn && e > 0)
  792.                         {e=e-2;NTM_MoveTo(108, chaosfollow2[e], chaosfollow2[e+1]);}
  793.                     Delay(100);
  794.                 }
  795.             NTM_MoveTo(108, chaosfollow2[e], chaosfollow2[e+1]);
  796.  
  797.         }
  798.    
  799.     while(!SealBoss3){Delay(200);}
  800.  
  801.     NTM_MoveTo(108, 7821, 5280, 2);
  802.     NTM_MoveTo(108, ChaosLocx, ChaosLocy, 2);
  803.     NTP_DoPrecast(true, NTConfig_LeechBo);
  804.     while(!DiabloDead)
  805.             Delay(300)
  806.  
  807.     Delay(500);
  808.     NTM_MoveTo(108, 7769, 5284);
  809.     NTM_UsePortal("BluePortal", 103)
  810.  
  811.     return;
  812. }
  813.  
  814. function My_Safetoadvance()
  815. {   var monstdist = 100
  816.     var _enemy = NTC_FindUnit(NTC_UNIT_MONSTER);
  817.     if(!_enemy){Say("!Very Safe"); leechwarn = false; return true;}
  818.     while(_enemy.GetNext())
  819.     {
  820.         if(_enemy.hp > 0 && _enemy.IsAttackable())
  821.         {
  822.             if(_enemy.x < 7765 && _enemy.y > 5321)
  823.                 continue;
  824.             if(_enemy.x < 7767 && _enemy.y < 5268)
  825.                 continue
  826.             if(_enemy.x < 7787 && _enemy.y > 5510)
  827.                 continue
  828.             if(_enemy.x > 7821 && me.y < 5250)
  829.                 continue
  830.             if(GetDistance(me, _enemy) <= 30)
  831.             {   Say("!Danger!!!!");
  832.                 leechwarn = true;
  833.                 return false;
  834.             }
  835.             if(GetDistance(me, _enemy) <= 50)
  836.             {   //Say("!Getting XP");
  837.                 leechwarn = false;
  838.                 return false;
  839.             }
  840.         }
  841.     }
  842.     //Say("!Safe");
  843.     leechwarn = false;
  844.     My_Shrine();
  845.     return true;
  846. }
  847.  
  848. function sealbosswaitloc(classid)
  849. {
  850.  
  851.     var _leechseal = GetPresetUnits(108, NTC_UNIT_OBJECT, classid);
  852.    
  853.     locx = (_leechseal[0].roomx * 5 + _leechseal[0].x);
  854.     locy = (_leechseal[0].roomy * 5 + _leechseal[0].y)
  855.  
  856.     if (locx == 7655 && locy == 5275)
  857.         {chaosfollow.push(7709, 5273);return;}
  858.            
  859.     if (locx == 7815 && locy == 5155)
  860.         {chaosfollow1.push(7810,5215);return;}
  861.        
  862.     if (locx == 7915 && locy == 5315)
  863.         {chaosfollow2.push(7880, 5307);return;}
  864.  
  865.        
  866.     if (locx == 7893 && locy == 5313)
  867.         chaosfollow2.push(7885, 5318);
  868.        
  869.     return;
  870. }
  871.  
  872. function NTCS_DiaSpam(){
  873.     if(me.classid == NTC_CHAR_CLASS_AMAZON){
  874.         if(NTConfig_DiaSpam > 0)
  875.             return NTC_CastSkill(NTConfig_DiaSpam, 0, 7792, 5291);
  876.     }
  877.     else if(me.classid == NTC_CHAR_CLASS_SORCERESS){
  878.         if(NTConfig_DiaSpam > 0)
  879.             return NTC_CastSkill(NTConfig_DiaSpam, 0, 7792, 5291);
  880.     }
  881.     else if(me.classid == NTC_CHAR_CLASS_NECROMANCER){
  882.         if(NTConfig_DiaSpam > 0)
  883.             return NTC_CastSkill(NTConfig_DiaSpam, 0, 7792, 5291);
  884.     }
  885.     else if(me.classid == NTC_CHAR_CLASS_PALADIN){
  886.         if(NTConfig_AttackSkill[3] == 112){
  887.             NTC_PutSkill(NTConfig_AttackSkill[3], NTC_HAND_LEFT);
  888.             NTC_PutSkill(NTConfig_AttackSkill[4], NTC_HAND_RIGHT);
  889.             return NTC_CastSkill(NTConfig_AttackSkill[3], 2, 7792, 5291);
  890.         }
  891.     }
  892.     else if(me.classid == NTC_CHAR_CLASS_BARBARIAN){
  893.         if(NTConfig_DiaSpam > 0)
  894.             return NTC_CastSkill(NTConfig_DiaSpam, 0, 7792, 5291);
  895.     }
  896.     else if(me.classid == NTC_CHAR_CLASS_DRUID){
  897.         if(NTConfig_AttackSkill[3] == 245)
  898.             return NTC_CastSkill(NTConfig_AttackSkill[3], 2, 7792, 5291);
  899.     }
  900.     else if(me.classid == NTC_CHAR_CLASS_ASSASSIN){
  901.         var _attackPos = [7780, 5288, 7792, 5281, 7803, 5289, 7799, 5302, 7785, 5301];
  902.         if(NTConfig_UseTraps && !_trapsPreCasted){
  903.             for(var i=0;i<5;i++) {
  904.                 if(i == 0 || i == 2 || i == 3) // Added delays to prevent trap miscast
  905.                     NTC_Delay(25);
  906.                 if(NTConfig_TrapSet[i] > 0)
  907.                     NTC_CastSkill(NTConfig_TrapSet[i], NTC_HAND_RIGHT, _attackPos[i*2],_attackPos[(i*2)+1]);
  908.             }
  909.             _trapsPreCasted = true;
  910.         }
  911.         if(NTConfig_AttackSkill[3] == 256) {
  912.             if(me.GetSkillStatus(NTConfig_AttackSkill[3]) != 8) {
  913.                 return NTC_CastSkill(NTConfig_AttackSkill[3], 2, 7792, 5291);
  914.             }
  915.         }
  916.     }
  917.     Delay(200);
  918. }
  919.  
  920. function FallBack()
  921. {
  922.     NTTM_CheckAct();
  923.     Print("Follow Failed");
  924.     NTConfig_LeechChaos = 0;
  925.    
  926.     return;
  927. }
  928.  
  929. function My_Shrine()
  930. {  
  931.     var xx = me.x, yy = me.y;
  932.     NTSI_PickItems();
  933.     NTM_MoveTo(me.areaid, xx, yy);
  934.     var shrine = NTC_FindUnit(NTC_UNIT_OBJECT, "shrine");
  935.     if(shrine && shrine.shrinetype == 15 && shrine.mode == 0)
  936.     {   if(GetDistance(me.x, me.y, shrine.x, shrine.y)<=25)
  937.             NTM_MoveTo(108, shrine.x, shrine.y+3);
  938.         if(GetDistance(me.x, me.y, shrine.x, shrine.y)<5)
  939.         {
  940.             NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, shrine);
  941.             NTM_MoveTo(me.areaid, xx, yy);
  942.         }
  943.     }
  944.     return;
  945. }
  946.  
  947. function OutOfBounds(Monst){
  948.    
  949.             if(Monst.x < 7787 && Monst.y > 5501)
  950.                 return false;
  951.             if(Monst.x > 7901 && Monst.y > 5501)
  952.                 return false;              
  953.             if(Monst.x < 7767 && Monst.y > 5321)
  954.                 return false;
  955.             if(Monst.x >7821 && Monst.y > 5321)
  956.                 return false;
  957.             if(Monst.x < 7816 && Monst.x > 7772 && Monst.y > 5452 && Monst.y < 5477)
  958.                 return false;
  959.             //if(Monst.x < 7792 && Monst.x > 7772 && Monst.y > 5451 && Monst.y < 5432)
  960.                 //return false;
  961.                
  962.             //if(Monst.x < 7816 && Monst.x > 7791 && Monst.y < 5412 && Monst.y > 5387)
  963.                 //return false;
  964.            
  965.             if(Monst.x < 7816 && Monst.x > 7772 && Monst.y < 5387 && Monst.y > 5366)
  966.                 return false;
  967.                
  968.             if(Monst.x <7767 && Monst.y < 5267)
  969.                 return false;
  970.             if(Monst.x >7822 && Monst.y < 5267)
  971.                 return false;
  972.             if(Monst.y < 5147)
  973.                 return false;
  974.     return true;
  975. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement