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 = 250; // Радиус срабатывания медузы под себя
int MinEnemiesForSelf = 1; // Медуза под себя срабатывает от 1 врага
int MaxApproachDistance = 500;// Лимит поиска приоритета
int PriorityStopDist = 180; // Дистанция сближения перед кастом
public override void OnStart() {
base.OnStart();
CreateTimer(150, OnTimer);
}
void OnTimer() {
if (Me == null || Me.IsDead || Me.IsDisabled)
return;
// Проверка готовности медузы (без использования CurrentMp)
bool isMedusaReady = Me.SkillCooltime(MedusaId) == 0;
// 1. Поиск приоритетной цели
var priorityEnemy = Players.FirstOrDefault(p => p != null &&
!p.IsDead &&
p.Name.Equals(PriorityTargetName, StringComparison.OrdinalIgnoreCase));
// 2. ВЕТКА 1: Работа по приоритету (Сближение в пределах 500 + Медуза)
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);
return;
}
// 3. ВЕТКА 2: Медуза под себя
if (isMedusaReady) {
int enemiesNearby = Players.Count(p => p != null &&
!p.IsDead &&
p.DistanceToUser <= MedusaAoeRadius &&
!PartyMembers.Any(pm => pm.Name.Equals(p.Name, StringComparison.OrdinalIgnoreCase)));
if (enemiesNearby >= MinEnemiesForSelf) {
Client.UseSkill(MedusaId);
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);
}
if (Me.LastAttackTime > 500) {
Client.Attack();
}
}
}
}