suche d2nt bot assa config plz mit bo usw.
Include("config/NTConfig.ntl"); var NTConfig_CastShadowMaster; var NTConfig_CastShadowWarrior; var NTConfig_CastBrustOfSpeed; var NTConfig_CastFade; var NTConfig_CastBladeShield; var NTConfig_CastCloakOfShadows; function NT_LoadConfig() { //------------------------------------------------------\\ // Modified by CyberVirus \\ // >>> www.forums.d2trade.pl <<< \\ //------------------------------------------------------\\ //---------------------------------------------------------------------------------------------------------------------------\\ // "Script & Boss Configuration": \\ //---------------------------------------------------------------------------------------------------------------------------\\ //------------------------\\ // "Public Baal Settings" \\ //------------------------\\ Baal_WelcomeMessage = "Welcome to my baal runs!" //What to say at beginning of game. Baal_TpUpMessage = "TP up. Might be hot!" //What to say when bot opens TP. Baal_KillBaalMessage = "Let's kill baal! Sorcs, please static." //What to say after last wave, before entering chamber. Baal_NextGameMessage = "NG!" //What to say after killing Baal. NTConfig_BRWisperToFriendList = true; //Set to true to whisper GN+PW to your friend list. //--------------------------\\ // "Public Diablo Settings: \\ //--------------------------\\ Diablo_WelcomeMessage = "Welcome to my chaos runs!" //What to say at beginning of game. Diablo_TpUpMessage = "TP up. Might be hot!" //What to say when bot opens TP. Diablo_KillDiabloMessage = "Diablo time! Stay out of star!" //What to say before engaging Diablo. Diablo_NextGameMessage = "NG!" //What to say after killing Diablo. NTConfig_DRWisperToFriendList = true; //Set to true to whisper GN+PW to your friend list. //-------------------------------------\\ // "Public Tal-Rasha's Tombs Settings" \\ //-------------------------------------\\ TalRasha_TpUpMessage = "TP up. Might be hot!" //What to say when bot opens TP. TalRasha_AfterOpeningTpMessage = "Stay Close!" //What to say after bot opens TP. TalRasha_AfterCleaningTombMessage = "Tomb clear! Take my TP to town and wait for next tomb!" //What to say when bot has cleared a tomb. TalRasha_NextGameMessage = "NG!" //What to say after all tombs are cleared. NTConfig_TombWisperToFriendList = true; //Set to true to whisper GN+PW to your friend list. //----------------\\ // "Public Boss": \\ //----------------\\ //NTConfig_Script.push("NTPublicDiablo.ntj"); // Uncomment (remove "//" at beginning of line) to do public Diablo runs. NTConfig_MakeTpOnStartChaosSanctuary = false; // Set to true to make TP when entering Chaos Sanctuary. NTConfig_MakeTpOnPentagramCenter = true; // Set to true to make tp on Diablo's pentagram. //NTConfig_Script.push("NTPublicBaal.ntj"); // Uncomment to do public Baal runs. NTConfig_PublicKillBaal = true; // Set to true to kill Baal, false to only kill minions. //NTConfig_Script.push("NTPublicTalRashasTomb.ntj"); // Uncomment to do public Tomb runs. //---------------\\ // "Act I Boss": \\ //---------------\\ //NTConfig_Script.push("NTBishibosh_ENG.ntj"); //NTConfig_Script.push("NTRakanishu_ENG.ntj"); NTConfig_ClearTristram = false; // Set to true to clear Tristram NTConfig_MooMooFarm = false; // Set to true to pick up Wirt's leg and make portal to Cow Level. (COW LEVEL SCRIPT NOT YET IMPLEMENTED!!) //NTConfig_Script.push("NTBloodRaven.ntj"); NTConfig_Bishibosh_ENG_Extension = false; // Set to true to go to Bishibosh after killing Blood Raven. NTConfig_ClearMausoleum = false; // Clear Mausoleum after killing Blood Raven. NTConfig_ClearCrypt = false; // Clear Crypt after killing Blood Raven. //NTConfig_Script.push("NTPit.ntj"); NTConfig_ClearTamoeHighLand = false; // Set to true to clear Tamoe Highland. o_O NTConfig_ClearPitLevel1 = 0; // 0 = Straight to level 2 // 1 = Clear path to level 2 // 2 = Clear everything //NTConfig_Script.push("NTCountess.ntj"); //NTConfig_Script.push("NTTheSmith.ntj"); //NTConfig_Script.push("NTAndariel.ntj"); NTConfig_ClearAndarielThron = false; // Set to true to clear Andariel's room after killing her. //----------------\\ // "Act II Boss": \\ //----------------\\ //NTConfig_Script.push("NTRadament.ntj"); //NTConfig_Script.push("NTAncientTunnels.ntj"); //NTConfig_Script.push("NTSummoner.ntj"); NTConfig_FireEyeExtension = true; // Set to true to kill Fireeye after killing Summoner. //NTConfig_Script.push("NTFastTalRashasTomb.ntj"); //Should not be used in public runs. //NTConfig_Script.push("NTDuriel.ntj"); //-----------------\\ // "Act III Boss": \\ //-----------------\\ //NTConfig_Script.push("NTTravincal.ntj"); //NTConfig_Script.push("NTMephisto.ntj"); NTConfig_KillCouncilMembers = true; // Set to true to kill council members. //----------------\\ // "Act IV Boss": \\ //----------------\\ //NTConfig_Script.push("NTHephasto.ntj"); //NTConfig_Script.push("NTFastDiablo.ntj"); //Should not be used in public runs. //---------------\\ // "Act V Boss": \\ //---------------\\ //NTConfig_Script.push("NTThreshSocket.ntj"); //NTConfig_Script.push("NTEldritch.ntj"); NTConfig_ShenkExtension = true; // Set to true to kill Shenk after killing Eldritch. NTConfig_DacFarrenExtension = true; // Set to true to kill Dac Farren after Shenk, or Eldritch if Shenk = false //NTConfig_Script.push("NTPindleskinByWP.ntj"); // Kill Pindleskin by using Halls of Pain WP. //NTConfig_Script.push("NTPindleskin.ntj"); // Kill Pindleskin by using Anya's portal. NTConfig_NihlathakExtension = false; // Set to true to to Nihlathak after killing Pindleskin through portal. //NTConfig_Script.push("NTNihlathak.ntj"); NTConfig_PindleskinExtension = false; // Set to true to go to Pindleskin after killing Nihlathak. //NTConfig_Script.push("NTFrozenstein.ntj"); NTConfig_ClearFrozenRiver = false; // Set to true to clear Frozen River before killing Frozenstein. //NTConfig_Script.push("NTGlacialTrail.ntj"); NTConfig_ClearGlacialTrail = false; // Set to true to clear Glacial Trail. //NTConfig_Script.push("NTIcyCellar.ntj"); NTConfig_ClearIcyCellar = false; // Set to true to clear Icy Cellar. //NTConfig_Script.push("NTFastBaal.ntj"); // Should not be used in public runs. NTConfig_KillBaal = true; // Set to true to kill Baal, false to only kill minions. //---------------------------------------------------\\ // "Chicken, Merc & Others Parametrs Configuration": \\ //---------------------------------------------------\\ me.maxgametime = 0; // Maximum game time (in seconds) before Save & Exit. 600 seconds = 10 minutes. NTConfig_PrintCoord = false; // Set to true to print coordinates. NTConfig_StartDelay = 0; // Time (in milliseconds) to wait after game has started. NTConfig_AreaDelay = 500; // Time to wait (in milliseconds) after entering a new area. NTConfig_SnagDelay = 500; // Time to wait (in milliseconds) after killing (a boss) to pick items. NTConfig_SkipHealLife = 90; // If over this amount of Health (%) after entering town, don't go to heal. NTConfig_SkipHealMana = 70; // If over this amount of Mana (%) after entering town, don't go to heal. NTConfig_SkipHealCurses = false; // Set to true to NOT go to healer when cursed. NTConfig_UseMerc = true; // Set to true to use a merc, set to false to not. NTConfig_ResetWeapon = true; // Set to true to re-equip your merc's weapon after ressurecting him. NTConfig_LifeThresh = 60; // The amount of health (%) remaining before drinking a Healing Potion. NTConfig_LifeRejuvThresh = 40; // The amount of health (%) remaining before drinking a Rejuv Potion. NTConfig_ManaThresh = 30; // The amount of mana (%) remaining before drinking a Mana Potion. NTConfig_ManaRejuvThresh = 10; // The amount of mana (%) remaining before drinking a Rejuv Potion. NTConfig_LifeChicken = 30; // The amount of health (%) remaining before chickening (Save & Exit). NTConfig_ManaChicken = 0; // The amount of mana (%) remaining before chickening (Save & Exit). NTConfig_ViperSkipNihlathak = false; // Set to true to skip Nihlathak if Tomb Vipers are nearby. NTConfig_QuitOnHostile = true; // Set to true to chicken if someone hostiles you. NTConfig_MercLifeThresh = 60; // The amount of health (%) remaining on your Merc before giving him a Healing Potion. NTConfig_MercRejuvThresh = 40; // The amount of health (%) remaining on your Merc before giving him a Rejuv Potion. NTConfig_MercChicken = 0; // The amount of health (%) remaining on your Merc before chickeining. 0 = Don't chicken. //--------------------------------------------------------------------------------------------------------------------------\\ // "Inventory Configuration": \\ //--------------------------------------------------------------------------------------------------------------------------\\ NTConfig_FreeSpace = 8; // Number of rows of free space in your inventory. NTConfig_Columns[0] = [1,1,1,1,1,1,1,1,0,0]; NTConfig_Columns[1] = [1,1,1,1,1,1,1,1,0,0]; NTConfig_Columns[2] = [1,1,1,1,1,1,1,1,0,0]; NTConfig_Columns[3] = [1,1,1,1,1,1,1,1,0,0]; NTConfig_MinGoldToStash = 100000; // Minimum amount of gold in inventory before stashing. //---------------------------------------------------------------------------------------------------------------------------\\ // "Belt Configuration": \\ // -Define which potions should go in which belt slot, from left to right. \\ // -Healing Potion = "hp" Mana Potion = "mp" Rejuv Potion = "rv" \\ //---------------------------------------------------------------------------------------------------------------------------\\ NTConfig_BeltColType[0] = "hp"; NTConfig_BeltColType[1] = "mp"; NTConfig_BeltColType[2] = "rv"; NTConfig_BeltColType[3] = "rv"; //-----------------------------------------------------------------------------------------------\\ // Minimum amount of potions in each belt slot before re-stocking. \\ \\ //-----------------------------------------------------------------------------------------------\\ NTConfig_BeltColMin[0] = 4; NTConfig_BeltColMin[1] = 4; NTConfig_BeltColMin[2] = 0; NTConfig_BeltColMin[3] = 0; //-----------------------------------------------------------------------------------------\\ // "SnagIt Configuration": \\ //-----------------------------------------------------------------------------------------\\ // Uncomment the SnagIt file(S) you wish to use. \\ //-----------------------------------------------------------------------------------------\\ //NTConfig_NIPFilePath.push("normal.nip"); NTConfig_NIPFilePath.push("elite.nip"); NTConfig_SnagRange = 50; // The range to pick up items. 40-50 is a good number here. NTConfig_OpenChest = true; // Set to true to open chests and weapon/armor racks. This will make the bot buy a key. //---------------------------------------------------------\\ // "Cubing Configuration": \\ //---------------------------------------------------------\\ NTConfig_Cubing = false; // Set to true to enable cubing script. //NTConfig_CubingItem.push(["gcw",0,3]); // Chipped Diamond gcw //NTConfig_CubingItem.push(["gcv",0,3]); // Chipped Amethyst gcv //NTConfig_CubingItem.push(["gcb",0,3]); // Chipped Saphire gcb //NTConfig_CubingItem.push(["gcy",0,3]); // Chipped Topaz gcy //NTConfig_CubingItem.push(["gcr",0,3]); // Chipped Ruby gcr //NTConfig_CubingItem.push(["gcg",0,3]); // Chipped Emerald gcg //NTConfig_CubingItem.push(["skc",0,3]); // Chipped Skull skc //NTConfig_CubingItem.push(["gfw",0,3]); // Flawed Diamond gfw //NTConfig_CubingItem.push(["gfv",0,3]); // Flawed Amethyst gfv //NTConfig_CubingItem.push(["gfb",0,3]); // Flawed Saphire gfb //NTConfig_CubingItem.push(["gfy",0,3]); // Flawed Topaz gfy //NTConfig_CubingItem.push(["gfr",0,3]); // Flawed Ruby gfr //NTConfig_CubingItem.push(["gfg",0,3]); // Flawed Emerald gfg //NTConfig_CubingItem.push(["skf",0,3]); // Flawed Skull skf //NTConfig_CubingItem.push(["gsw",0,3]); // Normal Diamond gsw //NTConfig_CubingItem.push(["gsv",0,3]); // Normal Amethyst gsv //NTConfig_CubingItem.push(["gsb",0,3]); // Normal Saphire gsb //NTConfig_CubingItem.push(["gsy",0,3]); // Normal Topaz gsy //NTConfig_CubingItem.push(["gsr",0,3]); // Normal Ruby gsr //NTConfig_CubingItem.push(["gsg",0,3]); // Normal Emerald gsg //NTConfig_CubingItem.push(["sku",0,3]); // Normal Skull sku //NTConfig_CubingItem.push(["glw",0,3]); // Flawless Diamond glw //NTConfig_CubingItem.push(["gzv",0,3]); // Flawless Amethyst gzv //NTConfig_CubingItem.push(["glb",0,3]); // Flawless Saphire glb //NTConfig_CubingItem.push(["gly",0,3]); // Flawless Topaz gly //NTConfig_CubingItem.push(["glr",0,3]); // Flawless Ruby glr //NTConfig_CubingItem.push(["glg",0,3]); // Flawless Emerald glg //NTConfig_CubingItem.push(["skl",0,3]); // Flawless Skull skl //NTConfig_CubingItem.push(["r01",0,3]); // El Rune r01 //NTConfig_CubingItem.push(["r02",0,3]); // Eld Rune r02 //NTConfig_CubingItem.push(["r03",0,3]); // Tir Rune r03 //NTConfig_CubingItem.push(["r04",0,3]); // Nef Rune r04 //NTConfig_CubingItem.push(["r05",0,3]); // Eth Rune r05 //NTConfig_CubingItem.push(["r06",0,3]); // Ith Rune r06 //NTConfig_CubingItem.push(["r07",0,3]); // Tal Rune r07 //NTConfig_CubingItem.push(["r08",0,3]); // Ral Rune r08 //NTConfig_CubingItem.push(["r09",0,3]); // Ort Rune r09 //NTConfig_CubingItem.push(["r10",0,3,"gcy",0,1]); // Thul Rune + chipped Topaz r10 + gcy //NTConfig_CubingItem.push(["r11",0,3,"gcv",0,1]); // Amn Rune + chipped Amethyst r11 + gcv //NTConfig_CubingItem.push(["r12",0,3,"gcb",0,1]); // Sol Rune + chipped Saphire r12 + gcb //NTConfig_CubingItem.push(["r13",0,3,"gcr",0,1]); // Shael Rune + chipped Ruby r13 + gcr //NTConfig_CubingItem.push(["r14",0,3,"gcg",0,1]); // Dol Rune + chipped Emerald r14 + gcg //NTConfig_CubingItem.push(["r15",0,3,"gcw",0,1]); // Hel Rune + chipped Diamond r15 + gcw //NTConfig_CubingItem.push(["r16",0,3,"gfy",0,1]); // Io Rune + flawed Topaz r16 + gfy //NTConfig_CubingItem.push(["r17",0,3,"gfv",0,1]); // Lum Rune + flawed Amethyst r17 + gfv //NTConfig_CubingItem.push(["r18",0,3,"gfb",0,1]); // Ko Rune + flawed Saphire r18 + gfb //NTConfig_CubingItem.push(["r19",0,3,"gfr",0,1]); // Fal Rune + flawed Ruby r19 + gfr //NTConfig_CubingItem.push(["r20",0,3,"gfg",0,1]); // Lem Rune + flawed Emerald r20 + gfg //NTConfig_CubingItem.push(["r21",0,2,"gfw",0,1]); // Pul Rune + flawed Diamond r21 + gfw //NTConfig_CubingItem.push(["r22",0,2,"gsy",0,1]); // Um Rune + Topaz r22 + gsy //NTConfig_CubingItem.push(["r23",0,2,"gsv",0,1]); // Mal Rune + Amethyst r23 + gsv //NTConfig_CubingItem.push(["r24",0,2,"gsb",0,1]); // Ist Rune + Saphire r24 + gsb //NTConfig_CubingItem.push(["r25",0,2,"gsr",0,1]); // Gul Rune + Ruby r25 + gsr //NTConfig_CubingItem.push(["r26",0,2,"gsg",0,1]); // Vex Rune + Emerald r26 + gsg //NTConfig_CubingItem.push(["r27",0,2,"gsw",0,1]); // Ohm Rune + Diamond r27 + gsw //NTConfig_CubingItem.push(["r28",0,2,"gly",0,1]); // Lo Rune + flawless Topaz r28 + gly //NTConfig_CubingItem.push(["r29",0,2,"gzv",0,1]); // Sur Rune + flawless Amethyst r29 + gzv //NTConfig_CubingItem.push(["r30",0,2,"glb",0,1]); // Ber Rune + flawless Saphire r30 + glb //NTConfig_CubingItem.push(["r31",0,2,"glr",0,1]); // Jah Rune + flawless Ruby r31 + gll //NTConfig_CubingItem.push(["r32",0,2,"glg",0,1]); // Cham Rune + flawless Emerald r32 + glg NTConfig_CubingItem.push(["leg",0,1,"tbk",0,1]); // Wirt's Leg + Tome of Town Portal leg + tbk //--------------------------------------------------------------------------------------------------------\\ // "Gamble Configuration": \\ //--------------------------------------------------------------------------------------------------------\\ NTConfig_Gamble = true; // Set to true to enable gambling. NTConfig_GambleStopGold = 300000; // Set the amount of gold remaining before stopping the gambling script. NTConfig_GambleItem.push("rin"); // Rings NTConfig_GambleItem.push("amu"); // Amulets NTConfig_GambleItem.push("ci0"); // Circlets NTConfig_GambleItem.push("ci1"); // Coronets //NTConfig_GambleItem.push("lgl"); // Leather Gloves //NTConfig_GambleItem.push("vgl"); // Heavy Gloves //NTConfig_GambleItem.push("mgl"); // Chain Gloves //NTConfig_GambleItem.push("tgl"); // Light Gauntlets //NTConfig_GambleItem.push("hgl"); // Gauntlets //----------------------------------------------------------------------------------------------------------\\ // "Assassin Attack Configuration" \\ //----------------------------------------------------------------------------------------------------------\\ // A list of spell ID's can be found in Scripts\libs\config\Skill_IDs.txt \\ //----------------------------------------------------------------------------------------------------------\\ // |Traps|: 271:Lightning Sentry, 276:Death Sentry, 256:Shock Field, 258:Quickness \\ //--------------------------------------------------------------------------------------------------------- \\ // |Shadows Disciplines|: 273:Mind Blast, 253:Psychic Hammer, 278:Venom \\ //--------------------------------------------------------------------------------------------------------- \\ // |Martial Arts|: 275:Dragon Flight, 270:Dragon Tail, 274:Blades of Ice \\ //----------------------------------------------------------------------------------------------------------\\ NTConfig_AttackSkill[0] = 0; // Cast your first spell once. Set to 0 if you won't. NTConfig_AttackSkill[1] = 0; // Cast your primary spell to bosses. NTConfig_AttackSkill[2] = 0; // Cast your primary spell to others. NTConfig_AttackSkill[3] = 0; // Cast your primary untimed spell if primary spell is timed spell. Set to 0 if you won't. NTConfig_AttackSkill[4] = 0; // Cast your secondary spell if monster is immune to your primary spell. Set to 0 if you won't. NTConfig_AttackSkill[5] = 0; // Cast your secondary untimed spell if secondary spell is timed spell. Set to 0 if you won't. NTConfig_ClearPosition = true; // Set to true if you want to clear area after killing boss. NTConfig_CheckSafe = true; // Set to true to check for curses, merc and potion (go to town if needed) NTConfig_CastShadowMaster = false; // Set to true to cast "Shadow Master". NTConfig_CastShadowWarrior = true; // Set to true to cast "Shadow Warrior". NTConfig_CastBrustOfSpeed = false; // Set to true to cast "Brust Of Speed". NTConfig_CastFade = true; // Set to true to cast "Fade". NTConfig_CastBladeShield = true; // Set to true to cast "Blade Shield". NTConfig_CastCloakOfShadows = true; // Set to true to cast "Cloak Of Shadows". }
const NTA_DAMAGE_NONE = 0; const NTA_DAMAGE_PHYSICAL = 1; const NTA_DAMAGE_MAGIC = 2; const NTA_DAMAGE_FIRE = 3; const NTA_DAMAGE_LIGHTNING = 4; const NTA_DAMAGE_COLD = 5; const NTA_DAMAGE_POISON = 6; var _NTA_SkillHand = new Array(6); var _NTA_SkillDamage = new Array(6); var _NTA_SkillDelay = new Array(6); function NTA_Initialize() { for(var i = 0 ; i < 6 ; i++) { if(NTConfig_AttackSkill[i] > 0) { _NTA_SkillHand[i] = GetBaseStat("skills.txt", NTConfig_AttackSkill[i], 166) ? 2 : NTC_HAND_RIGHT; _NTA_SkillDamage[i] = NTA_GetDamageType(NTConfig_AttackSkill[i]); _NTA_SkillDelay[i] = NTC_GetCastDelay(NTConfig_AttackSkill[i]); } } } function NTA_KillBoss(classid) { var _target; if(NTConfig_AttackSkill[1] < 1) return false; _target = NTC_FindMonster(classid); if(_target) { if(NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(_target, _NTA_SkillDamage[0]) < 100) NTC_DoCast(NTConfig_AttackSkill[0], _NTA_SkillHand[0], _target); return NTA_Attack(_target, true, 100); } return false; } function NTA_ClearPosition(range, spectype) { var _orgx, _orgy; var _target; var _killnum = 0; if(NTConfig_AttackSkill[2] < 1) return false; if(arguments.length < 1) range = 20; if(arguments.length < 2) spectype = 0; _orgx = me.x; _orgy = me.y; for(var i = 0 ; i < 2 ; i++) { _target = NTC_GetUnit(NTC_UNIT_MONSTER); if(_target) { do { if(NTA_IsValidTarget(_target) && (spectype == 0 || (_target.spectype & spectype)) && GetDistance(_orgx, _orgy, _target.x, _target.y) < range) { if(_killnum == 0) { if(NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(_target, _NTA_SkillDamage[0]) < 100 && CheckCollision(me, _target, 3)) NTC_DoCast(NTConfig_AttackSkill[0], _NTA_SkillHand[0], _target); } if(NTA_Attack(_target, false, 20)) _killnum++; } } while(_target.GetNext()); } } if(me.classid == NTC_CHAR_CLASS_PALADIN) { if(NTConfig_CastRedemption && _killnum > 1 && NTC_PutSkill(124, NTC_HAND_RIGHT)) NTC_PingDelay(1000); } return (_killnum > 0); } function NTA_ClearRooms() { var _room; var _rooms; _room = GetRoom(); if(!_room) return false; _rooms = new Array(); do { _rooms.push([parseInt(_room.x*5 + _room.xsize*5/2), parseInt(_room.y*5 + _room.ysize*5/2)]); } while(_room.GetNext()); while(_rooms.length > 0) { _rooms.sort(NTA_SortRoomInt); _room = _rooms.shift(); NTM_MoveTo(me.areaid, _room[0], _room[1], 0, true); NTP_DoPrecastCTA(true); } return true; } function NTA_IsValidTarget(monster, simple) { if(!monster || monster.type != NTC_UNIT_MONSTER) return false; if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12) return false; if(((monster.classid >= 110 && monster.classid <= 113) || monster.classid == 608) && monster.mode == 8) // ignore flying scavengers return false; if(monster.classid == 68 && monster.mode == 14) // ignore burrowing maggots return false; if((monster.classid == 258 || monster.classid == 261) && monster.mode == 14) // ignore submerged WaterWatchers return false; if(monster.GetState(53) || monster.GetState(96)) // Conversion, Revive return false; if(arguments.length < 2) simple = false; if(!simple) { var _name; var _parent; // dummy _name = GetBaseStat("monstats.txt", monster.classid, 5); if(!_name || _name.toLowerCase() == "dummy") return false; // killable if(!GetBaseStat("monstats.txt", monster.classid, 89)) return false; // neverCount if(GetBaseStat("monstats.txt", monster.classid, 93)) return false; _parent = monster.GetParent(); if(_parent && _parent.type == NTC_UNIT_PLAYER && !GetPlayerFlag(_parent.gid, me.gid, 8)) return false; } return true; } function NTA_GetDamageType(skillid) { var _etype; if(skillid == 74) // Corpse Explosion return NTA_DAMAGE_PHYSICAL; if(skillid == 112) // Blessed Hammer return NTA_DAMAGE_NONE; _etype = GetBaseStat("skills.txt", skillid, 233); switch(_etype) { case "cold": return NTA_DAMAGE_COLD; case "fire": return NTA_DAMAGE_FIRE; case "ltng": return NTA_DAMAGE_LIGHTNING; case "mag": return NTA_DAMAGE_MAGIC; case "pois": return NTA_DAMAGE_POISON; case "stun": return NTA_DAMAGE_NONE; default: if(GetBaseStat("skills.txt", skillid, 178) || GetBaseStat("skills.txt", skillid, 182)) // aura or passive return NTA_DAMAGE_NONE; } return NTA_DAMAGE_PHYSICAL; } function NTA_GetResistance(enemy, type) { if(!enemy) return false; if(arguments.length == 2) { switch(type) { case NTA_DAMAGE_PHYSICAL: return enemy.GetStat(36); case NTA_DAMAGE_MAGIC: return enemy.GetStat(37); case NTA_DAMAGE_FIRE: return enemy.GetStat(39); case NTA_DAMAGE_LIGHTNING: return enemy.GetStat(41); case NTA_DAMAGE_COLD: return enemy.GetStat(43); case NTA_DAMAGE_POISON: return enemy.GetStat(45); } } return 0; } function NTA_Attack(target, boss, maxattacks) { switch(me.classid) { case NTC_CHAR_CLASS_AMAZON: return NTA_AmazonAttackInt(target, boss, maxattacks); case NTC_CHAR_CLASS_SORCERESS: return NTA_SorceressAttackInt(target, boss, maxattacks); case NTC_CHAR_CLASS_NECROMANCER: return NTA_NecromancerAttackInt(target, boss, maxattacks); case NTC_CHAR_CLASS_PALADIN: return NTA_PaladinAttackInt(target, boss, maxattacks); case NTC_CHAR_CLASS_BARBARIAN: return NTA_BarbarianAttackInt(target, boss, maxattacks); case NTC_CHAR_CLASS_DRUID: return NTA_DruidAttackInt(target, boss, maxattacks); case NTC_CHAR_CLASS_ASSASSIN: return NTA_AssassinAttackInt(target, boss, maxattacks); } return false; } // Internal function function NTA_AmazonAttackInt(target, boss, maxattacks) { return false; } function NTA_SorceressAttackInt(target, boss, maxattacks) { var _primaryindex; var _maxattacks = 0; var _range1, _range2; var _prehp; _primaryindex = boss ? 1 : 2; switch(NTConfig_AttackSkill[_primaryindex]) { case 48: // Nova _range1 = 10; break; default: _range1 = 20; break; } switch(NTConfig_AttackSkill[4]) { case 48: // Nova _range2 = 10; break; default: _range2 = 20; break; } if(NTConfig_CastStatic < 100) { var _staticlevel = NTC_CheckSkill(42); if(_staticlevel > 0 && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) < 100) { var _cast = 0; var _staticrange = Math.floor((5+_staticlevel-1)*2/3); while(_cast++ < 10 && NTA_IsValidTarget(target, true) && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && (boss || CheckCollision(me, target, 2))) { NTA_MoveCloseInt(target, _staticrange); if(!NTC_DoCast(42, NTC_HAND_RIGHT, target)) { if(!boss) break; } } } } _prehp = target.hp; while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true)) { if(!CheckCollision(me, target, 3)) { if(boss) NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2)); else if(me.areaid != 131) return false; } if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100) { if((_maxattacks % 2) == 1) { if(!NTA_MoveCloseInt(target, _range1) && !boss) return false; } NTA_DoCastInt(_primaryindex, target); } else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100) { if((_maxattacks % 2) == 1) { if(!NTA_MoveCloseInt(target, _range2) && !boss) return false; } NTA_DoCastInt(4, target); } else { if(boss) { if((_maxattacks % 2) == 1) NTA_MoveCloseInt(target, _range1); NTA_DoCastInt(_primaryindex, target); } else return false; } if(boss) { if((_maxattacks % 4) == 0 && target.hp >= _prehp) { if(target.classid == 526) return false; } if((_maxattacks % 8) == 0) { if(target.hp < _prehp) _prehp = target.hp; else return false; } } else { if((_maxattacks % 4) == 0) { if(target.hp < _prehp) _prehp = target.hp; else return false; } } if(NTConfig_CheckSafe) { if(!NTTMGR_CheckSafe(1)) return false; } } return true; } function NTA_NecromancerAttackInt(target, boss, maxattacks) { var _primaryindex; var _maxattacks = 0; var _range1, _range2; var _prehp; _primaryindex = boss ? 1 : 2; switch(NTConfig_AttackSkill[_primaryindex]) { case 67: // Teeth case 84: // Bone Spear case 93: // Bone Spirit _range1 = 10; break; default: _range1 = 20; break; } switch(NTConfig_AttackSkill[4]) { case 67: // Teeth case 84: // Bone Spear case 93: // Bone Spirit _range2 = 10; break; default: _range2 = 20; break; } _prehp = target.hp; while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true)) { if(!CheckCollision(me, target, 3)) { if(boss) NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2)); else if(me.areaid != 131) return false; } if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100) { if((_maxattacks % 2) == 1) { if(!NTA_MoveCloseInt(target, _range1) && !boss) return false; } NTA_DoCastInt(_primaryindex, target); } else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100) { if((_maxattacks % 2) == 1) { if(!NTA_MoveCloseInt(target, _range2) && !boss) return false; } NTA_DoCastInt(4, target); } else { if(boss) { if((_maxattacks % 2) == 1) NTA_MoveCloseInt(target, _range1); NTA_DoCastInt(_primaryindex, target); } else return false; } if(boss) { if((_maxattacks % 4) == 0 && target.hp >= _prehp) { if(target.classid == 526) return false; } if((_maxattacks % 8) == 0) { if(target.hp < _prehp) _prehp = target.hp; else return false; } } else { if((_maxattacks % 4) == 0) { if(target.hp < _prehp) _prehp = target.hp; else return false; } } if(NTConfig_CheckSafe) { if(!NTTMGR_CheckSafe(1)) return false; } } return true; } function NTA_PaladinAttackInt(target, boss, maxattacks) { var _primaryindex; var _maxattacks = 0; var _range1, _range2; var _prehp1, _prehp2; var _nohit = true; _primaryindex = boss ? 1 : 2; switch(NTConfig_AttackSkill[_primaryindex]) { case 101: // Holy Bolt case 121: // Fist of the Heavens _range1 = 20; break; default: _range1 = 2; break; } switch(NTConfig_AttackSkill[4]) { case 101: // Holy Bolt case 121: // Fist of the Heavens _range2 = 20; break; default: _range2 = 2; break; } _prehp1 = target.hp; while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true)) { if(!CheckCollision(me, target, 3)) { if(boss) { if(NTConfig_AttackSkill[_primaryindex] == 101 || NTConfig_AttackSkill[_primaryindex] == 121) NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2)); } else if(me.areaid != 131) return false; } _prehp2 = target.hp; if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100) { if((_maxattacks % 2) == 1 && _nohit) { if(NTConfig_AttackSkill[_primaryindex] == 112) { if(!NTM_MoveTo(target.areaid, target.x+1, target.y, 0) && !boss) return false; } else { if(!NTA_MoveCloseInt(target, _range1) && !boss) return false; } if(NTConfig_PutAura > 0) NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT); } NTA_DoCastInt(_primaryindex, target); } else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100) { if((_maxattacks % 2) == 1 && _nohit) { if(NTConfig_AttackSkill[4] == 112) { if(!NTM_MoveTo(target.areaid, target.x+1, target.y, 0) && !boss) return false; } else { if(!NTA_MoveCloseInt(target, _range2) && !boss) return false; } if(NTConfig_PutAura > 0) NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT); } NTA_DoCastInt(4, target); } else { if(boss) { if((_maxattacks % 2) == 1 && _nohit) { if(NTConfig_AttackSkill[_primaryindex] == 112) NTM_MoveTo(target.areaid, target.x+1, target.y, 0); else NTA_MoveCloseInt(target, _range1); if(NTConfig_PutAura > 0) NTC_PutSkill(NTConfig_PutAura, NTC_HAND_RIGHT); } NTA_DoCastInt(_primaryindex, target); } else return false; } if(boss) { if((_maxattacks % 8) == 0) { if(target.hp < _prehp1) _prehp1 = target.hp; else return false; } } else { if((_maxattacks % 4) == 0) { if(target.hp < _prehp1) _prehp1 = target.hp; else return false; } } _nohit = (target.hp >= _prehp2); if(NTConfig_CheckSafe) { if(!NTTMGR_CheckSafe(1)) return false; } } return true; } function NTA_BarbarianAttackInt(target, boss, maxattacks) { return false; } function NTA_DruidAttackInt(target, boss, maxattacks) { var _primaryindex; var _maxattacks = 0; var _range1, _range2; var _prehp1, _prehp2; var _nohit = true; _primaryindex = boss ? 1 : 2; switch(NTConfig_AttackSkill[_primaryindex]) { case 240: // Twister case 245: // Tornado _range1 = 20; break; default: _range1 = 2; break; } switch(NTConfig_AttackSkill[4]) { case 240: // Twister case 245: // Tornado _range2 = 20; break; default: _range2 = 2; break; } _prehp1 = target.hp; while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true)) { if(!CheckCollision(me, target, 3)) { if(boss) { if(NTConfig_AttackSkill[_primaryindex] == 240 || NTConfig_AttackSkill[_primaryindex] == 245) NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2)); } else if(me.areaid != 131) return false; } _prehp2 = target.hp; if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100) { if((_maxattacks % 2) == 1 && _nohit) { if(NTConfig_AttackSkill[_primaryindex] == 245) { if(!NTM_MoveTo(target.areaid, target.x+1, target.y, 0) && !boss) return false; } else { if(!NTA_MoveCloseInt(target, _range1) && !boss) return false; } } NTA_DoCastInt(_primaryindex, target); } else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100) { if((_maxattacks % 2) == 1 && _nohit) { if(NTConfig_AttackSkill[4] == 240) { if(!NTM_MoveTo(target.areaid, target.x+1, target.y, 0) && !boss) return false; } else { if(!NTA_MoveCloseInt(target, _range2) && !boss) return false; } } NTA_DoCastInt(4, target); } else { if(boss) { if((_maxattacks % 2) == 1 && _nohit) { if(NTConfig_AttackSkill[_primaryindex] == 245) NTM_MoveTo(target.areaid, target.x+1, target.y, 0); else NTA_MoveCloseInt(target, _range1); } NTA_DoCastInt(_primaryindex, target); } else return false; } if(boss) { if((_maxattacks % 8) == 0) { if(target.hp < _prehp1) _prehp1 = target.hp; else return false; } } else { if((_maxattacks % 4) == 0) { if(target.hp < _prehp1) _prehp1 = target.hp; else return false; } } _nohit = (target.hp >= _prehp2); if(NTConfig_CheckSafe) { if(!NTTMGR_CheckSafe(1)) return false; } } return true; } function NTA_AssassinAttackInt(target, boss, maxattacks) { var _primaryindex; var _maxattacks = 0; var _range1, _range2; var _prehp; _primaryindex = boss ? 1 : 2; switch(NTConfig_AttackSkill[_primaryindex]) { case 256: // Shock Field case 271: // Lightning Sentry _range1 = 10; break; default: _range1 = 20; break; } switch(NTConfig_AttackSkill[4]) { case 256: // Shock Field case 271: // Lightning Sentry _range2 = 10; break; default: _range2 = 20; break; } _prehp = target.hp; while(_maxattacks++ < maxattacks && NTA_IsValidTarget(target, true)) { if(!CheckCollision(me, target, 3)) { if(boss) NTA_MoveCloseInt(target, Math.round(GetDistance(me, target)/2)); else if(me.areaid != 131) return false; } if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100) { if((_maxattacks % 2) == 1) { if(!NTA_MoveCloseInt(target, _range1) && !boss) return false; } NTA_DoCastInt(_primaryindex, target); } else if(NTConfig_AttackSkill[4] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[4]) < 100) { if((_maxattacks % 2) == 1) { if(!NTA_MoveCloseInt(target, _range2) && !boss) return false; } NTA_DoCastInt(4, target); } else { if(boss) { if((_maxattacks % 2) == 1) NTA_MoveCloseInt(target, _range1); NTA_DoCastInt(_primaryindex, target); } else return false; } if(boss) { if((_maxattacks % 4) == 0 && target.hp >= _prehp) { if(target.classid == 526) return false; } if((_maxattacks % 8) == 0) { if(target.hp < _prehp) _prehp = target.hp; else return false; } } else { if((_maxattacks % 4) == 0) { if(target.hp < _prehp) _prehp = target.hp; else return false; } } if(NTConfig_CheckSafe) { if(!NTTMGR_CheckSafe(1)) return false; } } return true; } function NTA_DoCastInt(index, target) { var _untimedindex = index < 4 ? 3 : 5; if(!NTC_DoCast(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target)) return false; if(_NTA_SkillDelay[index] > 0) { if(NTConfig_AttackSkill[_untimedindex] > 0) { var _starttick = GetTickCount(); while(NTA_IsValidTarget(target, true)) { NTC_DoCast(NTConfig_AttackSkill[_untimedindex], _NTA_SkillHand[_untimedindex], target); if(GetTickCount()-_starttick >= _NTA_SkillDelay[index]) break; } } else NTC_Delay(_NTA_SkillDelay[index]); } return true; } function NTA_MoveCloseInt(target, maxrange) { var _dist = GetDistance(me, target); if(_dist > maxrange) { var _destx, _desty; _destx = me.x + Math.round((_dist-maxrange)*(target.x-me.x) / _dist); _desty = me.y + Math.round((_dist-maxrange)*(target.y-me.y) / _dist); return NTM_MoveTo(me.areaid, _destx, _desty, 0); } return true; } function NTA_SortRoomInt(a, b) { if(GetDistance(me.x, me.y, a[0], a[1]) < GetDistance(me.x, me.y, b[0], b[1])) return -1; return 1; }