Je vais être assez simple . Pour une rapide présentation, voilà ce que je vais vous faire installer (ou pas) :
- un système de leechbot
- un leechbot qui aide le bot principal
- le tout avec un leech bot qui sait parler
- et qui tele avec le bot principal pour l'aider à nettoyer.
- Activation ou non des TPs
- Activation ou non du BO avant Baal
Pour plus de confort, je vous invite à vous procurer ces différents logiciels si vous ne les avez pas déjà :
- Un éditeur de texte. Je vous recommande le notepad++
- Un logiciel de décompression comme Winrar ou encore 7zip
- Le bot en question D2NT 3.1 et NTBot 4.2 (vous trouverez comment installer ce bot, sur un de mes thread [Tuto]Followbot Pour D2Nt 3.0/1)
I. Installation du système du leechbot.
Je ne vais pas redétailler son installation. Vous trouverez comme vous y prendre sur un de mes anciens thread :
- [Tuto]FollowBot pour D2Nt 3.0/1
A ceci près, c'est que vous ne fais rien en ce qui concerne les scripts de leechfight de Diablo et Baal, vous faites uniquement ce qui vient après !
Bref, une fois ceci fait, on passe à la suite.
II. Multi-bot
Une fois le système de leechbot installé, rendez-vous dans le dossier suivant :
"...D2NT\scripts\NTBot\bots"Et on copies/colles le fichier "NTBaal.ntj" dans le même dossier. =)
Selon les OS, le renommage du fichier se fera différement, mais on le renomme de la manière suivante (ou autre, il faut juste un nom différent, et le nom du fichier n'influe en rien sur la suite, vous n'êtes pas obligé de prendre le même que le mien) :
"NTFollowBaal.ntj" (<= n'oubliez surtout pas le .ntj à la fin, c'est impératif et obligatoire (redondance powaa))
N'oubliez pas, bien sûr d'ajouter la ligne de ce nouveau script dans la liste des boss possibles :
NTConfig_Script.push("NTFollowBaal.ntj"); NTConfig_KillBaal = true;
Voilà voilà, ça se met en place petit à petit.
III. Configuration du script NTFollowBaal.ntj
Je vais copier l'intégralité du script ORIGINAL de baal et mettre après des "(==" les endroits où des modifications sont possibles. Vous les verrez facilement car elles seront rouge/rouge bordeaux.
function NTMain() { Include("libs/common/NTCommon.ntl"); NTC_IncludeLibs(); NTC_IncludeConfig("NTBot/char_configs"); var i; var _wave; var _starttick; NT_LoadConfig(); NTSI_LoadNIPFiles("NTBot/item_configs"); NTA_Initialize(); //NTC_PingDelay(3000); //(== Permet à votre leecher d'attendre un certain temps avant de //démarrer et de ce rendre au WP pour tele. La valeur est en millisecondes. 1000ms = 1sec. Keep-it in mind. Cette astuce peut vous permettre //de régler le temps de décalage subit par le main bot lors de l'achat de popo par exemple. // if(!NTTM_CheckAct()) { NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_CheckAct()"); return; } NTTMGR_TownManager(); if(!NTTM_TownMove("waypoint")) { NTC_SendMsgToScript("NTBotGame.ntj", "NTTM_TownMove()"); return; } if(!NTM_TakeWaypoint(129)) { NTC_SendMsgToScript("NTBotGame.ntj", "NTM_TakeWaypoint()"); return; } NTP_DoPrecast(true); for(i = 0 ; i < 2 ; i++) { if(!NTM_MoveToStair(me.areaid, 130+i)) { NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveToStair()"); return; } if(!NTM_TakeStair(130+i)) { NTC_SendMsgToScript("NTBotGame.ntj", "NTM_TakeStair()"); return; } } if(!NTM_MoveTo(me.areaid, 15112, 5068)) { NTC_SendMsgToScript("NTBotGame.ntj", "NTM_MoveTo()"); return; } NTA_ClearPosition(20, true, 2); if(NTConfig_PublicMode) { NTM_MoveTo(me.areaid, 15116, 5068); NTC_PingDelay(1000); //(== Mettre un "//" devant permet d'annuler le temps que met le bot pour //"examiner" la zone, directement en relation avec la requête qui suit NTA_ClearPosition(20, true, 2); // (== Mettre un "//" devant permet d'ignorer le nettoyage de la zone qui //entoure le premier TP, et donc, de parler plus vite. Ces deux astuces sont valables pour le main bot //et le leecher. Notez qu'annuler le nettoyage sur le leecher permet d'être plus efficace, pendant qu'un parle, l'autre nettoie =) // NTM_MoveTo(me.areaid, 15116, 5068); NTM_MakeTP(); //(== Mettre un "//" devant permet de désactiver la création d'un TP, à faire sur votre leechbot (je vous le conseille en tout cas) // Say("TP up, Be careful!"); // (== Changez la phrase entre parenthèse change l'annonce du bot. Attention, si vous //souhaitez citez quelque chose, ou le mettre en valeur, utilisez la simple quote -'- et non la double quote -"-, car cette //dernière referme la phrase, attention donc ! // } NT_ClearThroneInt(); if(NTConfig_PublicMode) { NTM_MoveTo(me.areaid, 15112, 5004, 1, true); //(== changer les coordonnées pour faire le TP ou se mettre à un //spot et dire un truc est possible. Pour que le leech bot se mette par exemple au milieu de la salle après le cleanage //au lieu d'aller dans le coin =)// // les coordonées du milieu du trône sont les suivantes : 15092, 5028. Mettez-les à la place des autres. Ne touchez pas le "1, true". // NTM_MakeTP(); //(== Annule ou non la pose d'un TP // Say("TP is safe!"); //(== même chose. // } while(1) { if(me.classid == NTC_CHAR_CLASS_PALADIN || me.classid == NTC_CHAR_CLASS_BARBARIAN) NTM_MoveTo(me.areaid, 15092, 5028); else NTM_MoveTo(me.areaid, 15092, 5040); if(me.GetState(2)) NTC_PutSkill(109, NTC_HAND_RIGHT); for(i = 0 ; i < 6 ; i++) { _wave = NT_ThroneCheckInt(); if(_wave > 0) break; NTC_Delay(500); } _starttick = GetTickCount(); while(_wave == 0) { if(!NT_ThronePreAttackInt()) NTC_Delay(200); if(GetTickCount()-_starttick > 15000) { NT_ClearThroneInt(); _starttick = GetTickCount(); } _wave = NT_ThroneCheckInt(); } switch(_wave) { case 1: NTA_ClearPosition(40, true, 1); NTP_DoPrecast(true); break; case 3: NTA_ClearPosition(40, true, 2); NT_CheckHydraInt(); break; case 4: NTA_ClearPosition(40, true, 2); break; case 5: NTA_ClearPosition(40, true); break; default: NTA_ClearPosition(40, true, 1); break; } if(_wave == 5) break; } if(NTConfig_KillBaal) { var _portal; if(NTConfig_PublicMode) Say("Killing Baal"); //(== Idem if(!NTTMGR_CheckSafe(NTConfig_CheckSelfSafe|0x01, NTConfig_CheckMercSafe)) { NTC_SendMsgToScript("NTBotGame.ntj", "NTTMGR_CheckSafe()"); return; } NTM_MoveTo(me.areaid, 15092, 5010); NTP_DoPrecast(true); //(== Mettre un "//" annule le BO avant Baal. Ca peut-être utile de le faire dans le cas ou //le main bot le fait déjà =) // while(NTC_FindUnit(NTC_UNIT_MONSTER, 543)) NTC_Delay(500); _portal = NTC_FindUnit(NTC_UNIT_OBJECT, 563, 1); if(!_portal) { NTC_SendMsgToScript("NTBotGame.ntj", "NTC_FindUnit()"); return; } if(!NTM_UsePortal("Portal", 132, null, _portal)) { NTC_SendMsgToScript("NTBotGame.ntj", "NTM_UsePortal()"); return; } NTM_MoveTo(me.areaid, 15138, 5916); if(!NTA_KillMonster(544)) { NTC_SendMsgToScript("NTBotGame.ntj", "NTA_KillMonster()"); return; } NTSI_PickItems(); } if(NTConfig_PublicMode) Say("Next game"); //(== can be changed // NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END"); } // ON NE TOUCHE PAS A CE QU'IL Y A EN DESSOUS ! // Internal function function NT_ClearThroneInt() { var _attackpos = [15112, 5068, 15075, 5065, 15114, 5045, 15114, 5012, 15095, 5024, 15078, 5013, 15092, 5040]; for(var i = 0 ; i < _attackpos.length ; i += 2) { NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1]); NTA_ClearPosition(25, true, 2); } } function NT_ThroneCheckInt() { var _monster; if(!NTC_FindUnit(NTC_UNIT_MONSTER, 543)) return 5; _monster = NTC_FindUnit(NTC_UNIT_MONSTER); if(_monster) { do { if(NTA_IsValidMonster(_monster)) { if(_monster.classid == 23 || _monster.classid == 62) return 1; if(_monster.classid == 105 || _monster.classid == 381) return 2; if(_monster.classid == 557) return 3; if(_monster.classid == 558) return 4; if(_monster.classid == 571) return 5; } } while(_monster.GetNext()); } return 0; } function NT_ThronePreAttackInt() { if(me.classid == NTC_CHAR_CLASS_SORCERESS) { if(NTConfig_AttackSkill[3] == 56 || NTConfig_AttackSkill[3] == 59) return NTC_CastSkill(NTConfig_AttackSkill[3], 2, 15092, 5028); } else if(me.classid == NTC_CHAR_CLASS_PALADIN) { if(NTConfig_AttackSkill[3] == 112) { if(NTConfig_AttackSkill[4] > 0) NTC_PutSkill(NTConfig_AttackSkill[4], NTC_HAND_RIGHT); return NTC_CastSkill(NTConfig_AttackSkill[3], 2); } } return false; } function NT_CheckHydraInt() { var _hydra1, _hydra2, _hydra3; _hydra1 = NTC_FindUnit(NTC_UNIT_MONSTER, 351); _hydra2 = NTC_FindUnit(NTC_UNIT_MONSTER, 352); _hydra3 = NTC_FindUnit(NTC_UNIT_MONSTER, 353); if((_hydra1 && _hydra1.GetStat(172) != 2 && _hydra1.GetState(105)) || (_hydra2 && _hydra2.GetStat(172) != 2 && _hydra2.GetState(105)) || (_hydra3 && _hydra3.GetStat(172) != 2 && _hydra3.GetState(105))) { NTM_MoveTo(me.areaid, 15112, 5004); if(me.GetState(2)) NTC_PutSkill(109, NTC_HAND_RIGHT); NTC_PingDelay(3000); } }