guest_default
@guest_default
)))

Как сделать что-то вроде бесконечного цикла, но чтобы это не сказывалось на производительности?

Нужно сделать постоянную телепортацию к координатам игрока.
public void Stalk(string nick) 
        {
            for (int i = 0; i < 255; i++) //Просмотр всех пользователей на сервере.
            {
                if (nick == Main.player[i].name) //Проверка, совпал ли указанный ник с тем, который нашёлся
                {
                    
                            Main.player[Main.myPlayer].position = Main.player[i].position; //Телепортация
                            NetMessage.SendData(13, -1, -1, null, Main.myPlayer, 0f, 0f, 0f, 0); //Пакеты

                }
            }
        }*/

Сверху код телепортации к пользователю, но единожды. Я бы хотел сделать "Преследование", находясь постоянно на координатах пользователя (Если он пойдёт влево, то и я).
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@yuopi
C# developer
Если в лоб
bool _isStalking = false;

public void StopStalk()
{
    _isStalking = false;
}
public void StartStalk(string nick)
{
    _isStalking = true;
    Task.Run(() => 
    {
        for (int i = 0; i < 255; i++) //Просмотр всех пользователей на сервере.
        {
            if (nick == Main.player[i].name) //Проверка, совпал ли указанный ник с тем, который нашёлся
            {
                while(_isStalking)
                {
                    Thread.Sleep(1000); //Выставить делей на телепорт, чтобы много ресов не кушал
                    Main.player[Main.myPlayer].position = Main.player[i].position; //Телепортация
                    NetMessage.SendData(13, -1, -1, null, Main.myPlayer, 0f, 0f, 0f, 0); //Пакеты
                }
                break;
            }
        }
    });
}

Если по уму
bool _isStalking = false;

public void SomeMethod(string name)
{
    //Если Main.player - IEnumerable
    var somePlayer = Main.player.FirstOrDefault(player => player.name == name);
    if(somePlayer != null)
        StartStalk(somePlayer);

    //Если Main.player - array
    /*
    for(int i = 0; i < Main.player.Length; i++)
    {
        if(Main.player[i].name == name)
        {
            StartStalk(Main.player[i]);
            break;
        }        
    }
    */
}


public void StopStalk()
{
    _isStalking = false;
}

public void StartStalk(Player player)
{
    _isStalking = true;
    Task.Run(() => 
    {        
        while(_isStalking)
        {
            Thread.Sleep(1000); //Выставить делей на телепорт, чтобы много ресов не кушал
            Main.player[Main.myPlayer].position = player.position; //Телепортация
            NetMessage.SendData(13, -1, -1, null, Main.myPlayer, 0f, 0f, 0f, 0); //Пакеты
        }
    });
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы