Page 1 of 1

Loot for DRW Shard

Posted: 2005-06-07 08:39:43
by Dominator
Скрипт на лут под шард ДРВ. Спасибо Beyonder за его скрипт .Я его немного дописал и подправил под свои нужды



##################################
### AutoLoot v 3.2 by Beyonder , Edit Dominator #
##################################
#
### Запускать auto_loot()
### Run the function auto_loot()
#
### Нужна любая функция CheckLag()
### Any CheckLag() function is needed for script
#
## Время достаточное для открытия контейнера
## Time enough for container to open
var OpenContWait=400
## Время между лутом вещей с трупов
## Delay after looting each item from corpses
var LootItemWait=400
## Время между лутом вещей с земли
## Delay after looting each item from ground
var LootGroundWait=400
## Нужно ли брать вещи без разбору?
## Taking items without specification
var LootAllItems=1 # 1=true 0=false
## Сначала резать трупы?
## Carve corpses first
var CutCorpse=true
## Тип вещи которой будем резать
## Type of the item we want to carve the corpses
var CutItemType='0x0F52'
## Как далеко лежащие трупы можно лутить
## Distance to the corpse we can loot
var maxlen=3
## ID мешка куда будем складывать вещи
## ID of the bag we want to put the items to
var BagID='0x40032183'
## Забирать вещи с земли?
## Do you want loot from the ground too?
var LootGround=true
## Время достаточное на разрезание трупа
## Time enough for carving the corpse
var CutTime=300
## Отключить вывод системных сообщений в клиенте
## Disable verbosing in client
var NoVerbose=true

### Основная функция лута # ContainerID - ID контейнера # BagID - ID мешка куда складывать вещи
### Main looting function # Container ID - ID of the container to loot # BagID - bag where to put
sub loot_container(ContainerID,BagID)
var ContCnt=3 #Количество указанных контейнеров # Container count
var NeedCnt=21 #Количество указанных вещей для лута # Loot items count
dim ContFr[4] #Массив контейнеров. Число в скобках должно быть больше ContCnt # Container array, value must be set >ContCnt
dim ContTo[40] #То-же условие что и выше # Same as for ContFr
dim NeedFr[40] #Массив вещей. Число в скобках должно быть больше NeedCnt # Item array # Value must be set > NeedCnt
dim NeedTo[40] #То-же условие что и для NeedFr # Same as for NeedFr
dim NeedTypes[40] #То-же условие что и для NeedFr # Same as for NeedFr

var ItemGr
var ItemID
var FCnt
var iItem
var waittime
if ContainerID==UO.GetSerial('ground') then
waittime=LootGroundWait
else
waittime=LootItemWait
end if

##### Настройка вещей
##### Item config
#### Контейнеры
#### Containers
ContFr[0]='0x0E70'
ContTo[0]='0x0E80'
#
ContFr[1]='0x09B0'
ContTo[1]='0x09B0'
#### Вещи
#### Items
#### Gold
NeedFr[2]='0x0EED'
NeedTo[2]='0x0EED'
#### Dead Woods
NeedFr[3]='0x0F90'
NeedTo[3]='0x0F90'
#### Skeleton Bones
NeedFr[4]='0x0F7E'
NeedTo[5]='0x0F7E'
#### Eyes of newt
NeedFr[5]='0x0F87'
NeedTo[5]='0x0F87'
#### Wyrm"s Hearts
NeedFr[6]='0x0F91'
NeedTo[6]='0x0F91'
#### Mana (Total mana)
NeedFr[7]='0x09DF'
NeedTo[7]='0x09DF'
#### GH
NeedFr[8]='0x09BB'
NeedTo[8]='0x09BB'
#### FS
NeedFr[9]='0x1F5F'
NeedTo[9]='0x1F5F'
#### Full_Platemail
NeedFr[10]='0x1410'
NeedTo[10]='0x1415'
#### Heater
NeedFr[11]='0x1B76'
NeedTo[11]='0x1B76'
#### VikingSword
NeedFr[12]='0x13B9'
NeedTo[12]='0x13B9'
#### Halberd
NeedFr[13]='0x143e'
NeedTo[13]='0x143e'
#### Bow
NeedFr[14]='0x13b1'
NeedTo[14]='0x13b1'
#### GA ; GI ; MR
NeedFr[15]='0x0F84'
NeedTo[15]='0x0F86'
#### BP
NeedFr[16]='0x0F7A'
NeedTo[16]='0x0F7A'
#### NS
NeedFr[17]='0x0F88'
NeedTo[17]='0x0F88'
#### SA
NeedFr[18]='0x0F8C'
NeedTo[18]='0x0F8C'
#### SS
NeedFr[19]='0x0F8D'
NeedTo[19]='0x0F8D'
#### Batwing
NeedFr[20]='0x0F78'
NeedTo[20]='0x0F78'
#### Blank Scroll
NeedFr[21]='0x0E34'
NeedTo[21]='0x0E34'

#### Какие из перечисленных типов нам нужны
#### Which of the types we need
NeedTypes[0]=1
NeedTypes[1]=1
NeedTypes[2]=1
NeedTypes[3]=1
NeedTypes[4]=1
NeedTypes[5]=1
NeedTypes[6]=1
NeedTypes[7]=1
NeedTypes[8]=1
NeedTypes[9]=1
NeedTypes[10]=1
NeedTypes[11]=1
NeedTypes[12]=1
NeedTypes[13]=1
NeedTypes[14]=1
NeedTypes[15]=1
NeedTypes[16]=1
NeedTypes[17]=1
NeedTypes[18]=1
NeedTypes[19]=1
NeedTypes[20]=1
NeedTypes[21]=1

#### Getting items up
repeat
UO.FindType(-1,-1,ContainerID)
FCnt=UO.FindCount()
if UO.FindCount()>0 then
ItemGr=UO.GetGraphic('finditem')
ItemID=UO.GetSerial('finditem')
if LootAllItems==0 then
## Scanning for bags
iItem=0
while iItem<ContCnt
if IsDip(ItemGr,ContFr[iItem],ContTo[iItem]) then
UO.UseObject(ItemID) ## Opening container
wait(OpenContWait)
loot_container(ItemID,BagID)
UO.Hide(ItemID) ## Closing opened container
iItem=ContCnt
end if
iItem=iItem+1
wend
## Scanning for items
iItem=0
while iItem<NeedCnt
if NeedTypes[iItem] AND IsDip(ItemGr,NeedFr[iItem],NeedTo[iItem]) then
UO.MoveItem(ItemID,0,BagID)
wait(waittime)
iItem=NeedCnt
end if
iItem=iItem+1
wend
else
UO.MoveItem(ItemID,0,BagID)
wait(waittime)
end if
UO.Ignore(ItemID)
end if
until FCnt==0
end sub

## Функция режет выбранный труп
## Function cuts selected corpse
Sub CutCorpseID(CorpseID)
var CutID
var Dressed=true
if UO.GetGraphic(UO.ObjAtLayer('Rhand'))==CutItemType then
CutID=UO.GetSerial(UO.ObjAtLayer('Rhand'))
else
if UO.GetGraphic(UO.ObjAtLayer('Lhand'))==CutItemType then
CutID=UO.GetSerial(UO.ObjAtLayer('Lhand'))
else
UO.FindType(CutItemType,-1,'my')
CutID=UO.GetSerial('finditem')
Dressed=false
end if
end if
if not Dressed then
UO.SetArm('cutting_start_arm')
end if

UO.WaitTargetObject(CorpseID)
UO.UseObject(CutID)
wait(CutTime)
return Dressed
end sub

### Функция возвращает следующий труп
### Function returns next corpse
sub next_corpse()
var CorpseID
repeat
UO.FindType('0x2006',-1,'ground') ### Finding corpse
CorpseID=UO.GetSerial('finditem')
if UO.FindCount()==0 then
CorpseID=0 ## No more corpses
else
UO.Ignore(CorpseID)
return CorpseID
end if
until CorpseID==0
return CorpseID
end sub

### Проверка на принадлежность значения диапазону
### Check for a value being between bounds
sub IsDip(x,f,t)
var i_x=UO.Hex2Int(x)
var i_f=UO.Hex2Int(f)
var i_t=UO.Hex2Int(t)
if (i_x>=i_f AND i_x<=i_t) OR (i_x<=i_f AND i_x>=i_t) then
return true
else
return false
end if
end sub

Sub CollectCorpses(Arr)
var CorpseID=1
var CorpseCnt=0
UO.IgnoreReset()
while CorpseID<>0
CorpseID=next_corpse()
if CorpseID<>0 then
Arr[CorpseCnt]=CorpseID
UO.Ignore(CorpseID)
CorpseCnt=CorpseCnt+1
end if
wend
return CorpseCnt
end sub


### Функция лутящая все трупы вокруг
### All corpse looting function
sub auto_loot()
dim Corpses[50]
var CorpseCnt=0
var CorpseNum
var Dressed=true

uo.set('quiet',NoVerbose)
uo.set('finddistance',maxlen)

## Searching Corpses
CorpseCnt=CollectCorpses(Corpses)

## Looting corpses
if (CorpseCnt>0) then
if CutCorpse then
for CorpseNum=0 to CorpseCnt-1
UO.Print('Cutting')
Dressed=Dressed*CutCorpseID(Corpses[CorpseNum])
next
CorpseCnt=CollectCorpses(Corpses)
end if
end if

if CorpseCnt>0 then
if not Dressed then
UO.Arm('cutting_start_arm')
end if

for CorpseNum=0 to CorpseCnt-1
UO.DeleteJournal()
UO.UseObject(Corpses[CorpseNum])
wait(OpenContWait)
loot_container(Corpses[CorpseNum],BagID)
next
end if

if LootGround then
loot_container('ground',BagID) #
end if

UO.IgnoreReset()
uo.set('quiet',0)
end sub

Posted: 2005-06-07 10:05:13
by Sfagnum
хехе... ну ты и извращенец ;)

не пояснишь что это?

Code: Select all

sub IsDip(x,f,t)
var i_x=UO.Hex2Int(x)
var i_f=UO.Hex2Int(f)
var i_t=UO.Hex2Int(t)
if (i_x>=i_f AND i_x<=i_t) OR (i_x<=i_f AND i_x>=i_t) then
return true
else
return false
end if
end sub


зы а насчёт порезки... мб сделать массив типов которыми резать нельзя? их вроде не так и много в руки берётся... и если ни один из этих типов то берётся ножик... типа ньюби даггер ;)

Posted: 2005-06-07 12:07:35
by Beyonder
Это моя функция. Она возвращает труе если x принадлежит диапазону (f;t), false сли не принадлежит. В нее передаються 3 строки типа (например "0x1234"). Первая строка, тип текущего обьекта, вторая - начало диапазона типов, третья - конец.

Тоесть
IsDip('0x0044','0x0000','0x0100') == true так как 0x0044 находиться между 0x0000 и 0x100.

Posted: 2005-06-07 12:09:57
by Beyonder
Да и кстати, этот скрипт лучше не разбирать так как буквально через неделю появиться гигант всех лутов 8).
С поддержкой отделбных цветов для отдельных типов, диапазонов, записей, и многого другого =).

Posted: 2005-06-07 13:01:59
by Sfagnum
Beyonder wrote:Это моя функция. Она возвращает труе если x принадлежит диапазону (f;t), false сли не принадлежит. В нее передаються 3 строки типа (например "0x1234"). Первая строка, тип текущего обьекта, вторая - начало диапазона типов, третья - конец.

Тоесть
IsDip('0x0044','0x0000','0x0100') == true так как 0x0044 находиться между 0x0000 и 0x100.
ну в принципе на понимание процессов в ф-ии у меня мозгов хватило... вопрос поставим по другому - [но зачем? [Атата I'm]]
вернее в чём смысл?

Posted: 2005-06-07 14:37:40
by Askaneli
Надо Сфаги, надо.

Posted: 2005-06-07 15:06:25
by Sfagnum
Askaneli wrote:Надо Сфаги, надо.
в этом я не сомневаюсь... на зачем? не догоняю :(

Posted: 2005-06-08 02:04:58
by Dominator
[quote="Beyonder"]Это моя функция. Она возвращает труе если x принадлежит диапазону (f;t), false сли не принадлежит. В нее передаються 3 строки типа (например "0x1234"). Первая строка, тип текущего обьекта, вторая - начало диапазона типов, третья - конец.

Ето не только твоя функция ,я вообще взял полностью твой скрипт ,доделал итемы которые необходимо лутать под ДрВ шард (я просто вспомнил что полно народу постоянно ищет тподобные скрипты)

Posted: 2005-06-08 10:44:14
by flake
Так почему это не только его функция?
Автор ведь он.

Posted: 2005-06-08 14:36:56
by Dominator
flake wrote:Так почему это не только его функция?
Автор ведь он.


Собственно я почти так и выразился (правдо неочень получилось)
А автор действительно Beyonder . Я просто его дописал немножко и всё

Posted: 2005-06-08 14:45:50
by Beyonder
Я не имел ввиду что только эта функция моя, а имелось ввиду что не стоит задавать вопрос Dominator-у, так как функция моя.

А функция нужна для основного сравнения предметов. Скрипт сделан так, что он перебирает не элементы массива, а элементы мешка сравнивая с каждым элементом массива. А зачем создавать список свитков типа: 0x0001 0x0002 0x0003 0x004... если можно просто записать 0x0001-0x0030. А эта функция какраз для проверки лежит ли число в указанном диапазоне.

Posted: 2005-06-08 15:28:11
by Sfagnum
Beyonder wrote:Я не имел ввиду что только эта функция моя, а имелось ввиду что не стоит задавать вопрос Dominator-у, так как функция моя.

А функция нужна для основного сравнения предметов. Скрипт сделан так, что он перебирает не элементы массива, а элементы мешка сравнивая с каждым элементом массива. А зачем создавать список свитков типа: 0x0001 0x0002 0x0003 0x004... если можно просто записать 0x0001-0x0030. А эта функция какраз для проверки лежит ли число в указанном диапазоне.
ясн...
просто смутило название переменных передаваемых в ф-ю

Code: Select all

ContFr[0]='0x0E70'
ContTo[0]='0x0E80'
#
ContFr[1]='0x09B0'
ContTo[1]='0x09B0'
типа на объявление контейнеров похоже ;)

Posted: 2005-06-09 08:36:44
by KTO nyKHyJI???
Beyonder wrote:Да и кстати, этот скрипт лучше не разбирать так как буквально через неделю появиться гигант всех лутов 8).
С поддержкой отделбных цветов для отдельных типов, диапазонов, записей, и многого другого =).

Ждёммс 8) :lol:

это будет НЕЧТО? ))

Re: Loot for DRW Shard

Posted: 2011-07-01 04:14:15
by NEf_
Доброго времени суток!
При включении выборочного лута скрипт выдаёт ошибку "Line 175: Runtime error"

Code: Select all

## Нужно ли брать вещи без разбору? 
## Taking items without specification
var LootAllItems=0 # 1=true 0=false
inja_loot_er.JPG
inja_loot_er.JPG (4.75 KiB) Viewed 4216 times

При чём, 175 строка - это условие выбора предмета из списка лута " if IsDip(ItemGr,ContFr[iItem],ContTo[iItem]) then "

Сам же sub IsDip(x,f,t) не большой и явных ошибок в нём не вижу...

Code: Select all

### Проверка на принадлежность значения диапазону 
### Check for a value being between bounds
sub IsDip(x,f,t)
 var i_x=UO.Hex2Int(x)
 var i_f=UO.Hex2Int(f)
 var i_t=UO.Hex2Int(t)
 if (i_x>=i_f AND i_x<=i_t) OR (i_x<=i_f AND i_x>=i_t) then
 return true
 else
 return false
 end if
end sub


Впрочем, было бы чудесно, если бы сам Beyonder ответил на вопрос или может кто-то видел его "гигант всех лутов" и даст ссылку на тему?

Re: Loot for DRW Shard

Posted: 2011-07-20 09:08:47
by Kynep
МОгильщик...
Такую тему откопал! :shock:

6 Лет прошло...