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


    Electr0
    • Исправлено

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


    Отзывы пользователей

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

    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

    Ссылка на комментарий
    Поделиться на других сайтах

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

    Ссылка на комментарий
    Поделиться на других сайтах

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

    Ссылка на комментарий
    Поделиться на других сайтах

    Если раньше в первой версии (см первый комментарий) все было проще, а так же вместо 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);
    }

     

    Ссылка на комментарий
    Поделиться на других сайтах



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

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

    Гость
    Добавить комментарий...

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

      Разрешено не более 75 эмодзи.

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

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

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


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

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

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

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

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

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