Loot for DRW Shard

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Dominator
Posts: 124
Joined: 2005-04-06 05:53:47

Loot for DRW Shard

Post 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
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post 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


зы а насчёт порезки... мб сделать массив типов которыми резать нельзя? их вроде не так и много в руки берётся... и если ни один из этих типов то берётся ножик... типа ньюби даггер ;)
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Post by Beyonder »

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

Тоесть
IsDip('0x0044','0x0000','0x0100') == true так как 0x0044 находиться между 0x0000 и 0x100.
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Post by Beyonder »

Да и кстати, этот скрипт лучше не разбирать так как буквально через неделю появиться гигант всех лутов 8).
С поддержкой отделбных цветов для отдельных типов, диапазонов, записей, и многого другого =).
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

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

Тоесть
IsDip('0x0044','0x0000','0x0100') == true так как 0x0044 находиться между 0x0000 и 0x100.
ну в принципе на понимание процессов в ф-ии у меня мозгов хватило... вопрос поставим по другому - [но зачем? [Атата I'm]]
вернее в чём смысл?
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

Надо Сфаги, надо.
Сделал дело - флуди смело !!!
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

Askaneli wrote:Надо Сфаги, надо.
в этом я не сомневаюсь... на зачем? не догоняю :(
Dominator
Posts: 124
Joined: 2005-04-06 05:53:47

Post by Dominator »

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

Ето не только твоя функция ,я вообще взял полностью твой скрипт ,доделал итемы которые необходимо лутать под ДрВ шард (я просто вспомнил что полно народу постоянно ищет тподобные скрипты)
flake
Expert!
Posts: 746
Joined: 2004-08-11 23:56:17
Location: The Citadel
Contact:

Post by flake »

Так почему это не только его функция?
Автор ведь он.
Dominator
Posts: 124
Joined: 2005-04-06 05:53:47

Post by Dominator »

flake wrote:Так почему это не только его функция?
Автор ведь он.


Собственно я почти так и выразился (правдо неочень получилось)
А автор действительно Beyonder . Я просто его дописал немножко и всё
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Post by Beyonder »

Я не имел ввиду что только эта функция моя, а имелось ввиду что не стоит задавать вопрос Dominator-у, так как функция моя.

А функция нужна для основного сравнения предметов. Скрипт сделан так, что он перебирает не элементы массива, а элементы мешка сравнивая с каждым элементом массива. А зачем создавать список свитков типа: 0x0001 0x0002 0x0003 0x004... если можно просто записать 0x0001-0x0030. А эта функция какраз для проверки лежит ли число в указанном диапазоне.
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post 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'
типа на объявление контейнеров похоже ;)
KTO nyKHyJI???
Posts: 143
Joined: 2004-12-28 19:31:44

Post by KTO nyKHyJI??? »

Beyonder wrote:Да и кстати, этот скрипт лучше не разбирать так как буквально через неделю появиться гигант всех лутов 8).
С поддержкой отделбных цветов для отдельных типов, диапазонов, записей, и многого другого =).

Ждёммс 8) :lol:

это будет НЕЧТО? ))
NEf_
Posts: 1
Joined: 2011-06-30 21:09:24

Re: Loot for DRW Shard

Post 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 4215 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 ответил на вопрос или может кто-то видел его "гигант всех лутов" и даст ссылку на тему?
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Re: Loot for DRW Shard

Post by Kynep »

МОгильщик...
Такую тему откопал! :shock:

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