// Public D2BS constants // Character Class const NTC_CHAR_CLASS_AMAZON = 0; const NTC_CHAR_CLASS_SORCERESS = 1; const NTC_CHAR_CLASS_NECROMANCER = 2; const NTC_CHAR_CLASS_PALADIN = 3; const NTC_CHAR_CLASS_BARBARIAN = 4; const NTC_CHAR_CLASS_DRUID = 5; const NTC_CHAR_CLASS_ASSASSIN = 6; // Act 1 NPCs const NTC_NPC_ID_AKARA = 148; const NTC_NPC_ID_WARRIV_ACT_1 = 155; const NTC_NPC_ID_CHARSI = 154; const NTC_NPC_ID_GHEED = 147; const NTC_NPC_ID_KASHYA = 150; const NTC_NPC_ID_CAIN_TRISTRAM = 146; const NTC_NPC_ID_CAIN_ACT_1 = 244; // Act 2 NPCs const NTC_NPC_ID_FARA = 178; const NTC_NPC_ID_LYSANDER = 202; const NTC_NPC_ID_GREIZ = 198; const NTC_NPC_ID_ELZIX = 199; const NTC_NPC_ID_MESHIF_ACT_2 = 210; const NTC_NPC_ID_DROGNAN = 177; const NTC_NPC_ID_ATMA = 176; const NTC_NPC_ID_WARRIV_ACT_2 = 175; const NTC_NPC_ID_CAIN_ACT_2 = 245; const NTC_NPC_ID_JERHYN = 201; const NTC_NPC_ID_TYRAEL_ACT_2 = 251; // Act 3 NPCs const NTC_NPC_ID_MESHIF_ACT_3 = 264; const NTC_NPC_ID_CAIN_ACT_3 = 246; const NTC_NPC_ID_ALKOR = 254; const NTC_NPC_ID_ASHEARA = 252; const NTC_NPC_ID_ORMUS = 255; const NTC_NPC_ID_HRATLI = 253; // Act 4 NPCs const NTC_NPC_ID_CAIN_ACT_4 = 265; const NTC_NPC_ID_HALBU = 257; const NTC_NPC_ID_TYRAEL_ACT_4 = 367; const NTC_NPC_ID_JAMELLA = 405; // Act 5 NPCs const NTC_NPC_ID_CAIN_ACT_5 = 520; const NTC_NPC_ID_TYRAEL_ACT_5 = 521; const NTC_NPC_ID_LARZUK = 511; const NTC_NPC_ID_ANYA_FROZEN_RIVER = 527; const NTC_NPC_ID_ANYA_TOWN = 512; const NTC_NPC_ID_MALAH = 513; const NTC_NPC_ID_QUALKEHK = 515; const NTC_NPC_ID_NIHLATHAK_TOWN = 514; const NTC_NPC_ID_NIHLATHAK_HALLS_OF_VAUGHT = 526; // UNIT types const NTC_UNIT_PLAYER = 0; const NTC_UNIT_NPC = 1; const NTC_UNIT_MERC = NTC_UNIT_NPC; const NTC_UNIT_MONSTER = NTC_UNIT_NPC; const NTC_UNIT_OBJECT = 2; const NTC_UNIT_MISSILE = 3; const NTC_UNIT_ITEM = 4; const NTC_UNIT_TILE = 5; const NTC_UNIT_STASH = 267; const NTC_AREA_ID_ACT_1 = 1; const NTC_AREA_ID_ACT_2 = 40; const NTC_AREA_ID_ACT_3 = 75; const NTC_AREA_ID_ACT_4 = 103; const NTC_AREA_ID_ACT_5 = 109; // COLOR types const NTC_COLOR_BASE_WHITE = 0; const NTC_COLOR_BASE_RED = 1; const NTC_COLOR_BASE_GREEN = 2; const NTC_COLOR_BASE_BLUE = 3; const NTC_COLOR_BASE_GOLD = 4; const NTC_COLOR_BASE_GRAY = 5; const NTC_COLOR_BASE_BLACK = 6; const NTC_COLOR_BASE_GOLD2 = 7; const NTC_COLOR_BASE_ORANGE = 8; const NTC_COLOR_BASE_YELLOW = 9; const NTC_HAND_RIGHT = 0; const NTC_HAND_LEFT = 1; const NTC_CLICK_LDOWN = 0; const NTC_CLICK_LHOLD = 1; const NTC_CLICK_LUP = 2; const NTC_CLICK_RDOWN = 3; const NTC_CLICK_RHOLD = 4; const NTC_CLICK_RUP = 5; const NTC_SHIFT_NONE = 0; const NTC_SHIFT_HOLD = 1; const NTC_DELAY_FRAME = 40; var NTC_ItemQualityToNameList = new Array(9); NTC_ItemQualityToNameList[0] = "None"; NTC_ItemQualityToNameList[1] = "Low Quality"; NTC_ItemQualityToNameList[2] = "Normal"; NTC_ItemQualityToNameList[3] = "Superior"; NTC_ItemQualityToNameList[4] = "Magic"; NTC_ItemQualityToNameList[5] = "Set"; NTC_ItemQualityToNameList[6] = "Rare"; NTC_ItemQualityToNameList[7] = "Unique"; NTC_ItemQualityToNameList[8] = "Crafted"; function NTC_Include(filepath) { if(isIncluded(filepath)) return true; return include(filepath); } function NTC_IncludeConfig() { var _configname; var _configfile; switch(me.classid) { case NTC_CHAR_CLASS_AMAZON: _configname = "NTConfig_Amazon_" + me.charname + ".dbl" break; case NTC_CHAR_CLASS_SORCERESS: _configname = "NTConfig_Sorceress_" + me.charname + ".dbl" break; case NTC_CHAR_CLASS_NECROMANCER: _configname = "NTConfig_Necromancer_" + me.charname + ".dbl" break; case NTC_CHAR_CLASS_PALADIN: _configname = "NTConfig_Paladin_" + me.charname + ".dbl" break; case NTC_CHAR_CLASS_BARBARIAN: _configname = "NTConfig_Barbarian_" + me.charname + ".dbl" break; case NTC_CHAR_CLASS_DRUID: _configname = "NTConfig_Druid_" + me.charname + ".dbl" break; case NTC_CHAR_CLASS_ASSASSIN: _configname = "NTConfig_Assassin_" + me.charname + ".dbl" break; } _configfile = fileOpen("libs/config/" + _configname, 0); if(_configfile) _configfile.close(); else print("ÿc1Can't find " + _configname); NTC_Include("config/" + _configname); } function NTC_IncludeLibs() { NTC_Include("common/NTAreas.dbl"); NTC_Include("common/NTAttack.dbl"); NTC_Include("common/NTMove.dbl"); NTC_Include("common/NTPrecast.dbl"); //NTC_Include("common/NTScreenHook.dbl"); NTC_Include("common/NTSnagIt.dbl"); NTC_Include("common/NTTown.dbl"); NTC_Include("common/NTTownManager.dbl"); NTC_Include("common/NTTownMove.dbl"); } function NTC_DoCast(skillid, usehand, x, y) { var _hand; var _shift; if(arguments.length < 1) return false; if(arguments.length == 1) { _hand = NTC_CLICK_RDOWN; _shift = NTC_SHIFT_NONE; usehand = NTC_HAND_RIGHT; } else { if(usehand == NTC_HAND_RIGHT) { _hand = NTC_CLICK_RDOWN; _shift = NTC_SHIFT_NONE; } else if(usehand == NTC_HAND_LEFT) { _hand = NTC_CLICK_LDOWN; _shift = NTC_SHIFT_NONE; } else { _hand = NTC_CLICK_LDOWN; _shift = NTC_SHIFT_HOLD; usehand = NTC_HAND_LEFT; } } if(NTC_PutSkill(skillid, usehand)) { if(!NTC_ClearCursor()) return false; for(var i = 0 ; i < 5 ; i++) { switch(arguments.length) { case 1: case 2: NTC_DoClick(_hand, _shift); break; case 3: if(x.type != NTC_UNIT_MONSTER) return false; NTC_DoClick(_hand,_shift, x); break; case 4: NTC_DoClick(_hand,_shift, x, y); break; } if(NTC_CheckDoCastInt()) return NTC_WaitCastDone(); } } return false; } function NTC_PutSkill(skillid, hand) { var _sethand; if(NTC_IsPassiveSkill(skillid)) return false; if(!NTC_CheckSkill(skillid)) return false; if(hand == NTC_HAND_RIGHT) _sethand = 2; else _sethand = 3; if(me.getSkill(_sethand) != skillid) { for(var i = 0 ; i < 60 ; i++) { if((i % 20) == 0) me.setSkill(skillid, hand); NTC_Delay(NTC_DELAY_FRAME); if(me.getSkill(_sethand) == skillid) return true; } return false; } return true; } function NTC_CheckSkill(skillid) { var _skill = me.getSkill(skillid, 1); if(_skill > 0) return _skill; return false; } function NTC_GetCastDelay(skillid) { switch(skillid) { // Amazon case 15: return 500; // "Poison Javelin" case 25: return 4000; // "Plague Javelin" case 27: return 1000; // "Immolation Arrow" // Sorceress case 51: return 1400; // "Fire Wall" case 56: return 1200; // "Meteor" case 62: return 2000; // "Hydra" case 59: return 1800; // "Blizzard" case 64: return 1000; // "Frozen Orb" // Paladin case 121: return 1000; // "Fist of the Heavens" // Druid case 225: return 600; // "Firestorm" case 229: return 2000; // "Molten Boulder" case 234: return 2000; // "Eruption" case 244: return 4000; // "Volcano" case 249: return 6000; // "Armageddon" case 250: return 6000; // "Hurricane" case 223: return 1000; // "Werewolf" case 228: return 1000; // "Werebear" case 247: return 1000; // "Grizzly Bear" // Assassin case 275: return 1000; // "Dragon Flight" case 277: return 2000; // "Blade Sentinel" case 268: return 6000; // "Shadow Warrior" case 279: return 6000; // "Shadow Master" } return 0; } function NTC_IsLeftSkill(skillid) { if(NTC_IsPassiveSkill(skillid)) return false; var _leftskilllist = [0,2,4,5,6,7,10,11,12,14,15,16,19,20,21,22,24,25,26,27,30, 31,34,35,36,38,39,41,45,47,49,53,55,64,67,73,84,93,96,97, 101,106,107,111,112,116,121,126,132,133,139,140,143,144, 147,151,152,225,229,230,232,233,238,239,240,242,243,245, 248,251,254,255,256,257,259,260,265,266,269,270,274,275,280]; for(var i = 0 ; i < _leftskilllist.length ; i++) { if(_leftskilllist[i] == skillid) return true; } return false; } function NTC_IsPassiveSkill(skillid) { var _passiveskilllist = [9,13,18,23,29,33,37,61,63,65,69,79,89,127,128, 129,134,135,136,141,145,148,153,224,252,263]; for(var i = 0 ; i < _passiveskilllist.length ; i++) { if(_passiveskilllist[i] == skillid) return true; } return false; } // spectype : 0x00 = Normal Monster, 0x01 = Super Unique, 0x02 = Champion, 0x04 = Boss, 0x08 = Minion function NTC_FindMonster(classid, spectype) { var _monster; if(arguments.length < 1) return false; if(arguments.length < 2) spectype = 0; _monster = NTC_GetUnit(NTC_UNIT_MONSTER, classid); if(_monster) { if(spectype) { do { if(_monster.type == NTC_UNIT_MONSTER && (_monster.spectype & spectype)) return copyUnit(_monster); } while(_monster.getNext()); } else return _monster; } return false; } function NTC_DoWeaponSwitch(switchto) { if(arguments.length < 1) switchto = (me.weaponswitch == 0) ? 1 : 0; else if(me.weaponswitch == switchto) return true; if(!NTC_WaitCastDone()) return false; for(var i = 0 ; i < 75 ; i++) { if((i % 25) == 0) weaponSwitch(0); NTC_Delay(NTC_DELAY_FRAME); if(me.weaponswitch == switchto) return true; } return false; } function NTC_DoClick(button, shift, x, y) { if(button != NTC_CLICK_LDOWN) button = NTC_CLICK_RDOWN; if(!NTC_WaitCastDone()) return false; switch(arguments.length) { case 2: clickMap(button, shift, me.x, me.y); NTC_Delay(100, NTC_DELAY_FRAME); clickMap(button+2, shift, me.x, me.y); return true; case 3: clickMap(button, shift, x); NTC_Delay(100, NTC_DELAY_FRAME); clickMap(button+2, shift, x); return true; case 4: clickMap(button, shift, x, y); NTC_Delay(100, NTC_DELAY_FRAME); clickMap(button+2, shift, x, y); return true; } return false; } function NTC_MyGold() { return me.getStat(14) + me.getStat(15); } function NTC_MyGoldCarry() { return me.getStat(14); } function NTC_StashGoldFull() { var _maxgold; var _level = me.getStat(12); if(_level < 30) _maxgold = Math.floor((_level+10)/10) * 50000; else _maxgold = 800000 + Math.floor((_level-30)/2) * 50000; return (_maxgold == me.getStat(15)); } function NTC_CharGoldFull() { return (me.getStat(14) >= (me.getStat(12)*10000)); } function NTC_CheckOwner(object, ownername) { var _owner; if(!object) return false; _owner = object.getParent(); if(!_owner) return false; if(arguments.length < 2) { if(_owner == me.name || _owner.name == me.name) return true; } else { if(_owner == ownername || _owner.name == ownername) return true; } return false; } function NTC_ItemToCursor(item) { if(me.itemoncursor) return true; for(var i = 0 ; i < 30 ; i++) { if((i % 10) == 0) clickItem(0, item); NTC_Delay(100); if(me.itemoncursor) { NTC_PingDelay(500); return true; } } return false; } function NTC_ClearCursor() { if(!me.itemoncursor) return true; for(var i = 0 ; i < 60 ; i++) { if((i % 20) == 0) NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE); NTC_Delay(NTC_DELAY_FRAME); if(!me.itemoncursor) return true; } return false; } function NTC_GetMerc() { var _merc; for(var i = 0 ; i < 2 ; i++) { _merc = me.getMerc(); if(_merc) { if(_merc.hp > 0 && _merc.mode != 12) return _merc; break; } NTC_Delay(NTC_DELAY_FRAME); } return false; } function NTC_OpenChest(chest) { if(!chest) return false; if(chest.mode > 0) return false; for(var i = 0 ; i < 20 ; i++) { if((i % 5) == 0) chest.interact(); NTC_Delay(100); if(chest.mode > 0) return true; } return false; } function NTC_Delay(amount, random) { if(arguments.length < 2) delay(amount); else delay(amount+rnd(0, random)); } function NTC_PingDelay(amount) { var _currentping = me.ping; if(_currentping > 100) _currentping -= 100; else _currentping = 0; NTC_Delay(amount+_currentping); } function NTC_InTown(who) { var _area; if(arguments.length < 1) who = me; while(who.area == 0) NTC_Delay(NTC_DELAY_FRAME); _area = who.area; return (_area == NTC_AREA_ID_ACT_1 || _area == NTC_AREA_ID_ACT_2 || _area == NTC_AREA_ID_ACT_3 || _area == NTC_AREA_ID_ACT_4 || _area == NTC_AREA_ID_ACT_5); } function NTC_InMyParty(playerName) { var _player; var _myPartyId; for(var i = 0 ; i < 2 ; i++) { _player = getParty(); if(_player) { _myPartyId = _player.partyid; if(_myPartyId != 65535) { do { if(_player.name == playerName && _myPartyId == _player.partyid) return true; } while(_player.getNext()); } break; } NTC_Delay(NTC_DELAY_FRAME); } return false; } function NTC_GetUnit(unittype, classid) { var _unit; for(var i = 0 ; i < 3 ; i++) { if(arguments.length < 2) _unit = getUnit(unittype); else _unit = getUnit(unittype, classid); if(_unit && _unit.type == unittype) return _unit; NTC_Delay(NTC_DELAY_FRAME); } return false; } function NTC_GetPresetUnits(unittype, classid, area) { var _unit; if(arguments.length < 3) area = me.area; for(var i = 0 ; i < 3 ; i++) { if(arguments.length < 2) _unit = getPresetUnits(area, unittype); else _unit = getPresetUnits(area, unittype, classid); if(_unit && _unit.length > 0 && _unit[0].type == unittype) return _unit; NTC_Delay(NTC_DELAY_FRAME); } return false; } function NTC_GetItems(who) { var _items; if(arguments.length < 1) who = me; for(var i = 0 ; i < 2 ; i++) { _items = who.getItems(); if(_items) return _items; NTC_Delay(NTC_DELAY_FRAME); } return false; } function NTC_GetBeltSize() { var _items = NTC_GetItems(); if(!_items) return 1; for(var i = 0 ; i < _items.length ; i++) { if(_items[i].mode == 1 && _items[i].bodylocation == 8) { if(_items[i].code == "lbl" || _items[i].code == "vbl") return 2; else if(_items[i].code == "mbl" || _items[i].code == "tbl") return 3; return 4; } } return 1; } function NTC_FindScript(scriptname) { var _script; var _scriptpath; _script = getScript(); if(_script) { do { _scriptpath = _script.name.toLowerCase(); if(_scriptpath.indexOf(scriptname.toLowerCase()) != -1) return _script; } while(_script.getNext()); } return false; } function NTC_SendMsgToScript(scriptname, msg) { var _script = NTC_FindScript(scriptname); if(_script) { _script.send(msg); return true; } return false; } function NTC_StopScript(scriptname) { var _script = NTC_FindScript(scriptname); if(_script) { _script.stop(); return true; } return false; } function NTC_WaitCastDone() { var _mode; for(var i = 0 ; i < 25 ; i++) { _mode = me.mode; if(!(_mode == 7 || _mode == 8 || (_mode >= 10 && _mode <= 16) || _mode == 18)) return true; NTC_Delay(NTC_DELAY_FRAME); } return false; } function NTC_SendLogToOOG(logString) { return sendCopyData(null, "D2Manager 2.5", (65535<<16)|65535, me.windowtitle+";"+logString); } // Internal function function NTC_CheckDoCastInt() { var _mode; for(var i = 0 ; i < 10 ; i++) { _mode = me.mode; if(_mode == 7 || _mode == 8 || (_mode >= 10 && _mode <= 16) || _mode == 18) return true; NTC_Delay(NTC_DELAY_FRAME); } return false; }