Yoko

All sides of Injection
It is currently 2024-03-28 13:37:57

All times are UTC+02:00




Post new topic  Reply to topic  [ 203 posts ]  Go to page Previous 14 5 6 7 811 Next
Author Message
 Post subject:
PostPosted: 2006-04-22 21:04:42 
Offline
User avatar

Joined: 2006-03-24 02:40:24
Posts: 32
Location: Odintsovo, Russia
Edred wrote:
ЗЫ: посмотрю, может и сделаю настраиваемым в какую руку брать кирку или топор...


В принципе это не критично, это можно и так поменять, единственное - это конечно не все понимают где... А так я думаю можно одним объявлением переменной обойтись, например uo.SetGlobal('hand', 'Rhand') и наоборот либо Rhand = 1 (Rhand) Rhand = 0 (LHand) по if потом сделать, но думаю первый вариант намного проще, если это в инишку не выносить, хотя все равно проще :)

_________________
Qui quaerit, reperit


Top
   
 Post subject:
PostPosted: 2006-04-22 21:06:57 
Offline
User avatar

Joined: 2006-03-24 02:40:24
Posts: 32
Location: Odintsovo, Russia
Grin wrote:
Если память не изменять то инжект не чувствителен к регистре ...


Не знаю точно, но у меня почму-то заработало :-O
Может и не чувствителен.

_________________
Qui quaerit, reperit


Top
   
 Post subject:
PostPosted: 2006-04-23 19:00:59 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Итак, счас начну засовывать новую версию скрипта. Внимание! версия не тестирована (мне просто негде это сделать), потестируйте, обязательно напишите о результатах.

1. Файлы readme, Resource_Map.dat, Resource_Static.dat, ссылка на файл стартового меню (setup4ML) берутся со второй страницы этой темы.

2. Файл mine&lamb.hst кинут туда же, к нему есть дополнение:
Code:
  v.3.31b - Универсализация скрипта (под разные шарды). Окончательно выносим в
            ини-файл все настройки. Включаем введенный ранее флаг UseExeInterface,
            если он установлен в 0 - меню не запускается, установки просто читаются
            из ини-файла. Задействуем функцию IniF2Global, которую написал ранее, но
            все было лень на нее переделывать скрипт. Вынес в ини-файл все сообщения.
            Теперь в ини-файле можно задать руку (левую или правую), в которую будет
            браться кирка и топор (пока одинаковая рука, если у вас на шарде кирка и топор
            берутся в разные руки - пишите или правьте скрипт сами). Еще чуть-чуть
            мелких правочек (заметил огрешности по дороге).
            Количество руд и видов логов пока фиксированное, но это влияет только
            на счетчики руд и логов для отчета. Если у вас на шарде видов логов и руды
            больше чем 9 и 21 соответственно, то все лишнее будет считаться в счетчиках
            как unknown. Внимание! Ини-файл изменился! Используйте только новый!


Так что я посщу только ини-файл и текст скрипта. Еще одно:

Многие строки скрипта имеют очень большую длину. При копировании текста из окна они разобъются и вам придется их снова склеивать, что не вполне очевидно для новичков. Поэтому копируйте текст скрипта через цитирование, то есть нажмите на кнопку "quote", в окне выделите текст скрипта и скиньте его в текстовый файл. В этом случае длинные строки не будут разбиваться и полностью сохранится структура скрипта. Не забудьте после этого отменить ответ на пост :)


Last edited by Edred on 2006-04-23 19:04:04, edited 1 time in total.

Top
   
 Post subject:
PostPosted: 2006-04-23 19:01:55 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
mine&lumb.ini

Code:
; ===============================================
; Ини-файл для скрипта Mining & Lamber, ver 3.31b
; (c) Edred, 2004-2006
; ===============================================
;
; Примечания:
; 1. В данной версии зафиксировано количество видов руд и логов.
; Если у вас меньшее кол-во - остальные параметры забейте чем-то,
; чего быть не может, но не удаляйте! Если больше - значит у вас
; "лишние" виды будут считаться в статистике только в общих счетчиках.
; (кроме статистики это ни на что не влияет). В дальнейших версиях
; я введу переменное количество руд и логов. Счас просто нет времени.
; 2. С отсутствующими другими параметрами поступать также - заполнять
; несуществующей информацией, но не удалять.
; 3. Секции, отмеченные как "заполняемые скриптом", править категорически
; не рекомендуется.
;

[StartUp]
; Использовать меню на дельфи или нет
UseExeInterface=1

[Setup]
; Эти установки автоматически перезаписываются из главного меню
; при старте скрипта. Если UseExeInterface=0 - то меню не запускается,
; параметры читаются отсюда.
ModeOfScript=4
NumberPatch=8
CheckHide=0
CheckInviz=0
CheckChatFood=0
CheckLog=0
CheckBankDis=0

[OtherConfig]
; уровень злобности для деления чаров на ПК и АПК
MinNotoriety=4
; минимальное расстояние, на которое позволяем приблизиться АПК
MinEnemyDist=5
; минимальное расстояние, на которое позволяем приблизиться ПК
MinEnemyDist2=7
; максимальное расстояние, на котором враг ищется
MaxEnemyDist=10
; максимальный поднимаемый чаром вес -50 стоунов
MaxWeightOfChar=580
; рука, в которую берется кирка и топор (Lhand или Rhand)
; ВНИМАНИЕ! В этой версии - одинаковый параметр и для кирки, и для топора!
; если на вашем шарде кирку и топор берут в разные руки - правьте скрипт,
; но там очень много где стоит проверка через слой.
PickAxeHand=Lhand

[CommonTypes]
; Настройка основных типов объектов на вашем шарде
;
; Кирка (тип) Используется только этот!
Pickaxe=0x0E85
; Топор (тип) Используется только этот!
Hatchet=0x0F43
; кливер (тип)
Cleaver=0x0EC2
; Ножницы
Scissor=0x0F9E
; оружие (тип)
MyFork=0x1406
; щит (тип)
MyShield=0x1B76
; Тип бинтов
Bandag=0x0E21
; Тип кровавых бинтов
BlBandag=0x0E20
; боттлы с инвизками
Inviz=0x0F09
; боттлы с греатер хилами
GreatHeal=0x0F0C
; Сериал ГМ-ской плитки для килла элемов и духов деревьев.
; Вам врядли потребуется :)
Plitka=0x402A6B2E
; Тип меда
Med=0x09EC
; деньги
Money=0x0EED
; cut up leather
Cutleather=0x1067
; leather
Leather2=0x1078
; cintrines
Cintrines=0x0F23
; Black Pearl
Regs0=0x0F7A
; Bood Moss
Regs1=0x0F7B
; Mandrake Root
Regs2=0x0F86
; garlic
Regs3=0x0F84
; Ginseng
Regs4=0x0F85
; Night Shade
Regs5=0x0F88
; Sulphorous Ash
Regs6=0x0F8C
; Spiders Silk
Regs7=0x0F8D
; пустые боттлы
EmptBottle=0x0F0E
; Тип ПК-чаров (в принципе, любых чаров)
PKchar1=0x0190
PKchar2=0x0191

[CommonMessage]
; Физл каста
Fizzl=fizzles
; Сообщение о атаке чара медведем
Bear=bear is attacking you*
; Сообщение о появлении трупа медведя
Beardead=Body of a
; Сообщение о невозможности открыть труп 1
NeMogu1=You can't reach that.
; Сообщение о невозможности открыть труп 2
NeMogu2=You can't reach this.
;
; МИНИНГ
;
; Кончилась руда
Mining1=There is no ore here to mine
; Не могу вскопать эту точку
Mining2=Это не копается.
; Руда упала в пак
Mining3=in your pack.
; Физл копки
Mining4=You fail to find any useable ore
; Далеко
Mining5=Далеко. Не дотянуться.
; Не могу вскопать эту точку 2
Mining6=Try mining in rock
; Не могу вскопать эту точку 3
Mining7=Хм... Не вижу.. Где копать то?.
; Кирка гикнулась
Mining8=is destroyed*
; Похоже, элем выпал
Mining9=ore at your feet.
;
; ЛАМБЕР
;
; Логи кончились
Lamber1=There are no logs here to chop
; не можем
Lamber2=You can't use
; вырубили логи
Lamber3=in your pack.
; физл
Lamber4=You fail to produce
; стоим далеко
Lamber5=You are too far away
; не проходит удар
Lamber6=It appears immune to your blow
; не можем увидеть
Lamber7=You can't see that
; топор развалился
Lamber8=is destroyed*
; вырубили духа дерева
Lamber9=Try to kill my spirit at first!
;
; КОРМЛЕНИЕ
;
EatLevels1=Шнурки, если их подольше поварить, приобретают мягкость спагетти.
EatLevels2=А в тюрьме сейчас ужин - макароны!
EatLevels3=Пряник бы мне... Или плюшку.
EatLevels4=Главное - не делать из еды культа.
EatLevels5=Уф... Две лишних дырки на поясе - не порок. Поваляться бы чуток.

[MineParam]
; Тип руды
OreTyp1=0x19B9
; Тип руды - 3 шт.
OreTyp2=0x19B8
; Тип руды - 2 шт.
OreTyp3=0x19BA
; Тип руды - 1 шт.
OreTyp4=0x19B7
;
Clr1=0x0000
Nam1=Iron ore
Clr2=0x0455
Nam2=Damned ore
Clr3=0x0493
Nam3=Kreonit ore
Clr4=0x0B77
Nam4=Copper ore
Clr5=0x0488
Nam5=Bronze ore
Clr6=0x07D1
Nam6=Walean ore
Clr7=0x08A5
Nam7=Golden ore
Clr8=0x05B2
Nam8=Silver ore
Clr9=0x0B5B
Nam9=Oceanite ore
Clr10=0x0B78
Nam10=Blood Rock ore
Clr11=0x0B5A
Nam11=Sacred ore
Clr12=0x04E8
Nam12=Brilliant ore
Clr13=0x04F7
Nam13=Order ore
Clr14=0x0B56
Nam14=Chaos ore
Clr15=0x04F6
Nam15=Neutral ore
Clr16=0x0BA2
Nam16=Stardust ore
Clr17=0x0BAF
Nam17=Citadel ore
Clr18=0x0032
Nam18=Plaster ore
Clr19=0x0031
Nam19=Sandstone ore
Clr20=0x08FD
Nam20=Stone ore
Clr21=0x0481
Nam21=Marble ore

[LamberParam]
; логи
LogsTyp1=0x1BDD
;
Clr1=0x0000
Nam1=logs
Clr2=0x0BB3
Nam2=ancient logs
Clr3=0x0BB4
Nam3=sturdy logs
Clr4=0x04E8
Nam4=steel logs
Clr5=0x048B
Nam5=neitral logs
Clr6=0x04E7
Nam6=order logs
Clr7=0x0486
Nam7=chaos logs
Clr8=0x0BB5
Nam8=titanic logs
Clr9=0x062A
Nam9=elvin logs

[ElemsParam]
; Тип элема
OreElemental=0x000E
; Тип трупа элема
ElemCorpse=0x2006
; Тип духа дерева
TreeSpirit=0x003A
;
; Если у вас есть еще какие элементали - они будут выводиться
; как Unknown type в лог работы. Ничего страшного.
;
ElemClr1=0x04F7
ElemNam1=Order Elemental
ElemClr2=0x0B56
ElemNam2=Chaos Elemental
ElemClr3=0x04F6
ElemNam3=Neutral Elemental
ElemClr4=0x0BA2
ElemNam4=Stardust Elemental
ElemClr5=0x0BAF
ElemNam5=Citadel Elemental
ElemClr6=0x0BB5
ElemNam6=Titanic Spirit

[ExcludeChar]
; Этих чаров поиск ПК будет просто игнорировать (пока максимум 5 шт)
ExcludeChar0=0x0024DB12
ExcludeChar1=0x0007B263
ExcludeChar2=0x004CFBD6
ExcludeChar3=0x0030C38F
ExcludeChar4=0x003E8536

[Runbooks]
; на закладке Objects необходимо создать объекты с такими именами
; одна рунбука - 8 рун для мининга по скалам + 8 рун для мининга по полу
; вторая рунбука - 8 рун для ламбера по лесу + 8 рун резерва (пока не задействованы)
;
; Имя рунбуки для реколла на базу
RunbookBase=CommonRunbook
; Имена рунбук для реколла на маршруты
RunbookTile=MineRunbook
RunbookTile2=LambRunbook
; Номер руны для реколла на базу через реги
BaseRune=20
; Номер руны для реколла на базу через заряд рунбуки
; ПОКА НЕ ИСПОЛЬЗУЕТСЯ!
BaseRuneScroll=19
; Номер кнопки пополнения зарядов рунбуки
; ПОКА НЕ ИСПОЛЬЗУЕТСЯ!
RechargeNumber=0

[MiningWalls]
; Номера рун в рунбуке для реколлов на маршруты
; копка по краям скал
Wall1Rune=36
Wall2Rune=38
Wall3Rune=40
Wall4Rune=42
Wall5Rune=44
Wall6Rune=46
Wall7Rune=48
Wall8Rune=50

[MiningFloor]
; Номера рун в рунбуке для реколлов на маршруты
; копка по полу пещеры
Wall1Rune=36
Wall2Rune=38
Wall3Rune=40
Wall4Rune=42
Wall5Rune=44
Wall6Rune=46
Wall7Rune=48
Wall8Rune=50

[LamberForest]
; Номера рун в рунбуке для реколлов на маршруты
; ламбер в лесу
Wall1Rune=20
Wall2Rune=22
Wall3Rune=24
Wall4Rune=26
Wall5Rune=28
Wall6Rune=30
Wall7Rune=32
Wall8Rune=34

[DischargeSer]
; Сериалы контейнеров для разгрузки и добора необходимого
; при первых трех режимах работы
;
; Координаты точки из которой будем разгружаться.
; Если включен режим разгрузки в банк - это координаты
; вывески дома
Sund_Tile_X=2472
Sund_Tile_Y=55
; Сериал сундука, куда складывать руду или логи
; если включен режим разгрузки в банк - это сериал банкбокса
Sund1_Ser=0x403CAA91
; Сериал сундука, откуда добирать реги и прочее
; если включен режим разгрузки в банк - игнорируется
Sund2_Ser=0x40361048
; ящики в этом сундуке:
; regs
BoxRegs=0x40520E8C
; bandages, blood bandages, bottles
BoxBand=0x40520ED6
; pickaxes, hatchets, cleavers, scissors
BoxPick=0x40520F33
; weapons, armors, robes
BoxArms=0x40520F7C

[DischargeVIP]
; Переменные этого раздела задействованы в случае
; ВИП-режимов
;
; Флаг куда разгружаться: 0 - банк по команде 'bank'
; 1 - банк с вывески дома
; Режимы работают только в случае включения соотв.
; флага в меню, иначе флаг игнорируется
PlaceOfBank=1
HomeTablSerial=0x4033E959
; Координаты для клика по вывеске дома и по кнопке банк в ней
LClickX1=563
LClickY1=226
LClickX2=262
LClickY2=390
; Сериалы и координаты контейнеров для разгрузки и добора
; необходимого при мининге.
; Если PlaceOfBank == 0 - место вызова банка и сериал его,
; 1 - место откуда кликаем по вывеске и сериал банка.
MinContSerial=0x4041B46B
MinContX=2472
MinContY=55
; Необходимость использования маршрута для подхода к сундуку/банку
MinNeedInPatch=0
; Путь подхода к банку в мининге
MinPatchToBank=
;
; Аналогично - для ламбера
;
LambContSerial=0x405B9440
LambContX=2895
LambContY=670
;
LambNeedInPatch=1
LambPatchToBank=2906 610 2906 659


[Patches]
; ЗАПОЛНЯЕТСЯ СКРИПТОМ!
; маршруты. Записываются функцией разметки маршрутов. Маршрут -
; перечисление координат точек через пробел.
walls1=2273 406 2273 407 2273 408 2273 409 2273 410 2273 411 2273 412 2273 413 2273 414 2273 415 2273 416 2273 417 2273 418 2273 419 2273 420 2272 421 2272 422 2271 423 2271 424 2271 425 2271 426 2271 427 2271 428 2270 429 2269 430 2268 431 2267 432 2266 433 2265 434 2264 435 2264 436 2263 437 2262 438 2262 439 2261 440 2261 441 2261 442 2261 443 2261 444 2261 445 2261 446 2261 447 2261 448 2260 449 2259 450 2258 451 2257 452 2256 453
walls2=2072 370 2072 369 2073 368 2074 367 2075 366 2075 365 2076 364 2077 364 2077 363 2077 362 2078 361 2079 360 2079 359 2080 359 2081 359 2082 358 2083 357 2083 356 2083 355 2083 354 2084 353 2085 353 2086 353 2087 353 2088 352 2089 352 2089 351 2089 350 2090 349 2091 348 2091 347 2091 346 2092 346 2093 346 2094 346 2094 345 2094 344 2095 343 2096 343 2097 343 2098 342 2099 341 2100 341 2101 341 2102 340 2103 339 2103 338 2104 338 2105 338 2106 338 2107 338 2108 337 2109 337 2110 337 2111 336 2111 337 2112 337 2113 337 2114 336 2115 335 2116 334 2117 333 2118 333 2119 333 2119 332 2120 331 2121 331 2122 331 2122 330 2123 329 2124 328 2125 327
walls3=1794 771 1794 772 1794 773 1795 773 1795 774 1795 775 1796 775 1796 776 1796 777 1797 777 1797 778 1797 779 1797 780 1798 780 1798 781 1798 782 1798 783 1798 784 1798 785 1799 786 1800 787 1799 787 1799 788 1799 789 1800 790 1800 791 1799 792 1800 792 1801 793 1800 794 1801 794 1802 794 1802 795 1802 796 1803 796 1803 797 1803 798 1803 799 1803 800 1803 801 1803 802 1803 803 1803 804 1804 804 1804 805 1804 806 1805 807 1805 808 1806 809 1806 810 1807 811 1808 811 1809 811 1810 811 1811 810 1812 810 1813 810 1814 810 1814 809 1815 809 1816 809 1817 809 1818 809 1819 809 1820 809 1821 808 1822 808
walls4=2072 1222 2073 1222 2074 1222 2075 1222 2075 1223 2076 1223 2077 1223 2077 1224 2078 1225 2079 1225 2079 1226 2080 1226 2081 1226 2082 1226 2083 1226 2084 1226 2085 1226 2086 1226 2086 1225 2086 1224 2087 1224 2088 1224 2089 1224 2090 1224 2091 1224 2091 1225 2093 1226 2094 1226 2095 1226 2096 1226 2097 1226 2098 1226 2099 1226 2099 1227 2100 1227 2101 1227 2102 1227 2103 1227 2104 1227 2104 1228 2105 1228 2106 1228 2107 1228 2108 1228 2109 1228 2110 1228 2111 1228 2112 1229 2113 1229 2114 1230 2115 1231 2115 1232 2116 1233
walls5=2049 125 2051 125 2052 125 2053 126 2054 127 2055 127 2056 128 2057 128 2057 129 2057 130 2057 131 2057 132 2058 133 2059 134 2059 135 2059 136 2059 137 2059 138 2058 139 2058 140 2058 141 2058 142 2059 143 2060 144 2060 145 2059 146 2059 147 2059 148 2060 148 2061 149 2062 149 2063 150 2063 151 2064 151 2065 152 2065 153 2065 154 2065 155 2065 156 2065 157 2065 158 2065 159 2065 160 2065 161 2065 162 2065 163 2065 164 2064 165 2064 166 2064 167 2064 168 2063 169 2063 172 2063 173 2063 174 2063 175 2064 175 2065 176 2065 177 2065 178 2065 179 2065 180 2066 180 2066 181 2066 182 2067 182 2068 183 2068 184 2068 185 2069 185 2069 186 2070 187 2070 188 2070 189 2071 190 2071 191 2071 192
walls6=2255 414 2255 415 2255 416 2254 416 2254 417 2254 418 2254 419 2254 420 2254 421 2254 422 2254 423 2253 423 2253 424 2253 425 2252 425 2252 426 2252 427 2251 427 2251 428 2251 429 2251 430 2251 431 2251 432 2250 432 2250 433 2250 434 2250 435 2249 435 2249 436 2249 437 2249 438 2249 439 2248 439 2248 440 2247 440 2246 440 2246 441 2246 442 2246 443 2246 444 2246 445 2245 445 2244 445 2244 446 2244 447 2243 447 2243 448 2242 449 2241 450 2240 450 2240 451 2239 451 2239 452 2238 452 2237 453 2236 454 2235 455 2234 455 2233 455 2232 456 2231 456 2231 457 2231 458 2230 459 2229 459 2229 460 2228 461 2227 462 2226 462 2226 463 2226 464 2225 464 2225 465 2225 466 2224 466 2224 467 2224 468 2224 469 2224 470 2223 470 2223 471 2222 471 2222 472 2221 472 2221 473 2221 474 2220 474 2219 474 2219 475 2218 476 2217 476 2216 476 2216 477 2215 477 2215 478 2214 478 2214 479
walls7=2116 269 2116 270 2116 271 2116 272 2117 272 2117 273 2117 274 2117 275 2118 276 2118 277 2118 278 2118 279 2118 280 2118 281 2118 282 2118 286 2118 287 2118 288 2118 289 2118 290 2118 291 2118 292 2117 293 2117 294 2116 295 2116 296 2117 296 2117 297 2118 298 2119 299 2119 300 2119 301 2119 302 2120 302 2121 302 2121 303 2121 304 2122 304 2123 305 2124 306 2125 307 2126 308 2126 309 2125 310 2124 311 2124 312 2124 313 2124 314 2125 314 2125 315 2125 316 2124 317 2125 318 2126 319 2126 320 2126 321 2126 322 2126 323 2126 324
walls8=1945 73 1946 74 1947 75 1947 76 1948 77 1949 78 1949 79 1949 80 1949 81 1949 82 1949 83 1949 84 1949 85 1950 86 1950 87 1951 88 1951 89 1951 90 1951 91 1951 92 1951 93 1951 94 1951 95 1951 96 1951 97 1952 98 1953 99 1954 100 1955 101 1955 102 1955 103 1956 103 1957 103 1958 104 1959 105 1959 106 1960 106 1961 106 1962 105 1963 105 1963 106 1964 106 1965 106 1966 106 1967 107 1968 107 1969 107 1970 108 1971 109 1972 110 1973 110 1974 110
floor1=
floor2=
floor3=
floor4=
floor5=
floor6=
floor7=
floor8=
trees1=
trees2=
trees3=
trees4=
trees5=
trees6=
trees7=
trees8=
vipmi1=2472 55 2471 56 2470 57 2469 58 2468 58 2467 58 2466 57 2465 56 2464 56 2463 56 2462 56 2461 57 2460 58 2459 59 2459 58 2459 57 2459 56 2459 55 2458 55 2457 55 2456 55 2455 55 2454 55 2453 55 2453 54 2453 53 2453 52 2454 51 2455 50 2455 49 2455 48 2456 48 2457 48 2458 48 2459 48 2460 48 2461 49 2462 50 2462 51 2462 52 2462 53 2463 53 2464 53 2465 53 2466 53 2467 54 2468 55 2469 55 2470 55 2471 55 2472 55
vipmi2=2472 55 2473 55 2474 55 2475 55 2476 55 2477 54 2478 53 2479 52 2480 51 2481 51 2482 51 2483 51 2484 51 2485 51 2486 50 2487 49 2487 48 2487 47 2486 46 2485 45 2484 45 2483 45 2482 45 2482 44 2482 43 2481 43 2480 43 2479 43 2479 45 2479 46 2479 47 2479 48 2478 49 2477 50 2476 51 2475 52 2474 53 2472 55
vipla1=2908 577 2909 576 2910 575 2911 574 2912 573 2911 572 2910 572 2909 571 2908 570 2907 570 2906 570 2905 570 2904 569 2903 568 2902 567 2901 566 2901 563 2901 562 2902 561 2903 560 2904 559 2905 558 2905 557 2905 556 2906 555 2906 554 2906 553 2906 552 2906 551 2906 550 2906 549 2906 548 2907 548 2907 547 2907 546 2908 545 2909 544 2909 543 2910 542 2909 541 2909 540 2908 539 2907 538 2906 537 2905 536 2904 535 2904 534 2904 533 2903 533 2903 532 2902 531 2901 530 2900 530 2899 530 2898 530 2897 530 2896 530 2895 530 2894 530 2893 530 2892 530 2891 530 2890 530 2889 531 2888 530 2887 529 2886 528 2885 527 2884 526 2883 525 2882 524 2881 523 2881 522 2881 521 2881 520 2880 520 2879 520 2878 520 2878 519 2878 518 2878 514 2878 513 2878 512 2877 512 2876 512 2875 512 2874 513 2873 514 2872 515 2871 516 2870 515 2869 514 2869 513 2869 512 2869 511 2869 510 2869 509 2869 508 2868 508 2867 508 2866 508 2866 509 2866 510 2865 511 2864 511 2863 511 2862 511 2862 512 2862 513 2862 514 2862 515 2862 516 2862 517 2862 518 2862 519 2862 520 2862 521 2862 522 2862 523 2863 523 2864 523 2865 523 2866 523 2866 524 2866 525 2866 526 2865 527 2864 528 2864 529 2864 530 2863 531 2862 532 2861 533 2860 534 2860 535 2860 536 2860 537 2860 538 2859 539 2858 540 2857 541 2856 542 2857 543 2858 544 2859 543 2860 543 2861 542 2862 541 2862 542 2862 543 2863 544 2864 545 2865 546 2865 547 2865 548 2865 549 2865 551
; 2865 555 2865 556 2865 557 2865 558 2866 558 2867 558 2868 558 2869 558 2870 559 2871 560 2872 561 2873 562 2872 563 2872 564 2872 565 2872 566 2872 567 2872 568 2872 569 2872 570 2872 571 2872 572 2872 573 2872 574
vipla2=2916 593 2917 592 2918 591 2920 591 2920 590 2921 590 2922 590 2923 590 2924 589 2925 588 2925 587 2925 586 2925 585 2925 584 2926 583 2927 582 2928 581 2929 580 2930 580 2931 580 2932 580 2933 580 2934 581 2935 582 2936 583 2937 583 2938 583 2939 583 2940 584 2941 585 2942 586 2943 586 2944 586 2945 585 2945 584 2945 583 2945 582 2945 581 2944 580 2943 579 2942 578 2942 577 2942 576 2942 575 2941 574 2941 573 2941 572 2941 571 2941 570 2941 569 2941 568 2940 567 2939 566 2938 565 2938 564 2938 563 2938 562 2938 561 2938 560 2939 559 2940 558 2941 557 2941 556 2942 555 2943 554 2944 553 2945 552 2946 552 2947 552 2948 552 2949 552 2950 551 2951 550 2951 549 2950 548 2949 547 2949 546 2949 545 2948 544 2947 544 2947 543 2946 542 2945 541 2945 540 2945 539 2945 538 2945 537 2945 536 2945 535 2945 534 2946 533 2946 532 2947 531 2948 530 2951 530 2952 530 2952 529 2952 528 2952 527 2951 526 2950 525 2949 524 2949 523 2949 522 2949 521 2949 520 2948 519 2947 518 2946 519 2945 520 2944 520 2943 521 2942 522 2941 523 2940 524 2939 525 2938 526 2937 527 2936 528 2935 529 2935 530 2935 531 2935 532 2935 533 2935 534 2935 535 2935 536 2934 537 2933 538 2932 537 2931 536 2930 535 2929 534 2928 534 2927 534 2926 534 2925 533 2924 532 2923 533 2922 534 2921 534 2920 535 2920 536 2920 537 2920 538 2921 539 2922 540 2922 541 2923 541 2924 542 2923 543 2923 544 2922 545 2921 546 2920 547 2920 548 2920 549 2920 550 2919 551 2918 551 2917 552 2917 553 2917 554 2917 555 2917 556 2916 556 2915 556 2914 556 2913 556 2912 556 2911 556 2910 556 2910 557 2909 558 2908 558 2907 558 2906 559 2905 560 2906 561 2906 562 2908 563 2908 562 2909 562 2910 562 2911 563 2912 564 2912 565 2912 566 2912 567 2913 568 2914 569 2914 570 2914 571
; 2913 572 2911 574 2910 575 2909 576 2908 577

[LogCount]
; ЗАПОЛНЯЕТСЯ СКРИПТОМ!
; Счетчики логов. Автоматически обнуляются при разрушении инструмента
; (итоговые значения попадают в лог).
TreeLogs=0
AncientLogs=0
SturdyLogs=0
SteelLogs=0
NeitralLogs=0
ChaosLogs=0
OrderLogs=0
TitanicLogs=0
ElvinLogs=0

[OreCount]
; ЗАПОЛНЯЕТСЯ СКРИПТОМ!
; Счетчики руды. Автоматически обнуляются при разрушении инструмента
; (итоговые значения попадают в лог).
Iron=0
Damned=0
Kreonit=0
Copper=0
Bronze=0
Walean=0
Golden=0
Silver=0
Oceanite=0
BloodRock=0
Sacred=0
Brilliant=0
Order=0
Chaos=0
Neutral=0
Stardust=0
Citadel=0
Plaster=0
Sandstone=0
Stone=0
Marble=0

;=================================================================
; НИЖЕ СЛЕДУЮТ РАЗДЕЛЫ  С АВТОМАТИЧЕСКИМ ЗАПОЛНЕНИЕМ И ИЗМЕНЕНИЕМ
; НЕ ИЗМЕНЯЙТЕ В НИХ НИЧЕГО! ЭТО МОЖЕТ ПРИВЕСТИ К НЕПРЕДСКАЗУЕМЫМ
; ПОСЛЕДСТВИЯМ!!!                        [начиная с версии 3.40b]
;=================================================================
;
; Cтруктура следующих разделов: это вычисленные (на автомате)
; точки маршрутов.
; SetUpThisPatch - если 0 - маршрут еще не обсчитан
; RazmerThisPatch - количество точек копки в обсчитанном маршруте
; PointPatch-001 - таких строк будет ровно столько сколько в пре-
; дыдущем счетчике. Первая пара чисел - координаты чара, последующие -
; уникальные координаты копки/рубки, в которых можно производить добычу

[walls1]
SetUpThisPatch=0
RazmerThisPatch=0

[walls2]
SetUpThisPatch=0
RazmerThisPatch=0

[walls3]
SetUpThisPatch=0
RazmerThisPatch=0

[walls4]
SetUpThisPatch=0
RazmerThisPatch=0

[walls5]
SetUpThisPatch=0
RazmerThisPatch=0

[walls6]
SetUpThisPatch=0
RazmerThisPatch=0

[walls7]
SetUpThisPatch=0
RazmerThisPatch=0

[walls8]
SetUpThisPatch=0
RazmerThisPatch=0

[floor1]
SetUpThisPatch=0
RazmerThisPatch=0

[floor2]
SetUpThisPatch=0
RazmerThisPatch=0

[floor3]
SetUpThisPatch=0
RazmerThisPatch=0

[floor4]
SetUpThisPatch=0
RazmerThisPatch=0

[floor5]
SetUpThisPatch=0
RazmerThisPatch=0

[floor6]
SetUpThisPatch=0
RazmerThisPatch=0

[floor7]
SetUpThisPatch=0
RazmerThisPatch=0

[floor8]
SetUpThisPatch=0
RazmerThisPatch=0

[trees1]
SetUpThisPatch=0
RazmerThisPatch=0

[trees2]
SetUpThisPatch=0
RazmerThisPatch=0

[trees3]
SetUpThisPatch=0
RazmerThisPatch=0

[trees4]
SetUpThisPatch=0
RazmerThisPatch=0

[trees5]
SetUpThisPatch=0
RazmerThisPatch=0

[trees6]
SetUpThisPatch=0
RazmerThisPatch=0

[trees7]
SetUpThisPatch=0
RazmerThisPatch=0

[trees8]
SetUpThisPatch=0
RazmerThisPatch=0

[vipmi1]
SetUpThisPatch=0
RazmerThisPatch=0

[vipmi2]
SetUpThisPatch=0
RazmerThisPatch=0

[vipla1]
SetUpThisPatch=0
RazmerThisPatch=0

[vipla2]
SetUpThisPatch=0
RazmerThisPatch=0


Top
   
 Post subject:
PostPosted: 2006-04-23 19:08:01 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Mine&Lamb331b.sc

Code:
#=======================================================================#
# MINING & LUMBERJACKING.                                               #
#=======================================================================#
#   v.3.31b       (с) Edred                                             #
#=======================================================================#
# Скрипт требует подключения ASM-3 версии не ниже 503.01PE или 505.11SE #
#=======================================================================#
;
; Многофункциональный скрипт на мининг и ламбер. Выбор режимов работы
; и настройка осуществляется через меню, написанное на Delphi.
; Все настройки вынесены в ini-файл. Подробное описание принципов работы
; смотрите в файле mine&lumb.hst.
;
#========================================#
#  СТАРТОВЫЙ СКРИПТ                      #
#========================================#
;
sub main()
   ; 1. Устанавливаем флаг готовности ответа параметров в 'Wait' (регистри)
   ; 2. Запрашиваем через менюшку (Дельфя) параметры запуска скрипта
   ; 3. Ожидаем пока флаг готовности не будет 'Yes' или 'No'. Если 'No' -
   ;    выход из скрипта.
   ; 4. Считываем из файла mine&lamb.ini параметры запуска скрипта
   ; 5. Устанавливаем все необходимые глобальные переменные
   ; 6. Запускаем необходимый скрипт
   ;
   VAR i
   If UO.asmGetIniVar( 'mine&lumb.ini', 'StartUp', 'UseExeInterface' ) == '1' Then
      UO.asmSetRegistryKey('MINE_LUMB');
      UO.asmSetRegistryVar('Start', 'Wait');
      UO.Launch( 'setup4ml.exe' );
      repeat
         wait(100)
      until UO.asmGetRegistryVar('Start') == 'Yes' OR UO.asmGetRegistryVar('Start') == 'No'
      If UO.asmGetRegistryVar('Start') == 'No' Then
         UO.Print( 'Script terminated' )
         return
      Endif
   Endif
   ; Режим работы:
   If IniF2Global( 'Setup', 'ModeOfScript', 0 ) == 0 Then
      UO.Print( 'Error of reading ini-file! Script terminated' )
      return
   Endif
   ; Номер маршрута:
   If IniF2Global( 'Setup', 'NumberPatch', 0 ) == 0 Then
      UO.Print( 'Error of reading ini-file! Script terminated' )
      return
   Endif
   ; Флаг использования хайда
   If IniF2Global( 'Setup', 'CheckHide', 0 ) == 0 Then
      UO.Print( 'Error of reading ini-file! Script terminated' )
      return
   Endif
   ; Флаг использования инвизов
   If IniF2Global( 'Setup', 'CheckInviz', 0 ) == 0 Then
      UO.Print( 'Error of reading ini-file! Script terminated' )
      return
   Endif
   ; Флаг контроля сытости чара
   If IniF2Global( 'Setup', 'CheckChatFood', 0 ) == 0 Then
      UO.Print( 'Error of reading ini-file! Script terminated' )
      return
   Endif
   ; Флаг использования разгрузки в банк
   If IniF2Global( 'Setup', 'CheckBankDis', 0 ) == 0 Then
      UO.Print( 'Error of reading ini-file! Script terminated' )
      return
   Endif
   ; Флаг включения подробного лога
   If IniF2Global( 'Setup', 'CheckLog', 0 ) == 0 Then
      UO.Print( 'Error of reading ini-file! Script terminated' )
      return
   Endif
   ;
   i = IniGlobal()
   If i == 0 Then
      return
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) == '4' Then
      UO.Exec( 'exec MarkMassive' )
   Else
      UO.Exec( 'exec WorksStart' )
   Endif
endsub
;
Sub IniGlobal()
   ; Все необходимые настройки производятся в файле mine&lumb.ini
   ; Не изменяйте в этом скрипте ничего если не понимаете, что делаете!
   VAR tmpstr
   #========================= Настройки рунбуки ==================================
   #==============================================================================
   If IniF2Global( 'Runbooks', 'RunbookBase', 0 ) == 0 OR IniF2Global( 'Runbooks', 'RunbookTile', 0 ) == 0 OR IniF2Global( 'Runbooks', 'RunbookTile2', 0 ) == 0 OR IniF2Global( 'Runbooks', 'BaseRune', 0 ) == 0 OR IniF2Global( 'Runbooks', 'BaseRuneScroll', 0 ) == 0 OR IniF2Global( 'Runbooks', 'RechargeNumber', 0 ) == 0 Then
      UO.Print( 'Runbooks settings not found! Check your ini-file! Script Terminated' )
      return 0
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) == '1' Then
      tmpstr = 'MiningWalls'
   Else
      If UO.GetGlobal( 'ModeOfScript' ) == '2' Then
         tmpstr = 'MiningFloor'
      Else
         If UO.GetGlobal( 'ModeOfScript' ) == '3' Then
            tmpstr = 'LamberForest'
         Else
            tmpstr = ''
         Endif
      Endif
   Endif
   If tmpstr <> '' Then
      If IniF2Global( tmpstr, 'Wall1Rune', 0 ) == 0 OR IniF2Global( tmpstr, 'Wall2Rune', 0 ) == 0 OR IniF2Global( tmpstr, 'Wall3Rune', 0 ) == 0 OR IniF2Global( tmpstr, 'Wall4Rune', 0 ) == 0 OR IniF2Global( tmpstr, 'Wall5Rune', 0 ) == 0 OR IniF2Global( tmpstr, 'Wall6Rune', 0 ) == 0 OR IniF2Global( tmpstr, 'Wall7Rune', 0 ) == 0 OR IniF2Global( tmpstr, 'Wall8Rune', 0 ) == 0 Then
         UO.Print( 'Runes settings not found! Check your ini-file! Script Terminated' )
         return 0
      Endif
   Endif
   #========================= Настройки сундуков =================================
   #==============================================================================
   If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
      ; Не ВИП режимы
      If IniF2Global( 'DischargeSer', 'Sund_Tile_X', 0 ) == 0 OR IniF2Global( 'DischargeSer', 'Sund_Tile_Y', 0 ) == 0 OR IniF2Global( 'DischargeSer', 'Sund1_Ser', 0 ) == 0 OR IniF2Global( 'DischargeSer', 'Sund2_Ser', 0 ) == 0 OR IniF2Global( 'DischargeSer', 'BoxRegs', 0 ) == 0 OR IniF2Global( 'DischargeSer', 'BoxBand', 0 ) == 0 OR IniF2Global( 'DischargeSer', 'BoxPick', 0 ) == 0 OR IniF2Global( 'DischargeSer', 'BoxArms', 0 ) == 0 Then
         UO.Print( 'Containers settings not found! Check your ini-file! Script Terminated' )
         return 0
      Endif
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) == '5' Then
      ; ВИП-шахта
      UO.SetGlobal( 'Sund1_Ser', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'MinContSerial' ) )
      UO.SetGlobal( 'Sund_Tile_X', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'MinContX' ) )
      UO.SetGlobal( 'Sund_Tile_Y', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'MinContY' ) )
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) == '6' Then
      ; ВИП-лес
      UO.SetGlobal( 'Sund1_Ser', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LambContSerial' ) )
      UO.SetGlobal( 'Sund_Tile_X', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LambContX' ) )
      UO.SetGlobal( 'Sund_Tile_Y', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LambContY' ) )
   Endif
   If UO.SetGlobal( 'Sund_Tile_X' ) == '' OR UO.SetGlobal( 'Sund_Tile_X' ) == '' OR UO.SetGlobal( 'Sund1_Ser' ) == '' Then
      UO.Print( 'Containers settings not found! Check your ini-file! Script Terminated' )
      return 0
   Endif
   #========================= Настройки ходилки ==================================
   #==============================================================================
   If UO.GetGlobal( 'CheckHide' ) == '1' Then
      ; будем ходить в хайде
      UO.SetGlobal( 'MovDelay', '1000' )      ; Пауза между шагами
   Else
      UO.SetGlobal( 'MovDelay', '200' )
   Endif
   UO.SetGlobal( 'MovNumber', '1' )         ; Количество шагов при смене
                                    ; дислокации
   UO.SetGlobal( 'KoefEp', '0.172' )         ; Значение ширины угла хождения при
                                    ; определении направления.
                                    ; Если на пути встречаются сложные
                                    ; и широкие препятствия - увеличить.
                                    ; 0.172 - сбаланчированный.
   #======================= Настройки контроля ПК ================================
   #==============================================================================
   If IniF2Global( 'OtherConfig', 'MinNotoriety', 0 ) == 0 OR IniF2Global( 'OtherConfig', 'MinEnemyDist', 0 ) == 0 OR IniF2Global( 'OtherConfig', 'MinEnemyDist2', 0 ) == 0 OR IniF2Global( 'OtherConfig', 'MaxEnemyDist', 0 ) == 0 Then
      UO.Print( 'Control PK settings not found! Check your ini-file! Script Terminated' )
      return 0
   Endif
   #======================= Настройки инструментов ===============================
   #==============================================================================
   ; Внимание! при крафте топоров и кирок для запаса на складе проверяйте их
   ; типы и запасайте только перечисленные:
   If IniF2Global( 'CommonTypes', 'Pickaxe', 0 ) == 0 OR IniF2Global( 'CommonTypes', 'Hatchet', 0 ) == 0 OR IniF2Global( 'CommonTypes', 'Cleaver', 0 ) == 0 OR IniF2Global( 'CommonTypes', 'Bandag', 0 ) == 0 OR IniF2Global( 'CommonTypes', 'BlBandag', 0 ) == 0 OR IniF2Global( 'CommonTypes', 'Inviz', 0  ) == 0 OR IniF2Global( 'CommonTypes', 'GreatHeal', 0 ) == 0 OR IniF2Global( 'CommonTypes', 'MyFork', 0 ) == 0 OR IniF2Global( 'CommonTypes', 'MyShield', 0) ) == 0 Then
      UO.Print( 'Type of tools settings not found! Check your ini-file! Script Terminated' )
      return 0
   Endif
   #======================= Настройки счетчиков ==================================
   #==============================================================================
   ; НИЧЕГО НЕ ИЗМЕНЯЙТЕ В ЭТОЙ СЕКЦИИ!!! ВСЕ СУММЫ В ФАЙЛЕ MINE&LUMB.INI
   ; счетчики логов
   IniF2Global( 'LogCount', 'TreeLogs', 1 )
   IniF2Global( 'LogCount', 'AncientLogs', 1 )
   IniF2Global( 'LogCount', 'SturdyLogs', 1 )
   IniF2Global( 'LogCount', 'SteelLogs', 1 )
   IniF2Global( 'LogCount', 'NeitralLogs', 1 )
   IniF2Global( 'LogCount', 'ChaosLogs', 1 )
   IniF2Global( 'LogCount', 'OrderLogs', 1 )
   IniF2Global( 'LogCount', 'TitanicLogs', 1 )
   IniF2Global( 'LogCount', 'ElvinLogs', 1 )
   ; счетчики руды
   IniF2Global( 'OreCount', 'Iron', 1 )
   IniF2Global( 'OreCount', 'Damned', 1 )
   IniF2Global( 'OreCount', 'Kreonit', 1 )
   IniF2Global( 'OreCount', 'Copper', 1 )
   IniF2Global( 'OreCount', 'Bronze', 1 )
   IniF2Global( 'OreCount', 'Walean', 1 )
   IniF2Global( 'OreCount', 'Golden', 1 )
   IniF2Global( 'OreCount', 'Silver', 1 )
   IniF2Global( 'OreCount', 'Oceanite', 1 )
   IniF2Global( 'OreCount', 'BloodRock', 1 )
   IniF2Global( 'OreCount', 'Sacred', 1 )
   IniF2Global( 'OreCount', 'Brilliant', 1 )
   IniF2Global( 'OreCount', 'Order', 1 )
   IniF2Global( 'OreCount', 'Chaos', 1 )
   IniF2Global( 'OreCount', 'Neutral', 1 )
   IniF2Global( 'OreCount', 'Stardust', 1 )
   IniF2Global( 'OreCount', 'Citadel', 1 )
   IniF2Global( 'OreCount', 'Plaster', 1 )
   IniF2Global( 'OreCount', 'Sandstone', 1 )
   IniF2Global( 'OreCount', 'Stone', 1 )
   IniF2Global( 'OreCount', 'Marble', 1 )
   ; общий счетчик
   UO.SetGlobal( 'Itog', '0' )
   ; другие счетчики
   UO.SetGlobal( 'ElemCount', '0' )
   UO.SetGlobal( 'PKCount', '0' )
   #===================== Настройки Spirit Speak =================================
   #==============================================================================
   UO.SetGlobal( 'SpiritUP', '0' )
   If UO.GetGlobal( 'SpiritUP' ) == '1' Then
      UO.SetGlobal('SpiritTime',str(UO.Timer()))
   Endif
   #======================= Настройки процесса ===================================
   #==============================================================================
   If IniF2Global( 'OtherConfig', 'MaxWeightOfChar', 0 ) == 0 Then
      UO.Print( 'Max Weight setting not found! Check your ini-file! Script Terminated' )
      return 0
   Endif
   UO.SetGlobal('TimeProcess',str(UO.Timer()))         ; Начало отсчета скрипта
   UO.SetGlobal( 'FlagStatus', 'go' )               ; Флаг состояния чара, 'go' - копаем,
                                          ; 'stop' - перевес или конец массива,
                                          ; 'elem' - сражаемся с элемом,
                                          ; 'pk' - драпаем от ПК
   UO.SetGlobal( 'LogFile', 'mine&lumb.log' )         ; файл лога
   UO.SetGlobal( 'CountLineTextW', '0' )            ; счетчик строк в текстовом окне
   return 1
endsub
;
Sub IniF2Global( razd, nam, flag )
   ; читаем из ини файла из раздела razd поле nam и помещаем в глобальную переменную с
   ; именем nam. Если поле отсутствует то: если flag == 0 - возвращаем 0, если
   ; flag == 1 - присваиваем глобальной переменной '0')
   VAR tmp1
   tmp1 = UO.asmGetIniVar( 'mine&lumb.ini', razd, nam )
   If tmp1 <> '' Then
      UO.SetGlobal( nam, tmp1 )
      return 1
   Else
      If flag == 0 Then
         return 0
      Endif
      If flag == 1 Then
         UO.SetGlobal( nam, '0' )
      Endif
   Endif
   return 1
endsub
;
#========================================#
#  ГОЛОВНЫЕ ПРОЦЕДУРЫ РЕЖИМОВ РАБОТЫ     #
#========================================#
;
Sub WorksStart()
   UO.Set("norbcheck", "1")
   UO.Set("norbcalc", "1")
   If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
      UO.Exec('set finddistance ' + UO.GetGlobal('MaxEnemyDist') )
   Else
      UO.Exec('set finddistance 14' )
   Endif
   UO.Exec( 'set distance 3' )
   UO.Msg( '.rusfontoff' )
   WriteLog( ' ', 1 )
   VAR schet = val( UO.GetGlobal( 'NumberPatch' ) )
   CheckInstrQuality()
   #==============================================================================
   ; начинаем цикл выбора операций
   repeat
      If UO.GetGlobal( 'CheckHide' ) == '1' Then
         GoHide()
      Endif
      DropWeapon()
      If schet == 1 Then
         UO.TextClear()
      Endif
      WriteLog( 'Go to massive number '  + str( schet ), 0 )
      schet = SetMassive( schet )
      If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '3' Then
         UO.Exec( 'exec ControlElem' )               ; Контроль и килл элемов
         UO.Exec( 'exec ControlPK' )                  ; Контроль и спасение от ПК
      Endif
      UO.Exec( 'exec WorkAroundPatch' )               ; Работа по массиву координат
      repeat
         wait(300)
      until UO.GetGlobal( 'FlagStatus' ) == 'stop' OR UO.GetGlobal( 'FlagStatus' ) == 'pk' OR UO.GetGlobal( 'FlagStatus' ) == 'exit'
      If UO.GetGlobal( 'FlagStatus' ) == 'stop' Then
         ; Перевес или конец массива
         wait(1000)
         UO.Exec( 'terminate PermResend' )         ; На всяк случай
         If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '3' Then
            UO.Exec( 'terminate ControlElem' )
            UO.Exec( 'terminate ControlPK' )
         Endif
      Endif
      If UO.GetGlobal( 'FlagStatus' ) == 'pk' Then
         ; Пришел ПК
         UO.Exec( 'terminate PermResend' )         ;На всяк случай
         If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '3' Then
            UO.Exec( 'terminate ControlElem' )
            UO.Exec( 'terminate ControlPK' )
         Endif
         UO.Exec( 'terminate WorkAroundPatch' )
         UO.Exec( 'exec RunOut' )                  ; Убегание от ПК
      Endif
      If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
         Recalling( UO.GetGlobal( 'RunbookBase' ), UO.GetGlobal( 'BaseRune' ) )      ; реколлимся для разгрузки
         WriteLog( 'Go to discharge', 0 )
         Razgruzka( schet )
         If UO.GetGlobal( 'FlagStatus' ) <> 'exit' Then
            UO.SetGlobal( 'FlagStatus', 'go' )
            MultiRecall( schet )
         Endif
      Else
         RazgruzkaVIP( schet )
         If UO.GetGlobal( 'FlagStatus' ) <> 'exit' Then
            UO.SetGlobal( 'FlagStatus', 'go' )
         Endif
      Endif
   until UO.GetGlobal( 'FlagStatus' ) == 'exit'
endsub
;
Sub MarkMassive()
; Процедура разметки маршрутов. Работает просто: в цикле с паузой в 50 мс
; проверяются координаты чара, сверяются с предыдущими, если отличаются -
; объединяются через пробел и присоединяются к строке с маршрутом.
; Окончание разметки массива - подтверждение прерывания в висящем в фоне
; запросе. После окончания разметки маршрута скрипт записывает получившийся
; маршрут в соответствующую строку файла mine&lumb.ini в папке инжекта.
;
   VAR CurX, CurY, LastX, LastY, ToDo, typmas = 'error', Flag = 0, MyPatch = ''
   UO.SetGlobal( 'EndOfPatch', '' )
   ToDo = UO.asmInputList("Какой тип массива?","'Копка стен скал';'Копка пола пещер';'Рубка леса';'Тест мининга';'Тест ламбера'")
   If ToDo == 1 Then
      typmas = 'walls'
   Endif
   If ToDo == 2 Then
      typmas = 'floor'
   Endif
   If ToDo == 3 Then
      typmas = 'trees'
   Endif
   If ToDo == 4 Then
      typmas = 'vipmi'
   Endif
   If ToDo == 5 Then
      typmas = 'vipla'
   Endif
   CurX = UO.GetX()
   CurY = UO.GetY()
   MyPatch = MyPatch + str(CurX) + ' ' + str(CurY)
   LastX = CurX
   LastY = CurY
   UO.Exec( 'exec PromptForEnd' )
   repeat
      wait(50)
      CurX = UO.GetX()
      CurY = UO.GetY()
      If CurX <> LastX OR CurY <> LastY Then
         MyPatch = MyPatch + ' ' + str(CurX) + ' ' + str(CurY)
         LastX = CurX
         LastY = CurY
      Endif
   until UO.GetGlobal( 'EndOfPatch' ) <> ''
   If UO.GetGlobal( 'EndOfPatch' ) == '0' Then
      UO.Print( 'Mark of patch canceled. Script terminated' )
      return
   Endif
   If UO.GetGlobal( 'EndOfPatch' ) == '1' Then
      UO.Print( 'Mark of patch finished. Please wait for saving information...' )
      Flag = UO.asmSetIniVar( 'mine&lumb.ini', 'Patches', typmas + UO.GetGlobal( 'NumberPatch' ), MyPatch )
      If Flag == 0 Then
         UO.Print( 'Error of writing patch! Script terminated' )
         return
      Endif
      UO.Print( 'Script finished' )
      return
   Endif
   UO.Print( 'Mark of patch canceled. Script terminated' )
endsub
;
Sub PromptForEnd()
   VAR ToDo = 0
   ToDo = UO.asmInputList("Для окончания разметки нажмите Enter","'Закончить разметку маршрута мининга/ламбера'")
   If ToDo == 1 Then
      UO.SetGlobal( 'EndOfPatch', '1' )
      return
   Else
      UO.SetGlobal( 'EndOfPatch', '0' )
   Endif
endsub
;
Sub WorkAroundPatch()
;
; WorkAroundPatch() - движение по массиву и обкопка/обрубка всего что можно вокруг.
;
   VAR MyX, MyY, NStep = 1, ret, MyPatch
   DIM usep[1000]
   MyPatch = UO.asmGetIniVar( 'mine&lumb.ini', 'Patches', UO.GetGlobal( 'NumberPatch' ) )
   If MyPatch == '' Then
      UO.Print( 'Patch ' + UO.GetGlobal( 'NumberPatch' ) + ' not found! Script terminated!' )
      WriteLog( 'Patch ' + UO.GetGlobal( 'NumberPatch' ) + ' not found! Script terminated!', 0 )
      UO.SetGlobal( 'FlagStatus', 'exit' )
      wait(500)
      UO.Exec( 'terminate all' )
      return
   Else
      MyPatch = MyPatch + ' end end '
   Endif
   UO.SetGlobal( 'RazmerUseP', '0' )
   repeat
      If val( UO.GetGlobal( 'RazmerUseP' ) ) > 900 Then
         MoveStek( usep )                        ; сдвиг стека на 100 ячеек вниз
      Endif
      If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '5' Then
         If UO.GetGlobal( 'CheckChatFood' ) == '1' Then
            CheckCharEat( 4 )
         Endif
         ret = MiningAround( usep )
      Endif
      If UO.GetGlobal( 'ModeOfScript' ) == '3' OR UO.GetGlobal( 'ModeOfScript' ) == '6' Then
         If UO.GetGlobal( 'CheckChatFood' ) == '1' Then
            CheckCharEat( 2 )
         Endif
         ret = LamberAround( usep )
      Endif
      If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
         WaitElem()
      Endif
      If ret == 1 Then
         UO.SetGlobal( 'FlagStatus', 'stop' )
         return
      Endif
      If ret == 9 Then
         return
      Endif
      MyX = GetWord( MyPatch, NStep )
      MyY = GetWord( MyPatch, NStep + 1 )
      If MyX <> 'end' AND MyY <> 'end' Then
         If UO.GetGlobal( 'CheckLog' ) == '1' Then
            WriteLog( 'Go to ' + str( ( Nstep + 3 ) / 2 ) +' [' + MyX + ',' + MyY + ']', 0 )
         Endif
         UO.Print( 'Go to ' + str( ( Nstep + 3 ) / 2 ) +' [' + MyX + ',' + MyY + ']' )
         If UO.GetGlobal( 'CheckHide' ) == '1' Then
            GoHide()
         Endif
         GoToTile( val(MyX), val(MyY), 0, True )
         If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
            WaitElem()
         Endif
      Endif
      NStep = NStep + 2
   until MyX == 'end' OR MyY == 'end'
   UO.SetGlobal( 'FlagStatus', 'stop' )   
   UO.Print( 'End of massive' )
endsub
;
#========================================#
#  ПРОЦЕДУРЫ ДЛЯ МИНИНГА И ЛАМБЕРА       #
#========================================#
;
Sub MiningAround( usep )
; MiningAround() - вскапываем вокруг чара
;
   VAR t, k, CanMine, cx, cy, tmpx, tmpy, pointX, pointY, flag
   VAR MaxTime = 600                     ; измеряется в 1/10 сек.
   VAR ms1 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining1' )
   VAR ms2 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining2' )
   VAR ms3 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining3' )
   VAR ms4 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining4' )
   VAR ms5 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining5' )
   VAR ms6 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining6' )
   VAR ms7 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining7' )
   VAR ms8 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining8' )
   VAR ms9 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining9' )
   UO.asmTLMapOpen('Resource_Map.dat')         ; Загрузим таблицу типов карты
   UO.asmTLStaticOpen('Resource_Static.dat')   ; Загрузим таблицу типов статики
   VAR i, strpoint
   VAR razmer = val( UO.GetGlobal( 'RazmerUseP' ) )
   VAR MaxVes = val( UO.GetGlobal( 'MaxWeightOfChar' ) )
   ;
   If UO.GetGlobal( 'CheckHide' ) == '1' Then
      GoHide()
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
      WaitElem()
   Endif
   cx = UO.GetX()
   cy = UO.GetY()
   for tmpx = -2 to 2
      for tmpy = -2 to 2
         k = 0
         pointX = cx + tmpx
         pointY = cy + tmpy
         strpoint = str(pointX) + ' ' + str(pointY)
         flag = 0
         If razmer == 0 Then
            usep[razmer] = strpoint
            razmer = razmer + 1
         Else
            For i=0 To razmer
               If usep[i] == strpoint Then
                  flag = 1
               Endif
            Next
            If flag == 0 Then
               usep[razmer] = strpoint
               razmer = razmer + 1
               If razmer > 900 Then
                  MoveStek( usep )                  ; сдвиг стека на 100 ячеек вниз
               Endif
            Endif
         Endif
         If flag == 0 Then
            repeat
               DeleteJournal( ms1 )
               DeleteJournal( ms2 )
               DeleteJournal( ms3 )
               DeleteJournal( ms4 )
               DeleteJournal( ms5 )
               DeleteJournal( ms6 )
               DeleteJournal( ms7 )
               DeleteJournal( ms8 )
               DeleteJournal( ms9 )
               t = UO.Timer() + MaxTime
               k = k + 1
               flag = 1
               wait(300)
               GetInstrum('pickaxe')
               If UO.Waiting() Then
                  UO.CancelTarget()
               Endif
               CheckLag()
               CanMine = UO.asmWaitTargetMapTile( 'rock', pointX, PointY, 0 )
               wait(100)
               If CanMine Then
                  UO.UseObject(UO.ObjAtLayer(UO.asmGetIniVar('mine&lumb.ini','OtherConfig','PickAxeHand')))
               Else
                  If UO.Waiting() Then
                     UO.CancelTarget()
                  Endif
                  CanMine = UO.asmWaitTargetStaticTile( 'rock', PointX, PointY, 0 )
                  wait(100)
                  If CanMine Then
                     UO.UseObject(UO.ObjAtLayer(UO.asmGetIniVar('mine&lumb.ini','OtherConfig','PickAxeHand')))
                  Else
                     flag = 0
                  Endif
               EndIf
               If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
                  WaitElem()
               Endif
               If flag == 1 Then
                  repeat
                     wait(100)
                  until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR UO.InJournal(ms8) OR UO.InJournal(ms9) OR (t < UO.Timer())
                  If UO.GetGlobal( 'CheckLog' ) == '1' Then
                     WriteLog( 'Копаем: ' + str(cx+tmpx) + ' ' + str(cy+tmpy), 2 )
                  Endif
               Endif
               If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
                  WaitElem()
               Else
                  If UO.InJournal( ms9 ) Then
                     ; вывалился элементаль...
                     TestKillElem( 'elem' )
                  Endif
               Endif
               If UO.Weight > MaxVes Then
                  ; Вес превышен!
                  If UO.GetGlobal( 'CheckLog' ) == '1' Then
                     WriteLog( 'My weight is ' + str( UO.Weight ), 0 )
                  Endif
                  UO.SetGlobal( 'RazmerUseP', str( razmer ) )
                  return 1
               Endif
               If UO.InJournal( ms8 ) Then
                  ; кирка накрылась!
                  If UO.GetGlobal( 'CheckLog' ) == '1' Then
                     If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
                        Razgruzka( 1 )
                     Else
                        RazgruzkaVIP( 1 )
                     Endif
                     WriteLog( 'pickaxe', 5 )
                     UO.SetGlobal( 'FlagStatus', 'exit' )
                     return 9
                  Endif
                  UO.SetGlobal( 'RazmerUseP', str( razmer ) )
                  return 1
               Endif
               If UO.GetGlobal( 'CheckHide' ) == '1' Then
                  GoHide()
               Endif
            until NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR (k > 10)
         Endif
      next
   next
   UO.SetGlobal( 'RazmerUseP', str( razmer ) )
   return 0
endsub
;
Sub LamberAround( usep )
;
; Рубим вокруг чара
;
   VAR t, k, CanMine, cx, cy, tmpx, tmpy, pointX, pointY, flag
   VAR MaxTime = 600                        ; измеряется в 1/10 сек.
   VAR ms1 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber1' )
   VAR ms2 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber2' )
   VAR ms3 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber3' )
   VAR ms4 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber4' )
   VAR ms5 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber5' )
   VAR ms6 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber6' )
   VAR ms7 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber7' )
   VAR ms8 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber8' )
   VAR ms9 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber9' )
;   UO.asmTLMapOpen('Resource_Map.dat')         ; Загрузим таблицу типов карты
   UO.asmTLStaticOpen('Resource_Static.dat')   ; Загрузим таблицу типов статики
   VAR i, strpoint
   VAR razmer = val( UO.GetGlobal( 'RazmerUseP' ) )
   VAR MaxVes = val( UO.GetGlobal( 'MaxWeightOfChar' ) )
   ;
   If UO.GetGlobal( 'CheckHide' ) == '1' Then
      GoHide()
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
      WaitElem()
   Endif
   cx = UO.GetX()
   cy = UO.GetY()
   for tmpx = -3 to 3
      for tmpy = -3 to 3
         k = 0
         pointX = cx + tmpx
         pointY = cy + tmpy
         strpoint = str(pointX) + ' ' + str(pointY)
         flag = 0
         If razmer == 0 Then
            usep[razmer] = strpoint
            razmer = razmer + 1
         Else
            For i=0 To razmer
               If usep[i] == strpoint Then
                  flag = 1
               Endif
            Next
            If flag == 0 Then
               usep[razmer] = strpoint
               razmer = razmer + 1
               If razmer > 900 Then
                  MoveStek( usep )                  ; сдвиг стека на 100 ячеек вниз
               Endif
            Endif
         Endif
         If flag == 0 Then
            repeat
               DeleteJournal( ms1 )
               DeleteJournal( ms2 )
               DeleteJournal( ms3 )
               DeleteJournal( ms4 )
               DeleteJournal( ms5 )
               DeleteJournal( ms6 )
               DeleteJournal( ms7 )
               DeleteJournal( ms8 )
               DeleteJournal( ms9 )
               t = UO.Timer() + MaxTime
               k = k + 1
               flag = 1
               wait(300)
               GetInstrum('hatchet')
               CanMine = UO.asmWaitTargetStaticTile( 'tree', PointX, PointY, 0 )
               If CanMine Then
                  wait(100)
                  UO.UseObject(UO.ObjAtLayer(UO.asmGetIniVar('mine&lumb.ini','OtherConfig','PickAxeHand')))
                  If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
                     WaitElem()
                  Endif
                  repeat
                     wait(100)
                  until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR UO.InJournal(ms8) OR UO.InJournal(ms9) OR (t < UO.Timer())
                  If UO.GetGlobal( 'CheckLog' ) == '1' Then
                     WriteLog( 'Рубим: ' + str(cx+tmpx) + ' ' + str(cy+tmpy), 2 )
                  Endif
               Endif
               If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
                  WaitElem()
               Endif
               If UO.InJournal( ms9 ) Then
                  ; дух дерева!
                  TestKillElem( 'spipit' )
               Endif
               If UO.Weight > MaxVes Then
                  ; Вес превышен!
                  If UO.GetGlobal( 'CheckLog' ) == '1' Then
                     WriteLog( 'My weight is ' + str( UO.Weight ), 0 )
                  Endif
;                  If UO.GetGlobal( 'ModeOfScript' ) == '6' Then
;                     DropSomeLogs()
;                  Else
                     UO.SetGlobal( 'RazmerUseP', str( razmer ) )
                     return 1
;                  Endif
               Endif
               If UO.InJournal( ms8 ) Then
                  ; топор накрылся!
                  If UO.GetGlobal( 'CheckLog' ) == '1' Then
                     WriteLog( 'hatchet', 5 )
                  Endif
                  UO.SetGlobal( 'RazmerUseP', str( razmer ) )
                  return 1
               Endif
               If UO.GetGlobal( 'CheckHide' ) == '1' Then
                  GoHide()
               Endif
            until NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms3) OR (k > 10)
         Endif
      next
   next
   UO.SetGlobal( 'RazmerUseP', str( razmer ) )
   return 0
endsub
;
#================================================#
#  ПРОЦЕДУРЫ ОТСЛЕЖИВАНИЯ ПК, ЕЛЕМОВ И МЕДВЕДЕЙ  #
#================================================#
;
; Пока оставлены старые процедуры, а вообще надо сделать просто сканирование
; вокруг чара объектов любого типа и проверять эти типы через файл типов врагов.
; Тем самым мы сможем легко определить элемов, медведей, ПК и прочих. Правда,
; для этого надо как следует разобраться в сканировании вокруг, чтобы не искать деревья
; и прочую статику.
;
Sub ControlElem()
; Идея - сканируем вокруг на предмет появления элема. Появился -
; останавливаем копку / рубку (на паузу, прерывать не надо), вооружаемся,
; переходим в вар и киллим элема, подхиливаясь.
; После килла элема вскрываем его ножом, лутим, разоружаемся и копаем
; дальше.
;
   VAR MyFork = UO.GetGlobal( 'MyFork' )
   VAR MyShield = UO.GetGlobal( 'MyShield' )
   VAR Elem = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'OreElemental' )
   VAR ElemCorpse = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemCorpse' )
   VAR ElemSer, CorpseSer, ElemName, CorpseNam
   VAR bear = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Bear' )
   VAR beardead = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Beardead' )
   VAR bearflag = 0
   While True
      DeleteJournal( bear )
      DeleteJournal( beardead )
      UO.IgnoreReset()
      UO.FindType( Elem, '-1', '1' )
      While UO.FindCount() == 0 AND NOT UO.InJournal( bear )
         wait(500)
         UO.FindType( Elem, '-1', '1' )
      Wend
      If NOT UO.InJournal( bear ) Then
         ; нашли элема недалеко от нас
         UO.SetGlobal( 'FlagStatus', 'elem' )
         ElemSer = UO.GetSerial( 'finditem' )
         ElemName = GetElemName( UO.GetColor( ElemSer ) )
         WriteLog( 'Fighting with ' + ElemName, 0 )
         wait(1000)
         GetWeapon( MyFork, MyShield )
         UO.WarMode( 1 )
         UO.Attack( ElemSer )
      Else
         bearflag = 1
         ElemName = 'a bear'
         WriteLog( 'Fighting with ' + ElemName, 0 )
         GetWeapon( MyFork, MyShield )
         UO.WarMode( 1 )
      Endif      
      If UO.GetGlobal( 'CheckHide' ) == '1' Then
         UO.SayU( 'a' )
      Endif
      ; начинаем само сражение
      repeat
         wait(1000)
         If UO.Dead() Then
            CharDead()
         Endif
         ; тут введем еще подхиливание чара
         If UO.Life < (UO.Str - 30) Then
            RestoreChar( 0 )
            GetWeapon( MyFork, MyShield )
         Endif
         If UO.Life < 60 Then
            UO.UseType( UO.GetGlobal( 'GreatHeal' ) )
            WriteLog( 'I use Great Heal bottle!', 0 )
         Endif
         If UO.Dead() Then
            WriteLog( 'Char is dead!', 0 )
            CharDead()
         Endif
         If bearflag == 1 Then
            repeat
               wait(200)
            until UO.InJournal( beardead )
            bearflag = 0
         Endif
         UO.FindType( Elem, '-1', '1' )
      until UO.FindCount() == 0
      ; Элем мертв и вокруг нет других
      UO.FindType( ElemCorpse, '-1', '1' )
      While UO.FindCount() > 0
         CorpseSer = UO.GetSerial( 'finditem' )
         UO.Click( CorpseSer )
         wait(300)
         CheckLag()
         CorpseNam = UO.GetName( CorpseSer )
         WriteLog( 'I found ' + CorpseNam, 0 )
         WriteLog( 'Serial ' + CorpseSer + ' (lastcorpse ' + UO.GetSerial( 'lastcorpse' ) + ')', 0 )
         OpenCorpse( CorpseSer, ElemName )
         UO.Ignore( CorpseSer )
         UO.FindType( ElemCorpse, '-1', '1' )
      Wend
      UO.WarMode( 0 )
      DropWeapon()
      RestoreChar( 1 )
      wait(300)
      If UO.GetGlobal( 'CheckHide' ) == '1' Then
         GoHide()
      Endif
      UO.SetGlobal( 'FlagStatus', 'go' )
   Wend
endsub
;
Sub TestKillElem( typ )
   ; Поиск элема и килл его через спецплитку. Только в тестовых режимах.
   ; Элемы не лутятся и не заносятся в счетчики (пока). Только информация
   ; в лог!!!
   ;
   VAR Elem, ElemSer, ElemName
   If typ == 'elem' Then
      Elem = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'OreElemental' )
   Else
      Elem = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'TreeSpirit' )
   Endif
   VAR Plitka = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Plitka' )
   UO.IgnoreReset()
   UO.FindType( Elem, '-1', '1' )
   While UO.FindCount() > 0
      ElemSer = UO.GetSerial( 'finditem' )
      ElemName = GetElemName( UO.GetColor( ElemSer ) )
      UO.WaitTargetObject( ElemSer )
      UO.UseObject( Plitka )
      Wait( 2000 )
      CheckLag()
      WriteLog( 'I killed ' + ElemName, 0 )
      If UO.GetGlobal( 'CheckHide' ) == '1' Then
         GoHide()
      Endif
      UO.Ignore( ElemSer )
      UO.FindType( Elem, '-1', '1' )
   Wend
endsub
;
Sub OpenCorpse( Ser, Nam )
   VAR flag = 1
   VAR NeMogu1 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'NeMogu1' )
   VAR NeMogu2 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'NeMogu2' )
   UO.SetGlobal( 'ElemCount', str( val( UO.GetGlobal( 'ElemCount' ) ) + 1 ) )
   DeleteJournal( NeMogu2 )
   If UO.Waiting() Then
      UO.CancelTarget()
      wait(500)
      CheckLag()
   Endif
   UO.WaitTargetObject( Ser )
   UO.UseType( UO.GetGlobal( 'Cleaver' ) )
   wait(1000)
   CheckLag()   
   If UO.InJournal( NeMogu2 ) Then
      WriteLog( 'Warning! I cannot use cleaver to corpse! Reason: ' + NeMogu2, 0 )
      wait(1000)
      UO.Resend()
      return
   Endif
   DeleteJournal( NeMogu1 )
   UO.UseObject( Ser )
   wait(500)
   CheckLag()
   If UO.InJournal( NeMogu1 ) Then
      ; не могу открыть труп
      WriteLog( 'Warning! I cannot open corpse! Reason: ' + NeMogu1, 0 )
      wait(1000)
      UO.Resend()
      return
   Else
      WriteLog( 'I open corpse of ' + Nam )
      CorpseLoot( Ser )
   Endif
endsub
;
Sub WaitElem()
   If UO.GetGlobal( 'FlagStatus' ) == 'elem' Then
      repeat
         wait(300)
      until UO.GetGlobal( 'FlagStatus' ) == 'go'
   Endif
endsub
;
Sub GetElemName( Clr )
   VAR nam
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemClr1' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemNam1' )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemClr2' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemNam2' )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemClr3' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemNam3' )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemClr4' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemNam4' )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemClr5' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemNam5' )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemClr6' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'ElemsParam', 'ElemNam6' )
      return nam
   Endif
   nam = 'Unknown Elemental! Color = ' + Clr
   return nam
endsub
;

Sub ControlPK()
; Насчет ПК - будем сканировать вокруг в поисках типов.
; Если появляется - прерываем копку, начинаем убегать и реколлимся на ходу.
;
   VAR MinDistance = val( UO.GetGlobal('MinEnemyDist') )
   VAR MaxDistance = val( UO.GetGlobal('MaxEnemyDist') )
   VAR PKchar1 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'PKchar1' )
   VAR PKchar2 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'PKchar2' )
   VAR PKCount = 0, PKSerial = ''
   VAR PKColor, PKDist, PKDistOld, i
   VAR GoOut = 0
   DIM ExcludeChar[5]
   ExcludeChar[0] = UO.asmGetIniVar( 'mine&lumb.ini', 'ExcludeChar', 'ExcludeChar0' )
   ExcludeChar[1] = UO.asmGetIniVar( 'mine&lumb.ini', 'ExcludeChar', 'ExcludeChar1' )
   ExcludeChar[2] = UO.asmGetIniVar( 'mine&lumb.ini', 'ExcludeChar', 'ExcludeChar2' )
   ExcludeChar[3] = UO.asmGetIniVar( 'mine&lumb.ini', 'ExcludeChar', 'ExcludeChar3' )
   ExcludeChar[4] = UO.asmGetIniVar( 'mine&lumb.ini', 'ExcludeChar', 'ExcludeChar4' )
   ;
   While NOT UO.Dead()
      repeat
         wait(300)
         UO.FindType( PKchar1, '-1', '1' )
         PKCount = UO.FindCount()
         If PKCount == 0 Then
            UO.FindType( PKchar2, '-1', '1' )
            PKCount = UO.FindCount()
         Endif
         If PKCount > 0 Then
            PKSerial = UO.GetSerial( 'finditem' )
            If  PKSerial == UO.GetSerial( 'self' ) Then
               UO.Ignore( 'finditem' )
               PKCount = 0
            Else
               For i = 0 to 5
                  If PKSerial == ExcludeChar[i] Then
                     UO.Ignore( 'finditem' )
                     PKCount = 0
                  Endif
               Next
            Endif
         Endif
      until PKCount > 0
      ; Нашли!
      PKDistOld = 15
      PKColor = UO.GetNotoriety( PKSerial )
      WriteLog( 'I found another char. Serial = ' + PKSerial + ', Notoriety = ' + str(PKColor), 0 )
      If PKColor < 4 Then
         ; не такой уж он и ПК
         PKDist = UO.GetDistance( PKSerial )
         While PKDist > MinDistance AND PKDist < MaxDistance
            If PKDist <> PKDistOld Then
               WriteLog( 'Control Distance. Serial = ' + PKSerial + ', Distance = ' + str(PKDist), 0 )
               PKDistOld = PKDist
            Endif
            wait(200)
            PKDist = UO.GetDistance( PKSerial )
         wend
         If PKDist < MinDistance Then
            GoOut = 1
         Endif
      Else
         GoOut = 1
      Endif
      If GoOut == 1 Then
         WriteLog( 'I try escape from PK!', 0 )
         UO.SetGlobal( 'FlagStatus', 'pk' )
         If UO.GetGlobal( 'CheckInviz' ) == '1' Then
            UO.UseType( UO.GetGlobal( 'Inviz' ) )
            WriteLog( 'I use Inviz bottle!', 0 )
         Endif
         UO.SetGlobal( 'PKCount', str( val( UO.GetGlobal( 'PKCount' ) ) + 1 ) )
         wait(1000)
         return
      Endif
   wend
endsub
;
Sub RunOut()
; Убегание от приближающегося ПК. Определяем направление и бежим в другую
; сторону
; ВНИМАНИЕ! Процедура не написана!!!
;
   wait(500)
endsub
;
Sub StepByPatch( patch1, flag )
   ; идем по пути в зависимости от флага. Если 'go' - вперед, если 'back' - назад
   VAR MyX, MyY, NStep = 1, NewPatch = 'end end '
   If flag == 'back' Then
      ; надо идти назад по маршруту, для этого вывернем маршрут наизнанку.
      repeat
         MyX = GetWord( patch1, NStep )
         MyY = GetWord( patch1, NStep + 1 )
         If MyX <> 'end' AND MyY <> 'end' Then
            NewPatch = MyX + ' ' + MyY + ' ' + NewPatch
         Endif
         NStep = NStep + 2
      until MyX == 'end' OR MyY == 'end'
      ; переписали маршрут
      patch1 = NewPatch
   Endif
   ; теперь единый механизм для перемещения в обе стороны
   NStep = 1
   repeat
      MyX = GetWord( patch1, NStep )
      MyY = GetWord( patch1, NStep + 1 )
      If MyX <> 'end' AND MyY <> 'end' Then
         GoToTile( val(MyX), val(MyY), 0, True )
         If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
            WaitElem()
         Endif
      Endif
      NStep = NStep + 2
   until MyX == 'end' OR MyY == 'end'
endsub
;
Sub GoRazgruzka( sX, sY, Sund1, Sund2 )
   ; подход к сундуку или банку (выбирается по глобалкам) и
   ; открытие необходимых контейнеров или банка.
   ;
   ; sX,Sy - куда идти
   ; UO.GetGlobal( 'CheckBankDis' ) - разгружаться в сундук или банк
   ; если в банк:
   ;    если не ВИП-режимы - то вывеска дома
   ;    если ВИП-режимы - смотрим UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'PlaceOfBank' )
   ;         если 0 - банк по команде 'bank', 1 - банк с вывески дома
   ; Sund1 - сериал сундука или банкбокса
   ; Sund2 - задействовано только если не ВИП-режимы и разгрузка в сундук
   ;
   ; Если ВИП и разгрузка в банк - смотрим UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'MinNeedInPatch' )
   ; или UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LambNeedInPatch' ) - в зависимости от режима
   ; если 1 - используем маршрут MinPatchToBank или LambPatchToBank для подхода к точке разгрузки.
   ; маршрут не обязательно заканчивается в точке разгрузки - потом доходим по координатам.
   VAR BankPatch
   If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
      GoToTile( sX, sY, 0, True )
   Else
      If UO.GetGlobal( 'ModeOfScript' ) == '5' Then
         If UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'MinNeedInPatch' ) <> '1' Then
            GoToTile( sX, sY, 0, True )
         Else
            ; Нужно пройти по маршруту мининга
            BankPatch = UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'MinPatchToBank' )
            If BankPatch == '' Then
               GoToTile( sX, sY, 0, True )
            Else
               BankPatch = BankPatch + ' end end '
               StepByPatch( BankPatch, 'go' )
               GoToTile( sX, sY, 0, True )
            Endif
         Endif
      Endif
      If UO.GetGlobal( 'ModeOfScript' ) == '6' Then
         If UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LambNeedInPatch' ) <> '1' Then
            GoToTile( sX, sY, 0, True )
         Else
            ; Нужно пройти по маршруту ламбера
            BankPatch = UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LambPatchToBank' )
            If BankPatch == '' Then
               GoToTile( sX, sY, 0, True )
            Else
               BankPatch = BankPatch + ' end end '
               StepByPatch( BankPatch, 'go' )
               GoToTile( sX, sY, 0, True )
            Endif
         Endif
      Endif
   Endif
   ; Мы в точке разгрузки
   If UO.GetGlobal( 'ModeOfScript' ) == '5' OR UO.GetGlobal( 'ModeOfScript' ) == '6' Then
      If UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'PlaceOfBank' ) == '0' Then
         ; разгружаемся в банк
         UO.SayU( 'bank' )
         wait(1000)
         CheckLag()
      Else
         ; вывеска дома
         UO.UseObject( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'HomeTablSerial' ) )
         CheckLag()
         UO.LClick( Val( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LClickX1' ) ), Val( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LClickY1' ) ) )
         CheckLag()
         UO.LClick( Val( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LClickX2' ) ), Val( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LClickY2' ) ) )
         CheckLag()
      Endif
   Else
      ; вывеска дома
      UO.UseObject( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'HomeTablSerial' ) )
      CheckLag()
      UO.LClick( Val( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LClickX1' ) ), Val( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LClickY1' ) ) )
      CheckLag()
      UO.LClick( Val( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LClickX2' ) ), Val( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LClickY2' ) ) )
      CheckLag()
   Endif
endsub
;
Sub FromRazgruzka()
   ; проверка, если был включен подход к банку/вывеске - отходить по тому же маршруту
   VAR BankPatch
   If UO.GetGlobal( 'ModeOfScript' ) == '5' AND UO.GetGlobal( 'ModeOfScript' ) == '6' Then
      If UO.GetGlobal( 'ModeOfScript' ) == '5' Then
         If UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'MinNeedInPatch' ) == '1' Then
            ; Нужно пройти по маршруту мининга
            BankPatch = UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'MinPatchToBank' )
            If BankPatch == '' Then
               return
            Else
               BankPatch = BankPatch + ' end end '
               StepByPatch( BankPatch, 'back' )
               return
            Endif
         Endif
      Endif
      If UO.GetGlobal( 'ModeOfScript' ) == '6' Then
         If UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LambNeedInPatch' ) == '1' Then
            ; Нужно пройти по маршруту ламбера
            BankPatch = UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'LambPatchToBank' )
            If BankPatch == '' Then
               return
            Else
               BankPatch = BankPatch + ' end end '
               StepByPatch( BankPatch, 'back' )
               return
            Endif
         Endif
      Endif
   Endif
endsub


Last edited by Edred on 2006-05-08 23:07:47, edited 1 time in total.

Top
   
 Post subject:
PostPosted: 2006-04-23 19:09:11 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
вторая часть файла

Code:
#================================================#
#  ПРОЦЕДУРЫ РАЗГРУЗКИ ПАКА                      #
#================================================#
;
Sub Razgruzka( nomer )
; Разгрузка пака чара от логов и руды и добор при необходимости регов.
; Встроен подход к сундукам для разгрузки / догрузки. Все данные
; получаем из головного скрипта через глобальные переменные.
;
   VAR X_Sund = Val( UO.GetGlobal( 'Sund_Tile_X' ) )
   VAR Y_Sund = Val( UO.GetGlobal( 'Sund_Tile_Y' ) )
   VAR Sund1 = UO.GetGlobal( 'Sund1_Ser' )
   VAR Sund2 = UO.GetGlobal( 'Sund2_Ser' )
;   VAR Box1 = UO.GetGlobal( 'BoxRegs' )   ; regs
;   VAR Box2 = UO.GetGlobal( 'BoxBand' )   ; bandages, blood bandages, bottles
;   VAR Box3 = UO.GetGlobal( 'BoxPick' )   ; pickaxes, hatchets, cleavers, scissors
;   VAR Box4 = UO.GetGlobal( 'BoxArms' )   ; weapons, armors, robes
   VAR kolvo, cvet, logtext = '', dlin, kk, ls, cvet1, tmpser
   DIM Razgruz[8]
   Razgruz[0] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp1' )
   Razgruz[1] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp2' )
   Razgruz[2] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp3' )
   Razgruz[3] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp4' )
   Razgruz[4] = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'LogsTyp1' )
   Razgruz[5] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Money' )
   Razgruz[6] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Cutleather' )
   Razgruz[7] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Leather2' )
   DIM Regs[8]
   Regs[0] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs0' )
   Regs[1] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs1' )
   Regs[2] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs2' )
   Regs[3] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs3' )
   Regs[4] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs4' )
   Regs[5] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs5' )
   Regs[6] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs6' )
   Regs[7] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs7' )
   VAR Inviska = UO.GetGlobal( 'Inviz' )
   VAR GrHeal = UO.GetGlobal( 'GreatHeal' )
   VAR UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'EmptBottle' )
   VAR i, j, oldpause
   GoRazgruzka( X_Sund, Y_Sund, Sund1, Sund2 )
   ; Разбираемся с рудой
   For i = 0 to 7
      While UO.Count( Razgruz[i] ) > 0
         UO.FindType( Razgruz[i], '-1', 'backpack' )
         If i < 4 Then
            kolvo = UO.GetQuantity( 'finditem' )
            cvet = UO.GetColor( 'finditem' )
            cvet1 = GetNameOre( cvet, kolvo )
            WriteLog( str( kolvo ) + '[' + UO.GetGlobal( 'Itog' ) + '] of ' + cvet1, 3 )
         Endif
         If i == 4 Then
            kolvo = UO.GetQuantity( 'finditem' )
            cvet = UO.GetColor( 'finditem' )
            cvet1 = GetNameLogs( cvet, kolvo )
            WriteLog( str( kolvo ) + '[' + UO.GetGlobal( 'Itog' ) + '] of ' + cvet1, 3 )
         Endif
         If UO.GetGlobal( 'CheckBankDis' ) == '0' Then
            UO.MoveItem( 'finditem', '0', Sund1 )
            Wait( 1000 )
            CheckLag()
         Else
            ; Если в банк - надо искать в банке эту руду/логи и подгружать в кучку.
            tmpser = UO.GetSerial( 'finditem' )
            UO.FindType( Razgruz[i], cvet, Sund1 )
            If UO.FindCount() == 0 Then
               UO.MoveItem( tmpser, '0', Sund1 )
               Wait( 1000 )
               CheckLag()
            Else
               UO.MoveItem( tmpser, '0', 'finditem' )
               Wait( 1000 )
               CheckLag()
            Endif
         Endif
      Wend
   Next
   ; разбираемся с регами
   logtext = UO.asmGetDate('dd/mm/yy') + ' ' + UO.asmGetTime('hh:nn:ss')
   WriteLog( 'I change of regs for recall', 0 )
   For i = 0 to 2
      If UO.Count( Regs[i] ) > 6 Then
         ; этого рега больше 6
         UO.FindType( Regs[i], '-1', 'backpack' )
         UO.MoveItem( 'finditem', str( UO.Count( Regs[i] ) - 6 ), Sund2 )
         ; Box1 )
         Wait( 1000 )
         CheckLag()
      Else
         If UO.Count( Regs[i] ) < 6 Then
            ; этого рега меньше 6
            UO.FindType( Regs[i], '-1', Sund2 )
            ; Box1 )
            UO.Grab( str( 6 - UO.Count( Regs[i] ) ), 'finditem' )
            Wait( 1000 )
            CheckLag()
         Endif
      Endif
   Next
   WriteLog( 'I discharge of other regs', 0 )
   For i = 3 to 7
      If UO.Count( Regs[i] ) > 0 Then
         ; этот рег нам вообще не нужен
         UO.FindType( Regs[i], '-1', 'backpack' )
         UO.MoveItem( 'finditem', '0', Sund2 )
         ; Box1 )
         Wait( 1000 )
         CheckLag()
      Endif
   Next
   If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '3' Then
      WriteLog( 'I change of bandages', 0 )
      If UO.Count( UO.GetGlobal( 'Bandag' ) ) > 20 Then
         ; бинтов откуда-то больше 20
         While UO.Count( UO.GetGlobal( 'Bandag' ) ) > 0
            UO.FindType( UO.GetGlobal( 'Bandag' ), '-1', 'backpack' )
            UO.MoveItem( 'finditem', '0', Sund2 )
            ; Box2 )
            Wait( 1000 )
            CheckLag()
         Wend
         UO.FindType( UO.GetGlobal( 'Bandag' ), '-1', Sund2 )
         ; Box2 )
         UO.Grab( '20', 'finditem' )
         Wait( 1000 )
         CheckLag()
      Else
         If UO.Count( UO.GetGlobal( 'Bandag' ) ) < 20 Then
            UO.FindType( UO.GetGlobal( 'Bandag' ), '-1', Sund2 )
            ; Box2 )
            UO.Grab( str( 20 - UO.Count( UO.GetGlobal( 'Bandag' ) ) ), 'finditem' )
            Wait( 1000 )
            CheckLag()
         Endif
      Endif
   Endif
   ; скидываем кровавые бинты
   WriteLog( 'I discharge of blood bandages', 0 )
   While UO.Count( UO.GetGlobal( 'BlBandag' ) ) > 0
      UO.FindType( UO.GetGlobal( 'BlBandag' ), '-1', 'backpack' )
      UO.MoveItem( 'finditem', '0', Sund2 )
      ; Box2 )
      Wait( 1000 )
      CheckLag()
   Wend
   ; проверяем инвизки
   If UO.GetGlobal( 'CheckInviz' ) == '1' Then
      WriteLog( 'I check of my inviz potion', 0 )
      If UO.Count( Inviska ) == 0 Then
         UO.FindType( Inviska, '-1', Sund2 )
         ; Box2 )
         UO.Grab( '1', 'finditem' )
         Wait( 1000 )
         CheckLag()
      Endif
   Endif
   ; проверяем греат хилы
   If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '3' Then
      WriteLog( 'I check of my great heal potions', 0 )
      If UO.Count( GrHeal ) > 5 Then
         UO.FindType( GrHeal, '-1', 'backpack' )
         UO.MoveItem( 'finditem', str( UO.Count( GrHeal ) - 5 ), Sund2 )
         ; Box2 )
         Wait( 1000 )
         CheckLag()
      Else
         If UO.Count( GrHeal ) < 5 Then
            UO.FindType( GrHeal, '-1', Sund2 )
            ; Box2 )
            UO.Grab( str( 5 - UO.Count( GrHeal ) ), 'finditem' )
            Wait( 1000 )
            CheckLag()
         Endif
      Endif
   Endif
   ; проверяем пустые бутылки
   While UO.Count( EmptBottle ) > 0
      UO.FindType( EmptBottle, '-1', 'backpack' )
      UO.MoveItem( 'finditem', '0', Sund2 )
      ; Box2 )
      Wait( 1000 )
      CheckLag()
   Wend
   ; разберемся с кирками
   If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '5' Then
      If UO.Count( UO.GetGlobal( 'Kirka' ) ) == 0 Then
;         UO.UseObject( Box3 )
;         wait(500)
;         CheckLag()
         UO.FindType( UO.GetGlobal( 'Kirka' ), '-1', Sund2 )
         ; Box3 )
         UO.Grab( '1', 'finditem' )
         Wait( 1000 )
         CheckLag()
      Endif
   ; разберемся с топорами
   If UO.GetGlobal( 'ModeOfScript' ) == '3' OR UO.GetGlobal( 'ModeOfScript' ) == '6' Then
      If UO.Count( UO.GetGlobal( 'Hatchet' ) ) == 0 Then
;         UO.UseObject( Box3 )
;         wait(500)
;         CheckLag()
         UO.FindType( UO.GetGlobal( 'Hatchet' ), '-1', Sund2 )
         ; Box3 )
         UO.Grab( '1', 'finditem' )
         Wait( 1000 )
         CheckLag()
      Endif
   Endif
   ; разберемся с кливерами
   If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '3' Then
      If UO.Count( UO.GetGlobal( 'Cleaver' ) ) < 2 Then
;         UO.UseObject( Box3 )
;         wait(500)
;         CheckLag()
         UO.FindType( UO.GetGlobal( 'Cleaver' ), '-1', Sund2 )
         ; Box3 )
         UO.Grab( '1', 'finditem' )
         Wait( 1000 )
         CheckLag()
      Endif
   Endif
   UO.UseObject( 'backpack' )
   wait(500)
   CheckLag()
   CheckInstrQuality()
   FromRazgruzka()
   UO.SetGlobal( 'FlagStatus', 'go' )
endsub
;
Sub RazgruzkaVIP( nomer )
; ТОЛЬКО ДЛЯ ТЕСТОВЫХ РЕЖИМОВ!!! РАБОТА С ОДНИМ ПРИЛОЧЕННЫМ СУНДУКОМ!!!
; Разгрузка пака чара от логов и руды.
; Встроен подход к сундуку для разгрузки / взятия инструмента. Все данные
; получаем из головного скрипта через глобальные переменные.
;
   VAR X_Sund = Val( UO.GetGlobal( 'Sund_Tile_X' ) )
   VAR Y_Sund = Val( UO.GetGlobal( 'Sund_Tile_Y' ) )
   VAR Sund1 = UO.GetGlobal( 'Sund1_Ser' )
   VAR kolvo, cvet, cvet1, dlin, kk, ls, tmpser
   DIM Razgruz[9]
   Razgruz[0] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp1' )
   Razgruz[1] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp2' )
   Razgruz[2] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp3' )
   Razgruz[3] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp4' )
   Razgruz[4] = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'LogsTyp1' )
   Razgruz[5] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Money' )
   Razgruz[6] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Cutleather' )
   Razgruz[7] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Leather2' )
   Razgruz[8] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Cintrines' )
   DIM Regs[8]
   Regs[0] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs0' )
   Regs[1] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs1' )
   Regs[2] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs2' )
   Regs[3] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs3' )
   Regs[4] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs4' )
   Regs[5] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs5' )
   Regs[6] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs6' )
   Regs[7] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs7' )
   VAR GrHeal = UO.GetGlobal( 'GreatHeal' )
   VAR i, j, oldpause
   ; Подойдем к месту разгрузки / загрузки
   GoRazgruzka( X_Sund, Y_Sund, Sund1, '' )
   ; Разбираемся с рудой
   For i = 0 to 8
      While UO.Count( Razgruz[i] ) > 0
         UO.FindType( Razgruz[i], '-1', 'backpack' )
         If i < 4 Then
            kolvo = UO.GetQuantity( 'finditem' )
            cvet = UO.GetColor( 'finditem' )
            cvet1 = GetNameOre( cvet, kolvo )
            WriteLog( str( kolvo ) + '[' + UO.GetGlobal( 'Itog' ) + '] of ' + cvet1, 3 )
         Endif
         If i == 4 Then
            kolvo = UO.GetQuantity( 'finditem' )
            cvet = UO.GetColor( 'finditem' )
            cvet1 = GetNameLogs( cvet, kolvo )
            WriteLog( str( kolvo ) + '[' + UO.GetGlobal( 'Itog' ) + '] of ' + cvet1, 3 )
         Endif
         If UO.GetGlobal( 'CheckBankDis' ) == '0' Then
            UO.MoveItem( 'finditem', '0', Sund1 )
            Wait( 1000 )
            CheckLag()
         Else
            ; Если в банк - надо искать в банке эту руду/логи и подгружать в кучку.
            tmpser = UO.GetSerial( 'finditem' )
            UO.FindType( Razgruz[i], cvet, Sund1 )
            If UO.FindCount() == 0 Then
               UO.MoveItem( tmpser, '0', Sund1 )
               Wait( 1000 )
               CheckLag()
            Else
               UO.MoveItem( tmpser, '0', 'finditem' )
               Wait( 1000 )
               CheckLag()
            Endif
         Endif
      Wend
   Next
   ; разберемся с кирками
   If UO.GetGlobal( 'ModeOfScript' ) == '5' Then
      If UO.Count( UO.GetGlobal( 'Kirka' ) ) == 0 Then
         UO.FindType( UO.GetGlobal( 'Kirka' ), '-1', Sund1 )
         If UO.FindCount() == 0 Then
            UO.SetGlobal( 'FlagStatus', 'exit' )
            return
         Endif
         UO.Grab( '1', 'finditem' )
         Wait( 1000 )
         CheckLag()
      Endif
   Endif
   ; разберемся с топорами
   If UO.GetGlobal( 'ModeOfScript' ) == '6' Then
      If UO.Count( UO.GetGlobal( 'Hatchet' ) ) == 0 Then
         UO.FindType( UO.GetGlobal( 'Hatchet' ), '-1', Sund1 )
         If UO.FindCount() == 0 Then
            UO.SetGlobal( 'FlagStatus', 'exit' )
            return
         Endif
         UO.Grab( '1', 'finditem' )
         Wait( 1000 )
         CheckLag()
      Endif
   Endif
   CheckInstrQuality()
   FromRazgruzka()
   UO.SetGlobal( 'FlagStatus', 'go' )
endsub
;
Sub CheckInstrQuality()
   VAR kk, ls
   ; проверим состояние нашего инструмента
   If UO.GetGraphic(UO.ObjAtLayer(UO.asmGetIniVar('mine&lumb.ini','OtherConfig','PickAxeHand'))) == UO.GetGlobal('Hatchet') OR UO.GetGraphic(UO.ObjAtLayer(UO.asmGetIniVar('mine&lumb.ini','OtherConfig','PickAxeHand'))) == UO.GetGlobal('Pickaxe') Then
      DeleteJournal( 'Quality' )
      UO.WaitTargetObject(UO.ObjAtLayer('Lhand'))
      UO.UseSkill( 'Arms Lore' )
      kk = 0
      repeat
         wait(100)
         kk = kk + 1
      until UO.InJournal( 'Quality' ) OR kk > 30
      ls = UO.InJournal( 'Quality' )
      UO.Print( 'My instrument is ' + UO.Journal( ls - 1 ) )
      WriteLog( 'My instrument is ' + UO.Journal( ls - 1 ), 0 )
   Else
      If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '5' Then
         ; кирка
         UO.FindType( UO.GetGlobal( 'Pickaxe' ) )
      Else
         ; топор
         UO.FindType( UO.GetGlobal( 'Pickaxe' ) )
      Endif
      If UO.FindCount() > 0 Then
         UO.WaitTargetObject( 'finditem' )
         UO.UseSkill( 'Arms Lore' )
         kk = 0
         repeat
            wait(100)
            kk = kk + 1
         until UO.InJournal( 'Quality' ) OR kk > 30
         ls = UO.InJournal( 'Quality' )
         UO.Print( 'My instrument is ' + UO.Journal( ls - 1 ) )
         WriteLog( 'My instrument is ' + UO.Journal( ls - 1 ), 0 )
      Endif
   Endif
endsub
;
sub BreakScript()
   UO.SetGlobal( 'FlagStatus', 'stop' )
endsub
;
#================================================#
#  ОБЩИЕ ПРОЦЕДУРЫ                               #
#================================================#
;
Sub CharDead()
   WriteLog( 'CHAR IS DEAD!!!', 0 )
   WriteLog( '                  coordinates is ' + str(UO.GetX()) + ', ' + str(UO.GetY()), 0 )
   WriteLog( '                  I go to ressurect' )
   If UO.GetGlobal( 'ModeOfScript' ) <> 5 AND UO.GetGlobal( 'ModeOfScript' ) <> 6 Then
      UO.Msg( '.goankh' )
      wait(1000)
      CheckLag()
   Endif
   ;
   ; ТУТ НАДО БУДЕТ СДЕЛАТЬ АВТОРЕС ЧАРА
   ;
   UO.Exec( 'terminate all' )
endsub
;
Sub MultiRecall( nom )
   If nom == 1 Then
      Recalling( UO.GetGlobal( 'RunbookTile' ), UO.GetGlobal( 'Wall1Rune' ) )
      return
   Endif
   If nom == 2 Then
      Recalling( UO.GetGlobal( 'RunbookTile' ), UO.GetGlobal( 'Wall2Rune' ) )
      return
   Endif
   If nom == 3 Then
      Recalling( UO.GetGlobal( 'RunbookTile' ), UO.GetGlobal( 'Wall3Rune' ) )
      return
   Endif
   If nom == 4 Then
      Recalling( UO.GetGlobal( 'RunbookTile' ), UO.GetGlobal( 'Wall4Rune' ) )
      return
   Endif
   If nom == 5 Then
      Recalling( UO.GetGlobal( 'RunbookTile' ), UO.GetGlobal( 'Wall5Rune' ) )
      return
   Endif
   If nom == 6 Then
      Recalling( UO.GetGlobal( 'RunbookTile' ), UO.GetGlobal( 'Wall6Rune' ) )
      return
   Endif
   If nom == 7 Then
      Recalling( UO.GetGlobal( 'RunbookTile' ), UO.GetGlobal( 'Wall7Rune' ) )
      return
   Endif
   If nom == 8 Then
      Recalling( UO.GetGlobal( 'RunbookTile' ), UO.GetGlobal( 'Wall8Rune' ) )
      return
   Endif
Endsub
;
Sub GetInstrum( typ )
   VAR Instrum
   If typ == 'pickaxe' Then
      Instrum = UO.GetGlobal( 'Pickaxe' )
   Endif
   If typ == 'hatchet' Then
      Instrum = UO.GetGlobal( 'Hatchet' )
   Endif
   If UO.GetGraphic(UO.ObjAtLayer(UO.asmGetIniVar('mine&lumb.ini','OtherConfig','PickAxeHand'))) <> Instrum Then
      UO.FindType( Instrum )
      If UO.FindCount() == 0 Then
         return 0
      Endif
      UO.Equipt(UO.asmGetIniVar('mine&lumb.ini','OtherConfig','PickAxeHand'), Instrum )
      repeat
         wait(100)
      until UO.GetGraphic(UO.ObjAtLayer(UO.asmGetIniVar('mine&lumb.ini','OtherConfig','PickAxeHand'))) == Instrum
      return 1
   Endif
   return 1
endsub
;
Sub SetMassive( nom )
   VAR TypPatch
   If UO.GetGlobal( 'ModeOfScript' ) == '1' Then
      TypPatch = 'walls'
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) == '2' Then
      TypPatch = 'floor'
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) == '3' Then
      TypPatch = 'trees'
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) == '5' Then
      TypPatch = 'vipmi'
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) == '6' Then
      TypPatch = 'vipla'
   Endif
   If UO.GetGlobal( 'ModeOfScript' ) == '5' OR UO.GetGlobal( 'ModeOfScript' ) == '6' Then
      If nom == 1 Then
         UO.SetGlobal( 'NumberPatch', TypPatch + '1' )
         return 2
      Else
         UO.SetGlobal( 'NumberPatch', TypPatch + '2' )
         return 1
      Endif
   Else
      If nom == 8 Then
         UO.SetGlobal( 'NumberPatch', TypPatch + '8' )
         return 1
      Else
         UO.SetGlobal( 'NumberPatch', TypPatch + str(nom) )
         nom = nom + 1
         return nom
      Endif
   Endif
Endsub
;
Sub DropSomeLogs()
   ; В тестовом ламбере сбрасываем обычные логи под ноги и заносим их кол-во
   ; в счетчики
   VAR clrlog = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr1' )
   VAR typlog = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'LogsTyp1' )
   VAR tmp1, kolvo
   UO.FindType( typlog, clrlog, 'backpack' )
   If UO.FindCount() > 0 Then
      kolvo = UO.GetQuantity( 'finditem' )
      WriteLog( 'I drop ' + str( kolvo ) + ' logs', 0 )
      tmp1 = GetNameLogs( clrlog, kolvo )
      UO.DropHere( 'finditem' )
      wait(1000)
      CheckLag()
   Endif
endsub
;
; на основании цвета определяем название руды
;
Sub GetNameLogs( clr, add )
   VAR nam, res
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr1' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam1' )
      res = val( UO.GetGlobal( 'Logs' ) ) + add
      UO.SetGlobal( 'Logs', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'LogCount', 'TreeLogs', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr2' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam2' )
      res = val( UO.GetGlobal( 'AncientLogs' ) ) + add
      UO.SetGlobal( 'AncientLogs', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'LogCount', 'AncientLogs', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr3' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam3' )
      res = val( UO.GetGlobal( 'SturdyLogs' ) ) + add
      UO.SetGlobal( 'SturdyLogs', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'LogCount', 'SturdyLogs', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr4' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam4' )
      res = val( UO.GetGlobal( 'SteelLogs' ) ) + add
      UO.SetGlobal( 'SteelLogs', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'LogCount', 'SteelLogs', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr5' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam5' )
      res = val( UO.GetGlobal( 'NeitralLogs' ) ) + add
      UO.SetGlobal( 'NeitralLogs', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'LogCount', 'NeitralLogs', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr6' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam6' )
      res = val( UO.GetGlobal( 'OrderLogs' ) ) + add
      UO.SetGlobal( 'OrderLogs', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'LogCount', 'OrderLogs', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr7' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam7' )
      res = val( UO.GetGlobal( 'ChaosLogs' ) ) + add
      UO.SetGlobal( 'ChaosLogs', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'LogCount', 'ChaosLogs', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr8' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam8' )
      res = val( UO.GetGlobal( 'TitanicLogs' ) ) + add
      UO.SetGlobal( 'TitanicLogs', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'LogCount', 'TitanicLogs', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Clr9' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam9' )
      res = val( UO.GetGlobal( 'ElvinLogs' ) ) + add
      UO.SetGlobal( 'ElvinLogs', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'LogCount', 'ElvinLogs', str(res) )
      return nam
   Endif
   UO.SetGlobal( 'Itog', str( 0 ) )
   return 'other logs'
Endsub
;
Sub GetNameOre( clr, add )
   VAR nam, res
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr1' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam1' )
      res = val( UO.GetGlobal( 'Iron' ) ) + add
      UO.SetGlobal( 'Iron', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Iron', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr2' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam2' )
      res = val( UO.GetGlobal( 'Damned' ) ) + add
      UO.SetGlobal( 'Damned', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Damned', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr3' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam3' )
      res = val( UO.GetGlobal( 'Kreonit' ) ) + add
      UO.SetGlobal( 'Kreonit', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Kreonit', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr4' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam4' )
      res = val( UO.GetGlobal( 'Copper' ) ) + add
      UO.SetGlobal( 'Copper', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Copper', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr5' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam5' )
      res = val( UO.GetGlobal( 'Bronze' ) ) + add
      UO.SetGlobal( 'Bronze', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Bronze', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr6' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam6' )
      res = val( UO.GetGlobal( 'Walean' ) ) + add
      UO.SetGlobal( 'Walean', str( res ) )
      UO.SetGlobal( 'Walean', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Walean', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr7' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam7' )
      res = val( UO.GetGlobal( 'Golden' ) ) + add
      UO.SetGlobal( 'Golden', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Golden', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr8' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam8' )
      res = val( UO.GetGlobal( 'Silver' ) ) + add
      UO.SetGlobal( 'Silver', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Silver', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr9' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam9' )
      res = val( UO.GetGlobal( 'Oceanite' ) ) + add
      UO.SetGlobal( 'Oceanite', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Oceanite', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr10' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam10' )
      res = val( UO.GetGlobal( 'BloodRock' ) ) + add
      UO.SetGlobal( 'BloodRock', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'BloodRock', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr11' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam11' )
      res = val( UO.GetGlobal( 'Sacred' ) ) + add
      UO.SetGlobal( 'Sacred', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Sacred', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr12' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam12' )
      res = val( UO.GetGlobal( 'Brilliant' ) ) + add
      UO.SetGlobal( 'Brilliant', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Brilliant', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr13' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam13' )
      res = val( UO.GetGlobal( 'Order' ) ) + add
      UO.SetGlobal( 'Order', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Order', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr14' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam14' )
      res = val( UO.GetGlobal( 'Chaos' ) ) + add
      UO.SetGlobal( 'Chaos', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Chaos', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr15' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam15' )
      res = val( UO.GetGlobal( 'Neutral' ) ) + add
      UO.SetGlobal( 'Neutral', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Neutral', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr16' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam16' )
      res = val( UO.GetGlobal( 'Stardust' ) ) + add
      UO.SetGlobal( 'Stardust', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Stardust', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr17' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam17' )
      res = val( UO.GetGlobal( 'Citadel' ) ) + add
      UO.SetGlobal( 'Citadel', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Citadel', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr18' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam18' )
      res = val( UO.GetGlobal( 'Plaster' ) ) + add
      UO.SetGlobal( 'Plaster', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Plaster', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr19' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam19' )
      res = val( UO.GetGlobal( 'Sandstone' ) ) + add
      UO.SetGlobal( 'Sandstone', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Sandstone', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr20' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam20' )
      res = val( UO.GetGlobal( 'Stone' ) ) + add
      UO.SetGlobal( 'Stone', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Stone', str(res) )
      return nam
   Endif
   If clr == UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Clr21' ) Then
      nam = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam21' )
      res = val( UO.GetGlobal( 'Marble' ) ) + add
      UO.SetGlobal( 'Marble', str( res ) )
      UO.SetGlobal( 'Itog', str( res ) )
      UO.asmSetIniVar( 'mine&lumb.ini', 'OreCount', 'Marble', str(res) )
      return nam
   Endif
   nam = 'Unknown ore'
   return nam
endsub
;
Sub WriteLog( mes, mod )
   ; Стандартизированная общая функция помещения информации в лог
   ;
   ; Режимы работы:
   ;
   ; 0 - запись текстовой строки.
   ; 1 - старт скрипта. Делается отступ, пишется информация о старте скрипта.
   ;     переданный текст игнорируется.
   ; 2 - проверяется в журнале наличие соответствующих сообщений и пишется
   ;     в журнал итог копки в этой точке. В текстовой строке идут координаты
   ;     чара и координаты точки копки через пробел. Режим (копка или рубка)
   ;     проверяется через глобалку.
   ; 3 - Информация о разгрузке. Текст - чего и сколько выгружаем.
   ; 4 - Информация о доборе. Текст - чего и сколько добираем.
   ; 5 - Сброс информации о количестве добытого разрушившимся инструментом.
   ;     Счетчики берутся из глобальных переменных и потом обнуляются.
   ;     Текст - тип разрушившегося инструмента.
   ;
   ; Дата и время добавляются автоматически.
   ; Режимы 2, 3, 4 помещаются в лог только если включен режим "Подробный лог"
   ; Если "подробный лог" выключен - в пятом режиме счетчики не обнуляются.
   ;
   ; Информация помещается одновременно в текстовый файл и в текстовое окно. Строки
   ; текстового окна считаются и по достижении 100 строк окно очищается. Счетчик
   ; количества строк ведется в глобалке.
   ;
   VAR i, v
   VAR t = val( UO.GetGlobal( 'CountLineTextW' ) )
   VAR fil = UO.GetGlobal( 'LogFile' )
   VAR CurTim = UO.asmGetDate('dd/mm/yy') + ' ' + UO.asmGetTime('hh:nn:ss') + ' '
   If t > 99 Then
      UO.TextClear()
      t = 0
   Endif
   If mod == 0 Then
      UO.asmLogAdd( fil, CurTim + mes )
      UO.TextPrint( CurTim + mes )
      t = t + 1
   Endif
   If mod == 1 Then
      UO.TextOpen()
      UO.TextClear()
      t = 0
      For i = 1 To 3
         UO.asmLogAdd( fil, ' ' )
         UO.TextPrint( ' ' )
      Next
      UO.asmLogAdd( fil, '============================================================' )
      UO.asmLogAdd( fil, CurTim + 'Script started' )
      UO.TextPrint( CurTim + 'Script started' )
      UO.asmLogAdd( fil, '============================================================' )
      t = t + 4
   Endif
   If mod == 2 Then
      If UO.GetGlobal( 'ModeOfScript' ) == '1' OR UO.GetGlobal( 'ModeOfScript' ) == '2' OR UO.GetGlobal( 'ModeOfScript' ) == '5' Then
         v = GetJournalMes( 'pickaxe' )
      Else
         v = GetJournalMes( 'hatchet' )
      Endif
      UO.asmLogAdd( fil, CurTim + mes + ' ' + v )
      UO.TextPrint( CurTim + mes + ' ' + v )
      t = t + 1
   Endif
   If mod == 3 Then
      If UO.GetGlobal( 'CheckLog' ) == '1' Then
         UO.asmLogAdd( fil, CurTim + '========== Discharge ' + mes )
         UO.TextPrint( CurTim + '========== Discharge ' + mes )
         t = t + 1
      Endif
   Endif
   If mod == 4 Then
      If UO.GetGlobal( 'CheckLog' ) == '1' Then
         UO.asmLogAdd( fil, CurTim + '========== I get ' + mes )
         UO.TextPrint( CurTim + '========== I get ' + mes )
         t = t + 1
      Endif
   Endif
   If mod == 5 Then
      If mes == 'hatchet' Then
         UO.asmLogAdd( fil, '============================================================' )
         UO.asmLogAdd( fil, CurTim + 'Hatchet destroyed!' )
         UO.TextPrint( CurTim + 'Hatchet destroyed!' )
         UO.asmLogAdd( fil, '==============================' )
         UO.asmLogAdd( fil, 'Summary:' )
         UO.TextPrint( 'Summary:' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Logs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam1' ) )
         UO.TextPrint( UO.GetGlobal( 'Logs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam1' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'AncientLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam2' ) )
         UO.TextPrint( UO.GetGlobal( 'AncientLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam2' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'SturdyLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam3' ) )
         UO.TextPrint( UO.GetGlobal( 'SturdyLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam3' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'SteelLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam4' ) )
         UO.TextPrint( UO.GetGlobal( 'SteelLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam4' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'NeitralLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam5' ) )
         UO.TextPrint( UO.GetGlobal( 'NeitralLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam5' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'ChaosLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam6' ) )
         UO.TextPrint( UO.GetGlobal( 'ChaosLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam6' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'OrderLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam7' ) )
         UO.TextPrint( UO.GetGlobal( 'OrderLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam7' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'TitanicLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam8' ) )
         UO.TextPrint( UO.GetGlobal( 'TitanicLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam8' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'ElvinLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam9' ) )
         UO.TextPrint( UO.GetGlobal( 'ElvinLogs' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'Nam9' ) )
         UO.asmLogAdd( fil, '==============================' )
         t = t + 11
         If UO.GetGlobal( 'CheckLog' ) == '1' Then
            UO.SetGlobal( 'Logs', '0' )
            UO.SetGlobal( 'AncientLogs', '0' )
            UO.SetGlobal( 'SturdyLogs', '0' )
            UO.SetGlobal( 'SteelLogs', '0' )
            UO.SetGlobal( 'NeitralLogs', '0' )
            UO.SetGlobal( 'ChaosLogs', '0' )
            UO.SetGlobal( 'OrderLogs', '0' )
            UO.SetGlobal( 'TitanicLogs', '0' )
            UO.SetGlobal( 'ElvinLogs', '0' )
         Endif
      Endif
      If mes == 'pickaxe' Then
         UO.asmLogAdd( fil, '============================================================' )
         UO.asmLogAdd( fil, CurTim + 'Pickaxe destroyed!' )
         UO.TextPrint( CurTim + 'Pickaxe destroyed!' )
         UO.asmLogAdd( fil, '==============================' )
         UO.asmLogAdd( fil, 'Summary:' )
         UO.TextPrint( 'Summary:' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Iron' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam1' ) )
         UO.TextPrint( UO.GetGlobal( 'Iron' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam1' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Damned' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam2' ) )
         UO.TextPrint( UO.GetGlobal( 'Damned' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam2' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Kreonit' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam3' ) )
         UO.TextPrint( UO.GetGlobal( 'Kreonit' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam3' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Copper' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam4' ) )
         UO.TextPrint( UO.GetGlobal( 'Copper' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam4' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Bronze' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam5' ) )
         UO.TextPrint( UO.GetGlobal( 'Bronze' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam5' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Walean' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam6' ) )
         UO.TextPrint( UO.GetGlobal( 'Walean' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam6' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Golden' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam7' ) )
         UO.TextPrint( UO.GetGlobal( 'Golden' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam7' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Silver' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam8' ) )
         UO.TextPrint( UO.GetGlobal( 'Silver' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam8' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Oceanite' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam9' ) )
         UO.TextPrint( UO.GetGlobal( 'Oceanite' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam9' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'BloodRock' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam10' ) )
         UO.TextPrint( UO.GetGlobal( 'BloodRock' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam10' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Sacred' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam11' ) )
         UO.TextPrint( UO.GetGlobal( 'Sacred' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam11' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Brilliant' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam12' ) )
         UO.TextPrint( UO.GetGlobal( 'Brilliant' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam12' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Order' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam13' ) )
         UO.TextPrint( UO.GetGlobal( 'Order' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam13' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Chaos' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam14' ) )
         UO.TextPrint( UO.GetGlobal( 'Chaos' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam14' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Neutral' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam15' ) )
         UO.TextPrint( UO.GetGlobal( 'Neutral' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam15' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Stardust' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam16' ) )
         UO.TextPrint( UO.GetGlobal( 'Stardust' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam16' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Citadel' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam17' ) )
         UO.TextPrint( UO.GetGlobal( 'Citadel' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam17' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Plaster' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam18' ) )
         UO.TextPrint( UO.GetGlobal( 'Plaster' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam18' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Sandstone' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam19' ) )
         UO.TextPrint( UO.GetGlobal( 'Sandstone' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam19' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Stone' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam20' ) )
         UO.TextPrint( UO.GetGlobal( 'Stone' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam20' ) )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Marble' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam21' ) )
         UO.TextPrint( UO.GetGlobal( 'Marble' ) + ' ' + UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'Nam21' ) )
         UO.asmLogAdd( fil, '==============================' )
         t = t + 23
         If UO.GetGlobal( 'CheckLog' ) == '1' Then
            UO.SetGlobal( 'Iron', '0' )
            UO.SetGlobal( 'Damned', '0' )
            UO.SetGlobal( 'Kreonit', '0' )
            UO.SetGlobal( 'Copper', '0' )
            UO.SetGlobal( 'Bronze', '0' )
            UO.SetGlobal( 'Walean', '0' )
            UO.SetGlobal( 'Golden', '0' )
            UO.SetGlobal( 'Silver', '0' )
            UO.SetGlobal( 'Oceanite', '0' )
            UO.SetGlobal( 'BloodRock', '0' )
            UO.SetGlobal( 'Sacred', '0' )
            UO.SetGlobal( 'Brilliant', '0' )
            UO.SetGlobal( 'Order', '0' )
            UO.SetGlobal( 'Chaos', '0' )
            UO.SetGlobal( 'Neutral', '0' )
            UO.SetGlobal( 'Stardust', '0' )
            UO.SetGlobal( 'Citadel', '0' )
            UO.SetGlobal( 'Plaster', '0' )
            UO.SetGlobal( 'Sandstone', '0' )
            UO.SetGlobal( 'Stone', '0' )
            UO.SetGlobal( 'Marble', '0' )
         Endif
      Endif
   Endif
   UO.SetGlobal( 'CountLineTextW', str( t ) )
endsub
;
Sub GetJournalMes( typ )
   VAR ms1, ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms9, i, s, d
   If typ == 'pickaxe' Then
      ms1 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining1' )
      ms2 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining2' )
      ms3 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining3' )
      ms4 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining4' )
      ms5 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining5' )
      ms6 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining6' )
      ms7 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining7' )
      ms8 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining8' )
      ms9 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Mining9' )
   Else
      ms1 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber1' )
      ms2 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber2' )
      ms3 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber3' )
      ms4 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber4' )
      ms5 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber5' )
      ms6 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber6' )
      ms7 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber7' )
      ms8 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber8' )
      ms9 = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Lamber9' )
   Endif
   If UO.InJournal( ms1 ) Then
      If typ == 'pickaxe' Then
         return 'Нет руды'
      Else
         return 'Нет логов'
      Endif
   Endif
   If UO.InJournal( ms2 ) Then
      return 'Не могу'
   Endif
   i = UO.InJournal( ms3 )
   If i Then
      If typ == 'pickaxe' Then
         s = UO.Journal( i - 1 )
         d = len( s )
         s = left( s, d - 13 )
         s = right( s, d - 25 )
         return s
      Else
         return UO.Journal( i - 1 )
      Endif
   Endif
   If UO.InJournal( ms4 ) Then
      return 'Физл'
   Endif
   If UO.InJournal( ms5 ) Then
      return 'Далеко'
   Endif
   If UO.InJournal( ms6 ) Then
      return 'Невозможно'
   Endif
   If UO.InJournal( ms7 ) Then
      return 'Не вижу'
   Endif
   If UO.InJournal( ms8 ) Then
      return 'Инструмент накрылся медным тазом'
   Endif
   If UO.InJournal( ms9 ) Then
      return 'Elemental!'
   Endif
   return ''
endsub
;
#================================================#
#  СТАНДАРТНЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ               #
#================================================#
;
Sub CheckCharEat( nom )
; Проверка сытости чара через команду .howmanyfood и подкормка медом
; если необходимо. Параметр - необходимый уровень сытости.
; В последующих версиях - питье эля если уровень превышен.
; Мед должен быть у чара в паке, его добор в этой функции не производится!
;
   DIM EatLevels[5]
   EatLevels[1] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'EatLevels1' )
   EatLevels[2] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'EatLevels2' )
   EatLevels[3] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'EatLevels3' )
   EatLevels[4] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'EatLevels4' )
   EatLevels[5] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'EatLevels5' )
   VAR i, tmpstr, j,
   VAR med = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Med' )
   For i = 1 To 5
      tmpstr = EatLevels[i]
      DeleteJournal( tmpstr )
   Next
   UO.SayU( '.howmanyfood' )
   wait(500)
   CheckLag()
   For i = 1 To 5
      tmpstr = EatLevels[i]
      If UO.InJournal( tmpstr ) Then
         j = i
      Endif
   Next
   ; итак, j - текущий уровень сытости чара
   If j == nom Then
      ; все ок
      return
   Endif
   If j > nom Then
      ; тут в будущем введем питие эля
   Endif
   If j < nom Then
      ; вот тут подкормка
      repeat
         tmpstr = EatLevels[j]
         DeleteJournal( tmpstr )
         UO.UseType( med )
         wait(500)
         CheckLag()
         UO.SayU( '.howmanyfood' )
         wait(500)
         CheckLag()
         If UO.InJournal( tmpstr ) == 0 Then
            ; вот и другое сообщение!
            j = j + 1
            If j == nom Then
               ; все ок. Съедим-ка, еще кусочек меда про запас
               UO.UseType( med )
               wait(500)
               CheckLag()
               return
            Endif
         Endif
      until j == 5
   Endif
endsub
;
Sub GetWord( st, nom )
; (c) Edred
; Возвращает слово из строки str за номером num
; если такого слова нет - возвращаем ''
;
; Разделителем слов считаем пробел. Несколько пробелов подряд считаются за один.
; Функция сделана без рекурсии специально для считывания слов из сверхдлинных строк!
;
   VAR tmpst, i, dlin, kol = 0, start = 0
   dlin = len( st )
   For i=0 To dlin - 1
      If mid( st, i, 1 ) == ' ' OR i == dlin - 1 Then
         kol = kol + 1
         If kol == nom Then
            ; это первый пробел после нужного нам слова
            tmpst = mid( st, start, i - start )
            return tmpst
         Else
            While mid( st, i, 1 ) == ' '
               i = i + 1
            Wend
            If kol == nom - 1 Then
               start = i
            Endif
         Endif
      Endif
   Next
   tmpst = ''
   return tmpst
endsub
;
; Реколл по руне в рунбуке. 
;
Sub Recalling( Runbk, NRune )
   ; Runbk - сериал или ссылка на объект рунбуки
   ; NRune - десятичный номер (текстом) руны для реколла
   VAR myx = UO.GetX()
   VAR myy = UO.GetY()
   VAR OldMana = UO.Mana
   VAR i = 0
   VAR fizzl = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonMessage', 'Fizzl' )
   DeleteJournal( fizzl )
   UO.Exec("recall " + Runbk + " " + NRune)
   repeat
      CheckLag()
      wait(1000)
      i = i + 1
   until ( i > 6 ) OR ( UO.Mana < OldMana - 8 ) OR UO.InJournal( fizzl )
   wait(500)
   If myx == UO.GetX() AND myy == UO.GetY() Then
      UO.WarMode( 'flip' )
      wait(100)
      UO.WarMode( 'flip' )
      Recalling( Runbk, NRune )
   Endif
endsub
;
; Удаляем указанную фразу из журнала
;
Sub DeleteJournal( string1 )
   VAR nom = UO.InJournal( string1 )
   If nom > 0 Then
      UO.SetJournalLine( Nom - 1, ' ' )
      DeleteJournal( string1 )
   Endif
endsub
;
; Проверка на лаги
; Идея - Savage
Sub CheckLag()
   DeleteJournal( 'backpack' )
   UO.Click( 'backpack' )
   repeat
      wait(100)
   until UO.InJournal( 'backpack' )
   return
end sub
;
;
Sub WriteSpace( nom )
   VAR str1, i
   str1 = ''
   If nom < 1 Then
      return str1
   endif
   for i = 1 to nom
      str1 = str1 + ' '
   next
   return str1
endsub
;
Sub Bandag()
   UO.SetArm('CWeapon')
   UO.Exec('bandageself')
   wait(300)
   UO.Arm('CWeapon')
endsub
;
Sub MoveStek( usep )
   ; сдвиг стека на 100 ячеек вниз
   VAR i, n, j = val( UO.GetGlobal( 'RazmerUseP' ) )
   for i = 101 to j
      n = i - 100
      usep[n] = usep[i]
   next
   UO.SetGlobal( 'RazmerUseP', str( j - 100 ) )
endsub
;
Sub GoHide()
   UO.WarMode( 0 )
   While not UO.Hidden()
      UO.UseSkill( 'Hiding' )
      Wait(4000)
   Wend
endsub
;
Sub RestoreChar( a )
   ; если параметр 0 - разовый подхилл чара
   ; если параметр 1 - подхилл до полного здоровья
   If a == 0 Then
      If UO.Count( UO.GetGlobal( 'Bandag' ) ) > 0 Then
         UO.Bandageself()
         wait( 300 )
      Endif
      return
   Endif
   If a == 1 Then
      If UO.Count( UO.GetGlobal( 'Bandag' ) ) > 0 Then
         While UO.Life < 150 AND UO.Count( UO.GetGlobal( 'Bandag' ) ) > 0
            UO.Bandageself()
            wait( 2000 )
         Wend
      Endif
      return
   Endif
endsub
;
Sub CorpseLoot( Cont )
   ; лутим из Cont
   DIM Nado[17]
   ; gold coin
   Nado[0]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Money' )
   ; cintrines
   Nado[1]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Cintrines' )
   ; pearls, black pearls
   Nado[2]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs0' )
   ; bood moss
   Nado[3]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs1' )
   ; garlic
   Nado[4]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs3' )
   ; ginseng
   Nado[5]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs4' )
   ; mandrake root
   Nado[6]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs2' )
   ; night shade
   Nado[7]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs5' )
   ; sulphorous ash
   Nado[8]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs6' )
   ; spiders silk
   Nado[9]  = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Regs7' )
   ; cut up leather
   Nado[10] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Cutleather' )
   ; leather
   Nado[11] = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Leather2' )
   ; руда (много)
   Nado[12] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp1' )
   ; руда (3 шт.)
   Nado[13] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp2' )
   ; руда (2 шт.)
   Nado[14] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp3' )
   ; руда (1 шт.)
   Nado[15] = UO.asmGetIniVar( 'mine&lumb.ini', 'MineParam', 'OreTyp4' )
   ; Логи
   Nado[16] = UO.asmGetIniVar( 'mine&lumb.ini', 'LamberParam', 'LogsTyp1' )   
   VAR i, typ
   VAR Scissor = UO.asmGetIniVar( 'mine&lumb.ini', 'CommonTypes', 'Scissor' )
   For i = 0 To 16
      UO.FindType( Nado[i], '-1', Cont )
      While UO.FindCount() > 0
         WriteLog( 'I loot of ' + UO.GetGraphic( 'finditem' ) + ' ' + UO.GetColor( 'finditem' ), 0 )
         If i == 11 Then
            UO.WaitTargetObject( 'finditem' )
            UO.UseType( Scissor )
            wait(500)
            CheckLag()
         Else
            UO.MoveItem( 'finditem' )
            wait(500)
            CheckLag()
         Endif
         UO.FindType( Nado[i], '-1', Cont )
      Wend
   Next
   WriteLog( 'The loot was finished', 0 )
endsub
;
Sub DropWeapon()
   UO.UnEquip( 'Lhand' )
   wait(500)
   UO.UnEquip( 'Rhand' )
   wait(500)
endsub
;
Sub GetWeapon( Fork, Shield )
   ; берем в руки оружие и щит. Динамические паузы и оптимитизация.
   If UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Shield Then
      If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork Then
         ; уже в руках все
         return
      Else
         ; надо взять в руки только оружие, щит не надо
         UO.Equipt( 'Rhand', Fork )
         repeat
            wait(100)
         until UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork
      Endif
   Else
      If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork Then
         ; в руках только оружие, надо еще щит взять
         UO.Equipt( 'Lhand', Shield )
         repeat
            wait(100)
         until UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Shield
      Else
         ; в руках нет ни оружия, ни щита
         UO.Equipt( 'Rhand', Fork )
         repeat
            wait(100)
         until UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork         
         UO.Equipt( 'Lhand', Shield )
         repeat
            wait(100)
         until UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Shield
      Endif
   Endif
endsub


Top
   
 Post subject:
PostPosted: 2006-04-23 19:12:13 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
третья, и последняя, часть файла

Code:
;
#================================================#
#  ПРОЦЕДУРЫ ХОЖДЕНИЯ                            #
#================================================#
;
; Процедура GoToTile( X, Y, D, T )
; X,Y: координаты точки назначения
; D: точность подхода (необходимое расстояние)
; T: строгость подхода (точно ли должно быть то расстояние... True/False)
;
; Установите в своем скрипте следующие глобальные переменные:
; -----------------------------------------------------------
; MovDelay  - Пауза между шагами. Обычное значение - '1000'
; MovNumber - Количество шагов при смене дислокации
; KoefEp    - Значение ширины угла хождения при определении направления.
;             Если на пути встречаются сложные и широкие препятствия -
;             увеличить. '0.172' - сбаланчированный.
#===================================================================#
; ============== GOTOTILE ===
;
Sub GoToTile( OX, OY, N, S )
   VAR myx, myy, MD, J
   VAR Lx1, Ly1
   VAR Lx2, Ly2
   VAR Sx, Sy
   VAR T
   VAR Des = N
   VAR MoveDelay = Val( UO.GetGlobal( 'MovDelay' ) )
   J = 1
   MD = MoveDelay * 1.5
   myx = uo.getx()
   myy = uo.gety()
   MoveOnce( GetDir( uo.getx(), uo.gety(), ox, oy), MD, False)
   If UO.GetGlobal( 'CheckHide' ) == '1' Then
      GoHide()
   Endif
   Sx = 0
   Sy = 0
   Lx1 = uo.getx() / 2
   Ly1 = uo.gety() / 2
   Lx2 = Lx1 / 2
   Ly2 = Ly1 / 2
   T = UO.Timer()
   If (GetDistance(ox, oy) <> N) OR ( (NOT S) AND GetDistance(ox, oy) > N ) Then
      UO.Exec('exec PermResend')
   EndIf
   While ( (GetDistance(ox, oy) <> N) OR ((NOT S) and GetDistance(ox, oy) > N) ) and ( OX >= 0 ) and ( OY >= 0 )
      WaitElem()
      If ( (UO.Timer() - T) * 15 > MoveDelay ) Then
         T = UO.Timer()
         ; UO.Print(Str(uo.getx())+' '+Str(uo.gety())+' '+Str(ox)+' '+Str(oy)+' '+Str(GetDir(uo.getx(),uo.gety(),ox,oy))+' '+Str(T))
         Lx2 = Lx1
         Ly2 = Ly1
         Lx1 = myx
         Ly1 = myy
         myx = uo.getx()
         myy = uo.gety()
      endIf
      MD=MoveDelay
      If ((OX-uo.getx())*(OX-uo.getx())+(OY-uo.gety())*(OY-uo.gety())>0) Then
         MD = MD * 3 / GetDistance( ox, oy )
      EndIf
      wait(MD)
      If GetDistance( OX, OY ) > Des Then
         MoveOnce(GetDir(uo.GetX(),uo.GetY(),ox,oy),MD,False)
         If UO.GetGlobal( 'CheckHide' ) == '1' Then
            GoHide()
         Endif
      Else
         If S Then
            If GetDistance(OX,OY)<Des Then
               If GetDistance(OX,OY)<>0 Then
                  MoveOnce(GetDir(ox,oy,uo.GetX(),uo.GetY()),MD,False)
                  If UO.GetGlobal( 'CheckHide' ) == '1' Then
                     GoHide()
                  Endif
               Else
                  MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD,False)
                  If UO.GetGlobal( 'CheckHide' ) == '1' Then
                     GoHide()
                  Endif
               EndIf
            EndIf
         EndIf
      EndIf
      WaitElem()
      If GetDistance(OX,OY)<>Des Then
         If (Lx2==uo.getx()) and (Ly2==uo.gety()) Then
            If (Sx<>uo.getx()) or (Sy<>uo.gety()) Then
               J=1
            EndIf
            J=J+1
            UO.Resend()
            Sx = uo.getx()
            Sy = uo.gety()
            Stun(ox,oy,J)
         EndIf
      EndIf
   Wend
   UO.Exec( 'terminate PermResend' )
endsub
;
; ============ MOVEONCE ===
; Процедура MoveOnce - хождение в определённую сторону
; Направления:
; Система направлений по клавишам Нумпада
; 8 = 1 | 2 = -1
; 9 = 2 | 1 = -2
; 6 = 3 | 4 = -3
; 3 = 4 | 7 = -4
;
; Такая система позволяет с лёгкостью получать направление, обратное
; данному...
;
Sub MoveOnce( Dir, Del, Rev )
   VAR Num
   Var MoveNumber = Val( UO.GetGlobal( 'MovNumber' ) )
   If Rev Then
      Num = MoveNumber + 1
   Else
      Num = MoveNumber
   EndIf
   If ( Num > 0 ) and ( Dir <> 0 ) Then
      If Dir == 1 Then
         UO.Press( 38, Num, Del )
      EndIf
      If Dir == 2 Then
         UO.Press( 33, Num, Del )
      EndIf
      If Dir == 3 Then
         UO.Press( 39, Num, Del )
      EndIf
      If Dir == 4 Then
         UO.Press( 34, Num, Del )
      EndIf
      If Dir == -1 Then
         UO.Press( 40, Num-1, Del )
      EndIf
      If Dir == -2 Then
         UO.Press( 35, Num, Del )
      EndIf
      If Dir == -3 Then
         UO.Press( 37, Num, Del )
      EndIf
      If Dir == -4 Then
         UO.Press( 36, Num, Del )
      EndIf
      If Rev Then
         If Dir <> -1 Then
            UO.Press( 40, 1, Del )
         EndIf
      EndIf
   EndIf
endsub
;
; ============== GETDIR ===
; Функция GetDir возвращает направление, по которому надо идти
; к координате
;
Sub GetDir( myx, myy, ox, oy )
   VAR I, J
   J = 0
   VAR X = ox - myx
   VAR Y = oy - myy
   I = GetQDir( Abs(X), Abs(Y) )
   If X >= 0 Then
      If Y >= 0 Then
         If I == 1 Then
            J = -2
         Else
            If I == 2 Then
               J = -1
            Else
               If I == 3 Then
                  J = 4
               EndIf
            EndIf
         EndIf
      Else
         If I == 1 Then
            J = 2
         Else
            If I == 2 Then
               J = 3
            Else
               If I == 3 Then
                  J = 4
               EndIf
            EndIf
         EndIf
      EndIf
   Else
      If Y >= 0 Then
         If I == 1 Then
            J = -2
         Else
            If I == 2 Then
               J = -3
            Else
               If I == 3 Then
                  J = -4
               EndIf
            EndIf
         EndIf
      Else
         If I == 1 Then
            J = 2
         Else
            If I == 2 Then
               J = 1
            Else
               If I == 3 Then
                  J = -4
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
   RETURN J
endsub
;
; =============== GETQDIR ===
;
;
Sub GetQDir( x, y )
   VAR Ep = Val( UO.GetGlobal( 'KoefEp' ) )
   VAR J = 0
   If X == 0 Then
      J = 1
   Else
      If ( Y / X ) < Ep Then
         J = 3
      Else
         If ( X / Y ) < Ep Then
            J = 1
         Else
            J = 2
         EndIf
      EndIf
   EndIf
   RETURN J
endsub
;
; ============== GETDISTANCE ===
; Функция GetDistance возвращает расстояние до координат
; (как UO.GetDistance - до объекта)
;
; Почему так - потому что учим математику :)
;
Sub GetDistance( X, Y )
   VAR A, B, C
   A = abs( X - UO.GetX() )
   B = abs( Y - UO.GetY() )
   If A > B Then
      C = A
   Else
      C = B
   EndIf
   Return C
endsub
;
; ============= PERP ===
; Функция Perp возвращает направление, перпендикулярное введённому
;
Sub Perp( Dir )
   VAR D = Dir
   If Dir == 1 Then
      D = 3
   EndIf
   If Dir == 2 Then
      D = 4
   EndIf
   If Dir == 3 Then
      D = -1
   EndIf
   If Dir == 4 Then
      D = -2
   EndIf
   If Dir == -1 Then
      D = -3
   EndIf
   If Dir == -2 Then
      D = -4
   EndIf
   If Dir == -3 Then
      D = 1
   EndIf
   If Dir == -4 Then
      D = 2
   EndIf
   RETURN D
endsub
;
; =============== STUN ===
; Обход препятствий
;
Sub Stun( X, Y, N )
   VAR I
   VAR myx
   VAR myy
   VAR MoveDelay = Val( UO.GetGlobal( 'MovDelay' ) )
   myx = uo.getx()
   myy = uo.gety()
   For I=1 to N
      MoveOnce(perp(GetDir(myx,myy,x,y)),MoveDelay,False)
      If UO.GetGlobal( 'CheckHide' ) == '1' Then
         GoHide()
      Endif
   Next
   Wait(MoveDelay)
   UO.Resend()
   If (myx==uo.getx()) and (myy==uo.gety()) Then
      For I=1 to N
         MoveOnce(-perp(GetDir(myx,myy,x,y)),MoveDelay,False)
         If UO.GetGlobal( 'CheckHide' ) == '1' Then
            GoHide()
         Endif
      Next
      Wait(MoveDelay)
      UO.Resend()
   EndIf
   If (myx==uo.getx()) and (myy==uo.gety()) Then
      For I=1 to N
         MoveOnce(-GetDir(myx,myy,x,y),MoveDelay,False)
         If UO.GetGlobal( 'CheckHide' ) == '1' Then
            GoHide()
         Endif
      Next
      Wait(MoveDelay)
      Stun(x,y,N)
   EndIf   
endsub
;
; ============= ABS ===
; Убирает знак минуса в отрицательных числах
;
Sub abs( a )
   VAR b
   If a < 0 Then
      b = -a
   Else
      b = a
   endif
   return b
endsub
;
; ============== PERMRESEND ===
;
Sub PermResend()
   Var Mn = 9
   VAR MoveDelay = Val( UO.GetGlobal( 'MovDelay' ) )
   Repeat
      UO.Resend()
      Wait( MoveDelay * Mn )
   Until ( 1 > 2 )
endsub


Top
   
 Post subject:
PostPosted: 2006-04-23 19:13:56 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Излишне, я думаю, говорить, что прежде чем использовать этот скрипт, вам надо все-таки дождаться последней версии ASM-а. Но, в ближ дни она будет, я практически уверен в этом.


Top
   
 Post subject:
PostPosted: 2006-04-28 22:18:29 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Вот вам, исключительно для тестов:
http://vlad.nagorniy.ru/Edred/asm_505_11_se.rar

Кроме того, наиболее устойчивая версия инжекта (все мои скрипты могут работать с этой версией:
http://vlad.nagorniy.ru/Edred/Injection_312_19.rar


Top
   
 Post subject:
PostPosted: 2006-04-28 22:22:57 
Offline

Joined: 2005-06-12 22:12:15
Posts: 247
ne skript, a prosto monstr kakojto :)


Top
   
 Post subject:
PostPosted: 2006-04-28 22:33:13 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
dmitrykit wrote:
ne skript, a prosto monstr kakojto :)


Нормальный скрипт, всего-то 3000 строк кода. Ну и на дельфи около 100 примерно, но там только менюшка... Зато все настройки в ини-файле, не надо постоянно скрипт редактировать. Если играешь на разных шардах, обычно используешь пару копий инжекта, файл ини лежит в корне папки инжекта, соответственно, можно использовать разные настройки под разные шарды, а скрипт запускать из одной папки... Очень удобно.


Top
   
 Post subject:
PostPosted: 2006-04-28 22:47:05 
Offline

Joined: 2005-06-12 22:12:15
Posts: 247
mne boljshe nravicca 10 strok na perle:
use config::tiny;
$config = config::tiny->new;

my $chetotama=$config{'chetotama'};


Top
   
 Post subject:
PostPosted: 2006-04-29 00:48:45 
Offline
User avatar

Joined: 2006-03-24 02:40:24
Posts: 32
Location: Odintsovo, Russia
Edred wrote:
Вот вам, исключительно для тестов:
http://vlad.nagorniy.ru/Edred/asm_505_11_se.rar

Кроме того, наиболее устойчивая версия инжекта (все мои скрипты могут работать с этой версией:
http://vlad.nagorniy.ru/Edred/Injection_312_19.rar


Сенкс, потестим.
А что там нового в новой версии?

_________________
Qui quaerit, reperit


Top
   
 Post subject:
PostPosted: 2006-04-29 22:58:03 
Offline

Joined: 2006-03-10 19:24:12
Posts: 30
блин когда поставил асм, у меня инжа выдает ошибку UO client performed an unrecoverable invalid operation. Terminate?

Подскажите как это исправить???


Top
   
 Post subject:
PostPosted: 2006-04-30 00:26:19 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
В инжекте на закладке Main включить No hung message


Top
   
 Post subject:
PostPosted: 2006-04-30 09:21:37 
Offline

Joined: 2006-03-10 19:24:12
Posts: 30
галочка стоит, меня крашит как только на ярлык лаунчера жму, даже картинка куда акк и пасс надо вводить не успевает грузануться


Top
   
 Post subject:
PostPosted: 2006-04-30 13:49:46 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
У меня такое было давно из-за АСМа. Переустановил, стало нормально работать.


Top
   
 Post subject:
PostPosted: 2006-04-30 15:01:44 
Offline

Joined: 2006-03-10 19:24:12
Posts: 30
переустановка не помогла(


Top
   
 Post subject:
PostPosted: 2006-04-30 19:32:56 
Offline
User avatar

Joined: 2006-03-24 02:40:24
Posts: 32
Location: Odintsovo, Russia
Edred wrote:
Нормальный скрипт, всего-то 3000 строк кода. Ну и на дельфи около 100 примерно, но там только менюшка... Зато все настройки в ини-файле, не надо постоянно скрипт редактировать. Если играешь на разных шардах, обычно используешь пару копий инжекта, файл ини лежит в корне папки инжекта, соответственно, можно использовать разные настройки под разные шарды, а скрипт запускать из одной папки... Очень удобно.


Переделываю под свой шард.
Выбрал обкопку, не работает:
UO.asmWaitTargetStaticTile( 'rock', PointX, PointY, 0 )
UO.asmWaitTargetMapTile( 'rock', PointX, PointY, 0 )
Всегда возвращает 0, дат файлы открывает, по крайней мере если удаляешь, то ругается. Не пойму в чем проблема, пробывал варианты с опцией WTMTUnderMap - все равно возвращает ноль.

_________________
Qui quaerit, reperit


Top
   
 Post subject:
PostPosted: 2006-04-30 23:24:17 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Кинь в личку информацию по шарду и номер своей аськи. Завтра вечером буду все равно тестить последнюю длл, заодно и с твоей ситуацией разберемся.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 203 posts ]  Go to page Previous 14 5 6 7 811 Next

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 18 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited