Hallo ihr lieben Coder, Skripter und Programmierer :)
Ich würde mir gerne ein kleines Skript zusammenstellen, das mir zügige CS-Runs im Modus classic ermöglicht. Das Problem an der Sache ist, dass ich mich absolut Null-Komma-garnicht mit skripten/programmieren auskenne - ich wäre also für jede Hilfe extrem dankbar :)
Ich nehme mal stark an, dass die meisten wissen was ich mit "Taxi-CS-Run" meine ... :D
Für die, die es nicht wissen: kurze Erklärung.
Das Wakka-Skript im B2BS mit Kolton und das "normale" Diablo-Skript entsprechen nicht dem was ich mir vorstelle ;) Das FastDia-Skript schon eher - allerdings öffnet die Sorc hier keine TPs vor dem öffnen der Siegel.
Was ich eig. möchte:
Das würde bedeuten ich müsste auch die DiaHelper.js modifizieren, damit die Helper auf Befehl in die Stadt gehen. Geht das überhaupt ? Startpunkt für mein modifiziertes Skript wäre wohl das FastDia-Skript von Kolton.
Es befindet sich aber auch noch ein sehr interessantes anderes Skript im Bot-Ordner: das ClassicChaosAssistant.js
Ich kann nur leider die genaue Funktionsweise nicht herauslesen weil ich mich - wie gesagt - nicht auskenne :( Beim Testen gab es Probleme das Skript zu laden..
Außerdem habe ich noch ein (ur-)altes ChaosTeamBot-Skript ausgegraben (für D2NT glaube ich), das vllt auch noch ganz interessant sein könnte :) Im Prinzip müsste das genau auf meine Anforderungen zutreffen...
Was meint ihr ? sind meine Ideen überhaupt umsetzbar ? Gibt es eine Liste aller Koordinaten, die ich für das Skript nutzen kann um dem Bot zu sagen WO er die TPs machen soll ? Kann ich die DiaHelfer überhaupt mit say-commands steuern ? Kann ich die Siegel-Umgebung weitgehend cleanen lassen ohne dass die Chars gleich das ganze CS säubern ?
Vielen Dank an alle die sich das bis hierhin durchgelesen haben! Noch größeren Dank an alle die ernsthaft erwägen mir zu helfen :D
:handsdown:
Ich würde mir gerne ein kleines Skript zusammenstellen, das mir zügige CS-Runs im Modus classic ermöglicht. Das Problem an der Sache ist, dass ich mich absolut Null-Komma-garnicht mit skripten/programmieren auskenne - ich wäre also für jede Hilfe extrem dankbar :)
Ich nehme mal stark an, dass die meisten wissen was ich mit "Taxi-CS-Run" meine ... :D
Für die, die es nicht wissen: kurze Erklärung.
Eine Sorc soll sich - mit BO ausgestattet - ins Chaos Sanktuarium teleprotieren, dort an den Siegeln jeweils ein TP öffnen damit die Helfer/Leecher joinen (und den Siegelboss killen) können und dann zum nächsten Siegelboss teleportieren um dort das nächste TP zu öffnen, etc.
Das Wakka-Skript im B2BS mit Kolton und das "normale" Diablo-Skript entsprechen nicht dem was ich mir vorstelle ;) Das FastDia-Skript schon eher - allerdings öffnet die Sorc hier keine TPs vor dem öffnen der Siegel.
Was ich eig. möchte:
- Die Sorc soll vor dem Öffnen der Siegel ein TP in der Area casten, in der der Siegelboss spawned
- Beim Öffnen des TPs soll ein say-command ausgegeben werden - z.B. "Vizier TP up"
- Die Dia-Helper sollen das TP joinen und die Area (in einem gewissen Radius?) cleanen!
- Danach soll der Siegelboss von Sorc+Dia-Helpern gekillt werden.
- Es soll dann ein Say-Command vom Leader (Sorc) ausgegeben werden, woraufhin die Dia-Helper in die Stadt gehen - z.B. "next: DeSeis"
- Am Ende des Runs soll die Sorc am Pentragramm ein TP machen, aus der Party gehen und Diablo nur mit Statik bearbeiten.
Das würde bedeuten ich müsste auch die DiaHelper.js modifizieren, damit die Helper auf Befehl in die Stadt gehen. Geht das überhaupt ? Startpunkt für mein modifiziertes Skript wäre wohl das FastDia-Skript von Kolton.
Es befindet sich aber auch noch ein sehr interessantes anderes Skript im Bot-Ordner: das ClassicChaosAssistant.js
Code:
function Idle() {
var stargo, infgo, seisgo, vizgo, infseal, seisseal, vizseal, diablopickup, normalpickup = false, i, tick, seal, boss, n, target, positions, trapCheck;
this.getLayout = function (seal, value) {
var sealPreset = getPresetUnit(108, 2, seal);
if (!seal) {
throw new Error("Seal preset not found. Can't continue.");
}
if (sealPreset.roomy * 5 + sealPreset.y === value || sealPreset.roomx * 5 + sealPreset.x === value) {
return 1;
}
return 2;
};
this.initLayout = function () {
this.vizLayout = this.getLayout(396, 5275);
this.seisLayout = this.getLayout(394, 7773);
this.infLayout = this.getLayout(392, 7893);
};
this.openSeal = function (id) {
Pather.moveToPreset(108, 2, id, 4);
seal = getUnit(2, id);
if (seal) {
for (i = 0; i < 3; i += 1) {
seal.interact();
tick = getTickCount();
while (getTickCount() - tick < 500) {
if (seal.mode) {
return true;
}
delay(10);
}
}
}
return false;
};
addEventListener("keyup",
function (key) {
if (key === 97) { // Numpad 1
stargo = true;
}
if (key === 98) { // Numpad 2
infgo = true;
}
if (key === 99) { // Numpad 3
infseal = true;
}
if (key === 100) { // Numpad 4
seisgo = true;
}
if (key === 101) { // Numpad 5 (YOU MUST DISABLE KOLTONS MULETRIGGER!)
seisseal = true;
}
if (key === 102) { // Numpad 6
vizgo = true;
}
if (key === 103) { // Numpad 7
vizseal = true;
}
if (key === 104) { // Numpad 8 (Open last seal, teleport to star and pickup for 30 seconds)
diablopickup = true;
}
if (key === 105) { // Numpad 9 (Pickup at current location)
normalpickup = true;
}
});
while (true) {
if (stargo) {
switch (me.area) {
case 107:
Precast.doPrecast(true);
Pather.moveToPreset(108, 2, 255);
this.initLayout();
break;
}
stargo = false;
}
if (infgo) {
switch (me.area) {
case 108:
if (this.infLayout === 1) {
Pather.moveTo(7893, 5306);
} else {
Pather.moveTo(7929, 5294);
}
Pather.makePortal();
say("Infector of Souls TP Up!");
break;
}
infgo = false;
}
if (seisgo) {
switch (me.area) {
case 108:
if (this.seisLayout === 1) {
Pather.moveTo(7773, 5191);
} else {
Pather.moveTo(7794, 5189);
}
Pather.makePortal();
say("Seis");
break;
}
seisgo = false;
}
if (vizgo) {
switch (me.area) {
case 108:
if (this.vizLayout === 1) {
Pather.moveTo(7681, 5302);
} else {
Pather.moveTo(7675, 5305);
}
Pather.makePortal();
say("Viz");
break;
}
vizgo = false;
}
if (infseal) {
switch (me.area) {
case 108:
this.openSeal(393)
this.openSeal(392)
say("Inf");
if (this.infLayout === 1) {
Pather.moveTo(7893, 5306);
} else {
Pather.moveTo(7929, 5294);
}
break;
}
infseal = false;
}
if (seisseal) {
switch (me.area) {
case 108:
this.openSeal(394)
say("Lord De Seis spawned!");
if (this.seisLayout === 1) {
Pather.moveTo(7773, 5191);
} else {
Pather.moveTo(7794, 5189);
}
break;
}
seisseal = false;
}
if (vizseal) {
switch (me.area) {
case 108:
this.openSeal(396)
say("Grand Vizier of Chaos spawned!");
if (this.vizLayout === 1) {
Pather.moveTo(7681, 5302);
} else {
Pather.moveTo(7675, 5305);
}
break;
}
vizseal = false;
}
if (diablopickup) {
switch (me.area) {
case 108:
this.openSeal(395)
Pather.moveToPreset(108, 2, 255);
for (i = 0; i < 300; i += 1) {
Pickit.pickItems();
delay(100);
}
break;
}
diablopickup = false;
}
if (normalpickup) {
switch (me.area) {
case 108:
Pickit.pickItems();
break;
}
normalpickup = false;
}
delay(10);
}
}
Außerdem habe ich noch ein (ur-)altes ChaosTeamBot-Skript ausgegraben (für D2NT glaube ich), das vllt auch noch ganz interessant sein könnte :) Im Prinzip müsste das genau auf meine Anforderungen zutreffen...
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);
}
Was meint ihr ? sind meine Ideen überhaupt umsetzbar ? Gibt es eine Liste aller Koordinaten, die ich für das Skript nutzen kann um dem Bot zu sagen WO er die TPs machen soll ? Kann ich die DiaHelfer überhaupt mit say-commands steuern ? Kann ich die Siegel-Umgebung weitgehend cleanen lassen ohne dass die Chars gleich das ganze CS säubern ?
Vielen Dank an alle die sich das bis hierhin durchgelesen haben! Noch größeren Dank an alle die ernsthaft erwägen mir zu helfen :D
:handsdown: