战网中国

标题: 如何让Sorc 去买弓箭 或者拾取弓箭 ? (韩国BOT) [打印本页]

作者: alexkof    时间: 2015-11-28 17:31
标题: 如何让Sorc 去买弓箭 或者拾取弓箭 ? (韩国BOT)
如何让Sorc 去买弓箭 或者拾取弓箭 ? 因为我的Sorc是拿信心的
拾取文件加了 [name] == Arrows 就是不捡阿
作者: skylgf    时间: 2015-11-28 18:57
拾取文件改过之后,在bot的拾取文件设置界面,要点那个红色按键才生效。NIP+DELETE
作者: alexkof    时间: 2015-11-28 19:01
[quote=skylgf,170223]拾取文件改过之后,在bot的拾取文件设置界面,要点那个红色按键才生效。NIP+DELETE[/quote] NIP+DELETE 有按并且重开过D2NT Manager
仍然不会检 skylgf可以试试看
谢谢回复 虽然没有解决问题
作者: 林小闲    时间: 2015-11-28 22:07
我是新手,在练小号的时候,希望小号除了超级生命和法力药水之外也能拾取强力药剂。
但不知道物品名称,测试了很多名字,mightiness、strong、punchy、puissant、probability、potent,最终才确定了Greater Healing Potion和Greater Mana Potion
所以,你要不要测试一下Quiver、Bow Arrows之类?
作者: alexkof    时间: 2015-11-28 22:13
[quote=林小闲,170235]我是新手,在练小号的时候,希望小号除了超级生命和法力药水之外也能拾取强力药剂。
但不知道物品名称,测试了很多名字,mightiness、strong、punchy、puissant、probability、potent,最终才确定了Grea...[/quote] [type] == bowquiver
试过一样不会捡 想不到办法
谢谢回复
作者: 白色曼陀螺    时间: 2015-11-28 22:14
弓箭属于强制性忽略的物品,改拾取是没用的,必须深入挖掘程序内部代码才能解决。
作者: alexkof    时间: 2015-11-28 22:45
[quote=白色曼陀螺,170237]弓箭属于强制性忽略的物品,改拾取是没用的,必须深入挖掘程序内部代码才能解决。[/quote] 看来难度相当高了!
感谢回复
作者: 林小闲    时间: 2015-11-28 23:15
我突然想起来之前我练过弓马,但当时没有设置拾取弓箭,而是在城里设置为购买弓箭。
我的版本是D2NT3.3,默认不去NPC处购买弓箭,需要新增代码。
如果确定要做,请先行备份文件,本人不负责成功,也不负责善后。


当时的全过程:
(红色字体为新增代码)
查看代码发现NTTown.ntl中已经定义了购买弓箭的函数,但没有被调用。
路径:D2NT\\scripts\\libs\\common\\NTTown.ntl
函数:function NTT_FillArrows(npc)
函数内容从略。
而在NTTownManager.ntl中也定义了检查角色装备弓的情况,但也没有被调用。


既然这样就简单了,在NTTownManager.ntl中调用就可以了。
路径D2NT\\scripts\\libs\\common\\NTTownManager.ntl

增加声明变量:
...
var _NTTMGR_RemoveCurse;
var _NTTMGR_BuyArrows;

函数function NTTMGR_TownManager(simple)处增加调用检查弓和访问NPC:
...
_NTTMGR_DoRepair = NTT_CheckRepair(40);
_NTTMGR_DoRevive = NTT_CheckMerc();
_NTTMGR_RemoveCurse = NTTMGR_CheckCurse(NTConfig_CheckSelfSafe > 0x01 ? 0x7E : 0, NTConfig_CheckMercSafe > 0x01 ? 0x7E : 0);
_NTTMGR_BuyArrows = NTTMGR_CheckBow();
if(_NTTMGR_BuyArrows) {
  NTT_TossAmmo();
}

NTCU_InitCubing();
...
此函数中每个ACT中访问NPC的地方,在负责修理的NPC处都添加购买弓箭的参数,ACT1的恰西,ACT2的法拉...:
switch(me.act)
{
case 1:
...
  if(_NTTMGR_DoRepair || _NTTMGR_BuyArrows)
   NTTMGR_VisitCharsi();
..
case 2:
...
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_DoRepair || _NTTMGR_BuyArrows)
   NTTMGR_VisitFara();
...
后面都一样,case3、case4、case5,海尔布、拉苏克什么的,无脑在修理后面加||_NTTMGR_BuyArrows:
if(_NTTMGR_DoRepair || _NTTMGR_BuyArrows)


好了,现在参数传递过去了,接下来要告诉程序携带了这个参数的话,具体要做什么。
好在原本文件中是有购买弓箭的函数的,只要直接调用就可以。
以ACCT1恰西为例,函数function NTTMGR_VisitCharsi():
原代码只是修理:
function NTTMGR_VisitCharsi()
{
var _npc;
NTTM_TownMove(\"charsi\");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_CHARSI, 5);
if(_npc)
{
  if(NTT_DoInteract(_npc))
  {
   if(NTT_DoTrade(_npc))
    NTT_RepairItems(_npc);
   me.Cancel(1);
  }
}
}


改为判断一下参数,看看是不是要买弓箭,如果是,直接调用NTTown.ntl里的函数:function NTT_FillArrows(npc)
注意IF结构有点变了,多了一层逻辑,原来是如果点开交易就直接修理,现在是增加了一层,如果交易,再判断是修理还是购买弓箭:
function NTTMGR_VisitCharsi()
{
var _npc;
NTTM_TownMove(\"charsi\");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_CHARSI, 5);
if(_npc)
{
  if(NTT_DoInteract(_npc))
  {
   if(_NTTMGR_DoRepair || _NTTMGR_BuyArrows)
   {
    if(NTT_DoTrade(_npc))
    {
     if(_NTTMGR_DoRepair)
      NTT_RepairItems(_npc);
     if(_NTTMGR_BuyArrows)
      NTT_FillArrows(_npc);
    }

   me.Cancel(1);
   }
  }
}
}


最后买箭的函数NTT_FillArrows,在NTTown.ntl里面有,不用重新写。
但我记得最后调试的时候,它会输出一行文本,这里会报错,记得是因为格式的问题。
后来我参考别的输出格式调整了一下就好了。
路径D2NT\\scripts\\libs\\common\\NTTown.ntl:
函数:function NTT_FillArrows(npc)

if(_bow)
{
  Print(\"?c8Buying Arrows for my \" + _name);
.....
十字弓
if(_xbow)
{
  Print(\"?c8Buying Bolts for my \" + _name);
...


印象中好像是在输出文本前面加了?c8,有点忘记了。
就这些,胆大心细,反正又不会死,先行备份。


反正,你的BOT毁了我又不会死。
作者: 林小闲    时间: 2015-11-28 23:22
[quote=林小闲,170239]我突然想起来之前我练过弓马,但当时没有设置拾取弓箭,而是在城里设置为购买弓箭。
我的版本是D2NT3.3,默认不去NPC处购买弓箭,需要新增代码。
如果确定要做,请先行备份文件,本人不负责成功,也不负责善后。


当时的全过程:
(红色字体...[/quote] 不是?c8,发表之后代码变了,我用截图吧
作者: alexkof    时间: 2015-11-28 23:47
[quote=林小闲,170240]不是?c8,发表之后代码变了,我用截图吧[/quote] 有大神!!!
我测试看看!! 不行的话只能先用魔法箭 不耗箭的来挂

感谢!
-------------------------------------------测试结果--------------------------------------------------------------------
可能是版本不同 NTTown.ntl, 没有函数:function NTT_FillArrows(npc)(我是用韩国BOT 35版)
也没有类似Buy arrows
估计AMA的补充Arrows是绑职业的 另外写在别的地方

不过我翻了一下
scripts\\libs\\common\\MyPick.ntl (韩国版才有)
My.Pick.ignoredClassIdList = [80, 81, 82, 83, 84, 85, 513, 514, 517, 518, 519, 526, 528, 529, 530, 543];

找到了! 去掉526之后可以拾取
但是拾取就会存仓 反而变成垃圾 又改回来了
谢谢林小闲提供的思路!
作者: 林小闲    时间: 2015-11-29 13:13
[quote=alexkof,170242]有大神!!!
我测试看看!! 不行的话只能先用魔法箭 不耗箭的来挂

感谢!
-------------------------------------------测试结果------------------------------...[/quote] 哦,这样,韩国BOT我没用过,不好意思。




欢迎光临 战网中国 (http://battlecn.net/) Powered by Discuz! X3.1