From 7e4875ec74ebe167f8d772d19bf7d54d4f5deaca Mon Sep 17 00:00:00 2001 From: Kocma-san Date: Tue, 1 Jul 2025 01:17:52 +0700 Subject: [PATCH 1/6] blep --- code/modules/paperwork/paper.dm | 29 +++++++++++++++++++ .../tgui/interfaces/PaperSheet/Preview.tsx | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c9162079d63..47d0e9e9cc3 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -631,6 +631,12 @@ return TRUE if("add_text") var/paper_input = params["text"] + + if(findtext_char(paper_input, regex(@"\%.+\%"))) + paper_input = replacetext_char(paper_input, "%sig%", "[user.real_name]") + paper_input = replacetext_char(paper_input, "%time%", "[time2text(world.timeofday, "hh:mm", NO_TIMEZONE)]") + paper_input = replacetext_char(paper_input, "%date%", "[time2text(world.timeofday, "DD/MM", NO_TIMEZONE)]/[CURRENT_STATION_YEAR]") + var/this_input_length = length_char(paper_input) if(this_input_length == 0) @@ -668,6 +674,29 @@ // Safe to assume there are writing implement details as user.can_write(...) fails with an invalid writing implement. var/writing_implement_data = holding.get_writing_implement_details() + // FLUFF START + var/regex/reg = regex(@"\%\|(.+?)(?:\{(\d+)\})?\|\%|(\[_+\])", "g") + var/current_field_id = input_field_count + var/list/new_field_to_add = list() + while(reg.Find_char(paper_input)) + message_admins("[reg.match] - [reg.group[1]] - [reg.group[2]] - [reg.index] - [reg.next]") + if(!isnull(reg.group[1])) + add_field_input( + "[current_field_id]", + reg.group[1], + writing_implement_data["font"], + writing_implement_data["color"], + writing_implement_data["use_bold"], + user.real_name + ) + new_field_to_add += list(list(reg.match, max(length(reg.group[1]) + 1, text2num(reg.group[2])))) + current_field_id += 1 + + for(var/field in new_field_to_add) + var/field_text = "\[[jointext(new/list(field[2]), "_")]\]" // Creates a string like `[___]`, where `_` is repeats field[2] times + paper_input = replacetext_char(paper_input, field[1], field_text) + // FLUFF END + playsound(src, SFX_WRITING_PEN, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT + 3, ignore_walls = FALSE) add_raw_text(paper_input, writing_implement_data["font"], writing_implement_data["color"], writing_implement_data["use_bold"], check_rights_for(user?.client, R_FUN)) diff --git a/tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx b/tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx index fdcc3671116..8a23749c5b6 100644 --- a/tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx +++ b/tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx @@ -497,7 +497,7 @@ export class PreviewView extends Component { input.defaultValue = fieldData.raw_text; input.disabled = true; - return `[${input.outerHTML}]`; + return `${input.outerHTML}`; }; render() { From 79c222890a826128635cd662e14dd68317ba2b6c Mon Sep 17 00:00:00 2001 From: Kocma-san Date: Tue, 1 Jul 2025 04:41:57 +0700 Subject: [PATCH 2/6] Update paper.dm --- code/modules/paperwork/paper.dm | 69 ++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 47d0e9e9cc3..5efbc3393db 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -632,11 +632,6 @@ if("add_text") var/paper_input = params["text"] - if(findtext_char(paper_input, regex(@"\%.+\%"))) - paper_input = replacetext_char(paper_input, "%sig%", "[user.real_name]") - paper_input = replacetext_char(paper_input, "%time%", "[time2text(world.timeofday, "hh:mm", NO_TIMEZONE)]") - paper_input = replacetext_char(paper_input, "%date%", "[time2text(world.timeofday, "DD/MM", NO_TIMEZONE)]/[CURRENT_STATION_YEAR]") - var/this_input_length = length_char(paper_input) if(this_input_length == 0) @@ -664,38 +659,58 @@ return TRUE var/current_length = get_total_length() + /* // FLUFFY FRONTIER EDIT START - этот же кусок кода теперь чуть ниже var/new_length = current_length + this_input_length // tgui should prevent this outcome. if(new_length > MAX_PAPER_LENGTH) log_paper("[key_name(user)] tried to write to [name] when it would exceed the length limit by [new_length - MAX_PAPER_LENGTH] characters: \"[paper_input]\"") return TRUE + */ // FLUFFY FRONTIER EDIT END // Safe to assume there are writing implement details as user.can_write(...) fails with an invalid writing implement. var/writing_implement_data = holding.get_writing_implement_details() - // FLUFF START - var/regex/reg = regex(@"\%\|(.+?)(?:\{(\d+)\})?\|\%|(\[_+\])", "g") - var/current_field_id = input_field_count - var/list/new_field_to_add = list() - while(reg.Find_char(paper_input)) - message_admins("[reg.match] - [reg.group[1]] - [reg.group[2]] - [reg.index] - [reg.next]") - if(!isnull(reg.group[1])) - add_field_input( - "[current_field_id]", - reg.group[1], - writing_implement_data["font"], - writing_implement_data["color"], - writing_implement_data["use_bold"], - user.real_name - ) - new_field_to_add += list(list(reg.match, max(length(reg.group[1]) + 1, text2num(reg.group[2])))) - current_field_id += 1 - - for(var/field in new_field_to_add) - var/field_text = "\[[jointext(new/list(field[2]), "_")]\]" // Creates a string like `[___]`, where `_` is repeats field[2] times - paper_input = replacetext_char(paper_input, field[1], field_text) - // FLUFF END + // FLUFFY FRONTIER ADDITION START + if(findtext_char(paper_input, regex(@"\%.+\%"))) + paper_input = replacetext_char(paper_input, "%sig%", "[user.real_name]") + paper_input = replacetext_char(paper_input, "%time%", "[time2text(world.timeofday, "hh:mm", NO_TIMEZONE)]") + paper_input = replacetext_char(paper_input, "%date%", "[time2text(world.timeofday, "DD/MM", NO_TIMEZONE)]/[CURRENT_STATION_YEAR]") + + // Нам необходимо так же искать и обычные поля (`[___]`), ведь иначе мы не сможешь высчитать правильный id для данных поля. + // По этой причине в этой регулярке и имеется чать "|(\[_+\])". + // Сама регулярка ищет данные вида "%|текст{длина_поля}|%". Часть "{длина_поля}" является необязательной. + // Текст находится в первой группе, длина поля во второй группе. + var/regex/reg = regex(@"\%\|(.+?)(?:\{(\d+)\})?\|\%|(\[_+\])", "g") + var/current_field_id = input_field_count + var/list/new_field_to_add = list() // list(list(`%|текст|%`, `длина этого поля`)) <- посмотирте код дальше, может поймете лучше, что я хотел сказать + while(reg.Find_char(paper_input)) + if(!isnull(reg.group[1])) // Если нет текста в первой группе - значит это обычное поле + add_field_input( + "[current_field_id]", + reg.group[1], + writing_implement_data["font"], + writing_implement_data["color"], + writing_implement_data["use_bold"], + user.real_name + ) + // Длина нового поля это макимальное из указанной длины_поля и (длины текста + 1) + new_field_to_add += list(list(reg.match, max(length(reg.group[1]) + 1, text2num(reg.group[2])))) + current_field_id += 1 + + // Замена %|текст|% на классическое поле [____] + for(var/field in new_field_to_add) + var/field_text = "\[[jointext(new/list(field[2]), "_")]\]" // Creates a string like `[___]`, where `_` is repeats field[2] times + paper_input = replacetext_char(paper_input, field[1], field_text) + + this_input_length = length_char(paper_input) + var/new_length = current_length + this_input_length + + // tgui should prevent this outcome. + if(new_length > MAX_PAPER_LENGTH) + log_paper("[key_name(user)] tried to write to [name] when it would exceed the length limit by [new_length - MAX_PAPER_LENGTH] characters: \"[paper_input]\"") + return TRUE + // FLUFFY FRONTIER ADDITION START playsound(src, SFX_WRITING_PEN, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT + 3, ignore_walls = FALSE) From 6f7e137d2c55cc9cc75dc8b23462c1807ecff0c8 Mon Sep 17 00:00:00 2001 From: Kocma-san Date: Tue, 1 Jul 2025 04:46:59 +0700 Subject: [PATCH 3/6] =?UTF-8?q?=D0=BC=D0=B4=D0=BB=D1=8C=D0=BD=D1=81=D1=82?= =?UTF-8?q?=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/modules/paperwork/paper.dm | 2 -- tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 5efbc3393db..8cf62019b67 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -631,7 +631,6 @@ return TRUE if("add_text") var/paper_input = params["text"] - var/this_input_length = length_char(paper_input) if(this_input_length == 0) @@ -711,7 +710,6 @@ log_paper("[key_name(user)] tried to write to [name] when it would exceed the length limit by [new_length - MAX_PAPER_LENGTH] characters: \"[paper_input]\"") return TRUE // FLUFFY FRONTIER ADDITION START - playsound(src, SFX_WRITING_PEN, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT + 3, ignore_walls = FALSE) add_raw_text(paper_input, writing_implement_data["font"], writing_implement_data["color"], writing_implement_data["use_bold"], check_rights_for(user?.client, R_FUN)) diff --git a/tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx b/tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx index 8a23749c5b6..59e0bca5ab5 100644 --- a/tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx +++ b/tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx @@ -497,7 +497,7 @@ export class PreviewView extends Component { input.defaultValue = fieldData.raw_text; input.disabled = true; - return `${input.outerHTML}`; + return `${input.outerHTML}`; // FLUFFY FRONTIER EDIT - ORIGINAL: return `[${input.outerHTML}]`; }; render() { From 020eb91ab7976ff382dd46225c7022e1316ffe4a Mon Sep 17 00:00:00 2001 From: Kocma-san Date: Tue, 1 Jul 2025 05:34:35 +0700 Subject: [PATCH 4/6] Update paper.dm --- code/modules/paperwork/paper.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 8cf62019b67..7d2de26fd05 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -676,15 +676,15 @@ paper_input = replacetext_char(paper_input, "%time%", "[time2text(world.timeofday, "hh:mm", NO_TIMEZONE)]") paper_input = replacetext_char(paper_input, "%date%", "[time2text(world.timeofday, "DD/MM", NO_TIMEZONE)]/[CURRENT_STATION_YEAR]") - // Нам необходимо так же искать и обычные поля (`[___]`), ведь иначе мы не сможешь высчитать правильный id для данных поля. - // По этой причине в этой регулярке и имеется чать "|(\[_+\])". + // В этой регулярке и имеется чать "|(\[_+\])", так как нам необходимо так же искать и обычные поля (`[___]`), + // ведь иначе мы не сможем высчитать правильный id для автозаполнения полей. // Сама регулярка ищет данные вида "%|текст{длина_поля}|%". Часть "{длина_поля}" является необязательной. // Текст находится в первой группе, длина поля во второй группе. var/regex/reg = regex(@"\%\|(.+?)(?:\{(\d+)\})?\|\%|(\[_+\])", "g") var/current_field_id = input_field_count - var/list/new_field_to_add = list() // list(list(`%|текст|%`, `длина этого поля`)) <- посмотирте код дальше, может поймете лучше, что я хотел сказать + var/list/new_field_to_add = list() // list(list(`%|текст|%`, `длина этого поля`)) <- посмотирте код дальше, может поймете лучше, что я хотел сказать. while(reg.Find_char(paper_input)) - if(!isnull(reg.group[1])) // Если нет текста в первой группе - значит это обычное поле + if(!isnull(reg.group[1])) // Если первая группа пустая - значит это обычное поле и мы не добавляем никаких данных, а только увеличиваем счетчик полей. add_field_input( "[current_field_id]", reg.group[1], @@ -709,7 +709,7 @@ if(new_length > MAX_PAPER_LENGTH) log_paper("[key_name(user)] tried to write to [name] when it would exceed the length limit by [new_length - MAX_PAPER_LENGTH] characters: \"[paper_input]\"") return TRUE - // FLUFFY FRONTIER ADDITION START + // FLUFFY FRONTIER ADDITION END playsound(src, SFX_WRITING_PEN, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT + 3, ignore_walls = FALSE) add_raw_text(paper_input, writing_implement_data["font"], writing_implement_data["color"], writing_implement_data["use_bold"], check_rights_for(user?.client, R_FUN)) From 614445a8a78c3a64a3aa794f83aba0a64f332ea8 Mon Sep 17 00:00:00 2001 From: Cornka <112967882+Kocma-san@users.noreply.github.com> Date: Thu, 25 Sep 2025 19:41:47 +0700 Subject: [PATCH 5/6] Update code/modules/paperwork/paper.dm --- code/modules/paperwork/paper.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 7d2de26fd05..90d4c666be4 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -672,7 +672,7 @@ // FLUFFY FRONTIER ADDITION START if(findtext_char(paper_input, regex(@"\%.+\%"))) - paper_input = replacetext_char(paper_input, "%sig%", "[user.real_name]") + paper_input = replacetext_char(paper_input, "%sign%", "[user.real_name]") paper_input = replacetext_char(paper_input, "%time%", "[time2text(world.timeofday, "hh:mm", NO_TIMEZONE)]") paper_input = replacetext_char(paper_input, "%date%", "[time2text(world.timeofday, "DD/MM", NO_TIMEZONE)]/[CURRENT_STATION_YEAR]") From f649e12b6a171e4b160cb06824c5af8e05d89e1c Mon Sep 17 00:00:00 2001 From: Cornka <112967882+Kocma-san@users.noreply.github.com> Date: Fri, 3 Apr 2026 05:08:58 +0700 Subject: [PATCH 6/6] less invasive modular change --- code/modules/paperwork/paper.dm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 90d4c666be4..e9a53e1ac5b 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -658,14 +658,12 @@ return TRUE var/current_length = get_total_length() - /* // FLUFFY FRONTIER EDIT START - этот же кусок кода теперь чуть ниже var/new_length = current_length + this_input_length // tgui should prevent this outcome. if(new_length > MAX_PAPER_LENGTH) log_paper("[key_name(user)] tried to write to [name] when it would exceed the length limit by [new_length - MAX_PAPER_LENGTH] characters: \"[paper_input]\"") return TRUE - */ // FLUFFY FRONTIER EDIT END // Safe to assume there are writing implement details as user.can_write(...) fails with an invalid writing implement. var/writing_implement_data = holding.get_writing_implement_details() @@ -702,11 +700,7 @@ var/field_text = "\[[jointext(new/list(field[2]), "_")]\]" // Creates a string like `[___]`, where `_` is repeats field[2] times paper_input = replacetext_char(paper_input, field[1], field_text) - this_input_length = length_char(paper_input) - var/new_length = current_length + this_input_length - - // tgui should prevent this outcome. - if(new_length > MAX_PAPER_LENGTH) + if(get_total_length() + length_char(paper_input) > MAX_PAPER_LENGTH) log_paper("[key_name(user)] tried to write to [name] when it would exceed the length limit by [new_length - MAX_PAPER_LENGTH] characters: \"[paper_input]\"") return TRUE // FLUFFY FRONTIER ADDITION END