From 02328c74d8eb297dfddc29512c02bd093d379c8c Mon Sep 17 00:00:00 2001 From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com> Date: Sun, 1 Dec 2024 19:49:12 +0300 Subject: [PATCH 1/9] =?UTF-8?q?=D0=BB=D0=B0=D0=B4=D0=BD=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=85=D1=83=D0=B9=20=D1=83=D0=B6=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/__DEFINES/is_helpers.dm | 4 + code/datums/datacore.dm | 2 + code/datums/mind.dm | 2 +- code/datums/voice.dm | 120 ++++++++++++++++++ code/modules/mob/hear_say.dm | 18 ++- .../mob/living/carbon/human/examine.dm | 3 +- code/modules/mob/living/carbon/human/human.dm | 10 +- code/modules/mob/living/carbon/human/life.dm | 5 +- code/modules/mob/living/carbon/life.dm | 6 + code/modules/mob/living/silicon/silicon.dm | 3 + code/modules/mob/mob.dm | 7 + code/modules/mob/mob_defines.dm | 2 + paradise.dme | 9 +- 13 files changed, 170 insertions(+), 21 deletions(-) create mode 100644 code/datums/voice.dm diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 65a3903b03f..8a7b9e65910 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -52,6 +52,10 @@ #define isitem(A) (istype(A, /obj/item)) +#define isIdCard(A) (istype(A, /obj/item/card/id)) + +#define isWallet(A) (istype(A, /obj/item/storage/wallet)) + #define isstack(A) (istype(A, /obj/item/stack)) #define isstorage(A) (istype(A, /obj/item/storage)) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index ccb7c665b23..bbdfc97f573 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -146,11 +146,13 @@ GLOBAL_VAR_INIT(record_id_num, 1001) var/id = num2hex(GLOB.record_id_num++, 6) + //При создании рекордсов еще берется и голос, боже помилуй чтобы это ничего не сломало //General Record var/datum/data/record/G = new() G.fields["id"] = id G.fields["name"] = H.real_name G.fields["real_rank"] = H.mind.assigned_role + G.fields["voice"] = H.GetVoice() G.fields["rank"] = assignment G.fields["age"] = H.age G.fields["fingerprint"] = md5(H.dna.uni_identity) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index a6de1c0034c..98339829044 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -36,7 +36,7 @@ var/assigned_role //assigned role is what job you're assigned to when you join the station. var/playtime_role //if set, overrides your assigned_role for the purpose of playtime awards. Set by IDcomputer when your ID is changed. - var/special_role //special roles are typically reserved for antags or roles like ERT. If you want to avoid a character being automatically announced by the AI, on arrival (becuase they're an off station character or something); ensure that special_role and assigned_role are equal. + var/special_role //special roles are typically reserved for antags or roles like ERP. If you want to avoid a character being automatically announced by the AI, on arrival (becuase they're an off station character or something); ensure that special_role and assigned_role are equal. var/offstation_role = FALSE //set to true for ERT, deathsquad, abductors, etc, that can go from and to z2 at will and shouldn't be antag targets var/list/restricted_roles = list() diff --git a/code/datums/voice.dm b/code/datums/voice.dm new file mode 100644 index 00000000000..2a3648f87db --- /dev/null +++ b/code/datums/voice.dm @@ -0,0 +1,120 @@ +#define GENDER_NAME_UNKNOW list(MALE = "Незнакомец", FEMALE = "Незнакомка", NEUTER = "Неизвестный", PLURAL = "Неизвестный") + +//Новая система голоса +/datum/voice_model + var/tts_seed_string = "Arthas" + var/voice_gender = MALE + var/voice_name = "Неизвестный" + var/real_voice_name = "Неизвестный" + + var/list/famous_voices = list() + //var/list/famous_faces = list() + +/datum/voice_model/proc/CreateVoiceModel(var/atom/owner_voice) + var/datum/voice_model/result = new() + + result.real_voice_name = owner_voice.GetVoice() + result.voice_name = owner_voice.GetVoice() + result.voice_gender = owner_voice.gender + result.famous_voices[voice_name] = owner_voice.name + result.tts_seed_string = owner_voice.tts_seed + + return result + +/datum/voice_model/proc/VoiceUpdate(var/atom/owner_voice) + voice_name = owner_voice.GetVoice() //:badguy: + +/datum/voice_model/proc/get_gender_unknown_name(gender_string) + var/result = (GENDER_NAME_UNKNOW)?[gender_string] + if(result) + return result + return "Неизвестный" + +/datum/voice_model/proc/CopyInVoice(datum/voice_model/voice_to_copy) + tts_seed_string = voice_to_copy.tts_seed_string + voice_gender = voice_to_copy.voice_gender + voice_name = voice_to_copy.voice_name + +/datum/voice_model/proc/FullCopyInVoice(datum/voice_model/voice_to_copy) + CopyInVoice(voice_to_copy) + real_voice_name = voice_to_copy.real_voice_name + famous_voices = voice_to_copy.famous_voices + +//было две бутылки, словарь или два прока. Я сел на вторую +/datum/voice_model/proc/GetManifestKnowVoice() + for(var/datum/data/record/t in GLOB.data_core.general) + if(t) + if(t.fields["voice"] == voice_name) + return t.fields["name"] + return "IDENTIFICATION VOICE ERROR" +//Технически name это представление твоего ебала +/* BYOND... +/datum/voice_model/proc/GetManifestKnowFace(mob/face_target) + for(var/datum/data/record/t in GLOB.data_core.general) + if(t) + if(t.fields["name"] == face_target.name) + return t.fields["name"] + return "IDENTIFICATION FACE ERROR" +*/ + +/datum/voice_model/proc/TryStore(mob/target) + if(src == target.adv_voice) + return TRUE + . = FALSE + if(!ishuman(target)) //Нахуя мне знать как зовут мышей :badguy: + return target.name + var/mob/living/carbon/human/target_H = target + var/obj/item/card/id/prov_wear_id = null + + if(isIdCard(target_H.wear_id)) //Fuck + prov_wear_id = target_H.wear_id + if(isWallet(target_H.wear_id)) //Мфпмфпф + var/obj/item/storage/wallet/prom = target_H.wear_id + prov_wear_id = prom.front_id + + if(!((target_H.wear_mask?.flags_inv & HIDENAME) || (target_H.head?.flags_inv & HIDENAME)) && prov_wear_id) + + //famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND + famous_voices[target_H.adv_voice.voice_name] = prov_wear_id.registered_name + . = TRUE + else if(prov_wear_id) + famous_voices[target_H.adv_voice.voice_name] = prov_wear_id.registered_name + . = TRUE + return + +//For examie +/* FUCKING BYOND +/datum/voice_model/proc/TryRecollectFace(mob/target) + if(src == target.adv_voice) + return target.name + if(!ishuman(target)) //:Roflcat: Чтобы имена мышей знать сразу + return target.name + var/mob/living/carbon/human/target_H = target + + if(!((target_H.wear_mask?.flags_inv & HIDENAME) || (target_H.head?.flags_inv & HIDENAME))) + . = famous_faces?[target_H.name] + + if(.) + return + + if((target_H.wear_suit?.flags_inv & HIDEJUMPSUIT) && (target_H.head?.flags_inv & HIDENAME)) + . = get_gender_unknown_name(NEUTER) + else + . = get_gender_unknown_name(target_H.gender) + return +*/ +//For hear +/datum/voice_model/proc/TryRecollectVoice(mob/target) + if(src == target.adv_voice) + return target.adv_voice.voice_name + if(!ishuman(target)) + return target.adv_voice.voice_name + var/mob/living/carbon/human/target_H = target + + . = famous_voices?[target_H.name] + if(.) + return + + return get_gender_unknown_name(target_H.adv_voice.voice_gender) + +#undef GENDER_NAME_UNKNOW diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 9afe767d2e9..be55ac09005 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -138,7 +138,7 @@ if(italics) message = "[message]" - + speaker_name = adv_voice.TryRecollectVoice(speaker) var/track = null if(isobserver(src)) if(speaker_name != speaker.real_name && speaker.real_name) @@ -245,17 +245,15 @@ INVOKE_ASYNC(GLOBAL_PROC, /proc/tts_cast, src, src, message_tts, speaker.tts_seed, FALSE, effect, null, null, 'sound/effects/radio_chatter.ogg') /mob/proc/handle_speaker_name(mob/speaker = null, vname, hard_to_hear) - var/speaker_name = "unknown" - if(speaker) - speaker_name = speaker.name - - if(vname) - speaker_name = vname - + var/speaker_name = "Неизвестный" if(hard_to_hear) - speaker_name = "unknown" + return speaker_name + if(!(speaker)) + return vname + if(!ishuman(speaker)) + return speaker.adv_voice.voice_name - return speaker_name + return adv_voice.TryRecollectVoice(speaker) /mob/proc/handle_track(message, verb = "says", mob/speaker = null, speaker_name, atom/follow_target, hard_to_hear) return diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 6152cecfe17..5065f44e66b 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -29,7 +29,8 @@ skipears |= wear_mask.flags_inv & HIDEHEADSETS var/msg = "This is " - + if(!user.adv_voice.TryStore(src)) + to_chat(user, "Кажется вам не за что зацепится взглядом...") if(!(skipjumpsuit && skipface) && icon) //big suits/masks/helmets make it hard to tell their gender msg += "[bicon(icon(icon, dir=SOUTH))] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated msg += "[name]" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 63f34de85cc..5120eeb3125 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1,3 +1,6 @@ +#define ASK_VERB "!" +#define + /mob/living/carbon/human/Initialize(mapload, datum/species/new_species = /datum/species/human) icon = null // This is now handled by overlays -- we just keep an icon for the sake of the map editor. create_dna() @@ -391,9 +394,9 @@ if(name_override) return name_override if(wear_mask && (wear_mask.flags_inv & HIDENAME)) //Wearing a mask which hides our face, use id-name if possible - return get_id_name("Unknown") + return get_id_name(adv_voice.get_gender_unknown_name(gender)) if(head && (head.flags_inv & HIDENAME)) - return get_id_name("Unknown") //Likewise for hats + return get_id_name(adv_voice.get_gender_unknown_name(gender)) //Likewise for hats var/face_name = get_face_name() var/id_name = get_id_name("") if(add_id_name && id_name && (id_name != face_name)) @@ -404,7 +407,7 @@ /mob/living/carbon/human/proc/get_face_name() var/obj/item/organ/external/head_organ = get_organ(BODY_ZONE_HEAD) if(!head_organ || head_organ.is_disfigured() || cloneloss > 50 || !real_name || HAS_TRAIT(src, TRAIT_HUSK)) //disfigured. use id-name if possible - return "Unknown" + return adv_voice.get_gender_unknown_name(gender) return real_name @@ -413,6 +416,7 @@ * Useful when player is being seen by other mobs. */ /mob/living/carbon/human/proc/get_id_name(if_no_id = "Unknown") + if_no_id = adv_voice.get_gender_unknown_name(gender) var/obj/item/card/id/id = wear_id?.GetID() if(istype(id)) return id.registered_name diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 3f08ff83a94..66770ca55e7 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -11,8 +11,9 @@ life_tick++ - voice = GetVoice() - tts_seed = GetTTSVoice() + //Теперь это этажом ниже + //voice = GetVoice() + //tts_seed = GetTTSVoice() if(.) //not dead diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 3d8ab5a1387..4c8fcea0edd 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -1,6 +1,12 @@ /mob/living/carbon/Life(seconds, times_fired) set invisibility = 0 + //:roflcat: + adv_voice.voice_gender = gender + adv_voice.voice_name = GetVoice() + adv_voice.tts_seed_string = GetTTSVoice() + tts_seed = adv_voice.tts_seed_string + voice_name = adv_voice.voice_name if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 06714b5a316..dfee50ffa16 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -59,6 +59,9 @@ /mob/living/silicon/med_hud_set_status() return diag_hud_set_status() //we use a different hud +/mob/living/silicon/handle_speaker_name(mob/speaker = null, vname, hard_to_hear) + return speaker.adv_voice.GetManifestKnowVoice() + /mob/living/silicon/Destroy() UnregisterSignal(SSalarm, list( COMSIG_TRIGGERED_ALARM, diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d1020156e82..b2da523bce1 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -26,6 +26,13 @@ /mob/Initialize(mapload) GLOB.mob_list += src + + adv_voice = new /datum/voice_model() + adv_voice.real_voice_name = name + adv_voice.tts_seed_string = GetTTSVoice() + adv_voice.voice_gender = gender + adv_voice.voice_name = GetVoice() + if(stat == DEAD) GLOB.dead_mob_list += src else diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index a76ad7796fa..e817066d7cf 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -154,7 +154,9 @@ //see: setup.dm for list of mutations + var/liberated_name = "Неизвестный" //Долой гнет бульена!! var/voice_name = "неизвестный голос" + var/datum/voice_model/adv_voice = null var/list/faction = list("neutral") //Used for checking whether hostile simple animals will attack you, possibly more stuff later diff --git a/paradise.dme b/paradise.dme index 30b22704ec1..9306314b226 100644 --- a/paradise.dme +++ b/paradise.dme @@ -39,7 +39,6 @@ #include "code\__DEFINES\blob.dm" #include "code\__DEFINES\borer.dm" #include "code\__DEFINES\bots.dm" -#include "code\__DEFINES\rituals.dm" #include "code\__DEFINES\byond_tracy.dm" #include "code\__DEFINES\callbacks.dm" #include "code\__DEFINES\cargo_quests.dm" @@ -115,6 +114,7 @@ #include "code\__DEFINES\RCD.dm" #include "code\__DEFINES\reagents.dm" #include "code\__DEFINES\request.dm" +#include "code\__DEFINES\rituals.dm" #include "code\__DEFINES\role_preferences.dm" #include "code\__DEFINES\rolebans.dm" #include "code\__DEFINES\rust_g.dm" @@ -368,7 +368,6 @@ #include "code\controllers\subsystem\tickets\mentor_tickets.dm" #include "code\controllers\subsystem\tickets\tickets.dm" #include "code\datums\action.dm" -#include "code\datums\rituals.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" #include "code\datums\armor.dm" @@ -404,6 +403,7 @@ #include "code\datums\radio.dm" #include "code\datums\recipe.dm" #include "code\datums\revision.dm" +#include "code\datums\rituals.dm" #include "code\datums\ruins.dm" #include "code\datums\shuttles.dm" #include "code\datums\snake_fashion.dm" @@ -416,6 +416,7 @@ #include "code\datums\uplink_item.dm" #include "code\datums\verb_callback.dm" #include "code\datums\vision_override.dm" +#include "code\datums\voice.dm" #include "code\datums\weakrefs.dm" #include "code\datums\cache\air_alarm.dm" #include "code\datums\cache\apc.dm" @@ -446,7 +447,6 @@ #include "code\datums\components\conveyor_movement.dm" #include "code\datums\components\cross_shock.dm" #include "code\datums\components\decal.dm" -#include "code\datums\components\ritual_object.dm" #include "code\datums\components\defibrillator.dm" #include "code\datums\components\drift.dm" #include "code\datums\components\ducttape.dm" @@ -465,6 +465,7 @@ #include "code\datums\components\persistent_overlay.dm" #include "code\datums\components\proximity_monitor.dm" #include "code\datums\components\radioactivity.dm" +#include "code\datums\components\ritual_object.dm" #include "code\datums\components\shielded.dm" #include "code\datums\components\slippery.dm" #include "code\datums\components\spawner.dm" @@ -3140,7 +3141,6 @@ #include "code\modules\tgui\plugins\modal.dm" #include "code\modules\tgui\states\admin.dm" #include "code\modules\tgui\states\always.dm" -#include "code\modules\tgui\states\range.dm" #include "code\modules\tgui\states\conscious.dm" #include "code\modules\tgui\states\contained.dm" #include "code\modules\tgui\states\deep_inventory.dm" @@ -3152,6 +3152,7 @@ #include "code\modules\tgui\states\notcontained.dm" #include "code\modules\tgui\states\observer.dm" #include "code\modules\tgui\states\physical.dm" +#include "code\modules\tgui\states\range.dm" #include "code\modules\tgui\states\self.dm" #include "code\modules\tgui\states\strippable_state.dm" #include "code\modules\tgui\states\zlevel.dm" From 1c44ae72ad3da1557f6c476651871642fe25bb85 Mon Sep 17 00:00:00 2001 From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com> Date: Sun, 8 Dec 2024 18:36:03 +0300 Subject: [PATCH 2/9] =?UTF-8?q?=D0=BC=D0=B8=D0=BA=D1=80=D0=BE=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/modules/mob/living/carbon/human/human.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 5120eeb3125..eedbf49d343 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1,5 +1,3 @@ -#define ASK_VERB "!" -#define /mob/living/carbon/human/Initialize(mapload, datum/species/new_species = /datum/species/human) icon = null // This is now handled by overlays -- we just keep an icon for the sake of the map editor. From a18ef9fff115d327b652cd36c60e1587f7b9e9eb Mon Sep 17 00:00:00 2001 From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com> Date: Sun, 8 Dec 2024 22:52:37 +0300 Subject: [PATCH 3/9] =?UTF-8?q?=D1=83=D0=BC=D0=B5=D1=80=20=D0=BE=D1=82=20?= =?UTF-8?q?=D0=BA=D1=80=D0=B8=D0=BD=D0=B6=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/game/gamemodes/game_mode.dm | 31 +++++++++++++++++++++++--- code/modules/mob/living/carbon/life.dm | 10 ++++----- code/modules/mob/mob.dm | 3 ++- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 6796065e042..b32dbe8485d 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -85,9 +85,35 @@ /** * Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things. - */ + */ /datum/game_mode/proc/post_setup() - + //Cringe zone start + //Data format JOB = list(Voice_name = name) + var/list/communist_manifest = list() + var/list/capitalist_pig = list() + var/list/head_pigs = list() //capitan + for(var/mob/living/carbon/human/target) + var/dep_flag = "[SSjobs.GetJob(target.job)?.department_flag]" + if(!dep_flag) + continue + if(target.job in GLOB.command_positions) + capitalist_pig[target.GetVoice()] = target.name + if(target.job == JOB_TITLE_CAPTAIN) + head_pigs[target.GetVoice()] = target.name + if(communist_manifest?[dep_flag]) + communist_manifest[dep_flag][target.GetVoice()] = target.name + else + communist_manifest[dep_flag] = list(target.GetVoice() = target.name) + for(var/mob/living/carbon/human/target) + var/dep_flag = "[SSjobs.GetJob(target.job)?.department_flag]" + if(!dep_flag) + continue + if(communist_manifest?["[SSjobs.GetJob(target.job)?.department_flag]"]) + if(target.job in GLOB.command_positions) + target.adv_voice.famous_voices = (communist_manifest["[SSjobs.GetJob(target.job)?.department_flag]"] + capitalist_pig) - target.GetVoice() + else + target.adv_voice.famous_voices = (communist_manifest["[SSjobs.GetJob(target.job)?.department_flag]"] + head_pigs) - target.GetVoice() + //Cringe zone stop spawn(ROUNDSTART_LOGOUT_REPORT_TIME) display_roundstart_logout_report() @@ -99,7 +125,6 @@ GLOB.start_state.count() return TRUE - /datum/game_mode/proc/set_mode_in_db() // I wonder what this could do guessing by the name if(SSticker?.mode && SSdbcore.IsConnected()) var/datum/db_query/query_round_game_mode = SSdbcore.NewQuery("UPDATE round SET game_mode=:gm WHERE id=:rid", list( diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 4c8fcea0edd..ece5a6dc68c 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -1,12 +1,12 @@ /mob/living/carbon/Life(seconds, times_fired) set invisibility = 0 //:roflcat: - adv_voice.voice_gender = gender - adv_voice.voice_name = GetVoice() - adv_voice.tts_seed_string = GetTTSVoice() + voice_name = GetVoice() + tts_seed = GetTTSVoice() - tts_seed = adv_voice.tts_seed_string - voice_name = adv_voice.voice_name + adv_voice.voice_gender = gender + adv_voice.voice_name = voice_name + adv_voice.tts_seed_string = tts_seed if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b2da523bce1..21cba049359 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -26,12 +26,13 @@ /mob/Initialize(mapload) GLOB.mob_list += src + voice_name = GetVoice() adv_voice = new /datum/voice_model() adv_voice.real_voice_name = name adv_voice.tts_seed_string = GetTTSVoice() adv_voice.voice_gender = gender - adv_voice.voice_name = GetVoice() + adv_voice.voice_name = voice_name if(stat == DEAD) GLOB.dead_mob_list += src From e64f2c78eac1bfb0b0a93837ca25919d9afe6e2d Mon Sep 17 00:00:00 2001 From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:07:29 +0300 Subject: [PATCH 4/9] =?UTF-8?q?=D0=BA=D0=BE=D1=81=D1=82=D1=8B=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D1=84=D0=B8=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/game/gamemodes/game_mode.dm | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index b32dbe8485d..565602d09dd 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -92,8 +92,16 @@ var/list/communist_manifest = list() var/list/capitalist_pig = list() var/list/head_pigs = list() //capitan + /* + var/list/god_ai_list = list() //for AI + for(var/mob/living/silicon/ai) + if(ai.job = JOB_TITLE_AI && ai.loc.z == STATION_LEVEL) + god_ai_list[ai.voice_name] = ai.name + */ for(var/mob/living/carbon/human/target) - var/dep_flag = "[SSjobs.GetJob(target.job)?.department_flag]" + var/datum/job/prom_job = SSjobs.GetJob(target.job) + var/dep_flag = "[prom_job?.department_flag]" + if(!dep_flag) continue if(target.job in GLOB.command_positions) @@ -105,14 +113,15 @@ else communist_manifest[dep_flag] = list(target.GetVoice() = target.name) for(var/mob/living/carbon/human/target) - var/dep_flag = "[SSjobs.GetJob(target.job)?.department_flag]" + var/datum/job/prom_job = SSjobs.GetJob(target.job) + var/dep_flag = "[prom_job?.department_flag]" if(!dep_flag) continue - if(communist_manifest?["[SSjobs.GetJob(target.job)?.department_flag]"]) + if(communist_manifest?[dep_flag]) if(target.job in GLOB.command_positions) - target.adv_voice.famous_voices = (communist_manifest["[SSjobs.GetJob(target.job)?.department_flag]"] + capitalist_pig) - target.GetVoice() + target.adv_voice.famous_voices = (communist_manifest[dep_flag] + capitalist_pig) - target.GetVoice() else - target.adv_voice.famous_voices = (communist_manifest["[SSjobs.GetJob(target.job)?.department_flag]"] + head_pigs) - target.GetVoice() + target.adv_voice.famous_voices = (communist_manifest[dep_flag] + head_pigs) - target.GetVoice() //Cringe zone stop spawn(ROUNDSTART_LOGOUT_REPORT_TIME) display_roundstart_logout_report() From 6116f776a6a1b0359dab21e735bcb0161390f32d Mon Sep 17 00:00:00 2001 From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com> Date: Mon, 6 Jan 2025 03:26:25 +0300 Subject: [PATCH 5/9] =?UTF-8?q?=D1=83=D1=83=20=D0=B1=D0=BB=D1=8F=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/__DEFINES/dcs/signals.dm | 6 ++ .../_onclick/hud/plane_master/render_plate.dm | 2 +- code/datums/datacore.dm | 26 ++++++- code/datums/voice.dm | 69 ++++++++++++++----- code/game/atoms.dm | 5 ++ code/game/gamemodes/game_mode.dm | 5 ++ code/game/objects/items/devices/megaphone.dm | 1 + code/modules/economy/Job_Departments.dm | 1 + .../mob/living/carbon/brain/brain_say.dm | 1 + code/modules/mob/living/carbon/human/npcs.dm | 13 ++-- code/modules/mob/living/living_say.dm | 1 + code/modules/mob/living/silicon/silicon.dm | 4 ++ code/modules/mob/mob.dm | 8 +-- code/modules/mob/mob_defines.dm | 2 +- code/modules/mob/mob_helpers.dm | 10 +-- code/modules/mob/mob_say.dm | 1 + code/modules/mob/new_player/new_player.dm | 4 +- code/modules/mob/transform_procs.dm | 3 +- 18 files changed, 120 insertions(+), 42 deletions(-) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index aa521e47314..effe19748b5 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -74,6 +74,12 @@ #define COMSIG_ATOM_NO_LONGER_PULLED "movable_no_longer_pulled" ///signal sent out by an atom when it is no longer pulling something : (atom/pulling) #define COMSIG_ATOM_NO_LONGER_PULLING "movable_no_longer_pulling" +//signal for mass roundstart store voice (very english) +#define COMSIG_SPECIAL_MASS_STORE_VOICE "store_voice" + +#define COMSIG_JUST_LIST_ADD_VOICE "list_add_voice" +//signal for human store ebalo +//#define COMSIG_STORE_FACE "store_face" ///from base of atom/attackby(): (/obj/item, /mob/living, params) #define COMSIG_PARENT_ATTACKBY "atom_attackby" diff --git a/code/_onclick/hud/plane_master/render_plate.dm b/code/_onclick/hud/plane_master/render_plate.dm index 02608d44716..73b3eb35846 100644 --- a/code/_onclick/hud/plane_master/render_plate.dm +++ b/code/_onclick/hud/plane_master/render_plate.dm @@ -54,7 +54,7 @@ /atom/movable/screen/plane_master/rendering_plate/master/hide_from(mob/oldmob) . = ..() if(offset == 0) - return + return var/datum/hud/hud = home.our_hud if(hud) UnregisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change)) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index bbdfc97f573..3929ece7325 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -1,3 +1,6 @@ + +GLOBAL_LIST_EMPTY(capitalist_manifest) + /datum/datacore var/list/medical = list() var/list/general = list() @@ -111,6 +114,7 @@ GLOBAL_LIST_EMPTY(PDA_Manifest) /datum/datacore/proc/manifest() for(var/mob/living/carbon/human/H in GLOB.player_list) manifest_inject(H) + SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest) /datum/datacore/proc/manifest_modify(name, rank, assignment) if(GLOB.PDA_Manifest.len) @@ -142,10 +146,26 @@ GLOBAL_VAR_INIT(record_id_num, 1001) assignment = H.job else assignment = "Unassigned" - + var/id = num2hex(GLOB.record_id_num++, 6) - - + H.adv_voice.RegSignals() + H.UpdateVoice() //при иницилизации все куклы ноунеймы, имена и прочее подгружается потом. Где это потом я искать не хочу, терпите карлики + var/prom_voice = H.adv_voice.voice_name + + var/datum/job/prom_job = SSjobs.GetJob(H.job) + var/dep_flag = prom_job.department + + if(GLOB.capitalist_manifest?["AbsolutePomny"] && (prom_job.title in GLOB.command_positions)) + GLOB.capitalist_manifest["AbsolutePomny"][prom_voice] = H.real_name + else if(prom_job.title in GLOB.command_positions) + GLOB.capitalist_manifest["AbsolutePomny"] = list((prom_voice) = H.real_name) + + if(GLOB.capitalist_manifest?[dep_flag] && dep_flag) + GLOB.capitalist_manifest?[dep_flag][prom_voice] = H.real_name + else if(dep_flag) + GLOB.capitalist_manifest?[dep_flag] = list((prom_voice) = H.real_name) + + //SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest) //При создании рекордсов еще берется и голос, боже помилуй чтобы это ничего не сломало //General Record var/datum/data/record/G = new() diff --git a/code/datums/voice.dm b/code/datums/voice.dm index 2a3648f87db..891f9439599 100644 --- a/code/datums/voice.dm +++ b/code/datums/voice.dm @@ -1,35 +1,63 @@ #define GENDER_NAME_UNKNOW list(MALE = "Незнакомец", FEMALE = "Незнакомка", NEUTER = "Неизвестный", PLURAL = "Неизвестный") - //Новая система голоса /datum/voice_model + var/mob/host = null //Носитель этой хуеты var/tts_seed_string = "Arthas" var/voice_gender = MALE var/voice_name = "Неизвестный" var/real_voice_name = "Неизвестный" + var/list/lust_debug = list() + var/list/famous_voices = list() //var/list/famous_faces = list() -/datum/voice_model/proc/CreateVoiceModel(var/atom/owner_voice) - var/datum/voice_model/result = new() - - result.real_voice_name = owner_voice.GetVoice() - result.voice_name = owner_voice.GetVoice() - result.voice_gender = owner_voice.gender - result.famous_voices[voice_name] = owner_voice.name - result.tts_seed_string = owner_voice.tts_seed +/proc/isZlevel(var/mob/analiz) + var/result = analiz?.loc?.z + return (result == 3) + + +/datum/voice_model/New(var/mob/owner_voice) + if(owner_voice != null) + host = owner_voice + real_voice_name = owner_voice.GetVoice() + voice_name = owner_voice.GetVoice() + voice_gender = owner_voice.gender + famous_voices[voice_name] = owner_voice.name + tts_seed_string = owner_voice.tts_seed + +/datum/voice_model/proc/RegSignals() + to_chat(world, "Успешно регистрирую сигнал [host.name]") + RegisterSignal(SSdcs, COMSIG_SPECIAL_MASS_STORE_VOICE, PROC_REF(SpecialMassAddVoice)) + +//Специфическая функция которая добавляет что нужно короче +/datum/voice_model/proc/SpecialMassAddVoice(suka, list/list_voice) + SIGNAL_HANDLER + lust_debug = list_voice + to_chat(world, "Глобальный сигнал!!") + + var/list/prom_fuck = list_voice?[SSjobs.GetJob(host.job).department] + if(list_voice?["AbsolutePomny"]) + famous_voices |= list_voice["AbsolutePomny"] + + if(prom_fuck) + famous_voices |= prom_fuck - return result +/datum/voice_model/proc/JustListAddVoice(list_voice) + SIGNAL_HANDLER + famous_voices |= list_voice -/datum/voice_model/proc/VoiceUpdate(var/atom/owner_voice) - voice_name = owner_voice.GetVoice() //:badguy: +/datum/voice_model/proc/VoiceUpdate() + voice_name = host.GetVoice() //:badguy: + voice_gender = host.gender + tts_seed_string = host.tts_seed /datum/voice_model/proc/get_gender_unknown_name(gender_string) var/result = (GENDER_NAME_UNKNOW)?[gender_string] if(result) return result return "Неизвестный" - +/* Not used /datum/voice_model/proc/CopyInVoice(datum/voice_model/voice_to_copy) tts_seed_string = voice_to_copy.tts_seed_string voice_gender = voice_to_copy.voice_gender @@ -39,14 +67,14 @@ CopyInVoice(voice_to_copy) real_voice_name = voice_to_copy.real_voice_name famous_voices = voice_to_copy.famous_voices - +*/ //было две бутылки, словарь или два прока. Я сел на вторую /datum/voice_model/proc/GetManifestKnowVoice() for(var/datum/data/record/t in GLOB.data_core.general) if(t) if(t.fields["voice"] == voice_name) return t.fields["name"] - return "IDENTIFICATION VOICE ERROR" + return "IDENTIFICATION ERROR" //Технически name это представление твоего ебала /* BYOND... /datum/voice_model/proc/GetManifestKnowFace(mob/face_target) @@ -109,12 +137,17 @@ return target.adv_voice.voice_name if(!ishuman(target)) return target.adv_voice.voice_name - var/mob/living/carbon/human/target_H = target - . = famous_voices?[target_H.name] + . = famous_voices?[target.adv_voice.voice_name] if(.) return - return get_gender_unknown_name(target_H.adv_voice.voice_gender) + return get_gender_unknown_name(target.adv_voice.voice_gender) + +/datum/voice_model/proc/I_do_remember(mob/target) + . = famous_voices?[target.adv_voice.voice_name] + if(.) + return TRUE + return FALSE #undef GENDER_NAME_UNKNOW diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 755a19232bb..4bc6f823150 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1678,6 +1678,11 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) /atom/proc/GetTTSVoice() return tts_seed +/mob/proc/UpdateVoice() + voice_name = GetVoice() + tts_seed = GetTTSVoice() + adv_voice.VoiceUpdate() + /// Passes Stat Browser Panel clicks to the game and calls client click on an atom /atom/Topic(href, list/href_list) . = ..() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 565602d09dd..56d7beedb44 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -87,6 +87,7 @@ * Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things. */ /datum/game_mode/proc/post_setup() + /* //Cringe zone start //Data format JOB = list(Voice_name = name) var/list/communist_manifest = list() @@ -123,15 +124,19 @@ else target.adv_voice.famous_voices = (communist_manifest[dep_flag] + head_pigs) - target.GetVoice() //Cringe zone stop + */ + spawn(ROUNDSTART_LOGOUT_REPORT_TIME) display_roundstart_logout_report() + INVOKE_ASYNC(src, PROC_REF(set_mode_in_db)) // Async query, dont bother slowing roundstart SScargo_quests.roll_start_quests() generate_station_goals() GLOB.start_state = new /datum/station_state() GLOB.start_state.count() + //SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest) return TRUE /datum/game_mode/proc/set_mode_in_db() // I wonder what this could do guessing by the name diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 42de0b94b54..e2ab095cd24 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -66,6 +66,7 @@ spamcheck = 0 /obj/item/megaphone/proc/saymsg(mob/living/user, message) + user.UpdateVoice() add_say_logs(user, message, language = "Megaphone") var/message_tts = message message = replace_characters(message, list("+")) diff --git a/code/modules/economy/Job_Departments.dm b/code/modules/economy/Job_Departments.dm index 97950816208..d3efbdcb570 100644 --- a/code/modules/economy/Job_Departments.dm +++ b/code/modules/economy/Job_Departments.dm @@ -1,6 +1,7 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Support", "Civilian")) // The department the job belongs to. +// fuck you cib /datum/job/var/department = null // Whether this is a head position diff --git a/code/modules/mob/living/carbon/brain/brain_say.dm b/code/modules/mob/living/carbon/brain/brain_say.dm index 5527c61def1..5f2d26dc631 100644 --- a/code/modules/mob/living/carbon/brain/brain_say.dm +++ b/code/modules/mob/living/carbon/brain/brain_say.dm @@ -1,5 +1,6 @@ //TODO: Convert this over for languages. /mob/living/carbon/brain/say(message, datum/language/speaking = null) + if(stat == DEAD) return ..() if(!can_speak(warning = TRUE)) diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm index ca2c22d05e5..484d0ccf745 100644 --- a/code/modules/mob/living/carbon/human/npcs.dm +++ b/code/modules/mob/living/carbon/human/npcs.dm @@ -9,15 +9,16 @@ . = ..() name = "Pun Pun" real_name = name + job = "Bartender" + tts_seed = "Chen" var/obj/item/clothing/under/punpun/prom = new(src) - var/obj/item/clothing/accessory/petcollar/prom_collar = new(src) - var/obj/item/card/id/punpun/punpun_id = new(prom_collar) - prom_collar.access_id = punpun_id - prom_collar.on_attached(prom, src) + //var/obj/item/clothing/accessory/petcollar/prom_collar = new(src) + var/obj/item/card/id/punpun/punpun_id = new(src) + //prom_collar.access_id = punpun_id + //prom_collar.on_attached(prom, src) equip_to_slot_if_possible(prom, ITEM_SLOT_CLOTH_INNER) - - tts_seed = "Chen" + equip_to_slot_if_possible(punpun_id, ITEM_SLOT_ID) /mob/living/carbon/human/lesser/monkey/punpun/can_use_machinery(obj/machinery/mas) . = ..() diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index be1a0129fd8..7c570d592cd 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -200,6 +200,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) /mob/living/say(message, verb = "says", sanitize = TRUE, ignore_speech_problems = FALSE, ignore_atmospherics = FALSE, ignore_languages = FALSE) + ..() if(client) client.check_say_flood(5) if(check_mute(client.ckey, MUTE_IC)) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index dfee50ffa16..da172c443f5 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -60,6 +60,10 @@ return diag_hud_set_status() //we use a different hud /mob/living/silicon/handle_speaker_name(mob/speaker = null, vname, hard_to_hear) + if(speaker.adv_voice == adv_voice) //HeLLO Is I + return speaker.name + if(adv_voice.I_do_remember(speaker)) + return adv_voice.TryRecollectVoice(speaker) return speaker.adv_voice.GetManifestKnowVoice() /mob/living/silicon/Destroy() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 21cba049359..b76593ff234 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -27,12 +27,8 @@ /mob/Initialize(mapload) GLOB.mob_list += src voice_name = GetVoice() - - adv_voice = new /datum/voice_model() - adv_voice.real_voice_name = name - adv_voice.tts_seed_string = GetTTSVoice() - adv_voice.voice_gender = gender - adv_voice.voice_name = voice_name + + adv_voice = new(src) if(stat == DEAD) GLOB.dead_mob_list += src diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index e817066d7cf..062ea149e37 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -154,7 +154,7 @@ //see: setup.dm for list of mutations - var/liberated_name = "Неизвестный" //Долой гнет бульена!! + var/examie_name = "Неизвестный" //Долой гнет бульена!! var/voice_name = "неизвестный голос" var/datum/voice_model/adv_voice = null diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 075c44d9ffd..71f9c9880a1 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -525,7 +525,7 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM check_eye(src) return TRUE -/mob/proc/rename_character(oldname, newname) +/mob/proc/rename_character(oldname, newname, mass_update = FALSE) if(!newname) return 0 real_name = newname @@ -577,9 +577,12 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM length = length_char(oldname) pos = findtextEx_char(objective.explanation_text, oldname) objective.explanation_text = copytext_char(objective.explanation_text, 1, pos)+newname+copytext_char(objective.explanation_text, pos+length) + UpdateVoice() + if(mass_update) + SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, list("AbsolutePomny" = (list((adv_voice.voice_name) = name)))) return 1 -/mob/proc/rename_self(var/role, var/allow_numbers = FALSE, var/force = FALSE) +/mob/proc/rename_self(var/role, var/allow_numbers = FALSE, var/force = FALSE, var/mass_update = FALSE) spawn(0) var/oldname = real_name @@ -608,8 +611,7 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM if(!newname) //we'll stick with the oldname then return - - rename_character(oldname, newname) + rename_character(oldname, newname, mass_update) /proc/cultslur(n) // Inflicted on victims of a stun talisman var/phrase = html_decode(n) diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 34adbed0045..54e21a72674 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -3,6 +3,7 @@ "\[" = "", "]" = "", "{" = "", "}" = "") /mob/proc/say(message, verb = "says", sanitize = TRUE, ignore_speech_problems = FALSE, ignore_atmospherics = FALSE, ignore_languages = FALSE) + UpdateVoice() return /mob/verb/whisper(message as text) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index f68feabe24c..f1d18c7790c 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -619,10 +619,10 @@ mind.active = 0 //we wish to transfer the key manually if(mind.assigned_role == JOB_TITLE_CLOWN) //give them a clownname if they are a clown new_character.real_name = pick(GLOB.clown_names) //I hate this being here of all places but unfortunately dna is based on real_name! - new_character.rename_self(JOB_TITLE_CLOWN) + new_character.rename_self(JOB_TITLE_CLOWN, mass_update = TRUE) else if(mind.assigned_role == JOB_TITLE_MIME) new_character.real_name = pick(GLOB.mime_names) - new_character.rename_self(JOB_TITLE_MIME) + new_character.rename_self(JOB_TITLE_MIME, mass_update = TRUE) mind.set_original_mob(new_character) mind.transfer_to(new_character) //won't transfer key since the mind is not active GLOB.human_names_list += new_character.real_name diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 3da7a445057..393109922ec 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -32,6 +32,7 @@ client?.tgui_panel?.stop_music() var/mob/living/silicon/ai/O = new (loc,,,1)//No MMI but safety is in effect. + O.adv_voice.RegSignals() O.invisibility = 0 O.aiRestorePowerRoutine = 0 @@ -44,7 +45,7 @@ O.on_mob_init() O.add_ai_verbs() - + O.rename_self(JOB_TITLE_AI,1) O.tts_seed = tts_seed From c4a3473902a59726553c3b4798e676055b6b479f Mon Sep 17 00:00:00 2001 From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com> Date: Wed, 8 Jan 2025 01:24:53 +0300 Subject: [PATCH 6/9] =?UTF-8?q?=D0=B1=D1=83=D1=8D=D1=8D=D1=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/datums/datacore.dm | 18 +++++------ code/datums/mind.dm | 1 + code/datums/voice.dm | 30 ++++++++----------- code/game/gamemodes/clockwork/clockwork.dm | 1 + code/game/gamemodes/cult/cult.dm | 1 + code/game/gamemodes/cult/runes.dm | 3 +- code/game/jobs/job/central.dm | 2 ++ code/game/jobs/job/engineering.dm | 4 +++ code/game/jobs/job/job.dm | 8 +++++ code/game/jobs/job/medical.dm | 3 ++ code/game/jobs/job/science.dm | 4 ++- code/game/jobs/job/security.dm | 3 ++ code/game/jobs/job/silicon.dm | 5 ++++ code/game/jobs/job/supervisor.dm | 6 ++++ code/game/jobs/job/support.dm | 3 ++ code/game/jobs/job/syndicate.dm | 1 + .../antagonists/_common/antag_datum.dm | 2 ++ code/modules/economy/Job_Departments.dm | 1 + .../modules/mob/living/silicon/robot/robot.dm | 1 + code/modules/mob/mob_defines.dm | 2 -- 20 files changed, 66 insertions(+), 33 deletions(-) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 3929ece7325..9d4784cb69b 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -149,21 +149,17 @@ GLOBAL_VAR_INIT(record_id_num, 1001) var/id = num2hex(GLOB.record_id_num++, 6) H.adv_voice.RegSignals() - H.UpdateVoice() //при иницилизации все куклы ноунеймы, имена и прочее подгружается потом. Где это потом я искать не хочу, терпите карлики + H.UpdateVoice() //На всякий var/prom_voice = H.adv_voice.voice_name var/datum/job/prom_job = SSjobs.GetJob(H.job) - var/dep_flag = prom_job.department - if(GLOB.capitalist_manifest?["AbsolutePomny"] && (prom_job.title in GLOB.command_positions)) - GLOB.capitalist_manifest["AbsolutePomny"][prom_voice] = H.real_name - else if(prom_job.title in GLOB.command_positions) - GLOB.capitalist_manifest["AbsolutePomny"] = list((prom_voice) = H.real_name) - - if(GLOB.capitalist_manifest?[dep_flag] && dep_flag) - GLOB.capitalist_manifest?[dep_flag][prom_voice] = H.real_name - else if(dep_flag) - GLOB.capitalist_manifest?[dep_flag] = list((prom_voice) = H.real_name) + for(var/dep_flag in prom_job.college_department) //:catsmile: + if(!isnull(GLOB.capitalist_manifest?[dep_flag])) + to_chat(world, "[dep_flag] [prom_job] [H.real_name]") + GLOB.capitalist_manifest[dep_flag][prom_voice] = H.real_name + else + GLOB.capitalist_manifest[dep_flag] = list((prom_voice) = (H.real_name)) //SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest) //При создании рекордсов еще берется и голос, боже помилуй чтобы это ничего не сломало diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 98339829044..ac91d3c7114 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -37,6 +37,7 @@ var/assigned_role //assigned role is what job you're assigned to when you join the station. var/playtime_role //if set, overrides your assigned_role for the purpose of playtime awards. Set by IDcomputer when your ID is changed. var/special_role //special roles are typically reserved for antags or roles like ERP. If you want to avoid a character being automatically announced by the AI, on arrival (becuase they're an off station character or something); ensure that special_role and assigned_role are equal. + var/special_role_meta_know = FALSE //Если TRUE то ты всегда будешь знать тех у кого такая-же спец роль var/offstation_role = FALSE //set to true for ERT, deathsquad, abductors, etc, that can go from and to z2 at will and shouldn't be antag targets var/list/restricted_roles = list() diff --git a/code/datums/voice.dm b/code/datums/voice.dm index 891f9439599..9cbe6a74c86 100644 --- a/code/datums/voice.dm +++ b/code/datums/voice.dm @@ -7,16 +7,9 @@ var/voice_name = "Неизвестный" var/real_voice_name = "Неизвестный" - var/list/lust_debug = list() - var/list/famous_voices = list() //var/list/famous_faces = list() -/proc/isZlevel(var/mob/analiz) - var/result = analiz?.loc?.z - return (result == 3) - - /datum/voice_model/New(var/mob/owner_voice) if(owner_voice != null) host = owner_voice @@ -27,21 +20,18 @@ tts_seed_string = owner_voice.tts_seed /datum/voice_model/proc/RegSignals() - to_chat(world, "Успешно регистрирую сигнал [host.name]") - RegisterSignal(SSdcs, COMSIG_SPECIAL_MASS_STORE_VOICE, PROC_REF(SpecialMassAddVoice)) + RegisterSignal(SSdcs, COMSIG_SPECIAL_MASS_STORE_VOICE, PROC_REF(SpecialMassAddVoice)) //Специфическая функция которая добавляет что нужно короче /datum/voice_model/proc/SpecialMassAddVoice(suka, list/list_voice) SIGNAL_HANDLER - lust_debug = list_voice - to_chat(world, "Глобальный сигнал!!") - - var/list/prom_fuck = list_voice?[SSjobs.GetJob(host.job).department] + var/datum/job/prom_job = SSjobs.GetJob(host.job) //Нужно чтобы небыло предупеждений + var/list/prom_data = list_voice?[prom_job.department] if(list_voice?["AbsolutePomny"]) famous_voices |= list_voice["AbsolutePomny"] - if(prom_fuck) - famous_voices |= prom_fuck + if(prom_data) + famous_voices |= prom_data /datum/voice_model/proc/JustListAddVoice(list_voice) SIGNAL_HANDLER @@ -89,7 +79,7 @@ if(src == target.adv_voice) return TRUE . = FALSE - if(!ishuman(target)) //Нахуя мне знать как зовут мышей :badguy: + if(!ishuman(target)) //Зачем мне знать как зовут мышей :badguy: return target.name var/mob/living/carbon/human/target_H = target var/obj/item/card/id/prov_wear_id = null @@ -133,10 +123,14 @@ */ //For hear /datum/voice_model/proc/TryRecollectVoice(mob/target) + if(!ishuman(host)) //Мышки мышки знают все.... + return target.name + if(host.mind.special_role_meta_know && (target.mind.special_role == host.mind.special_role)) + return target.name if(src == target.adv_voice) - return target.adv_voice.voice_name + return target.name if(!ishuman(target)) - return target.adv_voice.voice_name + return target.name . = famous_voices?[target.adv_voice.voice_name] if(.) diff --git a/code/game/gamemodes/clockwork/clockwork.dm b/code/game/gamemodes/clockwork/clockwork.dm index b3e52e47ca1..17e10303251 100644 --- a/code/game/gamemodes/clockwork/clockwork.dm +++ b/code/game/gamemodes/clockwork/clockwork.dm @@ -190,6 +190,7 @@ GLOBAL_LIST_EMPTY(all_clockers) clockwork_cult += clock_mind clock_mind.current.faction |= "clockwork_cult" clock_mind.special_role = SPECIAL_ROLE_CLOCKER + clock_mind.special_role_meta_know = TRUE if(clock_mind.assigned_role == JOB_TITLE_CLOWN) to_chat(clock_mind.current, "A dark power has allowed you to overcome your clownish nature, letting you wield weapons without harming yourself.") diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index a6254bc7d85..fa440f4e411 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -187,6 +187,7 @@ GLOBAL_LIST_EMPTY(all_cults) cult += cult_mind cult_mind.current.faction |= "cult" cult_mind.special_role = SPECIAL_ROLE_CULTIST + cult_mind.special_role_meta_know = TRUE ADD_TRAIT(cult_mind.current, TRAIT_HEALS_FROM_CULT_PYLONS, CULT_TRAIT) if(cult_mind.assigned_role == JOB_TITLE_CLOWN) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index e628ab013cd..aec4b83265a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -329,7 +329,8 @@ structure_check() searches for nearby cultist structures required for the invoca convertee.visible_message("[convertee] writhes in pain as the markings below them glow a bloody red!", \ "AAAAAAAAAAAAAA-") SSticker.mode.add_cultist(convertee.mind) - convertee.mind.special_role = "Cultist" + convertee.mind.special_role = "Cultist" //wtf + //convertee.mind.special_role_meta_know = TRUE to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ and something evil takes root.") to_chat(convertee, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve [SSticker.cultdat.entity_title3] above all else. Bring it back.\ diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm index ba29114705e..c9598a15867 100644 --- a/code/game/jobs/job/central.dm +++ b/code/game/jobs/job/central.dm @@ -13,6 +13,8 @@ admin_only = 1 outfit = /datum/outfit/job/ntnavyofficer + department = "Sedali" + /datum/job/ntnavyofficer/get_access() return get_centcom_access(title) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index bfe04726e2b..246b8a89b54 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -1,3 +1,4 @@ +#define PRIMITIVE_STATION_DEPARTMENTS list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Support", "Civilian") /datum/job/chief_engineer title = JOB_TITLE_CHIEF flag = JOB_FLAG_CHIEF @@ -28,6 +29,9 @@ min_start_money = 400 max_start_money = 700 + defoult_dep = FALSE + college_department = PRIMITIVE_STATION_DEPARTMENTS + /datum/outfit/job/chief_engineer name = "Chief Engineer" jobtype = /datum/job/chief_engineer diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index ed8fe897cae..73bd697528c 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -81,7 +81,15 @@ var/insurance = INSURANCE_STANDART var/insurance_type = INSURANCE_TYPE_STANDART + var/defoult_dep = TRUE + var/list/college_department = list() //Указаные отделы будут знать тебя. По умолчанию тебя знает твой отдел + //Only override this proc +/datum/job/New() + if(department && defoult_dep) + college_department.Add(department) + + /datum/job/proc/after_spawn(mob/living/carbon/human/H) /datum/job/proc/announce(mob/living/carbon/human/H) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 06879c0c751..7f9a89f1b2c 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -26,6 +26,9 @@ min_start_money = 400 max_start_money = 700 + defoult_dep = FALSE + college_department = PRIMITIVE_STATION_DEPARTMENTS + /datum/outfit/job/cmo name = JOB_TITLE_CMO jobtype = /datum/job/cmo diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 9529e98f49a..8b1117dd787 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -31,7 +31,9 @@ salary = 300 min_start_money = 400 max_start_money = 700 - + + defoult_dep = FALSE + college_department = PRIMITIVE_STATION_DEPARTMENTS /datum/outfit/job/rd name = "Research Director" diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index d377bf1a6c0..4d5d69df6d0 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -30,6 +30,9 @@ min_start_money = 400 max_start_money = 700 + defoult_dep = FALSE + college_department = PRIMITIVE_STATION_DEPARTMENTS + /datum/outfit/job/hos name = "Head of Security" jobtype = /datum/job/hos diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index be71c5ee5da..e5079638c36 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -13,6 +13,8 @@ exp_type = EXP_TYPE_SILICON insurance_type = INSURANCE_TYPE_NONE + college_department = list() //Синтам не нужны коллеги, ибо у них имена потом идут + /datum/job/ai/equip(mob/living/carbon/human/H) if(!H) return 0 @@ -36,6 +38,9 @@ alt_titles = list("Robot") insurance_type = INSURANCE_TYPE_NONE + defoult_dep = FALSE + college_department = list() + /datum/job/cyborg/equip(mob/living/carbon/human/H) if(!H) return FALSE diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 824b8276251..c652b24431d 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -25,6 +25,9 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca min_start_money = 600 max_start_money = 1200 + defoult_dep = FALSE + college_department = PRIMITIVE_STATION_DEPARTMENTS + /datum/job/captain/get_access() return get_all_accesses() @@ -96,6 +99,9 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca min_start_money = 400 max_start_money = 700 + defoult_dep = FALSE + college_department = PRIMITIVE_STATION_DEPARTMENTS + /datum/outfit/job/hop name = "Head of Personnel" jobtype = /datum/job/hop diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 16a34ff3a41..dc50427493a 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -23,6 +23,9 @@ min_start_money = 400 max_start_money = 700 + defoult_dep = FALSE + college_department = PRIMITIVE_STATION_DEPARTMENTS + /datum/outfit/job/qm name = "Quartermaster" jobtype = /datum/job/qm diff --git a/code/game/jobs/job/syndicate.dm b/code/game/jobs/job/syndicate.dm index 97ed2ea9c05..eebeb30175e 100644 --- a/code/game/jobs/job/syndicate.dm +++ b/code/game/jobs/job/syndicate.dm @@ -12,6 +12,7 @@ syndicate_command = 1 outfit = /datum/outfit/job/syndicateofficer insurance_type = INSURANCE_TYPE_NONE + department = "SyndiCat" /datum/job/syndicateofficer/get_access() return get_syndicate_access(title) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 2b137da292e..f0f63106223 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -43,6 +43,8 @@ GLOBAL_LIST_EMPTY(antagonists) var/russian_wiki_name /// Show antag in ghost orbit var/show_in_orbit = TRUE + //for voice.dm :catsmile: + var/meta_acquaintances = FALSE /datum/antagonist/New() GLOB.antagonists += src diff --git a/code/modules/economy/Job_Departments.dm b/code/modules/economy/Job_Departments.dm index d3efbdcb570..f7d95c7d7b7 100644 --- a/code/modules/economy/Job_Departments.dm +++ b/code/modules/economy/Job_Departments.dm @@ -1,4 +1,5 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Support", "Civilian")) +//Это нужно поскольку GLOB.station_departments определяется во время выполнения // The department the job belongs to. // fuck you cib diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index dbe4d67f6b1..05f018c52c7 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -202,6 +202,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( /mob/living/silicon/robot/proc/init(alien, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null) + adv_voice.RegSignals() aiCamera = new/obj/item/camera/siliconcam/robot_camera(src) make_laws() additional_law_channels["Binary"] = get_language_prefix(LANGUAGE_BINARY) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 062ea149e37..397c4385d9e 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -153,8 +153,6 @@ var/radiation = 0 //Carbon //see: setup.dm for list of mutations - - var/examie_name = "Неизвестный" //Долой гнет бульена!! var/voice_name = "неизвестный голос" var/datum/voice_model/adv_voice = null From a39ddcd5c4e8cd4b9dcfe21ce6f27fc12d5a169c Mon Sep 17 00:00:00 2001 From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com> Date: Wed, 8 Jan 2025 02:28:36 +0300 Subject: [PATCH 7/9] bugfix --- code/datums/voice.dm | 24 ++++++++++---- code/game/jobs/job/job.dm | 2 +- code/game/jobs/job/medical.dm | 2 ++ code/game/jobs/job/security.dm | 2 ++ code/game/jobs/job/silicon.dm | 3 -- code/game/jobs/job/supervisor.dm | 2 ++ code/modules/economy/Job_Departments.dm | 31 +++++++++++++++++-- code/modules/mob/living/carbon/human/human.dm | 4 +-- .../mob/living/carbon/human/human_say.dm | 9 ++++++ code/modules/mob/mob_helpers.dm | 8 ++--- code/modules/mob/new_player/new_player.dm | 5 ++- 11 files changed, 71 insertions(+), 21 deletions(-) diff --git a/code/datums/voice.dm b/code/datums/voice.dm index 9cbe6a74c86..6b216a680e8 100644 --- a/code/datums/voice.dm +++ b/code/datums/voice.dm @@ -1,4 +1,5 @@ #define GENDER_NAME_UNKNOW list(MALE = "Незнакомец", FEMALE = "Незнакомка", NEUTER = "Неизвестный", PLURAL = "Неизвестный") +#define FACE_MOD_SWITCH TRUE //Новая система голоса /datum/voice_model var/mob/host = null //Носитель этой хуеты @@ -8,7 +9,7 @@ var/real_voice_name = "Неизвестный" var/list/famous_voices = list() - //var/list/famous_faces = list() + var/list/famous_faces = list() /datum/voice_model/New(var/mob/owner_voice) if(owner_voice != null) @@ -66,14 +67,14 @@ return t.fields["name"] return "IDENTIFICATION ERROR" //Технически name это представление твоего ебала -/* BYOND... + /datum/voice_model/proc/GetManifestKnowFace(mob/face_target) for(var/datum/data/record/t in GLOB.data_core.general) if(t) if(t.fields["name"] == face_target.name) return t.fields["name"] return "IDENTIFICATION FACE ERROR" -*/ + /datum/voice_model/proc/TryStore(mob/target) if(src == target.adv_voice) @@ -92,7 +93,8 @@ if(!((target_H.wear_mask?.flags_inv & HIDENAME) || (target_H.head?.flags_inv & HIDENAME)) && prov_wear_id) - //famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND + if(FACE_MOD_SWITCH) + famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND famous_voices[target_H.adv_voice.voice_name] = prov_wear_id.registered_name . = TRUE else if(prov_wear_id) @@ -101,7 +103,7 @@ return //For examie -/* FUCKING BYOND +// FUCKING BYOND /datum/voice_model/proc/TryRecollectFace(mob/target) if(src == target.adv_voice) return target.name @@ -120,7 +122,7 @@ else . = get_gender_unknown_name(target_H.gender) return -*/ + //For hear /datum/voice_model/proc/TryRecollectVoice(mob/target) if(!ishuman(host)) //Мышки мышки знают все.... @@ -144,4 +146,14 @@ return TRUE return FALSE +//HELPERS + +/proc/GenDepartamentVoiceTree(mob/target, list/departments) + var/list/result = list() + + for(var/dep_flag in departments) //:catsmile: + result[dep_flag] = list(target.adv_voice.voice_name = target.name) + + return result + #undef GENDER_NAME_UNKNOW diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index bf84c9c8e5b..d8ba8006c74 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -1,5 +1,5 @@ /datum/job - + //ПРЕДУПРЕЖДЕНИЕ ВСЕМ И ВСЯ, НЕ ЗАБЫВАЙТЕ ПРОПИСЫВАТЬ ДЕПОРТАМЕНТ В Job_Departamenst.dm ИНАЧЕ НАХУЙ ВСЕ СЛОМАЕТСЯ //The name of the job var/title = "NOPE" diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 7f9a89f1b2c..0d79c46db5a 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -264,6 +264,8 @@ min_start_money = 200 max_start_money = 400 + college_department = list("Medical", "Science") + /datum/outfit/job/geneticist name = "Geneticist" jobtype = /datum/job/geneticist diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 8f9cab1050f..230e73b2e89 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -274,6 +274,8 @@ min_start_money = 200 max_start_money = 550 + college_department = list("Security", "Medical") //:catsmile: + /datum/outfit/job/brigdoc name = "Brig Physician" jobtype = /datum/job/brigdoc diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index e5079638c36..bcb45e9ed33 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -13,8 +13,6 @@ exp_type = EXP_TYPE_SILICON insurance_type = INSURANCE_TYPE_NONE - college_department = list() //Синтам не нужны коллеги, ибо у них имена потом идут - /datum/job/ai/equip(mob/living/carbon/human/H) if(!H) return 0 @@ -39,7 +37,6 @@ insurance_type = INSURANCE_TYPE_NONE defoult_dep = FALSE - college_department = list() /datum/job/cyborg/equip(mob/living/carbon/human/H) if(!H) diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 23f5989d43a..9c8c240d8c9 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -208,6 +208,8 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca min_start_money = 400 max_start_money = 700 + college_department = list("Command", "Security") + /datum/outfit/job/blueshield name = "Blueshield" jobtype = /datum/job/blueshield diff --git a/code/modules/economy/Job_Departments.dm b/code/modules/economy/Job_Departments.dm index f7d95c7d7b7..0b4781a0e43 100644 --- a/code/modules/economy/Job_Departments.dm +++ b/code/modules/economy/Job_Departments.dm @@ -11,6 +11,10 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering", /datum/job/captain/department = "Command" /datum/job/captain/head_position = 1 +/datum/job/nanotrasenrep/department = "Command" + +/datum/job/blueshield/department = "Command" + /datum/job/hop/department = "Support" /datum/job/hop/head_position = 1 @@ -22,26 +26,34 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering", /datum/job/hydro/department = "Support" -/datum/job/mining/department = "Support" - /datum/job/janitor/department = "Support" +/datum/job/clown/department = "Support" + +/datum/job/mime/department = "Support" + /datum/job/librarian/department = "Support" /datum/job/lawyer/department = "Support" /datum/job/chaplain/department = "Support" +/datum/job/explorer/department = "Support" + /datum/job/qm/department = "Cargo" /datum/job/qm/head_position = 1 /datum/job/cargo_tech/department = "Cargo" +/datum/job/mining/department = "Cargo" + /datum/job/chief_engineer/department = "Engineering" /datum/job/chief_engineer/head_position = 1 /datum/job/engineer/department = "Engineering" +/datum/job/mechanic/department = "Engineering" + /datum/job/atmos/department = "Engineering" /datum/job/engineer/trainee/department = "Engineering" @@ -51,10 +63,16 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering", /datum/job/doctor/department = "Medical" +/datum/job/coroner/department = "Medical" + /datum/job/chemist/department = "Medical" +/datum/job/virologist/department = "Medical" + /datum/job/geneticist/department = "Medical" +/datum/job/paramedic/department = "Medical" + /datum/job/psychiatrist/department = "Medical" /datum/job/doctor/intern/department = "Medical" @@ -77,3 +95,12 @@ GLOBAL_LIST_INIT(station_departments, list("Command", "Medical", "Engineering", /datum/job/officer/department = "Security" +/datum/job/brigdoc/department = "Security" + +/datum/job/pilot/department = "Security" + +/datum/job/judge/department = "Security" + +/datum/job/lawyer/department = "Security" + + diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6538ad24030..65c003ec848 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1964,7 +1964,6 @@ Eyes need to have significantly high darksight to shine unless the mob has the X if(istype(potential_spine)) carrydelay *= potential_spine.athletics_boost_multiplier */ - if(carrydelay <= 3 SECONDS) skills_space = " very quickly" else if(carrydelay <= 4 SECONDS) @@ -1980,5 +1979,6 @@ Eyes need to have significantly high darksight to shine unless the mob has the X if(!can_be_firemanned(target) || incapacitated(INC_IGNORE_GRABBED) || target.buckled) visible_message(span_warning("[src] fails to fireman carry [target]!")) return - + return buckle_mob(target, TRUE, FALSE, CARRIER_NEEDS_ARM) //checkloc is false because we usually grab people from nearest tile +//НЕ ВНОСИТЬ ИЗМЕНЕНИЯ, ЮБИЛЕЙНОЕ ЧИСЛО СТРОК diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index bcc9abbb6b4..7e244316cc5 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -8,6 +8,15 @@ return " (as [get_id_name("Unknown")])" return ..() +/mob/living/carbon/human/proc/GetDescription() + var/datum/species/prom_spec = dna.species + if(age < 24) + return "Young [prom_spec.name] [gender]" + if(age < 45) + return "Mature [prom_spec.name] [gender]" + if(age < 60) + return "Old [prom_spec.name] [gender]" + return "Ancient [prom_spec.name] [gender]" /mob/living/carbon/human/say_understands(mob/other, datum/language/speaking = null) if(dna?.species?.can_understand(other)) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 887fdae83a2..3befd346abf 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -525,7 +525,7 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM check_eye(src) return TRUE -/mob/proc/rename_character(oldname, newname, mass_update = FALSE) +/mob/proc/rename_character(oldname, newname, list/mass_update = list()) if(!newname) return 0 real_name = newname @@ -578,11 +578,11 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM pos = findtextEx_char(objective.explanation_text, oldname) objective.explanation_text = copytext_char(objective.explanation_text, 1, pos)+newname+copytext_char(objective.explanation_text, pos+length) UpdateVoice() - if(mass_update) - SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, list("AbsolutePomny" = (list((adv_voice.voice_name) = name)))) + if(LAZYLEN(mass_update) != 0) + SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GenDepartamentVoiceTree(src, mass_update)) return 1 -/mob/proc/rename_self(var/role, var/allow_numbers = FALSE, var/force = FALSE, var/mass_update = FALSE) +/mob/proc/rename_self(var/role, var/allow_numbers = FALSE, var/force = FALSE, list/mass_update = list()) spawn(0) var/oldname = real_name diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 90ba383859d..a3290052804 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -614,15 +614,14 @@ // stop_sound_channel(CHANNEL_LOBBYMUSIC) client?.tgui_panel?.stop_music() - if(mind) mind.active = 0 //we wish to transfer the key manually if(mind.assigned_role == JOB_TITLE_CLOWN) //give them a clownname if they are a clown new_character.real_name = pick(GLOB.clown_names) //I hate this being here of all places but unfortunately dna is based on real_name! - new_character.rename_self(JOB_TITLE_CLOWN, mass_update = TRUE) + new_character.rename_self(JOB_TITLE_CLOWN, mass_update = list("Support")) else if(mind.assigned_role == JOB_TITLE_MIME) new_character.real_name = pick(GLOB.mime_names) - new_character.rename_self(JOB_TITLE_MIME, mass_update = TRUE) + new_character.rename_self(JOB_TITLE_MIME, mass_update = list("Support")) mind.set_original_mob(new_character) mind.transfer_to(new_character) //won't transfer key since the mind is not active GLOB.human_names_list += new_character.real_name From 9b42ae5f05b6682a98b96c5f131e627b5ff3d671 Mon Sep 17 00:00:00 2001 From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com> Date: Wed, 8 Jan 2025 02:37:29 +0300 Subject: [PATCH 8/9] nanofix --- code/datums/datacore.dm | 1 - code/datums/voice.dm | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 61b7637e358..a2fb31406c0 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -156,7 +156,6 @@ GLOBAL_VAR_INIT(record_id_num, 1001) for(var/dep_flag in prom_job.college_department) //:catsmile: if(!isnull(GLOB.capitalist_manifest?[dep_flag])) - to_chat(world, "[dep_flag] [prom_job] [H.real_name]") GLOB.capitalist_manifest[dep_flag][prom_voice] = H.real_name else GLOB.capitalist_manifest[dep_flag] = list((prom_voice) = (H.real_name)) diff --git a/code/datums/voice.dm b/code/datums/voice.dm index 6b216a680e8..62e4532a3e0 100644 --- a/code/datums/voice.dm +++ b/code/datums/voice.dm @@ -93,8 +93,8 @@ if(!((target_H.wear_mask?.flags_inv & HIDENAME) || (target_H.head?.flags_inv & HIDENAME)) && prov_wear_id) - if(FACE_MOD_SWITCH) - famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND + //if(FACE_MOD_SWITCH) + // famous_faces[target_H.name] = prov_wear_id.registered_name //FUCK BYOND famous_voices[target_H.adv_voice.voice_name] = prov_wear_id.registered_name . = TRUE else if(prov_wear_id) From ae87b0165ed942845d11b6c006db4dd9dfbaf171 Mon Sep 17 00:00:00 2001 From: Pelmenik123 <108460733+Pelmenik123@users.noreply.github.com> Date: Wed, 8 Jan 2025 15:48:20 +0300 Subject: [PATCH 9/9] =?UTF-8?q?=D0=BF=D0=B5=D0=BD=D0=B4=D0=BE=D1=81=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B0=D0=BF=D0=B4=D0=B5=D0=B9=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/__DEFINES/dcs/signals.dm | 1 - code/datums/datacore.dm | 4 +--- code/datums/voice.dm | 18 +++++++----------- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 91edf847e41..ac0bd476ae2 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -77,7 +77,6 @@ //signal for mass roundstart store voice (very english) #define COMSIG_SPECIAL_MASS_STORE_VOICE "store_voice" -#define COMSIG_JUST_LIST_ADD_VOICE "list_add_voice" //signal for human store ebalo //#define COMSIG_STORE_FACE "store_face" diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index a2fb31406c0..36c3a11bd70 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -149,7 +149,7 @@ GLOBAL_VAR_INIT(record_id_num, 1001) var/id = num2hex(GLOB.record_id_num++, 6) H.adv_voice.RegSignals() - H.UpdateVoice() //На всякий + H.UpdateVoice() var/prom_voice = H.adv_voice.voice_name var/datum/job/prom_job = SSjobs.GetJob(H.job) @@ -160,8 +160,6 @@ GLOBAL_VAR_INIT(record_id_num, 1001) else GLOB.capitalist_manifest[dep_flag] = list((prom_voice) = (H.real_name)) - //SEND_GLOBAL_SIGNAL(COMSIG_SPECIAL_MASS_STORE_VOICE, GLOB.capitalist_manifest) - //При создании рекордсов еще берется и голос, боже помилуй чтобы это ничего не сломало //General Record var/datum/data/record/G = new() G.fields["id"] = id diff --git a/code/datums/voice.dm b/code/datums/voice.dm index 62e4532a3e0..0e1b75f016b 100644 --- a/code/datums/voice.dm +++ b/code/datums/voice.dm @@ -2,7 +2,7 @@ #define FACE_MOD_SWITCH TRUE //Новая система голоса /datum/voice_model - var/mob/host = null //Носитель этой хуеты + var/mob/host = null var/tts_seed_string = "Arthas" var/voice_gender = MALE var/voice_name = "Неизвестный" @@ -23,13 +23,10 @@ /datum/voice_model/proc/RegSignals() RegisterSignal(SSdcs, COMSIG_SPECIAL_MASS_STORE_VOICE, PROC_REF(SpecialMassAddVoice)) -//Специфическая функция которая добавляет что нужно короче /datum/voice_model/proc/SpecialMassAddVoice(suka, list/list_voice) SIGNAL_HANDLER - var/datum/job/prom_job = SSjobs.GetJob(host.job) //Нужно чтобы небыло предупеждений + var/datum/job/prom_job = SSjobs.GetJob(host.job) //WARNING. Fuking byond var/list/prom_data = list_voice?[prom_job.department] - if(list_voice?["AbsolutePomny"]) - famous_voices |= list_voice["AbsolutePomny"] if(prom_data) famous_voices |= prom_data @@ -59,14 +56,13 @@ real_voice_name = voice_to_copy.real_voice_name famous_voices = voice_to_copy.famous_voices */ -//было две бутылки, словарь или два прока. Я сел на вторую + /datum/voice_model/proc/GetManifestKnowVoice() for(var/datum/data/record/t in GLOB.data_core.general) if(t) if(t.fields["voice"] == voice_name) return t.fields["name"] return "IDENTIFICATION ERROR" -//Технически name это представление твоего ебала /datum/voice_model/proc/GetManifestKnowFace(mob/face_target) for(var/datum/data/record/t in GLOB.data_core.general) @@ -75,12 +71,11 @@ return t.fields["name"] return "IDENTIFICATION FACE ERROR" - /datum/voice_model/proc/TryStore(mob/target) if(src == target.adv_voice) return TRUE . = FALSE - if(!ishuman(target)) //Зачем мне знать как зовут мышей :badguy: + if(!ishuman(target)) return target.name var/mob/living/carbon/human/target_H = target var/obj/item/card/id/prov_wear_id = null @@ -104,10 +99,11 @@ //For examie // FUCKING BYOND +/* NOT USED /datum/voice_model/proc/TryRecollectFace(mob/target) if(src == target.adv_voice) return target.name - if(!ishuman(target)) //:Roflcat: Чтобы имена мышей знать сразу + if(!ishuman(target)) //:Roflcat: return target.name var/mob/living/carbon/human/target_H = target @@ -122,7 +118,7 @@ else . = get_gender_unknown_name(target_H.gender) return - +*/ //For hear /datum/voice_model/proc/TryRecollectVoice(mob/target) if(!ishuman(host)) //Мышки мышки знают все....