Skip to content

Commit

Permalink
Merge pull request #1095 from FeenieRU/load_pref
Browse files Browse the repository at this point in the history
Load prefs on ghostrole
  • Loading branch information
MysticalFaceLesS authored Oct 18, 2024
2 parents f5bd031 + 1c7256b commit 577c048
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 23 deletions.
1 change: 1 addition & 0 deletions code/datums/spawners_menu.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
this["short_desc"] = MS.short_desc
this["flavor_text"] = MS.flavour_text
this["important_info"] = MS.important_info
this["can_load_appearance"] = MS.can_load_appearance // [CELADON-EDIT] - CELADON_LOAD_PREF
else
var/obj/O = spawner_obj
this["desc"] = O.desc
Expand Down
58 changes: 36 additions & 22 deletions code/modules/awaymissions/corpse.dm
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
var/ghost_usable = TRUE
/// Weakref to the mob this spawner created - just if you needed to do something with it.
var/datum/weakref/spawned_mob_ref
var/can_load_appearance = FALSE // [CELADON-EDIT] - CELADON_LOAD_PREF

//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/effect/mob_spawn/attack_ghost(mob/user)
Expand All @@ -53,8 +54,14 @@

if(ghost_role == "No" || !loc)
return
// [CELADON-EDIT] - CELADON_LOAD_PREF
var/requested_char = FALSE
if(can_load_appearance == TRUE && ispath(mob_type, /mob/living/carbon/human)) // Can't just use if(can_load_appearance), 2 has a different behavior
if(alert(user, "Load currently selected slot?", "Play as your character!", "Yes", "No") == "Yes")
requested_char = TRUE
// [/CELADON-EDIT] - CELADON_LOAD_PREF
log_game("[key_name(user)] became [mob_name]")
create(ckey = user.ckey)
create(ckey = user.ckey, load_character = requested_char) // [CELADON-EDIT] - CELADON_LOAD_PREF

/obj/effect/mob_spawn/Initialize(mapload)
. = ..()
Expand All @@ -81,13 +88,16 @@
/obj/effect/mob_spawn/proc/equip(mob/M)
return

/obj/effect/mob_spawn/proc/create(ckey, newname)
// [CELADON-ADD] - CELADON_LOAD_PREF
/obj/effect/mob_spawn/proc/special_post_appearance(mob/H)
return
// [//CELADON-ADD] - CELADON_LOAD_PREF

// [CELADON-EDIT] - CELADON_LOAD_PREF
/obj/effect/mob_spawn/proc/create(ckey, name, load_character)
var/mob/living/M = new mob_type(get_turf(src)) //living mobs only
if(!random || newname)
if(newname)
M.real_name = newname
else
M.real_name = mob_name ? mob_name : M.name
if(!random)
M.real_name = mob_name ? mob_name : M.name
if(!mob_gender)
mob_gender = pick(MALE, FEMALE)
M.gender = mob_gender
Expand All @@ -102,7 +112,7 @@
M.adjustBruteLoss(brute_damage)
M.adjustFireLoss(burn_damage)
M.color = mob_color
equip(M)
equip(M, load_character)

if(ckey)
M.ckey = ckey
Expand All @@ -113,27 +123,31 @@
if(important_info != "")
output_message += "\n<span class='userdanger'>[important_info]</span>"
to_chat(M, output_message)
if(ishuman(M) && load_character)
var/mob/living/carbon/human/H = M
H.load_client_appearance(H.client)
var/datum/mind/MM = M.mind
var/datum/antagonist/A
if(antagonist_type)
A = MM.add_antag_datum(antagonist_type)
if(objectives)
if(!A)
A = MM.add_antag_datum(/datum/antagonist/custom)
for(var/objective in objectives)
var/datum/objective/O = new/datum/objective(objective)
O.owner = MM
A.objectives += O
if(!istype(src, /obj/effect/mob_spawn/human))
if(antagonist_type)
A = MM.add_antag_datum(antagonist_type)
if(objectives)
if(!A)
A = MM.add_antag_datum(/datum/antagonist/custom)
for(var/objective in objectives)
var/datum/objective/O = new/datum/objective(objective)
O.owner = MM
A.objectives += O
if(assignedrole)
M.mind.assigned_role = assignedrole
special(M)
special(M, name)
MM.name = M.real_name
special_post_appearance(M, name)
if(uses > 0)
uses--
spawned_mob_ref = WEAKREF(M)
if(!permanent && !uses)
qdel(src)
return M
// [/CELADON-EDIT] - CELADON_LOAD_PREF

// Base version - place these on maps/templates.
/obj/effect/mob_spawn/human
Expand Down Expand Up @@ -265,7 +279,7 @@

//Non-human spawners

/obj/effect/mob_spawn/AICorpse/create(ckey) //Creates a corrupted AI
/obj/effect/mob_spawn/AICorpse/create(ckey, name, load_character) // [CELADON-EDIT] - CELADON_LOAD_PREF
var/A = locate(/mob/living/silicon/ai) in loc
if(A)
return
Expand All @@ -285,7 +299,7 @@
/obj/effect/mob_spawn/slime/equip(mob/living/simple_animal/slime/S)
S.colour = mobcolour

/obj/effect/mob_spawn/facehugger/create(ckey) //Creates a squashed facehugger
/obj/effect/mob_spawn/facehugger/create(ckey, name, load_character) // [CELADON-EDIT] - CELADON_LOAD_PREF
var/mob/living/simple_animal/hostile/facehugger/object = new(src.loc) //variable object is a new facehugger at the location of the landmark
object.name = src.name
object.death() //call the facehugger's death proc
Expand Down
19 changes: 19 additions & 0 deletions code/modules/mob/mob_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -632,3 +632,22 @@
///Can the mob see reagents inside of containers?
/mob/proc/can_see_reagents()
return stat == DEAD || has_unlimited_silicon_privilege //Dead guys and silicons can always see reagents

// [CELADON-ADD] - CELADON_LOAD_PREF
/mob/living/carbon/human/proc/load_client_appearance(client/client)
if(!client)
client = src.client
var/old_name = real_name
SEND_SOUND(src, 'sound/misc/server-ready.ogg')
client.prefs.copy_to(src)
SSquirks.AssignQuirks(src, client, TRUE, FALSE, job, FALSE)//This Assigns the selected character's quirks
var/obj/item/card/id/id_card = get_idcard() //Time to change their ID card as well if they have one.
if(id_card)
id_card.registered_name = real_name
id_card.update_label(real_name, id_card.assignment)
fully_replace_character_name(old_name, real_name)
SEND_SOUND(src, 'sound/magic/charge.ogg') //Fluff
log_game("[key_name(src)] has loaded their default appearance for a ghost role.")
message_admins("[ADMIN_LOOKUPFLW(src)] has loaded their default appearance for a ghost role.")
return
// [/CELADON-ADD] - CELADON_LOAD_PREF
100 changes: 100 additions & 0 deletions mod_celadon/load_pref/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@

#### Список PRов

- https://github.com/CeladonSS13/Shiptest/pulls/#####
<!--
Ссылки на PRы, связанные с модом:
- Создание
- Большие изменения
-->

<!-- Название мода. Не важно на русском или на английском. -->
## Loading prefs

ID мода: CELADON_LOAD_PREF
<!--
Название модпака прописными буквами, СОЕДИНЁННЫМИ_ПОДЧЁРКИВАНИЕМ,
которое ты будешь использовать для обозначения файлов.
При запуске скрипта выставляется автоматически.
Приставка CELADON гарантирует уникальность
модпака. Этот ID будет использоваться для обозначения
изменений в кор коде, если того потребуется.
-->

### Описание мода

Загрузка гост-роли из префа
<!--
Что он делает, что добавляет: что, куда, зачем и почему - всё здесь.
А также любая полезная информация.
-->

### Используется в других проектах?
- Нет
<!--
ВНИМАНИЕ!
Заполняется другими авторами, кто использует этот модпак или
его часть в других модпаках! Для Автора модпака внимательно
отслеживать данный пункт при изменении своего кода!
Пример заполнения: `Используется часть кода для модпака EXAMP_EXAM`
-->

### Изменения *кор кода*

- `code/datums/spawners_menu.dm`
- `code/modules/mob/mob_helpers.dm`
- `code/modules/awaymissions/corpse.dm`
- `tgui/packages/tgui/interfaces/SpawnersMenu.js`
<!--
Если вы редактировали какие-либо процедуры или переменные в кор коде,
они должны быть указаны здесь.
Нужно указать и файл, и процедуры/переменные.
Изменений нет - напиши "Отсутствуют"
Примеры: `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var`
-->

### Оверрайды

- Отсутствуют
<!--
Если ты добавлял новый модульный оверрайд, его нужно указать здесь.
Здесь указываются оверрайды в твоём моде и папке `_master_files`
Изменений нет - напиши "Отсутствуют"
Примеры:
- `mods/_master_files/sound/my_cool_sound.ogg`
- `mods/_master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var`
-->

### Дефайны

- Отсутствуют
<!--
Если требовалось добавить какие-либо дефайны, укажи файлы,
в которые ты их добавил, а также перечисли имена.
И то же самое, если ты используешь дефайны, определённые другим модом.
Не используешь - напиши "Отсутствуют"
Примеры: `code/__defines/~mod_celadon/load_pref.dm`: `LOAD_PREF_SPEED_MULTIPLIER`, `LOAD_PREF_SPEED_BASE`
-->

### Используемые файлы, не содержащиеся в модпаке

- Отсутствуют
<!--
Будь то немодульный файл или модульный файл, который не содержится в папке,
принадлежащей этому конкретному моду, он должен быть упомянут здесь.
Хорошими примерами являются иконки или звуки, которые используются одновременно
несколькими модулями, или что-либо подобное.
Примеры: `mods/_master_files/icons/obj/alien.dmi`
-->

### Авторы

Feenie
<!--
Здесь находится твой никнейм
Если работал совместно - никнеймы тех, кто помогал.
В случае порта чего-либо должна быть ссылка на источник.
-->
8 changes: 8 additions & 0 deletions mod_celadon/load_pref/_load_pref.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/// name - название модпака. Используется для поиска других модпаков в init.
/// desc - описание для модпака. Может использоваться для списка глаголов модпака в качестве описания.
/// author - автор(ы) этого модпака.

/datum/modpack/load_pref
name = "Load prefs"
desc = "Loading prefs to ghostrole"
author = "Feenie"
8 changes: 8 additions & 0 deletions mod_celadon/load_pref/_load_pref.dme
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef MODPACK_CELADON_LOAD_PREF
#define MODPACK_CELADON_LOAD_PREF

#include "_load_pref.dm"

#include "code/load_pref.dm"

#endif
11 changes: 10 additions & 1 deletion tgui/packages/tgui/interfaces/SpawnersMenu.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useBackend } from '../backend';
import { Box, Button, Section } from '../components';
import { Box, Button, Section, Icon, Tooltip } from '../components';
import { Window } from '../layouts';

export const SpawnersMenu = (props, context) => {
Expand All @@ -16,6 +16,15 @@ export const SpawnersMenu = (props, context) => {
level={2}
buttons={
<>
<Tooltip content={spawner.can_load_appearance === 2
? "This role forces using your characters"
: spawner.can_load_appearance
? "This role allows using your characters"
: "This role does not allow using your characters"}>
<Icon name="user" mr="4px"
color={spawner.can_load_appearance === 2 ? "yellow"
: spawner.can_load_appearance ? "green" : "red"} />
</Tooltip>
<Button
content="Jump"
onClick={() =>
Expand Down

0 comments on commit 577c048

Please sign in to comment.