Часть кода содрана у Эдреда.
Code:
; Мининг в Миноке(mtKendalt), Oscom Opay.Чар - гном с мифриловой киркой. В паке ничего кроме кирки не носим.
; Вкачать stealth, hide, anatomy, healing. Иметь побольше магии.
; Копает руду, бегает к банку, из банка реколится домой.
; Запускаем либо в шахте, либо дома.
; У входа в пещеру маркаем штук 8-20 рун.
; Дома ставим два сундука(сумки), один для руды, во второй кладём замарченные
; руны, обязательно стейки(голодный чар быстро вылетает из хайда), реагенты на
; реколл. Маркаем несколько рун возле сундука, эти руны пойдут в банк.
; Опустошаем банк чара. закладываем туда 6-12 рун домой, около 600-800 бинтов,
; около 600 регов на реколл.
; Чтобы получить %BankID, подходим к банку, кричим
; bank, ждем когда он откроется и копируем переменную #CONTID из закладки
; Container Info в палени информации самой EasyUO.
; Чтобы узнать ИД сундука, открываем сундук (дабл клик на него), и смотрим
; либо #CONTID , либо из Last Action #LOBJECTID. Они должны совпадать.
;
; this must be modyfied
; нижележащие данные подстраиваются под каждого персонально
;=====================================================================
;=====================================================================
set %OreBag TVUFMMD ;ИД сундука, куда скидываем руду
set %regBag CTZNNMD ;Ид сумки с регами и рунками
set %BankID XLQCPMD ;ИД банковского контейнера
set %xHome 1703 ;координата Х возле сундука дома
set %yHome 2002 ;координата Y возле сундука дома
;=====================================================================
;=====================================================================
set #LPC 10000
initevents
event macro 8 2 ; открыть статус если закрыт
event macro 8 7 ; открыть бекпак если закрыт
ignoreItem reset 1
set %oreType . 1 DWJ
set %oreType . 2 EWJ
set %oreType . 3 GWJ
set %oreType . 4 TVJ
set %MythColor 1936
set %nothing _@C4K ; тут не осталось руды
set %far _>BAN40 ; это слишком далеко отсюда
set %try dig here
set %cannot _4>1K20BL_@C4C ; попробуйте добывать руду из валунов или В ШАХТЕ! _2_HOEB5!
set %noline Wow! ;You_have_no_line
set %cannot2 _=5_4>BO=CBLAO ; вам до туда не дотянуться
set %attacking is_attacking_you
set %decide dig_here
set %put in_your_pack.
set %loosen _:0<=59 ; Раздолбив несколько камней
set %fignya _:0<=59 ; "вы не смогли выкопать ничего стоющего"
set %battle _=5_4>_MB>3> ;You_are_preoccupied_with_thoughts
set %VyNeMojete K_=5_<>65B5_ ; Вы не можете медитировать\хайдиться в режиме войны
;
set %MaxTime4Mes 20 ; Максимум сколько ждать сообщений в секундах
set %MaxPointIteration 10 ; сколько раз получать сообщение "ничего стоющего"
;
set %RunOn Always_Run_is_now_on.
set %RunOff Always_Run_is_now_off.
;
set %mSpirit GI ;AngryMountainSPirit type
set %line _
set %OreType1 DWJ_EWJ_GWJ_TVJ
;set %cntghost 0
set %RuneType QWL
set %miningPointRail . 1 2558_496 ;точки в ещере, где чар окапывается
set %miningPointRail . 2 2562_489
set %miningPointRail . 3 2567_482
set %miningPointRail . 4 2570_484
set %miningPointRail . 5 2576_481
set %miningPointRail . 6 2571_478
set %miningPointRail . 7 2576_476
; Головная процедура:
event SysMessage Script started...
set %PointNumber 1
set %SayGuard 0
;если чар стартует дома
If #charposX >= ( %xHome - 3 ) && #charposX <= ( %xHome + 3 ) && #charposY >= ( %yHome - 3 ) && #charposY <= ( %yHome + 3 )
goto AlreadyHome
; чар стартует в пещёре
main:
set %SpiritHere #false
If %PointNumber > 7
set %PointNumber 1
event SysMessage pointnumber= %PointNumber %miningPointRail . %PointNumber
;gosub ChangeRun 1
gosub FindSpirit
If %SpiritHere = #true
goto GoHome
gosub Hide
gosub _pathFind 2559 496 0 0 ; в пещере у входа
gosub FindSpirit
If %SpiritHere = #true 2
goto GoHome
gosub Hide
gosub _pathFind 2566 485 0 0 ; идем в центр пещеры
gosub FindSpirit
If %SpiritHere = #true 2
goto GoHome
gosub Hide
gosub ChangeRun 0
nextPoint:
gosub GotoRail %miningPointRail . %PointNumber 1 0 ; из центра идем в точку номер pointNumber
gosub MineAround
set %PointNumber %PointNumber + 1
;gosub FindSpirit
;If %SpiritHere = #true 2
; goto GoHome
if #result = 0 ; чара писдят
{
event SysMessage Сдох или почти умер! Бежим к банку!
gosub DetermAttackingType ; если нас атаковал человек, кричим гвард по пути к банку.
}
if #result = 1
{
event SysMessage Обкопались в этой точке.
If #weight < 250 ; перевес или выкопал все нахуй
{
event SysMessage Идем к следующей ; перевес или выкопал все нахуй
GoTo nextPoint
If %PointNumber > 7
set %PointNumber 6
set %PointNumber %PointNumber + 1
}
event SysMessage Идем к банку
}
If #result = 3
{
event SysMessage Нашли миф! Бежим выкладывать в банк!
}
GoHome:
gosub ChangeRun 1
if %Spirithere = #true
gosub _pathFind 2552 502 0 %SayGuard
else
gosub _pathFind 2559 496 0 %SayGuard
gosub GoToBank %SayGuard
set %SayGuard 0
gosub HealNearBank
If #weight < 250 && #charGhost = NO && %PointNumber < 8 && %SpiritHere = #false
{
For %oreN 1 4
{
repeat
finditem %oreType . %oreN C_ , #backpackID
if #findCol = %MythColor
{
exevent drag #findid
exevent dropc %bankID
wait 10
}
else
ignoreItem #findID 2
until #findCnt < 1
}
ignoreItem reset 2
set %PointNumber %PointNumber - 1
gosub FromBankToCave
goto main
}
Ghost:
if #charghost = YES
{
event SysMessage We are dead ... Go to healer...
gosub GotoHealer
event SysMessage Пытается реснуться
gosub ResChar
event SysMessage Идем к банку лечиться
gosub GotoFromHealerToBank
event SysMessage Лечимся у банка
gosub HealNearBank
If %SpiritHere = #true
goto RecallHome
If %PointNumber > 7
goto RecallHome
event SysMessage Go to Cave...
gosub FromBankToCave
Goto Main
}
RecallHome:
gosub RecallFrombank
if #CHARGHOST = YES
goto Ghost
gosub OreUnload
if %SpiritHere = #true 2
event sysmessage Awaiting while somebody kill the SPIRIT.
wait 1800s
if %PointNumber > 7
{
wait 1800s
set %pointNumber 1
}
AlreadyHome:
gosub RecallToCave
goto main
;#################### END OF MAIN PROCEDURE ############################
sub GotoBank
set %SayGFlag %1
gosub _pathFind 2538 501 30 %SayGFlag ; средина моста
gosub _pathFind 2529 518 0 %SayGFlag ; угол здания
gosub _pathFind 2530 535 0 %SayGFlag ; не доходя банка
gosub _pathFind 2515 544 0 %SayGFlag ; не доходя банка
gosub _pathFind 2513 551 0 %SayGFlag ; банк
return
sub GotoHealer
gosub _pathFind 2530 564 0 0
gosub _pathFind 2546 575 0 0
gosub _pathFind 2555 586 0 0
gosub _pathFind 2565 595 0 0
gosub _pathFind 2576 597 0 0
return
sub GotoFromHealerToBank
gosub _pathFind 2565 595 0 0
gosub _pathFind 2555 586 0 0
gosub _pathFind 2546 575 0 0
gosub _pathFind 2530 564 0 0
gosub _pathFind 2513 551 0 0
return
sub FromBankToCave
gosub _pathFind 2515 544 0 0
gosub _pathFind 2530 535 0 0
gosub _pathFind 2529 518 0 0
gosub _pathFind 2542 501 30 0
;gosub _pathFind 2559 496 0 0 ; в пещере у входа
return
;###############################################################################################
;###################### FIND THE SPIRIT #############################
;###############################################################################################
sub FindSpirit
finditem GI G_
If #findCnt > 0
{
event Sysmessage SPIRIT IS OUT HERE!
set %SpiritHere #true
}
return
;###############################################################################################
;###################### RECALL TO CAVE #############################
;###############################################################################################
sub RecallToCave
gosub Peace
while #mana < #maxmana
{
set %jrnl #jindex
event macro 13 46
; for %i %jrnl #jindex
; {
; scanjournal %i
; if %VyNeMojete in #journal
; {
; deletejournal
; event macro 6 0
; wait 4
; break
; }
; }
wait 2s
}
set #LObjectID %RegBag
event Macro 17
wait 1s
gosub Eating
Gosub RecallFromCont %RegBag
return
;###############################################################################################
;###################### EATING #############################
;###############################################################################################
; кушаем пока не нажремся
sub Eating
set %steak HND
gosub moveitems %regBag #backpackID %steak 30
repeat
finditem %steak C_ , #backpackID
set #LObjectID #findid
event Macro 17
set %MessageFlag 0
set %jrnl #jindex
wait 12
for %i %jrnl #jindex
{
scanjournal %i
if are_stuffed! in #journal || are_simply_too_full in #journal
{
set %MessageFlag 1
break
}
}
until %MessageFlag = 1
finditem %steak C_ , #backpackID
exevent drag #findid #findStack
exevent dropc %regBag
wait 1s
return
;###############################################################################################
;###################### HIDDING #############################
;###############################################################################################
sub GoHide
;event sysmessage HIDING...
if #CHARGHOST = yes
return
gosub Peace
while H notIn #charstatus
{
set %H_jrnl #jindex
;event sysmessage event macro HIDING....
event macro 13 21
set %H_MesFlag 0
set %StartTime #scnt + 5
repeat
{
if #scnt > %StartTime
break
; set %H_jrnl #jindex
While #charname = N/A
wait 1s
wait 6
If #CharGhost = YES || #hits < #maxhits - 10
return
for %H_i %H_jrnl #jindex
{
scanjournal %H_i
if You_have_hidden in #journal
return
if _A:@KBLAO in #journal
{
set %H_MesFlag 1
break
}
if %VyNeMojete in #journal
{
event macro 6 0
event sysmessage WARMODE OFF
wait 2
;deletejournal
; wait 10
set %H_MesFlag 1
break
}
}
}
until %H_MesFlag = 1
}
return
;###############################################################################################
;###################### PATHFINDING #############################
;###############################################################################################
; _pathFind X Y Z sayGuards [0/1]
sub _pathFind
set %_gotoX %1
set %_gotoY %2
set %_gotoZ %3
set %SayGuardFlag %4
set %_gotoxMin %1 - 2
set %_gotoxMax %1 + 2
set %_gotoyMin %2 - 2
set %_gotoyMax %2 + 2
repeat
{
While #charname = N/A
wait 1s
event PathFind %_gotoX %_gotoY %_gotoZ
wait 1s
If %SayGuardFlag = 1 && #charghost = NO
msg Guard $
}
until #charposx <= %_gotoxMax && #charposx >= %_gotoxMin && #charposy >= %_gotoyMin && #charposy <= %_gotoyMax
return
sub CheckConnect
; If ( #contSize = 203_121 ) && ( #contName = waiting_gump )
; {
; Call TheUnseenPowerRelog.txt
; If ! #Result
; Halt
; }
return
;###############################################################################################
;###################### RESSURECTION #############################
;###############################################################################################
sub ResChar
; Ресаем чара с креста и восстанавливаем ему здоровье спирит спиком
while #charghost = YES
{
While #charname = N/A
wait 1s
event macro 6 0
wait 1s
msg Ress $
wait 1s
}
set %cntghost %cntghost + 1
event macro 8 1 ; открыть папердолл если закрыт
event macro 8 2 ; открыть статус если закрыт
event macro 8 7 ; открыть бекпак если закрыт
return
;###############################################################################################
;###################### RECALL FROM BANK #############################
;###############################################################################################
sub RecallFromBank
While #charname = N/A
wait 1s
if #CHARGHOST = yes
return
if G in #charStatus
{
event macro 6 0
wait 1s
}
repeat
msg Bank $
wait 1s
until #CONTID = %BankID
For %oreN 1 4
{
repeat
finditem %oreType . %oreN C_ , %bankID
exevent drag #findid
exevent dropc #backpackID
wait 10
until #findCnt < 1
}
gosub RecallFromCont %BankID
return
;###############################################################################################
;###################### HEALING #############################
;###############################################################################################
sub Healing
While #charname = N/A
wait 1s
while #charGhost = NO && #hits < #maxhits && #charName <> N/A
{
finditem ZLF C_ , #backpackID
if #findCnt < 1 2
event Sysmessage no bandages found
return
set #lObjectID #findID
event Macro 17 0
target 5S
event Macro 23 0
set %MessageFlag 0
set %CurTime4Mes 0
repeat
set %jrnl #jindex
wait 1s
set %CurTime4Mes %CurTime4Mes + 1
if %CurTime4Mes >= %MaxTime4Mes
break
for %i %jrnl #jindex
{
scanjournal %i
if attacking_you in #journal
msg Guards $
if _see_the_target in #journal || _A>2A5<_=5_ in #journal || _<C<8N? in #journal || _bloody_bandages_2_backpack in #journal || _bloody_bandage_2_backpack in #journal
{
set %MessageFlag 1
break
}
}
until %MessageFlag = 1
}
return
;###############################################################################################
;###################### HEAL NEAR BANK #############################
;###############################################################################################
sub HealNearBank
repeat
if #charGhost = YES
return
msg Bank $
wait 1s
event SysMessage #CONTID
until #CONTID = %BankID
If #hits < #maxhits 2
gosub moveItems %bankID #backpackID ZLF 20
gosub healing
finditem ZLF C_ , #backpackID
exevent drag #findid #findStack
exevent dropc %bankID
wait 1s
return
;###############################################################################################
;###################### ORE UNLOAD #############################
;###############################################################################################
sub OreUnLoad
;ignoreItem reset 2
While #CharName = N/A
wait 1s
OpenCont:
set #LObjectID %OreBag
event Macro 17
wait 1s
For %oreN 1 4
{
repeat
finditem %oreType . %oreN C_ , #backpackID
exevent drag #findid #findstack
wait 5
exevent dropc %OreBag
repeat
finditem #findID C_ , #backpackID
until #findCnt < 1
finditem %oreType . %oreN C_ , #backpackID
until #findCnt < 1
}
return
;###############################################################################################
;###################### RECALL FROM CONTAINER #############################
;###############################################################################################
; грузим по одному регу, контейнер должен быть открыт!
; проверяем рунку и летим по ней. просранные рунки игнорим
sub RecallFromCont
event macro 8 7 ; открываем бекпак
set %_ContID %1
set %RuneType QWL
set %regType . 1 JUF
set %regType . 2 MZF
set %regType . 3 KUF
findNewRune:
finditem %RuneType C_ , %_ContID
if #findCnt = 0 2
event SysMessage Can't find rune to home...
halt
set %RuneToHome #findID
set %charposx #charposx
set %charposy #charposy
While #CharName = N/A
wait 1s
recall:
gosub Peace
If #mana < 14
{
while #mana < 14
{
set %jrnl #jindex
event macro 13 46
for %i %jrnl #jindex
{
scanjournal %i
if %VyNeMojete in #journal
{
event macro 6 0
event sysmessage WARMODE OFF
deletejournal
; wait 10
set %H_MesFlag 1
break
}
}
wait 2s
}
}
For %regN 1 3 ;подгружаем по одному регу
gosub moveItems %_ContID #backpackID %regType . %regN 1
set %scnt #scnt + 4
set %scnt2 #scnt + 10
set #ltargetKind 1
event macro 15 31
target 5s
set #ltargetid %RuneToHome
event macro 22 0
set #result 0
repeat
set %jStart #jIndex
wait 6
set %jEnd #jindex
for %_jindex %jStart %jEnd
{
scanjournal %_jIndex
if has_faded in #journal
{
ignoreItem %RuneToHome 1
event sysmessage rune has faded
set #result 1
break
}
}
if ( #charposx <> %charposx || #charposy <> %charposy ) && #scnt > %scnt
set #result 3
if ( #charposx = %charposx && #charposy = %charposy ) && #scnt > %scnt2 2
event sysmessage recall failed. trying again.
set #result 2
until #result <> 0
if #result = 1
goto findNewRune
if #result = 2
goto Recall
return
; Usage: gosub moveItems sourceContainer targetContainer [itemTypes]
sub moveItems
set !items %3
if %0 < 3
set !items *
set !from %1
set !to %2
set %_needCnt %4
if %4 = N/A
%_needCnt = #findcnt
finditem !items C_ , #backpackID
If #findStack >= %_needCnt
return
While #CharName = N/A
wait 1s
TryAgain:
finditem !items C_ , !from
exevent drag #findid %_needCnt
exevent dropc !to
wait 1s
finditem !items C_ , !to
If #findStack < %_needCnt
goto TryAgain
return
; возвращает один, если нас атаковал человек и ноль если не человек
sub DetermAttackingType
finditem #enemyID G
If #findtype = IS || #findtype = HS
{
event sysmessage Нас атакует человек...
set %sayGuard 1
}
return
sub MineAround
; Обкопка вокруг чара
; Возвращает:
; 0 - чар под атакой
; 1 - все выкопано или перевес
; 3 - выкопал миф
if #charghost = YES || #hits < #maxhits
return 0
for %minex -4 4
{
for %miney -4 4
{
set %FinishFlag 1
set %CountIteration 0
repeat
{
While #CharName = N/A
wait 1s
if #charghost = YES || #hits < #maxhits
return 0
if #weight >= #MaxWeight - 40 ; MAX WEIGHT
return 1
gosub GoHide
if #charghost = YES || #hits < #maxhits
return 0
if G in #charStatus
{
event macro 6 0
wait 1s
}
;set %jrnl #jindex
finditem NPF_WTH_QPF
set #lobjectid #findid
; set %jrnl #jindex
event macro 17 0
if #charghost = YES || #hits < #maxhits
return 0
set #ltargetkind 3
set #ltargetx #charposx + %minex
set #ltargety #charposy + %miney
target 2s
event macro 22 0
if #charghost = YES || #hits < #maxhits
return 0
; сканируем журнал в поисках сообщений:
set %MessageFlag 0
set %CurTime4Mes 0
repeat
{
set %jrnl #jindex
wait 8
set %CurTime4Mes %CurTime4Mes + 1
if %CurTime4Mes >= %MaxTime4Mes
{
set %FinishFlag 1
break
}
for %i %jrnl #jindex
{
scanjournal %i
if %decide in #journal
{
wait 3s
set %MessageFlag 1
break
}
if #hits < #maxhits - 10 || #charghost = YES ;%attacking in #journal ||
return 0
if Mytheril_Ore in #journal
{
event sysmessage Mytheril Ore founded...
return 3
}
if %nothing in #journal || %far in #journal || %try in #journal || %cannot in #journal || %noline in #journal || %cannot2 in #journal
{
set %FinishFlag 0
set %MessageFlag 1
break
; _have_been_revealed in #journal ||
}
if %put in #journal
{
if Mytheril_Ore in #journal
{
event sysmessage Mytheril Ore founded...
return 3
}
set %MessageFlag 1
break
}
if %loosen in #journal || %fignya in #journal
{
set %CountIteration %CountIteration + 1
if %CountIteration >= %MaxPointIteration
{
set %FinishFlag 0
wait 20s
}
else
set %FinishFlag 1
set %MessageFlag 1
break
}
}
}
until %MessageFlag = 1
}
until %FinishFlag = 0
}
}
return 1
sub ChangeRun
; Смена Always Run в зависимости от параметра.
; 0 - выключить Always Run
; 1 - включить Always Run
set %RunFlag %1
set %jrnl #jindex
event macro 32 0
wait 4
for %i %jrnl #jindex
{
scanjournal %i
if %RunOn in #journal && %RunFlag = 0
{
event macro 32 0
break
}
if %RunOff in #journal && %RunFlag = 1
{
event macro 32 0
break
}
}
return
Sub GotoRail
; %1 - маршрут
; %2 - направление (1 - прямое, 0 - обратное)
; %3 - вызывать гвардов в узловых точках или нет (есл здоровья меньше максимума -10)
set %rail %1
set %direct %2
set %guard %3
set %tolerant 1
set %timeout 60s
set %line _
if %direct = 0
{
; вывернем "наизнанку" маршрут %rail
set %railback
set %nstep 1
repeat
{
gosub GetWord %rail %nstep
set %myx #result
set %nstep %nstep + 1
gosub GetWord %rail %nstep
set %myy #result
if %myx <> %line && %myy <> %line
{
str Len %railback
if #strRes <> 0
set %railback %myx , %line , %myy , %line , %railback
else
set %railback %myx , %line , %myy
}
set %nstep %nstep + 1
}
until %myx = %line || %myy = %line
set %rail %railback
}
set %nstep 1
repeat
{
gosub GetWord %rail %nstep
set %myx #result
set %nstep %nstep + 1
gosub GetWord %rail %nstep
set %myy #result
event sysmessage %myx %myy
if %myx <> %line && %myy <> %line
{
if %guard = 1 && #hits < #maxhits - 10 && #charghost = NO
{
msg guards $
wait 2
}
move %myx %myy %tolerant %timeout
set %nstep %nstep + 1
}
else
{
return
}
}
until %myx = %line || %myy = %line
return
Sub GetWord
; (c) Edred
; Возвращает слово из строки str (первый параметр) за номером
; num (второй параметр), слова должны быть разделены _
; если такого слова нет - возвращаем _
; Пример 1111_2222_3333_4444
; считаем параметры в переменные
set %str %1
set %num %2 - 1
if %num > 0
{
; установим возврат в _
set %ret _
; запомним длину строки
str Len %str
set %len #strRes
; определим количество подчеркиваний
str Count %str _
set %cnt #strRes
; если их меньше чем заказано - вернуть пустую строку
if %num > %cnt
return %ret
; найдем нужное подчеркивание и следующая позиция - начало
str Pos %str _ %num
set %start #strRes + 1
}
else
{
set %start 1
}
; увеличим счетчик подчеркиваний на 1
set %num %num + 1
; если это больше макс числа - значит до конца строки
if %num > %cnt
{
set %fin %len - %start + 1
str Mid %str %start %fin
}
else
{
; иначе считаем до предыдущей позиции
str Pos %str _ %num
set %num #strRes - 1
set %fin %num - %start + 1
str Mid %str %start %fin
}
set %ret #strRes
return %ret
sub Hide
gosub Peace
if H notIn #charstatus
{
set %H_jrnl #jindex
event macro 13 21
for %H_i %H_jrnl #jindex
{
scanjournal %H_i
if %VyNeMojete in #journal
{
event macro 6 0
event sysmessage WARMODE OFF
event macro 13 21
return
}
}
}
return
sub Peace
if G in #charstatus
event macro 6 0
return