Перейти к содержанию
  • Сделать плагин который делает события OnClientStartStuck, OnClientStuck, OnClientEndStuck


    с указанием пропа в котором застревает игрок, чтобы можно было удалять такие пропы автоматически если они созданы человеком, интервал проверки 0.5 сек


    Обратная связь

    Рекомендуемые комментарии

    Electr0

    Опубликовано

    public void OnEntityStartStuck(int client, int entity)
    {
        PrintToChatAll("OnEntityStartStuck(%N, %i)", client, entity);
    }
    
    public void OnEntityStuck(int client, int entity)
    {
       PrintToChatAll("OnEntityStuck(%N, %i)", client, entity);
    
    }
    
    public void OnEntityEndStuck(int client)
    {
        PrintToChatAll("OnEntityEndStuck(%N)", client);
    }
    

    OnClientStartStuck, и последующие OnClientStuck через промежудки проверки, 

     

    20180310192312_1.jpg

     

     

    Проп убран, выстреливает OnClientEndStuck

    20180310192528_1.jpg

    Electr0

    Опубликовано

    Значение Статус изменено на: Тестируется

    Electr0

    Опубликовано

    Есть проблема, т.к. плагин передает за раз только один проп, то плагин исправления застревания, если клиент застрял в сотнях предметов работает не мгновенно, а с задержкой в 0.5 сек и шагом 1 предмет -  0.5 сек, то есть. если поставить кучу предметов и сунуть туда танка, то он будет раз в 0.5 сек убирать предмет мешающий танку, думаю надо подумать как его ускорить, надо как-то научится за один раз передавать данные обо всех предметах что мешают игроку, тогда это будет то что нужно, и можно будет за раз хоть 200 предметов двинуть.

    Electr0

    Опубликовано

    Готово, во время первой трассировки понимаю застревает или нет клиент, если да то делаю вторичную трассировку со сбором пропов в которых клиент застрял и оформляю это все в ArrayList записывая пропы через PushArrayCell в EntRef формате, дальше на этапе создания событий OnClientStartStuck и OnClientStuck я извлекаю данные из ArrayList и помещаю их в обычный числовой массив который уже через параметр Param_Array можно передать событию, не забывая указать кол-во ячеек в массиве, дальше в плагинах которые слушают события OnClientStartStuck, OnClientStuck можно получить полный список пропов которые мешают игроку двигатся в конкретный момент.

    Electr0

    Опубликовано

    Если раньше в первой версии (см первый комментарий) все было проще, а так же вместо Client в названии событий было Entity, то теперь чтение событий от плагина выглядит вот так:

     

    public void OnStartClientStuck(int client, int[] iEntities, int iCountEntities)
    {
    	PrintToChatAll("OnStartClientStuck(%N, iCountEntities %i)", client, iCountEntities);
    	
        // Если кол-во пропов мешающих игроку больше нуля, читаем данные из массива.
    	if (iCountEntities > 0)
    	{
    		int entity;
    
    		for (int i = 0; i < iCountEntities; i++)
    		{
    			entity = iEntities[i];
    
    			if (entity && (entity = EntRefToEntIndex(entity)) != INVALID_ENT_REFERENCE && IsValidEntity(entity))
    			{
    				 PrintToChatAll("OnStartClientStuck:: iEntities[%i] %i", i, iEntities[i]);
    			}
    		}
    	}
    }
    
    public void OnClientStuck(int client, int[] iEntities, int iCountEntities)
    {
    	PrintToChatAll("OnClientStuck(%N, iCountEntities %i)", client, iCountEntities);
    	
        // Если кол-во пропов мешающих игроку больше нуля, читаем данные из массива.
    	if (iCountEntities > 0)
    	{
    		int entity;
    
    		for (int i = 0; i < iCountEntities; i++)
    		{
    			entity = iEntities[i];
    
    			if (entity && (entity = EntRefToEntIndex(entity)) != INVALID_ENT_REFERENCE && IsValidEntity(entity))
    			{
    				 PrintToChatAll("OnClientStuck:: iEntities[%i] %i", i, iEntities[i]);
    			}
    		}
    	}
    }
    
    public void OnClientEndStuck(int client)
    {
        PrintToChatAll("OnClientEndStuck(%N)", client);
    }

     

    Electr0

    Опубликовано

    Значение Статус изменено на: Исправлено



    Присоединяйтесь к обсуждению

    Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

    Гость
    К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
    Добавить комментарий...

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Обозначения статусов

    В обработке = Мы работаем над вашим отчетом.

    Исправлено = Проблема исправлена.

    Тестируется = Изменения внесены, но требуют тестирования.

    Закрыт = Отзыв некорректный, либо проблема не повторяется при проверке на серверах. Если у вас есть дополнительная информация напишите комментарий и мы снова откроем этот вопрос.

×
×
  • Создать...