Yoko

All sides of Injection
It is currently 2024-04-19 14:30:51

All times are UTC+02:00




Post new topic  Reply to topic  [ 203 posts ]  Go to page Previous 1 2 3 4 511 Next
Author Message
 Post subject:
PostPosted: 2006-03-13 17:15:35 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
файл Resource_Map.dat

Code:
0x00dc=rock
0x00dd=rock
0x00de=rock
0x00df=rock
0x00e0=rock
0x00e1=rock
0x00e2=rock
0x00e3=rock
0x00e4=rock
0x00e5=rock
0x00e6=rock
0x00e7=rock
0x00e8=rock
0x00e9=rock
0x00ea=rock
0x00eb=rock
0x00ec=rock
0x00ed=rock
0x00ee=rock
0x00ef=rock
0x00f0=rock
0x00f1=rock
0x00f2=rock
0x00f3=rock
0x00f4=rock
0x00f5=rock
0x00f6=rock
0x00f7=rock
0x00f8=rock
0x00f9=rock
0x00fa=rock
0x00fb=rock
0x00fc=rock
0x00fd=rock
0x00fe=rock
0x00ff=rock
0x0100=rock
0x0101=rock
0x0102=rock
0x0103=rock
0x0104=rock
0x0105=rock
0x0106=rock
0x0107=rock
0x0108=rock
0x0109=rock
0x010a=rock
0x010b=rock
0x010c=rock
0x010d=rock
0x010e=rock
0x010f=rock
0x0110=rock
0x0111=rock
0x0112=rock
0x0113=rock
0x0114=rock
0x0115=rock
0x0116=rock
0x0117=rock
0x0118=rock
0x0119=rock
0x011a=rock
0x011b=rock
0x011c=rock
0x011d=rock
0x011e=rock
0x011f=rock
0x0120=rock
0x0121=rock
0x0122=rock
0x0123=rock
0x0124=rock
0x0125=rock
0x0126=rock
0x0127=rock
0x0128=rock
0x0129=rock
0x012a=rock
0x012b=rock
0x012c=rock
0x012d=rock
0x012e=rock
0x012f=rock
0x0130=rock
0x0131=rock
0x0132=rock
0x0133=rock
0x0134=rock
0x0135=rock
0x0136=rock
0x0137=rock
0x0138=rock
0x0139=rock
0x013a=rock
0x013b=rock
0x013c=rock
0x013d=rock
0x013e=rock
0x013f=rock
0x0140=rock
0x0141=rock
0x0142=rock
0x0143=rock
0x0144=rock
0x0145=rock
0x0146=rock
0x0147=rock
0x0148=rock
0x0149=rock
0x014a=rock
0x014b=rock
0x014c=rock
0x014d=rock
0x014e=rock
0x014f=rock
0x01d3=rock
0x01d4=rock
0x01d5=rock
0x01d6=rock
0x01d7=rock
0x01d8=rock
0x01d9=rock
0x01da=rock
0x01dc=rock
0x01dd=rock
0x01de=rock
0x01df=rock
0x01e0=rock
0x01e1=rock
0x01e2=rock
0x01e3=rock
0x01e4=rock
0x01e5=rock
0x01e6=rock
0x01e7=rock
0x01e8=rock
0x01e9=rock
0x01ea=rock
0x01eb=rock
0x01ec=rock
0x01ed=rock
0x01ee=rock
0x01ef=rock
0x021f=rock
0x0220=rock
0x0221=rock
0x0222=rock
0x0223=rock
0x0224=rock
0x0225=rock
0x0226=rock
0x0227=rock
0x0228=rock
0x0229=rock
0x022a=rock
0x022b=rock
0x022c=rock
0x022d=rock
0x022e=rock
0x022f=rock
0x0230=rock
0x0231=rock
0x0232=rock
0x0233=rock
0x0234=rock
0x0235=rock
0x0236=rock
0x0237=rock
0x0238=rock
0x0239=rock
0x023a=rock
0x023b=rock
0x023c=rock
0x023d=rock
0x023e=rock
0x023f=rock
0x0240=rock
0x0241=rock
0x0242=rock
0x0243=rock
//0x0245=rock
//0x0246=rock
//0x0247=rock
//0x0248=rock
//0x0249=rock
0x024a=rock
0x024b=rock
0x024c=rock
0x024d=rock
0x024e=rock
0x024f=rock
0x0250=rock
0x0251=rock
0x0252=rock
0x0253=rock
0x0254=rock
0x0255=rock
0x0256=rock
0x0257=rock
0x0258=rock
0x0259=rock
0x025a=rock
0x025b=rock
0x025c=rock
0x025d=rock
0x025e=rock
0x025f=rock
0x0260=rock
0x0261=rock
0x0262=rock
0x0263=rock
0x0264=rock
0x0265=rock
0x0266=rock
0x0267=rock
0x0268=rock
0x0269=rock
0x026a=rock
0x026b=rock
0x026c=rock
0x026d=rock
0x02bc=rock
0x02bd=rock
0x02be=rock
0x02bf=rock
0x02c0=rock
0x02c1=rock
0x02c2=rock
0x02c3=rock
0x02c4=rock
0x02c5=rock
0x02c6=rock
0x02c7=rock
0x02c8=rock
0x02c9=rock
0x02ca=rock
0x02cb=rock
0x063b=rock
0x063c=rock
0x063d=rock
0x063e=rock
0x06cd=rock
0x06ce=rock
0x06cf=rock
0x06d0=rock
0x06d1=rock
0x06d2=rock
0x06d3=rock
0x06d4=rock
0x06d5=rock
0x06d6=rock
0x06d7=rock
0x06d8=rock
0x06d9=rock
0x06da=rock
0x06db=rock
0x06dc=rock
0x06dd=rock
0x06de=rock
0x06df=rock
0x06e0=rock
0x06e1=rock
0x06e2=rock
0x06e3=rock
0x06e4=rock
0x06e5=rock
0x06e6=rock
0x06e7=rock
0x06e8=rock
0x06e9=rock
0x06ea=rock
0x06eb=rock
0x06ec=rock
0x06ed=rock
0x06ee=rock
0x06ef=rock
0x06f0=rock
0x06f1=rock
0x06f2=rock
0x06f3=rock
0x06f4=rock
0x06f5=rock
0x06f6=rock
0x06f7=rock
0x06f8=rock
0x06f9=rock
0x06fa=rock
0x06fb=rock
0x06fc=rock
0x06fd=rock
0x06fe=rock
0x06ff=rock
0x0700=rock
0x0701=rock
0x0702=rock
0x0703=rock
0x0704=rock
0x0705=rock
0x0706=rock
0x0707=rock
0x0708=rock
0x0709=rock
0x070a=rock
0x070b=rock
0x070c=rock
0x070d=rock
0x070e=rock
0x070f=rock
0x0710=rock
0x0711=rock
0x0712=rock
0x0713=rock
0x0714=rock
0x0715=rock
0x0716=rock
0x0717=rock
0x0718=rock
0x0719=rock
0x071a=rock
0x071b=rock
0x071c=rock
0x071d=rock
0x071e=rock
0x071f=rock
0x0720=rock
0x0721=rock
0x0722=rock
0x0723=rock
0x0724=rock
0x0725=rock
0x0726=rock
0x0727=rock
0x0728=rock
0x0729=rock
0x072a=rock
0x072b=rock
0x072c=rock
0x072d=rock
0x072e=rock
0x072f=rock
0x0730=rock
0x0731=rock
0x0732=rock
0x0733=rock
0x0734=rock
0x0735=rock
0x0736=rock
0x0737=rock
0x0738=rock
0x0739=rock
0x073a=rock
0x073b=rock
0x073c=rock
0x073d=rock
0x073e=rock
0x073f=rock
0x0740=rock
0x0741=rock
0x0742=rock
0x0743=rock
0x0744=rock
0x0745=rock
0x0746=rock
0x0747=rock
0x0748=rock
0x0749=rock
0x074a=rock
0x074b=rock
0x074c=rock
0x074d=rock
0x074e=rock
0x074f=rock
0x0750=rock
0x0751=rock
0x0752=rock
0x0753=rock
0x0754=rock
0x0755=rock
0x0756=rock
0x0757=rock
0x0758=rock
0x0759=rock
0x075a=rock
0x075b=rock
0x075c=rock
0x07bd=rock
0x07be=rock
0x07bf=rock
0x07c0=rock
0x07c1=rock
0x07c2=rock
0x07c3=rock
0x07c4=rock
0x07c5=rock
0x07c6=rock
0x07c7=rock
0x07c8=rock
0x07c9=rock
0x07ca=rock
0x07cb=rock
0x07cc=rock
0x07cd=rock
0x07ce=rock
0x07cf=rock
0x07d0=rock
0x07d1=rock
0x07d2=rock
0x07d3=rock
0x07d4=rock


Top
   
 Post subject:
PostPosted: 2006-03-13 17:16:39 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
файл Resource_Static.dat

Code:
0x0540=rock
0x0541=rock
0x0542=rock
0x0543=rock
0x0544=rock
0x0545=rock
0x0546=rock
0x0547=rock
0x0548=rock
0x0549=rock
0x054a=rock
0x054b=rock
0x054c=rock
0x054d=rock
0x054e=rock
0x054f=rock
0x0551=rock
0x0552=rock
0x0553=rock
0x056a=rock
0x08e0=rock
0x08e1=rock
0x08e2=rock
0x08e3=rock
0x08e4=rock
0x08e5=rock
0x08e6=rock
0x08e7=rock
0x08e8=rock
0x08e9=rock
0x08ea=rock
0x3421=rock
0x3422=rock
0x3423=rock
0x3424=rock
0x3425=rock
0x3426=rock
0x3427=rock
0x3428=rock
0x3429=rock
0x342c=rock
0x342d=rock
0x342e=rock
0x342f=rock
0x3430=rock
0x3431=rock
0x3432=rock
0x3433=rock
0x3434=rock
0x3435=rock
0x3486=rock
0x3487=rock
0x3488=rock
0x3489=rock
0x348a=rock
0x348b=rock
0x348c=rock
0x348d=rock
0x348e=rock
0x348f=rock
0x34ac=rock
0x34ad=rock
0x34ae=rock
0x34af=rock
0x34b0=rock
0x34b1=rock
0x34b2=rock
0x34b3=rock
0x34b4=rock
0x053b=rock
0x053c=rock
0x053d=rock
0x053e=rock
0x053f=rock
0x0c95=tree
0x0c96=tree
0x0cca=tree
0x0ccb=tree
0x0ccc=tree
0x0ccd=tree
0x0cd0=tree
0x0cd3=tree
0x0cd6=tree
0x0cd8=tree
0x0cd9=tree
0x0cda=tree
0x0cdb=tree
0x0cdc=tree
0x0cdd=tree
0x0cde=tree
0x0cdf=tree
0x0ce0=tree
0x0ce3=tree
0x0ce6=tree
0x0cf8=tree
0x0cfb=tree
0x0cfe=tree
0x0d01=tree
0x0d41=tree
0x0d42=tree
0x0d43=tree
0x0d44=tree
0x0d57=tree
0x0d58=tree
0x0d59=tree
0x0d5a=tree
0x0d5b=tree
0x0d6e=tree
0x0d6f=tree
0x0d70=tree
0x0d71=tree
0x0d72=tree
0x0d84=tree
0x0d85=tree
0x0d86=tree


Top
   
 Post subject:
PostPosted: 2006-03-13 17:23:28 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Стартовое меню (Дельфи), автоматически запускаемое скриптом:

Image

Исполняемый файл здесь:
http://vlad.nagorniy.ru/Edred/setup4ML.rar

Исходные тексты здесь:
http://vlad.nagorniy.ru/Edred/Setup4MLsource.rar

Ну и на случай гибели хоста кидаю сюда:

setup4ML.pas

Code:
unit setup4ML;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Spin, Inifiles, Registry;

type
  TSetupForML = class(TForm)
    CancelButton: TButton;
    CheckOldMove: TCheckBox;
    CheckNewStep: TCheckBox;
    ModeOfScript: TRadioGroup;
    SaveButton: TButton;
    NumberPatch: TSpinEdit;
    Label1: TLabel;
    CheckInviz: TCheckBox;
    CheckLog: TCheckBox;
    procedure WriteParams; // процедура записи параметров
    procedure SetRegFlag1;
    procedure SetRegFlag0;
    procedure CancelButtonClick(Sender: TObject);
    procedure SaveButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  SetupForML: TSetupForML;

implementation

{$R *.dfm}

procedure TSetupForML.WriteParams;
Var IniFile: TIniFile;
begin
        IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'mine&lumb.ini');
        IniFile.WriteInteger('Setup','ModeOfScript',ModeOfScript.ItemIndex+1);
        IniFile.WriteInteger('Setup','NumberPatch',NumberPatch.Value);
        IniFile.WriteBool('Setup','CheckInviz',CheckInviz.Checked);
        IniFile.WriteBool('Setup','CheckOldMove',CheckOldMove.Checked);
        IniFile.WriteBool('Setup','CheckNewStep',CheckNewStep.Checked);
        IniFile.WriteBool('Setup','CheckLog',CheckLog.Checked);
        IniFile.Free;
end;

procedure TSetupForML.SetRegFlag1;
Var Reg:Tregistry;
begin
        Reg:=Tregistry.Create;
        Reg.RootKey:=HKEY_LOCAL_MACHINE;
        Reg.OpenKey('SOFTWARE',true);
        Reg.OpenKey('InjectionASM',true);
        Reg.OpenKey('MINE_LUMB',true);
        Reg.WriteString('Start','Yes');
        Reg.CloseKey;
        Reg.Free;
end;

procedure TSetupForML.SetRegFlag0;
Var Reg:Tregistry;
begin
        Reg:=Tregistry.Create;
        Reg.RootKey:=HKEY_LOCAL_MACHINE;
        Reg.OpenKey('SOFTWARE',true);
        Reg.OpenKey('InjectionASM',true);
        Reg.OpenKey('MINE_LUMB',true);
        Reg.WriteString('Start','No');
        Reg.CloseKey;
        Reg.Free;
end;

procedure TSetupForML.CancelButtonClick(Sender: TObject);
begin
        SetRegFlag0;
        Close;
end;

procedure TSetupForML.SaveButtonClick(Sender: TObject);
begin
        WriteParams;
        SetRegFlag1;
        Close;
end;

end.


setup4ML.dfm

Code:
object SetupForML: TSetupForML
  Left = 995
  Top = 551
  BorderIcons = []
  BorderStyle = bsSingle
  Caption = 'Mining & Lamber, v.3.10b (c) Edred'
  ClientHeight = 337
  ClientWidth = 239
  Color = clSkyBlue
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 24
    Top = 136
    Width = 130
    Height = 13
    Caption = #1047#1072#1076#1072#1081#1090#1077' '#1085#1086#1084#1077#1088' '#1084#1072#1088#1096#1088#1091#1090#1072
  end
  object CancelButton: TButton
    Left = 136
    Top = 288
    Width = 75
    Height = 25
    Caption = 'Cancel'
    TabOrder = 0
    OnClick = CancelButtonClick
  end
  object CheckOldMove: TCheckBox
    Left = 24
    Top = 200
    Width = 201
    Height = 17
    Caption = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' '#1086#1073#1093#1086#1076' '#1087#1088#1077#1087#1103#1090#1089#1090#1074#1080#1081
    TabOrder = 1
  end
  object CheckNewStep: TCheckBox
    Left = 24
    Top = 224
    Width = 201
    Height = 17
    Caption = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' AddStep'
    TabOrder = 2
  end
  object ModeOfScript: TRadioGroup
    Left = 32
    Top = 16
    Width = 177
    Height = 105
    Caption = #1056#1077#1078#1080#1084' '#1088#1072#1073#1086#1090#1099
    ItemIndex = 2
    Items.Strings = (
      #1052#1080#1085#1080#1085#1075' '#1087#1086' '#1082#1088#1072#1103#1084' '#1089#1082#1072#1083
      #1052#1080#1085#1080#1085#1075' '#1087#1086' '#1087#1086#1083#1091' '#1087#1077#1097#1077#1088#1099
      #1051#1072#1084#1073#1077#1088' '#1074' '#1083#1077#1089#1091
      #1056#1072#1079#1084#1077#1090#1082#1072' '#1084#1072#1088#1096#1088#1091#1090#1072)
    TabOrder = 3
  end
  object SaveButton: TButton
    Left = 32
    Top = 288
    Width = 75
    Height = 25
    Caption = 'Save'
    TabOrder = 4
    OnClick = SaveButtonClick
  end
  object NumberPatch: TSpinEdit
    Left = 168
    Top = 136
    Width = 41
    Height = 22
    MaxValue = 8
    MinValue = 1
    TabOrder = 5
    Value = 1
  end
  object CheckInviz: TCheckBox
    Left = 24
    Top = 176
    Width = 193
    Height = 17
    Caption = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' '#1080#1085#1074#1080#1079#1099
    TabOrder = 6
  end
  object CheckLog: TCheckBox
    Left = 24
    Top = 248
    Width = 161
    Height = 17
    Caption = #1042#1077#1089#1090#1080' '#1087#1086#1076#1088#1086#1073#1085#1099#1081' '#1083#1086#1075
    TabOrder = 7
  end
end


Top
   
 Post subject:
PostPosted: 2006-03-13 17:25:44 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Поехал сам скрипт, часть 1

Code:
#===================================================================#
# MINING & LUMBERJACKING.                                           #
#===================================================================#
#   v.3.30b       (с) Edred                                         #
#===================================================================#
# Скрипт требует подключения ASM-3 версии не ниже 503.01PE          #
#===================================================================#
;
; Многофункциональный скрипт на мининг и ламбер. Выбор режимов работы
; и настройка осуществляется через меню, написанное на Delphi.
; Все настройки вынесены в ini-файл. Подробное описание принципов работы
; смотрите в файле mine&lumb.hst.
;
#========================================#
#  СТАРТОВЫЙ СКРИПТ                      #
#========================================#
;
sub main()
   ; 1. Устанавливаем флаг готовности ответа параметров в 'Wait' (регистри)
   ; 2. Запрашиваем через менюшку (Дельфя) параметры запуска скрипта
   ; 3. Ожидаем пока флаг готовности не будет 'Yes' или 'No'. Если 'No' -
   ;    выход из скрипта.
   ; 4. Считываем из файла mine&lamb.ini параметры запуска скрипта
   ; 5. Устанавливаем все необходимые глобальные переменные
   ; 6. Запускаем необходимый скрипт
   ;
   VAR i
   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
   ; Режим работы скрипта:
   UO.SetGlobal( 'ModeOfScript', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'ModeOfScript' ) )
   ; Номер маршрута:
   UO.SetGlobal( 'NumberPatch', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'NumberPatch' ) )
   ; Флаг использования хайда
   UO.SetGlobal( 'CheckHide', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckHide' ) )
   ; Флаг использования инвизов
   UO.SetGlobal( 'CheckInviz', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckInviz' ) )
   ; Флаг контроля сытости чара
   UO.SetGlobal( 'CheckChatFood', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckChatFood' ) )
   ; Флаг использования разгрузки в банк
   UO.SetGlobal( 'CheckBankDis', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckBankDis' ) )
   ; Флаг включения подробного лога
   UO.SetGlobal( 'CheckLog', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckLog' ) )
   ;
   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
   #========================= Настройки рунбуки ==================================
   #==============================================================================
   UO.SetGlobal( 'RunbookBase', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'RunbookBase' ) )
   UO.SetGlobal( 'RunbookTile', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'RunbookTile' ) )
   UO.SetGlobal( 'RunbookTile2', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'RunbookTile2' ) )
   UO.SetGlobal( 'BaseRune', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'BaseRune' ) )
   UO.SetGlobal( 'BaseRuneScroll', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'BaseRuneScroll' ) )
   UO.SetGlobal( 'RechargeNumber', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'RechargeNumber' ) )
   If UO.GetGlobal('RunbookBase')=='' OR UO.GetGlobal('RunbookTile')=='' OR UO.GetGlobal('RunbookTile2')=='' OR UO.GetGlobal('BaseRune')=='' OR UO.GetGlobal('BaseRuneScroll')=='' OR UO.GetGlobal('RechargeNumber')=='' 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
      UO.SetGlobal( 'Wall1Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall1Rune' ) )
      UO.SetGlobal( 'Wall2Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall2Rune' ) )
      UO.SetGlobal( 'Wall3Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall3Rune' ) )
      UO.SetGlobal( 'Wall4Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall4Rune' ) )
      UO.SetGlobal( 'Wall5Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall5Rune' ) )
      UO.SetGlobal( 'Wall6Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall6Rune' ) )
      UO.SetGlobal( 'Wall7Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall7Rune' ) )
      UO.SetGlobal( 'Wall8Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall8Rune' ) )
   Endif
   If UO.GetGlobal('Wall1Rune')=='' OR UO.GetGlobal('Wall2Rune')=='' OR UO.GetGlobal('Wall3Rune')=='' OR UO.GetGlobal('Wall4Rune')=='' OR UO.GetGlobal('Wall5Rune')=='' OR UO.GetGlobal('Wall6Rune')=='' OR UO.GetGlobal('Wall7Rune')=='' OR UO.GetGlobal('Wall8Rune')=='' Then
      UO.Print( 'Runes settings not found! Check your ini-file! Script Terminated' )
      return 0      
   Endif
   #========================= Настройки сундуков =================================
   #==============================================================================
   If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
      ; Не ВИП режимы
      UO.SetGlobal( 'Sund_Tile_X', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'Sund_Tile_X' ) )
      UO.SetGlobal( 'Sund_Tile_Y', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'Sund_Tile_Y' ) )      
      UO.SetGlobal( 'Sund1_Ser', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'Sund1_Ser' ) )
      UO.SetGlobal( 'Sund2_Ser', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'Sund2_Ser' ) )
      UO.SetGlobal( 'BoxRegs', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'BoxRegs' ) )
      UO.SetGlobal( 'BoxBand', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'BoxBand' ) )
      UO.SetGlobal( 'BoxPick', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'BoxPick' ) )
      UO.SetGlobal( 'BoxArms', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'BoxArms' ) )
   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 - сбаланчированный.
   #======================= Настройки контроля ПК ================================
   #==============================================================================
   UO.SetGlobal( 'MinNotoriety', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MinNotoriety' ) )
   UO.SetGlobal( 'MinEnemyDist', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MinEnemyDist' ) )
   UO.SetGlobal( 'MinEnemyDist2', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MinEnemyDist2' ) )
   UO.SetGlobal( 'MaxEnemyDist', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MaxEnemyDist' ) )
   #======================= Настройки инструментов ===============================
   #==============================================================================
   ; Внимание! при крафте топоров и кирок для запаса на складе проверяйте их
   ; типы и запасайте только перечисленные:
   UO.SetGlobal( 'Pickaxe', '0x0E85')            ; Кирка (тип) Используется только этот!
   UO.SetGlobal( 'Hatchet', '0x0F43' )            ; Топор (тип) Используется только этот!
   UO.SetGlobal( 'Cleaver', '0x0EC2')            ; кливер (тип)
   UO.SetGlobal( 'Bandag', '0x0E21')            ; Тип бинтов
   UO.SetGlobal( 'BlBandag', '0x0E20')            ; Тип кровавых бинтов
   UO.SetGlobal( 'Inviz', '0x0F09' )            ; боттлы с инвизками
   UO.SetGlobal( 'GreatHeal','0x0F0C')            ; боттлы с греатер хилами
   UO.SetGlobal( 'MyFork', '0x1406')            ; оружие (тип)
   UO.SetGlobal( 'MyShield', '0x1B76' )         ; щит (тип)   
   #======================= Настройки счетчиков ==================================
   #==============================================================================
   ; НИЧЕГО НЕ ИЗМЕНЯЙТЕ В ЭТОЙ СЕКЦИИ!!! ВСЕ СУММЫ В ФАЙЛЕ MINE&LUMB.INI
   ; счетчики логов
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'TreeLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Logs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'AncientLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'AncientLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'SturdyLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'SturdyLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'SteelLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'SteelLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'NeitralLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'NeitralLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'ChaosLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'ChaosLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'OrderLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'OrderLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'TitanicLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'TitanicLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'ElvinLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'ElvinLogs', tmpstr )
   ; счетчики руды
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Iron' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Iron', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Damned' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Damned', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Kreonit' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Kreonit', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Copper' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Copper', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Bronze' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Bronze', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Walean' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Walean', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Golden' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Golden', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Silver' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Silver', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Oceanite' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Oceanite', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'BloodRock' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'BloodRock', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Sacred' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Sacred', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Brilliant' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Brilliant', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Order' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Order', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Chaos' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Chaos', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Neutral' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Neutral', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Stardust' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Stardust', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Citadel' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Citadel', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Plaster' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Plaster', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Sandstone' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Sandstone', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Stone' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Stone', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Marble' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Marble', tmpstr )
   ; общий счетчик
   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
   #======================= Настройки процесса ===================================
   #==============================================================================
   UO.SetGlobal( 'MaxWightOfChar', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MaxWightOfChar' ) )
   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


Top
   
 Post subject:
PostPosted: 2006-03-13 17:26:02 
Offline
User avatar

Joined: 2005-01-13 07:20:54
Posts: 528
Edred wrote:

Исполняемый файл здесь:
http://vlad.nagorniy.ru/files/edred/Min ... tup4ML.rar

Исходные тексты здесь:
http://vlad.nagorniy.ru/files/edred/Min ... source.rar

Ну и на случай гибели хоста кидаю сюда:


ССЫЛКИ! update 1.07.06


Last edited by admir on 2006-07-01 05:51:01, edited 1 time in total.

Top
   
 Post subject:
PostPosted: 2006-03-13 17:27:33 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
часть 2

Code:
;
#========================================#
#  ГОЛОВНЫЕ ПРОЦЕДУРЫ РЕЖИМОВ РАБОТЫ     #
#========================================#
;
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 = "There is no ore here to mine"
   VAR ms2 = "Это не копается."
   VAR ms3 = "in your pack."
   VAR ms4 = "You fail to find any useable ore"
   VAR ms5 = "Далеко. Не дотянуться."
   VAR ms6 = "Try mining in rock"
;   VAR ms7 = "You can't see that"
   VAR ms7 = "Хм... Не вижу.. Где копать то?."
   VAR ms8 = "is destroyed*"               ; кирка развалилась совсем
   VAR ms9 = "ore at your feet."            ; предположительно - элементаль
   UO.asmTLMapOpen('Resource_Map.dat')         ; Загрузим таблицу типов карты
   UO.asmTLStaticOpen('Resource_Static.dat')   ; Загрузим таблицу типов статики
   VAR i, strpoint
   VAR razmer = val( UO.GetGlobal( 'RazmerUseP' ) )
   VAR MaxVes = val( UO.GetGlobal( 'MaxWightOfChar' ) )
   ;
   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('Lhand'))
               Else
                  If UO.Waiting() Then
                     UO.CancelTarget()
                  Endif
                  CanMine = UO.asmWaitTargetStaticTile( 'rock', PointX, PointY, 0 )
                  wait(100)
                  If CanMine Then
                     UO.UseObject(UO.ObjAtLayer('Lhand'))
                  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 = "There are no logs here to chop"      ; нет логов
   VAR ms2 = "You can't use"                  ; не можем
   VAR ms3 = "in your pack."                  ; вырубили логи
   VAR ms4 = "You fail to produce"               ; физл
   VAR ms5 = "You are too far away"            ; стоим далеко
   VAR ms6 = "It appears immune to your blow"      ; не проходит удар
   VAR ms7 = "You can't see that"               ; не можем увидеть
   VAR ms8 = "is destroyed*"                  ; топор развалился
   VAR ms9 = "Try to kill my spirit at first!"      ; вырубили духа дерева
;   UO.asmTLMapOpen('Resource_Map.dat')         ; Загрузим таблицу типов карты
   UO.asmTLStaticOpen('Resource_Static.dat')   ; Загрузим таблицу типов статики
   VAR i, strpoint
   VAR razmer = val( UO.GetGlobal( 'RazmerUseP' ) )
   VAR MaxVes = val( UO.GetGlobal( 'MaxWightOfChar' ) )
   ;
   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('Lhand'))
                  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( 'MiningFork' )
   VAR MyShield = UO.GetGlobal( 'MiningShield' )
   VAR Elem = '0x000E'                              ; Тип элема
   VAR ElemCorpse = '0x2006'                        ; Тип трупа элема
   VAR ElemSer, CorpseSer, ElemName, CorpseNam
   VAR bear = 'bear is attacking you*'
   VAR beardead = 'Body of a'
   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 = '0x000E'            ; Тип элема
   Else
      Elem = '0x003A'            ; Тип духа дерева
   Endif
   VAR Plitka = '0x402A6B2E'
   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 = "You can't reach that."
   VAR NeMogu2 = "You can't reach this."
   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 == '0x04F7' Then
      nam = 'Order Elemental'
      return nam
   Endif
   If clr == '0x0B56' Then
      nam = 'Chaos Elemental'
      return nam
   Endif
   If clr == '0x04F6' Then
      nam = 'Neutral Elemental'
      return nam
   Endif
   If clr == '0x0BA2' Then
      nam = 'Stardust Elemental'
      return nam
   Endif
   If clr == '0x0BAF' Then
      nam = 'Citadel Elemental'
      return nam
   Endif
   If clr == '0x0BB5' Then
      nam = 'Titanic Spirit'
      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 = '0x0190'
   VAR PKchar2 = '0x0191'
   VAR PKCount = 0, PKSerial = ''
   VAR PKColor, PKDist, PKDistOld, i
   VAR GoOut = 0
   DIM ExcludeChar[5]
   ExcludeChar[0] = '0x0024DB12'      ; Edred
   ExcludeChar[1] = '0x0007B263'      ; Driada
   ExcludeChar[2] = '0x004CFBD6'      ; Servus
   ExcludeChar[3] = '0x0030C38F'      ; AGRS
   ExcludeChar[4] = '0x003E8536'      ; Ress
   ;
   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


Top
   
 Post subject:
PostPosted: 2006-03-13 17:29:27 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
часть 3

Code:
;
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(563,226)
         CheckLag()
         UO.LClick(262,390)
         CheckLag()
      Endif
   Else
      ; вывеска дома
      UO.UseObject( UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeVIP', 'HomeTablSerial' ) )
      CheckLag()
      UO.LClick(563,226)
      CheckLag()
      UO.LClick(262,390)
      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

#================================================#
#  ПРОЦЕДУРЫ РАЗГРУЗКИ ПАКА                      #
#================================================#
;
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] = '0x19B9'      ; Тип руды
   Razgruz[1] = '0x19B8'      ; Тип руды - 3 шт.
   Razgruz[2] = '0x19BA'      ; Тип руды - 2 шт.
   Razgruz[3] = '0x19B7'      ; Тип руды - 1 шт.
   Razgruz[4] = '0x1BDD'      ; логи
   Razgruz[5] = '0x0EED'      ; деньги
   Razgruz[6] = '0x1067'      ; cut up leather
   Razgruz[7] = '0x1078'      ; leather
   DIM Regs[8]
   Regs[0] = '0x0F7A'         ; Black Pearl
   Regs[1] = '0x0F7B'         ; Bood Moss
   Regs[2] = '0x0F86'         ; Mandrake Root
   Regs[3] = '0x0F84'         ; garlic
   Regs[4] = '0x0F85'         ; Ginseng
   Regs[5] = '0x0F88'         ; Night Shade
   Regs[6] = '0x0F8C'         ; Sulphorous Ash
   Regs[7] = '0x0F8D'         ; Spiders Silk
   VAR Inviska = UO.GetGlobal( 'Inviz' )
   VAR GrHeal = UO.GetGlobal( 'GreatHeal' )
   VAR EmptBottle = '0x0F0E'   ; пустые боттлы
   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[8]
   Razgruz[0] = '0x19B9'      ; Тип руды
   Razgruz[1] = '0x19B8'      ; Тип руды - 3 шт.
   Razgruz[2] = '0x19BA'      ; Тип руды - 2 шт.
   Razgruz[3] = '0x19B7'      ; Тип руды - 1 шт.
   Razgruz[4] = '0x1BDD'      ; логи
   Razgruz[5] = '0x0EED'      ; деньги
   Razgruz[6] = '0x1067'      ; cut up leather
   Razgruz[7] = '0x1078'      ; leather
   DIM Regs[8]
   Regs[0] = '0x0F7A'         ; Black Pearl
   Regs[1] = '0x0F7B'         ; Bood Moss
   Regs[2] = '0x0F86'         ; Mandrake Root
   Regs[3] = '0x0F84'         ; garlic
   Regs[4] = '0x0F85'         ; Ginseng
   Regs[5] = '0x0F88'         ; Night Shade
   Regs[6] = '0x0F8C'         ; Sulphorous Ash
   Regs[7] = '0x0F8D'         ; Spiders Silk

   VAR GrHeal = UO.GetGlobal( 'GreatHeal' )
   VAR EmptBottle = '0x0F0E'   ; пустые боттлы
   VAR i, j, oldpause
   ; Подойдем к месту разгрузки / загрузки
   GoRazgruzka( X_Sund, Y_Sund, Sund1, '' )
   ; Разбираемся с рудой
   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
   ; разберемся с кирками
   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( 'Lhand' ) ) == UO.GetGlobal( 'Hatchet' ) OR UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == 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
;


Top
   
 Post subject:
PostPosted: 2006-03-13 17:31:38 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
часть 4

Code:
#================================================#
#  ОБЩИЕ ПРОЦЕДУРЫ                               #
#================================================#
;
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( 'Lhand' ) ) <> Instrum Then
      UO.FindType( Instrum )
      If UO.FindCount() == 0 Then
         return 0
      Endif
      UO.Equipt( 'Lhand', Instrum )
      repeat
         wait(100)
      until UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == 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 = '0x0000'
   VAR typlog = '0x1BDD'
   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 == '0x0000' Then
      nam = 'logs'
      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 == '0x0BB3' Then
      nam = 'ancient logs'
      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 == '0x0BB4' Then
      nam = 'sturdy logs'
      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 == '0x04E8' Then
      nam = 'steel logs'
      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 == '0x048B' Then
      nam = 'neitral logs'
      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 == '0x04E7' Then
      nam = 'order logs'
      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 == '0x0486' Then
      nam = 'chaos logs'
      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 == '0x0BB5' Then
      nam = 'titanic logs'
      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 == '0x062A' Then
      nam = 'elvin logs'
      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 == '0x0000' Then
      nam = 'Iron ore'
      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 == '0x0455' Then
      nam = 'Damned ore'
      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 == '0x0493' Then
      nam = 'Kreonit ore'
      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 == '0x0B77' Then
      nam = 'Copper ore'
      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 == '0x0488' Then
      nam = 'Bronze ore'
      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 == '0x07D1' Then
      nam = 'Walean ore'
      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 == '0x08A5' Then
      nam = 'Golden ore'
      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 == '0x05B2' Then
      nam = 'Silver ore'
      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 == '0x0B5B' Then
      nam = 'Oceanite ore'
      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 == '0x0B78' Then
      nam = 'Blood Rock ore'
      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 == '0x0B5A' Then
      nam = 'Sacred ore'
      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 == '0x04E8' Then
      nam = 'Brilliant ore'
      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 == '0x04F7' Then
      nam = 'Order ore'
      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 == '0x0B56' Then
      nam = 'Chaos ore'
      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 == '0x04F6' Then
      nam = 'Neutral ore'
      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 == '0x0BA2' Then
      nam = 'Stardust ore'
      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 == '0x0BAF' Then
      nam = 'Citadel ore'
      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 == '0x0032' Then
      nam = 'Plaster ore'
      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 == '0x0031' Then
      nam = 'Sandstone ore'
      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 == '0x08FD' Then
      nam = 'Stone ore'
      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 == '0x0481' Then
      nam = 'Marble ore'
      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' ) + ' logs' )
         UO.TextPrint( UO.GetGlobal( 'Logs' ) + ' logs' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'AncientLogs' ) + ' ancient logs' )
         UO.TextPrint( UO.GetGlobal( 'AncientLogs' ) + ' ancient logs' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'SturdyLogs' ) + ' sturdy logs' )
         UO.TextPrint( UO.GetGlobal( 'SturdyLogs' ) + ' sturdy logs' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'SteelLogs' ) + ' steel logs' )
         UO.TextPrint( UO.GetGlobal( 'SteelLogs' ) + ' steel logs' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'NeitralLogs' ) + ' neitral logs' )
         UO.TextPrint( UO.GetGlobal( 'NeitralLogs' ) + ' neitral logs' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'ChaosLogs' ) + ' chaos logs' )
         UO.TextPrint( UO.GetGlobal( 'ChaosLogs' ) + ' chaos logs' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'OrderLogs' ) + ' order logs' )
         UO.TextPrint( UO.GetGlobal( 'OrderLogs' ) + ' order logs' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'TitanicLogs' ) + ' titanic logs' )
         UO.TextPrint( UO.GetGlobal( 'TitanicLogs' ) + ' titanic logs' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'ElvinLogs' ) + ' elvin logs' )
         UO.TextPrint( UO.GetGlobal( 'ElvinLogs' ) + ' elvin logs' )
         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' ) + ' iron' )
         UO.TextPrint( UO.GetGlobal( 'Iron' ) + ' iron' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Damned' ) + ' damned' )
         UO.TextPrint( UO.GetGlobal( 'Damned' ) + ' damned' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Kreonit' ) + ' kreonit' )
         UO.TextPrint( UO.GetGlobal( 'Kreonit' ) + ' kreonit' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Copper' ) + ' copper' )
         UO.TextPrint( UO.GetGlobal( 'Copper' ) + ' copper' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Bronze' ) + ' bronze' )
         UO.TextPrint( UO.GetGlobal( 'Bronze' ) + ' bronze' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Walean' ) + ' walean' )
         UO.TextPrint( UO.GetGlobal( 'Walean' ) + ' walean' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Golden' ) + ' golden' )
         UO.TextPrint( UO.GetGlobal( 'Golden' ) + ' golden' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Silver' ) + ' silver' )
         UO.TextPrint( UO.GetGlobal( 'Silver' ) + ' silver' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Oceanite' ) + ' oceanite' )
         UO.TextPrint( UO.GetGlobal( 'Oceanite' ) + ' oceanite' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'BloodRock' ) + ' bloodrock' )
         UO.TextPrint( UO.GetGlobal( 'BloodRock' ) + ' bloodrock' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Sacred' ) + ' sacred' )
         UO.TextPrint( UO.GetGlobal( 'Sacred' ) + ' sacred' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Brilliant' ) + ' brilliant' )
         UO.TextPrint( UO.GetGlobal( 'Brilliant' ) + ' brilliant' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Order' ) + ' order' )
         UO.TextPrint( UO.GetGlobal( 'Order' ) + ' order' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Chaos' ) + ' chaos' )
         UO.TextPrint( UO.GetGlobal( 'Chaos' ) + ' chaos' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Neutral' ) + ' neutral' )
         UO.TextPrint( UO.GetGlobal( 'Neutral' ) + ' neutral' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Stardust' ) + ' stardust' )
         UO.TextPrint( UO.GetGlobal( 'Stardust' ) + ' stardust' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Citadel' ) + ' citadel' )
         UO.TextPrint( UO.GetGlobal( 'Citadel' ) + ' citadel' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Plaster' ) + ' plaster' )
         UO.TextPrint( UO.GetGlobal( 'Plaster' ) + ' plaster' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Sandstone' ) + ' sandstone' )
         UO.TextPrint( UO.GetGlobal( 'Sandstone' ) + ' sandstone' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Stone' ) + ' stone' )
         UO.TextPrint( UO.GetGlobal( 'Stone' ) + ' stone' )
         UO.asmLogAdd( fil, UO.GetGlobal( 'Marble' ) + ' marble' )
         UO.TextPrint( UO.GetGlobal( 'Marble' ) + ' marble' )
         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 = "There is no ore here to mine"
      ms2 = "Это не копается."
      ms3 = "in your pack."
      ms4 = "You fail to find any useable ore"
      ms5 = "Далеко. Не дотянуться."
      ms6 = "Try mining in rock"
      ms7 = "Хм... Не вижу.. Где копать то?."
      ms8 = "is destroyed*"
      ms9 = "ore at your feet."
   Else
      ms1 = "There are no logs here to chop"
      ms2 = "You can't use"
      ms3 = "You put the"
      ms4 = "You fail to produce any useable wood"
      ms5 = "You are too far away"
      ms6 = "It appears immune to your blow"
      ms7 = "You can't see that"
      ms8 = "is destroyed*"
      ms9 = "ore at your feet."
   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
;


Top
   
 Post subject:
PostPosted: 2006-03-13 17:33:21 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
часть 5 (последняя)

Code:
#================================================#
#  СТАНДАРТНЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ               #
#================================================#
;
Sub CheckCharEat( nom )
; Проверка сытости чара через команду .howmanyfood и подкормка медом
; если необходимо. Параметр - необходимый уровень сытости.
; В последующих версиях - питье эля если уровень превышен.
; Мед должен быть у чара в паке, его добор в этой функции не производится!
;
   DIM EatLevels[5]
   EatLevels[1] = "Шнурки, если их подольше поварить, приобретают мягкость спагетти."
   EatLevels[2] = "А в тюрьме сейчас ужин - макароны!"
   EatLevels[3] = "Пряник бы мне... Или плюшку."
   EatLevels[4] = "Главное - не делать из еды культа."
   EatLevels[5] = "Уф... Две лишних дырки на поясе - не порок. Поваляться бы чуток."
   VAR i, tmpstr, j, med = '0x09EC'
   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
   DeleteJournal( 'fizzles' )
   UO.Exec("recall " + Runbk + " " + NRune)
   repeat
      CheckLag()
      wait(1000)
      i = i + 1
   until ( i > 6 ) OR ( UO.Mana < OldMana - 8 ) OR UO.InJournal( 'fizzles' )
   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]
   Nado[0]  = '0x0EED'   ; gold coin
   Nado[1]  = '0x0F23'   ; cintrines
   Nado[2]  = '0x0F7A'   ; pearls, black pearls
   Nado[3]  = '0x0F7B'   ; bood moss
   Nado[4]  = '0x0F84'   ; garlic
   Nado[5]  = '0x0F85'   ; ginseng
   Nado[6]  = '0x0F86'   ; mandrake root
   Nado[7]  = '0x0F88'   ; night shade
   Nado[8]  = '0x0F8C'   ; sulphorous ash
   Nado[9]  = '0x0F8D'   ; spiders silk
   Nado[10] = '0x1067'   ; cut up leather
   Nado[11] = '0x1078'   ; leather
   Nado[12] = '0x19B9'   ; руда (много)
   Nado[13] = '0x19B8'   ; руда (3 шт.)
   Nado[14] = '0x19BA'   ; руда (2 шт.)
   Nado[15] = '0x19B7'   ; руда (1 шт.)
   Nado[16] = '0x1BDD'   ; Логи
   VAR i, typ
   VAR Scissor = '0x0F9E'   ; Ножницы
   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
;
#================================================#
#  ПРОЦЕДУРЫ ХОЖДЕНИЯ                            #
#================================================#
;
; Процедура 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-03-13 17:34:51 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
С минингом/ламбером все. В ближ дни закину другие оставшиеся скрипты... :roll:


Top
   
 Post subject:
PostPosted: 2006-03-13 18:56:33 
Offline
User avatar

Joined: 2005-08-18 09:09:18
Posts: 104
Location: RUSSIA
А под ранку его тяжко будет переделать? 8) :)


Top
   
 Post subject:
PostPosted: 2006-03-13 19:13:24 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Toolmate wrote:
А под ранку его тяжко будет переделать? 8) :)


хз. Но через пару месяцев Цита перейдет на рануо. Если я снова буду играть или мне потребуется гмом оттестить кирки или топоры, то тогда и посмотрим, насколько тяжело или легко портануть. Не в первый раз.


Top
   
 Post subject:
PostPosted: 2006-03-13 20:33:42 
Offline
User avatar

Joined: 2006-02-13 21:35:28
Posts: 23
Япона матрена.
Edred ты просто нереальный маньяк !!! СПАСИБО тебе и РЕСПЕКТ !!!!

ппц сколько ты вложил сил и мозгов... :idea: РЕСПЕКТ


Top
   
 Post subject:
PostPosted: 2006-03-14 10:53:22 
Offline
Expert!

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

Code:
; Рыбачим с корабля. Выловленное перерабатываем и складываем в сундуки на 
; палубе. Если вокруг все выловлено - плывем вперед или назад (по кругу).
; Считаем итемы (раздельные) в сундуках. Если их больше 250 - останавливаем
; скрипт. В один из сундуков на палубе положить мед (если вы хотите
; подкармливать чара по дороге). Для начала рыбалки сорентируйте корабль по
; оси Y в направлении увеличения (справа налево наискосок вниз).
; Встаньте на трап и большого улова!
;
; НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ 'Track world items'!!!
;
; History:
;
; v. 1.00b - 1.17b - ловля, борьба с элемами, переработка выловленного и
;                    лут элемов
; v. 2.00b - полная переработка скрипта: восстановление четкой структуры,
;            изменение принципов реакции на элемов (их может быть больше
;            одного), подхиливание чара во время битвы, изменение принципов
;            плавания по кругу. Оружие должно быть в руках или паке.
;            Удочка должна быть в руках или паке. Кроме того, можно положить
;            еще удочек в сундук или пак.
; v. 2.01b - правим подхил с бинтов и атаку последнего элема в случае смерти.
; v. 2.02b - пропускаем паки элемов, которые не можем взять
; v. 2.03b - реагируем на морского монстра. Реакция простая - сразу прекращаем
;            ловить и сидим в хайде пока монстр не уплывет! Гадость какая...
;            Для этого придется ввести еще один скрипт - FightMonster
; v. 2.04b - Поправляем мелкие глючки, изменяем названия функций на понятные
; v. 2.05b - добавлен сундук с разбитого корабля
; v. 2.06b - Некоторые правки в технологии подхилла в сражении.
;
;            Временно отключена процедура снятия курсы с чара.
;
; Проект версии 3:
;        1. Выловленное перерабатываем сразу не все, а только то, что не требует
;           смены инструмента. То есть, все кроме рыбы. Рыбу временно складируем
;           в Trum3. Переработку рыбы осуществляем прямо в Trum3 при смене
;           дислокации.
;        2. Разбираемся с сундуками с утонувшего корабля - открываем их и лутим.
;           Сами сундуки оставляем в паке.
;        3. Учимся сражаться с морскими чудовищами. Лутим их после килла.
;        4. Запоминаем последнюю точку лова и после килла элема /монстра начинаем
;           с нее, а не заново.
;        5. Введена возможность включить пропуск тайлов с рыбой и обувью.
;
;
; ver. 2.06b (c) Edred
;
VAR Trum = '0x401DE221'      ; сундук для основного улова
VAR Trum2 = '0x4058CF23'   ; сундук/мешок для лута элема
VAR Trum3 = '0x401DE1C6'   ; сундук / ящик для паков элемов
VAR Pole = '0x0DBF'         ; удочка
VAR Fork = '0x1404'         ; оружие
# VAR Fork = '0x0F5C'      ; mace - хочу качать мэйсу
VAR Shield = '0x1B76'      ; щит
VAR Shag = 1            ; первый шаг при ловле вперед. При ловле вперед
                     ; прибавляем по 1, при ловле назад будем ставить
                     ; отрицательные числа.
VAR Elem = '0x0010'         ; Тип водного элементаля
VAR ElemPack = '0x0E75'      ; Тип пака водного элементаля
VAR Monster = '0x005F'      ; Тип морского монстра
VAR Bandag = '0x0E21'      ; Тип бинтов
VAR BlBandag = '0x0E20'      ; Тип кровавых бинтов
VAR ElemSer               ; сериал элема
VAR MChest = '0x09AB'      ; тип сундука с затонувшего корабля
; ================================================================
; FightMonster() - Сканируем вокруг в поисках морского монстра, прячемся
;
Sub FightMonster()
      repeat
         wait(500)
         UO.FindType( Monster, -1, 1 )
      until UO.FindCount() > 0
      ; Нашли!
      UO.Exec( 'terminate Fishing' )
      UO.Exec( 'terminate FightElem' )
      UO.SayU( 'stop' )
      UO.WarMode( 0 )
      Hide()
      repeat
         wait(1000)
         If UO.Dead() Then
            repeat
               wait(1000)
            until UO.Dead() == 0
         Endif
         UO.FindType( Monster, -1, 1 )
      until UO.FindCount() == 0
      ; Ушел!
      UO.SayU( 'stop' )
      UO.Exec( 'exec FightElem' )
      UO.Exec( 'exec Fishing' )
endsub
; ================================================================
; FightElem() - Сканируем вокруг в поисках элемов, вооружаемся
;
Sub FightElem()
   VAR Nom, PackSer, MultiElem
   While TRUE
      UO.Exec('set finddistance 10')
      UO.FindType( Elem, -1, 1 )
      While UO.FindCount() == 0
         wait(500)
         UO.FindType( Elem, -1, 1 )
      Wend
      ; нашли элема недалеко от нас
      ElemSer = UO.GetSerial( 'finditem' )
      UO.Exec( 'terminate Fishing' )
      UO.Exec( 'terminate FightMonster' )
      UO.SayU( 'stop' )
      DropPole()
      wait(1000)
      GetWeapon()
      UO.WarMode( 1 )
      UO.FindType( Bandag, -1, Trum )
      If UO.FindCount() > 0 Then
         UO.MoveItem( 'finditem', '10' )
         wait(1000)
      Endif
      UO.Print( 'TEST. I fighting with elem' )
      UO.Attack( ElemSer )
      MultiElem = 0
      repeat
         wait(1000)
         If UO.Dead() Then
            CharDead()
         Endif
         ; тут введем еще подхиливание чара
         UO.Print( 'Idem v podhil ' + str( UO.Life ) )
         If UO.Life < ( UO.Str - 30 ) Then
            UO.Print( 'TEST. Restore chars...' )
            RestoreChar( 0 )
            UO.Print( 'TEST. Get weapons back...' )
            GetWeapon()
         Endif
         If UO.Dead() Then
            CharDead()
         Endif         
         UO.FindType( Elem, -1, 1 )
      until UO.FindCount() == 0
      ; Элем мертв и вокруг нет других
      UO.FindType( ElemPack, -1, 1 )
      While UO.FindCount() > 0
         PackSer = UO.GetSerial( 'finditem' )
         DeleteJournal( "You can't reach" )
         UO.MoveItem( PackSer )
         wait(2000)
         If UO.InJournal( "You can't reach" ) Then
            UO.Ignore( 'finditem' )
         Else
            UO.UseObject( PackSer )
            wait(2000)
            FishLoot( PackSer )
         Endif
         UO.FindType( ElemPack, -1, 1 )
      Wend
      UO.IgnoreReset()
      UO.Exec( 'exec Fishing' )
   Wend
endsub

Sub CharDead()
   ; нащи действия из-за смерти чара
   ; для начала ждем-с...
   repeat
      wait(300)
   Until UO.Dead() == 0
   ; чар ожил
   RestoreChar( 1 )
   UO.FindType( Bandag, -1, Trum )
   If UO.FindCount() > 0 Then
      UO.MoveItem( 'finditem', '10' )
      wait(1000)
   Endif
   GetWeapon()
   UO.WarMode( 1 )
   UO.Attack( 'lastattack' )
endsub

; ================================================================
; StartFishing() - Запуск фишинга. Сделано в виде отдельной процедуры,
;                  чтобы не переустанавливать лишний раз глобалку
sub StartFishing()
         UO.SetGlobal( 'TimeProcess', str( UO.Timer() ) )
      UO.Exec( 'exec FightElem' )
      UO.Exec( 'exec Fishing' )
endsub

; ================================================================
; Fishing() - Основная процедура фишинга
;
Sub Fishing()
   DropWeapon()
   RestoreChar( 1 )
   UO.WarMode( 0 )
   wait(500)
   UO.Exec( 'exec FightMonster' )
   While TRUE
      FishForward()
      If UO.Dead() Then
         return
      Endif
      If CountTrum( Trum ) > 250 OR CountTrum( Trum2 ) > 250 Then
         return
      Endif
   Wend
endsub

; ================================================================
; FishForward() - Процедура ловли вокруг лодки и сдвига корабля
;
Sub FishForward()
   VAR x, y
   repeat
      For y = -4 To 4
         For x = -4 To -1
            FishTile( x, y )
            If UO.Dead() Then
               return
            Endif
            Next
      Next
      EatChar( Trum, 2, 1, 60 )
      If Shag > 10 Then
         ; пока сделаем плыть назад
         UO.SayU( 'back' )
         wait(40000)
         UO.SayU( 'stop' )
         Shag = 0
      Endif
      Shag = Shag + 1
      UO.SayU( 'forward' )
      wait( 4000 )
      UO.SayU( 'stop' )
   until UO.Dead()
endsub

; ================================================================
; FishTile() - Процедура ловли в заданном тайле
;
Sub FishTile( x, y )
   VAR Ms0 = "You can't see"               ; не можем ловит здесь
   VAR Ms1 = "You can't fish under the ship"   ; не можем ловить здесь
   VAR Ms2 = "You are too far away"         ; далеко
   VAR Ms3 = "There are no fish here"         ; кончилось тут
   VAR Ms4 = "You fish a while, but fail to catch anything"   ; физл
   VAR Ms5 = "You pull out"               ; поймал что-то
   VAR k, t, v
   VAR MaxTime = 300
   k = 0
   repeat
      If UO.Dead() Then
         return
      Endif
      DeleteJournal(ms0)
      DeleteJournal(ms1)
      DeleteJournal(ms2)
      DeleteJournal(ms3)
      DeleteJournal(ms4)
      DeleteJournal(ms5)
      t = UO.Timer()
      GetPole()
      If UO.Waiting() Then
         UO.CancelTarget()
      Endif
      UO.WaitTargetTile( '0', STR( UO.GetX() + x ), STR( UO.GetY() + y ), '251')
      UO.UseObject( UO.GetSerial( UO.ObjAtLayer( 'Lhand' ) ) )
      repeat
         wait(300)
      until UO.InJournal(ms0) OR UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR ((t + MaxTime) < UO.Timer())
      If UO.InJournal(ms0) OR UO.InJournal(ms1) OR UO.InJournal(ms2) Then
         wait(3000)
      Endif
      k = k + 1
      If UO.InJournal(ms5) Then
         k = 0
      Endif
      If UO.Dead() Then
         return
      Endif
      If UO.InJournal( ms5 ) Then
         GetResultFish()
         repeat
            v = Recycle()
         until v == 0
         If CountTrum( Trum ) > 250 OR CountTrum( Trum2 ) > 250 Then
            return
         Endif
      Endif
   until UO.InJournal(ms0) OR UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR (k > 6)
endsub

; ================================================================
; GetResultFish() - Процедура подбора рузультатов лова
;
Sub GetResultFish()
   ; ------- улов -------
   DIM Fish[18]
   Fish[0]  = '0x170B'   ; сапоги
   Fish[1]  = '0x170F'   ; тапки
   Fish[2]  = '0x170D'   ; сандалии
   Fish[3]  = '0x1711'   ; сапоги
   Fish[4]  = '0x09CC'   ; тип рыбы 1
   Fish[5]  = '0x09CD'   ; тип рыбы 2
   Fish[6]  = '0x09CE'   ; тип рыбы 3
   Fish[7]  = '0x09CF'   ; тип рыбы 4
   Fish[8]  = '0x0FC4'   ; ракушка, тип 1
   Fish[9]  = '0x0FC5'   ; ракушка, тип 2
   Fish[10] = '0x0FC6'   ; ракушка, тип 3
   Fish[11] = '0x0FC7'   ; ракушка, тип 4
   Fish[12] = '0x0FC8'   ; ракушка, тип 5
   Fish[13] = '0x0FC9'   ; ракушка, тип 6
   Fish[14] = '0x0FCA'   ; ракушка, тип 7
   Fish[15] = '0x0FCB'   ; ракушка, тип 8
   Fish[16] = '0x0FCC'   ; ракушка, тип 9
   Fish[17] = '0x14ED'   ; карта
   VAR Razmer = 17      ; размер массива - 1
   VAR i
   ; Ищем что у нас валяется под ногами, если надо перерабатываем
   ; и складируем в трюм. Потом введем всякие мешочки разные и ящички.
   For i=0 To Razmer
      UO.FindType( Fish[i], -1, 'ground' )
      If UO.FindCount() > 0 Then
         UO.Grab( 0, 'finditem' )
         Wait( 2000 )
      Endif
   Next
   UO.FindType( MChest, -1, 'ground' )
   If UO.FindCount() > 0 Then
      UO.Grab( 0, 'finditem' )
      Wait( 2000 )
   Endif   
endsub

; ================================================================
; Recycle() - Процедура переработки рузультатов лова
;
Sub Recycle()
   ; ------- улов -------
   DIM Fish[18]
   Fish[0]  = '0x170B'   ; сапоги
   Fish[1]  = '0x170F'   ; тапки
   Fish[2]  = '0x170D'   ; сандалии
   Fish[3]  = '0x1711'   ; сапоги
   Fish[4]  = '0x09CC'   ; тип рыбы 1
   Fish[5]  = '0x09CD'   ; тип рыбы 2
   Fish[6]  = '0x09CE'   ; тип рыбы 3
   Fish[7]  = '0x09CF'   ; тип рыбы 4
   Fish[8]  = '0x0FC4'   ; ракушка, тип 1
   Fish[9]  = '0x0FC5'   ; ракушка, тип 2
   Fish[10] = '0x0FC6'   ; ракушка, тип 3
   Fish[11] = '0x0FC7'   ; ракушка, тип 4
   Fish[12] = '0x0FC8'   ; ракушка, тип 5
   Fish[13] = '0x0FC9'   ; ракушка, тип 6
   Fish[14] = '0x0FCA'   ; ракушка, тип 7
   Fish[15] = '0x0FCB'   ; ракушка, тип 8
   Fish[16] = '0x0FCC'   ; ракушка, тип 9
   Fish[17] = '0x14ED'   ; карта
   VAR Razmer = 17      ; размер массива - 1
   ; ------- инструмент -------
   VAR Scissor = '0x0F9E'   ; тип ножниц
   VAR Cleaver = '0x0EC2'   ; кливер
   ; ------- конечный продукт -------
   VAR Pearl = '0x0F7A'   ; жемчуг
   VAR PearlColor = '0x05B2'   ; цвет жемчуга
   VAR Steak = '0x097A'   ; рыбное филе
   VAR i, Rakush, RetValue = 0

   For i=0 To Razmer
      UO.FindType( Fish[i] )
      If UO.FindCount() > 0 Then
         RetValue = 1
         If i < 4 Then
            ; сапоги и тапки
            ; режем ножницами на бинты и скидываем бинты
            UO.WaitTargetObject( 'finditem' )
            UO.UseType( Scissor )
            Wait( 3000 )
            ; Скинем бинты в трюм
            UO.FindType( Bandag )
            If UO.FindCount() > 0 Then
               UO.MoveItem( 'finditem', '0' , Trum )
               wait( 2000 )
            Endif
         Endif
         If i > 3 AND i < 8 Then
            ; рыба
            ; режем кливером в филе и сбрасываем филе
            ; кливер берется в руки, поэтому потом
            ; снова берем удочку
            UO.WaitTargetObject( 'finditem' )
            UO.UseType( Cleaver )
            Wait( 3000 )
            UO.FindType( Steak )
            If UO.FindCount() > 0 Then
               UO.MoveItem( 'finditem', '0' , Trum )
               wait( 2000 )
            Endif
            UO.UseType( Pole )         
         Endif
         If i > 7 AND i < 17 Then
            ; ракушки
            ; дабл клик на них, если появился жемчуг
            Rakush = UO.GetSerial( 'finditem' )
            UO.UseObject( Rakush )
            wait( 1000 )
            UO.FindType( Pearl, PearlColor )
            If UO.FindCount() > 0 Then
               UO.MoveItem( 'finditem', '0' , Trum )
               wait( 2000 )
            Endif
         Endif
         If i == 17 Then
            ; карта
            UO.MoveItem( 'finditem', '0', Trum2 )
            wait( 2000 )
         Endif
      Endif
   Next
   return RetValue
endsub

; ================================================================
; Процедура подкормки чара. Параметры: сериал контейнера с медом, номер
; сообщения до которого кормить, сколько съесть меда после сообщения,
; как часто кормить чара.
; Прохождение последнего периода контролируется через глобальную переменную
; TimeProcess.
;
; ver. 1.03 (c) Edred
;
Sub EatChar( Sunduk, Nom, Add, TimeWait )
   ; сообщения при кормежке
   UO.Print( 'TEST: eat ' + str( Nom ) + ' message ' + str( Add ) + ' add ' + str( TimeWait ) + ' minutes' )
   VAR Eat1 = 'You eat the food, but are still extremely hungry'
   VAR Eat2 = 'After eating the food, you fell much less hungry'
   VAR Eat3 = 'You eat the food, and begin to feel more satiated'
   VAR Eat4 = 'You are nearly stuffed, but manage to eat the food'
   VAR Eat5 = 'You fell quite full after consuming the food'
   VAR Eat6 = 'You are stuffed!'
   VAR Eat7 = 'You are simply too full to eat any more!'
   VAR Med = '0x09EC'         ; тип меда для подкормки
   VAR i, Eat, j
   ; проверим, пора ли кормиться
   i = Val( UO.GetGlobal( 'TimeProcess' ) )
   i = ( UO.Timer() - i ) / 600
   If i < TimeWait Then
      ; рано кормиться
      return
   Endif
   ; пора кормиться
   If Nom == 1 Then
      Eat = Eat1
   Endif
   If Nom == 2 Then
      Eat = Eat2
   Endif
   If Nom == 3 Then
      Eat = Eat3
   Endif
   If Nom == 4 Then
      Eat = Eat4
   Endif
   If Nom == 5 Then
      Eat = Eat5
   Endif
   If Nom == 6 Then
      Eat = Eat6
   Endif
   If Nom == 7 Then
      Eat = Eat7
   Endif
   UO.FindType( Med, '-1', Sunduk )
   If UO.FindCount() == 0 Then
      ; мед кончился
      UO.SetGlobal( 'TimeProcess', str( UO.Timer() ) )
      return
   Endif
   UO.Grab( '60', 'finditem' )
   Wait( 1000 )
   repeat
      DeleteJournal( Eat )
      UO.UseType( Med )
      Wait( 1000 )
   until NOT UO.InJournal( Eat )
   If Add > 0 Then
      For j = 1 To Add
         UO.UseType( Med )
         Wait( 1000 )
      Next
   Endif
   ; хватит кормиться
   ; выгрузим остатки меда обратно
   UO.Findtype( Med, '-1', 'backpack' )
   UO.MoveItem( 'finditem', 0, Sunduk )
   Wait( 1000 )
   ; Сбросим счетчик
   UO.SetGlobal( 'TimeProcess', str( UO.Timer() ) )
endsub

; ================================================================
; Функция FishLoot() - переложить из указанного пака все в трюм 2
;                      и переложить сам пак в трюм 3
Sub FishLoot( Cont )
   ; лутим все подряд из Cont и скидываем в Trum
   ; потом скидываем пустой Cont в TrumTrash
   UO.FindType( '-1', '-1', Cont )
   while UO.FindCount()
      UO.MoveItem( 'finditem', 0, Trum2 )
      wait(1000)
      UO.FindType( '-1', '-1', Cont )
   wend
   UO.MoveItem( Cont, 0, Trum3 )
   wait(500)
endsub

; ================================================================
; Функция CountTrum() - подсчитать кол-во итемов в указанном трюме
;
Sub CountTrum( cont )
   ; Считаем кол-во любых итемов (или кучек) в cont
   ; и возвращаем результат
   UO.FindType( -1, -1, cont )
   return UO.FindCount()
endsub

; ================================================================
; Функция GetWeapon() - взять в руки оружие и щит
;
Sub GetWeapon()
   ; берем в руки оружие и щит. Динамические паузы и оптимитизация.
   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

; ================================================================
; Функция DropWeapon() - сбросить оружие и щит в пак
;
Sub DropWeapon()
   UO.UnEquip( 'Lhand' )
   wait(500)
   UO.UnEquip( 'Rhand' )
   wait(500)
endsub

; ================================================================
; Функция GetPole() - взять удочку из пака или сундука
;
Sub GetPole()
   If UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) <> Pole Then
      UO.FindType( Pole )
      If UO.FindCount() == 0 Then
         UO.FindType( Pole, -1, Trum )
         If UO.FindCount() == 0 Then
            UO.Print( 'Pole not found. Script terminated...' )
            UO.Exec( 'terminate FightElem' )
            UO.Exec( 'terminate Fishing' )
            return
         Endif
         UO.MoveItem( 'finditem' )
         repeat
            wait(100)
         until UO.Count( Pole ) > 0
      Endif
      UO.Equipt( 'Lhand', Pole )
      repeat
         wait(100)
      until UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Pole
   Endif
endsub

; ================================================================
; Функция DropPole() - сбросить удочку из рук в сундук
;
Sub DropPole()
   VAR i = UO.Count( Pole )
   VAR j
   If i == 0 Then
      return
   Endif
   While i > 1
      UO.FindType( Pole )
      UO.MoveItem( 'finditem', 0 , Trum )
      j = i - 1
      repeat
         wait(100)
      until j == UO.Count( Pole )
      i = i - 1
   Wend
   If UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Pole Then
      DeleteJournal( 'You put the fishing pole' )
      UO.UnEquip( 'Lhand' )
      wait(500)
   Endif
;   UO.FindType( Pole )
;   UO.MoveItem( 'finditem', 0, Trum )
;   repeat
;      wait(100)
;   until UO.Count( Pole ) == 0
endsub

; ================================================================
; Функция CastSpell() - кастуем на себя заклинание
;
Sub CastSpell( nam )
   If nam == 'Bless' Then
      GetRegs( 'GL', 1 )
      GetRegs( 'MR', 1 )
      UO.WaitTargetSelf()
      UO.Cast( 'Bless' )
   Endif
   If nam == 'Dispel' Then
      GetRegs( 'GL', 1 )
      GetRegs( 'MR', 1 )
      GetRegs( 'SA', 1 )
      UO.WaitTargetSelf()
      UO.Cast( 'Bless' )
   Endif
   wait(4000)
endsub

; ================================================================
; Функция GetRegs() - взять нужный рег в нужном колве из сундука 2
;
Sub GetRegs( nam, kolvo )
   VAR BP = '0x0F7A'      ; Black Pearl
   VAR BM = '0x0F7B'      ; Bood Moss
   VAR GA = '0x0F84'      ; garlic
   VAR GI = '0x0F85'      ; Ginseng
   VAR MR = '0x0F86'      ; Mandrake Root
   VAR NS = '0x0F88'      ; Night Shade
   VAR SA = '0x0F8C'      ; Sulphorous Ash
   VAR SS = '0x0F8D'      ; Spiders Silk
   If nam == 'BP' Then
      UO.FindType( nam, '0x0000', Trum2 )
   Else
      UO.FindType( nam, -1, Trum2 )
   Endif
   If UO.FindCount() == 0 Then
      return
   Else
      UO.MoveItem( 'finditem', kolvo )
      repeat
         wait(100)
      until UO.Count( nam ) == kolvo
   Endif
endsub

; ================================================================
; Функция RemoveRegs() - сбросить все лишние реги в сундук 2
;
Sub RemoveRegs()
   DIM Regs[8]
   Regs[0] = '0x0F7A'      ; Black Pearl
   Regs[1] = '0x0F7B'      ; Bood Moss
   Regs[2] = '0x0F84'      ; garlic
   Regs[3] = '0x0F85'      ; Ginseng
   Regs[4] = '0x0F86'      ; Mandrake Root
   Regs[5] = '0x0F88'      ; Night Shade
   Regs[6] = '0x0F8C'      ; Sulphorous Ash
   Regs[7] = '0x0F8D'      ; Spiders Silk
   VAR i
   For i = 0 To 7
      UO.FindType( Regs[i] )
      While UO.FindCount() > 0
         UO.MoveItem( 'finditem', -1, Trum2 )
         wait(1000)
         UO.FindType( Regs[i] )
      Wend
   Next
endsub

; ================================================================
; Функция RestoreChar() - вылечить чара, снять курсу если надо
;                         (диспел, потом блесс)
Sub RestoreChar( flag )
   If flag == 0 Then
      If UO.Count( Bandag ) > 0 Then
         UO.Bandageself()
         wait( 300 )
      Endif
      return
   Endif
   If UO.Life == 150 Then
      return
   Endif
   ; посмотрим, надо ли снимать курсу с чара
#   If UO.Str < 150 Then
#      ; на нас курса, надо взять реги из трюма-2 и наложить
#      ; на себя сначала диспел, потом блесс
#      CastSpell( 'Bless' )
#      CastSpell( 'Dispel' )
#      RemoveRegs()
#   Endif
   ; теперь лечим чара до упора
   UO.FindType( Bandag, -1, Trum )
   If UO.FindCount() > 0 Then
      UO.MoveItem( 'finditem', '10' )
      wait(1000)
      repeat
         UO.Bandageself()
         wait(3000)
      until UO.Life == 150
      ; скинем в трюм остаток бинтов и использованные бинты
      UO.FindType( Bandag )
      If UO.FindCount() > 0 Then
         UO.MoveItem( 'finditem', 0, Trum )
         wait(1000)
      Endif
      UO.FindType( BlBandag )
      If UO.FindCount() > 0 Then
         UO.MoveItem( 'finditem', 0, Trum )
         wait(1000)
      Endif
   Else
      repeat
         wait(500)
      until UO.Life == 150
   Endif
endsub

Sub DeleteJournal( string1 )
   VAR nom = UO.InJournal( string1 )
   If nom > 0 Then
      UO.SetJournalLine( Nom - 1, 'string replaced' )
      DeleteJournal( string1 )
   Endif
endsub

; ============= HIDE ===
; заходим в хайд или контролируем его.
;
sub Hide()
   While UO.Dead()
      wait(100)
   Wend
   While not UO.Hidden()
      UO.UseSkill('Hiding')
      Wait(4000)
   Wend
endsub

sub test1()
   If UO.Life < 150 Then
      UO.Print( 'TEST. Restore chars...' )
      RestoreChar( 0 )
      UO.Print( 'TEST. Get weapons back...' )
      GetWeapon()
   Endif
endsub

#####################################################################
; Remember armor & weapon, disarm, healing from bandages, arm
sub Bandag()
   UO.SetArm('CWeapon')
   UO.Exec('bandageself')
   wait(300)
   UO.Arm('CWeapon')
endsub

sub test2()
   UO.Print( str( UO.Str ) )
endsub


Top
   
 Post subject:
PostPosted: 2006-03-14 10:59:29 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3220
А почему собственно наследство? Автор уходит от нас? :cry:


Top
   
 Post subject:
PostPosted: 2006-03-14 11:08:58 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Бот на беггинг

Code:
#####################################################################
; AutoBegging. v.1.10b (c) Edred
;
; ОПИСАНИЕ: Скрипт работает по текстовому файлу, в котором каждая строка
; представляет из себя команду скрипту. Структура файла:
; 1111 2222 Команда
; причем "Команда" - не обязательна. Прочитав такую строку скрипт
; проведет чара в указанные координаты и выполнит команду, если она есть.
;
; В конце файла следует автоматический переход на начало и так до упора.
;
; Хождение в скрипте осуществляется с обходом препятствий, но лучше
; задавать прямые маршруты без препятствий, так как последние сильно
; замедляют процесс.
;
; Возможные команды:
; Door    - открывает дверь, в которую чар уже уперся носом
; Bank    - открывает банк и скидывает в него все деньги из пака
; Begging - ищет вокруг чара НПС, попрошайничает у них, если НПС далеко -
;           ждет пока тот не подойдет ближе. Если НПС двое, просит
;           у обоих по очереди.
; DbDoor - открывает одну створку двойной двери и шагает в нее
;
; ВНИМАНИЕ! В скрипте нет проверок "на дурака" от неправильного написания
; маршрута. Все последствия - на вашей совести.
;
; Максимальная длина маршрута - 999 строк.
;
; v.1.01 - мелкие правки, добавление задержек и чеклагов в ходилку и режимы
; v.1.02 - более интеллектуальный способ открытия дверей, пока без особого
;          контроля двухстворчатых дверей
; v.1.03 - Разделяем двери на обычные (Door) и двойные (DbDoor). На открытие
;          разных делаем разные процедуры. Процедура открытия двойных дверей
;          содержит в себе определение какая створка открылась и шаг в точку
;          открытой створки.
; v.1.04 - Если в паке 700 или более гп - перед попрошайничеством чар скинет
;          лишнее под ноги, потом подберет (скидывает только лишнее!!!)
; v.1.05 - Добавляем ведение статистики в текстовое окно
; v.1.06 - Добавляем передачу в процедуру открытия дверей в качестве параметров
;          координаты точки, где мы должны стоять перед дверью. Если идет мессага
;          "You can't reach that." - чар переходит в эту точку.
; v.1.07 - Процедура захода в дверь после открытия теперь работает не только
;          на двойных дверях, но и на одиночных.
; v.1.08 - Интегрируем в скрипт третью ходилку (через EasyUO). Для удобства
;          вводим в начале скрипта флаг переключения типа ходилки.
; v.1.09 - Выкидываем на фиг все ходилки кроме ходилки через ИзиУО, заводим
;          в передачу параметров ей толерантность (близость подхода) и таймаут
;          (сколько ждать прежде чем пытаться обойти). Готовимся сделать подход
;          к вендору. Также удаляем одну из процедур открытия дверей, ввиду
;          их полной идентичности. Команды оставляем обе для совместимости.
; v.1.10 - Ввел авторес чара и вызов гвардов
;
; Надо разобраться, чем же в итоге у меня двойные двери и одиночные отличаются? :)
;
####### УСТАНОВКИ БАНКОВСКИХ ЯЧЕЕК #######
; Edred
; VAR Meshok = '0x40340981'
; Driada
VAR Meshok = '0x4051157F'
####### СЛУЖЕБНЫЕ УСТАНОВКИ ######
VAR TextLines = 0
VAR Timeout = '60s'

sub AutoBegging()
   VAR F = file("c:\games\begall.ini")
   VAR s, fend = 0, i, word1, word2, word3
   DIM   begpath[1000]
   for i = 0 to 999
      begpath[i] = ''
   next
   ; Читаем маршрут и помещаем его в массив
   i = 1
   F.Open()
   While NOT F.Eof() AND NOT fatal error AND i < 1000
      s=safe call F.ReadLn()
      If NOT fatal error Then
         s = left( s, len( s ) - 1 )
         begpath[i] = s
         i = i + 1
      Endif
   Wend
   F.Close()
   fend = i - 1
   ; маршрут считан в массив, последняя строка - fend
   UO.TextOpen()
   UO.TextClear()
   While TRUE
      If UO.Life == 0 Then
         ResChar()
         repeat
            wait(1000)
         until UO.Life == UO.Str OR UO.Life == 0
      Endif
      UO.TextPrint( str(UO.Date()) + ' ' + str(UO.Time()) + ' Patch started' )
      TextLines = TextLines + 1
      for i = 1 to fend
         If UO.Life < UO.Str Then
            UO.SayU( 'GUARDS' )
            wait(500)
            UO.WarMode( 0 )
            wait(500)
         Endif
         s = begpath[i] + ' fin '
         ; теперь разберем строку s
         word1 = GetWord( s, 1 )
         word2 = GetWord( s, 2 )
         word3 = GetWord( s, 3 )
         ; word1 и word2 - координаты куда идти
         GoToXY( word1, word2, '0', Timeout )
         If UO.Life < UO.Str Then
            UO.SayU( 'GUARDS' )
            wait(500)
            UO.WarMode( 0 )
            wait(500)
         Endif
         If word3 <> 'fin' Then
            ; есть какая-то команда, она в word3
            If word3 == 'Door' Then
               wait(1000)
               CheckLag()
               OpenMyDoor( val( word1 ), val( word2 ) )
            Endif
            If word3 == 'DbDoor' Then
               wait(1000)
               CheckLag()
               OpenMyDoor( val( word1 ), val( word2 ) )
            Endif
            If word3 == 'Bank' Then
               DischargeBank()
            Endif
            If word3 == 'Begging' Then
               BeggingNPC()
            Endif
         Endif
         If UO.Life < UO.Str Then
            UO.SayU( 'GUARDS' )
            wait(500)
            UO.WarMode( 0 )
            wait(500)
         Endif
         If UO.Life == 0 Then
            i = fend
         Endif
      next
      UO.TextPrint( str(UO.Date()) + ' ' + str(UO.Time()) + ' Patch finished' )
      TextLines = TextLines + 1
      If TextLines > 200 Then
         UO.TextClear()
         TextLines = 0
      Endif
      If UO.Life == 0 Then
         ResChar()
         repeat
            wait(1000)
         until UO.Life == UO.Str OR UO.Life == 0
      Endif
   Wend
endsub

Sub ResChar()
   VAR cont
   UO.SayU( '.goankh' )
   wait(5000)
   GoToXY( '1427', '1677', '0', '60s' )
   wait(1000)
   UO.UseObject( '0x405D739B' )
   repeat
      wait(1000)
   Until UO.Life > 0
   UO.WarMode( 0 )
   wait(1000)
   CheckLag()
   ; Теперь потопали в Веспер
   GoToXY( '1430', '1685', '0', '60s' )
   GoToXY( '1443', '1685', '0', '60s' )
   GoToXY( '1443', '1695', '0', '60s' )
   GoToXY( '1416', '1695', '0', '60s' )
   wait(1000)
   CheckLag()
   UO.Press( 36 )
   wait(1000)
   CheckLag()
   UO.Press( 36 )
   wait(1000)
   CheckLag()
   GoToXY( '5864', '1975', '0', '60s' )
   wait(1000)
   CheckLag()
   UO.Press( 33 )
   wait(1000)
   CheckLag()
   UO.Press( 33 )
   wait(1000)
   CheckLag()
   GoToXY( '2519', '590', '0', '60s' )
   GoToXY( '2653', '662', '0', '60s' )
   GoToXY( '2784', '618', '0', '60s' )
   GoToXY( '2822', '703', '0', '60s' )
   GoToXY( '2890', '703', '0', '60s' )
   GoToXY( '2897', '670', '0', '60s' )
   UO.UseObject( 'backpack' )
   wait(1000)
   CheckLag()
   UO.SayU( 'BANK' )
   wait(1000)
   cont = UO.GetSerial( 'lastcontainer' )
   UO.FindType( '0x0E21', '-1', cont )
   If UO.FindCount() > 0 Then
      repeat
         UO.Grab( '1', 'finditem' )
         wait(1000)
         CheckLag()
         UO.BandageSelf()
         wait(4000)
         UO.FindType( '0x0E21', '-1', cont )
      until UO.Life == UO.Str OR UO.FindCount() == 0
      UO.FindType( '0x0E20' )
      If UO.FindCount() > 0 Then
         UO.MoveItem( 'finditem', '0', cont )
         wait(1000)
         CheckLag()
      Endif
   Endif
endsub

Sub GoToXY( x, y, tolerance, tm )
   ; через ИзиУО!
   UO.SetEasyUO( 4, tm )
   UO.SetEasyUO( 3, tolerance )
   UO.SetEasyUO( 2, y )
   UO.SetEasyUO( 1, x )
   repeat
      wait( 50 )
   until UO.GetEasyUO( 1 ) == '0'
   return
endsub

Sub OpenMyDoor( x1, y1 )
   ; Любые двери!
   ;
   UO.Set( 'finddistance', '2' )
   DIM ClosedDoor[4]
   DIM OpenedDoor[4]
   DIM ChangeX[4]
   DIM ChangeY[4]
   ; дверь 1-9
   ; левая створка
   ClosedDoor[0] = '0x06AD'
   OpenedDoor[0] = '0x06AE'
   ChangeX[0] = -1
   ChangeY[0] = -1
   ; правая створка
   ClosedDoor[1] = '0x06AF'
   OpenedDoor[1] = '0x06B0'
   ChangeX[1] = -1
   ChangeY[1] = 1
   ; дверь 7-3
   ; левая створка
   ClosedDoor[2] = '0x06A5'
   OpenedDoor[2] = '0x06A6'
   ChangeX[2] = 1
   ChangeY[2] = -1
   ; правая створка
   ClosedDoor[3] = '0x06A7'
   OpenedDoor[3] = '0x06A8'
   ChangeX[3] = -1
   ChangeY[3] = -1
   VAR i, flag = 0, SerFI, DoorX, DoorY, s
   VAR nemogu = "You can't reach that."
   # Поехали!
   DeleteJournal( nemogu )
   For i = 0 To 3
      UO.FindType( OpenedDoor[i], '-1', '1' )
      If UO.FindCount() > 0 Then
         DoorX = UO.GetX( 'finditem' ) + ChangeX[i]
         DoorY = UO.GetY( 'finditem' ) + ChangeY[i]
         GoToXY( str( DoorX ), str( DoorY ), '0', Timeout )
         CheckLag()
         UO.Print( 'Already open' )
         return
      Endif
   Next
   For i = 0 To 3
      UO.FindType( ClosedDoor[i], '-1', '1' )
      If UO.FindCount() > 0 Then
         SerFI = UO.GetSerial( 'finditem' )
         UO.OpenDoor()
         flag = 1
         wait(500)
         CheckLag()
         UO.FindType( OpenedDoor[i], '-1', '1' )
         If UO.FindCount() > 0 Then
            DoorX = UO.GetX( 'finditem' ) + ChangeX[i]
            DoorY = UO.GetY( 'finditem' ) + ChangeY[i]
            GoToXY( str( DoorX ), str( DoorY ), '0', Timeout )
            CheckLag()
            UO.Print( 'Allright' )
            return
         Else
            If UO.InJournal( nemogu ) Then
               GoToXY( str( x1 ), str( y1 ), '0', Timeout )
            Endif
            wait(1000)
            ; Не получилось мытьем, попробуем катаньем
            UO.Print( 'Use double click...' )
            s = 0
            repeat
               UO.UseObject( SerFI )
               wait( 1000 )
               CheckLag()
               s = s + 1
               UO.FindType( OpenedDoor[i], '-1', '1' )
            until UO.Findcount() OR s > 10
            If s > 10 Then
               return
            Endif
            DoorX = UO.GetX( 'finditem' ) + ChangeX[i]
            DoorY = UO.GetY( 'finditem' ) + ChangeY[i]
            GoToXY( str( DoorX ), str( DoorY ), '0', Timeout )
            CheckLag()
            UO.Print( 'Allright' )
            return
         Endif
      Endif
   Next
endsub

Sub DischargeBank()
   VAR Dengi = '0x0EED'
   UO.TextPrint( 'My gold is ' + str( UO.Count( Dengi ) ) )
   TextLines = TextLines + 1
   CheckLag()
   UO.SayU( 'BANK' )
   wait(1000)
   CheckLag()
   UO.FindType( Dengi )
   While UO.FindCount() > 0
      UO.MoveItem( 'finditem' , '0', Meshok )
      wait(1000)
      CheckLag()
      UO.FindType( Dengi )
   Wend
endsub

Sub FindVendor( lastvend )
   VAR VendSer, VendTyp1 = '0x0191', VendTyp2 = '0x0190'
   UO.FindType( VendTyp1, '-1', '1' )
   If UO.FindCount() == 0 Then
      UO.FindType( VendTyp2, '-1', '1' )
      If UO.FindCount() == 0 Then
         return ''
      Endif
   Endif
   VendSer = UO.GetSerial( 'finditem' )
   If lastvend == VendSer Then
      UO.Ignore( 'finditem' )
      UO.FindType( VendTyp1, '-1', '1' )
      If UO.FindCount() == 0 Then
         UO.FindType( VendTyp2, '-1', '1' )
         If UO.FindCount() == 0 Then
            return ''
         Endif
      Endif
      VendSer = UO.GetSerial( 'finditem' )
   Endif
   return VendSer
endsub

Sub BeggingNPC()
   VAR Dengi = '0x0EED'
   VAR dal = 'Here, you can have this'
   VAR poslal = "I'm sorry,"
   VAR daleko = 'is too far away!'
   VAR chasto = 'You must wait to use that skill again.'
   VAR mnogo = 'I can see the money'
   UO.Set( 'finddistance', '5' )
   VAR VendSer, k, HSer, flag = 0, lastvend = ''
   UO.Ignore( 'self' )
   VendSer = FindVendor( lastvend )
   If VendSer <> '' Then
      ; вендор найден
      repeat
         DeleteJournal( dal )
         DeleteJournal( poslal )
         DeleteJournal( daleko )
         DeleteJournal( chasto )
         DeleteJournal( mnogo )
         If UO.Count( Dengi ) > 699 Then
            UO.FindType( Dengi )
            If UO.FindCount() > 0 Then
               flag = 1
               UO.Drop( str( UO.Count( Dengi ) - 699 ), '0', '0', '0', 'finditem' )
               wait(100)
               CheckLag()
            Endif
         Endif
         UO.WaitTargetObject( VendSer )
         UO.UseSkill( 'Begging' )
         k = 0
         repeat
            wait(100)
            k = k + 1
         until UO.InJournal( dal ) OR UO.InJournal( poslal ) OR UO.InJournal( daleko ) OR UO.InJournal( chasto ) OR UO.InJournal( mnogo ) OR k > 50
         If flag == 1 Then
            UO.Findtype( Dengi, '-1', '1' )
            while UO.FindCount() > 0
               UO.Grab( '0', 'finditem' )
               wait(500)
               CheckLag()
               UO.Findtype( Dengi, '-1', '1' )
            Wend
            flag = 0
         Endif
         If UO.InJournal( chasto ) Then
            wait(2000)
         Endif
      until UO.InJournal( dal ) OR UO.InJournal( poslal ) OR UO.InJournal( daleko ) OR UO.InJournal( mnogo ) OR k > 50
      VendSer = FindVendor( VendSer )
      If VendSer <> '' Then
         repeat
            DeleteJournal( dal )
            DeleteJournal( poslal )
            DeleteJournal( daleko )
            DeleteJournal( chasto )
            DeleteJournal( mnogo )
            If UO.Count( Dengi ) > 699 Then
               UO.FindType( Dengi )
               If UO.FindCount() > 0 Then
                  flag = 1
                  UO.Drop( str( UO.Count( Dengi ) - 699 ), '0', '0', '0', 'finditem' )
                  wait(100)
                  CheckLag()
               Endif
            Endif
            UO.WaitTargetObject( VendSer )
            UO.UseSkill( 'Begging' )
            k = 0
            repeat
               wait(100)
               k = k + 1
            until UO.InJournal( dal ) OR UO.InJournal( poslal ) OR UO.InJournal( daleko ) OR UO.InJournal( chasto ) OR UO.InJournal( mnogo ) OR k > 50
            If flag == 1 Then
               UO.Findtype( Dengi, '-1', '1' )
               while UO.FindCount() > 0
                  UO.Grab( '0', 'finditem' )
                  wait(500)
                  CheckLag()
                  UO.Findtype( Dengi, '-1', '1' )
               Wend
               flag = 0
            Endif
            If UO.InJournal( chasto ) Then
               wait(2000)
            Endif
         until UO.InJournal( dal ) OR UO.InJournal( poslal ) OR UO.InJournal( daleko ) OR UO.InJournal( mnogo ) OR k > 50
      Endif
   Endif
   UO.IgnoreReset()
   UO.Print( 'My gold is ' + str( UO.Count( Dengi ) ) )
endsub

Sub CheckLag()
   DeleteJournal( 'backpack' )
   UO.Click( 'backpack' )
   repeat
      wait(100)
   until UO.InJournal( 'backpack' )
   return
end sub

Sub DeleteJournal( string1 )
   VAR nom = UO.InJournal( string1 )
   If nom > 0 Then
      UO.SetJournalLine( Nom - 1, 'string replaced' )
      DeleteJournal( string1 )
   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


Ходилка на EasyUO (запустить Изю, привязать к окну, в ней запустить скрипт, забыть про Изю, запустить скрипт в инжекте)

Code:
; Процедура перемещения чара для скриптов инжекта
; Считывает все параметры из регистри
;
; v.1.02 (c) Edred
;

initevents
set *1 0
set *2 0
set *3 0
set *4 0

loop:
if *1 <> 0
{
   wait 2
   move *1 *2 *3 *4
   set *1 0
}
goto loop



Пример файла с командами для скрипта:

Code:
2883 656 Door
2883 654
2886 649
2890 649 Begging
2886 649
2883 654 Door
2883 657
2910 681
2915 680 Door
2915 678
2916 673
2922 673 Begging
2915 673
2915 666 Begging
2915 678 Door
2915 680
2892 704
2903 721
2907 720 Door
2907 718
2907 706 Begging
2907 718 Door
2907 721
2904 739 Door
2902 739
2890 746 Begging
2902 739 Door
2904 739
2888 723 Door
2886 723
2877 726
2875 721 Begging
2877 726
2879 723
2886 723 Door
2888 723
2891 704
2890 680
2896 679 Bank
2914 704
2914 708
2918 708
2945 708
2950 713
2955 713
2955 712 Door
2955 710
2954 710
2954 707 Begging
2954 710
2955 710 Door
2955 713
2961 713
2961 739
2981 739
2981 769
2998 769
2998 768 DbDoor
2998 766
2994 766
2994 763 Begging
2994 766
2998 766 DbDoor
2998 769
3002 773
3002 779
3000 779 Door
2998 779
2991 779
2991 781
2988 781
2988 778 Begging
2988 781
2991 781
2992 780
2992 779
2998 779 Door
3001 779
3011 769
3022 769
3022 768 DbDoor
3022 764
3019 764
3019 763 Begging
3019 764
3022 764
3022 766 DbDoor
3022 769
3026 773
3026 779
3024 779 Door
3018 779
3015 776
3009 776
3009 781
3011 781 Begging
3009 781
3009 776
3016 776
3016 779
3022 779 Door
3025 779
3025 773
2972 773
2972 803
2978 809
2978 819
2976 819 Door
2960 819 Begging
2974 819 Door
2977 819
2983 825
2995 824 Door
2995 814 Begging
2995 822 Door
2995 825
3001 831
3000 835 Door
2996 835
2996 839
2993 839
2993 841 Begging
2993 839
2992 839
2992 835 Begging
2994 835
2994 839
2997 839
2997 835 Door
3001 835
3001 830
2977 825
2967 835
2956 835
2956 847
2935 847
2929 847
2928 854 DbDoor
2920 855
2920 859 Begging
2920 855
2926 855 DbDoor
2929 854
2929 847
2927 845
2922 845
2911 845
2906 850
2906 853
2879 853
2872 860
2872 865
2858 865
2848 875
2840 875 DbDoor
2833 876 Begging
2838 881
2838 885
2841 885
2841 883 Begging
2841 886
2836 886
2836 869
2844 869
2844 867 Begging
2844 870
2838 870
2838 876 DbDoor
2849 876
2859 866
2859 856 Door
2859 854
2866 854
2866 852 Begging
2866 854
2859 854 Door
2859 857
2850 857
2850 803
2840 803 Door
2838 803
2838 809
2844 809
2844 811 Begging
2844 809
2838 809
2838 797
2844 797
2844 795 Begging
2844 797
2838 797
2838 803 Door
2847 803
2856 794
2862 800
2862 803
2860 804 DbDoor
2860 802
2860 804
2858 804
2858 809
2862 809
2862 813
2865 813
2865 811 Begging
2865 813
2861 813
2861 809
2858 809
2858 804 DbDoor
2861 804
2861 799
2855 793
2885 793
2894 802
2900 802
2909 811
2911 809
2915 809
2915 808 Door
2915 805
2918 805
2918 799
2915 799 Begging
2915 797
2916 797
2916 794
2918 794 Door
2921 794 Begging
2919 794 Door
2917 794
2917 806
2915 806 Door
2915 809
2907 809
2905 807
2904 796 Door
2901 796
2901 787 Begging
2901 796
2902 796 Door
2905 796
2905 800
2893 800
2882 789
2882 757
2877 752
2877 733
2882 728
2890 728
2890 680
2896 679 Bank
2897 670
2883 670


Top
   
 Post subject:
PostPosted: 2006-03-14 11:13:15 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Destruction wrote:
А почему собственно наследство? Автор уходит от нас? :cry:


Автор прекратил активно играть восемь месяцев назад. Точнее, вообще прекратил играть. Может, еще когда будет, но не скоро. И автору жалко, если время, потраченное им на скрипты, пропадет зря. А у автора уже погибло море интересных скриптов в результате смен работы/креша винчей/флешек и пр.


Top
   
 Post subject:
PostPosted: 2006-03-15 15:12:38 
Offline
User avatar

Joined: 2006-03-05 02:44:27
Posts: 34
Edred wrote:
Поехал сам скрипт, часть 1

Code:
#===================================================================#
# MINING & LUMBERJACKING.                                           #
#===================================================================#
#   v.3.30b       (с) Edred                                         #
#===================================================================#
# Скрипт требует подключения ASM-3 версии не ниже 503.01PE          #
#===================================================================#
;
; Многофункциональный скрипт на мининг и ламбер. Выбор режимов работы
; и настройка осуществляется через меню, написанное на Delphi.
; Все настройки вынесены в ini-файл. Подробное описание принципов работы
; смотрите в файле mine&lumb.hst.
;
#========================================#
#  СТАРТОВЫЙ СКРИПТ                      #
#========================================#
;
sub main()
   ; 1. Устанавливаем флаг готовности ответа параметров в 'Wait' (регистри)
   ; 2. Запрашиваем через менюшку (Дельфя) параметры запуска скрипта
   ; 3. Ожидаем пока флаг готовности не будет 'Yes' или 'No'. Если 'No' -
   ;    выход из скрипта.
   ; 4. Считываем из файла mine&lamb.ini параметры запуска скрипта
   ; 5. Устанавливаем все необходимые глобальные переменные
   ; 6. Запускаем необходимый скрипт
   ;
   VAR i
   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
   ; Режим работы скрипта:
   UO.SetGlobal( 'ModeOfScript', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'ModeOfScript' ) )
   ; Номер маршрута:
   UO.SetGlobal( 'NumberPatch', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'NumberPatch' ) )
   ; Флаг использования хайда
   UO.SetGlobal( 'CheckHide', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckHide' ) )
   ; Флаг использования инвизов
   UO.SetGlobal( 'CheckInviz', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckInviz' ) )
   ; Флаг контроля сытости чара
   UO.SetGlobal( 'CheckChatFood', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckChatFood' ) )
   ; Флаг использования разгрузки в банк
   UO.SetGlobal( 'CheckBankDis', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckBankDis' ) )
   ; Флаг включения подробного лога
   UO.SetGlobal( 'CheckLog', UO.asmGetIniVar( 'mine&lumb.ini', 'Setup', 'CheckLog' ) )
   ;
   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
   #========================= Настройки рунбуки ==================================
   #==============================================================================
   UO.SetGlobal( 'RunbookBase', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'RunbookBase' ) )
   UO.SetGlobal( 'RunbookTile', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'RunbookTile' ) )
   UO.SetGlobal( 'RunbookTile2', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'RunbookTile2' ) )
   UO.SetGlobal( 'BaseRune', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'BaseRune' ) )
   UO.SetGlobal( 'BaseRuneScroll', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'BaseRuneScroll' ) )
   UO.SetGlobal( 'RechargeNumber', UO.asmGetIniVar( 'mine&lumb.ini', 'Runbooks', 'RechargeNumber' ) )
   If UO.GetGlobal('RunbookBase')=='' OR UO.GetGlobal('RunbookTile')=='' OR UO.GetGlobal('RunbookTile2')=='' OR UO.GetGlobal('BaseRune')=='' OR UO.GetGlobal('BaseRuneScroll')=='' OR UO.GetGlobal('RechargeNumber')=='' 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
      UO.SetGlobal( 'Wall1Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall1Rune' ) )
      UO.SetGlobal( 'Wall2Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall2Rune' ) )
      UO.SetGlobal( 'Wall3Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall3Rune' ) )
      UO.SetGlobal( 'Wall4Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall4Rune' ) )
      UO.SetGlobal( 'Wall5Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall5Rune' ) )
      UO.SetGlobal( 'Wall6Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall6Rune' ) )
      UO.SetGlobal( 'Wall7Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall7Rune' ) )
      UO.SetGlobal( 'Wall8Rune', UO.asmGetIniVar( 'mine&lumb.ini', tmpstr, 'Wall8Rune' ) )
   Endif
   If UO.GetGlobal('Wall1Rune')=='' OR UO.GetGlobal('Wall2Rune')=='' OR UO.GetGlobal('Wall3Rune')=='' OR UO.GetGlobal('Wall4Rune')=='' OR UO.GetGlobal('Wall5Rune')=='' OR UO.GetGlobal('Wall6Rune')=='' OR UO.GetGlobal('Wall7Rune')=='' OR UO.GetGlobal('Wall8Rune')=='' Then
      UO.Print( 'Runes settings not found! Check your ini-file! Script Terminated' )
      return 0      
   Endif
   #========================= Настройки сундуков =================================
   #==============================================================================
   If UO.GetGlobal( 'ModeOfScript' ) <> '5' AND UO.GetGlobal( 'ModeOfScript' ) <> '6' Then
      ; Не ВИП режимы
      UO.SetGlobal( 'Sund_Tile_X', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'Sund_Tile_X' ) )
      UO.SetGlobal( 'Sund_Tile_Y', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'Sund_Tile_Y' ) )      
      UO.SetGlobal( 'Sund1_Ser', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'Sund1_Ser' ) )
      UO.SetGlobal( 'Sund2_Ser', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'Sund2_Ser' ) )
      UO.SetGlobal( 'BoxRegs', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'BoxRegs' ) )
      UO.SetGlobal( 'BoxBand', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'BoxBand' ) )
      UO.SetGlobal( 'BoxPick', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'BoxPick' ) )
      UO.SetGlobal( 'BoxArms', UO.asmGetIniVar( 'mine&lumb.ini', 'DischargeSer', 'BoxArms' ) )
   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 - сбаланчированный.
   #======================= Настройки контроля ПК ================================
   #==============================================================================
   UO.SetGlobal( 'MinNotoriety', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MinNotoriety' ) )
   UO.SetGlobal( 'MinEnemyDist', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MinEnemyDist' ) )
   UO.SetGlobal( 'MinEnemyDist2', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MinEnemyDist2' ) )
   UO.SetGlobal( 'MaxEnemyDist', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MaxEnemyDist' ) )
   #======================= Настройки инструментов ===============================
   #==============================================================================
   ; Внимание! при крафте топоров и кирок для запаса на складе проверяйте их
   ; типы и запасайте только перечисленные:
   UO.SetGlobal( 'Pickaxe', '0x0E85')            ; Кирка (тип) Используется только этот!
   UO.SetGlobal( 'Hatchet', '0x0F43' )            ; Топор (тип) Используется только этот!
   UO.SetGlobal( 'Cleaver', '0x0EC2')            ; кливер (тип)
   UO.SetGlobal( 'Bandag', '0x0E21')            ; Тип бинтов
   UO.SetGlobal( 'BlBandag', '0x0E20')            ; Тип кровавых бинтов
   UO.SetGlobal( 'Inviz', '0x0F09' )            ; боттлы с инвизками
   UO.SetGlobal( 'GreatHeal','0x0F0C')            ; боттлы с греатер хилами
   UO.SetGlobal( 'MyFork', '0x1406')            ; оружие (тип)
   UO.SetGlobal( 'MyShield', '0x1B76' )         ; щит (тип)   
   #======================= Настройки счетчиков ==================================
   #==============================================================================
   ; НИЧЕГО НЕ ИЗМЕНЯЙТЕ В ЭТОЙ СЕКЦИИ!!! ВСЕ СУММЫ В ФАЙЛЕ MINE&LUMB.INI
   ; счетчики логов
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'TreeLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Logs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'AncientLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'AncientLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'SturdyLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'SturdyLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'SteelLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'SteelLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'NeitralLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'NeitralLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'ChaosLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'ChaosLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'OrderLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'OrderLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'TitanicLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'TitanicLogs', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'LogCount', 'ElvinLogs' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'ElvinLogs', tmpstr )
   ; счетчики руды
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Iron' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Iron', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Damned' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Damned', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Kreonit' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Kreonit', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Copper' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Copper', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Bronze' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Bronze', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Walean' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Walean', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Golden' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Golden', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Silver' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Silver', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Oceanite' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Oceanite', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'BloodRock' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'BloodRock', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Sacred' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Sacred', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Brilliant' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Brilliant', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Order' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Order', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Chaos' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Chaos', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Neutral' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Neutral', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Stardust' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Stardust', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Citadel' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Citadel', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Plaster' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Plaster', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Sandstone' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Sandstone', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Stone' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Stone', tmpstr )
   tmpstr = UO.asmGetIniVar( 'mine&lumb.ini', 'OreCount', 'Marble' )
   If tmpstr == '' Then
      tmpstr = '0'
   Endif
   UO.SetGlobal( 'Marble', tmpstr )
   ; общий счетчик
   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
   #======================= Настройки процесса ===================================
   #==============================================================================
   UO.SetGlobal( 'MaxWightOfChar', UO.asmGetIniVar( 'mine&lumb.ini', 'OtherConfig', 'MaxWightOfChar' ) )
   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


у меня выдает ошибку в 36 строке UO.asmGetIniVar кричит тут ошибка, в чем проблема помогите?


Top
   
 Post subject:
PostPosted: 2006-03-15 16:36:15 
Offline
User avatar

Joined: 2005-08-18 09:09:18
Posts: 104
Location: RUSSIA
У тебя видимо АСМА нету. :roll:


Top
   
 Post subject:
PostPosted: 2006-03-15 17:25:22 
Offline
User avatar

Joined: 2006-03-05 02:44:27
Posts: 34
Toolmate wrote:
У тебя видимо АСМА нету. :roll:


асм стоит 503 01


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 203 posts ]  Go to page Previous 1 2 3 4 511 Next

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 34 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