- Рег
- 18 Сен 2015
- Сообщения
- 23
- Реакции
- 0
Писалось ради эксперимента на 1м специфичном сервачке. Так что врядли кому-то пригодится в таком виде, но может новички в скриптинге найдут в нём что-то полезное для себя.
Что делает:
1. Бафает ЛСы.
2. Сливается пушками и шмотками до лимитов (так-как на сервере был багнутый са на хп требует модификации) и юзает гатс.
3. Отхиливается с хп < 50% до 80%+.
Недоработки:
1. Иногда основное оружие после бафа ЛСов/слива не одевается сразу.
2. Не использует SettingsModule и для настройки требуется править код скрипта.
3. Содержит костыли, велосипеды и быдлокод .
Что делает:
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.