включить ПВЕ, дождаться в ПВЕ режиме появления квестового моба, выключить ПВЕ

Chiter

New member
Есть у кого идеи, может кто подскажет, по поводу реализации функции
включить ПВЕ, дождаться в ПВЕ режиме (убивая мобов) появления квестового моба, выключить ПВЕ, убить квестового моба, и продолжить квест. Квест для хф Holy Crystal. По сути это переделанный квест на ТТ с форума. Я в программировании нуб, не судите. Что мог, то сделал, теперь обращаюсь за помощью.
 
Последнее редактирование:

Chiter

New member
C#:
using System;
using System.Linq;
using System.Collections.Generic;
using NewWidget.Core;
using NewWidget.Core.Native;
using NewWidget.Core.Scripting;

public class Script : ScriptBase {
    int quest;
    int questStage;
    bool running = false;
    Vector oldLocation;
  
  
  
    public class ScriptProgress
    {
        public string charName {get; set;}
        public int quest {get; set;}
        public int questStage {get; set;}
        public bool running;
        public Vector oldLocation;
    }
  
  
    public override void OnStart() {
      
        base.OnStart();
        init();
        EnabledChanged(true, init);
        CreateTimer(1000, scriptControl);
        CreateTimer(100, selfBuffs);
        CreateTimer(1000, checkAfk);
        EnabledChanged(true, () => Client.Pve.Enabled = true);

    }
  
    void init()
    {
        writeChekpoint(40, 1);
    }
  
    void scriptControl()
    {

        switch(questStage)
        {
            case 0:
                break;
            case 1:
                q1();
                break;
            case 2:
                q2();
                break;
            case 3:
                q3();
                break;
            case 4:
                q4();
                break;
            case 5:
                q5();
                break;
            case 6:
                q6();
                break;
        }
    }
  
    void q1() //Johnny
    {
        running = true;
        Client.MoveToLocation(new Vector(86538, 85799, -2897), 0, 25000);
        Client.SetTarget(32744);
        Wait(200);
        NpcDialogOpen(32744);
        Client.DialogSelect(0);
        Wait(200);
        Client.DialogSelect(0);
        Wait(200);
        Client.DialogSelect(0);
        Wait(200);
        Client.DialogSelect(0);
        Client.SetTarget(Me);
      
        if (running)
            writeChekpoint(40, 2);
    }
  
    void q2() //Ankumi
    {
        Client.MoveToLocation(new Vector(86503, 86095, -2884), 0, 25000);
        Client.SetTarget(32741);
        Wait(200);
        NpcDialogOpen(32741);
        Wait(200);
        Client.DialogSelect(1);
        Wait(200);
        Client.DialogSelect(0);
        Wait(200);
        Client.DialogSelect(0);
        Wait(200);
        Client.BoardOpen();
        Wait(500);
        Client.BoardSelect(1);
        Wait(500);
        Client.BoardSelect(53);
        Wait(500);
        Client.UseSkill(416);
        if(Client.HtmlActions.Count() > 0)
            Client.DialogSelect(0);
      
        if (running)
            writeChekpoint(40, 3);
    }
  
    void q3() //pvehunt
    {
        Client.SetTarget(Me);
        Client.MoveToLocation(new Vector(86563, 85843, -2897), 0, 25000);
        Client.MoveToLocation(new Vector(87474, 85769, -3052), 0, 25000);
        Client.MoveToLocation(new Vector(88464, 85653, -3170), 0, 25000);
        Client.MoveToLocation(new Vector(88891, 85549, -3213), 0, 25000);
        Client.MoveToLocation(new Vector(90147, 84967, -3474), 0, 25000);
        Client.MoveToLocation(new Vector(91178, 84510, -3653), 0, 25000);
        Client.MoveToLocation(new Vector(92349, 83990, -3685), 0, 25000);
        Client.MoveToLocation(new Vector(93832, 83514, -3571), 0, 25000);
        Client.Pve.Enabled = true;
        if (Mobs.Any(m => m.DistanceToUser < 500 && m.Id == 18862)){
                Client.Pve.Enabled = false;
                };
        Client.SetTarget(18862);
        Client.FUseSkill(990, true);
    

        if(Client.HtmlActions.Count() > 0)
           Client.FUseSkill(990, true);
      
        if (running)
            writeChekpoint(40, 4);
    }
  
    void q4() //Batracos
    {
        Client.Pve.Enabled = false;
        Client.SetTarget(Me);
        Client.MoveToLocation(new Vector(93977, 83575, -3565), 0, 25000);
        Client.MoveToLocation(new Vector(94542, 83541, -3459), 0, 25000);
        Client.MoveToLocation(new Vector(94847, 83592, -3418), 0, 25000);
        Client.Pve.Enabled = false;
        Client.SetTarget(32740);
        NpcDialogOpen(32740);
        Wait(200);
        Client.DialogSelect(2);
        Wait(200);
        Client.SetTarget(32740);
        NpcDialogOpen(32740);
        Wait(200);
        Client.DialogSelect(1);
        Client.SetTarget(Me);
        if(Client.HtmlActions.Count() > 0)
            Client.DialogSelect(1);
      
        if (running)
            writeChekpoint(40, 5);

    }
  
    void q5() //FarmUgoros
    {
        Client.SetTarget(18863);
        Client.Pve.Enabled = true;
        if (Mobs.Any(m => m.DistanceToUser < 1000 && m.Id == 18863 && Me.Target.IsDead))
            Client.Pve.Enabled = false;
          
        Client.MoveToLocation(new Vector(95728, 85683, -3733), 0, 25000);   
          
            Client.SetTarget(32740);
            NpcDialogOpen(32740);
            Client.DialogSelect(0);
          
        Client.SetTarget(Me);
        if(Client.HtmlActions.Count() > 0)
            Client.DialogSelect(0);
      
        if (running)
            writeChekpoint(40, 6);
    }
  
    void q6() //Tp+nagrada
    {
        Wait(15000);
        Client.SetTarget(Me);
        Client.BoardOpen();
        Wait(200);
        Client.BoardSelect(2);
        Wait(200);
        Client.BoardSelect(31);
        Wait(200);
        Client.BoardSelect(30);
        Client.SetTarget(Me);
        Client.MoveToLocation(new Vector(88533, 85805, -3161), 0, 25000);
        Client.MoveToLocation(new Vector(87790, 85867, -3069), 0, 25000);
        Client.MoveToLocation(new Vector(87048, 85944, -3014), 0, 25000);
        Client.MoveToLocation(new Vector(86575, 85979, -2887), 0, 25000);
        Client.MoveToLocation(new Vector(86490, 86095, -2883), 0, 25000);
      
        Client.SetTarget(32741);
        NpcDialogOpen(32741);
        Wait(200);
        Client.DialogSelect(1);
        Wait(200);
        Client.DialogSelect(0);
        Wait(200);
        Client.DialogSelect(0);
        Wait(200);
        Client.BoardOpen();
        Wait(200);
        Client.BoardSelect(1);
        Wait(200);
        Client.BoardSelect(51);
      
        if (running)
            writeChekpoint(40, 1);
      
    }
      
void selfBuffs()
    {       
        if (Me.Buffs.Any(b => Me.BuffEndtime(416) < 1000) && Me.Target == Me)
            Client.FUseSkill(416);
        if(Me.SkillCooltime(4) < 50 && Me.Target == Me)
            Client.FUseSkill(4);
        if(Me.IsDead)
        {
            Wait(1000);
            Client.RestartPoint(RestartPointTypes.Town);
            running = false;
            writeChekpoint(40, 1);
        }
    }
 
    void checkAfk()
    {
        oldLocation = Me.Location;
        Wait(35000);
        if (Me.Location == oldLocation)
        {
            Client.BoardOpen();
            Wait(200);
            Client.BoardSelect(1);
            Wait(200);
            Client.BoardSelect(53);
            Wait(200);
            Client.FUseSkill(416);
            Wait(200);
            Client.BoardOpen();
            Wait(200);
            Client.BoardSelect(2);
            Wait(200);
            Client.BoardSelect(31);
            Wait(200);
            Client.BoardSelect(30); //SoE
            Wait(3000);
            running = false;
            writeChekpoint(40, 1);
        }
    }
 
    ///записать в сетингс текущий прогресс
    void writeChekpoint(int _quest, int _stage)
    {
        quest = _quest;
        questStage = _stage;
    }
    ///берет в таргет нпс, открывает диалог
    void NpcDialogOpen(int a){
        var NpcTarget = Npcs.FirstOrDefault(n => n.Id == a);
        if(NpcTarget != null)
        {
            Client.SetTarget(NpcTarget);
            if(Me.Target == NpcTarget)
            {
                Client.DialogOpen();
                Wait(1500);
            }
        }
    }
}
 
Последнее редактирование:

Chiter

New member
и подскажите плиз как оформить красиво скрипт на форуме. с отступами, со всеми делами)
 

Chiter

New member
вот конкретно проблемное место


C#:
void q3() //pvehunt
{
Client.SetTarget(Me);
Client.MoveToLocation(new Vector(86563, 85843, -2897), 0, 25000);
Client.MoveToLocation(new Vector(87474, 85769, -3052), 0, 25000);
Client.MoveToLocation(new Vector(88464, 85653, -3170), 0, 25000);
Client.MoveToLocation(new Vector(88891, 85549, -3213), 0, 25000);
Client.MoveToLocation(new Vector(90147, 84967, -3474), 0, 25000);
Client.MoveToLocation(new Vector(91178, 84510, -3653), 0, 25000);
Client.MoveToLocation(new Vector(92349, 83990, -3685), 0, 25000);
Client.MoveToLocation(new Vector(93832, 83514, -3571), 0, 25000);
Client.Pve.Enabled = true;
if (Mobs.Any(m => m.DistanceToUser < 500 && m.Id == 18862)){
Client.Pve.Enabled = false;
};
Client.SetTarget(18862);
Client.FUseSkill(990, true);


if(Client.HtmlActions.Count() > 0)
Client.FUseSkill(990, true);

if (running)
writeChekpoint(40, 4);
}


и вот





C#:
void q5() //FarmUgoros
{
Client.SetTarget(18863);
Client.Pve.Enabled = true;
if (Mobs.Any(m => m.DistanceToUser < 1000 && m.Id == 18863 && Me.Target.IsDead))
Client.Pve.Enabled = false;

Client.MoveToLocation(new Vector(95728, 85683, -3733), 0, 25000);

Client.SetTarget(32740);
NpcDialogOpen(32740);
Client.DialogSelect(0);

Client.SetTarget(Me);
if(Client.HtmlActions.Count() > 0)
Client.DialogSelect(0);

if (running)
writeChekpoint(40, 6);
}
 
Последнее редактирование:

DeadLine

Member
Проверить этап веста квеста, как только убиваешь квест моба этап квеста сразу меняется.
 
Сверху