From 0d139a55493a766c3fff9a25ed11153514ef3de5 Mon Sep 17 00:00:00 2001 From: Carlen White Date: Tue, 21 May 2019 23:03:06 -0400 Subject: [PATCH 1/4] Batch messages on checking yourself Instead of sending a bunch of to_chat() functions, it'll just create an array and send it all out at once instead of freezing the client for a moment. --- .../mob/living/carbon/human/human_defense.dm | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index b66ebdb001..d87cf0783d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -649,6 +649,7 @@ if(health >= 0) if(src == M) + var/to_send = list() visible_message("[src] examines [p_them()]self.", \ "You check yourself for injuries.") @@ -695,53 +696,55 @@ var/no_damage if(status == "OK" || status == "no damage") no_damage = TRUE - to_chat(src, "\t Your [LB.name] [has_trait(TRAIT_SELF_AWARE) ? "has" : "is"] [status].") + to_send += "\t Your [LB.name] [has_trait(TRAIT_SELF_AWARE) ? "has" : "is"] [status]." for(var/obj/item/I in LB.embedded_objects) - to_chat(src, "\t There is \a [I] embedded in your [LB.name]!") + to_send += "\t There is \a [I] embedded in your [LB.name]!" for(var/t in missing) - to_chat(src, "Your [parse_zone(t)] is missing!") + to_send += "Your [parse_zone(t)] is missing!" if(bleed_rate) - to_chat(src, "You are bleeding!") + to_send += "You are bleeding!" if(getStaminaLoss()) if(getStaminaLoss() > 30) - to_chat(src, "You're completely exhausted.") + to_send += "You're completely exhausted." else - to_chat(src, "You feel fatigued.") + to_send += "You feel fatigued." if(has_trait(TRAIT_SELF_AWARE)) if(toxloss) if(toxloss > 10) - to_chat(src, "You feel sick.") + to_send += "You feel sick." else if(toxloss > 20) - to_chat(src, "You feel nauseated.") + to_send += "You feel nauseated." else if(toxloss > 40) - to_chat(src, "You feel very unwell!") + to_send += "You feel very unwell!" if(oxyloss) if(oxyloss > 10) - to_chat(src, "You feel lightheaded.") + to_send += "You feel lightheaded." else if(oxyloss > 20) - to_chat(src, "Your thinking is clouded and distant.") + to_send += "Your thinking is clouded and distant." else if(oxyloss > 30) - to_chat(src, "You're choking!") + to_send += "You're choking!" switch(nutrition) if(NUTRITION_LEVEL_FULL to INFINITY) - to_chat(src, "You're completely stuffed!") + to_send += "You're completely stuffed!" if(NUTRITION_LEVEL_WELL_FED to NUTRITION_LEVEL_FULL) - to_chat(src, "You're well fed!") + to_send += "You're well fed!" if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) - to_chat(src, "You're not hungry.") + to_send += "You're not hungry." if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) - to_chat(src, "You could use a bite to eat.") + to_send += "You could use a bite to eat." if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) - to_chat(src, "You feel quite hungry.") + to_send += "You feel quite hungry." if(0 to NUTRITION_LEVEL_STARVING) - to_chat(src, "You're starving!") + to_send += "You're starving!" if(roundstart_quirks.len) - to_chat(src, "You have these quirks: [get_trait_string()].") + to_send += "You have these quirks: [get_trait_string()]." + + to_chat(src, jointext(to_send, "\n")) else if(wear_suit) wear_suit.add_fingerprint(M) From d375284f4258a6a30b9481ebcc6a25e78df32239 Mon Sep 17 00:00:00 2001 From: Carlen White Date: Wed, 22 May 2019 09:25:25 -0400 Subject: [PATCH 2/4] Concating a string instead of a list As per request. --- .../mob/living/carbon/human/human_defense.dm | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index d87cf0783d..fabb6aba93 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -649,7 +649,7 @@ if(health >= 0) if(src == M) - var/to_send = list() + var/to_send = "" visible_message("[src] examines [p_them()]self.", \ "You check yourself for injuries.") @@ -696,55 +696,55 @@ var/no_damage if(status == "OK" || status == "no damage") no_damage = TRUE - to_send += "\t Your [LB.name] [has_trait(TRAIT_SELF_AWARE) ? "has" : "is"] [status]." + to_send += "\t Your [LB.name] [has_trait(TRAIT_SELF_AWARE) ? "has" : "is"] [status].\n" for(var/obj/item/I in LB.embedded_objects) - to_send += "\t There is \a [I] embedded in your [LB.name]!" + to_send += "\t There is \a [I] embedded in your [LB.name]!\n" for(var/t in missing) - to_send += "Your [parse_zone(t)] is missing!" + to_send += "Your [parse_zone(t)] is missing!\n" if(bleed_rate) - to_send += "You are bleeding!" + to_send += "You are bleeding!\n" if(getStaminaLoss()) if(getStaminaLoss() > 30) - to_send += "You're completely exhausted." + to_send += "You're completely exhausted.\n" else - to_send += "You feel fatigued." + to_send += "You feel fatigued.\n" if(has_trait(TRAIT_SELF_AWARE)) if(toxloss) if(toxloss > 10) - to_send += "You feel sick." + to_send += "You feel sick.\n" else if(toxloss > 20) - to_send += "You feel nauseated." + to_send += "You feel nauseated.\n" else if(toxloss > 40) - to_send += "You feel very unwell!" + to_send += "You feel very unwell!\n" if(oxyloss) if(oxyloss > 10) - to_send += "You feel lightheaded." + to_send += "You feel lightheaded.\n" else if(oxyloss > 20) - to_send += "Your thinking is clouded and distant." + to_send += "Your thinking is clouded and distant.\n" else if(oxyloss > 30) - to_send += "You're choking!" + to_send += "You're choking!\n" switch(nutrition) if(NUTRITION_LEVEL_FULL to INFINITY) - to_send += "You're completely stuffed!" + to_send += "You're completely stuffed!\n" if(NUTRITION_LEVEL_WELL_FED to NUTRITION_LEVEL_FULL) - to_send += "You're well fed!" + to_send += "You're well fed!\n" if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) - to_send += "You're not hungry." + to_send += "You're not hungry.\n" if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) - to_send += "You could use a bite to eat." + to_send += "You could use a bite to eat.\n" if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) - to_send += "You feel quite hungry." + to_send += "You feel quite hungry.\n" if(0 to NUTRITION_LEVEL_STARVING) - to_send += "You're starving!" + to_send += "You're starving!\n" if(roundstart_quirks.len) - to_send += "You have these quirks: [get_trait_string()]." + to_send += "You have these quirks: [get_trait_string()].\n" - to_chat(src, jointext(to_send, "\n")) + to_chat(src, to_send) else if(wear_suit) wear_suit.add_fingerprint(M) From 3504f15c01ba11f30a4d99adb31a8502bc5c3179 Mon Sep 17 00:00:00 2001 From: Carlen White Date: Sun, 14 Jul 2019 20:29:23 -0400 Subject: [PATCH 3/4] Travis Bump --- code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index fabb6aba93..1650612443 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -751,7 +751,7 @@ else if(w_uniform) w_uniform.add_fingerprint(M) - ..() + ..() /mob/living/carbon/human/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone) From 7c0cd0e40dbbf9c39aac3c47d4824f7d8994ab48 Mon Sep 17 00:00:00 2001 From: Carlen White Date: Sun, 14 Jul 2019 21:01:20 -0400 Subject: [PATCH 4/4] Removes duplicate belts.dmi --- icons/obj/clothing/belts.dm | Bin 12032 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 icons/obj/clothing/belts.dm diff --git a/icons/obj/clothing/belts.dm b/icons/obj/clothing/belts.dm deleted file mode 100644 index 34c716f5d8361898d5341f8badd21444cf1b1692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12032 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