Программирование это не искусство, авангардизм не может улучшить результат.
Код должен быть кратким, понятным (всем кто его понять способен).
От этого можно отступать ради оптимизации, если она того стоит.
Вот и все правила.
Чтобы было более понятно, напишем что ни будь маленькое и показательное.
Раз тема про лут напишем лут. А то некоторые уже логику считают, лишней.
Пропагандируя втыкание кусков из одних скриптов в другие.
Code:
sub mLoot()
UO.Set("grabdelay", 100)
UO.MoveItem("<0x0EED", 0, "backpack")
UO.FindType(-1, -1, "lastcontainer")
while UO.FindCount()
i = UO.Hex2Int(UO.GetGraphic("finditem"))
if 7982 < i < 8044 || 3846 < i < 3853 || 3960 < i < 3984 || i == 5360 || 3856 < i < 3885 || 5136 < i < 5141 || 7026 < i< 7035 then
UO.MoveItem("finditem", 0, "backpack")
endif
UO.Ignore("finditem")
UO.FindType(-1, -1, "lastcontainer")
wend
UO.IgnoreReset()
UO.Set("grabdelay", 0)
endsub
Всего 15 строк, только не сильно понятно…. Зато кратко.
Улучшим читаемость, в ущерб оптимальности…
Code:
sub Loot()
UO.Set("grabdelay", 100)
UO.MoveItem("<0x0EED", 0, "backpack")
UO.FindType(-1, -1, "lastcontainer")
while UO.FindCount()
i = UO.Hex2Int(UO.GetGraphic("finditem"))
; | scroll | Potions | Reagents | Deeds
if 7982 < i < 8044 || 3846 < i < 3853 || 3960 < i < 3984 || i == 5360 then
UO.MoveItem("finditem", 0, "backpack")
endif
; | Gems | Plate | Shields
if 3856 < i < 3885 || 5136 < i < 5141 || 7026 < i< 7035 then
UO.MoveItem("finditem", 0, "backpack")
endif
UO.Ignore("finditem")
UO.FindType(-1, -1, "lastcontainer")
wend
UO.IgnoreReset()
UO.Set("grabdelay", 0)
endsub
UO.FindType() является медленной и прожорливой командой, запускать ее 200 раз ламерство. Массив на 200 итемов занимает 201 строку, столько букв писать, должно быть, лень и с читабельностью понты.
Никогда не используйте куски чужих скриптов, только алгоритм. Лень сама активизирует мозг(если он есть).