Как обновить SourceMod до последней версии на вашем сервере
- остановить сервер
- сделать полное резервное копирование вашего сервера, достаточно папок:
* cfg
* addons/sourcemod
* addons/metamod
- удалить папку addons/sourcemod/logs
- скачать последнюю стабильную версию Sourcemod по ссылке https://www.sourcemo...p?branch=stable (кликнув на большую пиктограмму для Windows или Linux) смотря, на чём у вас сервак
- распаковать с помощью 7-zip или WinRAR, скопировать с заменой в соответствующие папки на сервере
(если вы в нем что-то меняли, например, при установке Accelerator)
- (если игра Left 4 Dead 1/2) удалить файл addons/sourcemod/plugins/nextmap.smx - он несовместим с этой игрой
- запустить сервер, ждать 20 сек.
- в отдельной rcon-консоли ввести команды:
sm version
meta version
Убедиться, что SourceMod и MetaMod работают и имеют ожидаемую вами версию.
Ввести:
sm plugins list
sm exts list
meta list
Скопировать результат в блокнот или Excel:
* убедиться что нет пунктов с пометками ERROR, FAILED. Если есть, разбираться по логу ошибок, или если это расширение, то командой sm exts load "имя файла" получите описание ошибки.
* отсортировать список, убедиться что нет дублирующихся пунктов. Если есть, возможно, какой-то из плагинов SM запущен 2 раза под разными именами.
- через вывод rcon-консоли убедиться, что сервер не вошел в циклическую перезагрузку из-за креша:
* иначе, придется искать проблемный плагин или расширение методом половинного деления (удаляете ровно половину плагинов, проверяете не ушла ли проблема, потом еще половину и т.д.)
- войти в папку logs/ смотреть, есть ли свежий файл "errors_<дата>.log", если да, вчитываться, разбираться почему, обновлять несовместимые плагины.
- зайти на сервер, поиграть немного, повторить 2 предыдущих пункта при необходимости.
Список дампов предыдущих версий SM: (1.12, 1.11, 1.10, 1.9, 1.8, 1.7) - для удобства/сравнения.
__________________
О ключевом слове "public".
К будущей SM 1.13 запланировано, что ключевым словом "public" должны помечаться только функции, которые являются форвардами (колбеками) от сторонних плагинов или самого SourceMod.
Колбеки, относительные текущему плагину, нельзя помечать как "public". Это будет считаться предупреждением, а то и ошибкой.
Т.е. избавляйтесь уже сейчас от привычки везде в CreateTimer, RegConsoleCmd и тому подобных использовать колбек функции с пометкой "public".
Сообщение отредактировал dragokas: 04 Ноябрь 2022 - 0:31
Game Over - L4D2 - CS:GO, Elllymn, Lesdure и 2 другим это нравится
Наверное стоит предупредить всех кто использует ещё SourceMod 1.10 и ниже
Вышел SourceMod 1.11 build 6905 который стал стабильным.
Так что совет владельцем серверов. Обновите свои сборки на актуальную версию, чтобы потом не плакали что очередное обновление Left 4 Dead 2 сломали ваши сервера.
Сообщение отредактировал dr_lex: 03 Июль 2022 - 20:29
Чё-то скопировал под ноль всё, что было в архиве для сорсмода 1.11 на сервер майарена, а в ркон консоли всё равно пишет, что версия сорсмода сервера 1.10)))
Чё-то скопировал под ноль всё, что было в архиве для сорсмода 1.11 на сервер майарена, а в ркон консоли всё равно пишет, что версия сорсмода сервера 1.10)))
Бред какой-то.
Ты уверен, что залил на сервер арены именно линукс, а не виндовс версию соурсмода? На арене сервера на линукс.
Чё-то скопировал под ноль всё, что было в архиве для сорсмода 1.11 на сервер майарена, а в ркон консоли всё равно пишет, что версия сорсмода сервера 1.10)))
Бред какой-то.
Большинство у тебя плагинов не запустятся компилированные sm 1.10 под sm 1.11. Имей виду чисто так для информации, придется все плагины перекомпилировать под твой sm.
Ты уверен, что залил на сервер арены именно линукс, а не виндовс версию соурсмода? На арене сервера на линукс.
В этом не уверен. Попробую.
Большинство у тебя плагинов не запустятся компилированные sm 1.10 под sm 1.11. Имей виду чисто так для информации, придется все плагины перекомпилировать под твой sm.
SM 1.11 6905
Вот чистая сборка sm и mm на основе которая собирается моя сборка сервера (вырезаны все ненужные файлы которые не работают на l4d2) MetaMod:Source v1.12.0-dev+1160V, Stripper v1.2.2, SourceMod v1.11.0.6905
Большинство у тебя плагинов не запустятся компилированные sm 1.10 под sm 1.11. Имей виду чисто так для информации, придется все плагины перекомпилировать под твой sm.
P.S. Чисто для информации.
AlexMy, откуда такая информация?
Могу только подтвердить, что многие плагины не будут работать на версии ниже если они собраны на разных версиях компиляторах.
Я когда переходил с SM 1.9 на SM 1.10 то обратной совместимости многие плагины отказывались работать. По этому мне приходилось изменения для сервера на этот переход собирать отдельно под SM 1.9.
Это связано скорее всего с тем что более новые версии компиляторов становятся все больше требовательными и убирают старую поддержу функций.
Так же проблемы с SM 1.10 на SM 1.11 так же были замечены у меня.
Сообщение отредактировал dr_lex: 15 Октябрь 2022 - 14:53
Да уже достал обновляться он, вчера случайно обновил, теперь +80 плагинов компилировать вручную. Больше не буду обновлять теперь минимум как три месяца.
Сообщение отредактировал valedar: 03 Ноябрь 2022 - 23:50
Да уже достал обновляться он, вчера случайно обновил, теперь +80 плагинов обновлять вручную. Больше не буду обновлять теперь минимум как три месяца.
Обновляться надо до версии актуальной (сейчас это SM 1.11) версии Build постоянно обновлять не нужно) Там основном изменения и исправления для разных игр, не всегда под l4d2.
Чтобы понимали я сам в данный момент использую SM 1.11.0.6905, Хотя есть уже SM 1.11.0.6917
Это связано скорее всего с тем что более новые версии компиляторов становятся все больше требовательными и убирают старую поддержу функций.
Такое бывает крайней редко. На столько редко, что я даже для примера сейчас ничего не смогу припомнить такого.
Да уже достал обновляться он, вчера случайно обновил, теперь +80 плагинов компилировать вручную. Больше не буду обновлять теперь минимум как три месяца.
Что у вас там такого понаписано, что каждое обновление ломает работу?
Стоят у меня большинство собранных еще на SM 1.10 (~150 плагинов), и до сих пор вообще ничего не отломалось, сколько я новых билдов не ставил. Пересобирать тупо лень, т.к. плагины разбросаны по папкам.
Add.
Дополнил статью советами по обновлению исходного кода (в конце под спойлером).
Сообщение отредактировал dragokas: 04 Ноябрь 2022 - 0:33
К будущей SM 1.13 запланировано, что ключевым словом "public" должны помечаться только функции, которые являются форвардами (колбеками) от сторонних плагинов или самого SourceMod.
Колбеки, относительные текущему плагину, нельзя помечать как "public". Это будет считаться предупреждением, а то и ошибкой.
Т.е. избавляйтесь уже сейчас от привычки везде в CreateTimer, RegConsoleCmd и тому подобных использовать колбек функции с пометкой "public".
За эту информацию спасибо!
У меня обычно "public" только в Функциях от SourceMod или в Event событиях, остальное все обычно "stock".
Такое бывает крайней редко. На столько редко, что я даже для примера сейчас ничего не смогу припомнить такого.
Что у вас там такого понаписано, что каждое обновление ломает работу?
Стоят у меня большинство собранных еще на SM 1.10 (~150 плагинов), и до сих пор вообще ничего не отломалось, сколько я новых билдов не ставил. Пересобирать тупо лень, т.к. плагины разбросаны по папкам.
Add.
Дополнил статью советами по обновлению исходного кода (в конце под спойлером).
Надо понимать что не у всех обновлены плагины как надо, многие используют исходники которые были написаны ещё до SM 1.7 =)
От сюда и проблемы, так как новые версии SM постепенно становятся все требовательны к коду.
есть пункт про возвращение строковых массивов с примером:
char[] GetAString() {
return "hello";
}
На что от компилятора я получаю на строке с return: error 039: constant symbol has no size
Версия компилятора: 1.11.0.6917
Вопрос. Где я в "Hello world" успел ошибиться?
Но это полбеды. Видимо из-за этого рождается другая проблема
Если одна функция, возвращающая массив, вызывает в рекурсии другую, то я получаю error 411: cannot determine fixed array size of return value
Минимальный пример без практического смысла:
char[] test(bool b = false)
{
char result[8];
if(b)
FormatEx(result, sizeof result, test(false)); // <- error 411: cannot determine fixed array size of return value
else
FormatEx(result, sizeof result, "Hi!");
return result; // Ожидается всегда "Hi!"
}
В конвертируемом плагине эту ошибку вызывает функция, которая возвращает общую строку с локализированными именами объектов из листа. (Вызывает другую функцию, которая возвращает имя каждого объекта и возвращает консолидированную строку). В качестве объекта не исключено наличие и другого такого же массива с объектами, что вызывает эту же функцию, но для другого набора.
На 10 версии всё компилируется и работает корректно. Так что мудреная логика тут не при чем.
Единственное решение - переписывать всю архитектуру проекта под строку, как входной параметр, но это слишком муторно. Да и на 10 версии всё же работало.
Что вообще происходит в 11 версии?
2) Скорее всего бага. Заполните issue. А пока придётся обойтись без рекурсии.
Вообще компилятор не любит фокусы с возвращением массива из функции, лучше руководствоваться стандартом, используемым в самом SM, - передавать массив параметром, а рядом его максимальный размер. Тогда и рекурсия будет работать норм.
Да. Так правильно. Но почему там написано не так? Сбивает с толку, особенно после всех изменений с 10 версии. Да и ООП немного развращает, хотя sourcepawn далеко не из той оперы (хоть и пытается где-то подпевать)
2) Скорее всего бага. Заполните issue. А пока придётся обойтись без рекурсии.
Вообще компилятор не любит фокусы с возвращением массива из функции, лучше руководствоваться стандартом, используемым в самом SM, - передавать массив параметром, а рядом его максимальный размер. Тогда и рекурсия будет работать норм.
Но разве не на поддержку этой фичи был сделан ряд изменений? То, что сейчас стандарт по передаче массивов, это по сути костыль, который хорошо работает)
Ладно мой плагин с рекурсией-треугольником, у них есть issue с ошибкой в обратной совместимости. Как-то на stable уже не слишком тянет. Но посмотрим-поглядим, что будет в 12
1) ну наверное как-то связано с особенностью хранения константных строк.
2) При чём тут костыль. Все так делают, все стандартные функции, возвращающие данные в массив, или принимающие организованный именно так в SM. В языке C++ тоже пишут так.
Функция, которая передает в качестве возвращаемого значения массив, это редкость. Вы тем самым запутываете код, непонятно, какую максимальную длину она вернёт, если не прочитать её код.