Всех приветствую. Помогите люди добрые. Имеется скрипт на лут, работает отлично, но необходимо что бы лутал в мешок. Мешок я добавлю сам в обьекты или укажу в самом скрипте.
Code:
### #######
######################################## Лут ###################################
### #######
# Чтобы скрипт работал как задумывалось необходимо произвести настройки:
# 1) Файл скрипта должен называться autoload.sc и находится в папке с инжектом (либо с клиентом - зависит от версии инжекта).
# 2) В MAIN окне инжекта должна быть включена галочка "Autostart" (в середине окна)
# 3) В паке игрока должны быть ножницы и кинжал. После резки тела в руки берется оружие которое было на момент запуска скрипта.
# 4) Запускать REZ - для порезки или Loot для лута тела.
# 5) Если лут прервать принудительно то нужно запускать Lootrunning() для обновления константы. Иначе резать будет, лутать - нет.
# 6) В планируемых доработках - сделать чтобы стакующиеся предметы складывались в кучу, не стакующиеся в рядок.
#
# Описание процедур скрипта:
# autostart() - автозапуск. Задает константу для защиты от повторного срабатывания скрипта на лут и добавляет фильтр фастлута.
# REZ() - резка трупа кинжалом, после резки автоматически запускает лут.
# Lootrunning() - назначает константу для защиты от повторного срабатывания скрипта на лут. Можно запускать руками при необходимости.
# Loot() - основной скрипт лута. В нем используются все последующие функции.
# findcorps() - определяет что будем лутить - скелет или труп животного.
# IgnorHair(corpse) - игнорирует волосы в трупе игрока (баг на 55-56 сферах)
# Ignor(corpse) - игнорирует реагенты в трупах (пример как добавлять не нужные для лута вещи)
# GrabLoot(corps) - функция лута первоочередных предметов.
# Scissors() - порезка кожи в рюкзаке персонажа. Срабатывает когда игрок в тени.
# PUTLoot2(Type1, Type2, Color, SourceContainer, TargetContainer,X,Y,Z) - процедура перемещения массива объектов.
# PUTLoot(Type, Color, SourceContainer, TargetContainer,X,Y,Z) - процедура перемещения одного объекта.
# DeleteJournal(msg) - очищает журнал.
# checklag() - чеклаг (динамическая пауза).
#
### Контейнеры ###
VAR Meshok = '0x0E76'; тип мешка
VAR Deed = '0x14EF'; свиток ресурсов
VAR body = '0x2006'; труп (не разделанный)
##################
#
### Инструменты ###
VAR Dagger = '0x13F6'; кинжал (резка трупа)
VAR Scissors = '0x0F9E'; ножницы
##################
#
### Сырье ###
VAR hides = '0x1078'; шкура животного
VAR leather = '0x1067'; готовая кожа
##################
#
### Вспомогательные константы ###
VAR lootwait = 100; пауза
VAR printcolour = '1069'; цвет сообщений
##################
#
### Переменные ###
VAR MeshSer, d, LastTimer, timemove
VAR Type, TType, Type1, Type2, Color, SourceContainer, TargetContainer
VAR corpse, a, hair, reg, colhides
##################
#
Sub autostart()
Lootrunning()
UO.filterspeech('clear')
UO.filterspeech('add','[Surprize ! Fast loot detected!]')
UO.filterspeech('on')
end sub
#
Sub REZ()
UO.Set('quiet','1')
uo.set('finddistance', '3')
;uo.ignorereset()
uo.findtype(body, -1, 'ground')
if uo.findcount() and Uo.GetDistance( 'finditem' ) < 3 then
var x = uo.GetGraphic(uo.ObjAtLayer('Rhand'))
var y = uo.GetGraphic(uo.ObjAtLayer('Lhand'))
uo.warmode(0)
wait(500)
UO.SetArm("1")#
corpse = uo.getSerial("finditem")
UO.WaitTargetObject(corpse)
UO.UseType(dagger)
wait(500)
UO.Arm("1") #
UO.UnSetArm() #
uo.Equipt('Rhand',x)
uo.Equipt('Lhand',y)
if x <> uo.GetGraphic(uo.ObjAtLayer('Rhand')) or y <> uo.GetGraphic(uo.ObjAtLayer('Lhand')) then
UO.UseType(x)
wait(100)
UO.UseType(y)
wait(100)
endif
Loot()
uo.warmode(1)
endif
UO.Set('quiet','0')
end sub
#
Sub Lootrunning()
uo.setGlobal('running',1)
end sub
#
Sub Loot()
;uo.ignorereset()
DIM G[7]
G[1] = '0x0EED'; деньги
G[2] = '0x0E76'; мешки
G[3] = '0x09AA'; пандоры
G[4] = '0x1BFB'; болты
G[5] = '0x0F3F'; стрелы
G[6] = '0x1087'; серьги
G[7] = '0x108A'; кольца
UO.Set('quiet','1')
if val(uo.getGlobal('running'))==1 then
uo.setGlobal('running',2)
uo.set('finddistance', '3')
corpse = '0x00000000'
corpse = findcorps()
if corpse<>'0xffffffff' and corpse<>'0x00000000' then
IF uo.findcount() and Uo.GetDistance( 'finditem' ) <= 4 then
uo.deletejournal()
uo.useobject(corpse)
wait(300)
if NOT uo.injournal("You can't do it here") then
GrabLoot(corpse)
IgnorHair(corpse)
;Ignor(corpse)
PUTLoot('-1', '-1', corpse, 'backpack','','','')
endif
UO.Hide(corpse)
UO.Ignore(corpse)
endif
else
for a=1 to 7
PUTLoot(G[a], '-1', 'ground', 'backpack',30,150,0)
next
endif
Scissors()
uo.setGlobal('running',1)
endif
UO.Set('quiet','0')
end sub
#
Sub findcorps()
DIM body[2]
body[1] = '0x0ECA';
body[2] = '0x2006';
for a = 1 to 2
UO.FindType(body[a], -1, 'ground')
if UO.FindCount() then
return uo.getSerial('finditem')
endif
next
end sub
#
Sub IgnorHair(corpse)
for hair = 0x203B to 0x204D
UO.FindType(hair, -1, corpse)
if UO.FindCount() then
UO.Ignore('finditem')
endif
next
end sub
#
Sub Ignor(corpse)
for reg = 0xF7A to 0xF7B
UO.FindType(reg, -1, corpse)
if UO.FindCount() then
UO.Ignore('finditem')
endif
next
for reg = 0xF84 to 0xF86
UO.FindType(reg, -1, corpse)
if UO.FindCount() then
UO.Ignore('finditem')
endif
next
for reg = 0xF88 to 0xF88
UO.FindType(reg, -1, corpse)
if UO.FindCount() then
UO.Ignore('finditem')
endif
next
for reg = 0xF8C to 0xF8D
UO.FindType(reg, -1, corpse)
if UO.FindCount() then
UO.Ignore('finditem')
endif
next
end sub
#
Sub GrabLoot(corps)
var pack = 'backpack'
;uo.charprint(printcolour,'лутим типы')
PUTLoot('0x1869', '0', corps, pack,'','',''); ЭНЧАНТ шарики
PUTLoot('0x09AA', '0x0834', corps, pack,'','',''); Пандора 10 Лв.
PUTLoot('0x09AA', '0x0833', corps, pack,'','',''); Пандора 9 Лв.
PUTLoot('0x09AA', '0x0832', corps, pack,'','',''); Пандора 8 Лв.
PUTLoot('0x09AA', '0x08EA', corps, pack,'','',''); Пандора 7 Лв.
PUTLoot('0x09AA', '0x08C1', corps, pack,'','',''); Пандора 6 Лв.
PUTLoot('0x13B1', '0x099F', corps, pack,'150','170','0'); Exc.Rangers Bow
PUTLoot('0x13B1', '0x05D8', corps, pack,'150','160','0'); Rangers bow
PUTLoot('0x0A3E', '0', corps, pack,'160','170','0'); шкатулка
PUTLoot(-1, '0x086C', corps, pack,'','',''); хантер вещи
PUTLoot(-1, '0x099F', corps, pack,'','',''); ренжер вещи
PUTLoot(-1, '0x0358', corps, pack,'','',''); рат вещи
PUTLoot2(0x1869, 0x1870, '-1', corps, pack,'','',''); шарики
PUTLoot('0x0EED', '0', corps, pack,'','',''); золото
PUTLoot2(0x1E88, 0x1E89, '-1', corps, pack,'','',''); мясо драконов и демонов
PUTLoot2(0x1E8E, 0x1E8F, '-1', corps, pack,'','',''); жаренное мясо драконов и демонов
PUTLoot('0x09B5', '0', corps, pack,'','',''); змеиные яйца
PUTLoot('0x0EE3', '0', corps, pack,'','',''); паутинка
PUTLoot2(0x1085, 0x108b, '-1', corps, pack,'','',''); бижутерия
PUTLoot2(0x1f05, 0x1f0a, '-1', corps, pack,'','',''); бижутерия
PUTLoot2(0xf0f, 0xf30, '-1', corps, pack,'','',''); камни
PUTLoot2(0x1f5d, 0x1f6c, '0', corps, pack,'','',''); scroll 7-8
PUTLoot(-1, '0x0991', corps, pack,'','',''); руины
PUTLoot('0x9aa', '-1', corps, pack,10,170,0); пандоры
PUTLoot(-1, '0x0482', corps, pack,'','',''); серебрянные вещи
end sub
#
Sub Scissors()
If UO.Hidden() and UO.Count ( Scissors ) > 0 Then
UO.FindType(hides, -1, 'backpack')
While UO.FindCount()
colhides = uo.getColor('finditem')
UO.WaitTargetObject('finditem')
uo.usetype( Scissors )
wait(300)
UO.FindType(leather, colhides, 'backpack')
if UO.FindCount() then
UO.MoveItem('finditem', 0, 'backpack', 30, 150, 0)
wait(300)
endif
UO.FindType(hides, -1, 'backpack')
wend
EndIf
end sub
#
Sub PUTLoot2(Type1, Type2, Color, SourceContainer, TargetContainer,X,Y,Z)
;uo.ignorereset()
for TType = Type1 to Type2
PUTLoot(TType, Color, SourceContainer, TargetContainer,X,Y,Z)
next
end sub
#
Sub PUTLoot(Type, Color, SourceContainer, TargetContainer,X,Y,Z)
;uo.ignorereset()
UO.FindType(Type, Color, SourceContainer)
while UO.FindCount()
if (TargetContainer=='ground') then
uo.MoveItem('finditem',0,TargetContainer,uo.GetX('self'),uo.GetY('self'),uo.GetZ('self'))
else
timemove=UO.Timer()
while UO.ContainerOf( UO.GetSerial('finditem') )==SourceContainer && timemove+20>UO.Timer()
uo.MoveItem('finditem',0,TargetContainer,X,Y,Z)
wait(lootwait)
wend
end if
UO.FindType(Type, Color, SourceContainer)
wend
end sub
Так же по возможности\желанию было бы хорошо сюда прикрутить выбор прятаться или не прятаться при луте. Но это уже второстепенное. Главное что бы лутал в мешок.
Вот в начале скрипта есть переменная VAR Meshok = '0x0E76'; но в скрипте она как я понял не используется. Я не очень опытен и боюсь накосячить. Помогите пажалуйста. Заранее благодарю.