Движок la2 - Страница 10 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Ответ
Опции темы
Непрочитано 25.01.2017, 23:49   #91
Пользователь

По умолчанию Re: Движок la2

Цитата:
Сообщение от Gaikotsu Посмотреть сообщение
оффтоп:
Свернуть ↑Развернуть ↓
Вообще не ожидал что этим еще кто-то запаривался
Alay вне форума Ответить с цитированием
Непрочитано 25.01.2017, 23:58   #92
Аватар для Gaikotsu
Герой

По умолчанию Re: Движок la2

Цитата:
Сообщение от Alay Посмотреть сообщение
Вообще не ожидал что этим еще кто-то запаривался
Просто я стараюсь руководствоваться принципом "если есть возможность прислать невалидные данные, то игроки этим обязательно воспользуются" и посему стараюсь по возможности проверять и перепроверять все что присылает клиент, ибо по определению "все врут" (с) ^_^
Gaikotsu вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 26.01.2017, 00:13   #93
Аватар для DiagoD

По умолчанию Re: Движок la2

Цитата:
Сообщение от Alay Посмотреть сообщение
Вообще не ожидал что этим еще кто-то запаривался
У каждого свои ожидания, есть кто не ожидал, что еще кто-то не сделал валидацию входящих данных.
__________________
open-team.ru - Freya, HighFive...
DiagoD вне форума Отправить сообщение для DiagoD с помощью ICQ Отправить сообщение для DiagoD с помощью Skype™ Ответить с цитированием
Непрочитано 26.01.2017, 00:17   #94
Пользователь

По умолчанию Re: Движок la2

Но на шарпе так не получиться красиво провернуть через энум. В шарпе энум это константа. в яве - инстанс. (enum может быль лишь базовым типом - int char и тд. Следовательно придется делать структуру и добавлять ее в массив и потом уже опрашивать... и вся эта красота пропадает.
Alay вне форума Ответить с цитированием
Непрочитано 26.01.2017, 00:21   #95
Пользователь

По умолчанию Re: Движок la2

Кстати на ПТС те же грабли.
Когда ввели GoD хроники на американских серверах создание персов с неверными параметрами работало и перс был невидимым.
flopix вне форума Ответить с цитированием
Непрочитано 26.01.2017, 00:53   #96
Пользователь

По умолчанию Re: Движок la2

Цитата:
Сообщение от flopix Посмотреть сообщение
Кстати на ПТС те же грабли.
Когда ввели GoD хроники на американских серверах создание персов с неверными параметрами работало и перс был невидимым.
Вот это поворот...

Добавлено через 18 минут
не знаю как вам, а лично мне работать над таким кодом не очень приятно.
Код:
    internal struct HStyle
    {
        private readonly int[] _sex;

        public HStyle(int[] sex)
        {
            _sex = sex;
        }

        public bool IsAllowed(Appearance.BaseSex sex)
        {
            return _sex.Any(t => t == (int)sex);
        }
    }
    internal struct HColor
    {
        private readonly int[] _race;

        public HColor(int[] race)
        {
            _race = race;
        }

        public bool IsAllowed(Appearance.BaseRace race)
        {
            return _race.Any(t => t == (int)race);
        }
    }


        public static bool CheckAppearenceV2(BaseRace baseRace, BaseSex baseSex, int baseClassId, int face, int hairStyle,
            int hairColor)
        {
            if (baseSex < 0 || (int)baseSex > 1 || 
                face < 0 || face > 2 || 
                hairStyle < 0 || hairStyle > 6 || 
                hairColor < 0 || hairColor > 3 || 
                baseRace == BaseRace.Ethria && baseSex == BaseSex.Male)
                return false;
            return IsValidHairStyle(baseSex, hairStyle) && IsValidHairColor(baseRace, hairColor);
        }

        #region Private

        private static readonly HStyle[] HairStyles =
        {
            new HStyle(new []{ (int)BaseSex.Male, (int)BaseSex.Female}) ,
            new HStyle(new []{ (int)BaseSex.Male, (int)BaseSex.Female}) ,
            new HStyle(new []{ (int)BaseSex.Male, (int)BaseSex.Female}) ,
            new HStyle(new []{ (int)BaseSex.Male, (int)BaseSex.Female}) ,
            new HStyle(new []{ (int)BaseSex.Male, (int)BaseSex.Female}) ,
            new HStyle(new []{ (int)BaseSex.Female}),
            new HStyle(new []{ (int)BaseSex.Female})
        };
        private static readonly HColor[] HairColors =
        {
            new HColor(new []{ (int)BaseRace.Human, (int)BaseRace.Elf, (int)BaseRace.DarkElf, (int)BaseRace.Ork, (int)BaseRace.Dwarf, (int)BaseRace.Kamael, (int)BaseRace.Ethria}),
            new HColor(new []{ (int)BaseRace.Human, (int)BaseRace.Elf, (int)BaseRace.DarkElf, (int)BaseRace.Ork, (int)BaseRace.Dwarf, (int)BaseRace.Kamael, (int)BaseRace.Ethria}),
            new HColor(new []{ (int)BaseRace.Human, (int)BaseRace.Elf, (int)BaseRace.DarkElf, (int)BaseRace.Ork, (int)BaseRace.Dwarf, (int)BaseRace.Kamael, (int)BaseRace.Ethria}),
            new HColor(new []{ (int)BaseRace.Human, (int)BaseRace.Elf, (int)BaseRace.DarkElf, (int)BaseRace.Ork, (int)BaseRace.Dwarf})
        };
        private static bool IsValidHairStyle(BaseSex sex, int hairStyle)
        {
            if (hairStyle < 0 || hairStyle > HairStyles.Length) return false;
            return HairStyles[hairStyle].IsAllowed(sex);
        }
        private static bool IsValidHairColor(BaseRace race, int hairColor)
        {
            if (hairColor < 0 || hairColor > HairColors.Length) return false;
            return HairColors[hairColor].IsAllowed(race);
        }
        #endregion
причина по которой я за него не взялся - не мог сообразить что брать за ключ чтобы чекать все сразу в одной сущности а не разбивать на проверки стиля волос цвета к расе и тд. А в итоге получем несколько несвязных зависимостей из за которых все равно придется залезать "в тухлые свичи" та же проверка на мужика к артейке к примеру.
На мой взгяд тут вообще все относительно и мой вариант в плане масштабируемости и поддержке был куда проще. по крайней мере для меня

Последний раз редактировалось Alay; 26.01.2017 в 01:14. Причина: Добавлено сообщение
Alay вне форума Ответить с цитированием
Непрочитано 26.01.2017, 02:56   #97
Аватар для Gaikotsu
Герой

По умолчанию Re: Движок la2

Цитата:
Сообщение от flopix Посмотреть сообщение
Кстати на ПТС те же грабли.
Когда ввели GoD хроники на американских серверах создание персов с неверными параметрами работало и перс был невидимым.
на птс граблей хватает, это да.
притом о них все знают, но нцсофт нихрена их не чинит.

чего стоит возможность к примеру тягать любые мелкие файлы (до 8/16кб размером) с сервера, через пакеты. и дырка эта существует еще с самых первых хроник и не знают о ней по моему уже только самые ленивые.
А ведь всех делов то, добавить проверку к примеру на то, что запрашиваемый файл имеет тип htm/html и все - ничего кроме хтмлок вытащить с сервера не удастся.
Gaikotsu вне форума Ответить с цитированием
Непрочитано 26.01.2017, 03:32   #98
Аватар для Hack
Пользователь

По умолчанию Re: Движок la2

Цитата:
Сообщение от Alay Посмотреть сообщение
Вообще не ожидал что этим еще кто-то запаривался
Действительно, зачем проверять входные данные от пользователя?
Hack вне форума Отправить сообщение для Hack с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 26.01.2017, 14:12   #99
Пользователь

По умолчанию Re: Движок la2

Цитата:
Сообщение от Camelion Посмотреть сообщение
Вы сначала померяйте своё существенное падение производительности, а потом уже говорите: было медленно и херово, переписал по другому стало быстрее, график до:; график после:;.
По факту же - эти ваши проверки забиты на уровне ПТС скриптов, достаточно достать оттуда чиселки, положить в мапу и сравнить с тем что получили от клиента. Вот и будет вам быстрое и простое решение.
Код:
        private static void Main()
        {
            var sw = new Stopwatch();
            for (var i = 0; i < 20; i++)
            {
                sw.Restart();
                var result = Appearance.CheckAppearence(Appearance.BaseRace.Ethria, Appearance.BaseSex.Female, 183, 1, 0, 0);
                sw.Stop();
                Console.WriteLine($"Тест моего говнокода. Прогон {i + 1}й занял {sw.ElapsedNanoSeconds()} наносекунд. Результат {result}");
            }
            for (var i = 0; i < 20; i++)
            {
                sw.Restart();
                var result = Appearance.CheckAppearenceV2(Appearance.BaseRace.Ethria, Appearance.BaseSex.Female, 183, 1, 0, 0);
                sw.Stop();
                Console.WriteLine($"Тест красивой обертки. Прогон {i + 1}й занял {sw.ElapsedNanoSeconds()} наносекунд. Результат {result}");
            }
            Console.ReadLine();
        }


На первый прогон не обращать внимание - трансляция Jit'ом.
Понятно что цифры не существенные. но все же. а так как win - не система реального времени - более точные цифры мы не получим
Alay вне форума Ответить с цитированием
Непрочитано 26.01.2017, 15:08   #100
Пользователь

По умолчанию Re: Движок la2

Смысл тонкой оптимизации такого кода если он выполняется редко и не крутится в цикле?
flopix вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движок Для Птс rqrwre Движки сайтов (CMS) 6 05.01.2014 21:36
Движок для pts Deamond Движки сайтов (CMS) 6 04.10.2013 13:03
Движок тех. поддержки Rovskoi Курилка / Yak floor 6 06.12.2012 17:42
1$ Что за движок 12king Движки сайтов (CMS) 11 10.01.2012 01:39


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 19:00. Часовой пояс GMT +3.

Вверх