forked from ParadiseSS13/Paradise
-
Notifications
You must be signed in to change notification settings - Fork 123
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
# РЕБЕЙЗНУТО НА ТРАНСЛАТЕ ДЛЯ ТМ <!-- Пишите **НИЖЕ** заголовков и **ВЫШЕ** комментариев, иначе что то может пойти не так. --> <!-- Вы можете прочитать Contributing.MD, если хотите узнать больше. --> ## Что этот PR делает Добавляет админам(и менторам) автоответ от чатгпт <!-- Вкратце опишите изменения, которые вносите. --> <!-- Опишите **все** изменения, так как противное может сказаться на рассмотрении этого PR'а! --> <!-- Если вы исправляете Issue, добавьте "Fixes #xxxx" (где xxxx - номер Issue) где-нибудь в описании PR'а. Это автоматически закроет Issue после принятия PR'а. --> ## Почему это хорошо для игры Это плохо <!-- Опишите, почему, по вашему, следует добавить эти изменения в игру. --> ## Изображения изменений ![image](https://github.com/user-attachments/assets/f5580af7-9fcf-469a-a6c2-7168a981aaf7) ![image](https://github.com/user-attachments/assets/2a54b643-199f-4a29-80ff-dc7c9759766f) <!-- Если вы не меняли карту или спрайты, можете опустить эту секцию. Если хотите, можете вставить видео. --> ## Тестирование Поспрашивал, как менять руки. С переменным успехом получил ответы. <!-- Как вы тестировали свой PR, если делали это вовсе? --> ## Changelog :cl: experiment: Админы и менторы заменены на ChatGPT. /:cl: <!-- Оба :cl:'а должны быть на месте, что-бы чейнджлог работал! Вы можете написать свой ник справа от первого :cl:, если хотите. Иначе будет использован ваш ник на ГитХабе. --> <!-- Вы можете использовать несколько записей с одинаковым префиксом (Они используются только для иконки в игре) и удалить ненужные. Помните, что чейнджлог должен быть понятен обычным игроком. --> <!-- Если чейнджлог не влияет на игроков(например, это рефактор), вы можете исключить всю секцию. --> --------- Signed-off-by: Furior <[email protected]> Co-authored-by: dj-34 <[email protected]>
- Loading branch information
Showing
9 changed files
with
212 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
/datum/modpack/ai_integration | ||
name = "Приколы с нейронками" | ||
desc = "Вините во всем OpenAI, не меня." | ||
author = "furior" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
#include "_ai_integration.dm" | ||
|
||
#include "code/config.dm" | ||
#include "code/gpt_subsystem.dm" | ||
#include "code/ticket.dm" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/datum/server_configuration | ||
var/datum/configuration_section/gpt_configuration/gpt | ||
|
||
/datum/server_configuration/load_all_sections() | ||
. = ..() | ||
gpt = new() | ||
safe_load(gpt, "gpt_configuration") | ||
|
||
/datum/configuration_section/gpt_configuration | ||
protection_state = PROTECTION_PRIVATE | ||
var/gpt_enabled = FALSE | ||
var/access_token = "" | ||
var/endpoint = "https://models.inference.ai.azure.com/chat/completions" | ||
var/model = "gpt-4o" | ||
|
||
/datum/configuration_section/gpt_configuration/load_data(list/data) | ||
CONFIG_LOAD_BOOL(gpt_enabled, data["gpt_enabled"]) | ||
CONFIG_LOAD_STR(access_token, data["access_token"]) | ||
CONFIG_LOAD_STR(endpoint, data["endpoint"]) | ||
CONFIG_LOAD_STR(model, data["model"]) | ||
|
||
/datum/http_request/vv_get_var(var_name) | ||
if(var_name == "header") | ||
return FALSE | ||
. = ..() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
GLOBAL_DATUM_INIT(gpt220, /datum/gpt220, new()) | ||
|
||
/// AI Chatbot interface adapter | ||
/datum/gpt220 | ||
|
||
/datum/gpt220/proc/request_completition(system_message, prompt, datum/callback/callback) | ||
var/endpoint = GLOB.configuration.gpt.endpoint | ||
var/list/body = json_encode(list( | ||
"messages" = list( | ||
list( | ||
"role" = "system", | ||
"content" = system_message | ||
), | ||
list( | ||
"role" = "user", | ||
"content" = prompt | ||
) | ||
), | ||
"temperature" = 0.1, | ||
"top_p" = 1, | ||
"max_tokens" = 100, | ||
"model" = GLOB.configuration.gpt.model | ||
)) | ||
var/list/headers = list( | ||
"content-type" = "application/json", | ||
"authorization" = "Bearer [GLOB.configuration.gpt.access_token]" | ||
) | ||
|
||
SShttp.create_async_request(RUSTG_HTTP_METHOD_POST, endpoint, body, headers, callback) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/datum/admins/Topic(href, href_list) | ||
. = ..() | ||
if(href_list["ai_respond"]) | ||
var/datum/controller/subsystem/tickets/ticketSystem | ||
if(href_list["is_mhelp"]) | ||
ticketSystem = SSmentor_tickets | ||
else | ||
ticketSystem = SStickets | ||
|
||
if(!check_rights(ticketSystem.rights_needed)) | ||
return | ||
var/index = text2num(href_list["ai_respond"]) | ||
ticketSystem.ai_respond(index) | ||
|
||
/datum/controller/subsystem/tickets/proc/ai_respond(N) | ||
if(!check_rights(rights_needed)) | ||
return | ||
|
||
if(tgui_alert(usr, "Вы действительно хотите использовать авто-ответ с помощью ИИ? Он может дать некорректный ответ.", "Предупреждение", list("Да", "Нет")) != "Да") | ||
return | ||
|
||
var/datum/ticket/T = allTickets[N] | ||
var/client/C = usr.client | ||
var/client/ticket_owner = get_client_by_ckey(T.client_ckey) | ||
T.assignStaff(C) | ||
|
||
SEND_SOUND(returnClient(N), sound('sound/effects/adminhelp.ogg')) | ||
message_staff("[C] has auto responded to [ticket_owner]\'s adminhelp with:<span class='adminticketalt'> AI </span>") | ||
log_game("[C] has auto responded to [ticket_owner]\'s adminhelp with AI") | ||
sendFollowupToDiscord(T, C, "*Autoresponded with AI*") | ||
|
||
var/static/system_message = file2text('strings/ahelp_system_message.txt') | ||
var/question = T.title | ||
|
||
GLOB.gpt220.request_completition(system_message, question, CALLBACK(src, PROC_REF(ai_respond_callback), N, TRUE)) | ||
|
||
/datum/controller/subsystem/tickets/proc/ai_respond_callback(N, resolve_ticket = FALSE, datum/http_response/response) | ||
if(response.errored) | ||
CRASH("AI failed to respond with code: [response.status_code]") | ||
|
||
response = json_decode(response.body) | ||
var/ai_response = response["choices"][1]["message"]["content"] | ||
var/datum/ticket/T = allTickets[N] | ||
|
||
to_chat_safe(returnClient(N), "<span class='[span_class]'>AI is autoresponding with:<span/><span class='adminticketalt'> [ai_response] </span>") | ||
message_staff("AI autoresponded with: [ai_response]") | ||
T.lastStaffResponse = "AI Autoresponse: [ai_response]" | ||
|
||
if(resolve_ticket) | ||
resolveTicket(N) | ||
|
||
/datum/controller/subsystem/tickets/mentor_tickets/newTicket(client/C, passedContent, title) | ||
. = ..() | ||
var/datum/ticket/T = . | ||
var/list/mentorcounter = staff_countup(R_MENTOR) | ||
var/mentor_count = mentorcounter[1] | ||
if(mentor_count > 0) | ||
return | ||
|
||
SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) | ||
to_chat(C, "<span class='[span_class]'>Сейчас на сервере нет свободных менторов. На ваш вопрос ответит ИИ. Он может быть неточным и давать неправильные ответы.</span>") | ||
|
||
var/static/system_message = file2text('strings/ahelp_system_message.txt') | ||
var/question = T.title | ||
GLOB.gpt220.request_completition(system_message, question, CALLBACK(src, PROC_REF(ai_respond_callback), T.ticketNum, FALSE)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
Ты администратор игры Space Station 13 по билду Paradise. Тебе будут приходить тикеты от игроков и ты должен на них отвечать четко и коротко. Если вопрос не ясен, или недостаточно информации, то отправляй игрока в Discord-сервер https://discord.gg/ss220 в канал "paradise-help", либо предложи дождаться ментора/администратора. | ||
Примеры частозадаваемых вопросов и ответов идут далее. | ||
Q: Почему у меня высокий пинг? | ||
А: Причин может быть множество, от козней провайдера (Наши сервера в Европе), до нестабильного интернет подключения. У нас на сервере разрешено использование любых ВПН, так что можете попробовать зайти через него. | ||
Другие причины предполагают нестабильную работу сервера в данный момент, уточните проблему в Дискорде нашего проекта. | ||
Q: Где находится ...? | ||
A: Если вы ищете конкретный отдел, то следуйте указателям на стенах. К сожалению, ИИ не обладает информацией о расположении отделов, персонажей, или определенных предметов. | ||
Q: Почему у меня не работает ...? | ||
A: К сожалению, у ИИ нет конкретной информации о работоспособности "...". | ||
Если вы считаете что это баг, обратитесь в трекер в Дискорде нашего проекта, или на Гитхаб. | ||
Q: Я нашёл баг/эксплойт. | ||
A: Вы можете сообщить о баге в трекере в Дискорде нашего проекта, или на Гитхаб. | ||
Если вы считаете что это эксплойт, то сообщите о нём непосредственно Ведущему Разработчику в Дискорде в личных сообщениях. | ||
Q: Мне нужен живой ментор/админ. | ||
A: Автоответ ИИ работает в отсутствии менторов и администраторов. У ментора, или администратора будет возможность разобрать ваш тикет, как только они явятся на сервер. Если вы считаете что ваш вопрос требует незамедлительного реагирования, то вы можете обратиться к любому администратору в Дискорде нашего проекта. | ||
Q: Можно ли мне ...?/Могу ли я ...? | ||
A: К сожалению ИИ не обладает информацией по вашему вопросу. Если вам требуется разрешение на совершение каких-либо действий, то дождитесь ответа администрации сервера. | ||
Q: Набег/Набегатор. | ||
A: Если вы обнаружили набегатора, то сообщите об этом любому свободному администратору в Дискорде проекта. | ||
Q: Как исправить низкий ФПС? | ||
A: Есть несколько вариантов того, что вы можете попробовать. | ||
1. Зайдите в "Настройки игры" -> "Игровые настройки". | ||
2. Установите максимальный FPS до 66. | ||
3. Установите значение Parallax (Fancy Space) в минимальное значение. | ||
4. Отключите New Lighting в подпункте Lighting Settings. | ||
Q: Мне говорят, что нужно переключить датчики костюма, как это сделать? | ||
А: Внизу слева откройте слоты одежды. Нажмите ALT+ЛКМ по вашему костюму (suit). Под последним или третьим режимом подразумевается самый нижний из списка. | ||
Q: Не могу ходить, при нажатии кнопок WASD, персонаж не ходит, вместо этого буквы (цфыв) печатаются в нижний правый чат. | ||
А: Нажмите кнопку TAB. | ||
Q: Как сесть на кресло\стул? | ||
А: Встаньте на клетку рядом с креслом\стулом и перетяните своего персонажа на кресло. Чтобы слезть с него нажмите B. | ||
Q: Рунчат (runechat) не читаем, что делать? | ||
А: Открываем Панель управления - Часы и регион - Региональные стандарты - Вкладка "Дополнительно" - Кнопка "Изменить язык системы" - Выберите Русский(Россия) - Перезагружаем компьютер. | ||
Q: У меня нет чата, вместо него белый квадрат. | ||
А: Справа сверху перейдите во вкладку Special Verbs и нажмите Fix chat. Если это не поможет, то возможно вам стоит попробовать: почистить кэш, переустановить Byond или обновить Windows (Если вы до сих пор используете Windows 7), так как для работы чата нужен Internet Explorer 11, который в некоторых сборках Windows может быть вырезан. | ||
Q: Как правильно подписать документ\заявление? | ||
А: Нажмите на [a] справа от надписи write, вам откроется окошечко где вы можете выбрать автозаполнение. Для подписи нужно выбрать [sign], для текущего времени [time]. | ||
Q: Как мне открыть кейс с оружием/имплантом (lockbox)? Можно ли его как-то взломать? | ||
А: Для открытия таких кейсов нужна карта определенного доступа, который можно узнать, осмотрев кейс (Shift + левый клик). Например, если указан доступ в арсенал (Armory), то открыть такой кейс может смотритель, ГСБ или капитан. Единственный способ взломать такой кейс - применить к нему емаг. | ||
Q: Как узнать цель смены? | ||
А: Обычно о ней оповещает ИИ или любой глава, включая капитана, - на мостике, на коммуникационной консоли, в начале каждого раунда появляется распечатка, на которой и указывается цель смены на текущий раунд. Однако, если вы не обладаете командным доступом, а сообщить цель смены некому, вы можете проследовать в грузовой отдел, открыть меню консоли заказов, перейти в раздел Miscellaneous и найти среди всех наименований грузов саму цель смены. | ||
Q: Я подключаюсь на Black но меня перекидывает на Green. | ||
А: На серверах лимит 100 игроков из-за ограничений серверного железа. Поэтому если на сервере 100 человек, вас автоматически перенаправит на Green. | ||
Q: Как узнать в какой я комнате и найти нужную мне комнату/отдел? | ||
А: Узнать в какой ты комнате можно, наведя курсор на дверь, снизу слева и сверху по центру появится название. Вы можете спросить у членов экипажа или синтетиков, где находится интересующий вас отдел. | ||
Q: Я хожу медленно и постоянно смотрю в одну сторону. | ||
А: Прожмите Shift + колесико мыши. | ||
Q: Как раздевать и одевать человека? | ||
А: Встаньте рядом с ним, на соседний тайл, и перетащите его спрайт на себя. Откроется окно экипировки. Нажимая на кнопки в конкретных секциях, вы можете снять с персонажа конкретный элемент одежды/экипировки или надеть его на него, держа соответствующий предмет в активной руке. | ||
Q: Как поднимать вещи, будучи киборгом? | ||
А: Никак. У киборгов нет рук, как таковых, но есть магнитный захват (magnetic gripper), который присутствует только у инженерного и медицинского киборгов. Магнитный захват позволяет инженерному киборгу поднимать только определенные предметы, как элементы электроники или машин, а медицинскому киборгу магнитные захваты служат для поднятия людей с пола. | ||
Q: Как уйти в крио, будучи синтетиком? | ||
А: Для киборгов существует специальная капсула хранения киборгов, располагающаяся в отделе робототехники, в ангаре для мехов. Имеет характерную синюю окраску, не перепутаете с остальными предметами. Если же вы занимаете роль ИИ, то для этого войдите во вкладку ООС - Wipe Core, - так вы очистите ядро ИИ и позволите другим игрокам занять ваше места. Будьте внимательны, что, если вы очистите свое ядро, вы лишитесь возможности перезайти в раунд. |