// D2NT Cow script
// Version 1.4.1
//--- CONFIG ---
const _NTR_FAIL_CHECKS = 25; // Number of failed teleports before script ends. Ex. Edge of map causes a fail teleport. DEFAULT: 25
const _NTR_PRE_EVERY = 40; // Number of seconds before precasting again. -1 for never. DEFAULT: 40
const _NTR_CHEST_AND_ROCKS = true; // Open chest and rocks. DEFAULT: true
//--- END ---
const _NTR_STRING_PORTAL = GetLocaleString(3226);
function NTMain(){
Include("libs/common/NTCommon.ntl");
NTC_IncludeLibs();
NTC_IncludeConfig("NTBot/char_configs");
NT_LoadConfig();
NTSI_LoadNIPFiles("NTBot/item_configs");
NTA_Initialize();
if(!NTTM_CheckAct(1)){
NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
return;
}
NTTMGR_TownManager();
NTTM_TownMove("stash");
for(var i = 0 ; i < NTConfig_WaitForCowPortal*2 ; i++) {
if(i % 20 == 0) {
if(NT_TakeCowPortal()) {
break;
}
}
Delay(500);
}
Delay(500);
if (me.areaid != 39) {
NTC_SendMsgToScript("NTBotGame.ntj", "Failed to take Cow Portal.");
return;
}
NTP_DoPrecast(true);
NTR_ClearRooms();
NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
}
// Internal functions
function NTR_ClearPosition(range, pickitem, safelevel, failed){
var _orgx, _orgy;
var _spectype = [0x0A, 0x01, 0x01];
//var _spectype = [0x0A, 0x01];
var _skiplist;
var _attackcount = 0;
var _target;
var _distance, _mingid, _mindistance;
var _result;
var _cowKing;
var _test;
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.length < 1) && (NTConfig_CheckMercSafe.length < 1))
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){
_cowKing = GetUnit(NTC_UNIT_MONSTER, GetLocaleString(2850));
if(_cowKing){
return true;
}
_result = NTA_Attack(_target, (_attackcount%30) == 0);
switch(_result){
case 1:
_skiplist.push(_mingid);
break;
case 2:
case 3:
_attackcount++;
_sorcattack++;
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);
}
}
_cowKing = GetUnit(NTC_UNIT_MONSTER, GetLocaleString(2850));
if(_cowKing){
return true;
}
if(me.classid == NTC_CHAR_CLASS_NECROMANCER){
NTA_SkeletonArmy(NTConfig_SkeletonArmy);
NTA_MageArmy(NTConfig_MageArmy);
NTA_ReviveArmy(NTConfig_ReviveArmy);
}
if(_NTR_CHEST_AND_ROCKS && failed == false){
_target = NTR_GetChest();
if(_target){
do{
if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range){
if(NTC_OpenChest(_target)){
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
NTSI_PickItems();
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
}
}
}while(_target.GetNext());
}
_target = NTR_GetObj(174);
if(_target){
do{
if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range){
if(NTM_MoveTo(me.areaid, _target.x, _target.y)){
if(NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _target)){
Delay(200);
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
NTSI_PickItems();
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
}
}
}
}while(_target.GetNext());
}
_target = NTR_GetObj(175);
if(_target){
do{
if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range){
if(NTM_MoveTo(me.areaid, _target.x, _target.y)){
if(NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _target)){
Delay(200);
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
NTSI_PickItems();
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
}
}
}
}while(_target.GetNext());
}
_target = NTR_GetObj(159);
if(_target){
do{
if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range){
if(NTM_MoveTo(me.areaid, _target.x, _target.y)){
if(NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _target)){
Delay(200);
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
NTSI_PickItems();
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
}
}
}
}while(_target.GetNext());
}
_target = NTR_GetObj(155);
if(_target){
do{
if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range){
if(NTM_MoveTo(me.areaid, _target.x, _target.y)){
if(NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _target)){
Delay(200);
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
NTSI_PickItems();
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
}
}
}
}while(_target.GetNext());
}
}
if(pickitem && _attackcount > 0){
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
NTSI_PickItems();
if(NTConfig_IdInField){
if (!NTT_CheckSpace(NTConfig_FreeSpaceXY[0], NTConfig_FreeSpaceXY[1])) {
NT_FieldID();
} // id in field add
}
}
return true;
}
function NTR_ClearRooms(){
var failcount = 0, precount = 0, x, y, offx = 0, offy = 0, goalx = 0, goaly = 0, cowoffx = 0, cowoffy = 0;
var toggle = true;
var _cowKing;
var _faillast;
x = me.x;
y = me.y;
//NTC_PingDelay(5000);
while (failcount <= _NTR_FAIL_CHECKS){
if(toggle == true && offx == goalx){
if(goaly < 0){
goaly=(0-(goaly-20));
}else{
goaly=(0-(goaly+20));
}
toggle = false;
}
if(toggle == false && offy == goaly){
if(goaly < 0){
goalx=(0-(goalx-20));
}else{
goalx=(0-(goalx+20));
}
toggle = true;
}
if(offy > goaly){
offy-=20;
y-=20;
}
if(offy < goaly){
offy+=20;
y+=20;
}
if(offx < goalx){
offx+=20;
x+=20;
}
if(offx > goalx){
offx-=20;
x-=20;
}
_cowKing = GetUnit(NTC_UNIT_MONSTER, GetLocaleString(2850));
if(!_cowKing){
NTR_ClearPosition(20, true, 0, _faillast);
if(((GetTickCount()-precount)/1000) >= _NTR_PRE_EVERY && _NTR_PRE_EVERY >= 0){
NTP_DoPrecast();
precount = GetTickCount();
}
}
if(!NTM_MoveTo(me.areaid, x, y)){
failcount++;
_faillast = true;
}else{
_faillast = false;
}
}
return true;
}
function NTR_GetChest(){
var _chest;
_chest = NTC_FindUnit(NTC_UNIT_OBJECT, "chest");
if(_chest){
return _chest;
}
return null;
}
function NTR_GetObj(num){
var _chest;
_chest = NTC_FindUnit(NTC_UNIT_OBJECT, num);
if(_chest){
return _chest;
}
return null;
}
function NTCW_AlreadyTombs(){
var portalbook = me.GetItems("tbk");
if(portalbook && portalbook.length <= 1)
return true;
else
return false;
}
function NT_TakeCowPortal(){
var readyNow = false;
var _prearea = me.areaid
var _portal = NTC_GetUnit(NTC_UNIT_OBJECT, GetLocaleString(3226));
if(!_portal) {
return false;
}
if(_portal){
do{
if(_portal.subareaid == 295 || _portal.subareaid == 39){
while(_portal.mode != 2){
Delay(500)
}
readyNow = true;
break;
}
} while(_portal.GetNext());
if(readyNow) {
for(var i = 0 ; i < 40 ; i++){
if(NTM_GetCloserIntS(_portal)){
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _portal);
}
if(me.areaid != _prearea){
break;
}
}
}
}
return (me.areaid == 39);
}
|