Загрузка данных


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;
    }
}