using System;
using System.Linq;
using System.Collections.Generic;
using NewWidget.Core;
using NewWidget.Core.Native;
using NewWidget.Core.Scripting;
public class Script : ScriptBase {
// ================= НАСТРОЙКИ =================
string AssistTargetName = "MainAssistNick"; // С кого брать ассист
string PriorityTargetName = "PriorityEnemyNick"; // Приоритетная цель под медузу
int MedusaId = 367; // ID Dance of Medusa
int MedusaAoeRadius = 300; // Радиус срабатывания под себя
int MaxApproachDistance = 600;// Дистанция поиска приоритета
int PriorityStopDist = 180; // Дистанция перед кастом
long _lastMedusaCastTime = 0;
int MedusaCooldownMs = 12000; // Пауза отката медузы
public override void OnStart() {
base.OnStart();
CreateTimer(150, OnTimer);
}
void OnTimer() {
if (Me == null || Me.IsDead || Me.IsDisabled)
return;
bool isMedusaReady = (Environment.TickCount - _lastMedusaCastTime > MedusaCooldownMs || _lastMedusaCastTime == 0)
&& Me.SkillCooltime(MedusaId) <= 0;
// 1. Поиск приоритетной цели
var priorityEnemy = Players.FirstOrDefault(p => p != null &&
!p.IsDead &&
p.Name.Equals(PriorityTargetName, StringComparison.OrdinalIgnoreCase));
// 2. ВЕТКА 1: Приоритетный враг (подбег + медуза)
if (isMedusaReady && priorityEnemy != null && priorityEnemy.DistanceToUser <= MaxApproachDistance) {
if (Me.Target != priorityEnemy) {
Client.SetTarget(priorityEnemy);
}
if (priorityEnemy.DistanceToUser > PriorityStopDist) {
Client.FMoveToLocation(priorityEnemy.Location);
return;
}
Client.UseSkill(MedusaId);
_lastMedusaCastTime = Environment.TickCount;
return;
}
// 3. ВЕТКА 2: Медуза под себя (любой чужой чар рядом)
if (isMedusaReady) {
bool hasEnemyNearby = Players.Any(p => p != null &&
!p.IsDead &&
p.DistanceToUser <= MedusaAoeRadius &&
p.ObjectId != Me.ObjectId &&
!Client.PartyMembers.Any(pm => pm.Name.Equals(p.Name, StringComparison.OrdinalIgnoreCase)));
if (hasEnemyNearby) {
Client.UseSkill(MedusaId);
_lastMedusaCastTime = Environment.TickCount;
return;
}
}
// 4. ВЕТКА 3: Постоянный ассист и автоатака
var assistLead = Client.PartyMembers.FindByName(AssistTargetName);
if (assistLead != null && assistLead.Target != null && !assistLead.Target.IsDead) {
var target = assistLead.Target;
if (Me.Target != target) {
Client.SetTarget(target);
}
Client.Attack();
}
}
}