战网中国

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

聊聊单机挂BOT的原因和我遇到的问题!

[复制链接]

3

主题

23

帖子

0

积分

侠客

Rank: 3Rank: 3

积分
0

社区居民忠实会员

跳转到指定楼层
楼主
发表于 2014-7-26 06:56:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可能很多人都会说,单机直接导入吧!还挂什么BOT,多无聊啊.但是我想说,现在玩暗黑2的,多数已经是快要步入30的准大叔级人物了。既想玩暗黑这个经典的游戏,又实在没时间去一遍又一遍的无聊的刷刷刷了。有很多时间,刷来刷去确实有助于丧失对于一个游戏的乐趣!于是乎,我发现在在战网中国这里,有八神BOT,南瓜BOT,韩国BOT等一大批优秀的BOT,可以代替我们劳动!
有了这些BOT,配合单机的无限大箱子,既省去了繁重的MF体力劳动,又能体会到游戏的乐趣,还可以完成收集控的梦想!可以说是一举三得。
另外,为什么我选择单机挂BOT,第一,战网没有大箱子,虽然有自动倒装备到仓库的功能,但是还是需要建立很多很多ACC,很多小号。找东西虽然可以看XML文件,但是总不能单机一个无限大箱子方便!第二,单机可以很轻松实现/PLYAERS 8功能,不需要多开就可以实现多个人游戏的掉率(虽然/players 8只有5个人左右的NOdrop 率,但也够用了)
说了这么多,现在说说我遇到的问题:
1.bot放入stash(储物箱)是按照小箱子的大小去设计的,单机10*10的大箱子总是添不满!我想知道修改哪个文件可以实现BOT放满大箱子。请高手提供一个修改哪个文件夹里面的文件既可,我自己有一定的研究能力。
2.战网人物顺序是固定的,单机每次退出后,最后一个游戏人物会排到第一位。我想知道,人物顺序是由什么文件控制的,战网BOT可以(player1,player2,player3.....)按照人物位置多开好多个char一起mf,单机由于人物顺序变化,做不到这一点,请问有没有什么方法让单机人物顺序像战网那样固定不变!
3.我自己单机建立了一个战网,可以实现战网的所有功能,也可以实现BOT的teambot,倒仓库功能。但是我还是不太满足,我想让自己建立的战网实在单机的无限多页大箱子功能,请问如何做到?我会一定的暗黑相关TXT文件修改功能,可以实现战网的单页大箱子,无法实现多页大箱子。把大箱子补丁打好之后,自己建的战网也无法实现多页大箱子,请问,应该修改哪些文件?
问题较多!估计没几个会看完吧!但愿遇到有缘之人!
回复

使用道具 举报

84

主题

380

帖子

0

积分

精灵王

Rank: 6Rank: 6

积分
0
沙发
发表于 2014-7-26 09:58:01 | 只看该作者
太专业了
回复 支持 反对

使用道具 举报

27

主题

491

帖子

1万

积分

光明使者

Rank: 8Rank: 8

积分
10682

社区居民忠实会员

板凳
发表于 2014-7-26 10:43:29 | 只看该作者
人物顺序可以这么弄:
1.每个bot的人物位置都设置为第一位
2.挂每个人物前先用这个人物进一次游戏,让这个人物排在第一位
每个人物跑完一次新开游戏时,自己都会在第一位。
回复 支持 反对

使用道具 举报

31

主题

1092

帖子

5881

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5881

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

地板
发表于 2014-7-26 13:06:55 | 只看该作者
指点个研究方向:
1、ntbot的基本函数都在scripts\\libs\\common下边,比如你找的箱子相关函数,在NTTown.ntl文件中,
function NTT_ManageStash(invitem)
2、人物顺序想控制不太现实,那涉及到暴雪的程序修改了,但熟悉ntbot的话,靠判断人物名字也可以实现单机多挂,需要研究NTBot.ntj文件,修改其中的case 12部分。
3、我也不知道。不过如果仅仅是依靠修改mpq文件就能实现的话,可以在界面设置的cdkey选择那里选择你自己的mpq文件。
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

积分

侠客

Rank: 3Rank: 3

积分
0

社区居民忠实会员

5#
 楼主| 发表于 2014-7-26 15:44:50 | 只看该作者
[quote=白色曼陀螺,104732]指点个研究方向:
1、ntbot的基本函数都在scripts\\libs\\common下边,比如你找的箱子相关函数,在NTTown.ntl文件中,
function NTT_ManageStash(invitem)
2、人物顺序想控制不太现实...[/quote] 请大神看下NTTOWN里面的这部分内容。我有点不是特别的懂!
function NTT_ManageStash(invitem) // default stash managing // 这句是:默认的储物箱管理
{
var i, x, y;                                                                                //定义三个变量i,x,y
var _items;
var _stashall;
var StashHeight = (me.gametype == 0) ? 4 : 8;                     //这句什么意思?箱子的高度?
var _ignorestring = _NTT_IgnoredItems.join();
var _ignoreitem;


if(!GetUIState(0x19))
return false;


if(arguments.length < 1)
_stashall = true;
else
_stashall = false;


if(!NTC_StashGoldFull() && NTC_MyGoldCarry() > NTConfig_MinGoldToStash)       //这部分好像是往箱子里面存钱的意思吧。
{
var _mygold = NTC_MyGoldCarry();


Gold(3, _mygold);


for(i = 0 ; i < 2 ; i++)
{
NTC_Delay(500);


if(_mygold > NTC_MyGoldCarry())
break;
}
}


var _stashspace = new Array(StashHeight);


for(y = 0 ; y < StashHeight ; y++)                                    
_stashspace[y] = new Array(6);


for(y = 0 ; y < StashHeight ; y++)
{
for(x = 0 ; x < 6 ; x++)                          //x<6是不是箱子的横向格数是6?
_stashspace[y][x] = 0;
}


_items = me.GetItems();


if(!_items)
return false;


for(i = 0 ; i < _items.length ; i++)
{
if(_items.mode == 0 && _items.itemloc == 4)
{
for(y = 0 ; y < _items.ysize ; y++)
{
for(x = 0 ; x < _items.xsize ; x++)
_stashspace[y+_items.y][x+_items.x] = 1;
}
}
}


for(i = 0 ; i < _items.length ; i++)
{
if(_items.mode == 0 && _items.itemloc == 0 && (_stashall || (_items.x == invitem.x && _items.y == invitem.y)))
{
if(_stashall)
{
_ignoreitem = (NTConfig_Columns[_items.y][_items.x] == 0);


if(!_ignoreitem)
{
if( _ignorestring.indexOf(_items.code) != -1 || NTSI_CheckItem(_items)[0] <= 0 )
_ignoreitem = true;
}
}
else
_ignoreitem = false;


if(!_ignoreitem)
{
_itemdone = false;


for(y = 0 ; y < StashHeight ; y++)
{
if(_itemdone)
break;


for(x = 0 ; x < 6 ; x++)                   //又一个x<6
{
if(_itemdone)
break;


if(_stashspace[y][x] == 0)
{
if((x+_items.xsize-1) < 6 && (y+_items.ysize-1) < StashHeight)
{
var _havespace = true;


for(m = 0 ; m < _items.ysize ; m++)
{
for(n = 0 ; n < _items.xsize ; n++)
{
if(_stashspace[y+m][x+n] == 1)
{
_havespace = false;
m = 4;
break;
}
}
}


if(_havespace)
{
if(NTC_ItemToCursor(_items))
{
for(n = 0 ; n < 80 ; n++)
{
if((n % 40) == 0)
me.ClickItem(0, x, y, 4);


NTC_Delay(100);


if(!me.itemoncursor)
break;
}


if(n < 80)
{
for(m = 0 ; m < _items.ysize ; m++)
{
for(n = 0 ; n < _items.xsize ; n++)
_stashspace[y+m][x+n] = 1;
}
}


NTC_PingDelay(200);
}


_itemdone = true;
}
}
}
}
}
}


if(!_stashall)
return true;
}
}


return true;
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

积分

侠客

Rank: 3Rank: 3

积分
0

社区居民忠实会员

6#
 楼主| 发表于 2014-7-26 15:51:01 | 只看该作者
case 12: // Character Select
                var _time, _control;

                sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);

                for(_time = 0 ; _time < characterScreenTimeout ; _time += 500)
                {
                        _control = controlData.get(controlData.controls.characterSelect.textBox.characterInfo[me.charloc]);
                        if(_control && _control.GetText() != undefined)
                                break;

                        Delay(500);
                }

                if(_time < characterScreenTimeout)
                {
                        Delay(characterSelectDelay);

                        controlData.click(controlData.controls.characterSelect.textBox.characters[me.charloc], 0, 0, 1);
                        controlData.click(controlData.controls.characterSelect.textBox.characterInfo[me.charloc], 0, 0, 1);

                        // reset last game made, so it doesnt make a game immediately
                        inGameAt = 0;
                        setNextGameMake();
                }
                else
                {
                        controlData.click(controlData.controls.characterSelect.button.exit);
                        timeoutDelay(realmDownRetry*60*1000, location);
                }
                break;
对于CASE12里面的内容,更是看不懂了…………哎,发现自己什么也不会啊……。
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

积分

侠客

Rank: 3Rank: 3

积分
0

社区居民忠实会员

7#
 楼主| 发表于 2014-7-26 15:58:50 | 只看该作者
[quote=ita,104716]人物顺序可以这么弄:
1.每个bot的人物位置都设置为第一位
2.挂每个人物前先用这个人物进一次游戏,让这个人物排在第一位
每个人物跑完一次新开游戏时,自己都会在第一位。[/quote] 很抱歉,我没太看明白你说的是什么意思。具体举个例子来说:我有两个char,第一位是sor,第二位是bhpal。按照你的做法,第一次先手动进游戏,让sor处于第一位置上,然后开启bot。再手动让bhpal进游戏一次,让bh处于第一位,再开bh的bot。是这个意思吗?
我怎么觉得这么做不好用呢?有时候sor的bot打完了,再进游戏的时候,此时就会选择处于第一位的bh了呢。
回复 支持 反对

使用道具 举报

27

主题

491

帖子

1万

积分

光明使者

Rank: 8Rank: 8

积分
10682

社区居民忠实会员

8#
发表于 2014-7-26 16:20:50 | 只看该作者
[quote=bravheart037,104780]很抱歉,我没太看明白你说的是什么意思。具体举个例子来说:我有两个char,第一位是sor,第二位是bhpal。按照你的做法,第一次先手动进游戏,让sor处于第一位置上,然后开启bot。再手动让bhpal进游戏一次,让bh处于第一位,再开bh...[/quote] 就是按你举的例子做。
sor的bot打完保存退出时,系统会判定sor是最近一次使用过的角色,因而将其排在第一位。
我以前亲自测试过是可行的。
回复 支持 反对

使用道具 举报

88

主题

804

帖子

4059

积分

精灵王

Rank: 6Rank: 6

积分
4059

社区居民最爱沙发忠实会员原创写手

9#
发表于 2014-7-26 16:38:31 | 只看该作者
关于人物位置,试了好多办法,我是死心了,只有一个办法稳妥可用:每个角色单独设立一个暗黑文件夹,然后利用大箱子的更改存档路径功能,分别指定相应的存盘位置。也就是一个ACC一个人物,一个暗黑文件夹。

[SAVEPATH]
ActiveSavePathChange=1
SavePath=E:\\mygame\\Diablo II-SOR\\Save-sor
回复 支持 反对

使用道具 举报

88

主题

804

帖子

4059

积分

精灵王

Rank: 6Rank: 6

积分
4059

社区居民最爱沙发忠实会员原创写手

10#
发表于 2014-7-26 16:42:48 | 只看该作者
至于兼容大箱子,改变一下NTTown.ntl内的箱子行列数设置就行了。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-15 20:56 , Processed in 0.039244 second(s), 20 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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