Загрузка данных
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 = "МЕСТЬ"; // С кого брать ассист
string PriorityTargetName = ""; // Приоритетная цель (бить и давать медузу)
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) &&
p.DistanceToUser <= MaxApproachDistance);
// ================= ВЕТКА 1: РАБОТА ПО ПРИОРИТЕТНОЙ ЦЕЛИ =================
// Если приоритет жив и рядом — фокусим только его (бьем автоатакой и даем медузу)
if (priorityEnemy != null) {
if (Me.Target != priorityEnemy) {
Client.SetTarget(priorityEnemy);
}
// Если медуза готова — используем её
if (isMedusaReady) {
if (priorityEnemy.DistanceToUser > PriorityStopDist) {
Client.FMoveToLocation(priorityEnemy.Location);
return;
}
Client.UseSkill(MedusaId);
_lastMedusaCastTime = Environment.TickCount;
return;
}
// Пока медуза в откате — продолжаем бить приоритетную цель автоатакой
Client.Attack();
return;
}
// ================= ВЕТКА 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;
}
}
// ================= ВЕТКА 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();
}
}
}