Quote:
|
Zum anderen Frage ich mich, inwieweit es Sinnvoll ist, auf die Position zu Klicken, auf der der Char gerade steht. Aufgrund von Rundungsfehlern würde ich vermuten, dass das zu einem Schritt in undefinierte Richtung führt, aber vielleicht hast du dir dabei ja etwas gedacht.
|
nope das klappt perfekt ^^ ein klick in etwa wo du stehst und ein unterbrechen des langlaufen am weg :) genau wies sein soll
das zu dia naja bin ja nochnet 100% fertig aber schon gute 90 :D
das läuft schon echt gut :)
mit nem lvl 1er char würd ichs zwar net empfehlen, dafür cleart der leader manchmal zu unsauber, aber ab lvl 30 / 40 bei entsprechenden chickeneinstellungen kein problem
das mit den koordinaten hab ich bei mir im script schon mit comments versehen die versuchen zu erklären welche ecken das sind ^^
btw auf diese art und weise klappt das deutlich besser als mit checkpoints :D
thx btw für die erläuterung :) hatte es dann auch irgendwann mit grübeln raus wie ich das mit dem stehenbleiben mach
und ich hab ein neues problem ^^
und zwar wollt ich meinen leecher bei baal dazu bringen durchs tp zu gehen aber der WILL NET :( der steht davor und es klappt einfach net
ich vergleich mal deine optimierungen mit meinem code und poste dann die aktuelle version
mir ist übrigends aufgefallen, dass mein leader alle paar spiele (unregelmäßig) einfach kein passwort verwendet und sein cta benutzt er auchnet :/ (dabei hab ich dem extra eins gebaut) dafür dauert der precast ziemlich lange
so hier noch das aktuelle script teilweise mit comments :)
Code:
function NTMain()
{
Include("libs/common/NTCommon.ntl");
Include("common/NTMove.ntl")
NTC_IncludeLibs();
NTC_IncludeConfig("NTBot/char_configs");
NT_LoadConfig();
NTSI_LoadNIPFiles("NTBot/item_configs");
NTA_Initialize();
var _myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
if(!NTTM_CheckAct(4))
{
NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()");
return;
}
NTTMGR_TownManager();
NTTM_TownMove("portalspot");
for(i = 0; i <= 100; i++)
{
if(NTC_InMyParty(NTConfig_Leader))
break;
Delay(200);
}
_myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
if(_myPlayerUnit==null)
{
Say("no player found");
ExitGame();
}
for(var i=0;i<=10;i++)
{
if(_myPlayerUnit.areaid>=129)
{
NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
break;
}
if(_myPlayerUnit.areaid==108||_myPlayerUnit.areaid==107)
break;
Delay(750);
}
while(me.areaid == 103 && NTC_InMyParty(NTConfig_Leader))
{
NTM_UsePortal("BluePortal", 108, NTConfig_Leader); // 50
Delay(750);
}
var _distance=0;
var _path;
var _leaderx=0;
var _leadery=0;
while(NTC_InMyParty(NTConfig_Leader))
{
NTP_DoPrecast(false);
_myPlayerUnit = MW_GetPlayerUnit2(NTConfig_Leader);
if(_myPlayerUnit==null)
NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
if(me.areaid == 108 && me.areaid == _myPlayerUnit.areaid)
{
_leaderx=_myPlayerUnit.x;
_leadery=_myPlayerUnit.y;
_distance=GetDistance(me.x, me.y, _leaderx, _leadery);
if(_distance>=70)
{
_path = GetPath(me.areaid, me.x, me.y, _leaderx, _leadery, false);
if(_path)
{
for(var i = 0; i < _path.length; i++)
{
_distance=GetDistance(me.x, me.y, _leaderx, _leadery);
if(_distance>=50)
{
if(_path[i][0]<7708||_path[i][0]>7880||_path[i][1]<5223) // verhindert zu weites laufen richtung siegel!!!
{
ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
NTC_Delay(NTC_DELAY_FRAME);
ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
break;
}
else if(Math.abs(_path[i][0]-7817)<=2 && Math.abs(_path[i][1]-5436)<=2) // zweite ecke am rechter weg vom eingang aus -> ecke zum mittelteil hin
{
NTM_WalkTo(7820, 5428);
}
else if(Math.abs(_path[i][0]-7817)<=2 && Math.abs(_path[i][1]-5371)<=2) // ecke am rechten weg nach dem mittelteil vom eingang aus
{
NTM_WalkTo(7819, 5368);
}
else if(Math.abs(_path[i][0]-7763)<=3 && Math.abs(_path[i][1]-5267)<=3) // ecke links über pentagramm
{
NTM_WalkTo(_path[i][0], 5278);
}
else if(Math.abs(_path[i][0]-7792)<=3 && Math.abs(_path[i][1]-5412)<=3) // linke untere ecke im mittelteil nach dem eingang
{
NTM_WalkTo(7792, 5400);
}
else
{
NTM_WalkTo(_path[i][0], _path[i][1]);
}
}
else
{
ClickMap(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, me.x, me.y)
NTC_Delay(NTC_DELAY_FRAME);
ClickMap(NTC_CLICK_LUP, NTC_SHIFT_NONE, null);
break;
}
}
}
}
_diablo = NTC_FindUnit(NTC_UNIT_MONSTER, 243);
Delay(300);
if(_diablo)
{
Delay(10000); // wenn dia da ist -> 10 sec warten
break; // dia sollte dann tot sein :D und auf zum nächsten script
}
}
if(_myPlayerUnit.areaid>=129)
NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
Delay(800);
}
NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
}
function MW_GetPlayerUnit2(leaderName)
{
var _player;
if(arguments.length < 1 || !leaderName)
return null;
_player = GetPlayerUnit();
if(_player)
{
while(_player.GetNext())
{
if(_player.name.toLowerCase() == leaderName.toLowerCase())
return _player;
}
}
return null;
}
wenn du willst poste ich noch die restlichen scripts und du kannsts ausprobieren ^^
also das diascript halt und ich hab noch eine zusätzliche variable damit der leader auch auf den leecher wartet, wenn der schon im game ist :)
E: das problem mim in den weltstein kommen hab ich gelöst :D
joa damit isses eigentlich alles fertig
vllt noch die ein oder andere feinheit aber im großen und ganze klappts :)