战网中国

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2534|回复: 10
打印 上一主题 下一主题

如何让Sorc 去买弓箭 或者拾取弓箭 ? (韩国BOT)

[复制链接]

1

主题

7

帖子

0

积分

新手

Rank: 2

积分
0
跳转到指定楼层
楼主
发表于 2015-11-28 17:31:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何让Sorc 去买弓箭 或者拾取弓箭 ? 因为我的Sorc是拿信心的
拾取文件加了 [name] == Arrows 就是不捡阿
回复

使用道具 举报

96

主题

548

帖子

2897

积分

精灵王

Rank: 6Rank: 6

积分
2897

社区居民忠实会员

沙发
发表于 2015-11-28 18:57:00 | 只看该作者
拾取文件改过之后,在bot的拾取文件设置界面,要点那个红色按键才生效。NIP+DELETE
A1 HC : lgf_hc
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

积分

新手

Rank: 2

积分
0
板凳
 楼主| 发表于 2015-11-28 19:01:42 | 只看该作者
[quote=skylgf,170223]拾取文件改过之后,在bot的拾取文件设置界面,要点那个红色按键才生效。NIP+DELETE[/quote] NIP+DELETE 有按并且重开过D2NT Manager
仍然不会检 skylgf可以试试看
谢谢回复 虽然没有解决问题
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

积分

侠客

Rank: 3Rank: 3

积分
0

社区居民忠实会员

地板
发表于 2015-11-28 22:07:23 | 只看该作者
我是新手,在练小号的时候,希望小号除了超级生命和法力药水之外也能拾取强力药剂。
但不知道物品名称,测试了很多名字,mightiness、strong、punchy、puissant、probability、potent,最终才确定了Greater Healing Potion和Greater Mana Potion
所以,你要不要测试一下Quiver、Bow Arrows之类?
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

积分

新手

Rank: 2

积分
0
5#
 楼主| 发表于 2015-11-28 22:13:22 | 只看该作者
[quote=林小闲,170235]我是新手,在练小号的时候,希望小号除了超级生命和法力药水之外也能拾取强力药剂。
但不知道物品名称,测试了很多名字,mightiness、strong、punchy、puissant、probability、potent,最终才确定了Grea...[/quote] [type] == bowquiver
试过一样不会捡 想不到办法
谢谢回复
回复 支持 反对

使用道具 举报

31

主题

1092

帖子

5881

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5881

社区居民忠实会员喜欢达人

6#
发表于 2015-11-28 22:14:58 | 只看该作者
弓箭属于强制性忽略的物品,改拾取是没用的,必须深入挖掘程序内部代码才能解决。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

积分

新手

Rank: 2

积分
0
7#
 楼主| 发表于 2015-11-28 22:45:38 | 只看该作者
[quote=白色曼陀螺,170237]弓箭属于强制性忽略的物品,改拾取是没用的,必须深入挖掘程序内部代码才能解决。[/quote] 看来难度相当高了!
感谢回复
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

积分

侠客

Rank: 3Rank: 3

积分
0

社区居民忠实会员

8#
发表于 2015-11-28 23:15:08 | 只看该作者
我突然想起来之前我练过弓马,但当时没有设置拾取弓箭,而是在城里设置为购买弓箭。
我的版本是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毁了我又不会死。
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

积分

侠客

Rank: 3Rank: 3

积分
0

社区居民忠实会员

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


当时的全过程:
(红色字体...[/quote] 不是?c8,发表之后代码变了,我用截图吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

积分

新手

Rank: 2

积分
0
10#
 楼主| 发表于 2015-11-28 23:47:25 | 只看该作者
[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之后可以拾取
但是拾取就会存仓 反而变成垃圾 又改回来了
谢谢林小闲提供的思路!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|BattleCN ( 陕ICP备05006600号 )

GMT+8, 2025-2-8 15:53 , Processed in 0.046818 second(s), 20 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表