Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Diablo 2 > Diablo 2 Programming
You last visited: Today at 15:55

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Modifikation am Classic Team Script

Discussion on Modifikation am Classic Team Script within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1

 
elite*gold: 250
Join Date: Mar 2010
Posts: 840
Received Thanks: 184
Modifikation am Classic Team Script

Also ich hatte die Idee ein classic team script zu bauen, das auf 2 Scripten basiert. Zum einen auf dem Classic Team Script von Kolton (eon) und dem normalen Dia script im D2NT.

Hier is mal das script von kolton:
Code:
//cmd vars - do NOT touch
	var _MyDT_PreMessage = "";
	var _sealpos = 0;
	var safex;
	var safey;
	var prevx;
	var prevy;
//leader var, will be in char config, maybe
	var leader = "NAME";

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()) {
		NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
		return;
	}
	
	NTC_Delay(1000);
	
	if(!NTTM_CheckAct(4)) {
		NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
		return;
	}
	
	RegisterEvent(EVENT_GAMEMSG, quitfunc); 
	
	TD_File("NTBot/bots/TeamD.txt", 1);
	
	if(me.classid == 1) {
		if(!NTTM_CheckAct(1)) {
			NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
			return;
		}
		
		if(NTConfig_DelayStart)
			NTC_Delay(20000);
		
		Print("Loading sorc function");
		NTTMGR_TownManager();	
		TD_Sorcfunc();
	}
	
	if(me.classid == 3) {
		Print("Loading hammer function");
		NTTMGR_TownManager();
		NTTM_TownMove("portalspot");
		
		while(1) {
			TD_TeamCommands();
			Delay(200);
		}
	}
	
	if(me.classid == 4) {
		Print("Loading barb function");
		NTTMGR_TownManager();	
		NTTM_TownMove("portalspot");
		
		while(1) {
			TD_TeamCommands();
			Delay(200);
		}
	}
	
	NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
}

function TD_Sorcfunc() { //work in progress!
	NTC_Delay(500);
	
	if(!NTTM_TownMove("waypoint")) {
		NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()");
		return;
	}
	
	if(!NTM_TakeWaypoint(107)) {
		NTC_SendMsgToScript("NTBotGame.ntj", "NTM_TakeWaypoint()");
		return;
	}
	
	NTC_Delay(500);
	NTM_MoveTo(me.areaid, me.x+5, me.y);
	for(var i = 0 ; i < 5 ; i++) {
		if(NTM_MakeTP())
			break;
	}
	
	TD_File("NTBot/bots/TeamD.txt", 1, ".bo");
	
	while(!me.GetState(32))
		NTC_Delay(500);

	NTP_DoPrecast(true);
		
	if(!TD_MoveTo(108, 7802, 5591)) { //urdars! and svs!
		NTC_SendMsgToScript("NTBotGame.ntj", "TD_MoveTo()");
		return;
	}

	if(TD_DetectLayout(1) == 1) { 
		TD_MoveTo(me.areaid, 7701, 5299);
		TD_Deploy(7681, 5299, 0, 0, 15, 15);
		for(var i = 0 ; i < 5 ; i++) {
			if(NTM_MakeTP())
				break;
		}
	} else {
		TD_MoveTo(me.areaid, 7700, 5313);
		TD_Deploy(7680, 5313, 15, 15, 0, 0);
		for(var i = 0 ; i < 5 ; i++) {
			if(NTM_MakeTP())
				break;
		}
	}
	
	TD_File("NTBot/bots/TeamD.txt", 1, ".s1"); //vizier
	
	if(!TD_VizierSeal()){
		NTC_SendMsgToScript("NTBotGame.ntj", "Seal opening");
		return;
	}

	NTM_MoveTo(me.areaid, safex, safey); 
	
	while(!TD_IsPlayerOut()) {
		NTA_KillMonster(GetLocaleString(2851));
		NTA_ClearPosition(10);
		NTSI_PickItems();
		NTM_MoveTo(me.areaid, safex, safey);
	}
	
	if(!NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe))
	{
		NTC_SendMsgToScript("NTBotGame.ntj", "NTTMGR_CheckSafe()");
		return;
	}
	
	NTP_DoPrecast(true);
	
	if(TD_DetectLayout(3) == 1) { 
		TD_MoveTo(me.areaid, 7900, 5291);
		TD_Deploy(7920, 5291, 15, 15, 0, 0);
		for(var i = 0 ; i < 5 ; i++) {
			if(NTM_MakeTP())
				break;
		}
	} else {
		TD_MoveTo(me.areaid, 7910, 5278); 
		TD_Deploy(7930, 5278, 0, 15, 15, 0);
		for(var i = 0 ; i < 5 ; i++) {
			if(NTM_MakeTP())
				break;
		}
	}

	TD_File("NTBot/bots/TeamD.txt", 1, ".s3"); //infector

	if(!TD_InfectorSeal()){
		NTC_SendMsgToScript("NTBotGame.ntj", "Seal opening");
		return;
	}
	
	NTM_MoveTo(me.areaid, safex, safey); 
	
	while(!TD_IsPlayerOut()) {
		NTA_KillMonster(GetLocaleString(2853));
		NTA_ClearPosition(10);
		NTSI_PickItems();
		NTM_MoveTo(me.areaid, safex, safey); 
	}
	
	
	if(!NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe))
	{
		NTC_SendMsgToScript("NTBotGame.ntj", "NTTMGR_CheckSafe()");
		return;
	}
	
	NTP_DoPrecast(true);
	
	if(TD_DetectLayout(2) == 1) {
		TD_MoveTo(me.areaid, 7776, 5230);
		TD_Deploy(7776, 5220, 0, 0, 15, 15);
		for(var i = 0 ; i < 5 ; i++) {
			if(NTM_MakeTP())
				break;
		}
	} else {
		TD_MoveTo(me.areaid, 7779, 5200); 
		TD_Deploy(7779, 5180, 0, 0, 15, 15);
		for(var i = 0 ; i < 5 ; i++) {
			if(NTM_MakeTP())
				break;
		}
	}
	
	TD_File("NTBot/bots/TeamD.txt", 1, ".s2"); //de seis

	if(!TD_DeSeisSeal()){
		NTC_SendMsgToScript("NTBotGame.ntj", "Seal opening");
		return;
	}
	
	NTM_MoveTo(me.areaid, safex, safey); 
	
	while(!TD_IsPlayerOut()) {
		NTA_ClearPosition(10);
		NTSI_PickItems();
		NTM_MoveTo(me.areaid, safex, safey);
	}
	
	if(!NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe))
	{
		NTC_SendMsgToScript("NTBotGame.ntj", "NTTMGR_CheckSafe()");
		return;
	}
	
	NTP_DoPrecast(true);
	
	if(!NTM_MoveTo(me.areaid, 7792, 5292)) {
		NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveTo()");
		return;
	}

	NTM_MakeTP();
	
	TD_File("NTBot/bots/TeamD.txt", 1, ".d");
	
	NTC_FindUnit(NTC_UNIT_MONSTER, 243, 100);
	if(!NTA_KillMonster(243)) {
		NTC_SendMsgToScript("NTBotGame.ntj", "NTA_KillMonster()");
		return;
	}
	NTSI_PickItems();
	
	//anything else?
}

//--internal functions--

function quitfunc(msg, type) { //quit when leader leaves game
	if(msg.indexOf(leader) != -1 && (msg.indexOf("weaken") != -1 || msg.indexOf("timeout") != -1)) { //if leader quits
	//if(msg.indexOf("weaken") != -1 || msg.indexOf("timeout") != -1) { //if anyone quits
		NTC_Delay(500);
		ExitGame();
	}
}

function TD_Preattack(classid, extrahammers) { //extra hammers = hammers cast after the seal boss is spawned
	NTC_PutSkill(NTConfig_AttackSkill[4], NTC_HAND_RIGHT);
	while(!NTC_FindUnit(NTC_UNIT_MONSTER, classid))
		NTC_CastSkill(NTConfig_AttackSkill[3], 2);
	for(var i = 0 ; i < extrahammers ; i++) {
		NTC_CastSkill(NTConfig_AttackSkill[3], 2);
	}
}

function TD_VizierSeal() { //vizier
	for(var i = 0 ; i < 5 ; i++){
		NTM_MoveToPresetUnit(me.areaid, 2, 395);
		var _seal = NTC_FindUnit(NTC_UNIT_OBJECT, 395, 5);
		NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
		
		NTC_Delay(350);	
		
		if(_seal.mode <= 0)
			NTM_MoveTo(me.areaid, safex, safey);
		else
			break;
			
		NTC_Delay(250);	
		
		if(i == 4 && _seal.mode <= 0) 
			return false;
	}
	for(i = 0 ; i < 5 ; i++){
		NTM_MoveToPresetUnit(me.areaid, 2, 396);
		_seal = NTC_FindUnit(NTC_UNIT_OBJECT, 396, 5);
		NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
		
		NTC_Delay(350);	
		
		if(_seal.mode <= 0)
			NTM_MoveTo(me.areaid, safex, safey);
		else
			break;
			
		NTC_Delay(250);
		
		if(i == 4 && _seal.mode <= 0) 
			return false;
	}
	return true;
}

function TD_DeSeisSeal(){ //de seis
	for(var i = 0 ; i < 5 ; i++){
		NTM_MoveToPresetUnit(me.areaid, 2, 394);
		_seal = NTC_FindUnit(NTC_UNIT_OBJECT, 394, 5);
		NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
		
		NTC_Delay(350);	
		
		if(_seal.mode <= 0)
			NTM_MoveTo(me.areaid, safex, safey);
		else
			break;
			
		NTC_Delay(250);	
		
		if(i == 4 && _seal.mode <= 0) 
			return false;
	}
	return true;
}

function TD_InfectorSeal() { //infector
	for(var i = 0 ; i < 5 ; i++){
		NTM_MoveToPresetUnit(me.areaid, 2, 393);
		_seal = NTC_FindUnit(NTC_UNIT_OBJECT, 393, 5);
		NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
	
		NTC_Delay(350);	
	
		if(_seal.mode <= 0)
			NTM_MoveTo(me.areaid, safex, safey);
		else
			break;
			
		NTC_Delay(250);	
		
		if(i == 4 && _seal.mode <= 0) 
			return false;
	}
	for(i = 0 ; i < 5 ; i++){
		NTM_MoveToPresetUnit(me.areaid, 2, 392);
		_seal = NTC_FindUnit(NTC_UNIT_OBJECT, 392, 5);
		NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
		
		NTC_Delay(350);	
	
		if(_seal.mode <= 0)
			NTM_MoveTo(me.areaid, safex, safey);
		else
			break;
			
		NTC_Delay(250);	
		
		if(i == 4 && _seal.mode <= 0) 
			return false;
	}
	return true;
}

function TD_TeamCommands() {
    var _msg = TD_File("NTBot/bots/TeamD.txt", 0);

    if (_msg && _msg != _MyDT_PreMessage) {
        _MyDT_PreMessage = _msg;

        switch (_msg.substring(_msg.indexOf("/") + 1)) {
		case ".bo":
			if(me.classid == 3) { //Hammerdin
				NTM_UsePortal("BluePortal", 107, leader);
				NTC_Delay(500);
				NTP_DoPrecast(true);
				
				//while(!me.GetState(32))
					NTC_Delay(3500);
				
				if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
					NTTM_CheckAct();
			}
			if(me.classid == 4) { //Barb
				NTM_UsePortal("BluePortal", 107, leader);
				while(!me.GetState(32))
					NTP_DoPrecast(true);
				if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
					NTTM_CheckAct();
			}
			
			break;
		case ".s1": //vizier
			if(me.classid == 3) { //Hammerdin
				NTM_UsePortal("BluePortal", 108, leader);

				TD_Preattack(GetLocaleString(2851), 5);
				TD_KillMonster(GetLocaleString(2851));
				NTA_ClearPosition(5);
				NTSI_PickItems();

				if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
					NTTM_CheckAct();
				NTP_DoPrecast(true);
			}
			if(me.classid == 4) { //Barb
				NTM_UsePortal("BluePortal", 108, leader);
				//for(var i = 0 ; i < 3 ; i++) {
					NTC_CastSkill(130, NTC_HAND_RIGHT);
				//	Delay(300);
				//}
				NTP_DoPrecast(true);
				if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
					NTTM_CheckAct();
			}
			
			break;
		case ".s2": //de seis
			if(me.classid == 3) { //Hammerdin
				NTM_UsePortal("BluePortal", 108, leader);
				
				TD_Preattack(GetLocaleString(2852), 10);
				TD_KillMonster(GetLocaleString(2852));
				NTA_ClearPosition(15);
				NTSI_PickItems();
				
				if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
					NTTM_CheckAct();
				NTP_DoPrecast(true);
			}
			if(me.classid == 4) { //Barb
				NTM_UsePortal("BluePortal", 108, leader);
				for(var i = 0 ; i < 3 ; i++) {
					NTC_CastSkill(130, NTC_HAND_RIGHT);
					Delay(300);
				}
				NTP_DoPrecast(true);
				if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
					NTTM_CheckAct();
			}
			
			break;
		case ".s3": //infector
			if(me.classid == 3) { //Hammerdin
				NTM_UsePortal("BluePortal", 108, leader);

				TD_Preattack(GetLocaleString(2853), 5);
				TD_KillMonster(GetLocaleString(2853));
				NTA_ClearPosition(15);
				NTSI_PickItems();
				
				if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
					NTTM_CheckAct();
				NTP_DoPrecast(true);
			}		
			if(me.classid == 4) { //Barb
				NTM_UsePortal("BluePortal", 108, leader);
				//for(var i = 0 ; i < 1 ; i++) {
					NTC_CastSkill(130, NTC_HAND_RIGHT);
				//	Delay(300);
				//}
				NTP_DoPrecast(true);
				if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
					NTTM_CheckAct();
			}
			
			break;
		case ".d":
			if(me.classid == 3) { //Hammerdin
				NTM_UsePortal("BluePortal", 108, leader);

				NTC_FindUnit(NTC_UNIT_MONSTER, 243, 100);

				if(!TD_KillMonster(243)) {
					NTC_SendMsgToScript("NTBotGame.ntj", "TD_KillMonster()");
					return;
				}

				NTSI_PickItems();
			}
			if(me.classid == 4) { //Barb
				NTM_UsePortal("BluePortal", 108, leader);
				NTP_DoPrecast(true);
				
				//do something until diablo dies
				
				var _diablo = NTC_FindUnit(NTC_UNIT_MONSTER, 243)
				while(_diablo && _diablo.hp > 0)
					NTC_Delay(500);
			}
			
			break;
		case ".u": //urdars! and svs!
			if(me.classid == 3) { //Hammerdin
				NTM_UsePortal("BluePortal", 108, leader);

				if(NTC_FindUnit(NTC_UNIT_MONSTER, 362))
					TD_Preattack(362, 5);
				else if(NTC_FindUnit(NTC_UNIT_MONSTER, 189))
					TD_Preattack(189, 5);
				NTA_ClearPosition(15);
				NTSI_PickItems();

				if(!NTM_UsePortal("BluePortal", 103, leader)) //or make my own?
					NTTM_CheckAct();
				NTP_DoPrecast(true);
			}
			if(me.classid == 4) { //Barb - ADD SOMETHING EVENTUALLY
				//Say("Kolton you lazy bastard!");
				NTC_Delay(250);
			}
			
			break;
		}
    }
}

function TD_DetectLayout(seal) {
	switch(seal) {
	case 1:
		_sealpos = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
		for(var i = 0 ; i < _sealpos.length ; i++) {
			if(_sealpos[i].id == 396) {
				if(_sealpos[i].roomy*5 + _sealpos[i].y == 5275)
					return 1;
				else
					return 2;

				break;
			}
		}
		break;
	case 2:
		_sealpos = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
		for(i = 0 ; i < _sealpos.length ; i++) {
			if(_sealpos[i].id == 394) {
				if(_sealpos[i].roomx*5 + _sealpos[i].x == 7773)
					return 1;
				else
					return 2;

				break;
			}
		}
		break;	
	case 3:
		_sealpos = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);
		for(i = 0 ; i < _sealpos.length ; i++) {
			if(_sealpos[i].id == 392) {
				if(_sealpos[i].roomx*5 + _sealpos[i].x == 7893)
					return 1;
				else
					return 2;

				break;
			}
		}
		break;
	}
}

function TD_IsPlayerOut(area) { //function by Thursty
	var _player;
	var _myPartyId;

	_player = GetPlayerUnit();
	_myPartyId = _player.partyid;

	if(arguments.length < 1)
		_area = me.areaid;
	else
		_area = area;

	do {
		if(_player.areaid == _area && _myPartyId == _player.partyid)
			return false;

		NTC_Delay(100);

	} while(_player.GetNext());
	
	return true;	
}

function TD_File(path, mode, msg, delay) { //big thanks to all the koreans out there
    var _msg  = "";
    var _line = "";
    var _fileHandle;
    var _isFileCheck = false;

    if (arguments.length < 3) msg   = "";
    if (arguments.length < 4) delay = (mode > 0) ? 5 : 2;

    while (delay--) {
        if (mode == 2 && !_isFileCheck) {
            _fileHandle = FileOpen(path, 0);
            if (!_fileHandle)
                _fileHandle = FileOpen(path, 1);

            if (_fileHandle)
                _fileHandle.Close();

            _isFileCheck = true;
        }

        _fileHandle = FileOpen(path, mode);
        if (_fileHandle)
            break;

        if (delay)
            Delay(200);
    }

    if (_fileHandle) {
        if (mode == 0) {
            while (!_fileHandle.eof) {
                _line = _fileHandle.ReadLine();
                if (_line || !_fileHandle.eof)
                    _msg += _line + msg;
            }
        }
        else if (msg)
            _fileHandle.WriteLine(msg);

        _fileHandle.Close();
    }

    return _msg;
}

function TD_MoveTo(areaid, x, y, retry, clearpath)
{
	var i, n;
	var _teleport;
	var _path;
	var _retry = 0;

	if(x == me.x && y == me.y)
		return true;

	if(arguments.length < 4)
		retry = 3;

	if(arguments.length < 5)
		clearpath = false;

	if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
		_teleport = false;
	else
		_teleport = true;

	_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

	if(!_path)
		return false;

	for(i = 0 ; i < _path.length ; i++)
	{
		for(n = 0 ; n < 2 ; n++)
		{
			if(_teleport)
			{
				if(NTM_TeleportTo(_path[i][0], _path[i][1])){
					if(TDConfig_FindUrdarsAndVenoms)
						TD_FindUrdar();
						break;
				}
			}
			else
			{
				if(NTM_WalkTo(_path[i][0], _path[i][1]))
					break;
			}
		}
		
		if(n < 2)
		{	
			if(clearpath)
			{
				if(!NTA_ClearPosition(20, true, 2))
					return false;

				NTP_DoPrecast(false);

				NTM_MoveTo(me.areaid, _path[i][0], _path[i][1], 1);
			}
		}
		else if(_retry < retry)
		{
			_path = GetPath(areaid, me.x, me.y, x, y, _teleport);

			if(!_path)
				return false;

			i = -1;
			_retry++;
		}
		else
			return false;
	}

	return true;
}

function TD_FindUrdar(){ 
	var _urdar = NTC_FindUnit(NTC_UNIT_MONSTER, 189);
	var _sv = NTC_FindUnit(NTC_UNIT_MONSTER, 362);

	if(_urdar){
		do{
			if (_urdar.classid == 189 && (_urdar.spectype == 9 || _urdar.spectype == 17) && _urdar.mode != 0 && _urdar.hp > 0 && _urdar.mode != 12 && _urdar.IsAttackable()){
				NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿc8Killing Urdars!"); //COMMENT THIS LINE IF TESTING IS SUCCESSFUL

				//NTM_MoveTo(me.areaid, _urdar.x, _urdar.y);
				TD_Deploy(_urdar.x, _urdar.y, 20, 20, 0, 20);

				for(var i = 0 ; i < 5 ; i++) {
					if(NTM_MakeTP())
						break;
				}

                TD_File("NTBot/bots/TeamD.txt", 1, ".u");

				NTA_ClearPosition(12);
				
				while(!TD_IsPlayerOut()) {
					NTA_ClearPosition();
					NTSI_PickItems();
				}

				TD_File("NTBot/bots/TeamD.txt", 1, "bla");
				
				NTC_Delay(250);
                break;
            }
        } while(_urdar.GetNext());
    }
	else if(_sv){
		do{
			if (_sv.classid == 362 && (_sv.spectype == 9 || _sv.spectype == 17) && _sv.mode != 0 && _sv.hp > 0 && _sv.mode != 12 && _sv.IsAttackable()){
				NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿc8Killing Super Venoms!"); //COMMENT THIS LINE IF TESTING IS SUCCESSFUL

				//NTM_MoveTo(me.areaid, _sv.x, _sv.y);
				TD_Deploy(_sv.x, _sv.y, 20, 20, 0, 20);

				for(var i = 0 ; i < 5 ; i++) {
					if(NTM_MakeTP())
						break;
				}

				prevx = me.x;
				prevy = me.y;

                TD_File("NTBot/bots/TeamD.txt", 1, ".u");

				NTA_ClearPosition(15);

				while(!TD_IsPlayerOut()) {
					NTA_ClearPosition();
					NTSI_PickItems();
					NTM_MoveTo(me.areaid, prevx, prevy);
				}

				TD_File("NTBot/bots/TeamD.txt", 1, "bla");

				NTC_Delay(250);
                break;
            }
        } while(_sv.GetNext());
    }
}

function TD_Deploy(x, y, plusx, minusx, plusy, minusy) { //you can build up to 5 positions (x-shaped), center position is x, y; rest are +/- offsets
	var _monster = NTC_FindUnit(NTC_UNIT_MONSTER);
	var num = [0, 0, 0, 0, 0];
	var firstnum = 100;
	
	if(!_monster)
		return NTM_MoveTo(me.areaid, x, y);
	
	do {
		if(GetDistance(_monster.x, _monster.y, x, y) <= 15)
			if(_monster.classid != 306)
				num[0]++;
		if(GetDistance(_monster.x, _monster.y, x + plusx, y) <= 15)
			if(_monster.classid != 306)
				num[1]++;
		if(GetDistance(_monster.x, _monster.y, x - minusx, y) <= 15)
			if(_monster.classid != 306)
				num[2]++;
		if(GetDistance(_monster.x, _monster.y, x, y + plusy) <= 15)
			if(_monster.classid != 306)
				num[3]++;
		if(GetDistance(_monster.x, _monster.y, x, y - minusy) <= 15)
			if(_monster.classid != 306)
				num[4]++;
	}while(_monster.GetNext())
	
	for(var i = 0 ; i < num.length ; i++) {
		//Print("ÿc1" + num[i] + " ÿc:monsters at position ÿc;" + i); //doesn't count storm casters as of v0.8
		if(num[i] < firstnum)
			firstnum = num[i];
	}

	if(firstnum == num[0]) {
		safex = x;
		safey = y;
		NTM_MoveTo(me.areaid, x, y);
	}
	else if(firstnum == num[1]) {
		safex = x + plusx;
		safey = y;
		NTM_MoveTo(me.areaid, x + plusx, y);
	}
	else if(firstnum == num[2]) {
		safex = x - minusx;
		safey = y;
		NTM_MoveTo(me.areaid, x - minusx, y);
	}
	else if(firstnum == num[3]) {
		safex = x;
		safey = y + plusy;
		NTM_MoveTo(me.areaid, x, y + plusy);
	}
	else if(firstnum == num[4]) {
		safex = x;
		safey = y - minusy;
		NTM_MoveTo(me.areaid, x, y - minusy);
	}
}

function TD_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;
			
			if((_attackcount%10) == 5)
				NTM_MoveTo(me.areaid, _target.x+5, _target.y);
			else if((_attackcount%10) == 0)
				NTM_MoveTo(me.areaid, _target.x, _target.y+5);
			
			_attackcount++;
		}
	}

	return (_target.hp <= 0 || _target.mode == 0 || _target.mode == 12);
}
Das ganze funktioniert so, dass der leaderchar (muss eine sorc sein wegen tele) die leecher über spezielle commands wie z.B. ".bo" steuert.
Allerdings is es bei dem script so, dass es nur eine siegelrush funktion gibt und ich aber möchte, dass das ganze cs gemacht wird.
Jetzt würden einige sagen, dass ich doch dann einfach das normale dia script nehmen sollte, aber ich möchte ja, dass am anfang alle chars an wp kommen und vom barb den bo bekommen.


Ich hab jetzt die lines zu finden, welche dafür verantwortlich sind, dass der leader ans wp geht, ".bo" schreibt und alle leecher ans wp kommen.
Wenn dann meine theorie stimmt muss ich das ganze nur an den anfang des normalen dia scriptes setzen und der diarun nimmt gewohnt seinen lauf.

Kann mir da jemand weiterhelfen und mir sagen ob schon was an meinem denkansatz nicht stimmt und ob dies überhaupt möglich is.
Würde auch ne sehr dicke belohnung in fg aussetzen für denjenigen, der es hinbekommt
FoGzone is offline  
Old 12/08/2010, 17:47   #2
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
Verständnisfragen:
Die Sorc macht dann hinterher das CS alleine?
Den anderen Chars fehlt schließlich Teleport, oder sehe ich das falsch?

Warum lässt man die Bots über ein Filehandle kommunizieren, anstatt das direkt über den ingame Chat zu lösen?
(Ich habe bei meinem Rush Skript eine Kommunikation zwischen den Chars per Chat Event Handle umgesetzt und war überrascht, wie gut das funktioniert.)

Du möchtest also effektiv nur ein erweitertes standard D2NT Skript, bei dem sich die Chars zunächst am WP mit BO eindecken? Mehr nicht?

Fragen über Fragen, aber ich möchte erstmal das Problem richtig verstehen, bevor ich mir Gedanken dazu mache.

Lg
Muddy
Muddy Waters is offline  
Old 12/08/2010, 18:07   #3

 
elite*gold: 250
Join Date: Mar 2010
Posts: 840
Received Thanks: 184
Quote:
Originally Posted by Muddy_Waters View Post
Verständnisfragen:
Die Sorc macht dann hinterher das CS alleine?
Den anderen Chars fehlt schließlich Teleport, oder sehe ich das falsch?

Warum lässt man die Bots über ein Filehandle kommunizieren, anstatt das direkt über den ingame Chat zu lösen?
(Ich habe bei meinem Rush Skript eine Kommunikation zwischen den Chars per Chat Event Handle umgesetzt und war überrascht, wie gut das funktioniert.)

Du möchtest also effektiv nur ein erweitertes standard D2NT Skript, bei dem sich die Chars zunächst am WP mit BO eindecken? Mehr nicht?

Fragen über Fragen, aber ich möchte erstmal das Problem richtig verstehen, bevor ich mir Gedanken dazu mache.

Lg
Muddy
Also es funktioniert so:
Alle chars kommen ans wp und der barb gibt bo (das steuert der leader indem er .bo schreibt).
Die sorc teleportiert an die siegel und macht ein tp - die restlichen chars joinen und cleanen das siegel. Anschließend gehen sie wieder in die stadt.
Die sorc geht zum nächsten siegel, macht wieder ein tp und das ganze beginnt von vorne.
Wann genau die anderen chars, also die helfer durch das tp kommen sollen, wird wiederum über die befehle .s1 .s2 .s3 .s4 .dia gesteurt, wenn ich das richtig auslesen konnte

was ich jetzt aber haben möchte is folgendes:
Wie im aktuellen script sollen alle chars am anfang ans wp kommen und der barb gibt allen bo. Die sorc telt anschließend an den stern hoch und macht ein tp, sodass der rest joinen und helfen kann. Die chars laufen dann alle zusammen (sorc telt ofc) und cleanen das gesammte cs ab dem star (wie es bei dem normalen diascript läuft)
FoGzone is offline  
Old 12/08/2010, 18:33   #4
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
Quote:
Originally Posted by Knutschkugel View Post
Also es funktioniert so:
Alle chars kommen ans wp und der barb gibt bo (das steuert der leader indem er .bo schreibt).
Die sorc teleportiert an die siegel und macht ein tp - die restlichen chars joinen und cleanen das siegel. Anschließend gehen sie wieder in die stadt.
Die sorc geht zum nächsten siegel, macht wieder ein tp und das ganze beginnt von vorne.
Wann genau die anderen chars, also die helfer durch das tp kommen sollen, wird wiederum über die befehle .s1 .s2 .s3 .s4 .dia gesteurt, wenn ich das richtig auslesen konnte

was ich jetzt aber haben möchte is folgendes:
Wie im aktuellen script sollen alle chars am anfang ans wp kommen und der barb gibt allen bo. Die sorc telt anschließend an den stern hoch und macht ein tp, sodass der rest joinen und helfen kann. Die chars laufen dann alle zusammen (sorc telt ofc) und cleanen das gesammte cs ab dem star (wie es bei dem normalen diascript läuft)
Aus meiner Sicht erfordert das dann aber recht hohen Programmieraufwand, wenn man es richtig macht.
Du müsstest verschiedene feste Routen durch das CS definieren, auf denen sich die Chars bewegen und dazu Algorithmen entwickeln, die die optimale Bewegung auf diesen Pfaden ermöglichen, um einen Reibungslosen Ablauf ohne Festhängen zu ermöglichen.

Also mir wärs zuviel, aber vielleicht findet sich ja jemand mit dem nötigen Know-How, der dir das ganze entwickelt, wenn du es nicht gerade selber machen willst.
Ich stehe gerne bei kleineren Fragen zur Verfügung, aber das ganze entwickeln werde ich mit Sicherheit nicht, zuviel Arbeit und für mich uninteressant.

Lg
Muddy
Muddy Waters is offline  
Thanks
1 User
Old 12/08/2010, 18:51   #5

 
elite*gold: 250
Join Date: Mar 2010
Posts: 840
Received Thanks: 184
wie wäre es denn mit folgendem (ich kenn mich leider mit den algrithmen absolut ned aus):

Man legt spezielle punkte fest, an die die chars laufen sollen und im umkreis dieser punkte sollen sie alles clean bzw auf dem weg dahin (ist das möglich?).
Das prob is dann natürlich, dass die seals immer an verschiedenen stellen sind, aber genau diese möglichen positionen haben wir ja schon aus dem normalen dia script gegeben. Also würde ich das so machen, dass die chars sich genau an diese stelle bewegen sollen, wenn es diese stelle nicht gibt an die andere mögliche stelle usw. (macht doch das dia script so oder lieg ich da falsch?)

Mich würd es sehr freuen, wenn du mir eventuell infos über diese algorithmen zukommen lassen kannst, also wie die aufgebaut sind und eventuell grobe grundkenntnisse
FoGzone is offline  
Old 12/08/2010, 19:11   #6
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
Quote:
Originally Posted by Knutschkugel View Post
wie wäre es denn mit folgendem (ich kenn mich leider mit den algrithmen absolut ned aus):

Man legt spezielle punkte fest, an die die chars laufen sollen und im umkreis dieser punkte sollen sie alles clean bzw auf dem weg dahin (ist das möglich?).
Das prob is dann natürlich, dass die seals immer an verschiedenen stellen sind, aber genau diese möglichen positionen haben wir ja schon aus dem normalen dia script gegeben. Also würde ich das so machen, dass die chars sich genau an diese stelle bewegen sollen, wenn es diese stelle nicht gibt an die andere mögliche stelle usw. (macht doch das dia script so oder lieg ich da falsch?)

Mich würd es sehr freuen, wenn du mir eventuell infos über diese algorithmen zukommen lassen kannst, also wie die aufgebaut sind und eventuell grobe grundkenntnisse
Kannst ja mal einen Blick in meinen Grundlagen Guide werfen, dann hast du schonmal grobes Basiswissen.

Ansonsten empfehle ich einfach Dinge auszuprobieren und vor allen Dingen vorhandene vor allem auch die Standard Funktionen nachzuvollziehen nachzuvollziehen.
Da es keine anständige Referenz gibt, ist letzteres eigentlich zwingend erforderlich.

Als Erstlingswerk ist das durchaus anspruchsvoll, aber man wächst ja schließlich mit seinen Aufgaben.

Du kannst ja mal einen Blick in die NTTownMove library werfen, dort wird das in etwa so gemacht.

Wegen den Siegeln brauchst du dir auch keine Sorgen zu machen, es gibt schließlich nur zwei Varianten je Flügel, wobei sich genau sagen lässt, welche Variante aktuell vorhanden ist.
Abgesehen von dieser berechenbaren Abweichung, sowie einer Variatrion im Eingangsbereich, ist das CS ansonsten eine konstante Ebene, auch was etwaige ausgelesene Koordinaten angeht.

Das erlaubt es natürlich auch konstante Pfade einzubauen.

Aber damit das vom Verständnis her klappt, solltest du dich erstmal über Variablentypen, deren Geltungsbereiche, Funktionen sowie Objektorientierte Programmierung informieren. Ohne Vorkenntnisse ein ziemlicher Brocken, aber mit einem wachen Verstand und der Fähigkeit, logisch zu denken, machbar denke ich.

Und wenn dann Unklarheiten bestehen, frag einfach, die Programming Sektion ist schließlich für programmiertechnische Fragen da.

Lg
Muddy
Muddy Waters is offline  
Thanks
1 User
Old 12/08/2010, 19:21   #7

 
elite*gold: 250
Join Date: Mar 2010
Posts: 840
Received Thanks: 184
hab schon öfters mal deinen guide bisschen durchgelesen, da ich schon vor einiger zeit mal anfangen wollte, aber es irgendwie verpennt hatte^^

dann schau ich mir das mal an.
Bis jetzt kann ich halt schon grobe zusammenhänge in einem script erkennen und weiß grob, welcher befehl für was steht etc

ich meld mich dann die tage mal wenn ich nciht mehr weiter komme^^
FoGzone is offline  
Old 12/09/2010, 03:22   #8
 
elite*gold: 0
Join Date: Dec 2009
Posts: 931
Received Thanks: 47
soll das dann so aussehen?

Deutsche-Mafia is offline  
Old 12/09/2010, 10:40   #9

 
elite*gold: 250
Join Date: Mar 2010
Posts: 840
Received Thanks: 184
das classic script von kolton sieht genau so aus^^
FoGzone is offline  
Old 01/01/2011, 17:48   #10

 
RezChams's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 24,265
Received Thanks: 15,362
Ich wollte jetzt nicht extra nen Neuen Thread öffnen, deswegen das hier


Der ersteller gibt einen weitern Pfad an:

den ich aber nicht öffnen kann, kanns einer von euch???
Wenn ja was ist das?
RezChams is offline  
Old 01/01/2011, 17:49   #11

 
RezChams's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 24,265
Received Thanks: 15,362
Ich wollte jetzt nicht extra nen Neuen Thread öffnen, deswegen das hier


Der ersteller gibt einen weitern Pfad an:

den ich aber nicht öffnen kann, kanns einer von euch???
Wenn ja was ist das?
RezChams is offline  
Reply


Similar Threads Similar Threads
D2NT Classic Team CS-Bot
04/22/2014 - Diablo 2 - 38 Replies
Hallo zusammen, ich hab da mal was interessantes gefunden: Classic Team Chaos Bot
classic script für d2nt 3.0
08/15/2010 - Diablo 2 - 12 Replies
D2NT classic script verbessert enthalten sind shopbot und classic pickit script edit1: wegen verlinkung von d2nt sternenlooper edit2: updated to v1.1 edit3: updated to v1.3
classic bot script?
06/01/2010 - Diablo 2 - 2 Replies
Ich suche ein bot script für mein classic soso hat jemand da ne info wo man sowas herkriegt.Meine soso soll nur cs runs machen.
suche script für nt bot [classic] offer fg
04/26/2010 - Diablo 2 - 0 Replies
hey leute suche für meine classic feuerballl sorc ein script das sie auf NM andi und mephi macht ohne merc und eine gute classic pickit das es gute rares behält. bin bereit gut fg dafür zu bezahlen mfg
Gif Modifikation?
07/30/2006 - General Art - 3 Replies
Kann mir jemand dieses .gif modifizieren? http://img382.imageshack.us/img382/7944/boom8fo8n e6xy16hr7ul.gif und zwar so das statt "User" dort "Noob" steht und statt "Admin" sollte dort "Leonyn" und wo Mod steht sollte dann "Player" stehen. Ich kriegs selber nicht hin habs mit GIMP probiert aber keine chance :(



All times are GMT +1. The time now is 15:56.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.