Results 1 to 5 of 5
  1. #1

    Default Hammer wave 2 configuration

    I'm using d2nt 3.1 and I am having trouble getting him to use holy bolt on wave 2 the magic immune I have it changed in the NTConfig_Paladin.ntl under the attack configurations for the Secondary skill in case monster is immune to primary skill but it doesnt seem to ever change its NTConfig_AttackSkill[5] = 101. if anyone can help with this would be appreciated. I know it can be done I have seen some bots that do it just not sure where else I need to make the change for this attack to get read in the code.

  2. #2

    Default

    There should be an option below saying "Use Holy Bolt on Wave 2"
    Set that to true.

  3. #3

    Default

    here is the code on the paly configuration i dont see that option.


    var NTConfig_UseRedemptionHP;
    var NTConfig_UseRedemptionMP;
    function NT_LoadConfig()
    {
    //------------------------------------------------------------------------------
    // Boss configuration
    //------------------------------------------------------------------------------
    NTConfig_Script.push("NTPindleskin.ntj"); NTConfig_NihlathakExtension = true;
    NTConfig_Script.push("NTNihlathak.ntj"); NTConfig_PindleskinExtension = true;
    NTConfig_Script.push("NTEldritch.ntj"); NTConfig_ShenkExtension = true;
    //NTConfig_Script.push("NTThreshSocket.ntj");
    //NTConfig_Script.push("NTFrozenRiver.ntj"); NTConfig_ClearFrozenRiver = false;
    //NTConfig_Script.push("NTGlacialTrail.ntj"); NTConfig_ClearGlacialTrail = false;
    //NTConfig_Script.push("NTIcyCellar.ntj"); NTConfig_ClearIcyCellar = false;
    NTConfig_Script.push("NTDiablo.ntj");
    NTConfig_Script.push("NTBaal.ntj"); NTConfig_KillBaal = true;
    //NTConfig_Script.push("NTHephasto.ntj");
    //NTConfig_Script.push("NTIzual.ntj");
    //NTConfig_Script.push("NTMephisto.ntj");
    NTConfig_Script.push("NTTravincal.ntj");
    //NTConfig_Script.push("NTKurastTravel.ntj");
    //NTConfig_Script.push("NTAct3Sewers.ntj"); NTConfig_ClearA3SewersLevel1 = 1; // 0 : don't clear, 1 : clear path only, 2 : clear all
    NTConfig_Script.push("NTSummoner.ntj"); NTConfig_KillFireEye = true;
    //NTConfig_Script.push("NTDuriel.ntj");
    //NTConfig_Script.push("NTAncientTunnels.ntj");
    //NTConfig_Script.push("NTColdworm.ntj");
    //NTConfig_Script.push("NTRadament.ntj");
    NTConfig_Script.push("NTAndariel.ntj");
    NTConfig_Script.push("NTCountess.ntj");
    //NTConfig_Script.push("NTTreehead.ntj");
    NTConfig_Script.push("NTPit.ntj"); NTConfig_ClearPitLevel1 = 1; // 0 : don't clear, 1 : clear path only, 2 : clear all
    //NTConfig_Script.push("NTMausoleum.ntj"); NTConfig_KillBloodRaven = true;
    //NTConfig_Script.push("NTHole.ntj"); NTConfig_ClearHoleLevel1 = 1; // 0 : don't clear, 1 : clear path only, 2 : clear all
    //NTConfig_Script.push("NTTristram.ntj"); NTConfig_KillRakanishu = true;
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    me.maxgametime = 1200; // time in seconds, maximum game length (0 is infinite)
    NTConfig_StartDelay = 0; // Delay time in milliseconds to start;
    NTConfig_AreaDelay = 500; // Delay time in milliseconds to change area;
    NTConfig_SnagDelay = 100; // Delay time in milliseconds to wait before starting picking items
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    NTConfig_SkipHealLife = 90; // If you have more than this percent of life, you won't go to a healer
    NTConfig_SkipHealMana = 70; // If you have more than this percent of mana, you won't go to a healer
    NTConfig_UseMerc = true; // Set to true if you use a mercenary, will revive merc at a reviver npc.
    NTConfig_ResetWeapon = false; // Set to true to reset weapon when reviving merc
    NTConfig_LifeThresh = 60; // Drink a normal potion if under this percent of life.
    NTConfig_LifeRejuvThresh = 40; // Drink a rejuvenation potion if under this percent of life.
    NTConfig_ManaThresh = 30; // Drink a normal potion if under this percent of mana.
    NTConfig_ManaRejuvThresh = 10; // Drink a rejuvenation potion if under this percent of mana.
    NTConfig_LifeChicken = 30; // This is your chicken life percent. If you go below this life total, exit game.
    NTConfig_ManaChicken = 0; // This is your chicken mana percent. If you go below this mana total, exit game.
    NTConfig_MercLifeThresh = 50; // This is the threshold to use a life potion on your merc in percent.
    NTConfig_MercRejuvThresh = 30; // This is the threshold to use a rejuv potion on your merc in percent.
    NTConfig_MercChicken = 0; // This is your mercs chicken life percent. If he goes below this, exit game.
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    NTConfig_FreeSpace = 4; // Number of free columns. If less full columns are free stashing is set.
    // The numbers correspond to your inventory. Set 0 to keep whatever is there, 1 to stash it.
    NTConfig_Columns[0] = [0,0,0,0,1,1,1,1,1,1];
    NTConfig_Columns[1] = [0,0,0,0,1,1,1,1,1,1];
    NTConfig_Columns[2] = [0,0,0,0,1,1,1,1,1,1];
    NTConfig_Columns[3] = [0,0,0,0,1,1,1,1,1,1];
    NTConfig_MinGoldToStash = 50000; // Maximum gold amount carried before going to stash
    //----------------------------------------------------------------------------------------------
    // Type of potion used in each belt column
    // Available types : "hp" = health | "mp" = mana | "rv" = rejuv. Can use other potion types too.
    // Keep equal types at adjacent columns. First HP then MP and then HP again is a bad choice.
    // Keep HP and MP at the beginning of the belt (in case you want to use rejuv and other types).
    // Rejuvenations MUST, I REPEAT MUST be at the end of the belt (last x columns).
    // To use rejuvenations only, put "rv" in all columns.
    //----------------------------------------------------------------------------------------------
    NTConfig_BeltColType[0] = "hp";
    NTConfig_BeltColType[1] = "mp";
    NTConfig_BeltColType[2] = "rv";
    NTConfig_BeltColType[3] = "rv";
    //-----------------------------------------------------------------------------------
    // SnagIt configuration
    // Select one group only (normal / advance / extreme)
    //-----------------------------------------------------------------------------------
    //NTConfig_NIPFilePath.push("normal/normal.nip");
    //NTConfig_NIPFilePath.push("normal/magic_rare.nip");
    //NTConfig_NIPFilePath.push("normal/set.nip");
    //NTConfig_NIPFilePath.push("normal/unique.nip");
    //NTConfig_NIPFilePath.push("normal/craft.nip");
    NTConfig_NIPFilePath.push("advance/normal.nip");
    NTConfig_NIPFilePath.push("advance/magic_rare.nip");
    NTConfig_NIPFilePath.push("advance/set.nip");
    NTConfig_NIPFilePath.push("advance/unique.nip");
    NTConfig_NIPFilePath.push("advance/craft.nip");
    //NTConfig_NIPFilePath.push("extreme/normal.nip");
    //NTConfig_NIPFilePath.push("extreme/magic_rare.nip");
    //NTConfig_NIPFilePath.push("extreme/set.nip");
    //NTConfig_NIPFilePath.push("extreme/unique.nip");
    //NTConfig_NIPFilePath.push("extreme/craft.nip");
    NTConfig_SnagRange = 50; // Radius to check for dropped items. 40 is a good number here
    //------------------------------------------------------------------------------
    // Cubing configuration
    //------------------------------------------------------------------------------
    NTConfig_Cubing = false; // Enable cubing
    //NTConfig_CubingItem.push([NTCU_GEM, 560]); // Flawless Amethyst
    //NTConfig_CubingItem.push([NTCU_GEM, 565]); // Flawless Topaz
    //NTConfig_CubingItem.push([NTCU_GEM, 570]); // Flawless Saphire
    //NTConfig_CubingItem.push([NTCU_GEM, 575]); // Flawless Emerald
    //NTConfig_CubingItem.push([NTCU_GEM, 580]); // Flawless Ruby
    //NTConfig_CubingItem.push([NTCU_GEM, 585]); // Flawless Diamond
    //NTConfig_CubingItem.push([NTCU_GEM, 600]); // Flawless Skull
    //NTConfig_CubingItem.push([NTCU_MAGIC, 420]); // Magic Tiara
    //NTConfig_CubingItem.push([NTCU_MAGIC, 421]); // Magic Diadem
    //NTConfig_CubingItem.push([NTCU_MAGIC_CHARM, 603]); // Magic Small Charm
    //NTConfig_CubingItem.push([NTCU_MAGIC_CHARM, 605]); // Magic Grand Charm
    //NTConfig_CubingItem.push([NTCU_CRAFT_HITPOWER_GLOVES, 382]); // Craft Heavy Bracers
    //NTConfig_CubingItem.push([NTCU_CRAFT_HITPOWER_GLOVES, 452]); // Craft Vambraces
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_HELM, 354]); // Craft Casque
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_HELM, 424]); // Craft Armet
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BOOTS, 388]); // Craft Battle Boots
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BOOTS, 458]); // Craft Mirrored Boots
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_GLOVES, 381]); // Craft Sharkskin Gloves
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_GLOVES, 451]); // Craft Vampirebone Gloves
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BELT, 392]); // Craft Mesh Belt
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BELT, 462]); // Craft Mithril Coil
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_AMULET, 520]); // Craft Amulet
    //NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_RING, 522]); // Craft Ring
    //NTConfig_CubingItem.push([NTCU_CRAFT_CASTER_AMULET, 520]); // Craft Amulet
    //NTConfig_CubingItem.push([NTCU_CRAFT_SAFETY_SHIELD, 447]); // Craft Monarch
    //NTConfig_CubingItem.push([NTCU_CRAFT_SAFETY_AMULET, 520]); // Craft Amulet
    NTConfig_CubingItem.push([NTCU_ESSENSE, 0]);
    //NTConfig_CubingItem.push([NTCU_RUNE_THUL, 562]);
    //NTConfig_CubingItem.push([NTCU_RUNE_AMN, 557]);
    //NTConfig_CubingItem.push([NTCU_RUNE_SOL, 567]);
    //NTConfig_CubingItem.push([NTCU_RUNE_SHAEL, 577]);
    //NTConfig_CubingItem.push([NTCU_RUNE_DOL, 572]);
    //NTConfig_CubingItem.push([NTCU_RUNE_HEL, 582]);
    //NTConfig_CubingItem.push([NTCU_RUNE_IO, 563]);
    NTConfig_CubingItem.push([NTCU_RUNE_LUM, 558]);
    NTConfig_CubingItem.push([NTCU_RUNE_KO, 568]);
    NTConfig_CubingItem.push([NTCU_RUNE_FAL, 578]);
    NTConfig_CubingItem.push([NTCU_RUNE_LEM, 573]);
    NTConfig_CubingItem.push([NTCU_RUNE_PUL, 583]);
    NTConfig_CubingItem.push([NTCU_RUNE_UM, 564]);
    NTConfig_CubingItem.push([NTCU_RUNE_MAL, 559]);
    //NTConfig_CubingItem.push([NTCU_RUNE_IST, 569]);
    //NTConfig_CubingItem.push([NTCU_RUNE_GUL, 579]);
    //NTConfig_CubingItem.push([NTCU_RUNE_VEX, 574]);
    //NTConfig_CubingItem.push([NTCU_RUNE_OHM, 584]);
    //NTConfig_CubingItem.push([NTCU_RUNE_LO, 565]);
    //NTConfig_CubingItem.push([NTCU_RUNE_SUR, 560]);
    //NTConfig_CubingItem.push([NTCU_RUNE_BER, 570]);
    //NTConfig_CubingItem.push([NTCU_RUNE_JAH, 580]);
    //NTConfig_CubingItem.push([NTCU_RUNE_CHAM, 575]);
    //***** Include the following, Primary item must be setted in item_configs folder *****
    //NTConfig_CubingItem.push([NTCU_SOCKET_BODYARMOR, 442]); // Socket Sacred Armor
    //NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 255]); // Socket Thresher
    //NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 256]); // Socket Cryptic Axe
    //NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 257]); // Socket Great Poleaxe
    //NTConfig_CubingItem.push([NTCU_SOCKET_WEAPON, 258]); // Socket Giant Thresher
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_WEAPON, 295]); // Titan's Revenge : Exceptional -> Elite
    //NTConfig_CubingItem.push([NTCU_UPGRADE_N_UNIQUE_ARMOR, 337]); // Magefist : Normal -> Exceptional
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 360]); // Skin of the Vipermagi : Exceptional -> Elite
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 383]); // Magefist or Lava Gout : Exceptional -> Elite
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 389]); // Gore Rider : Exceptional -> Elite
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 477]); // Arreat's Face : Exceptional -> Elite
    //NTConfig_CubingItem.push([NTCU_UPGRADE_E_UNIQUE_ARMOR, 481]); // Herald Of Zakarum : Exceptional -> Elite
    //------------------------------------------------------------------------------
    // Gamble configuration
    // To specify what items to gamble, adjust the array with the desired item codes
    //------------------------------------------------------------------------------
    NTConfig_Gamble = true; // Enable gambling
    NTConfig_GambleStartGold = 2500000; // Gold amount to start the gambling
    NTConfig_GambleStopGold = 1000000; // Gold amount to stop the gambling
    NTConfig_GambleItem.push(520); // Amulets
    NTConfig_GambleItem.push(522); // Rings
    NTConfig_GambleItem.push(418); // Circlets
    NTConfig_GambleItem.push(419); // Coronets
    //NTConfig_GambleItem.push(334); // Leather Gloves
    //NTConfig_GambleItem.push(335); // Heavy Gloves
    //NTConfig_GambleItem.push(336); // Chain Gloves
    //NTConfig_GambleItem.push(337); // Light Gauntlets
    //NTConfig_GambleItem.push(338); // Gauntlets
    //------------------------------------------------------------------------------
    // General configuration
    //------------------------------------------------------------------------------
    NTConfig_PublicMode = true;
    NTConfig_CheckCloneDiablo = false; // Set to true if you want to wait in game after notifying "Diablo Walks the Earth" msg.
    NTConfig_OpenChest = true; // Set to true to open chest
    me.quitonhostile = true;
    //------------------------------------------------------------------------------
    // Attack configuration
    //------------------------------------------------------------------------------
    NTConfig_AttackSkill[0] = 101; // First skill. Set to 0 if you won't
    NTConfig_AttackSkill[1] = 112; // Primary skill to boss.
    NTConfig_AttackSkill[2] = 113; // Primary aura to boss. Set to 0 if you won't
    NTConfig_AttackSkill[3] = 112; // Primary skill to others.
    NTConfig_AttackSkill[4] = 113; // Primary aura to others. Set to 0 if you won't
    NTConfig_AttackSkill[5] = 101; // Secondary skill in case monster is immune to primary skill. Set to 0 if you won't
    NTConfig_AttackSkill[6] = 120; // Secondary aura. Set to 0 if you won't
    NTConfig_ClearPosition = true; // Set to true if you want to clear area after killing boss.
    // Check self safe in field (NOT in town). Set to 0 if you won't
    // 0x01 : Potion, 0x02 : Poison, 0x04 : Amplify Damage, 0x08 : Weaken, 0x10 : Iron Maiden, 0x20 : Decrepify, 0x40 : Lower Resist
    //NTConfig_CheckSelfSafe = 0x04|0x40;
    // Check merc's safe in field (NOT in town). Set to 0 if you won't
    // 0x01 : Death, 0x02 : Poison, 0x04 : Amplify Damage, 0x08 : Weaken, 0x10 : Iron Maiden, 0x20 : Decrepify, 0x40 : Lower Resist
    //NTConfig_CheckMercSafe = 0x01|0x04|0x10|0x40;
    NTConfig_UseRedemptionHP = 85; // Use Redemption if under this percent of life. Set to 0 if you won't
    NTConfig_UseRedemptionMP = 70; // Use Redemption if under this percent of mana. Set to 0 if you won't
    }

  4. #4

    Default

    then you're screwed

  5. #5

    Default solution for using holy bolt on wave 2

    Here is the solution replace NT Attack file with the following code

    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(7);
    var _NTA_SkillDamage = new Array(7);
    var _NTA_SkillRange = new Array(7);

    function NTA_Initialize()
    {
    if(NTConfig_AttackSkill[1] == 0 || NTConfig_AttackSkill[3] == 0)
    NTA_DetectAttackPattern();

    for(var i = 0 ; i < 7 ; 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]);

    switch(NTConfig_AttackSkill[i])
    {
    case 44: //Frost Nova
    case 48: // Nova
    _NTA_SkillRange[i] = 10;
    break;
    case 64: // Frozen Orb
    _NTA_SkillRange[i] = 15;
    break;
    case 97: //Smite
    case 106: //Zeal
    case 112: //Blessed Hammer
    _NTA_SkillRange[i] = 3;
    break;
    case 151: //Whirlwind
    _NTA_SkillRange[i] = 8;
    break;
    case 152: //Berserk
    _NTA_SkillRange[i] = 3;
    break;
    default:
    _NTA_SkillRange[i] = 25;
    break;
    }
    }
    }
    }

    function NTA_KillMonster(classid)
    {
    var _target;

    if(NTConfig_AttackSkill[1] < 1)
    return false;

    _target = NTC_FindUnit(NTC_UNIT_MONSTER, classid, 5);

    if(!_target)
    return false;

    if(_target.IsAttackable())
    {
    var _attackcount = 0;

    while(_attackcount < 300 && NTA_IsValidMonster(_target))
    {
    if(NTA_Attack(_target, (_attackcount%30) == 0) < 2)
    break;

    _attackcount++;
    }
    }

    return (_target.hp <= 0 || _target.mode == 0 || _target.mode == 12);
    }

    function NTA_ClearPosition(range, pickitem, safelevel)
    {
    var _orgx, _orgy;
    var _spectype = [0x0A, 0x01, 0x01];
    var _skiplist;
    var _attackcount = 0;
    var _target;
    var _distance, _mingid, _mindistance;
    var _result;

    if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
    return false;

    switch(arguments.length)
    {
    case 0:
    range = 20;
    case 1:
    pickitem = false;
    case 2:
    safelevel = 0;
    default:
    if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
    safelevel = 0;
    break;
    }

    _orgx = me.x;
    _orgy = me.y;

    for(var i = 0 ; i < _spectype.length ; i++)
    {
    _skiplist = new Array();

    while(_attackcount < (i+1)*100)
    {
    _mindistance = 100000;

    _target = NTC_FindUnit(NTC_UNIT_MONSTER);

    if(_target)
    {
    do
    {
    if(_skiplist.indexOf(_target.gid) < 0)
    {
    if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
    {
    if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
    {
    _distance = GetDistance(me, _target);

    if(_distance < _mindistance)
    {
    _mingid = _target.gid;
    _mindistance = _distance;
    }
    }
    }
    else
    _skiplist.push(_target.gid);
    }
    } while(_target.GetNext());
    }

    if(_mindistance < 100000)
    {
    _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

    if(_target)
    {
    _result = NTA_Attack(_target, (_attackcount%30) == 0);

    switch(_result)
    {
    case 1:
    _skiplist.push(_mingid);
    break;
    case 2:
    case 3:
    _attackcount++;
    break;
    default:
    return false;
    }
    }
    }
    else
    break;
    }
    }

    if(me.classid == NTC_CHAR_CLASS_PALADIN)
    {
    if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
    {
    if(NTC_PutSkill(124, NTC_HAND_RIGHT))
    NTC_PingDelay(1000);
    }
    }

    if(NTConfig_OpenChest)
    {
    _target = NTC_GetSpecialChest();

    if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
    _attackcount++;
    }

    if(pickitem && _attackcount > 0)
    NTSI_PickItems();

    switch(safelevel)
    {
    case 1:
    return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
    case 2:
    return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
    }

    return true;
    }

    function NTA_ClearLevel(pickitem, safelevel)
    {
    var i;
    var _room, _rooms;
    var _distance, _minindex, _mindistance;

    _room = GetRoom();

    if(!_room)
    return false;

    switch(arguments.length)
    {
    case 0:
    pickitem = true;
    case 1:
    safelevel = 2;
    default:
    if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
    safelevel = 0;
    break;
    }

    _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)
    {
    _mindistance = 100000;

    for(i = 0 ; i < _rooms.length ; i++)
    {
    _distance = GetDistance(me.x, me.y, _rooms[i][0], _rooms[i][1]);

    if(_distance < _mindistance)
    {
    _minindex = i;
    _mindistance = _distance;
    }
    }

    if(NTM_MoveTo(me.areaid, _rooms[_minindex][0], _rooms[_minindex][1], 1))
    {
    if(!NTA_ClearRoom(pickitem, safelevel))
    return false;

    NTP_DoPrecast(false);
    }

    _rooms.splice(_minindex, 1);
    }

    return true;
    }

    function NTA_ClearRoom(pickitem, safelevel)
    {
    var _room;
    var _spectype = [0x0A, 0x01, 0x01];
    var _skiplist;
    var _attackcount = 0;
    var _target;
    var _distance, _mingid, _mindistance;
    var _result;

    if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
    return false;

    _room = me.GetRoom();

    if(!_room)
    return false;

    switch(arguments.length)
    {
    case 0:
    pickitem = false;
    case 1:
    safelevel = 0;
    default:
    if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
    safelevel = 0;
    break;
    }

    for(var i = 0 ; i < _spectype.length ; i++)
    {
    _skiplist = new Array();

    while(_attackcount < (i+1)*100)
    {
    _mindistance = 100000;

    _target = NTC_FindUnit(NTC_UNIT_MONSTER);

    if(_target)
    {
    do
    {
    if(_skiplist.indexOf(_target.gid) < 0)
    {
    if(_target.IsAttackable() && (_target.spectype&_spectype[i]))
    {
    if(_room.UnitInRoom(_target) && NTA_IsValidMonster(_target))
    {
    _distance = GetDistance(me, _target);

    if(_distance < _mindistance)
    {
    _mingid = _target.gid;
    _mindistance = _distance;
    }
    }
    }
    else
    _skiplist.push(_target.gid);
    }
    } while(_target.GetNext());
    }

    if(_mindistance < 100000)
    {
    _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);

    if(_target)
    {
    _result = NTA_Attack(_target, (_attackcount%30) == 0);

    switch(_result)
    {
    case 1:
    _skiplist.push(_mingid);
    break;
    case 2:
    case 3:
    _attackcount++;
    break;
    default:
    return false;
    }
    }
    }
    else
    break;
    }
    }

    if(me.classid == NTC_CHAR_CLASS_PALADIN)
    {
    if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
    {
    if(NTC_PutSkill(124, NTC_HAND_RIGHT))
    NTC_PingDelay(1000);
    }
    }

    if(NTConfig_OpenChest)
    {
    _target = NTC_GetSpecialChest();

    if(_target && _room.UnitInRoom(_target) && NTC_OpenChest(_target))
    _attackcount++;
    }

    if(pickitem && _attackcount > 0)
    NTSI_PickItems();

    switch(safelevel)
    {
    case 1:
    return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
    case 2:
    return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
    }

    return true;
    }

    function NTA_IsValidMonster(monster)
    {
    var _classid;

    if(monster.hp <= 0 || monster.mode == 0 || monster.mode == 12)
    return false;

    _classid = monster.classid;

    if(((_classid >= 110 && _classid <= 113) || _classid == 608) && monster.mode == 8) // ignore flying scavengers
    return false;

    if(_classid == 68 && monster.mode == 14) // ignore burrowing maggots
    return false;

    if(_classid >= 258 && _classid <= 263 && monster.mode == 14) // ignore submerged WaterWatchers
    return false;

    if(monster.GetState(53) || monster.GetState(96)) // Conversion, Revive
    return false;

    return true;
    }

    function NTA_GetDamageType(skillid)
    {
    if(skillid == 74) // Corpse Explosion
    return NTA_DAMAGE_PHYSICAL;

    if(skillid == 112) // Blessed Hammer
    return NTA_DAMAGE_NONE;

    switch(GetBaseStat("skills.txt", skillid, 233))
    {
    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)
    {
    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_DetectAttackPattern()
    {
    switch(me.classid)
    {
    case NTC_CHAR_CLASS_AMAZON:
    return NTA_AmazonAttackPatternInt();
    case NTC_CHAR_CLASS_SORCERESS:
    return NTA_SorceressAttackPatternInt();
    case NTC_CHAR_CLASS_NECROMANCER:
    return NTA_NecromancerAttackPatternInt();
    case NTC_CHAR_CLASS_PALADIN:
    return NTA_PaladinAttackPatternInt();
    case NTC_CHAR_CLASS_BARBARIAN:
    return NTA_BarbarianAttackPatternInt();
    case NTC_CHAR_CLASS_DRUID:
    return NTA_DruidAttackPatternInt();
    case NTC_CHAR_CLASS_ASSASSIN:
    return NTA_AssassinAttackPatternInt();
    }

    return false;
    }

    // Return value : 0 = Unrecoverable process, 1 = Unavailable attack, 2 = Onetime fail, 3 = Success
    function NTA_Attack(target, firstorder)
    {
    switch(me.classid)
    {
    case NTC_CHAR_CLASS_AMAZON:
    return NTA_AmazonAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_SORCERESS:
    return NTA_SorceressAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_NECROMANCER:
    return NTA_NecromancerAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_PALADIN:
    return NTA_PaladinAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_BARBARIAN:
    return NTA_BarbarianAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_DRUID:
    return NTA_DruidAttackInt(target, firstorder);
    case NTC_CHAR_CLASS_ASSASSIN:
    return NTA_AssassinAttackInt(target, firstorder);
    }

    return 0;
    }

    // Internal function
    function NTA_AmazonAttackPatternInt()
    {
    return false;
    }

    function NTA_AmazonAttackInt(target, firstorder)
    {
    return 1;
    }

    function NTA_AmazonCastSkillInt(index, target)
    {
    return false;
    }

    function NTA_SorceressAttackPatternInt()
    {
    var _maxindex, _maxskill;
    var _avgskilllevel = new Array();

    _avgskilllevel[0] = parseInt((me.GetSkill(59, false)+me.GetSkill(39, false)+me.GetSkill(45, false)+me.GetSkill(55, false))/4);
    _avgskilllevel[1] = parseInt((me.GetSkill(53, false)+me.GetSkill(38, false)+me.GetSkill(48, false)+me.GetSkill(49, false))/4);
    _avgskilllevel[2] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false)+me.GetSkill(64, false))/4);
    _avgskilllevel[3] = parseInt((me.GetSkill(47, false)+me.GetSkill(36, false)+me.GetSkill(56, false))/3);

    _maxindex = -1;
    _maxskill = 0;

    for(var i = 0 ; i < _avgskilllevel.length ; i++)
    {
    if(_avgskilllevel[i] > _maxskill)
    {
    _maxindex = i;
    _maxskill = _avgskilllevel[i];
    }
    }

    switch(_maxindex)
    {
    case 0: // Blizzard + Glacial Spike
    NTConfig_AttackSkill[1] = 59;
    NTConfig_AttackSkill[2] = 55;
    NTConfig_AttackSkill[3] = 59;
    NTConfig_AttackSkill[4] = 55;
    break;
    case 1: // Chain Lightning + Lightning
    NTConfig_AttackSkill[1] = 49;
    NTConfig_AttackSkill[3] = 53;
    break;
    case 2: // Fire Ball + Frozen Orb
    NTConfig_AttackSkill[0] = 64;
    NTConfig_AttackSkill[1] = 47;
    NTConfig_AttackSkill[3] = 47;
    NTConfig_AttackSkill[5] = 64;
    NTConfig_AttackSkill[6] = 55;
    break;
    case 3: // Fire Ball + Meteor
    NTConfig_AttackSkill[1] = 56;
    NTConfig_AttackSkill[2] = 47;
    NTConfig_AttackSkill[3] = 56;
    NTConfig_AttackSkill[4] = 47;
    break;
    }

    return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
    }

    function NTA_SorceressAttackInt(target, firstorder)
    {
    var _primaryindex;

    if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
    {
    if(!NTTMGR_VisitTown())
    return 0;
    }

    if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8)
    {
    if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
    {
    var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

    if(_pos)
    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }

    if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
    return 2;

    return 3;
    }

    if(NTConfig_CastStatic < 100 && parseInt(target.hp*100/target.hpmax) > NTConfig_CastStatic && NTA_GetResistance(target, NTA_DAMAGE_LIGHTNING) <= 80)
    {
    var _staticlevel = NTC_GetSkillLevel(42);

    if(_staticlevel > 0)
    {
    var _staticrange;
    var _castx, _casty;

    _staticrange = Math.floor((5+_staticlevel-1)*2/3);

    if(GetDistance(me, target) > _staticrange || !CheckCollision(me, target, 6))
    {
    var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _staticrange, 6);

    if(_pos)
    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }

    if(target.x < me.x)
    _castx = me.x - 1;
    else if(target.x > me.x)
    _castx = me.x + 1;
    else
    _castx = me.x;

    if(target.y < me.y)
    _casty = me.y - 1;
    else if(target.y > me.y)
    _casty = me.y + 1;
    else
    _casty = me.y;

    if(!CheckCollision(target.areaid, _castx, _casty, 1))
    {
    _castx = me.x;
    _casty = me.y;
    }

    if(!NTC_CastSkill(42, NTC_HAND_RIGHT, _castx, _casty))
    return 2;

    return 3;
    }
    }

    _primaryindex = (target.spectype&0x0A) ? 1 : 3;

    if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) <= 90)
    {
    if(!NTA_SorceressCastSkillInt(_primaryindex, target))
    return 2;

    return 3;
    }

    if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) <= 80)
    {
    if(!NTA_SorceressCastSkillInt(5, target))
    return 2;

    return 3;
    }

    if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100 || (_primaryindex == 1 && NTC_GetMerc()))
    {
    if(!NTA_SorceressCastSkillInt(_primaryindex, target))
    return 2;

    return 3;
    }

    return 1;
    }

    function NTA_SorceressCastSkillInt(index, target)
    {
    if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
    {
    if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
    {
    var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

    if(_pos)
    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }

    return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
    }

    if(NTConfig_AttackSkill[index+1] > 0)
    {
    if(GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4))
    {
    var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);

    if(_pos)
    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }

    return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
    }

    for(var i = 0 ; i < 25 ; i++)
    {
    NTC_Delay(NTC_DELAY_FRAME);

    if(me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8)
    break;
    }

    return false;
    }

    function NTA_NecromancerAttackPatternInt()
    {
    return false;
    }

    function NTA_NecromancerAttackInt(target, firstorder)
    {
    return 1;
    }

    function NTA_NecromancerCastSkillInt(index, target)
    {
    return false;
    }

    function NTA_PaladinAttackPatternInt()
    {
    var _maxindex, _maxskill;
    var _avgskilllevel = new Array();

    _avgskilllevel[0] = parseInt((me.GetSkill(112, false)+me.GetSkill(108, false)+me.GetSkill(115, false))/3);
    _avgskilllevel[1] = parseInt((me.GetSkill(106, false)+me.GetSkill(96, false))/2);
    _avgskilllevel[2] = parseInt((me.GetSkill(121, false)+me.GetSkill(101, false)+me.GetSkill(118, false))/3);

    _maxindex = -1;
    _maxskill = 0;

    for(var i = 0 ; i < _avgskilllevel.length ; i++)
    {
    if(_avgskilllevel[i] > _maxskill)
    {
    _maxindex = i;
    _maxskill = _avgskilllevel[i];
    }
    }

    _maxindex = 0;
    switch(_maxindex)
    {
    case 0: // Blessed Hammer
    NTConfig_AttackSkill[1] = 112;
    NTConfig_AttackSkill[2] = 113;
    NTConfig_AttackSkill[3] = 112;
    NTConfig_AttackSkill[4] = 113;
    NTConfig_AttackSkill[5] = 101;
    NTConfig_AttackSkill[6] = 113;
    break;
    case 1: // Zeal
    NTConfig_AttackSkill[1] = 106;
    NTConfig_AttackSkill[2] = 122;
    NTConfig_AttackSkill[3] = 106;
    NTConfig_AttackSkill[4] = 122;
    break;
    case 2: // Fist of the Heavens
    NTConfig_AttackSkill[1] = 121;
    NTConfig_AttackSkill[2] = 123;
    NTConfig_AttackSkill[3] = 121;
    NTConfig_AttackSkill[4] = 123;
    break;
    }

    return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
    }

    function NTA_PaladinAttackInt(target, firstorder)
    {
    var _primaryindex;

    if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
    {
    if(!NTTMGR_VisitTown())
    return 0;
    }

    if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, NTA_DAMAGE_MAGIC) < 100)
    {
    if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
    {
    var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

    if(_pos)
    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }

    if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
    return 2;

    return 3;
    }

    _primaryindex = (target.spectype&0x0A) ? 1 : 3;

    if(NTA_GetResistance(target, NTA_DAMAGE_MAGIC) < 100)
    {
    if(_NTA_SkillRange[_primaryindex] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
    return 1;

    if(!NTA_PaladinCastSkillInt(_primaryindex, target))
    return 2;

    return 3;
    }

    if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, NTA_DAMAGE_MAGIC) >= 100)
    {
    if(_NTA_SkillRange[5] < 4 && !CheckCollision(target.areaid, target.x, target.y, 1))
    return 1;

    if(!NTA_PaladinCastSkillInt(5, target))
    return 2;

    return 3;
    }

    return 1;
    }

    function NTA_PaladinCastSkillInt(index, target)
    {
    if(NTConfig_AttackSkill[index] == 112)
    {
    if(me.x-target.x < 1 || me.x-target.x > 2 || me.y-target.y < 1 || me.y-target.y > 2)
    {
    if(CheckCollision(target.areaid, target.x+2, target.y+2, 1))
    NTM_MoveTo(target.areaid, target.x+2, target.y+2, 0);
    else if(me.x-target.x < -4 || me.x-target.x > 2 || me.y-target.y < 0 || me.y-target.y > 2)
    NTM_MoveTo(target.areaid, target.x-4, target.y, 0);
    }
    }
    else
    {
    if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
    {
    var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

    if(_pos)
    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }
    }

    if(NTConfig_AttackSkill[index+1] > 0)
    NTC_PutSkill(NTConfig_AttackSkill[index+1], NTC_HAND_RIGHT);

    return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
    }

    function NTA_BarbarianAttackPatternInt()
    {
    var _maxindex, _maxskill;
    var _avgskilllevel = new Array();

    _avgskilllevel[0] = me.GetSkill(151, false);

    _maxindex = -1;
    _maxskill = 0;

    for(var i = 0 ; i < _avgskilllevel.length ; i++)
    {
    if(_avgskilllevel[i] > _maxskill)
    {
    _maxindex = i;
    _maxskill = _avgskilllevel[i];
    }
    }

    switch(_maxindex)
    {
    case 0: // Whirlwind
    NTConfig_AttackSkill[1] = 151;
    NTConfig_AttackSkill[3] = 151;
    NTConfig_AttackSkill[5] = 152;
    break;
    }

    return (NTConfig_AttackSkill[1] && NTConfig_AttackSkill[3]);
    }

    function NTA_BarbarianAttackInt(target, firstorder)
    {
    var _primaryindex;

    if(NTTMGR_CheckCurse(NTConfig_CheckSelfSafe&0x10, NTConfig_CheckMercSafe&0x10))
    {
    if(!NTTMGR_VisitTown())
    return 0;
    }

    if(firstorder && NTConfig_AttackSkill[0] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100)
    {
    if(GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4))
    {
    var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);

    if(_pos)
    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }

    if(!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target))
    return 2;

    return 3;
    }

    _primaryindex = (target.spectype&0x0A) ? 1 : 3;

    if(NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100)
    {
    if((_NTA_SkillRange[_primaryindex] < 4 || NTConfig_AttackSkill[_primaryindex] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
    return 1;

    if(!NTA_BarbarianCastSkillInt(_primaryindex, target))
    return 2;

    return 3;
    }

    if(NTConfig_AttackSkill[5] > 0 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100)
    {
    if((_NTA_SkillRange[5] < 4 || NTConfig_AttackSkill[5] == 151) && !CheckCollision(target.areaid, target.x, target.y, 1))
    return 1;

    if(!NTA_BarbarianCastSkillInt(5, target))
    return 2;

    return 3;
    }

    return 1;
    }

    function NTA_BarbarianCastSkillInt(index, target)
    {
    if(NTConfig_AttackSkill[index] == 151)
    {
    var _castx, _casty;

    if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 5))
    {
    var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 5);

    if(_pos)
    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }

    _castx = target.x > me.x ? target.x+3 : target.x-3;
    _casty = target.y > me.y ? target.y+3 : target.y-3;

    return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], _castx, _casty);
    }

    if(GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4))
    {
    var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);

    if(_pos)
    NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
    }

    return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
    }

    function NTA_DruidAttackPatternInt()
    {
    return false;
    }

    function NTA_DruidAttackInt(target, firstorder)
    {
    return 1;
    }

    function NTA_DruidCastSkillInt(index, target)
    {
    return false;
    }

    function NTA_AssassinAttackPatternInt()
    {
    return false;
    }

    function NTA_AssassinAttackInt(target, firstorder)
    {
    return 1;
    }

    function NTA_AssassinCastSkillInt(index, target)
    {
    return false;
    }

Thread Information

Users Browsing this Thread

There are currently 3 users browsing this thread. (0 members and 3 guests)

Similar Threads

  1. Bot: Gamble Configuration
    By levsweld in forum Hacks Bots and Editors
    Replies: 0
    Last Post: 08-15-2009, 05:28 AM
  2. Bot did not recognize configuration.
    By Tesadus in forum Hacks Bots and Editors
    Replies: 2
    Last Post: 06-23-2008, 11:59 AM
  3. MM bot configuration
    By xxxsublimexxx111 in forum Hacks Bots and Editors
    Replies: 3
    Last Post: 12-24-2005, 10:45 AM
  4. pickit configuration
    By smalljohnson in forum Hacks Bots and Editors
    Replies: 1
    Last Post: 06-08-2005, 12:49 AM
  5. pickit configuration help!
    By pete1985 in forum Diablo II Discussion
    Replies: 2
    Last Post: 09-10-2004, 02:08 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •