XP 봇, 겜블에러 해결
분류
봇관련
조회 수
1,370
추천 수
10
증상:
XP봇, 겜블하게 설정시, 겜블한 아이템을 인식하지 못하는 버그로 인해,
설정에 맞지 않는 아이템을 보관하거나, 패일투 드랍등 에러가 발생하는 경우.
해법:
(이방법은, nt 봇, 겜블 함수를 원용해서, 바꿔 준 겁니다.)
% 만약을 대비해, 기존 d2jsp-town.d2l 원본은 백업 해둡니다.
d2jsp-town.d2l 파일에서 , function DT_GambleIt 함수를 아래 함수로 교체
function DT_GambleIt(npc) {
var _gambleitem, _newitem;
if(!npc)
return false;
if(!getUIFlag(0x08) || !getUIFlag(0x0C))
return false;
//_gambleitem = NTC_GetItems(npc);
_gambleitem = npc.getItems();
if(!_gambleitem)
return false;
for(var i = 0 ; i < _gambleitem.length ; i++)
{
if(_DT_IsItemInGambleArray(_gambleitem[i].code))
{
if(DT_CheckSpace(DT_GetXSize(_gambleitem[i]),DT_GetYSize(_gambleitem[i])))
{
_DT_GetOldItemsInt();
if(DT_BuyItem(_gambleitem[i], npc, 2)) {
delay(250);
_newitem = _DT_GetGambledItemInt();
}
else
return false;
if(_newitem)
{
while(!_newitem.getFlag(0x10))
delay(100);
delay(250);
_result = DT_NiceItem(_newitem,DT_ReportMode);
_reportstring = (DT_ReportMode) ? " [line #" + _result.line + " in " + _result.file + "]" : "";
if (_result.result > 0) {
DL_LogItem(DL_GetItemName(_newitem),_newitem.quality,"[Gambled]" + _reportstring);
DC_DPrint("DT_GambleIt() : Gambled a " + DL_GetItemName(_newitem) + _reportstring);
}
else {
DC_DPrint("DT_GambleIt() : Attemping to sell the gambled item (" + _newitem.fname + ")");
if(!DT_BuyItem(_newitem, npc, 1)){
msg = npc.name+" >>> Unable to resell the gambled item "+_newitem.fname+" flag: "+_newitem.getFlag(0x10)+" mode: "+_newitem.mode;
DC_Print(msg);
DC_LogToLoader(msg);
DC_DPrint("DT_GambleIt() : Unable to resell the gambled item!");
}
}
}
}
}
}
return true;
}
// 아래 두함수를 위 겜블함수 바로 아래에 넣어 줍니다.
function _DT_GetGambledItemInt()
{
var n;
var _items;
var _founditem;
_items = getUnit(4,null,100);
if(!_items)
return false;
do{
if(_items.mode == 0 && _items.getParent() && DC_CheckOwner(_items,me.name))
{
_founditem = true;
for(n = 0 ; n < _DT_OldItems.length ; n++)
{
if(_items.gid == _DT_OldItems[n])
{
_founditem = false;
break;
}
}
if(_founditem)
return _items;
}
}while(_items && _items.getNext(null,100));
return false;
}
function _DT_GetOldItemsInt()
{
var _items;
_DT_OldItems = new Array();
_items = getUnit(4,null,100);
if(!_items)
return false;
do {
if(_items.mode == 0 && _items.getParent() && DC_CheckOwner(_items,me.name))
_DT_OldItems.push(_items.gid);
} while(_items && _items.getNext(null,100));
}