Слушай, ну я тебе же писал пункты - давай еще раз повторю.Мне не нужно по пунктам расписывать про мой плохой фикс, мне нужны пруфы того, что из-за моего фикса, как ты сказал - сервера падают.
C#:
using System;
using System.Collections;
using System.Collections.Generic;
using Oxide.Core;
using uLink;
namespace Oxide.Plugins
{
[Info("Fix", "Kaidoz", "1.0.0")]
public class Fix : HurtworldPlugin
{
object OnBitStream(BitStream stream)
{
string tx = stream.ToString();
if (tx.Contains("34"))
return true;
return null;
}
}
}
- Ты, что бы найти байт 34 превращаешь Stream в String - хотя сам стрим хранит byte[] buffer и с удовольствием его отдает. Ты мог сделать GetBuffer() (Ну не прям так но там можно получить полный массив байт) - и далее ты проверяешь в строке место нахождение 2х символов "32". В отличии от GetBuffer().Contains("34") работает раз в 10 быстрее(минимум) чем ToString().Contains("34") а напоминаю - что ты проводишь это действие на каждый пакет от любого юзера который около 20-50 байт. На серверах порой видно нагрузку в 1-2 мегабайта с онлайном 60+. 1024кб * 1024 = 1048576 / 30 = 34952 раза ты вызывать это действие будешь. А теперь просто посчитай сколько ms будет кушать ToString().Contains() на 30 байтах. И далее от 1000 ms в секунде отними эту сумму. Я думаю 100-200 там будет, и это на сервер с онлайном! Естественно, если онлайна 0 - то и нагрузки не какой.
- Ты ищешь байт 34 в любом пакете, но байт - это число от 1 до 255 - исходя из этого шанс что ты наткнешься 1\255. А теперь возьмем во внимание, что в пакете который ты просматриваешь - в среднем 30 байт - а значит 255 делим на 30 и получаем - что шанс наткнуться на пакет с байтом 1\9. Дальше пойдем - ты ищешь текст а не число, а значит под твое условие попадает не только 34 но 134 и 234 - это тоже байты которые будут встречаться. А значит шанс наткнуться на пакет с 34 сокращается примерно в 3 раза - 1\3 шанс что ты наткнешься на пакет содержащий этот байт. А значит примерно около трети пакетов ты будешь блокировать. Как думаешь - всё ли ок будет?
- Ты код игры смотрел? Там в самом начале на получение байт в BypassRPC стоит проверка - если первый бат не 34 то пакет не пройдет вовсе. Вывод - каждый пакет от нормального игрока всегда будет иметь 34 первым байтом - а ты такие пакеты блокируешь. А значит игроки не смогут играть. А если игроки даже зайти на сервер не могу т - вывод - сервер лежит для них.
[automerge]1548175475[/automerge]
Напомню! Прав не тот кто говорит об этом - а у кого это на деле! Я лишь хочу сказать - что сервера на алькад работают, а даже WarGames в своей группе заявил что плагин фикса не работает. Это не только мое мнение связанное в теории, это не только мнение Alukar о том - что плагин не только не исправляет но еще и портит(я в 2 и 3 пунктах подтвердил) но и сторонние люди заявляют что плагин не работает. Он не выключает сервер, не заставляет его зависнуть. Он просто не дает игрокам играть - к слову практически не как.
Ладно - можешь зайти в конфу Алькад(там разрабы есть и все более мение компететные) и задай там вопрос - тебе ответ дадут не предвзято и даже те кто не читал тему - примерно те же пункты распишут по отдельности или все сразу - что и я.
Опять же - я не с кем спорить не хочу. Но пока вы не прекратите сраться - эта какафонья не утихнет. Каждый занимается своим делом - и тот у кого не получится или не будет получаться достигать целей и работоспособности - тот и не прав будет!