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; // Пауза между попытками каста (12 сек)
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();
}
}
}