У вас значит скрипт не чистый, а после шаловливых ручек...Не вижу проблемы внести изменения своими руками, для замени табуляции между = на пробелВ общем, после нескольких суток танцев с бубном, когда вроде бы как все должно было заработать, выяснилось - что некоторые скиллы записаны без соблюдения шаблона. То есть, например 1298 (Масс Слоу) имеет параметр cast_range=500. только вот перед знаком "=" стоит \t. Соответственно мой ̶с̶у̶п̶е̶р̶_̶к̶л̶а̶с̶с̶н̶ы̶й̶_̶п̶а̶р̶с̶е̶р̶ ломается к е**ням. Как корейцы парсят это дерьмо?
Корейцы скорее всего пользуются старым добрым поиском по строке. Т.е. где-то хранишь все эти строки "skill_name", "skill_id" и т.д. и вместо сплита по \t начинаешь для каждой строчки выискивать каждый из параметров. Получение значения тоже примерно так: поиск по "=", задаем начало для чтения значения, отбрасывая лишние символы (судя по всему первым символом может быть "[", "{", цифра или латиница. С окончанием чтения значения тоже аналогично. Единственный момент - комментарии: либо избавляться от них перед парсингом, либо же сделать проверку, является ли найденная строка комментарием.В общем, после нескольких суток танцев с бубном, когда вроде бы как все должно было заработать, выяснилось - что некоторые скиллы записаны без соблюдения шаблона. То есть, например 1298 (Масс Слоу) имеет параметр cast_range=500. только вот перед знаком "=" стоит \t. Соответственно мой ̶с̶у̶п̶е̶р̶_̶к̶л̶а̶с̶с̶н̶ы̶й̶_̶п̶а̶р̶с̶е̶р̶ ломается к е**ням. Как корейцы парсят это дерьмо?
PTS hf от AdvExt тоже так грузит npcПТС с НПС за 29 секунд? мммм) что-то новенькое. Как добились успеха?)
Кэширование скриптов, АИ, геодаты, пачноутов в озу, доступно в серверах выше хф.ПТС с НПС за 29 секунд? мммм) что-то новенькое. Как добились успеха?)
Вот я бы про это почитал. Я смотрел как клиент парсит датки (тоже самое по сути), там просто перебор строки был.skill_data := {skill}
skill := 'skill_begin' {param} 'skill_end' new-line
param := word '=' value
struct := '{' [value {;' value}] '}'
value := number | string | word | struct
string := '[' {any-char-except-newline} ']'
word := letter {allowed-word-char}
number := ['-'] digit {digit} ['.' digit {digit}]
Не включая коментарии, но коментарии можно лексером отбросить, это не большая проблема, как отдельные токены.
Пробельный символ используется как разделитель
В птс использует yacc, можно выдрать правила, из таблицы строк просто в ida.
Это привет fastenterworld. Но на стоке есть свои баги.PTS hf от AdvExt тоже так грузит npc
А можно поглядеть? Интересно как добился этого (ну вангую перенос многопоточной загрузки нпс сервера с финала+).птс с4 загрузка 2 минуты сервер + нпц
Иди и учи спеки JVM. Твои byte/short будут подвержены выравниванию и они будут занимать в любом случае 4 байта. Ах да, можно еще почитать спецификацию байткода JVM, очень рекомендую, для ознакомления, какой байткод есть для работы с такими типами данных и какой есть для работы с int. Откроешь много нового для себя, что многие операции с byte/short автоматически кастуют значение к 4х байтовому типу на стеке.данные которые помещаются в byte/short и не переходят в int, сидят в byte/short...
Как корейцы парсят это дерьмо?
Там используются лексеммы. ANTLR или похожее дерьмо в помощь. Об этом уже писали выше.Целых 0.0001 секунды при старте сервера мало, что дадут.
Насколько я помню, он просто идет по строке.
Для мастеров костылинга и говнокодинга есть \s в регулярных выражениях, который означает любой символ whitespace.В общем, после нескольких суток танцев с бубном, когда вроде бы как все должно было заработать, выяснилось - что некоторые скиллы записаны без соблюдения шаблона. То есть, например 1298 (Масс Слоу) имеет параметр cast_range=500. только вот перед знаком "=" стоит \t.
Размер кеша меняется через параметр JVM. Можно увеличить и вообще все делать через это redlol.Ведь он умеет ложить значения -128 127 в кэш, не копируя каждый раз.
Многопоточная загрузка сервера. Поддерживается с GF и выше, настраивается в конфигах.ПТС с НПС за 29 секунд? мммм) что-то новенькое. Как добились успеха?)
На сколько я понимаю, это если будет 1-3 byte, а так то 4 byte(2 short) == 1 int, тоесть 20(как раз мой случай) полей byte будут занимать как 5 int, преобразование в int/long происходит при арифметических операциях.Иди и учи спеки JVM. Твои byte/short будут подвержены выравниванию и они будут занимать в любом случае 4 байта. Ах да, можно еще почитать спецификацию байткода JVM, очень рекомендую, для ознакомления, какой байткод есть для работы с такими типами данных и какой есть для работы с int. Откроешь много нового для себя, что многие операции с byte/short автоматически кастуют значение к 4х байтовому типу на стеке.
Если я верно понимаю, то это актуально только в случае использования Integer, а если нам нужен int и темболее мы его парсим из String, это бессмысленная операция.Размер кеша меняется через параметр JVM. Можно увеличить и вообще все делать через это redlol.
Если я верно понимаю, то это актуально только в случае использования Integer, а если нам нужен int и темболее мы его парсим из String, это бессмысленная операция.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?