using System;
using System.Linq;
using NewWidget.Core;
using NewWidget.Core.Native;
using NewWidget.Core.Scripting;
public class Script : ScriptBase {
// === НАСТРОЙКИ ===
private string MainAssistNick = "Nick1"; // Ник #1: Постоянный основной Ассист
private string PriorityNick = "Nick2"; // Ник #2: Имя ВРАГА (при появлении бьем ЕГО СРАЗУ, игнорируя ассист)
private int AttackInterval = 100; // Задержка атаки (мс)
private long lastAttackTime = 0;
public override void OnStart() {
base.OnStart();
CreateTimer(15, OnTimer);
}
void OnTimer() {
if (Me == null || Me.IsDead || Me.IsDisabled)
return;
long now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
// 1. ПРОВЕРЯЕМ ПОЯВЛЕНИЕ ВРАГА (Ник #2) В ЗОНЕ ВИДИМОСТИ
L2Live priorityEnemy = null;
if (World.Players != null) {
priorityEnemy = World.Players.FirstOrDefault(p =>
p.Name.Equals(PriorityNick, StringComparison.OrdinalIgnoreCase) && !p.IsDead);
}
// Если Ник #2 появился и он жив — ИГНОРИРУЕМ ВСЁ и бьем только его
if (priorityEnemy != null) {
SwitchAndAttack(priorityEnemy, now);
return;
}
// 2. ЕСЛИ НИКА #2 НЕТ — РАБОТАЕМ ПО ОСНОВНОМУ АССИСТУ (Ник #1)
L2Live mainTarget = GetAssistTarget(MainAssistNick);
if (mainTarget != null) {
SwitchAndAttack(mainTarget, now);
return;
}
}
// Вспомогательный метод для выбора/смены цели и авто-атаки со срезкой
private void SwitchAndAttack(L2Live target, long now) {
var currentTarget = Me.Target as L2Live;
// Переключаем таргет, если он изменился
if (currentTarget == null || currentTarget.ObjectId != target.ObjectId) {
Client.SetTarget(target);
Client.Attack();
lastAttackTime = now;
return;
}
// Зажимаем авто-атаку со срезкой
if (now - lastAttackTime >= AttackInterval) {
Client.Attack();
if (Me.IsAttacking) {
Client.Attack();
}
lastAttackTime = now;
}
}
// Поиск таргета у основного ассист-лидера (Ник #1)
private L2Live GetAssistTarget(string nick) {
L2Player leader = null;
if (Client.PartyMembers != null) {
leader = Client.PartyMembers.FirstOrDefault(p => p.Name.Equals(nick, StringComparison.OrdinalIgnoreCase));
}
if (leader == null && World.Players != null) {
leader = World.Players.FirstOrDefault(p => p.Name.Equals(nick, StringComparison.OrdinalIgnoreCase));
}
if (leader != null && leader.Target != null) {
var target = leader.Target as L2Live;
if (target != null && !target.IsDead && target.ObjectId != Me.ObjectId) {
bool isPartyMember = Client.PartyMembers != null && Client.PartyMembers.Any(p => p.ObjectId == target.ObjectId);
if (!isPartyMember) {
return target;
}
}
}
return null;
}
}