Наследство от Edred-а

Anything and all.

Moderators: Murderator+, Murderator

Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

файл Resource_Map.dat

Code: Select all

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
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

файл Resource_Static.dat

Code: Select all

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
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Стартовое меню (Дельфи), автоматически запускаемое скриптом:

Image

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

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

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

setup4ML.pas

Code: Select all

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: Select all

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
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Поехал сам скрипт, часть 1

Code: Select all

#===================================================================#
# 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
admir
Posts: 528
Joined: 2005-01-13 07:20:54

Post by admir »

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.
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

часть 2

Code: Select all

;
#========================================#
#  ГОЛОВНЫЕ ПРОЦЕДУРЫ РЕЖИМОВ РАБОТЫ     #
#========================================#
;
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
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

часть 3

Code: Select all

;
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
;
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

часть 4

Code: Select all

#================================================#
#  ОБЩИЕ ПРОЦЕДУРЫ                               #
#================================================#
;
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
;
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

часть 5 (последняя)

Code: Select all

#================================================#
#  СТАНДАРТНЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ               #
#================================================#
;
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
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

С минингом/ламбером все. В ближ дни закину другие оставшиеся скрипты... :roll:
Toolmate
Posts: 104
Joined: 2005-08-18 09:09:18
Location: RUSSIA

Post by Toolmate »

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

Post by Edred »

Toolmate wrote:А под ранку его тяжко будет переделать? 8) :)
хз. Но через пару месяцев Цита перейдет на рануо. Если я снова буду играть или мне потребуется гмом оттестить кирки или топоры, то тогда и посмотрим, насколько тяжело или легко портануть. Не в первый раз.
noLe
Posts: 23
Joined: 2006-02-13 21:35:28

Post by noLe »

Япона матрена.
Edred ты просто нереальный маньяк !!! СПАСИБО тебе и РЕСПЕКТ !!!!

ппц сколько ты вложил сил и мозгов... :idea: РЕСПЕКТ
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Фишинг. Старенький, но, насколько мне помнится, рабочий. Более свежая версия осталась не до конца собранной, потому не кидаю ее.

Code: Select all

; Рыбачим с корабля. Выловленное перерабатываем и складываем в сундуки на 
; палубе. Если вокруг все выловлено - плывем вперед или назад (по кругу). 
; Считаем итемы (раздельные) в сундуках. Если их больше 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
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

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

Post by Edred »

Бот на беггинг

Code: Select all

#####################################################################
; 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: Select all

; Процедура перемещения чара для скриптов инжекта
; Считывает все параметры из регистри
;
; 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: Select all

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
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Destruction wrote:А почему собственно наследство? Автор уходит от нас? :cry:
Автор прекратил активно играть восемь месяцев назад. Точнее, вообще прекратил играть. Может, еще когда будет, но не скоро. И автору жалко, если время, потраченное им на скрипты, пропадет зря. А у автора уже погибло море интересных скриптов в результате смен работы/креша винчей/флешек и пр.
Slam FW
Posts: 34
Joined: 2006-03-05 02:44:27

Post by Slam FW »

Edred wrote:Поехал сам скрипт, часть 1

Code: Select all

#===================================================================#
# 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 кричит тут ошибка, в чем проблема помогите?
Toolmate
Posts: 104
Joined: 2005-08-18 09:09:18
Location: RUSSIA

Post by Toolmate »

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

Post by Slam FW »

Toolmate wrote:У тебя видимо АСМА нету. :roll:
асм стоит 503 01
Post Reply