Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Просто скрипт

Рег
18 Сен 2015
Сообщения
23
Реакции
0
Писалось ради эксперимента на 1м специфичном сервачке. Так что врядли кому-то пригодится в таком виде, но может новички в скриптинге найдут в нём что-то полезное для себя.
Что делает:
1. Бафает ЛСы.
2. Сливается пушками и шмотками до лимитов (так-как на сервере был багнутый са на хп требует модификации) и юзает гатс.
3. Отхиливается с хп < 50% до 80%+.
Недоработки:
1. Иногда основное оружие после бафа ЛСов/слива не одевается сразу.
2. Не использует SettingsModule и для настройки требуется править код скрипта.
3. Содержит костыли, велосипеды и быдлокод :).
Код:
type
	TL2LSBuff = record
		name: string;
		skillID: integer;
		weaponOID: integer;
		needTarget: boolean;
	end;

const
	lsBuffsCount = 15;
	valakasOID = 269606289;
	healthOID = 269270460;
	conversionOID = 269407568;
	primaryWeaponOID = 268762679;

	lsBuffs: array[0..lsBuffsCount] of TL2LSBuff =
	(
		(name: 'Refresh';			skillID: 3202;	weaponOID: 269654997;	needTarget: false),
		(name: 'Spell Refresh';		skillID: 3200;	weaponOID: 269515672;	needTarget: false),
		(name: 'Skill Refresh';		skillID: 3199;	weaponOID: 268778751;	needTarget: false),
		(name: 'Music Refresh';		skillID: 3201;	weaponOID: 268670349;	needTarget: false),

		(name: 'Clarity';			skillID: 3164;	weaponOID: 268778754;	needTarget: true),
		(name: 'Spell Clarity';		skillID: 3162;	weaponOID: 268628041;	needTarget: false),
		(name: 'Skill Clarity';		skillID: 3161;	weaponOID: 268628057;	needTarget: false),
		(name: 'Music Clarity';		skillID: 3163;	weaponOID: 268715830;	needTarget: false),

		(name: 'Shield';			skillID: 3135;	weaponOID: 268715825;	needTarget: false),
		(name: 'Magic Barrier';		skillID: 3136;	weaponOID: 268778611;	needTarget: false),
		(name: 'Agility';			skillID: 3139;	weaponOID: 268715828;	needTarget: false),
		(name: 'Reflect Damage';	skillID: 3204;	weaponOID: 268712847;	needTarget: false),

 // 	(name: 'Empower';			skillID: 3133;	weaponOID: 268645387;	needTarget: false),
		(name: 'Wild Magic';		skillID: 3142;	weaponOID: 268628042;	needTarget: false),

		(name: 'Blessed Soul';		skillID: 3128;	weaponOID: 268712845;	needTarget: false),
		(name: 'Battle Roar';		skillID: 3125;	weaponOID: 269416444;	needTarget: false)
	);

var                    
	heal: boolean = false; 
	rebuff: boolean = true; 
	limits: boolean = false;
	attack: boolean = false;

function EquippByOID(itemOID: integer): boolean;
var
	item: TL2Item;
begin
	if GetItemByOID(itemOID, item) then
	begin
		result := true;
		if not item.equipped then
		begin
			engine.UseItem(item);
			engine.Delay(500);
		end;
	end else
		result := false;
end;

function UnEquippByOID(itemOID: integer): boolean;
var
	item: TL2Item;
begin
	if GetItemByOID(itemOID, item) then
	begin
		result := true;
		if item.equipped then
		begin
			engine.UseItem(item);
			engine.Delay(500);
		end;
	end else
		result := false;
end;

function GetItemByOID(itemOID: integer; out item: TL2Item): boolean;
var
	i: integer;
begin
	for i := 0 to (inventory.user.count - 1) do
	begin
		if itemOID = inventory.user.Items(i).OID then
		begin
			result := true;
			item := inventory.user.Items(i);
			exit;
		end;
	end;
	result := false;
end;

procedure startAttack;
var
	weapon: TL2Item;
begin
	attack := true;
	EquippByOID(primaryWeaponOID);
	engine.FaceControl(0, true);
end;

procedure stopAttack;
begin
	attack := false;
	engine.FaceControl(0, false);
	if user.cast.endTime > 0 then
	begin
		engine.StopCasting;
		engine.Delay(100);
	end;
end;   

procedure HealProc;
begin
	while engine.Delay(100) and (lsOnline = engine.status) do
		if heal and (user.hp < 50) then
		begin
			stopAttack; // engine.FaceControl(0, false);
			repeat
				engine.SetTarget(user); 
				engine.Delay(100);
				if not heal then break;
				engine.UseSkill(1218); // Greater Battle Heal
				engine.Delay(user.cast.endTime + 100);
			until user.hp > 80;
			startAttack; // engine.FaceControl(1, true);
		end;
end;

procedure RebuffProc;
var
	i: integer;
	buff: TL2Buff;
	weapon: TL2Item;
begin
	while engine.Delay(100) and (lsOnline = engine.status) do
		if rebuff then
		begin
			for i := 0 to lsBuffsCount - 1 do
				if not user.buffs.ByID(lsBuffs[i].skillID, buff) or (10000 > buff.endTime) then
				begin
					heal := false;
					limits := false;
					stopAttack; // engine.FaceControl(0, false);
					if EquippByOID(lsBuffs[i].weaponOID) then
					begin
						if lsBuffs[i].needTarget then
						begin
							engine.SetTarget(user);
							engine.Delay(500);
						end;
						engine.UseSkill(lsBuffs[i].skillID);
						engine.Delay(user.cast.endTime + 100);
					end;
				end;

			if not heal then
				heal := true;
			if not limits then
				limits := true;
			if not attack then
				startAttack; // engine.FaceControl(0, true);
		end;
end;

procedure LimitsProc;
var
	buff: TL2Buff;
begin
	while engine.Delay(100) and (lsOnline = engine.status) do
		if limits then
		begin
			if not user.buffs.ByID(139, buff) or (10000 > buff.endTime) then
			begin
				heal := false;
				rebuff := false;
				stopAttack; // engine.FaceControl(0, false);
				if user.hp > 30 then
				begin
					UnEquippByOID(valakasOID);
					engine.Delay(500);
					EquippByOID(conversionOID);
					engine.Delay(500);
					EquippByOID(healthOID);
					engine.Delay(500);
					EquippByOID(valakasOID);
					engine.Delay(500);
				end;
				engine.UseSkill(139);
				engine.Delay(user.cast.endTime + 500);
				heal := true;
				rebuff := true;
				startAttack; // engine.FaceControl(0, true);
			end;
		end;
end;

procedure WeaponCheck;
var
	weapon: TL2Item;
begin
	while engine.Delay(100) and (lsOnline = engine.status) do
		if attack then
			EquippByOID(primaryWeaponOID);
end;

begin 
	script.NewThread(@HealProc);
	script.NewThread(@RebuffProc);
	script.NewThread(@LimitsProc);
	script.NewThread(@WeaponCheck);
end.
 
Назад
Сверху