C#:
using System;
using System.Linq;
using System.Collections.Generic;
using NewWidget.Core;
using NewWidget.Core.Native;
using NewWidget.Core.Scripting;
using System.Diagnostics;
using System.Reflection;
public class Script : ScriptBase {
int CharsCount = 7; //кол-во персонажей на аккаунте
string Title = "Raid Boss"; //Проверять Титул мобов
int[] Ids = new int[]{ 29062 }; //Проерять ID
int LoginDelay = 8000; //делей после команды входа в игру и до релога
int RelogDelay = 2000; //делеай после команды релог до слеующего входа в игру
string key = "rbcheck";
bool logged = false;
bool running = false;
bool stopped = false;
public override void OnStart() {
base.OnStart();
EnabledChanged(true, OnEnabled);
ServerPacket(0x09, p => logged = false);
ServerPacket(0x32, p => logged = true);
Client.HideWidget();
}
void OnEnabled() {
lock (Client.UserData) {
if (!Client.UserData.ContainsKey(key)) {
Client.UserData[key] = new Object();
Run(Check);
Run(Alarm);
running = true;
}
}
}
public override void OnStop() {
if (!running)
base.OnStop();
stopped = true;
}
void Check() {
logged = Client.IsLoggedIn;
while (running) {
for (int i = 0; i < CharsCount && running; i++) {
if (logged && running) {
Client.Restart();
Wait(() => !logged, 20 * 1000);
Wait(RelogDelay);
}
if (!logged && running) {
Client.GameStart(i);
Wait(() => logged, 20 * 1000);
Wait(LoginDelay);
}
}
}
}
void Alarm() {
var sw = new Stopwatch();
while (running) {
Wait(1000);
var rb = Mobs.FirstOrDefault(m => m.Title.Contains(Title) || Ids.Contains(m.Id));
if (rb != null) {
L2Helper.PlaySound("hp.wav");
var spawn = new Notification();
spawn.Color = System.Drawing.Color.Red;
spawn.Position = 1;
spawn.Duration = 800;
spawn.Text = String.Format("{0} - ALIVE", rb);
Console.WriteLine(spawn.Text);
var activeClient = L2Helper.Clients.FirstOrDefault(c => c.IsForeground);
if (activeClient != null)
activeClient.NotificationManager.Show(spawn);
}
if (Client.IsLoggedIn)
sw.Restart();
else if (sw.ElapsedMilliseconds > 30 * 1000)
Client.MainWindowFlash();
if (!Client.IsAlive || Client.State == ClientStates.Login)
break;
}
lock (Client.UserData)
Client.UserData.Remove(key);
if (stopped)
base.OnStop();
running = false;
}
}