DelusionChamber

jr

Administrator
Команда форума
Порт очень старого скрипта из шары.

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 {

    const int EntryNpcId = 32659; // ID NPC, через которого будет осуществляться вход в зону
    const bool ThrowRaid = true; // Пропуск комнаты с рейдом. В таком случае "Find raid" обязательно false
    const bool FindRaid = false; // Поиск рейда(будет идти свап комнат). В таком случае "Throw raid" обязательно false
    const bool DimensionRift = false; // Дименшен рифт. Да или нет. Для Delsusion Chamber ставим false
   
   
    int swapCounter;

    public override void OnStart() {
        base.OnStart();
        swapCounter = 0;
        CreateTimer(1000, RaidRoom);
        CreateTimer(1000, WaitRoom);
    }

    void RaidRoom() {
        var manager = Npcs.FirstOrDefault(n => n.Id >= 32664 && n.Id <= 32701 || n.Id >= 31865 && n.Id <= 31918);
        var containsRaid = Mobs.Any(m => m.Id >= 25690 && m.Id <= 25695 || m.Id >= 25333 && m.Id <= 25339);
        if (FindRaid && manager != null && !containsRaid) {
            if (manager.DistanceToUser > 300)
                return;
               
            Client.SetTarget(manager);
            Client.DialogOpen();
            if (swapCounter == 0) {
                Client.DialogSelect(1);
                swapCounter++;
            }
            else {
                Client.DialogSelect(2);
                swapCounter = 0;
            }
        }
        else if (DimensionRift && FindRaid && manager != null && !containsRaid) {
            Wait(10000);
        }
        else {
            if (ThrowRaid && manager != null && containsRaid) {
                Client.SetTarget(manager);
                Client.DialogOpen();
                Client.DialogSelect(2);              
            }
           
            if (!ThrowRaid && !FindRaid && manager != null && containsRaid) {
                while (containsRaid)
                    Wait(1000);
                   
                Wait(30000);
               
                Client.SetTarget(manager);
                Client.DialogOpen();
                Client.DialogSelect(2);
            }
        }
    }
   
    void WaitRoom() {
        var npc = Npcs.FindById(EntryNpcId);
        if (npc != null) {
            Wait(1000);
            Client.MoveToLocation(npc.Location);
            Client.SetTarget(npc);
            Client.DialogOpen();
            Client.DialogSelect(1);          
        }
    }
}
 

DeadLine

Member
Подскажите пожалуйста, доходит до anakazel и не ждёт, а выходит из комнаты.
 

jr

Administrator
Команда форума
нужно смотреть ид, возможно не соответствует
 

DeadLine

Member
Разобрался.
Таймер поставил чуть больше чем время появления козы.
Спасибо
 

jr

Administrator
Команда форума
самое простое

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 {

    public override void OnStart() {
        base.OnStart();
        
        CreateTimer(50, Pickup);
    }

    void Pickup() {
        if (Drop.Any(d => d.DistanceToUser < 300)) {
            Client.UseAction(5);
        }
    }
}
 

DeadLine

Member
Если кто на интерлюде будет юзать то время raid room надо поставить равное времени от захода до появления козы ну и диалоги поправить для интерлюда. Хз мб конечно на других серверах и так работает.
 

DeadLine

Member
Просто получается что в каждой второй комнате приходится находится 12+ сек
 

Utek

New member
а в какой строчке поменять что бы он пытался зайти не по 2 строке диалога а по первой
 

DeadLine

Member
void WaitRoom() {
var npc = Npcs.FindById(EntryNpcId);
if (npc != null) {
Wait(1000);
Client.MoveToLocation(npc.Location);
Client.SetTarget(npc);
Client.DialogOpen();
Client.DialogSelect(0);
}
}
 
Сверху