Перейти к содержимому


Фотография

[Статья] Как обновить SourceMod до последней версии на вашем сервере


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 22

#1 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 17 Май 2020 - 21:05

 
Как обновить SourceMod до последней версии на вашем сервере
 
- остановить сервер
 
- сделать полное резервное копирование вашего сервера, достаточно папок:
* cfg
* addons/sourcemod
addons/metamod
 
- удалить папку addons/sourcemod/logs
 
- скачать последнюю стабильную версию Sourcemod по ссылке https://www.sourcemo...p?branch=stable (кликнув на большую пиктограмму для Windows или Linux) смотря, на чём у вас сервак
 
- распаковать с помощью 7-zip или WinRAR, скопировать с заменой в соответствующие папки на сервере
 
- вернуть из резервной копии обратно:

* содержимое папки addons/sourcemod/data/sqlite

и файлы:

* addons/metamod/sourcemod.vdf
* addons/sourcemod/configs/admins_simple.ini
а также всё остальное, что вы перенастраивали вручную из числа замененного, чаще всего это:
* addons/sourcemod/configs/admin_groups.cfg
* addons/sourcemod/configs/admin_levels.cfg
* addons/sourcemod/configs/admin_overrides.cfg
* addons/sourcemod/configs/adminmenu_cfgs.txt
* addons/sourcemod/configs/adminmenu_custom.txt
* addons/sourcemod/configs/adminmenu_sorting.txt
* addons/sourcemod/configs/admins.cfg
 
Перенастроить файл:
 
* addons/sourcemod/configs/core.cfg
(если вы в нем что-то меняли, например, при установке 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 предыдущих пункта при необходимости.
 
==========
 
Замечания / дополнения приветствуются.
 
EDIT.
Советы по обновлению исходного кода:
Скрытый текст

Сообщение отредактировал dragokas: 04 Ноябрь 2022 - 0:31

  • Game Over - L4D2 - CS:GO, Elllymn, Lesdure и 2 другим это нравится

#2 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 102 сообщений

Отправлено 19 Май 2020 - 0:28

Если у вас SM ниже 1.8:

 - сперва удалите все родные плагины, которые шли в поставке с вашей версией SourceMod.

Какой смысл, именно в этой операции?


Сообщение отредактировал BloodyBlade: 19 Май 2020 - 0:28


#3 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 19 Май 2020 - 10:21

Между этими релизами некоторые плагины sm подверглись переименованию, т.о. произойдёт дублирование.



#4 Goldfish

Goldfish

    Пользователь

  • Пользователь
  • PipPipPip
  • 388 сообщений

Отправлено 25 Май 2020 - 12:20

и последний пункт:

- повторно и начисто удалить SM, поставить старый 1.09 с панели и радоваться жизнью :)



#5 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 10 Январь 2021 - 22:42

Кому интересно, опубликован перевод большой статьи SilverShot-а о кодинге на SourcePawn, отладке и установке сервера.


  • BloodyBlade это нравится

#6 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 03 Июль 2022 - 20:28

Наверное стоит предупредить всех кто использует ещё SourceMod 1.10 и ниже
Вышел SourceMod 1.11 build 6905 который стал стабильным.
Так что совет владельцем серверов. Обновите свои сборки на актуальную версию, чтобы потом не плакали что очередное обновление Left 4 Dead 2 сломали ваши сервера.

 


Сообщение отредактировал dr_lex: 03 Июль 2022 - 20:29

  • Slaven555 и dragokas это нравится

#7 win100

win100

    Новичок

  • Пользователь
  • Pip
  • 17 сообщений

Отправлено 14 Октябрь 2022 - 13:51

Чё-то скопировал под ноль всё, что было в архиве для сорсмода 1.11 на сервер майарена, а в ркон консоли всё равно пишет, что версия сорсмода сервера 1.10)))

Бред какой-то.



#8 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 102 сообщений

Отправлено 14 Октябрь 2022 - 15:36

Чё-то скопировал под ноль всё, что было в архиве для сорсмода 1.11 на сервер майарена, а в ркон консоли всё равно пишет, что версия сорсмода сервера 1.10)))

Бред какой-то.

Ты уверен, что залил на сервер арены именно линукс, а не виндовс версию соурсмода? На арене сервера на линукс.



#9 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 032 сообщений

Отправлено 14 Октябрь 2022 - 16:23

Чё-то скопировал под ноль всё, что было в архиве для сорсмода 1.11 на сервер майарена, а в ркон консоли всё равно пишет, что версия сорсмода сервера 1.10)))

Бред какой-то.

Большинство у тебя плагинов не запустятся компилированные sm 1.10 под sm 1.11. Имей виду чисто так для информации, придется все плагины перекомпилировать под твой sm.

P.S. Чисто для информации.



#10 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 14 Октябрь 2022 - 22:32

AlexMy, откуда такая информация?



#11 win100

win100

    Новичок

  • Пользователь
  • Pip
  • 17 сообщений

Отправлено 15 Октябрь 2022 - 12:40

Ты уверен, что залил на сервер арены именно линукс, а не виндовс версию соурсмода? На арене сервера на линукс.

В этом не уверен. Попробую.


Большинство у тебя плагинов не запустятся компилированные sm 1.10 под sm 1.11. Имей виду чисто так для информации, придется все плагины перекомпилировать под твой sm.

P.S. Чисто для информации.

Перекомпилирую, если вдруг что, благодарю.



#12 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 15 Октябрь 2022 - 14:53

В этом не уверен. Попробую.


Перекомпилирую, если вдруг что, благодарю.

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


#13 valedar

valedar

    Участник

  • Пользователь
  • PipPip
  • 62 сообщений

Отправлено 03 Ноябрь 2022 - 23:46

Да уже достал обновляться он, вчера случайно обновил, теперь +80 плагинов компилировать вручную. Больше не буду обновлять теперь минимум как три месяца.


Сообщение отредактировал valedar: 03 Ноябрь 2022 - 23:50


#14 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 03 Ноябрь 2022 - 23:54

Да уже достал обновляться он, вчера случайно обновил, теперь +80 плагинов обновлять вручную. Больше не буду обновлять теперь минимум как три месяца.

Обновляться надо до версии актуальной (сейчас это SM 1.11) версии Build постоянно обновлять не нужно) Там основном изменения и исправления для разных игр, не всегда под l4d2.
Чтобы понимали я сам в данный момент использую SM 1.11.0.6905, Хотя есть уже SM 1.11.0.6917



#15 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 04 Ноябрь 2022 - 0:32

 

Это связано скорее всего с тем что более новые версии компиляторов становятся все больше требовательными и убирают старую поддержу функций.
 

 

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


Да уже достал обновляться он, вчера случайно обновил, теперь +80 плагинов компилировать вручную. Больше не буду обновлять теперь минимум как три месяца.

 

Что у вас там такого понаписано, что каждое обновление ломает работу?

Стоят у меня большинство собранных еще на SM 1.10 (~150 плагинов), и до сих пор вообще ничего не отломалось, сколько я новых билдов не ставил. Пересобирать тупо лень, т.к. плагины разбросаны по папкам.


Add.

Дополнил статью советами по обновлению исходного кода (в конце под спойлером).


Сообщение отредактировал dragokas: 04 Ноябрь 2022 - 0:33


#16 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 04 Ноябрь 2022 - 13:43

О ключевом слове "public".

К будущей SM 1.13 запланировано, что ключевым словом "public" должны помечаться только функции, которые являются форвардами (колбеками) от сторонних плагинов или самого SourceMod.

Колбеки, относительные текущему плагину, нельзя помечать как "public". Это будет считаться предупреждением, а то и ошибкой.

Т.е. избавляйтесь уже сейчас от привычки везде в CreateTimer, RegConsoleCmd и тому подобных использовать колбек функции с пометкой "public".

За эту информацию спасибо!
У меня обычно "public" только в Функциях от SourceMod или в Event событиях, остальное все обычно "stock".
 

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


 

Что у вас там такого понаписано, что каждое обновление ломает работу?

Стоят у меня большинство собранных еще на SM 1.10 (~150 плагинов), и до сих пор вообще ничего не отломалось, сколько я новых билдов не ставил. Пересобирать тупо лень, т.к. плагины разбросаны по папкам.


Add.

Дополнил статью советами по обновлению исходного кода (в конце под спойлером).

 

Пример:

6916 Fix DHooks jit code stack memory alignment (#1849)
6911 Update SourcePawn.

Надо понимать что не у всех обновлены плагины как надо, многие используют исходники которые были написаны ещё до SM 1.7 =)
От сюда и проблемы, так как новые версии SM постепенно становятся все требовательны к коду.
 



#17 PawnLomaster

PawnLomaster

    Участник

  • Пользователь
  • PipPip
  • 116 сообщений

Отправлено 07 Ноябрь 2022 - 3:49

Может, кто знает, что за юмор у 11 компилятора?

Тк в 11 сменился синтаксис, потихоньку перевожу свои плагины с 10 на 11 версию (в многом из-за l4dhooks)

В официальном "руководстве" по изменениям 

Скрытый текст
есть пункт про возвращение строковых массивов с примером:

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 версии?

UDP:
Я подглядел код компилятора 

Скрытый текст

Судя по всему 411 будет выбрасываться для любых рекурсивных вызовов функций, возвращающих массив. В 10 версии такой проверки просто нет.

Но точно ли это именно так задумано? И как это решить в текущих реалиях.


Сообщение отредактировал PawnLomaster: 07 Ноябрь 2022 - 5:00


#18 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 07 Ноябрь 2022 - 5:22

1)

char[] GetAString()
{
    char str[] = "hello";
    return str;
}

2) Скорее всего бага. Заполните issue. А пока придётся обойтись без рекурсии.

Вообще компилятор не любит фокусы с возвращением массива из функции, лучше руководствоваться стандартом, используемым в самом SM, - передавать массив параметром, а рядом его максимальный размер. Тогда и рекурсия будет работать норм. 

#pragma semicolon 1
#pragma newdecls required

const int MAX_STR_LEN = 16;

public void OnPluginStart()
{
	char result[MAX_STR_LEN];
	test(result, sizeof(result));
}

void test(char[] result, int MaxLength, bool recur = true)
{
	if (recur) {
		char buf[MAX_STR_LEN];
		test(buf, sizeof(buf), false);
		FormatEx(result, MaxLength, "%s", buf);
	}
	else {
		FormatEx(result, MaxLength, "Hi!");
	}
}


Сообщение отредактировал dragokas: 07 Ноябрь 2022 - 5:29


#19 PawnLomaster

PawnLomaster

    Участник

  • Пользователь
  • PipPip
  • 116 сообщений

Отправлено 07 Ноябрь 2022 - 5:43

 

1)

char[] GetAString()
{
    char str[] = "hello";
    return str;
}

Да. Так правильно. Но почему там написано не так? Сбивает с толку, особенно после всех изменений с 10 версии. Да и ООП немного развращает, хотя sourcepawn далеко не из той оперы (хоть и пытается где-то подпевать)


 

2) Скорее всего бага. Заполните issue. А пока придётся обойтись без рекурсии.

Вообще компилятор не любит фокусы с возвращением массива из функции, лучше руководствоваться стандартом, используемым в самом SM, - передавать массив параметром, а рядом его максимальный размер. Тогда и рекурсия будет работать норм.

 

Но разве не на поддержку этой фичи был сделан ряд изменений? То, что сейчас стандарт по передаче массивов, это по сути костыль, который хорошо работает)
Ладно мой плагин с рекурсией-треугольником, у них есть issue с ошибкой в обратной совместимости. Как-то на stable уже не слишком тянет. Но посмотрим-поглядим, что будет в 12



#20 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 07 Ноябрь 2022 - 5:56

1) ну наверное как-то связано с особенностью хранения константных строк.

 

2) При чём тут костыль. Все так делают, все стандартные функции, возвращающие данные в массив, или принимающие организованный именно так  в SM. В языке C++ тоже пишут так.

Функция, которая передает в качестве возвращаемого значения массив, это редкость. Вы тем самым запутываете код, непонятно, какую максимальную длину она вернёт, если не прочитать её код.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных