[Source 2] Скриптинг?

xtance

Участник
Сообщения
513
Реакции
743
Внимание! Спасибо за внимание.

Данная тема была создана в марте, когда вышла бета CS2.
С тех пор многое изменилось, в частности игра больше не поддерживает Lua, о которой идёт речь в этом посте.
Весь мой текст ниже практически потерял актуальность, но люди продолжают общаться в этой теме по привычке, и постить разные полезные находки.

Например:
А этот пост остался, можно сказать, для истории.
Ну я предупредил.


Вступление
Тема создана для совместного поиска способов продолжать писать плагины под контру.
И сразу же спойлер: адекватных рабочих решений пока нет. Иначе бы я не создал эту тему.
Далее вас ждёт несвязный поток информации и ссылок, которая была найдена в разных уголках интернета.

Насчёт сорсмода. S2 не поддерживается и неизвестно, будет ли.
Про это есть абзац в их вики (ссылка), где так же сказано про то, что MetaMod теоретически запускается с новым движком.
Но реализовано это было довольно давно (ссылка) в рамках поддержки доты2.

Ну а дальше я пошёл искать способы выполнять ну хоть какой-то код на сервере.
И обнаружилось то, что чего я не ожидал. Хотя кто знает.
Те кто делал карты под ксго, наверно сталкивались с VScript. Эта штука позволяла писать скрипты на Squirrel и взаимодействовать с объектами на карте.
В новом движке вальв выбрала другой язык скриптинга, а именно Lua, в отличие от Squirrel он хоть где-то используется.

Краткий гайд
Создать скрипт можно в csgo/scripts/vscripts , например script.lua
Данной папки у меня не было по умолчанию, её, как и скрипт, можно создать самому. По крайней мере на "пиратке"
Мы также можем поглазеть на скрипты, написанные разработчиками. Но в отличие от ксго они не лежат готовыми в папке, а запиханны в vpk
Скачиваем GCFScape и открываем pak01_dir.vpk (он лежит в папке csgo в самом конце), всё лежит в папке с говорящим названием scripts
Интересный намёк - скрипт с названием test_surfmode.lua (всё что он делает - отправляет переменные акселерации в консоль)
1679787692710.png
Допустим мы создали скрипт и вписали туда print("Hello world")
Чтобы выполнить его, напишите в консоль кс clear; script_reload_code script.lua
Теперь вы программист на Lua.

Хорошие новости
Теперь мы можем писать плагины.
Изменять свойства игрока, создавать команды, отслеживать события и так далее.
Пример кода:
Пример команды:
Convars:RegisterCommand('xtance', function(commandName, arg1, arg2, etc)

    local player1 = Convars:GetCommandClient()
    local id = player1:GetEntityIndex()
    print("[ID]", id)

    local player2 = PlayerInstanceFromIndex(id)
    print("[Player]", player2)

    print("[Same]", player1 == player2)

    local all = Entities:FindAllByClassname("player")
    for key, player in pairs(all) do
        print(key, player)
        local hp = player:GetHealth()
        print("HP", hp)
        player:SetHealth(555)
    end

end, '', 0)

1679788157701.png

Плохие новости
Собственно, недостаток всего того к чему мы привыкли. А именно
  • луа запускается в сильно урезанной виртуалке. нет способов взаимодействия с внешним миром
  • нет возможности подключения C/C++ библиотек, выполнения http запросов или какого-нибудь там sql
  • из работы с файлами можно разве что прочитать соседний скрипт лежащий в этой же папке
Ну и в целом неудобно и непривычно писать.

Мои костыли
А именно попытка прикрутить к этому всему JS
Есть интересный способ коммуникации с сервером, о котором не все знают
Запускаем игру через повершел с такими параметрами .\cs2.exe -console -developer -condebug -netconport 1337
В принципе только последний здесь принципиально важен, это открывает возможность связываться с консолью через telnet
После запуска игры жмём win+r и пишем telnet localhost 1337 (на моей винде его не было по умолчанию, как включить гуглится)
Результат:
1679789075865.png
Поскольку это известный протокол, нам не составит труда подключиться к нему из js (да хоть из чёрта лысого, я просто разучился писать на чём-то кроме js).
JavaScript:
const socket = net.connect('127.0.0.1', 1337);
socket.on('ready', () => {
    console.log('connected!')
 
    // хаваем строчки с консоли
    const reader = readline.createInterface({ input: socket, crlfDelay: Infinity });
    reader.on('line', input => {
 
        // обрезает строчку, не спрашивайте зачем, это все равно копипаст
        const line = input.replace(/\s{2,}/g, ' ').trim();
 
        console.log(line);
    })
 
    // отправляем команды в консоль
    socket.write(';echo hello hlmod\n'); // вот это \n в конце важно
})

Ну и по сути изначальная идея (сильно не смейтесь) заключалась в том, что:
  • для каждой функции, которая доступна lua (их много), создаём консольную команду
  • эта команда принимает аргументы, парсит их и отправляет движку
  • чтобы отправить результат обратно в js, мы просто отправляем текст в консоль
  • чтобы понять, какой текст в консоли какой функции js принадлежит, можно посылать из js в lua условный параметр (например uuid), хранить объект типа ({ uuid: callback }), потом парсить ответ, получать по uuid наш callback, вызывать функцию
  • на удивление на lua нашлась готовая библиотека для json, так что с парсингом строк из консоли не всё так плохо
Снова плохие новости
Хотя наверно вы и так уже догадались как хреново это работает в плане скорости.
Ведь на каждый пук нужно бегать туда-сюда и выполнять эту тучу операций.
Поэтому я забил на эту идею, а жаль, так как получался весьма приятный синтаксис.
Даже успел накодить обёртку для класса игрока, но вовремя решил измерить скорость. И так, представляю:

1679789745170.png
VS
1679789758336.png


В общем, мои костыли отработали за 300 мс, в то время как sourcepawn за 0.3 мс, разница примерно в 1000 раз.

На этом моменте я впал в тильт (нет серьёзно, стоит пойти поспать).
Но возможно у вас есть идеи, что с этим делать или же выбросить это все нафиг.

А версию на чистом Lua я не затестил, поскольку даже os.clock мне там не доступен.
Но если у вас есть желание вы можете писать простенькие плагины на нём (ней?) прямо сейчас.

Для тех кто решился
Вот апи по функциям доты2 - API | ModDota
Многие из них подходят и в кс2. Ну как минимум отсюда я понял как поставить игроку хп.
Также в Lua есть рефлексия (можно пройтись по глобальной таблице, оттуда получить все доступные и пройтись по ним тоже).
То есть можно посмотреть что там вам доступно. Пример кода по ссылке, глобальная таблица называется _G

Что дальше
Ну я по сути сижу на читерских форумах (uc) и смотрю как они там реверсят движок.
Вообще они там копают примерно в том же направлении, только в основном волнуются за клиент а не сервер, но там тоже можно подцепить инфы
И щас моя надежда остается на то что я научусь работать с памятью и буду напрямую вызывать функции и читать значения, как это делают крутые хакеры
А в идеале чтобы кто-нибудь сделал аналог сорсмода

Всем спасибо за чтение и спокойной ночки. С вами как обычно был xtance
Сообщения автоматически склеены:

Также забыл сказать, если кому-то понадобятся игровые события, их можно посмотреть через тот же GFScape в csgo/resource
1679791032814.png(это просто текстовые файлы)
А слушать их можно через луашку
NGINX:
function TestEvent(event)
    print("[Jump]", event["userid"])
end

local id = ListenToGameEvent("player_jump", TestEvent, self)
 
Последнее редактирование:

baks77

Участник
Сообщения
97
Реакции
3
Если у Вас проблемы с компиляции, то что можно говорить о доработке плагина. Т.к. там все нестабильно пока версия от версии - нет смысла сейчас обсуждать тут что-то, хочется пообсуждать - идите в дискорд ресурса, мало кто из не англоязычного комьюнити этим занимается
спасибо за помощь.
Ведь форумы в ру сегменте они такие.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
спасибо за помощь.
Ведь форумы в ру сегменте они такие.
Ну просто спрашивать такие вещи, когда и так везде все понаписано - как компилировать. Банально в моем сообщении о CSS предоставлены все ссылки, ну нужно никуда ходить. Можете пролистать, если все таки есть желание научиться компилировать
 

baks77

Участник
Сообщения
97
Реакции
3
Ну просто спрашивать такие вещи, когда и так везде все понаписано - как компилировать. Банально в моем сообщении о CSS предоставлены все ссылки, ну нужно никуда ходить. Можете пролистать, если все таки есть желание научиться компилировать
хорошо перефразирую, использовал я инструкцию по компилации шарпа, поднял lxc контейнер, в нем ubuntu 22.04 , установил net 7.0 . Запускаю компиляцию он начинает сыпать ошибками.
Потому вопервых, в инструкции нету не чего про установку пакетов, и их версий. Если все знают, кто давно работает, рад за них но на обычной убунте не стартануло. Я уверен что таких вопросов как у меня много
Возможно дистр, нужен какой иной, где все это взлетает без бубнов. Вот и спрашиваю.

In file included from /root/counterstrikesharp/libraries/hl2sdk-cs2/public/mathlib/vector.h:37:
/root/counterstrikesharp/libraries/hl2sdk-cs2/public/mathlib/vector2d.h:242:32:
вот в этом моменте проблема начинается, потом сыпится еще много варнов и в конце ерор.

Потом как скомпилировать плагин для шарпа, в тех ссылках что ВЫ давали, ткните меня носом, но я этого там не нашел. Нашел отдельный плагин, где человек расписал как его скомпилировать. Ок, но и там ошибки, потому думаю проблема с дистрибутивами.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
хорошо перефразирую, использовал я инструкцию по компилации шарпа, поднял lxc контейнер, в нем ubuntu 22.04 , установил net 7.0 . Запускаю компиляцию он начинает сыпать ошибками.
Потому вопервых, в инструкции нету не чего про установку пакетов, и их версий. Если все знают, кто давно работает, рад за них но на обычной убунте не стартануло. Я уверен что таких вопросов как у меня много
Возможно дистр, нужен какой иной, где все это взлетает без бубнов. Вот и спрашиваю.

In file included from /root/counterstrikesharp/libraries/hl2sdk-cs2/public/mathlib/vector.h:37:
/root/counterstrikesharp/libraries/hl2sdk-cs2/public/mathlib/vector2d.h:242:32:
вот в этом моменте проблема начинается, потом сыпится еще много варнов и в конце ерор.

Потом как скомпилировать плагин для шарпа, в тех ссылках что ВЫ давали, ткните меня носом, но я этого там не нашел. Нашел отдельный плагин, где человек расписал как его скомпилировать. Ок, но и там ошибки, потому думаю проблема с дистрибутивами.
Изначально речь шла о компиляции плагина на CSSharp, теперь непонятно откуда взялся вопрос о компиляции самого фреймворка...

Причем тут установка пакетов - тоже непонятно, когда, все что требуется для компиляции - добавить зависимость двумя нажатиями на мышку, о которой также подробно расписано все в русскоязычном гайде(если речь идет о компиляции плагина).

Если нужна информация по сборке самого фрейма - тут более чем все написано GitHub - roflmuffin/CounterStrikeSharp: CounterStrikeSharp allows you to write server plugins in C# for Counter-Strike 2/Source2/CS2
 

baks77

Участник
Сообщения
97
Реакции
3
Изначально речь шла о компиляции плагина на CSSharp, теперь непонятно откуда взялся вопрос о компиляции самого фреймворка...

Причем тут установка пакетов - тоже непонятно, когда, все что требуется для компиляции - добавить зависимость двумя нажатиями на мышку, о которой также подробно расписано все в русскоязычном гайде(если речь идет о компиляции плагина).

Если нужна информация по сборке самого фрейма - тут более чем все написано GitHub - roflmuffin/CounterStrikeSharp: CounterStrikeSharp allows you to write server plugins in C# for Counter-Strike 2/Source2/CS2
Благодарю. Просто не читал ссылку. Думал там про установку Шарпа, я его быстро поставил. А там оно вон что, я искал разработка под Шарп, компиляция. Работа , я думал это установка. Даже не зашёл. А оно вон подносом. Спасибо.
Сообщения автоматически склеены:

Изначально речь шла о компиляции плагина на CSSharp, теперь непонятно откуда взялся вопрос о компиляции самого фреймворка...

Причем тут установка пакетов - тоже непонятно, когда, все что требуется для компиляции - добавить зависимость двумя нажатиями на мышку, о которой также подробно расписано все в русскоязычном гайде(если речь идет о компиляции плагина).

Если нужна информация по сборке самого фрейма - тут более чем все написано GitHub - roflmuffin/CounterStrikeSharp: CounterStrikeSharp allows you to write server plugins in C# for Counter-Strike 2/Source2/CS2
Все получилось все собрал. Спасибо большое.
 
Последнее редактирование:

baks77

Участник
Сообщения
97
Реакции
3
Изначально речь шла о компиляции плагина на CSSharp, теперь непонятно откуда взялся вопрос о компиляции самого фреймворка...

Причем тут установка пакетов - тоже непонятно, когда, все что требуется для компиляции - добавить зависимость двумя нажатиями на мышку, о которой также подробно расписано все в русскоязычном гайде(если речь идет о компиляции плагина).

Если нужна информация по сборке самого фрейма - тут более чем все написано GitHub - roflmuffin/CounterStrikeSharp: CounterStrikeSharp allows you to write server plugins in C# for Counter-Strike 2/Source2/CS2
cs2_weapons_skin/index.html at main · yuzhouUvU/cs2_weapons_skin может добавить в раздел mm plugins , может это ускорит разработку полного плагина. Ведь в целом можно написать на css ответую часть и конфиги перенести с сайта в плагин. Пусть и в текстовое меню как в вип плагине.
 

L1MONENKO

Добрая душа
Сообщения
655
Реакции
600
cs2_weapons_skin/index.html at main · yuzhouUvU/cs2_weapons_skin может добавить в раздел mm plugins , может это ускорит разработку полного плагина. Ведь в целом можно написать на css ответую часть и конфиги перенести с сайта в плагин. Пусть и в текстовое меню как в вип плагине.
Разработку ВОЗМОЖНО ускорит краунд и поиск разработчика, а не ожидание того доброго человека, который в открытый доступ напишет тот самый много желаемый плагин
 
Последнее редактирование:

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
cs2_weapons_skin/index.html at main · yuzhouUvU/cs2_weapons_skin может добавить в раздел mm plugins , может это ускорит разработку полного плагина. Ведь в целом можно написать на css ответую часть и конфиги перенести с сайта в плагин. Пусть и в текстовое меню как в вип плагине.
Причем тут MM?
 

baks77

Участник
Сообщения
97
Реакции
3
Не ну не нужно и не нужно. Я предложил поделиться инфой. Возможно скоро будет перевод сайта мы для себя делаем. Куда это публиковать я не знаю. Если это не кому не нужно. Да и фиг тогда с ним. Ту просто нет инфы про плагины а их куча и уже нормальный геимплей.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Не ну не нужно и не нужно. Я предложил поделиться инфой. Возможно скоро будет перевод сайта мы для себя делаем. Куда это публиковать я не знаю. Если это не кому не нужно. Да и фиг тогда с ним. Ту просто нет инфы про плагины а их куча и уже нормальный геимплей.
А какая вам нужна инфа про плагины, я чет вообще не понимаю, что вы хотите сказать...
 

Aquans

Участник
Сообщения
96
Реакции
1
Выше уже кидали патчер
Где?
 

baks77

Участник
Сообщения
97
Реакции
3
Разработку ВОЗМОЖНО ускорит краунд и поиск разработчика, а не ожидание того доброго человека, который в открытый доступ напишет тот самый много желаемый плагин
ну мы к примеру перевод делаем сайта. Пока знаний не хватает, изучаем как от клиента послать команду на сервер, тип это он skin написал. Я вот походу совсем искать разучился, но так и не нашел всех доступных команд css . Хотя бы посмотреть возможноти их. На данном этапе игроки были бы рады и рендомным моделям, а это уже можно и без меню сделать, потом потехоньку хранение в sql записать. Я рад за всех кто шарит с++ . Но у меня куча вопросов, а где на них ответы искать хз. Да и времени не так много сидеть сутками за пк, уже нет возможности. А что не спросишь, в ответ издевки.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
ну мы к примеру перевод делаем сайта. Пока знаний не хватает, изучаем как от клиента послать команду на сервер, тип это он skin написал. Я вот походу совсем искать разучился, но так и не нашел всех доступных команд css . Хотя бы посмотреть возможноти их. На данном этапе игроки были бы рады и рендомным моделям, а это уже можно и без меню сделать, потом потехоньку хранение в sql записать. Я рад за всех кто шарит с++ . Но у меня куча вопросов, а где на них ответы искать хз. Да и времени не так много сидеть сутками за пк, уже нет возможности. А что не спросишь, в ответ издевки.
Опять туда же... - причем тут C++???
Какие вопросы - такие ответы, если не в состоянии найти какую-либо инфу и пораскинуть мозгами, то тогда напрашивается вопрос - а чем лезть? В вашем случае лучше заплатить кому-нибудь, чем пытаться разобраться в этом, хотя, судя по всему от попыток тут только - слово. А то, что плагин в первую очередь нарушает политику валве - ничего это не говорит, я так понимаю?
 

baks77

Участник
Сообщения
97
Реакции
3
Опять туда же... - причем тут C++???
Какие вопросы - такие ответы, если не в состоянии найти какую-либо инфу и пораскинуть мозгами, то тогда напрашивается вопрос - а чем лезть? В вашем случае лучше заплатить кому-нибудь, чем пытаться разобраться в этом, хотя, судя по всему от попыток тут только - слово. А то, что плагин в первую очередь нарушает политику валве - ничего это не говорит, я так понимаю?
...
 

xtance

Участник
Сообщения
513
Реакции
743
Мб уже было на форуме, не знаю
Чтобы починить вот этот спам:
1700827195442.png
Можно добавить фильтр в start.sh скрипт, в самый конец, по словам которые вы хотите убрать (уберет всю строчку если содержит слово из списка):
Bash:
./путь_к_серверу/game/bin/linuxsteamrt64/cs2 -dedicated -всякие -параметры | grep -vwE "(usecElapsed|compensation)"

Идея отсюда: How to remove lines from the text file containing specific words through terminal?
 

XVII

Участник
Сообщения
12
Реакции
1
я себе сервер сломал такими махинациями
 

Вложения

  • 2024-02-24_17%3A57%3A04.log
    7.3 КБ · Просмотры: 30

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Сверху Снизу