
ВНИМАНИЕ: В этом скрипте нет подхилов чара! Для этого надо запустить параллельно данному скрипту скрипт на непрерывный подхил чара (каждому чару, естественно):
http://stealth.od.ua/forum/viewtopic.php?t=577
Code: Select all
Program SparringUP;
// Спарринг двух воинов. Пауза для подхилла если здоровье меньше 
// максимального минус заданная величина. Проверка сериала чара,
// скомандовавшего останов или рестарт боя (от приколистов).
// Добор бинтов с пола в радиусе двух клеток (бинты положить или
// между чарами, или у каждого за спиной.
// Один скрипт для обоих чаров. Скрипт сам разберется, кто первый, а
// кто второй :)
// Не забудьте обоим чарам в параллель запустить скрипт SparringHeal!
// Вам также потребуется любой чар в пределах видимости, для временного
// сброса флага атаки. Желательно, чтобы этот чар не стоял на соседней
// клетке, иначе ему достанется :)
//
// v.1.01b (c) Edred
//
// todo: ввести лечение спирит спиком, если закончились бинты
{$Include 'all.inc'}
const
Warrior1 = $0004D053;		// Первый чар
Warrior2 = $0004ACFB;		// Второй чар (порядок не важен)
Delta = 30;
// Чар, на которого сбрасывать временно атаку
FarAttack = $0005288D;		// 
var
War1Flag : boolean;			// true - готов к бою, false - нет
War2Flag : boolean;			// аналогично
CurWarrior : integer;		// какой чар использует скрипт (1 или 2)
EnemyWarrior : integer;		// соответственно - противник
ctime : TDateTime;
	procedure CheckWarrior;
		// Сверяет сериал чара с заданными и определяет, какой чар
		// (1 или 2) использует этот скрипт. Устанавливает соотв. флаг
		begin
			waitconnection(3000);
			if Self = Warrior1 then
			begin
				CurWarrior := 1;
				EnemyWarrior := 2;
				War1Flag := true;
			end
			else
			begin
				CurWarrior := 2;
				EnemyWarrior := 1;
				War2Flag := true;
			end;
		end;
	procedure AttackEnemy(var f:integer);
	begin
		if f = 1 then attack(Warrior1);
		if f = 2 then attack(Warrior2);
	end;
	function CheckPeaceFlag(var f:integer; var ctime:TDateTime):boolean;
	var i:integer;
	begin
		result := false;
		if f = 1 then
		begin
			i := InJournalBetweenTimes('Stop', ctime, Now);
			if (i<>-1) and (LineId = Warrior1) then result := true;
		end
		else begin
			i := InJournalBetweenTimes('Stop', ctime, Now);
			if (i<>-1) and (LineId = Warrior2) then result := true;
		end;
	end;
	function CheckWarFlag(var f:integer; var ctime:TDateTime):boolean;
	var i:integer;
	begin
		result := false;
		if f = 1 then
		begin
			i := InJournalBetweenTimes('Start', ctime, Now);
			if (i<>-1) and (LineId = Warrior1) then result := true;
		end
		else begin
			i := InJournalBetweenTimes('Start', ctime, Now);
			if (i<>-1) and (LineId = Warrior2) then result := true;
		end;
	end;
	procedure ChangeWarFlag(var f:integer);
	begin
		if f = 1 then
		begin
			// для первого чара
			if War1Flag then begin
				// отменим бой
				UOSay( 'Stop' ); War1Flag := false; SetWarMode(false); end
			else begin
				// готовы к бою
				UOSay( 'Start' ); War1Flag := true; attack(FarAttack);
			end;
		end
		else begin
			// для второго чара
			if War2Flag then begin
				// отменим бой
				UOSay( 'Stop' ); War2Flag := false; SetWarMode(false); end
			else begin
				// готовы к бою
				UOSay( 'Start' ); War2Flag := true; attack(FarAttack);
			end;
		end;
	end;
Begin
	CheckWarrior;
	while not Dead do
	begin
		if not WarMode then SetWarMode(true);
		ctime := Now;
		AttackEnemy(EnemyWarrior);
		addtosystemjournal('проверка 0')
		repeat
			wait(100);
			checksave;
		until CheckPeaceFlag(EnemyWarrior, ctime) or (Life <= (MaxLife - Delta));
		ChangeWarFlag(CurWarrior);
		// Иногда сразу не срабатывает сброс вара, пока сделаем так:
		wait(100)
		SetWarMode(false)
		wait(100)
		SetWarMode(false)
		repeat
			wait(100);
			checksave;
		until HP = MaxHP;
		ctime := Now;
		ChangeWarFlag(CurWarrior);
		repeat
			wait(100);
			checksave;
		until CheckWarFlag(EnemyWarrior, ctime) or (Life < MaxLife);
	end;
End.
1. В подхилл - мытье бинтов
2. В спарринг - лечение спирит спиком и медитацией, если бинты кончились
3. В спарринг - оружие, армы, щиты. Добор по разрушению из контейнера (один на обоих чаров)


 
 
 решилось это изменением приоритета пола в поиске врага, но тогда мужик находит бабу, а баба находит себя, тоже косяк, пришлось разбить на два скрипта, для баб и для мужиков
 решилось это изменением приоритета пола в поиске врага, но тогда мужик находит бабу, а баба находит себя, тоже косяк, пришлось разбить на два скрипта, для баб и для мужиков

