Skip to content

Commit

Permalink
Allow to easily upload tracks to the jukebox (#418)
Browse files Browse the repository at this point in the history
## About The Pull Request
Заменил интерфейс жукбокса под наш, с пары, правда немного урезанный
(без монетки) и подроченный
Так же добавил возможность быстро и просто добавлять в него треки,
только для админов (R_ADMIN)


https://github.com/user-attachments/assets/3829934c-7c44-4865-8076-b6cf2af7b9f6

## Why It's Good For The Game
Любой админ сможет добавить в жукбокс музыку, без лютого пердолинга в VV
Правда в код TGUI лучше не смотреть

## Changelog

:cl:
Это не работает
/:cl:
  • Loading branch information
AyIong authored Jul 19, 2024
1 parent 81fcd17 commit b2626f1
Show file tree
Hide file tree
Showing 6 changed files with 500 additions and 1 deletion.
2 changes: 1 addition & 1 deletion code/datums/components/jukebox.dm
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
var/datum/track/one_song = songs[song_name]
UNTYPED_LIST_ADD(songs_data, list( \
"name" = song_name, \
"length" = DisplayTimeText(one_song.song_length), \
"length" = one_song.song_length /* BANDASTATION EDIT - ORIGINAL: DisplayTimeText(one_song.song_length) */, \
"beat" = one_song.song_beat, \
))

Expand Down
4 changes: 4 additions & 0 deletions modular_bandastation/jukebox/_jukebox.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/datum/modpack/jukebox
name = "Jukebox Tweaks"
desc = "Приятные фичи для Jukebox."
author = "Aylong"
3 changes: 3 additions & 0 deletions modular_bandastation/jukebox/_jukebox.dme
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include "_jukebox.dm"

#include "code/jukebox_ui.dm"
105 changes: 105 additions & 0 deletions modular_bandastation/jukebox/code/jukebox_ui.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
/datum/jukebox
/// Music start time.
var/startTime = 0
/// Whether the uploaded track will be saved on the server.
var/save_track = FALSE

/datum/jukebox/start_music()
. = ..()
startTime = world.time

/datum/jukebox/unlisten_all()
. = ..()
startTime = 0

/obj/machinery/jukebox/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "Jukebox220", name)
ui.open()

/obj/machinery/jukebox/ui_data(mob/user)
var/list/data = ..()
music_player.get_ui_data(data)
data["admin"] = check_rights_for(user.client, R_ADMIN)
data["saveTrack"] = music_player.save_track
data["startTime"] = music_player.startTime
data["worldTime"] = world.time
return data

/obj/machinery/jukebox/ui_act(action, list/params)
. = ..()
var/mob/user = usr
switch(action)
if("add_song")
if(!check_rights_for(user.client, R_ADMIN))
message_admins("[key_name(user)] попытался добавить трек, не имея прав администратора!")
log_admin("[key_name(user)] попытался добавить трек, не имея прав администратора!")
return FALSE
var/track_name = params["track_name"]
var/track_length = params["track_length"]
var/track_beat = params["track_beat"]
if(!track_name || !track_length || !track_beat)
to_chat(user, span_warning("Ошибка: Имеются не заполненные поля."))
return FALSE

var/track_file = upload_file(user)
upload_track(user, track_name, track_length, track_beat, track_file)
try_save_file(user, track_name, track_length, track_beat, track_file)
return TRUE

if("save_song")
if(!check_rights_for(user.client, R_ADMIN))
message_admins("[key_name(user)] попытался включить сохранение трека, не имея прав администратора!")
log_admin("[key_name(user)] попытался включить сохранение трека, не имея прав администратора!")
return FALSE
enable_saving(user)
return TRUE

/obj/machinery/jukebox/proc/upload_file(mob/user)
var/file = input(user, "Загрузите файл весом не более 5мб, поддерживается только формат .ogg", "Загрузка файла") as null|file
if(isnull(file))
to_chat(user, span_warning("Ошибка: Необходимо выбрать файл."))
return
if(copytext("[file]", -4) != ".ogg")
to_chat(user, span_warning("Формат файла должен быть '.ogg': [file]"))
return
return file

/obj/machinery/jukebox/proc/upload_track(mob/user, name, length, beat, file)
var/datum/track/new_track = new()
new_track.song_name = name
new_track.song_length = length
new_track.song_beat = beat
new_track.song_path = file(file)

music_player.songs[name] = new_track
say("Загружен новый трек: «[name]»")

/obj/machinery/jukebox/proc/try_save_file(mob/user, name, length, beat, file)
if(!music_player.save_track)
return
if(tgui_alert(user, "ВНИМАНИЕ! Включено сохранение трека на сервер. <br> \
Нажимая «Да» вы подтверждаете, что загружаемый трек не нарушает никаких авторских прав. <br> \
Вы уверены, что хотите сохранить трек?", "Сохранение трека", list("Да", "Нет")) != "Да")
music_player.save_track = !music_player.save_track
to_chat(user, span_warning("Сохранение трека было отключено."))
return

var/config_file = "[name]" + "+" + "[length]" + "+" + "[beat]"
if(!fcopy(file, "[global.config.directory]/jukebox_music/sounds/[config_file].ogg"))
to_chat(user, span_warning("По какой-то причине, трек не был сохранён, попробуйте ещё раз. <br> Входной файл: [file] <br> Выходной файл: [config_file].ogg"))
return
to_chat(user, span_notice("Ваш трек успешно загружен на сервер под следующим названием: [config_file].ogg"))
message_admins("[key_name(user)] загрузил трек [config_file].ogg с изначальным названием [file] на сервер")
log_admin("[key_name(user)] загрузил трек [config_file].ogg с изначальным названием [file] на сервер")

/obj/machinery/jukebox/proc/enable_saving(mob/user)
if(music_player.save_track)
music_player.save_track = !music_player.save_track
return
if(tgui_alert(user, "Вы уверены, что хотите сохранить трек на сервере?", "Сохранение трека", list("Да", "Нет")) != "Да")
return
if(tgui_alert(user, "Внимание! Сохранённый трек сможет удалить ТОЛЬКО хост! Подойдите максимально ответственно к заполнению полей!", "Сохранение трека", list("Ок", "Я передумал")) != "Ок")
return
music_player.save_track = !music_player.save_track
1 change: 1 addition & 0 deletions modular_bandastation/modular_bandastation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,4 @@
#include "world_topics/_world_topics.dme"
#include "preferences/_preferences.dme"
#include "drinks/_drinks.dme"
#include "jukebox/_jukebox.dme"
Loading

0 comments on commit b2626f1

Please sign in to comment.