Задать вопрос
  • Существуют ли VPN-сервера в Китае и КНДР?

    Lapita12
    @Lapita12
    Да, существуют VPN-провайдеры, предлагающие сервера в Китае. PureVPN, HideMyAss, VyprVPN и Ivacy. Это может быть полезно для тех, кто хочет получить доступ к гео-ограниченному китайскому контенту или использовать местные услуги за пределами Китая.

    Ситуация в КНДР существенно отличается, и шансы найти VPN-сервер в этой стране крайне малы. Во-первых, Правительство Северной Кореи сильно ограничивает доступ к интернету для большинства своего населения, предоставляя им доступ только к Кванмёнт (корейскому интернету). Во-вторых, ограничения на использование технологии в стране затрагивают возможность использования международных виртуальных частных сетей. Найти VPN-сервер в КНДР вряд ли получится.
  • Как исправить ошибку с командой work?

    Lapita12
    @Lapita12
    class YourCogName(commands.Cog):
        def __init__(self, bot):
            self.bot = bot
            self.db = ... # Не забудьте инициализировать вашу базу данных здесь
    
        @commands.command(name="work")
        async def __work(self, ctx):
            cash = random.randint(250, 500)
            balance = await self.db.get_data(ctx.author)
            data = await self.db.get_timeout_data(ctx.guild.id, all_data=True)
            worked_today = False
    
            for row in data:
                if row["member_id"] == ctx.author.id:
                    worked_today = True
                    await ctx.send("Вы уже работали сегодня!")
                    break
    
            if not worked_today:
                await self.db.update_member(
                    "UPDATE users SET balance = balance + ? WHERE member_id = ? AND guild_id = ?",
                    [cash, ctx.author.id, ctx.guild.id]
                )
                await ctx.send(f"Сегодня вы заработали {cash} <:cristall:1096788943770501141>!")
                await self.db.insert_timeout(ctx.author.id, ctx.guild.id) # Не забудьте добавить пользователя в таблицу с таймаутом
                await asyncio.sleep(30)
                await self.db.delete_timeout(ctx.author.id)
    
    def setup(bot):
        bot.add_cog(YourCogName(bot))
  • Как в unity сделать плавный поворот дочернего объекта?

    Lapita12
    @Lapita12
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class BroomController : MonoBehaviour 
    {
        private GameObject broom;
        private bool InHand = true;
    
        
        void Start() 
        {
            broom = GameObject.Find("Broom");
            Cursor.visible = false;
        }
    
        
        void Update() 
        {
            GameObject parent = broom.transform.parent.gameObject;
            float targetAngle = 0f;
    
            if (Input.GetKey("q") || Input.GetKey("e")) 
            {
                if (Input.GetKey("q")) 
                {
                    targetAngle = 20f;
                }
    
                if (Input.GetKey("e")) 
                {
                    targetAngle = -20f;
                }
                
                Quaternion parentRotation = parent.transform.rotation;
                Quaternion targetRotation = Quaternion.Euler(0, 0, targetAngle);
                Quaternion broomTargetRotation = parentRotation * targetRotation;
                broom.transform.rotation = Quaternion.RotateTowards( broom.transform.rotation, broomTargetRotation, Time.deltaTime * 180f);
            }
        }
    }
  • Как устранить ошибку с курсором в pygame?

    Lapita12
    @Lapita12
    1. Вычисляет угол между текущим положением пушки и позицией указателя мыши. Угол вычисляется с помощью math.atan2(-dy, dx), где dx и dy представляют собой разницу в координатах текущей позиции пушки и координат мыши по оси X и Y соответственно.

    2. Затем он поворачивает изображение пушки на вычисленный угол. Для этого он использует функцию pygame.transform.rotate, которая принимает на вход изображение пушки self.original_image (которое является оригинальным изображением, не повернутым) и угол поворота (в градусах). Функция math.degrees(angle) преобразует угол поворота из радиан в градусы.

    В результате мы получаем новое, повернутое изображение self.cannonImg.

    3. Затем он обновляет прямоугольник, который определяет положение и размеры изображения пушки, с помощью метода self.cannonImg.get_rect(center=self.cannonRect.center) и сохраняет его в атрибуте self.cannonRect. Новый прямоугольник имеет тот же центр, что и до поворота.

    В итоге, при вызове метода update с координатами мыши, пушка будет поворачиваться таким образом, чтобы указывать на указатель мыши.
  • Как устранить ошибку с курсором в pygame?

    Lapita12
    @Lapita12
    import pygame
    import math
    
    pygame.init()
    
    WIDTH = 800
    HEIGHT = 600
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption("Follow Mouse")
    
    class Cannon:
        def __init__(self):
            self.cannonImg = pygame.image.load('images/cannon.png')
            self.cannonImg = pygame.transform.scale(self.cannonImg, [self.cannonImg.get_width() // 2, self.cannonImg.get_height() // 2])
            self.cannonRect = self.cannonImg.get_rect()
            self.cannonRect.x = WIDTH // 2 - self.cannonImg.get_width() // 2
            self.cannonRect.y = HEIGHT - self.cannonImg.get_height()
            self.cannonSpeed = 5
    
        def update(self, mousePos):
            dx = mousePos[0] - self.cannonRect.centerx
            dy = mousePos[1] - self.cannonRect.centery
            angle = math.atan2(-dy, dx)
            self.cannonImg = pygame.transform.rotate(self.original_image, math.degrees(angle))
            self.cannonRect = self.cannonImg.get_rect(center=self.cannonRect.center)
            self.cannonRect.move_ip(dx * self.cannonSpeed, dy * self.cannonSpeed)
    
        def draw(self):
            screen.blit(self.cannonImg, [self.cannonRect.x, self.cannonRect.y])
    
    cannon = Cannon()
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
    
        mousePos = pygame.mouse.get_pos()
        cannon.update(mousePos)
    
        screen.fill((255, 255, 255))
        cannon.draw()
    
        pygame.display.update()
  • Как устранить ошибку с курсором в pygame?

    Lapita12
    @Lapita12
    В вашем коде очень много ошибок, для начала хотя бы надо исправить их.

    import pygame as pg
    import random
    
    WIDTH = 600
    HEIGHT = 400
    
    def game():
        pg.init()
        screen = pg.display.set_mode((WIDTH, HEIGHT))
        bombTime = 120
        time = pg.time.Clock()
        FPS = 60
    
        # Cannon
        class Cannon:
            def __init__(self):
                self.cannonImg = pg.image.load('images/cannon.png')
                self.cannonImg = pg.transform.scale(self.cannonImg, [self.cannonImg.get_width() // 2, self.cannonImg.get_height() // 2])
                self.cannonRect = self.cannonImg.get_rect()
                self.cannonRect.x = WIDTH // 2 - self.cannonImg.get_width() // 2
                self.cannonRect.y = HEIGHT - self.cannonImg.get_height()
                self.cannonSpeed = 0.1
                self.dx = 0
    
            def update(self):
                mousePos = pg.mouse.get_pos()
                if mousePos[0] - self.cannonRect.x > 0:
                    self.dx = 1
                elif mousePos[0] - self.cannonRect.x < 0:
                    self.dx = -1
                self.cannonRect.x += self.dx * self.cannonSpeed
    
            def draw(self):
                screen.blit(self.cannonImg, [self.cannonRect.x, self.cannonRect.y])
    
        cannon = Cannon()
    
        # Bomb
        class Bomb:
            def __init__(self):
                bombs.append(self)
                self.bombImg = pg.image.load('images/bomb.png')
                self.bombImg = pg.transform.scale(self.bombImg, [self.bombImg.get_width() // 2, self.bombImg.get_height() // 2])
                self.bombRect = self.bombImg.get_rect()
                self.bombRect.x = random.randint(0, WIDTH - self.bombImg.get_width())
                self.bombRect.y = 0 - self.bombImg.get_height()
                self.bombSpeed = 3.5
    
            def update(self):
                self.bombRect.y += self.bombSpeed
    
            def draw(self):
                screen.blit(self.bombImg, [self.bombRect.x, self.bombRect.y])
    
        bombs = []
        while True:
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    pg.quit()
                    quit()
    
            screen.fill([255, 255, 255])
    
            if bombTime == 120:
                Bomb()
                bombTime -= 1
            elif bombTime == 0:
                bombTime = 120
            else:
                bombTime -= 1
    
            for bomb in bombs:
                bomb.update()
                bomb.draw()
    
            cannon.update()
            cannon.draw()
    
            time.tick(FPS)
            pg.display.update()
    
    game()
  • Как отсортировать массив массивов по вложенным элементам?

    Lapita12
    @Lapita12
    micr0,
    const arr = [
      ['Орк', '8', '10', '50', '180', '100', '500'],
      ['Эльф', '6', '8', '20', '170', '60', '1000'],
      ['Дварф', '7', '12', '30', '150', '80', '1500'],
      ['Гоблин', '5', '6', '100', '140', '50', '200'],
      ['Гном', '4', '7', '10', '120', '40', '500'],
      ['Хоббит', '3', '5', '5', '100', '30', '1000']
    ];
    
    const compareSecondLast = (arr1, arr2) => arr1[arr1.length - 2].localeCompare(arr2[arr2.length - 2]);
    
    arr.sort(compareSecondLast);
    
    console.log(arr);
  • Почему когда задаю эффект "fade" и параметр "loop" не переключаются слайды?

    Lapita12
    @Lapita12
    Vadim,
    const hero_slider = new Swiper('.hero-slider', {
      modules: [Navigation, EffectFade],
      loop: true,
      effect: "fade",
      fadeEffect: {
        crossFade: true
      },
      navigation: {
        nextEl: '.khutorok-slider-button_next',
        prevEl: '.khutorok-slider-button_prev',
        disabledClass: "khutorok-slider-button_disabled",
      },
    });
    
    const slider_btn_next = document.querySelector('.khutorok-slider-button_next');
    slider_btn_next.addEventListener('click', function() {
      hero_slider.slideNext();
    });
    
    const slider_btn_prev = document.querySelector('.khutorok-slider-button_prev');
    slider_btn_prev.addEventListener('click', function() {
      hero_slider.slidePrev();
    });
  • Не работает фунция OnControllerColiderHit. Объясните почему?

    Lapita12
    @Lapita12
    1. Неправильное написание имени функции. Правильное имя функции - OnControllerColliderHit с двумя строчными "c" в слове "Collider"
    2. Функция вообще не вызывается. Для того чтобы функция OnControllerColliderHit была вызвана, контроллер персонажа должен иметь прикрепленный к нему коллайдер и находиться в контакте с другим коллайдером.
    3. Скрипт PlayerController может быть не прикреплен к игровому объекту с контроллером персонажа. Проверь что он прикреплён к правильному обьекту.
    Если предположить, что проблема не в названии функции или прикреплении скрипта, то тогда можно использовать другой подход OnCollisionEnter Эта функция вызывается, когда контроллер персонажа сталкивается с другим коллайдером, и может быть использована для достижения желаемого результата - отображения панели проигрыша.

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("obstacle"))
        {
            LosePanel.SetActive(true);
            Time.timeScale = 0;
        }
    }


    Этот код должен быть помещен в скрипт PlayerController и будет отображать игровой объект LosePanel и замораживать игру, когда контроллер персонажа столкнется с объектом с тегом obstacle.Эта реализация требует наличия компонента Rigidbody на игровом объекте препятствия.

    Другой подход заключается в использовании триггерного коллайдера на игровом объекте препятствия и функции OnTriggerEnter в скрипте PlayerController

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("obstacle"))
        {
            LosePanel.SetActive(true);
            Time.timeScale = 0;
        }
    }


    Этот код должен быть помещен в скрипт PlayerController и будет отображать игровой объект LosePanel и замораживать игру, когда контроллер персонажа столкнется с триггерным коллайдером на объекте с тегом obstacle Но игровой объект препятствия должен иметь триггерный коллайдер, а не обычный коллайдер, чтобы эта реализация работала.

    Оба этих решения должны работать как альтернатива функции OnControllerColliderHit.
  • Как изменить вводимые данные пользователем на звёздочки?

    Lapita12
    @Lapita12
    import mmsystem
    
    def get_password():
        password = ""
        while True:
            char = mmsystem.getch()
            if char == "\r":
                break
            password += char
            print("*", end="") 
        return password
  • Как использовать один и тот же объект в разных обработчиках событий в C# Windows Forms?

    Lapita12
    @Lapita12
    public partial class Form1 : Form
    {
        bool isMouseDown = false;
        Edge currentEdge = null;
    
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                isMouseDown = true;
                currentEdge = new Edge();
                currentEdge.Start = e.Location;
            }
        }
    
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                isMouseDown = false;
                if (currentEdge != null)
                {
                    currentEdge.End = e.Location;
                    edges.Add(currentEdge);
                    currentEdge = null;
                }
            }
        }
    
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (isMouseDown)
            {
                if (currentEdge == null)
                {
                    currentEdge = new Edge();
                    currentEdge.Start = e.Location;
                }
                else
                {
                    currentEdge.End = e.Location;
                    this.Invalidate(); // redraw the form to show the line being drawn
                }
            }
        }
    
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            if (currentEdge != null)
            {
                e.Graphics.DrawLine(stroke, currentEdge.Start, currentEdge.End);
            }
        }
    }
  • Почему сбрасывается курсор после замены содержимого childNode?

    Lapita12
    @Lapita12
    Богдан Кучерук,
    const editableDiv = document.getElementById('myDiv');
    
    editableDiv.addEventListener('input', function(event) {
      const range = document.getSelection().getRangeAt(0);
      const childNodes = editableDiv.childNodes;
      let cursorPos = range.startOffset; // Сохранить текущую позицию курсора
    
      for (let i = 0; i < childNodes.length; i++) {
        const childNode = childNodes[i];
        childNode.textContent = childNode.textContent + 'New text';
        if (i === range.endContainer.parentNode.childNodes.length - 1) {
          cursorPos = cursorPos + 7; // Длина добавленного текста
        }
      }
    
      document.getSelection().removeAllRanges();
      range.setStart(range.startContainer, cursorPos); // Восстановить позицию курсора
      range.setEnd(range.startContainer, cursorPos);
      document.getSelection().addRange(range);
    });
  • Скажите пожалуйста правильно я пользуюсь PlayerPrefs в Unity?

    Lapita12
    @Lapita12
    Правильно, при условии, что требуется сохранять значение переменной Money между сессиями игры.
  • Почему сбрасывается курсор после замены содержимого childNode?

    Lapita12
    @Lapita12
    const editableDiv = document.getElementById('myDiv');
    editableDiv.addEventListener('input', function(event) {
      const range = document.getSelection().getRangeAt(0);
      const childNodes = editableDiv.childNodes;
      for (let i = 0; i < childNodes.length; i++) {
        const childNode = childNodes[i];
        childNode.textContent = childNode.textContent + 'New text';
        console.log(childNode.textContent);
      }
      document.getSelection().removeAllRanges();
      document.getSelection().addRange(range);
    });
  • Просмотр корзины и нажатие кнопки Back браузера ломает работу скриптов. Как полечить?

    Lapita12
    @Lapita12
    Stanislav6,
    // при открытии окна сохраняем информацию в sessionStorage
    sessionStorage.setItem('isMiniCartOpen', true);
    
    // при закрытии окна удаляем информацию из sessionStorage
    sessionStorage.removeItem('isMiniCartOpen');
    
    // при нажатии кнопки назад проверяем, открыто ли окно, и закрываем его при необходимости
    window.addEventListener('popstate', function(event) {
      if (sessionStorage.getItem('isMiniCartOpen')) {
        // закрыть выезжающее окно
      }
    });


    Попробуйте такой метод
  • Просмотр корзины и нажатие кнопки Back браузера ломает работу скриптов. Как полечить?

    Lapita12
    @Lapita12
    Stanislav6,
    $( document ).on(
      'click touch',
      '.offcanvas-close',
      function(){
        $( 'html, body' ).removeClass( 'noscroll' );
        $( '.offcanvas' ).removeClass( 'open' );
        $( '.overlay' ).removeClass( 'visible right' );
      }
    );

    Тогда попробуйте этот подход
  • Как правильно перебрать подключаемые скрипты на wordpress+woocommerce?

    Lapita12
    @Lapita12
    rvitalia,
    add_action('wp_enqueue_scripts', function () {
        // Подключаем стили
        wp_enqueue_style('style-name', get_template_directory_uri() . '/assets/css/style.min.css');
    
        // Подключаем скрипты только на страницах магазина и товара
        if (is_shop() || is_product()) {
            wp_enqueue_script('app', get_template_directory_uri() . '/assets/js/app.js', array('jquery'), '1.0.0', true);
            wp_enqueue_script('main', get_template_directory_uri() . '/assets/js/main.js', array('jquery'), '1.0.0', true);
        }
    });
  • Как правильно перебрать подключаемые скрипты на wordpress+woocommerce?

    Lapita12
    @Lapita12
    Используется условие is_woocommerce(), которое не правильно для перебора страниц.
    is_shop(), is_cart(), is_checkout(), is_account_page(), is_product() и т.д., которые проверяют, находится ли пользователь на определенной странице.