diff --git a/aquila/aquila.dm b/aquila/aquila.dm index 3afb4457566..ceb56b0f234 100644 --- a/aquila/aquila.dm +++ b/aquila/aquila.dm @@ -60,6 +60,7 @@ #include "code\game\gamemodes\monkey\monkey.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\objective_items.dm" +#include "code\game\gamemodes\nowicjusz\tutorial.dm" #include "code\game\gamemodes\vampire\grave_fever.dm" #include "code\game\gamemodes\vampire\traitor_vamp.dm" #include "code\game\gamemodes\vampire\vampire.dm" diff --git a/aquila/code/game/gamemodes/nowicjusz/tutorial.dm b/aquila/code/game/gamemodes/nowicjusz/tutorial.dm new file mode 100644 index 00000000000..296f1a2f8d0 --- /dev/null +++ b/aquila/code/game/gamemodes/nowicjusz/tutorial.dm @@ -0,0 +1,28 @@ + +/datum/action/innate/tutorialmenu + name = "Tutorial" + desc= "Naciśnij by przywołać krótki samouczek." + button_icon_state = "tut" + icon_icon = 'aquila/icons/mob/actions/actions_spells.dmi' + background_icon_state = "bg_demon" + var/datum/outfit/job/tutorialman + +/datum/action/innate/tutorialmenu/New(datum/H) + . = ..() + button.name = name + tutorialman = H + +/datum/action/innate/tutorialmenu/Activate() + to_chat(owner, "Tutorial nastąpi w przyszłości") + tutorialman.ui_interact(owner) + +/datum/action/innate/tutorialmenu/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Tutorial") + ui.open() + +/datum/action/innate/tutorialmenu/ui_state(mob/user) + return GLOB.always_state + +/datum/action/innate/tutorialmenu/ui_data(mob/user) diff --git a/aquila/icons/mob/actions/actions_spells.dmi b/aquila/icons/mob/actions/actions_spells.dmi index 2ef1c15a008..2b7aa784480 100644 Binary files a/aquila/icons/mob/actions/actions_spells.dmi and b/aquila/icons/mob/actions/actions_spells.dmi differ diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 9132feda301..05f1b198ffe 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -7,7 +7,7 @@ //////////////// //ADMIN THINGS// //////////////// - + var/tutorial = TRUE /// The admin state of the client. If this is null, the client is not an admin. var/datum/admins/holder = null var/datum/click_intercept = null // Needs to implement InterceptClickOn(user,params,atom) proc diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index f5e2676e2da..9f7bcd63d3f 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -307,6 +307,7 @@ var/backpack = /obj/item/storage/backpack var/satchel = /obj/item/storage/backpack/satchel var/duffelbag = /obj/item/storage/backpack/duffelbag + var/datum/action/innate/tutorialmenu/menu var/pda_slot = ITEM_SLOT_BELT @@ -326,6 +327,9 @@ back = duffelbag //Department duffel bag else back = backpack //Department backpack + // Tu zmienić jeżeli chcecie coś z logiką dawania tutoriala zrobić + menu = new(src) + menu.Grant(H) //converts the uniform string into the path we'll wear, whether it's the skirt or regular variant var/holder = "[uniform]" //NSV13 - no skirts @@ -340,6 +344,15 @@ uniform = text2path(holder) +/datum/outfit/job/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Tutorial") + ui.open() + +/datum/outfit/job/ui_state(mob/user) + return GLOB.always_state + /datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) if(visualsOnly) return diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index ccdc191b8cc..90bdb729acc 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -45,7 +45,8 @@ var/datum/asset/asset_datum = get_asset_datum(/datum/asset/simple/lobby) if(!asset_datum.send(client)) return - var/output = "

Ustaw Postać

" + var/output = "

Samouczek

" + output += "

Ustaw Postać

" if(SSticker.current_state <= GAME_STATE_PREGAME) switch(ready) @@ -119,6 +120,11 @@ else relevant_cap = max(hpc, epc) + if(href_list["show_tutorial"]) + var/datum/action/innate/tutorialmenu/menu = new(src) + menu.ui_interact(src) + return + if(href_list["show_preferences"]) client.prefs.ShowChoices(src) return 1 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4d20de39905..73ff63a9935 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -35,6 +35,8 @@ ) AddElement(/datum/element/connect_loc, loc_connections) AddElement(/datum/element/strippable, GLOB.strippable_human_items, TYPE_PROC_REF(/mob/living/carbon/human, should_strip), GLOB.strippable_human_layout) + var/datum/action/innate/tutorialmenu/menu = new(src) + menu.Grant() /mob/living/carbon/human/proc/setup_human_dna() //initialize dna. for spawned humans; overwritten by other code diff --git a/tgui/packages/tgui/interfaces/Tutorial.js b/tgui/packages/tgui/interfaces/Tutorial.js new file mode 100644 index 00000000000..eebddcb2374 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Tutorial.js @@ -0,0 +1,248 @@ +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Grid, LabeledList, ProgressBar, Section, Tabs } from '../components'; +import { Window } from '../layouts'; + +export const Tutorial = (props, context) => { + // const { act, data }; + const [tab, setTab] = useLocalState(context, 'tab', 'Sterowanie'); + return ( + + +
+ {"Samouczek"} + + )} /> +
+
+ + setTab('Sterowanie')}> + Sterowanie + + setTab('Podstawy')}> + Podstawy + + setTab('Intents')}> + System Zamiaru + + setTab('Przetrwanie')}> + Przetrwanie część pierwsza + + setTab('Przetrwanie2')}> + Przetrwanie część druga + + setTab('Antagonists')}> + Antagoniści + + setTab('Next')}> + Co Dalej? + + +
+
+ {tab === 'Sterowanie' && ( + + )} + {tab === 'Podstawy' && ( + + )} + {tab === 'Intents' && ( + + )} + {tab === 'Przetrwanie' && ( + + )} + {tab === 'Przetrwanie2' && ( + + )} + {tab === 'Antagonists' && ( + + )} + {tab === 'Next' && ( + + )} + + + ); +}; + + + + +const Sterowanie = () => { + return ( +
+ + WASD - Poruszanie się

+ 1234 - Zmiana Zamiaru (1 - Pomoc, 2 - Rozbrojenie, 3 - Chwyt, 4 - Przemoc)

+ LPM (Lewy przycisk myszy) - Interakcja z otoczeniem

+ PPM (Prawy przycisk myszy) - Zaawansowana Interakcja z otoczeniem (Menu rozwijania przedmiotów na naciśniętej płytce)

+ X/ŚPM (Środkowy przycisk myszy) - Zmiana ręki

+ T - Mówienie (Napisz przed tekstem ; by napisać na radiu)

+ Y - Mówienie na radiu

+ O - Mówienie na OOC

+ L - Mówienie na LOOC (widzą tylko osoby wokół ciebie)

+ M - Pisanie co robi twoja postać (RP)

+ E - Zakładanie przedmiotu które obecnie jest trzymane w ręku

+ Z - Aktywacja/Interakcja z przedmiotem obecnie trzymanym w ręku (Np: Wyjęcie magazynka z pistoletu)

+ Q - Położenie przedmiotu obecnie trzymanego na podłogę

+ R - Aktywacja trybu rzucania, Wciśnij jeszcze raz R by wyłączyć tryb rzucania, lub wciśnij LPM by rzucić przedmiot tam gdzie wskazuje twój kursor

+ H - Przerwanie ciągnięcia + V - Położenie się na ziemi + G - Podanie komuś przedmiotu (Nie jest natychmiastowe, osoba któej podawany jest przedmiot musi go zaakceptować) + + Zaawansowane Kombinacje +

+ CTRL + WASD - Zmiana orientacji

+ CTRL + LPM - Chwycenie obiektu lub istoty którą można ciągnąć

+ SHIFT + LPM - Sprawdzenie przedmiotu/obiektu/istoty

+ SHIFT + ŚPM - Wskazanie na dany obiekt/płytkę/isotę/przedmiot

+ ALT + LPM - Otworzenie pojemnika/Pokazanie wszystkich przedmiotów znajdujących się na wciśniętej płytce

+
+
+ ); +}; + +const Podstawy = () => { + return ( +
+ + Wchodzenie na stół - Przeciągnięcie swojej postaci na stół

+ Rozbieranie kogoś - Przeciągnięcie czyjejś postaci na swoją

+ Aby się ugasić, stawiać opór lub wyswobodzić się wystarczy wcisnąć przycisk RESIST

+ Aby zdjąć plecak lub inne obiekty w które można coś włożyć, należy przeciągnąć przedmiot do pustej ręki.

+ Odpięcie się od pasów - Wciśnięcie przycisku BUCKLED w prawym górnym rogu ekranu

+ Kliknięcie na określone części pozwala na wybranie jako celu określonej części ciała

+
+
+ ); +}; + +const Intents = () => { + return ( +
+ + Podstawową formą interakcji w Space Station 13 jest kliknięcie w coś. Jednak to co wydarzy się po kliknięciu, zależy od tego jaką mamy intencje. W tym wprowadzeniu wyjaśnione zostaną różnice między 4 dostępnymi intencjami.

+ Pomoc (kolor zielony) - Podstawowa i pozytywna intencja. Kliknięcie drugiej postaci nie wyrządzi jej szkód. Możemy też swobodnie przechodzić przez inne postaci. Powinna zawsze być domyślnie wybrana

+ Krzywda (kolor czerwony) - Wybierana wtedy, gdy chcemy zaatakować postać. Kliknięcie w kogoś zada mu obrażenia. Sprawia też, że przez postać nie będzie dało się przejść, zamiast tego będziemy ją przesuwać.

+ Chwyt (kolor żółty) - jedno kliknięcie na postać złapie ją i będziemy mogli ją ciągnąć, tak samo jak w przypadku skrótu klawiszowego CTRL + LPM. Kliknięcie drugi raz złapie postać agresywnie. Kliknięcie trzeci raz założy jej chwyt. Ostatnie, czwarte kliknięcie zacznie ją dusić. Postać puszczamy klawiszem H.

+ Pchnięcie (kolor niebieski) - używane by kogoś popchnąć. Jeśli popchniemy kogoś na inny obiekt, to upuści ona trzymany przedmiot i przewróci się. W ten sposób można kogoś rozbroić

+
+
+ ); +}; + +const Przetrwanie = () => { + return ( +
+ + Najczęstszą przyczyną śmierci nowych graczy jest uduszenie się, wystawienie na działanie przestrzeni kosmicznej lub spalenie. Poniżej przedstawiony zostanie krok po kroku sposób radzenia sobie z każdym zagrożenie

+ Duszenie się - Informowane za pomocą ikonki . Każdy załogant jest wyposażony w zestaw do oddychania. Kliknij w plecak. Następnie otwórz pudełko, które się tam znajduje (ALT + LPM). Wyciągnij maskę i załóż ją na twarz . Następnie wyciągnij butlę z tlenem i włóż ją do kieszeni. Teraz wystarczy tylko włączyć aparaturę klikając w przycisk u góry ekranu

+ Działanie przestrzeni kosmicznej - tutaj umiera się zwykle od niskiej temperatury i ciśnienia zadającego z czasem obrażenia. Rozwiązaniem jest wyciągnięcie z tego samego pudełka co tlen skafandra kosminczego. Hełm zakłada się na głowe. Skafander należy w pierwszej kolejności rozwinać za pomocą aktywacji w ręce (klawisz Z) i założyć w miejsce skafandrów

+ Pożar - należy opuścić płonący obszar i zacząć turlać się w celu ugaszenia płomieni (kliknięcie w przycisk RESIST)

+
+
+ ); +}; + +const Przetrwanie2 = () => { + return ( +
+ + Nie musisz być lekarzem, by uratować swoje lub cudze życie. Poniżej przedstawione zostaną najpopularniejsze scenariusze niewymagające zaawansowanej wiedzy.

+ Zostałeś ranny - należy wybrać obszar ciała, który jest uszkodzony, a następnie trzymając plastry lub maść kliknąć na swoją postać. Plastry leczą obrażenia od uderzeń, cięć, postrzałów i ciśnienia. Maść jest na oparzenia od wysokich temperatur. Leczenie kogoś wygląda tak samo. Wybiera się obszar ciała i klika na cudzą postać.

+ Znajdujesz kogoś, kto leży - SHIFT + kliknięcie w niego, by dowiedzieć się czy żyje. Jeśli wyświetliła się informacja o tym, że nie żyje, zanieś go do najbliższego lekarza. Lepiej unikać ciągnięcia kogoś po ziemi, ponieważ traci on wtedy krew.

+ Chwyć poszkodowanego agresywnie (Intencja chwytu i kliknięcie kogoś dwa razy) a następnie przeciągnąć jego postać na swoją postać. W ten sposób weźmie się go na plecy. Z kolei jeśli osoba żyje, to w pierwszej kolejności należy użyć medipena dostępnego w pudełku przetrwania w naszym plecaku.

+ Następnie można przystąpić do resuscytacji (Intencja pomocy i klikanie w postać po wybraniu klatki piersiowej). Jeśli to nie pomaga, zanieść go do lekarza

+
+
+ ); +}; + +const Antagonists = () => { + return ( +
+ + Poradnik dla początkujących zdrajców co nie wiedzą jak się odpala uplinka (miejsce gdzie się kupuje fajne rzeczy)

+ Wyciągnij PDA- Włącz PDA - Direct Messenger - Set Ringtone - Wklep kod który Ci został podany na samym starcie.

+ Nie zapomnij o zamknięciu uplinka gdy z nim skończysz, bo inaczej ochrona może ci zrobić jajoskręt

+
+
+ ); +}; + +const Next = () => { + return ( +
+ + Na tym kanale znajdziesz pomoc dla twego problemu, Nie bój się pytać innych graczy

+ Link do angielskiej wikipedii kodbazy naszego serwera

+ Link do naszej wikipedii

+
+
+ ); +}; + +/* +tabs.map(tab => ( + +