anbei das verbesserte Rush-Script, wo der Fehler um zum Akt 2 zu gelangen ausgebessert wurde. Soeben getestet. Geht einwandfrei.
Vielen Dank nochmals Muddy. Bist mein Held. :cool:
Code:
/**
* This file was written by [Only registered and activated users can see links. Click Here To Register...]
* Check the programming section for updates and further scripts
* Last Update: 02/20/2011
*/
// Global variables
var _MWR_BossKilledAndariel = false;
var _MWR_BossKilledSummoner = false;
var _MWR_BossKilledDuriel = false;
var _MWR_BossKilledCouncil = false;
var _MWR_BossKilledMephisto = false;
var _MWR_BossKilledDiablo = false;
var _MWR_BossKilledSchenk = false;
var _MWR_BossKilledIzual = false;
var _MWR_BossKilledRadament = false;
var _MWR_RescuedAnya = false;
var _MWR_TPSafe = false;
var _MWR_CorrectTombId = -1;
var _MWR_IsActiveQuester;
var _MWR_ActiveQuesterName = "";
var _MWR_ActiveQuesterConfirmed = false;
var _MWR_ConfirmationRequestTicks = GetTickCount();
var _MWR_CommenceRush = false;
var _MWR_AnnounceStatus = true;
// Global constants
const _MWR_UNIT_AMULET_CLASSID = 521;
const _MWR_UNIT_STAFF_CLASSID = 92;
const _MWR_UNIT_FULLSTAFF_CLASSID = 91;
const _MWR_UNIT_BOOK_OF_SKILL = 552;
const _MWR_UNIT_SCROLL_OF_RESISTANCE = 646;
const _MWR_STATUS_WAITING = 0;
const _MWR_STATUS_INTERACTING = 1;
const _MWR_STATUS_MOVING = 2;
const _MWR_STATUS_TALKING = 3;
const _MWR_STATUS_PICKUP = 4;
function NTMain()
{
Include("libs/common/NTCommon.ntl");
NTC_IncludeLibs();
if(!NTC_IncludeConfig("NTBot/char_configs", false))
{
Include("NTBot/char_configs/NTConfig.ntl");
Include("MWRush/MWRushConfig_Quester.ntl");
}
NT_LoadConfig();
NTSI_LoadNIPFiles("NTBot/item_configs");
MWC_Initialize();
RegisterEvent(EVENT_SCRIPTMSG, MWR_ScriptMsgEvents);
var _output, _startTicks;
if(!NTTM_CheckAct())
{
NTC_SendMsgToScript("MWBotGame.ntj", NTTM_CheckAct, 62);
return;
}
if(!MWConfig_IsRusher)
{
_MWR_IsActiveQuester = MWR_SetQuesterStatus();
if(_MWR_IsActiveQuester)
{
Print("ÿc2I will be the active Quester.");
if(!MWR_CarriesItem(NTC_UNIT_CUBE) && me.diff > 0 && MWConfig_RushActs.indexOf(2) > -1)
Print("ÿc1WARNING: " + me.charname + " is set as active quester, but does not carry a horadric cube!");
}
else
Print("ÿc2I will relax while someone else does all the work. :)");
}
SetStatusText("ÿc2Waiting for all characters to join...");
while(!MWR_AllPlayersPresent() && !_MWR_CommenceRush)
NTC_Delay(1000)
_MWR_ConfirmationRequestTicks = GetTickCount();
_startTicks = GetTickCount();
if(MWConfig_IsRusher)
{
_MWR_ActiveQuesterName = "";
Say(".InvalidateQuester");
}
Print("ÿc8Quests scheduled: ");
for(var i = 1; i <= 5; i++)
{
_output = "";
if(MWConfig_RushActs.indexOf(i) > -1)
{
_output = "ÿc8Actÿc1 " + i + "ÿc8:ÿc2 ";
for(var j = 0; j < MWConfig_QuestSchedule.length; j++)
{
if(MWConfig_QuestSchedule[j].indexOf("A" + i) > -1)
_output += MWConfig_QuestSchedule[j].substr(2) + " ";
}
}
if(_output.length > 19)
Print(_output);
}
if(MWConfig_RushActs.length > 0)
{
if(MWConfig_RushActs.indexOf(1) > -1)
{
if(!MWR_DoActI())
{
NTC_SendMsgToScript("MWBotGame.ntj", MWR_DoActI, 108);
return;
}
else
Print("ÿc2Act I completed!");
}
if(MWConfig_RushActs.indexOf(2) > -1)
{
if(!MWR_DoActII())
{
NTC_SendMsgToScript("MWBotGame.ntj", MWR_DoActII, 118);
return;
}
else
Print("ÿc2Act II completed!");
}
if(MWConfig_RushActs.indexOf(3) > -1)
{
if(!MWR_DoActIII())
{
NTC_SendMsgToScript("MWBotGame.ntj", MWR_DoActIII, 128);
return;
}
else
Print("ÿc2Act III completed!");
}
if(MWConfig_RushActs.indexOf(4) > -1)
{
if(!MWR_DoActIV())
{
NTC_SendMsgToScript("MWBotGame.ntj", MWR_DoActIV, 138);
return;
}
else
Print("ÿc2Act IV completed!");
}
if(MWConfig_RushActs.indexOf(5) > -1)
{
if(!MWR_DoActV())
{
NTC_SendMsgToScript("MWBotGame.ntj", MWR_DoActV, 148);
return;
}
else
Print("ÿc2Act V completed!");
}
}
UnregisterEvent(EVENT_SCRIPTMSG);
Print("ÿc2Rush completed in ÿc8" + MWC_ConvertTicksToTimeString(GetTickCount() - _startTicks));
}
function MWR_DoActV()
{
if(!MWConfig_IsRusher)
{
NTTM_CheckAct(5);
if(_MWR_IsActiveQuester)
{
if(MWConfig_QuestSchedule.indexOf("A5Q1") > -1)
{
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Bloody Foothills");
while(!MWR_EnterNearbyTP(110) && NTC_InTown())
NTC_Delay(1000);
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledSchenk)
NTC_Delay(2000);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Harrogath");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_5))
return false;
}
}
if(MWConfig_QuestSchedule.indexOf("A5Q3") > -1)
{
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Frozen River");
while(!_MWR_TPSafe || !MWR_EnterNearbyTP(114) && NTC_InTown())
NTC_Delay(1000);
_MWR_TPSafe = false;
_npc = NTC_FindUnit(NTC_UNIT_OBJECT, 558, 5);
if(_npc)
MWR_ActivateObject(_npc);
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_5))
return false;
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Malah");
if(!NTTM_TownMove("malah"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_MALAH, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
if(NTT_DoInteract(_npc))
MWR_CancelNpcInteraction();
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
if(!MWR_EnterNearbyTP(114))
return false;
_npc = NTC_FindUnit(NTC_UNIT_OBJECT, 558, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_ActivateObject(_npc);
MWR_CancelNpcInteraction();
Say(".Rescued Anya");
}
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_5))
return false;
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Malah");
if(!NTTM_TownMove("malah"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_MALAH, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
if(NTT_DoInteract(_npc))
MWR_CancelNpcInteraction();
}
if(MWR_UseQuestItem(_MWR_UNIT_SCROLL_OF_RESISTANCE))
me.Cancel(1);
}
}
else
{
if(MWConfig_QuestSchedule.indexOf("A5Q1") > -1)
{
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledSchenk)
NTC_Delay(2000);
}
if(MWConfig_QuestSchedule.indexOf("A5Q3") > -1)
{
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_RescuedAnya)
NTC_Delay(2000);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Malah");
if(!NTTM_TownMove("malah"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_MALAH, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
if(NTT_DoInteract(_npc))
MWR_CancelNpcInteraction();
}
if(MWR_UseQuestItem(_MWR_UNIT_SCROLL_OF_RESISTANCE))
me.Cancel(1);
}
}
}
else
{
if(!NTTM_CheckAct())
return false;
if(MWConfig_QuestSchedule.indexOf("A5Q1") > -1)
{
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(111))
return false;
NTP_DoPrecast(true);
NTM_MoveTo(110, 3866, 5122);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Bloody Foothills.");
NTA_ClearPosition(5, true, 2, false, false);
NTM_MoveTo(110, 3866, 5122);
while(!MWR_IsQuesterNearby() || !MWR_CheckQuesterAct())
NTC_Delay(500);
if(NTA_KillMonster(GetLocaleString(22435)))
Say(".Killed Schenk");
NTSI_PickItems();
NTA_ClearPosition(20, true, 2, false, false);
NTM_MoveTo(110, 3866, 5122);
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_5))
NTTM_CheckAct();
}
if(MWConfig_QuestSchedule.indexOf("A5Q3") > -1)
{
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(113))
return false;
NTP_DoPrecast(true);
if(!NTM_MoveToStair(me.areaid, 114))
return false;
if(!NTM_TakeStair(114))
return false;
if(!NTM_MoveToPresetUnit(114, NTC_UNIT_OBJECT, 460, 3, 3))
return false;
NTM_MoveToPresetUnit(114, NTC_UNIT_OBJECT, 460, 3, 3);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Frozen River, not safe though.");
NTA_ClearPosition(40, true, 2, false, false);
Say(".TPSafe");
while(!_MWR_RescuedAnya)
{
NTM_MoveToPresetUnit(114, NTC_UNIT_OBJECT, 460, 5, 5);
NTA_ClearPosition(40, true, 2, false, false);
NTC_Delay(5000);
}
NTM_MoveToPresetUnit(114, NTC_UNIT_OBJECT, 460, 3, 3);
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_5))
NTTM_CheckAct();
}
}
return true;
}
function MWR_DoActIV()
{
var _npc, _prePos;
if(!MWConfig_IsRusher)
{
NTTM_CheckAct(4);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
if(_MWR_IsActiveQuester)
{
if(MWConfig_QuestSchedule.indexOf("A4Q1") > -1)
{
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Plains Of Despair");
while(!MWR_EnterNearbyTP(105) && NTC_InTown())
NTC_Delay(1000);
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledIzual)
NTC_Delay(2000);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Pandemonium Fortress");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_4))
return false;
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Tyrael");
if(!NTTM_TownMove("tyrael"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_TYRAEL_ACT_4, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
MWR_TalkToNpc(_npc, true);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
}
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Chaos Sanctuary");
while(!_MWR_TPSafe || !MWR_EnterNearbyTP(108) && NTC_InTown())
NTC_Delay(1000);
_MWR_TPSafe = false;
NTM_WalkTo(7768, 5261);
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledDiablo)
NTC_Delay(2000);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Pandemonium Fortress");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_4))
return false;
}
}
else
{
if(MWConfig_QuestSchedule.indexOf("A4Q1") > -1)
{
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledIzual)
NTC_Delay(2000);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Tyrael");
if(!NTTM_TownMove("tyrael"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_TYRAEL_ACT_4, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
}
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledDiablo)
NTC_Delay(2000);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Tyrael");
if(!NTTM_TownMove("tyrael"))
return false;
if(_MWR_IsActiveQuester)
{
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_TYRAEL_ACT_4, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
}
}
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Portal To Harrogath");
while(!MWR_UseRedPortal(566, 109))
NTC_Delay(1000);
}
else
{
if(!NTTM_CheckAct())
return false;
if(MWConfig_QuestSchedule.indexOf("A4Q1") > -1)
{
NTTMGR_TownManager();
while(!MWR_IsQuesterNearby() || !MWR_CheckQuesterAct())
NTC_Delay(500);
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(106))
return false;
NTP_DoPrecast(true);
if(!NTM_MoveToPresetUnit(105, NTC_UNIT_MONSTER, 256, 10, 10))
{
if(!NTM_MoveToPresetUnit(105, NTC_UNIT_MONSTER, 256, -10, -10))
{
if(!NTM_MoveToPresetUnit(105, NTC_UNIT_MONSTER, 256, 10, -10))
{
if(!NTM_MoveToPresetUnit(105, NTC_UNIT_MONSTER, 256, -10, 10))
return false;
}
}
}
_prePos = new coord(me.x, me.y);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Plains of Despair.");
if(NTA_KillMonster(256))
Say(".Killed Izual");
NTSI_PickItems();
NTM_MoveTo(me.areaid, _prePos.x + 1, _prePos.y + 1);
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_4))
NTTM_CheckAct();
}
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(107))
return false;
NTP_DoPrecast(true);
if(!NTM_MoveTo(108, 7792, 5292))
return false;
if(!MWR_ClearCS())
return false;
NTM_MoveTo(108, 7768, 5255);
while(!MWR_CheckQuesterAct())
NTC_Delay(500);
if(!NTM_MakeTP())
return false;
else
Say(".TPSafe");
while(!MWR_IsQuesterNearby() || !MWR_CheckQuesterAct())
NTC_Delay(500);
NTM_MoveTo(108, 7792, 5292);
NTP_DoPrecast(true);
NTC_PutSkill(109, NTC_HAND_RIGHT);
NTC_FindUnit(NTC_UNIT_MONSTER, 243, 150);
if(NTA_KillMonster(243))
Say(".Killed Diablo");
NTSI_PickItems();
NTM_MoveTo(108, 7768, 5255);
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_4))
NTTM_CheckAct();
NTTM_TownMove("tyrael");
NTC_FindUnit(NTC_UNIT_OBJECT, 566, 100);
MWR_UseRedPortal(566, 109);
}
return true;
}
function MWR_DoActIII()
{
var _npc, _waypoint, _offsetVectors, _monster, _council, _minIndex, _minDist, _dist;
if(!MWConfig_IsRusher)
{
NTTM_CheckAct(3);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
if(_MWR_IsActiveQuester)
{
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Travincal");
while(!MWR_EnterNearbyTP(83) && NTC_InTown())
NTC_Delay(1000);
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledCouncil)
NTC_Delay(2000);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Kurast Docks");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_3))
return false;
}
}
else
{
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledCouncil)
NTC_Delay(2000);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Deckard Cain");
if(!NTTM_TownMove("cain"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_CAIN_ACT_3, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
if(_MWR_IsActiveQuester)
{
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Durance Of Hate");
while(!MWR_EnterNearbyTP(102) && NTC_InTown())
NTC_Delay(1000);
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledMephisto)
NTC_Delay(2000);
NTC_Delay(2500);
}
else
{
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledMephisto)
NTC_Delay(2000);
}
for(var i = 0; i < 5; i++)
{
MWR_CheckDeath();
if(NTC_InTown())
{
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
continue;
if(!MWR_EnterNearbyTP(102))
continue;
}
MWR_UpdateStatus(_MWR_STATUS_INTERACTING, "Portal");
if(!MWR_UseRedPortal(342, 103))
continue;
else
return true;
}
return false;
}
else
{
if(!NTTM_CheckAct())
return false;
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(83))
return false;
NTP_DoPrecast(true);
_offsetVectors = new Array();
_offsetVectors.push(new vector(51, -34));
_offsetVectors.push(new vector(51, -53));
_offsetVectors.push(new vector(51, -77));
_offsetVectors.push(new vector(51, -100));
_offsetVectors.push(new vector(49, -118));
_offsetVectors.push(new vector(59, -130));
_offsetVectors.push(new vector(79, -130));
_offsetVectors.push(new vector(93, -130));
_waypoint = NTC_FindUnit(NTC_UNIT_OBJECT, 237);
if(!_waypoint)
return false;
if(!NTM_MoveTo(me.areaid, _waypoint.x + 81, _waypoint.y - 29))
return false;
for(var i = 0; i < _offsetVectors.length; i++)
NTM_MoveTo(me.areaid, _waypoint.x + _offsetVectors[i].x, _waypoint.y + _offsetVectors[i].y);
NTA_ClearPosition(15, true, 2, false, false);
NTM_MoveTo(me.areaid, _waypoint.x + _offsetVectors[_offsetVectors.length - 1].x, _waypoint.y + _offsetVectors[_offsetVectors.length - 1].y);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Travincal.");
while(!MWR_IsQuesterNearby() || !MWR_CheckQuesterAct())
{
if(GetDistance(me.x, me.y, _waypoint.x + _offsetVectors[_offsetVectors.length - 1].x, _waypoint.y + _offsetVectors[_offsetVectors.length - 1].y) > 7.5)
NTM_MoveTo(me.areaid, _waypoint.x + _offsetVectors[_offsetVectors.length - 1].x + 2, _waypoint.y + _offsetVectors[_offsetVectors.length - 1].y + 2);
NTA_ClearPosition(15, true, 2, false, false);
NTC_Delay(500);
}
NTM_MoveTo(me.areaid, _waypoint.x + 96, _waypoint.y - 90);
_council = new Array(GetLocaleString(2860), GetLocaleString(2862), GetLocaleString(2863));
while(_council.length > 0)
{
//_monster, _council, _index, _minDist
_minIndex = -1;
_minDist = 1E3;
for(var i = 0; i < _council.length; i++)
{
_monster = NTC_FindUnit(NTC_UNIT_MONSTER, _council[i], 3);
if(_monster && _monster.IsAttackable() && NTA_IsValidMonster(_monster))
{
_dist = GetDistance(_monster.x, _monster.y, _waypoint.x + _offsetVectors[_offsetVectors.length - 1].x + 5, _waypoint.y + _offsetVectors[_offsetVectors.length - 1].y + 55);
if(_dist < _minDist)
{
_minIndex = i;
_minDist = _dist;
}
}
}
if(_minIndex > -1)
{
if(NTA_KillMonster(_council[_minIndex]))
_council.splice(_minIndex, 1);
}
else
break;
}
Say(".Killed Council");
NTA_ClearPosition(50, true, 2, false, false);
NTM_MoveTo(me.areaid, _waypoint.x + 1, _waypoint.y + 1);
if(!NTM_TakeWaypoint(NTC_AREA_ID_ACT_3))
NTTM_CheckAct();
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(101))
return false;
NTP_DoPrecast(true);
if(!NTM_MoveToStair(me.areaid, 102))
return false;
if(!NTM_TakeStair(102))
return false;
NTM_MoveTo(me.areaid, 17625, 8070);
NTA_ClearPosition(40, true, 2, false, false);
NTM_MoveTo(me.areaid, 17590, 8069);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("Tp up @Durance Of Hate.");
while(!MWR_IsQuesterNearby())
NTC_Delay(500);
NTM_MoveTo(me.areaid, 17578, 8070);
NTM_MoveTo(me.areaid, 17549, 8082);
NTM_MoveTo(me.areaid, 17541, 8070);
NTC_FindUnit(NTC_UNIT_MONSTER, 242, 10);
if(NTA_KillMonster(242))
Say(".Killed Mephisto");
else
return false;
NTSI_PickItems();
NTA_ClearPosition(30, true, 2, false, false);
NTM_MoveTo(me.areaid, 17590, 8069);
NTA_ClearPosition(40, true, 2, false, false);
NTM_MoveTo(me.areaid, 17625, 8070);
NTA_ClearPosition(40, true, 2, false, false);
NTM_MoveTo(me.areaid, 17590, 8069);
return MWR_UseRedPortal(342, 103);
}
}
function MWR_DoActII()
{
var i, j;
var _object, _npc, _journal, _journalx, _journaly, _offset, _cube, _chest, _dest, _unit, _tombs, _portal, _path, _endTicks, _preCount;
if(!MWConfig_IsRusher)
{
NTTM_CheckAct(2);
if(_MWR_IsActiveQuester)
{
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_JERHYN, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
}
}
// Cube
if(MWConfig_GetHoradricCubesInNorm && !MWR_CarriesItem(NTC_UNIT_CUBE) && me.diff == 0)
{
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Halls Of The Dead");
while(!MWR_EnterNearbyTP(60) && NTC_InTown())
NTC_Delay(1000);
MWR_UpdateStatus(_MWR_STATUS_PICKUP, "Horadric Cube");
for(var i = 0; i < 10; i++)
{
if(MWR_CarriesItem(NTC_UNIT_CUBE))
break;
MWR_PickupItem(NTC_UNIT_CUBE);
NTC_Delay(500);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Lut Gholein");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
return false;
}
}
if(_MWR_IsActiveQuester)
{
if(MWConfig_QuestSchedule.indexOf("A2Q1") > -1)
{
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Sewers Level 3");
while(!MWR_EnterNearbyTP(49) && NTC_InTown())
NTC_Delay(1000);
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledRadament)
NTC_Delay(1000);
if(MWR_CheckDeath())
{
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
}
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Portal Clearance");
while(!_MWR_TPSafe)
NTC_Delay(1000);
_MWR_TPSafe = false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Sewers Level 3");
while(!MWR_EnterNearbyTP(49) && NTC_InTown())
NTC_Delay(1000);
for(i = 0; i < 10; i++)
{
MWR_PickupItem(_MWR_UNIT_BOOK_OF_SKILL);
if(MWR_CarriesItem(_MWR_UNIT_BOOK_OF_SKILL))
break;
NTC_Delay(250);
if(MWR_CountNearbyItems(_MWR_UNIT_BOOK_OF_SKILL) == 0)
break;
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Lut Gholein");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
return false;
}
if(MWR_UseQuestItem(_MWR_UNIT_BOOK_OF_SKILL))
me.Cancel(1);
}
if(!MWCU_MoveCubeToInventory())
return false;
else
{
if(MWCU_GetItemsInCube().length > 0)
{
_cube = me.GetItems(NTC_UNIT_CUBE);
MWR_UpdateStatus(_MWR_STATUS_INTERACTING, "Cube");
if(_cube && _cube.length > 0)
{
NTCU_OpenCubeInt(_cube);
NTCU_CheckCubeInventoryInt();
NTCU_ClearCubeInt();
NTCU_CloseCubeInt();
}
}
me.Cancel(1);
}
// Amulet
for(i = 0; i < 10; i++)
{
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
continue;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Claw Viper Temple");
while(!MWR_EnterNearbyTP(61) && NTC_InTown())
NTC_Delay(1000);
if(!me.GetQuest(11, 12) || !me.GetQuest(11, 0) || !me.GetQuest(10, 12) || !me.GetQuest(10, 0))
{
MWR_UpdateStatus(_MWR_STATUS_INTERACTING, "Sun Altar");
for(j = 0; j < 20; j++)
{
_object = NTC_FindUnit(NTC_UNIT_OBJECT, 149, 5);
if(j % 5 == 0)
{
if(MWR_ActivateObject(_object))
break;
}
NTC_Delay(250);
}
if(j >= 20)
continue;
MWR_UpdateStatus(_MWR_STATUS_PICKUP, "Viper Amulet");
for(j = 0; j < 10; j++)
{
MWR_PickupItem(_MWR_UNIT_AMULET_CLASSID);
if(MWR_CarriesItem(_MWR_UNIT_AMULET_CLASSID))
break;
NTC_Delay(500);
}
if(j >= 10)
continue;
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Lut Gholein");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
continue;
}
if(!me.GetQuest(11, 12) || !me.GetQuest(11, 0) || !me.GetQuest(10, 12) || !me.GetQuest(10, 0))
{
MWR_UpdateStatus(_MWR_STATUS_INTERACTING, "Viper Amulet");
if(NTC_InTown())
MWR_MoveQuestItemToCube(_MWR_UNIT_AMULET_CLASSID);
if(MWR_CarriesItem(_MWR_UNIT_AMULET_CLASSID))
break;
}
else
break;
}
if(i >= 10)
return false;
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Drognan");
if(!NTTM_TownMove("drognan"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_DROGNAN, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
}
// Staff
for(i = 0; i < 10; i++)
{
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
continue;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Maggot's Lair");
while(!MWR_EnterNearbyTP(64) && NTC_InTown())
NTC_Delay(1000);
if(!me.GetQuest(10, 12) || !me.GetQuest(10, 0))
{
MWR_UpdateStatus(_MWR_STATUS_PICKUP, "Staff");
for(j = 0; j < 10; j++)
{
MWR_PickupItem(_MWR_UNIT_STAFF_CLASSID);
if(MWR_CarriesItem(_MWR_UNIT_STAFF_CLASSID))
break;
NTC_Delay(500);
}
if(j >= 10)
continue;
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Lut Gholein");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
continue;
}
if(!me.GetQuest(10, 12) || !me.GetQuest(10, 0))
{
MWR_UpdateStatus(_MWR_STATUS_INTERACTING, "Staff");
if(NTC_InTown())
MWR_MoveQuestItemToCube(_MWR_UNIT_STAFF_CLASSID);
if(MWR_CarriesItem(_MWR_UNIT_STAFF_CLASSID))
break;
}
else
break;
}
if(i >= 10)
return false;
if(!me.GetQuest(10, 12) || !me.GetQuest(10, 0))
{
_cube = me.GetItems(NTC_UNIT_CUBE);
MWR_UpdateStatus(_MWR_STATUS_INTERACTING, "Cube");
if(_cube && _cube.length > 0)
{
SetUIState(0x1, true);
if(!NTCU_OpenCubeInt(_cube[0]))
return false;
MWCU_Transmute(_cube[0]);
if(NTCU_CheckCubeInventoryInt() == 1)
{
NTCU_ClearCubeInt();
NTCU_CloseCubeInt();
}
else
{
NTCU_CloseCubeInt();
return false;
}
}
}
if(MWCU_MoveCubeToStash())
me.Cancel(1);
// Summoner
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Arcane Sanctuary");
while(!MWR_EnterNearbyTP(74) && NTC_InTown())
NTC_Delay(1000);
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledSummoner)
NTC_Delay(1000);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Lut Gholein");
for(var i = 0; i < 5; i++)
{
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
return false;
}
if(NTC_InTown())
break;
}
// Duriel
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Deckard Cain");
if(!NTTM_TownMove("cain"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_CAIN_ACT_2, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Tal Rasha's Tomb");
while((_MWR_CorrectTombId == -1 || !MWR_EnterNearbyTP(_MWR_CorrectTombId)) && NTC_InTown())
NTC_Delay(1000);
if(!NTC_FindUnit(NTC_UNIT_OBJECT, 100, 10) && MWR_CarriesItem(_MWR_UNIT_FULLSTAFF_CLASSID) && (!me.GetQuest(10, 12) || !me.GetQuest(10, 0)))
{
MWR_UpdateStatus(_MWR_STATUS_INTERACTING, "Orifice");
for(j = 0; j < 10; j++)
{
_object = NTC_FindUnit(NTC_UNIT_OBJECT, 152, 5);
if(j % 5 == 0)
MWR_ActivateObject(_object);
NTC_Delay(200);
if(GetUIState(0x0E))
break;
}
if(j >= 10)
return false;
MWR_InsertStaff();
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Lut Gholein");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
return false;
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Duriel's Lair");
while(!MWR_EnterNearbyTP(73) && NTC_InTown())
NTC_Delay(1000);
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_TYRAEL_ACT_2, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
_MWR_BossKilledDuriel = true;
Say(".Killed Duriel");
MWR_TalkToNpc(_npc, true);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Lut Gholein");
if(!MWR_CheckDeath())
{
for(i = 0; i < 5; i++)
{
if(MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2) || MWR_EnterNearbyTP(296))
break;
NTC_Delay(2000);
}
if(i >= 5)
return false;
}
}
else
{
if(MWConfig_QuestSchedule.indexOf("A2Q1") > -1)
{
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Portal Clearance");
while(!_MWR_TPSafe)
NTC_Delay(1000);
_MWR_TPSafe = false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Sewers Level 3");
while(!MWR_EnterNearbyTP(49) && NTC_InTown())
NTC_Delay(1000);
for(i = 0; i < 10; i++)
{
MWR_PickupItem(_MWR_UNIT_BOOK_OF_SKILL);
if(MWR_CarriesItem(_MWR_UNIT_BOOK_OF_SKILL))
break;
NTC_Delay(500);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Lut Gholein");
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
return false;
}
if(MWR_UseQuestItem(_MWR_UNIT_BOOK_OF_SKILL))
me.Cancel(1);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Jehryn");
if(!NTTM_TownMove("palacefront"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledDuriel)
NTC_Delay(2000);
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Jehryn");
if(!NTTM_TownMove("palacefront"))
return false;
for(i = 0; i < 5; i++)
{
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_JERHYN, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
if(MWR_TalkToNpc(_npc, true))
break;
}
if(me.GetQuest(14, 4))
break;
}
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Meshif");
if(!NTTM_TownMove("meshif"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_MESHIF_ACT_2, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
if(NTT_DoInteract(_npc))
{
for(i = 0; i < 16; i++)
{
if((i % 4) == 0)
me.SelectNPCMenu(0x0D38);
if(me.areaid != 40)
break;
NTC_Delay(500);
}
}
return i < 16;
}
}
else
{
if(!NTTM_CheckAct())
return false;
NTTMGR_TownManager();
// Cube
if(MWConfig_GetHoradricCubesInNorm && me.diff == 0)
{
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(57))
return false;
NTP_DoPrecast(true);
if(NTM_MoveToStair(me.areaid, 60))
{
if(!NTM_TakeStair(60))
return false;
}
else
return false;
if(!NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 354, -5, -5))
return false;
NTA_ClearPosition(25, true, 2, false, false);
if(NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 354, -5, -5))
{
for(i = 0; i < 10; i++)
{
_chest = NTC_FindUnit(NTC_UNIT_OBJECT, 354, 5);
if(_chest)
{
if(NTC_OpenChest(_chest))
break;
}
NTC_Delay(200);
}
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 354, -5, -5);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Halls of the Dead.");
_endTicks = GetTickCount() + 20E3; // Wait 20 seconds at most
_preCount = MWR_CountNearbyItems(NTC_UNIT_CUBE);
while(_preCount != 0 && MWR_CountNearbyItems(NTC_UNIT_CUBE) > 0 && _endTicks > GetTickCount())
{
NTA_ClearPosition(20, true, 2, false, false);
NTC_Delay(1000);
}
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 354, -5, -5)
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
NTTM_CheckAct();
}
else
return false;
}
// Radament
if(MWConfig_QuestSchedule.indexOf("A2Q1") > -1)
{
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(48))
return false;
NTP_DoPrecast(true);
if(NTM_MoveToStair(me.areaid, 49))
{
if(!NTM_TakeStair(49))
return false;
}
else
return false;
if(!NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 355, 3, 3))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, 229, 5);
if(!_npc)
return false;
NTM_MoveTo(me.areaid, _npc.x + 5, _npc.y);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Sewers.");
NTM_MoveTo(me.areaid, _npc.x + 5, _npc.y + 5);
for(i = 0; i < 30; i++)
{
if(MWR_IsQuesterNearby())
break;
NTC_Delay(100);
}
if(NTA_KillMonster(229))
{
Say(".Killed Radament");
NTA_ClearPosition(40, true, 2, false, false);
NTM_MoveTo(me.areaid, _npc.x - 3, _npc.y - 3);
if(!NTM_MakeTP())
return false;
Say(".TPSafe");
NTA_ClearPosition(40, true, 2, false, false);
}
NTC_Delay(2500);
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 355, 3, 3);
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
NTTM_CheckAct();
}
// Amulet
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(44))
return false;
NTP_DoPrecast(true);
if(NTM_MoveToStair(45, 58))
{
if(!NTM_TakeStair(58))
return false;
}
else
return false;
NTP_DoPrecast();
if(!NTM_MoveToStair(me.areaid, 61))
return false;
if(!NTM_TakeStair(61))
return false;
if(NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 149, 2, 2))
{
if(NTA_ClearPosition(30, true, 2, false, false))
{
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 149, -1, -6);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Claw Viper Temple.");
}
while(!MWR_IsQuesterNearby())
{
NTA_ClearPosition(10, true, 2, false, false);
NTC_Delay(500);
}
while(MWR_IsQuesterNearby())
{
NTA_ClearPosition(35, true, 2, false, false);
NTC_Delay(2500);
}
if(_MWR_AnnounceStatus)
Say("Don't forget talking to drognan. ;)");
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 149, -1, -6);
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
NTTM_CheckAct();
}
else
return false;
// Staff
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(43))
return false;
NTP_DoPrecast(true);
for(i = 0; i < 3; i++)
{
if(!NTM_MoveToStair(me.areaid, 62 + i))
return false;
if(!NTM_TakeStair(62 + i))
return false;
}
NTP_DoPrecast();
if(NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 356, -5, -5))
{
if(NTA_ClearPosition(25, true, 2, false, false))
{
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 356, -5, -5);
var _chest;
for(i = 0; i < 10; i++)
{
_chest = NTC_FindUnit(NTC_UNIT_OBJECT, 356, 5);
if(_chest)
{
if(NTC_OpenChest(_chest))
break;
}
NTC_Delay(200);
}
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Maggot's Lair.");
}
_preCount = MWR_CountNearbyItems(_MWR_UNIT_STAFF_CLASSID);
while(_preCount != 0 && _preCount == MWR_CountNearbyItems(_MWR_UNIT_STAFF_CLASSID))
{
NTA_ClearPosition(10, true, 2, false, false);
NTC_Delay(1000);
}
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 356, -5, -5, false);
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
NTTM_CheckAct();
}
else
return false;
// Summoner
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(74))
return false;
NTP_DoPrecast(true);
_journal = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
for(i = 0; i < _journal.length; i++)
{
if(_journal[i].id == 357)
{
_journalx = _journal[i].roomx * 5 + _journal[i].x;
_journaly = _journal[i].roomy * 5 + _journal[i].y;
break;
}
}
_vec = new vector(_journalx - me.x, _journaly - me.y);
if(Math.abs(_vec.x) > Math.abs(_vec.y))
_vec.y = 0;
else
_vec.x = 0;
_vec.normalize();
if(_vec.x == -1 && _vec.y == 0) // Northwest
_offset = new coord(46, 1);
else if(_vec.x == 0 && _vec.y == -1) // Northeast
_offset = new coord(50, 25);
else if(_vec.x == 0 && _vec.y == 1) // Southwest
_offset = new coord(41, 6);
else // Souheast
_offset = new coord(-15, 36);
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 357, _offset.x, _offset.y);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Arcane Sanctuary.");
while(!MWR_IsQuesterNearby())
{
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 357, _offset.x + 1, _offset.y + 1);
NTA_ClearPosition(5, true, 2, false, false);
NTC_Delay(1000);
}
if(NTA_KillMonster(250))
{
NTA_ClearPosition(20, true, 2, false, false);
_journal = NTC_FindUnit(NTC_UNIT_OBJECT, 357, 5);
if(_journal)
{
for(i = 0; i < 40; i++)
{
MWR_ActivateObject(_journal);
NTC_Delay(500);
me.Cancel(0);
me.Cancel(1);
_portal = NTM_FindPortalAreaInt(46);
NTC_Delay(250);
NTA_ClearPosition(15, true, 2, false, false);
if(_portal != -1)
break;
}
if(i >= 40)
return false;
}
NTM_UsePortal("Portal", 46);
Say(".Killed Summoner");
}
// Duriel
if(me.areaid != 46)
{
NTTM_CheckAct();
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(46))
return false;
}
NTP_DoPrecast(true);
_tombs = GetRoom();
if(!_tombs)
return false;
if(!NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_TILE, _tombs.correcttomb - 28, 0, 0))
return false;
_unit = NTC_FindUnit(NTC_UNIT_TILE, _tombs.correcttomb - 28, 5);
if(!_unit)
return false;
Say(".TombID " + _unit.subareaid);
if(!NTM_TakeStair(_unit.subareaid))
return false;
if(!NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 152, -2, 2))
return false;
NTA_ClearPosition(35, true, 2, false, false);
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 152, -2, 2);
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Tal Rasha's Tomb.");
while(!MWR_IsQuesterNearby())
{
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 152, -5, 0);
NTA_ClearPosition(30, true, 2, false, false);
NTC_Delay(500);
}
while(!NTC_FindUnit(NTC_UNIT_OBJECT, 100, 5))
{
NTM_MoveToPresetUnit(me.areaid, NTC_UNIT_OBJECT, 152, -5, 0);
NTA_ClearPosition(30, true, 2, false, false);
NTC_Delay(1000);
}
if(!NTM_TakeUnit(NTC_UNIT_OBJECT, 100))
return false;
if(!NTA_KillMonster(211))
return false;
NTSI_PickItems();
NTC_Delay(2500);
if(me.classid == NTC_CHAR_CLASS_PALADIN)
NTC_PutSkill(MWS_VIGOR, NTC_HAND_RIGHT);
else if(me.classid == NTC_CHAR_CLASS_ASSASSIN && !me.GetState(157))
NTC_CastSkill(MWS_BURST_OF_SPEED, NTC_HAND_RIGHT);
// Walk to Tyrael as path calculation and teleport do not really work in Duriels Lair
_path = new Array();
_path.push(new coord(22628, 15712));
_path.push(new coord(22615, 15707));
_path.push(new coord(22596, 15707));
_path.push(new coord(22579, 15707));
_path.push(new coord(22579, 15688));
_path.push(new coord(22579, 15670));
_path.push(new coord(22582, 15654));
_path.push(new coord(22580, 15637));
_path.push(new coord(22577, 15620));
_path.push(new coord(22577, 15603));
_path.push(new coord(22576, 15600));
for(var i = 0; i < _path.length; i++)
{
NTM_WalkTo(_path[i].x, _path[i].y);
if(GetDistance(me.x, me.y, _path[i].x, _path[i].y) > 3)
i--;
}
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Duriel's Lair.");
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_2))
NTTM_CheckAct();
NTC_Delay(10000);
return true;
}
return false;
}
function MWR_DoActI()
{
var i;
var _npc;
if(!MWConfig_IsRusher)
{
NTTM_CheckAct(1);
if(_MWR_IsActiveQuester)
{
// Enter a tp to catacombs level 4 if available
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Portal");
if(!NTTM_TownMove("portalspot"))
return false;
MWR_UpdateStatus(_MWR_STATUS_WAITING, "TP Catacombs");
while(!MWR_EnterNearbyTP(37) && NTC_InTown())
NTC_Delay(1000);
// Wait for quest completion
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledAndariel)
NTC_Delay(500);
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Rogue Encampment");
for(var i = 0; i < 5; i++)
{
if(!MWR_CheckDeath())
{
if(!MWR_EnterNearbyTP(NTC_AREA_ID_ACT_1))
continue;
}
if(NTC_InTown())
break;
}
}
else
{
MWR_UpdateStatus(_MWR_STATUS_WAITING, "Quest Completion");
while(!_MWR_BossKilledAndariel)
NTC_Delay(2000);
}
// Talk to Warriv and go east
MWR_UpdateStatus(_MWR_STATUS_MOVING, "Warriv");
if(!NTTM_TownMove("warriv"))
return false;
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_WARRIV_ACT_1, 5);
if(_npc)
{
MWR_UpdateStatus(_MWR_STATUS_TALKING, _npc.name);
MWR_TalkToNpc(_npc, true);
if(NTT_DoInteract(_npc))
{
for(i = 0; i < 16; i++)
{
if((i % 4) == 0)
me.SelectNPCMenu(0x0D36);
if(me.areaid != NTC_AREA_ID_ACT_1)
break;
NTC_Delay(500);
}
}
return i < 16;
}
}
else
{
if(!NTTM_CheckAct())
return false;
NTTMGR_TownManager();
if(!NTTM_TownMove("waypoint"))
return false;
if(!NTM_TakeWaypoint(35))
return false;
NTP_DoPrecast(true);
for(i = 0; i < 2; i++)
{
if(!NTM_MoveToStair(me.areaid, 36 + i))
return false;
if(!NTM_TakeStair(36 + i))
return false;
}
if(!NTM_MoveTo(me.areaid, 22595, 9615))
return false;
NTA_ClearPosition(20, true, 2, false, false);
if(!NTM_MoveTo(me.areaid, 22584, 9613))
return false;
if(!NTM_MakeTP())
return false;
else if(_MWR_AnnounceStatus)
Say("TP up @Catacombs.");
do
{
NTM_MoveTo(me.areaid, 22595, 9615);
NTA_ClearPosition(15, true, 2, false, false);
NTC_Delay(1000);
} while(!MWR_IsQuesterNearby());
if(!NTM_MoveTo(me.areaid, 22532, 9553))
return false;
if(!NTA_KillMonster(156))
return false;
else
Say(".Killed Andariel");
NTC_PingDelay(2000);
NTSI_PickItems();
if(!NTM_MoveTo(me.areaid, 22584, 9613) || !MWR_EnterNearbyTP(NTC_AREA_ID_ACT_1))
NTTM_CheckAct();
return true;
}
}
function MWR_IsQuesterNearby()
{
var _npc;
NTC_PutSkill(109, NTC_HAND_RIGHT);
for(var i = 0; i < 5; i++)
{
_npc = NTC_FindUnit(NTC_UNIT_PLAYER);
if(_npc)
{
while(_npc.GetNext())
{
if(MWConfig_ActiveQuestersName.toLowerCase() == _npc.name.toLowerCase() || _MWR_ActiveQuesterName == "" || _MWR_ActiveQuesterName.toLowerCase() == _npc.name.toLowerCase())
{
if(NTC_InMyParty(_npc.name))
return true;
}
}
}
NTC_Delay(250);
}
return false;
}
function MWR_EnterNearbyTP(dest)
{
var _portal;
if(me.areaid == dest)
return true;
for(var i = 0; i < 5; i++)
{
_portal = NTM_FindPortalAreaInt(dest);
if(_portal != -1)
break;
NTC_Delay(400);
}
if(_portal != -1)
{
for(var i = 0; i < 30; i++)
{
if(me.areaid == dest)
{
NTC_PingDelay(500);
if(MWConfig_IsRusher && NTC_InTown())
NTC_PutSkill(115, NTC_HAND_RIGHT);
return true;
}
if(i % 5 == 0)
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
if(i % 10 == 5)
NTM_GetCloserInt(_portal);
NTC_Delay(200);
}
}
return false;
}
function MWR_CheckDeath()
{
if(me.hp <= 0 || me.mode == 17)
{
Print("ÿc1Oh noes, I died! :'(");
for(var i = 0; i < 8; i++)
{
if(i % 4 == 0)
me.Cancel(0);
if(me.hp > 0 || NTC_InTown())
return true;
NTC_Delay(250);
}
}
return false;
}
function MWR_CarriesItem(classid)
{
var _items;
_items = me.GetItems(classid);
if(_items)
{
for(var i = 0; i < _items.length; i++)
{
if(_items[i].classid == classid)
return true;
}
}
return false;
}
function MWR_PickupItem(classid)
{
var _item;
_item = NTC_FindUnit(NTC_UNIT_ITEM, classid, 2);
if(_item)
{
do
{
if(_item.classid == classid)
{
if(NTSI_PickUpItemInt(_item))
{
Print("Picked up " + NTC_ItemQualityToD2Color[MWC_GetItemColorInt(_item)] + _item.name.split("\n")[0]);
return true;
}
}
}while(_item.GetNext());
}
return false;
}
function MWR_CountNearbyItems(classid)
{
var _item, _count;
_item = NTC_FindUnit(NTC_UNIT_ITEM, classid, 5);
_count = 0;
if(_item)
{
do
{
if(_item.classid == classid)
_count++;
}while(_item.GetNext());
}
return _count;
}
function MWR_MoveQuestItemToCube(classid)
{
var n;
var _items, _cube;
_items = me.GetItems();
_cube = me.GetItems(NTC_UNIT_CUBE);
if(!_items || !_cube || _cube.length < 1)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].classid == classid)
{
SetUIState(0x1, true);
if(_items[i].mode == 1)
{
SetUIState(0x1, true);
for(n = 0; n < 80; n++)
{
if((n % 40) == 0)
me.ClickItem(_items[i].itemloc);
NTC_Delay(100);
if(me.itemoncursor)
{
NTC_PingDelay(200);
break;
}
}
if(n >= 80)
{
me.Cancel(1);
break;
}
}
if(NTCU_MoveItemToCubeInt(_cube[0], _items[i]))
me.Cancel(1);
return true;
}
}
}
function MWR_ActivateObject(unit)
{
if(!unit)
return false;
for(var i = 0 ; i < 10 ; i++)
{
if((i % 5) == 0)
{
if(GetDistance(me, unit) > 2)
NTM_MoveTo(unit.areaid, unit.x + 2, unit.y + 2);
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, unit);
}
NTC_Delay(200);
if(unit.mode > 0)
return true;
}
return false;
}
function MWR_InsertStaff()
{
var _items;
_items = me.GetItems(_MWR_UNIT_FULLSTAFF_CLASSID);
if(_items)
{
for(var i = 0; i < _items.length; i++)
{
if(_items[i].classid == _MWR_UNIT_FULLSTAFF_CLASSID)
{
if(_items[i].itemloc == 0)
{
if(NTC_ItemToCursor(_items[i]))
{
NTC_Delay(250);
SubmitItem();
NTC_Delay(250);
}
me.Cancel(1);
return true;
}
break;
}
}
}
return false;
}
function MWR_UpdateStatus(status, desc)
{
var _enableConfirmation = false;
switch(status)
{
case _MWR_STATUS_WAITING:
MWC_SetStatusText("ÿc2(Waiting) " + desc);
break;
case _MWR_STATUS_INTERACTING:
MWC_SetStatusText("ÿc;(Interacting) " + desc);
break;
case _MWR_STATUS_MOVING:
_enableConfirmation = true;
MWC_SetStatusText("ÿc8(Moving) " + desc);
break;
case _MWR_STATUS_TALKING:
_enableConfirmation = true;
MWC_SetStatusText("ÿc3(Talking) " + desc);
break;
case _MWR_STATUS_PICKUP:
_enableConfirmation = true;
MWC_SetStatusText("ÿc<(Picking) " + desc);
break;
default:
MWC_SetStatusText("ÿc0(Misc) " + desc);
break;
}
if(_enableConfirmation && !_MWR_ActiveQuesterConfirmed && _MWR_IsActiveQuester && (GetTickCount() - _MWR_ConfirmationRequestTicks) > 30E3)
{
_MWR_ConfirmationRequestTicks = GetTickCount();
Say(".SetQuester " + me.charname);
}
}
function MWR_ScriptMsgEvents(msg)
{
var _messenger;
if(!msg)
return;
_messenger = msg.split(" ")[0];
switch(msg.split(" ")[1])
{
case "KILLED":
if(_messenger == me.charname)
break;
Print("ÿc8Boss Kill: ÿc2Confirmed");
switch(msg.split(" ")[2])
{
case "ANDARIEL":
_MWR_BossKilledAndariel = true;
break;
case "SUMMONER":
_MWR_BossKilledSummoner = true;
break;
case "DURIEL":
_MWR_BossKilledDuriel = true;
break;
case "COUNCIL":
_MWR_BossKilledCouncil = true;
break;
case "MEPHISTO":
_MWR_BossKilledMephisto = true;
break;
case "DIABLO":
_MWR_BossKilledDiablo = true;
break;
case "SCHENK":
_MWR_BossKilledSchenk = true;
break;
case "IZUAL":
_MWR_BossKilledIzual = true;
break;
case "RADAMENT":
_MWR_BossKilledRadament = true;
break;
}
break;
case "TPSAFE":
if(_messenger == me.charname)
break;
_MWR_TPSafe = true;
Print("ÿc2Clearance Acquired");
break;
case "TOMBID":
if(_messenger == me.charname)
break;
_MWR_CorrectTombId = parseInt(msg.split(" ")[2])
Print("ÿc2ID Confirmed");
break;
case "SETQUESTER":
if(MWConfig_IsRusher && _MWR_ActiveQuesterName == "")
{
_MWR_ActiveQuesterName = msg.split(" ")[2];
_MWR_AnnounceStatus = false;
Say(".Confirmed");
if(_MWR_ActiveQuesterName == me.charname)
_MWR_IsActiveQuester = true;
}
case "CONFIRMED":
if(_messenger == me.charname)
break;
if(_MWR_IsActiveQuester)
{
_MWR_AnnounceStatus = false;
_MWR_ActiveQuesterConfirmed = true;
_MWR_ActiveQuesterName = me.charname;
}
Print("ÿc8Quester Status: ÿc2Confirmed");
break;
case "INVALIDATEQUESTER":
Print("ÿc8Quester Status: ÿc1Invalidated");
_MWR_ConfirmationRequestTicks = GetTickCount() + 10E3;
_MWR_ActiveQuesterConfirmed = false;
_MWR_ActiveQuesterName = "";
_MWR_AnnounceStatus = true;
break;
case "START":
_MWR_CommenceRush = true;
break;
case "RESCUED":
_MWR_RescuedAnya = true;
break;
}
return;
}
function MWR_AllPlayersPresent()
{
var _players, _count;
if(!MWConfig_NumberOfCharsToRush)
return true;
_count = 0;
_players = GetPlayerUnit();
if(_players)
{
while(_players.GetNext())
{
if(NTC_InMyParty(_players.name))
_count++;
}
}
return _count >= MWConfig_NumberOfCharsToRush;
}
function MWR_CheckQuesterAct()
{
var _players;
_players = GetPlayerUnit();
if(_players)
{
while(_players.GetNext())
{
if(_players.level < 70 && MWR_CheckAct(_players.areaid) != me.act)
return false;
}
}
return true;
}
function MWR_CheckAct(areaid)
{
if(areaid < 1 || areaid > 132)
return -1;
else if(areaid < 40)
return 1;
else if(areaid < 75)
return 2;
else if(areaid < 103)
return 3;
else if(areaid < 109)
return 4;
else
return 5;
}
function MWR_SetQuesterStatus()
{
var _players;
if(MWConfig_ActiveQuestersName)
{
if(MWConfig_ActiveQuestersName.toLowerCase() == me.charname.toLowerCase())
return true;
else
return false;
}
_players = GetPlayerUnit();
if(_players)
{
while(_players.GetNext())
{
if(_players.level <= 70)
return false;
}
}
return true;
}
function MWR_UseRedPortal(classid, dest)
{
var _portal;
_portal = NTC_FindUnit(NTC_UNIT_OBJECT);
if(_portal)
{
do
{
if(_portal.classid == classid)
{
for(var i = 0; i < 20; i++)
{
if(me.areaid == dest)
{
NTC_PingDelay(500);
return true;
}
if(i % 5 == 0)
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
if(i % 10 == 5)
NTM_GetCloserInt(_portal);
NTC_Delay(200);
}
}
} while(_portal.GetNext());
}
return false;
}
function MWR_ClearCS()
{
var _monster;
var i;
// Grand Vizier of Chaos
for(i = 0; i < 5; i++)
{
if(MWR_OpenSeal(395) && MWR_OpenSeal(396))
break;
NTC_Delay(1000);
}
if(i >= 5)
return false;
NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2851), 10);
for(i = 0; i < 10; i++)
{
if(NTA_KillMonster(GetLocaleString(2851)))
{
NTA_ClearPosition(5, true, 2, false, false);
NTSI_PickItems();
break;
}
NTC_Delay(250);
}
if(i >= 10)
return false;
// Lord De Seis
for(i = 0; i < 5; i++)
{
if(MWR_OpenSeal(394))
break;
NTC_Delay(1000);
}
if(i >= 5)
return false;
NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2852), 10);
for(i = 0; i < 10; i++)
{
NTM_MoveTo(me.areaid, 7791, 5226);
NTC_Delay(250);
_monster = NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2852), 10);
if(_monster)
{
NTM_MoveTo(me.areaid, 7776, _monster.y + 10);
if(NTA_KillMonster(GetLocaleString(2852)))
{
NTA_ClearPosition(10, true, 2, false, false);
NTSI_PickItems();
break;
}
}
}
if(i >= 10)
return false;
// Infector Of Souls
for(i = 0; i < 5; i++)
{
if(MWR_OpenSeal(393) && MWR_OpenSeal(392))
break;
NTC_Delay(1000);
}
if(i >= 5)
return false;
NTC_FindUnit(NTC_UNIT_MONSTER, GetLocaleString(2853), 10);
for(i = 0; i < 10; i++)
{
if(NTA_KillMonster(GetLocaleString(2853)))
{
NTA_ClearPosition(10, true, 2, false, false);
NTSI_PickItems();
break;
}
NTC_Delay(250);
}
return true;
}
function MWR_OpenSeal(classid)
{
var _seal, _x, _y, _unit;
_unit = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
if(!_unit)
return false;
for(i = 0 ; i < _unit.length ; i++)
{
if(_unit[i].id == classid)
{
_x = _unit[i].roomx * 5 + _unit[i].x;
_y = _unit[i].roomy * 5 + _unit[i].y;
break;
}
}
NTM_MoveTo(me.areaid, _x + 1, _y + 1);
_seal = NTC_FindUnit(NTC_UNIT_OBJECT, classid, 5);
if(!_seal)
return false;
if(_seal.mode > 0)
return true;
for(var i = 0 ; i < 8 ; i++)
{
if((i % 2) == 0)
{
if(GetDistance(me, _seal) > 2)
NTM_MoveTo(_seal.areaid, _seal.x + 1, _seal.y +1 );
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
}
NTC_Delay(500);
if(_seal.mode > 0)
return true;
NTA_ClearPosition(5, true, 2, false, false);
}
return false;
}
function MWR_TalkToNpc(npc, cancelAll)
{
var _menuLoops;
_menuLoops = 0;
for(var i = 0; i < 40; i++)
{
if(!GetUIState(0x08) && i % 10 == 0)
{
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, npc);
NTC_PingDelay(250);
}
if(i % 5 == 0)
{
me.Cancel(0);
NTC_Delay(250);
}
if(GetUIState(0x08) || GetUIState(0x09))
{
if(_menuLoops < 5)
_menuLoops++;
else
{
if(cancelAll || GetUIState(0x09))
{
me.Cancel(1);
return !GetUIState(0x08);
}
return true;
}
}
NTC_Delay(100);
}
return false;
}
function MWR_UseQuestItem(classid)
{
var _item;
_item = me.GetItems(classid);
if(_item && _item.length > 0)
{
SetUIState(0x1, true);
for(var i = 0; i < 40; i++)
{
if(i % 10 == 0)
me.ClickItem(1, _item[0]);
_item = me.GetItems(classid);
if(!_item || _item.length == 0)
{
me.Cancel(1);
return true;
}
NTC_Delay(NTC_DELAY_FRAME);
}
}
return false;
}