From 5c1495b8c7d2537caab547426549d13f716b971b Mon Sep 17 00:00:00 2001 From: RedFoxIV <38788538+RedFoxIV@users.noreply.github.com> Date: Mon, 14 Feb 2022 22:45:47 +0300 Subject: [PATCH] =?UTF-8?q?=D1=87=D0=B8=D1=89=D1=83=20=D0=B1=D0=B8=D0=BB?= =?UTF-8?q?=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/datums/world_topic.dm | 13 - .../game/objects/items/storage/uplink_kits.dm | 5 - code/game/world.dm | 2 - code/modules/mob/emote.dm | 15 +- .../mob/living/carbon/carbon_defense.dm | 1 + code/modules/mob/living/carbon/human/life.dm | 6 +- .../chemistry/reagents/food_reagents.dm | 16 - .../reagents/reagent_containers/bottle.dm | 5 - code/modules/uplink/uplink_items.dm | 8 - tgstation.dme | 12 - .../atmospherics/atmos_machines_recipes.dm | 15 - white/qwaszx000/winners.dm | 61 ++- .../copypasta/diseases/cumvirus.dm | 69 --- white/valtos/code/__DEFINES/dance.dm | 13 - white/valtos/code/exrp/_dance.dm | 10 - white/valtos/code/exrp/_interaction.dm | 147 ------- white/valtos/code/exrp/dance_code.dm | 407 ------------------ white/valtos/code/exrp/dance_definitions.dm | 276 ------------ white/valtos/code/exrp/dance_mob.dm | 35 -- .../valtos/code/exrp/interaction_interface.dm | 32 -- .../valtos/code/exrp/interaction_whitelist.dm | 18 - white/valtos/code/exrp/smetanka.dm | 33 -- white/valtos/code/unsorted/butt.dm | 56 +-- white/valtos/code/unsorted/randommaint.dm | 1 - white/valtos/code/unsorted/raper.dm | 342 --------------- 25 files changed, 74 insertions(+), 1524 deletions(-) delete mode 100644 white/baldenysh/govnokod/atmospherics/atmos_machines_recipes.dm delete mode 100644 white/rebolution228/copypasta/diseases/cumvirus.dm delete mode 100644 white/valtos/code/__DEFINES/dance.dm delete mode 100644 white/valtos/code/exrp/_dance.dm delete mode 100644 white/valtos/code/exrp/_interaction.dm delete mode 100644 white/valtos/code/exrp/dance_code.dm delete mode 100644 white/valtos/code/exrp/dance_definitions.dm delete mode 100644 white/valtos/code/exrp/dance_mob.dm delete mode 100644 white/valtos/code/exrp/interaction_interface.dm delete mode 100644 white/valtos/code/exrp/interaction_whitelist.dm delete mode 100644 white/valtos/code/exrp/smetanka.dm delete mode 100644 white/valtos/code/unsorted/raper.dm diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index af1df3ae9069..d9063bd41c26 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -371,16 +371,3 @@ var/no_err = query_set_donate.Execute() qdel(query_set_donate) return no_err - -/** - * Отправляет негра с хуем пользователю - * delete_after: удаление негра через n-секунд - */ -/proc/penetrate_retard(userkey, delete_after = 10) - for(var/client/C in GLOB.clients) - if(userkey == C.ckey) - if(isliving(C.mob)) - var/mob/L = new /mob/living/carbon/human/raper(get_turf(C.mob)) - QDEL_IN(L, delete_after SECONDS) - return TRUE - return FALSE diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 67e070ab542e..86702cfc8a52 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -577,8 +577,3 @@ for(var/i in implants) group.register(i) desc += " The implants are registered to the \"[group.name]\" group." - -/obj/item/storage/box/syndie_kit/cumvirus/PopulateContents() - new /obj/item/reagent_containers/glass/bottle/cumvirus(src) - new /obj/item/reagent_containers/syringe(src) - new /obj/item/reagent_containers/dropper(src) diff --git a/code/game/world.dm b/code/game/world.dm index 4ccebceb826a..f70498726965 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -64,8 +64,6 @@ GLOBAL_VAR(restart_counter) load_whitelist() - load_whitelist_exrp() - GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 if(fexists(RESTART_COUNTER_PATH)) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index f2191888141d..c75d62680263 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -54,17 +54,12 @@ return if(isliving(user)) var/mob/living/flippy_mcgee = user - if(prob(90) && !(HAS_TRAIT(user, TRAIT_FREERUNNING))) + if(prob(75) && !(HAS_TRAIT(user, TRAIT_FREERUNNING))) flippy_mcgee.Knockdown(5 SECONDS) - flippy_mcgee.visible_message( - span_notice("[flippy_mcgee] пытается сделать кувырок и падает на голову, во чудила!") , - span_notice("Пытаюсь сделать изящный кувырок, но спотыкаюсь и падаю!") - ) - if(prob(75)) - flippy_mcgee.adjustBruteLoss(5) - if(prob(50)) - var/obj/item/bodypart/neckflip = flippy_mcgee.get_bodypart(BODY_ZONE_HEAD) - neckflip.force_wound_upwards(/datum/wound/blunt/critical) + flippy_mcgee.visible_message( span_notice("[flippy_mcgee] пытается сделать кувырок и падает на голову, во чудила!") , + span_notice("Пытаюсь сделать изящный кувырок, но спотыкаюсь и падаю!") ) + flippy_mcgee.adjustBruteLoss(rand(5,10)) + else flippy_mcgee.visible_message( span_notice("[flippy_mcgee] пытается удержать баланс после прыжка.") , diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 473883717c07..152f435742a3 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -257,6 +257,7 @@ "You hear a slap.") target.dna?.species?.stop_wagging_tail(target) return + do_attack_animation(target, ATTACK_EFFECT_DISARM) playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) if (ishuman(target)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d33765332f53..6d8e4dc254c6 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -39,15 +39,13 @@ //heart attack stuff handle_heart(delta_time, times_fired) handle_liver(delta_time, times_fired) - if(dancing_period) - dancing_period-- if(prob(2)) if(nutrition < NUTRITION_LEVEL_STARVING) to_chat(src, span_warning("[pick("Голодно...", "Кушать хочу...", "Вот бы что-нибудь съесть...", "Мой живот урчит...")]")) - take_overall_damage(stamina = 60) + take_overall_damage(stamina = 40) if(hydration <= HYDRATION_LEVEL_DEHYDRATED) to_chat(src, span_warning("[pick("Пить хочется...", "В горле пересохло...", "Водички бы сейчас...")]")) - take_overall_damage(stamina = 60) + take_overall_damage(stamina = 40) dna.species.spec_life(src, delta_time, times_fired) // for mutantraces else diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 6e741684e426..647f45027725 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -137,22 +137,6 @@ nutriment_factor = 9 * REAGENTS_METABOLISM //45% as calorie dense as corn oil. chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/reagent/consumable/nutriment/protein/semen - name = "Сперма" - description = "Натуральный биопродукт." - brute_heal = 0.3 - nutriment_factor = 18 * REAGENTS_METABOLISM - -/datum/reagent/consumable/nutriment/protein/semen/expose_turf(turf/exposed_turf, reac_volume) - . = ..() - if(isspaceturf(exposed_turf)) - return - - var/obj/effect/decal/cleanable/cum/reagentdecal = new(exposed_turf) - reagentdecal = locate() in exposed_turf - if(reagentdecal) - reagentdecal.reagents.add_reagent(/datum/reagent/consumable/nutriment/protein/semen, reac_volume) - /datum/reagent/consumable/nutriment/organ_tissue name = "Органная Ткань" description = "Natural tissues that make up the bulk of organs, providing many vitamins and minerals." diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 9159e1bccfa9..aa39b45674f9 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -314,11 +314,6 @@ desc = "Маленький флакон, содержащий ПротивоБиоВирусный Набор." list_reagents = list(/datum/reagent/vaccine/fungal_tb = 30) -/obj/item/reagent_containers/glass/bottle/cumvirus - name = "Флакон с Cumthiris+61" - desc = "Маленький флакон, содержащий Cumthiris+61." - spawned_disease = /datum/disease/cumvirus - //Oldstation.dmm chemical storage bottles /obj/item/reagent_containers/glass/bottle/hydrogen diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 7abbe398c619..94a44e74cd62 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1747,14 +1747,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) surplus = 0 -/datum/uplink_item/role_restricted/cumvirus_kit - name = "Cumthiris Virus" - desc = "Экспериментальное биооружие, призванное выводить из строя членов экипажа. Симптомы включают в себя: возбуждение, непризвольная эякуляция, эйфория, половое влечение к людям и полную потерю рассудка. Тем не менее, легко лечится с помощью галоперидола и святой воды." - item = /obj/item/storage/box/syndie_kit/cumvirus - cost = 30 - cant_discount = TRUE - restricted_roles = list("Medical Doctor", "Chief Medical Officer", "Virologist") - /datum/uplink_item/role_restricted/ancient_jumpsuit name = "Ancient Jumpsuit" desc = "A tattered old jumpsuit that will provide absolutely no benefit to you." diff --git a/tgstation.dme b/tgstation.dme index aac3a69cf4bc..80fab71e61d5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3905,7 +3905,6 @@ #include "white\baldenysh\govnokod\antags\mutant_zombies\zombie_antag.dm" #include "white\baldenysh\govnokod\antags\mutant_zombies\zombie_items.dm" #include "white\baldenysh\govnokod\antags\mutant_zombies\zombie_species.dm" -#include "white\baldenysh\govnokod\atmospherics\atmos_machines_recipes.dm" #include "white\baldenysh\govnokod\atmospherics\gasmixtures\gas_recipe_reactions.dm" #include "white\baldenysh\govnokod\chem\reactions.dm" #include "white\baldenysh\govnokod\chem\reagents.dm" @@ -4130,7 +4129,6 @@ #include "white\rebolution228\copypasta\clothing\masks.dm" #include "white\rebolution228\copypasta\clothing\suits.dm" #include "white\rebolution228\copypasta\clothing\uniform.dm" -#include "white\rebolution228\copypasta\diseases\cumvirus.dm" #include "white\rebolution228\copypasta\objects\miscellaneous.dm" #include "white\rebolution228\copypasta\objects\toys.dm" #include "white\rebolution228\copypasta\weapons\attachments.dm" @@ -4153,7 +4151,6 @@ #include "white\shruman\code\clowns\clownstructures.dm" #include "white\valtos\protocol_C.dm" #include "white\valtos\code\__DEFINES\bloodsucker.dm" -#include "white\valtos\code\__DEFINES\dance.dm" #include "white\valtos\code\__DEFINES\dwarf.dm" #include "white\valtos\code\__DEFINES\hud.dm" #include "white\valtos\code\__DEFINES\mobs.dm" @@ -4292,14 +4289,6 @@ #include "white\valtos\code\exploration\super_cruise\orbital_poi_generator\ruin_generator\ruin_events\asteriod_station.dm" #include "white\valtos\code\exploration\super_cruise\shuttle_components\shuttle_console.dm" #include "white\valtos\code\exploration\super_cruise\shuttle_components\shuttle_docking.dm" -#include "white\valtos\code\exrp\_dance.dm" -#include "white\valtos\code\exrp\_interaction.dm" -#include "white\valtos\code\exrp\dance_code.dm" -#include "white\valtos\code\exrp\dance_definitions.dm" -#include "white\valtos\code\exrp\dance_mob.dm" -#include "white\valtos\code\exrp\interaction_interface.dm" -#include "white\valtos\code\exrp\interaction_whitelist.dm" -#include "white\valtos\code\exrp\smetanka.dm" #include "white\valtos\code\fallout_guns\ammo.dm" #include "white\valtos\code\fallout_guns\ballistic.dm" #include "white\valtos\code\fallout_guns\projectiles.dm" @@ -4477,7 +4466,6 @@ #include "white\valtos\code\unsorted\port_grav.dm" #include "white\valtos\code\unsorted\prison.dm" #include "white\valtos\code\unsorted\randommaint.dm" -#include "white\valtos\code\unsorted\raper.dm" #include "white\valtos\code\unsorted\rusprikols.dm" #include "white\valtos\code\unsorted\scavenger.dm" #include "white\valtos\code\unsorted\scp.dm" diff --git a/white/baldenysh/govnokod/atmospherics/atmos_machines_recipes.dm b/white/baldenysh/govnokod/atmospherics/atmos_machines_recipes.dm deleted file mode 100644 index 3fbdbf6efd41..000000000000 --- a/white/baldenysh/govnokod/atmospherics/atmos_machines_recipes.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/gas_recipe/crystallizer/felinid - id = "felinid" - name = "Фелинид" - reaction_type = EXOTHERMIC_REACTION - energy_release = 950000 - requirements = list(/datum/gas/miasma = 10, /datum/gas/bz = 100, /datum/gas/carbon_dioxide = 1000) - products = list(/mob/living/carbon/human/species/felinid/atmos = 1) - -/mob/living/carbon/human/species/felinid/atmos/Initialize() - . = ..() - if(prob(10)) - ai_controller = new /datum/ai_controller/raper/opyx(src) - ADD_TRAIT(src, TRAIT_STUNIMMUNE, "sosi") //будет прикол если игруны пересадят себя в тело такого смешного моба - ADD_TRAIT(src, TRAIT_STRONG_GRABBER, "sosi") - diff --git a/white/qwaszx000/winners.dm b/white/qwaszx000/winners.dm index ed7180b82b01..4f82157a4c23 100644 --- a/white/qwaszx000/winners.dm +++ b/white/qwaszx000/winners.dm @@ -101,19 +101,11 @@ layer = ABOVE_MOB_LAYER anchored = TRUE flags_1 = NODECONSTRUCT_1 - var/list/coomers = list() + var/list/mob/living/carbon/human/enjoyers = list() -/obj/structure/statue/gold/robust/attack_hand(mob/user) +/obj/structure/statue/gold/robust/Initialize() . = ..() - if(!(user.name in coomers)) - if(isliving(user)) - inc_metabalance(user, 1, TRUE) - visible_message(span_noticeital("[user] кланяется статуе!")) - coomers += user.name - -/obj/structure/statue/gold/robust/examine_more(mob/user) - if(coomers) - return "
Уважение проявили: [english_list(coomers)]." + AddComponent(/datum/component/respect) /obj/structure/sign/plaques/robust name = "Портрет: Maye Frey" @@ -124,20 +116,11 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF custom_materials = list(/datum/material/silver=MINERAL_MATERIAL_AMOUNT*2) flags_1 = NODECONSTRUCT_1 - var/list/coomers = list() - -/obj/structure/sign/plaques/robust/examine_more(mob/user) - . = ..() - if(coomers) - . += "
Уважение проявили: [english_list(coomers)]." + var/list/mob/living/carbon/human/enjoyers = list() -/obj/structure/sign/plaques/robust/attack_hand(mob/user) +/obj/structure/sign/plaques/robust/Initialize() . = ..() - if(!(user.name in coomers)) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.end_dance(null, null) - coomers += user.name + AddComponent(/datum/component/respect) /obj/structure/sign/plaques/robust/bronze name = "Портрет: Ash Williams" @@ -145,3 +128,35 @@ icon_state = "bronze_2022" custom_materials = list(/datum/material/bronze=MINERAL_MATERIAL_AMOUNT*2) flags_1 = NODECONSTRUCT_1 + +/datum/component/respect + dupe_mode = COMPONENT_DUPE_UNIQUE + var/list/enjoyers = list() + +/datum/component/respect/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_PARENT_EXAMINE_MORE, .proc/list_enjoyers) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, .proc/reward) + +/datum/component/respect/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, COMSIG_PARENT_EXAMINE_MORE) + UnregisterSignal(parent, COMSIG_ATOM_ATTACK_HAND) + +/datum/component/respect/proc/reward(mob/user) + SIGNAL_HANDLER + + if(!(user in enjoyers)) + enjoyers += user + to_chat(user, span_notice("Отдаю дань уважения.")) + if(ishuman(user)) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "high_five", /datum/mood_event/respect) + +/datum/component/respect/proc/list_enjoyers(list) + . = list + if(enjoyers) + . += "
Уважение проявили: [english_list(enjoyers)]." +/datum/mood_event/respect + description = "Горжусь своим народом!" + mood_change = 8 + timeout = 1 MINUTES diff --git a/white/rebolution228/copypasta/diseases/cumvirus.dm b/white/rebolution228/copypasta/diseases/cumvirus.dm deleted file mode 100644 index 40040c9fff15..000000000000 --- a/white/rebolution228/copypasta/diseases/cumvirus.dm +++ /dev/null @@ -1,69 +0,0 @@ -/datum/disease/cumvirus - name = "Cumthiris+61" - max_stages = 6 - stage_prob = 1 - spread_text = "On contact" - cure_text = "Галоперидол & Святая вода" - spread_flags = DISEASE_SPREAD_CONTACT_FLUIDS - cures = list(/datum/reagent/medicine/haloperidol,/datum/reagent/water/holywater) - cure_chance = 7.5 - agent = "Cumthiris" - viable_mobtypes = list(/mob/living/carbon/human) - desc = "Симптомы заставляют зараженный субъект непроизвольно эякулировать." - disease_flags = CAN_CARRY|CAN_RESIST|CURABLE - permeability_mod = 1 - bypasses_immunity = TRUE - infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD|MOB_ROBOTIC|MOB_MINERAL - severity = DISEASE_SEVERITY_BIOHAZARD - -/datum/disease/cumvirus/stage_act(delta_time, times_fired) - . = ..() - if(!. || !ishuman(affected_mob)) - return - var/mob/living/carbon/human/H = affected_mob - switch(stage) - if(2) - if(DT_PROB(5, delta_time)) - H.emote("cough") - if(3) - if(DT_PROB(5, delta_time)) - H.emote("moan") - if(DT_PROB(10, delta_time)) - to_chat(H, span_danger("Чувствую себя возбужденным.")) - if(4) - to_chat(H, span_userdanger("Чувствую очень сильное напряжение в своем половом органе!")) - if(DT_PROB(40, delta_time)) - H.emote("moan") - H.end_dance() - H.adjustStaminaLoss(3.5, FALSE) - shake_camera(H, 1, 1) - if(DT_PROB(20, delta_time)) - to_chat(H, span_danger("Чувствую себя ОЧЕНЬ возбужденным.")) - if(5) - to_chat(H, span_userdanger("Непроизвольно кончаю!")) - if(DT_PROB(30, delta_time)) - H.emote("moan") - H.end_dance() - H.adjustStaminaLoss(10, FALSE) - shake_camera(H, 1, 2) - if(DT_PROB(20, delta_time)) - H.end_dance() - H.Paralyze(40) - H.add_confusion(8) - shake_camera(H, 2, 3) - H.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash) - H.clear_fullscreen("flash", 4.5) - if(6) - if(DT_PROB(30, delta_time)) - H.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash) - H.clear_fullscreen("flash", 8.5) - to_chat(H, span_userdanger("ТЕРЯЮ ПОСЛЕДНИЙ ОГОНЕК РАЗУМА!!")) - H.ai_controller = new /datum/ai_controller/raper(H) - H.ghostize(FALSE) - H.eye_color = "f00" - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - H.update_body() - if(DT_PROB(10, delta_time)) - H.end_dance() - H.emote("moan") - H.do_jitter_animation(30) diff --git a/white/valtos/code/__DEFINES/dance.dm b/white/valtos/code/__DEFINES/dance.dm deleted file mode 100644 index 94e9c63be248..000000000000 --- a/white/valtos/code/__DEFINES/dance.dm +++ /dev/null @@ -1,13 +0,0 @@ -#define DANCE_TARGET_MOUTH "mouth" -#define DANCE_TARGET_THROAT "throat" -#define DANCE_TARGET_DANCERESS "danceress" -#define DANCE_TARGET_DANCOR "dancor" -#define DANCE_TARGET_HAND "hand" -#define DANCE_TARGET_CHEST "chest" -#define DANCING_FACE_WITH_DANCOR "facedancor" -#define DANCING_FACE_WITH_FEET "facefeet" -#define DANCING_MOUTH_WITH_FEET "mouthfeet" -#define DANCE_TO_FACE "danceface" -#define THIGH_DANCE "thighs" - -#define WHITELISTEXRPFILE "[global.config.directory]/whitelist_exrp.txt" diff --git a/white/valtos/code/exrp/_dance.dm b/white/valtos/code/exrp/_dance.dm deleted file mode 100644 index 4f641a995dbb..000000000000 --- a/white/valtos/code/exrp/_dance.dm +++ /dev/null @@ -1,10 +0,0 @@ -///меня часто просят выпилить это говно, но потом просят вернуть, в пизду, боьше не трону - -/mob/living/carbon/human - var/dancing_potency = 15 - var/dancing_tolerance = 100 - var/dancing = 0 - var/multidances = 0 - var/dancing_period = 0 - var/last_dancer - var/last_dancing diff --git a/white/valtos/code/exrp/_interaction.dm b/white/valtos/code/exrp/_interaction.dm deleted file mode 100644 index bee441ba3930..000000000000 --- a/white/valtos/code/exrp/_interaction.dm +++ /dev/null @@ -1,147 +0,0 @@ -/proc/make_interactions(interaction) - if(!GLOB.interactions.len) - for(var/itype in subtypesof(/datum/interaction)) - var/datum/interaction/I = new itype() - GLOB.interactions[I.command] = I - -/datum/interaction - var/command = "interact" - var/description = "Interact with them" - var/simple_message = null - var/simple_style = "danger" - var/write_log_user = "tested" - var/write_log_target = "was tested by" - - var/max_distance = 1 - var/require_user_mouth = FALSE - var/require_user_hands = FALSE - var/require_target_mouth = FALSE - var/needs_physical_contact = FALSE - - var/cooldaun = 0 - - var/user_not_tired = FALSE - var/target_not_tired = FALSE - - var/require_user_naked = FALSE - var/require_target_naked = FALSE - - var/require_user_dancer = FALSE // is user has pingas? - var/require_user_dancor = FALSE // is user has jopa? - var/require_user_danceress = FALSE // is user has pezda? - - var/require_target_dancer = FALSE // is target need to have pingas? - var/require_target_dancor = FALSE // is target need to have jopa? - var/require_target_danceress = FALSE // is target need to have pezda? - - var/user_dancing_cost = 1 - var/target_dancing_cost = 1 - -/datum/interaction/proc/evaluate_user(mob/living/carbon/human/user, silent = TRUE) - if(require_user_mouth && user.wear_mask) - if(!silent) - to_chat(user, span_warning("Мой рот прикрыт.")) - return FALSE - if(require_user_hands && !ishuman(user)) - if(!silent) - to_chat(user, span_warning("У меня нет рук.")) - return FALSE - if(user_not_tired && user.dancing_period) - if(!silent) - to_chat(user, span_warning("Всё еще не хочу после прошлого раза.")) - return FALSE - if(require_user_naked && !user.is_literally_ready_to_dance()) - if(!silent) - to_chat(user, span_warning("Вам мешает одежда.")) - return FALSE - if(require_user_dancer && user.gender == FEMALE) - if(!silent) - to_chat(user, span_warning("У вас нет огурца.")) - return FALSE - if(require_user_danceress && user.gender == MALE) - if(!silent) - to_chat(user, span_warning("У вас нет пельмешка.")) - return FALSE - return TRUE - -/datum/interaction/proc/evaluate_target(mob/living/carbon/human/user, mob/living/carbon/human/target, silent = TRUE) - if(require_target_mouth && target.wear_mask) - if(!silent) - to_chat(user, span_warning("Рот [target.name] прикрыт.")) - return FALSE - if(!ishuman(target)) - if(!silent) - to_chat(user, span_warning("У [target.name] нет рук.")) - return FALSE - if(target_not_tired && target.dancing_period) - if(!silent) - to_chat(user, span_warning("Вашей цели не хочется.")) - return FALSE - if(require_target_naked && !target.is_literally_ready_to_dance()) - if(!silent) - to_chat(user, span_warning("Цели мешает одежда.")) - return FALSE - if(require_target_dancer && target.gender == FEMALE) - if(!silent) - to_chat(user, span_warning("У цели нет огурца.")) - return FALSE - if(require_target_danceress && target.gender == MALE) - if(!silent) - to_chat(user, span_warning("У цели нет пельмешка.")) - return FALSE - return TRUE - -/datum/interaction/proc/get_action_link_for(mob/living/carbon/human/user, mob/living/carbon/human/target) - return "[description]
" - -/datum/interaction/Topic(href, href_list) - if(..()) - return TRUE - if(href_list["action"]) - do_action(locate(href_list["action_user"]), locate(href_list["action_target"])) - return TRUE - return FALSE - -/datum/interaction/proc/do_action(mob/living/carbon/human/user, mob/living/carbon/human/target) - if(cooldaun) - return - if(get_dist(user, target) > max_distance) - to_chat(user, span_warning("[target.name] слишком далеко.")) - return - if(needs_physical_contact && !(user.Adjacent(target) && target.Adjacent(user))) - to_chat(user, span_warning("Не могу добраться до [target.name].")) - return - if(!evaluate_user(user, silent = FALSE)) - return - if(!evaluate_target(user, target, silent = FALSE)) - return - if(user.stat != CONSCIOUS) - return - if(!check_rights_for(user.client, R_ADMIN) && !check_whitelist_exrp(user.ckey)) - return - - cooldaun = 3 - - display_interaction(user, target) - - post_interaction(user, target) - - if(write_log_user) - log_exrp("([key_name(src)]) [user.real_name] [write_log_user] [target]") - SSblackbox.record_feedback("tally", "dance_actions", 1, write_log_user) - if(write_log_target) - log_exrp("([key_name(src)]) [user.real_name] [write_log_target] [target]") - -/datum/interaction/proc/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - if(simple_message) - var/use_message = replacetext(simple_message, "USER", "[user]") - use_message = replacetext(use_message, "TARGET", "[target]") - user.visible_message("[capitalize(use_message)]") - -/datum/interaction/proc/post_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - spawn(1) - cooldaun = 0 - if(user_dancing_cost) - user.dancing_period += user_dancing_cost - if(target_dancing_cost) - target.dancing_period += target_dancing_cost diff --git a/white/valtos/code/exrp/dance_code.dm b/white/valtos/code/exrp/dance_code.dm deleted file mode 100644 index ab3d6a1b1fc0..000000000000 --- a/white/valtos/code/exrp/dance_code.dm +++ /dev/null @@ -1,407 +0,0 @@ -/mob/living/carbon/human/proc/moan() - - if(!(prob(dancing / dancing_tolerance * 65))) - return - - visible_message(span_purple("[src] [pick("стонет", "стонет в наслаждении")].")) - - var/temp_age = 0 - - if(ishuman(src)) - var/mob/living/carbon/human/H = src - temp_age = H.age - - if (gender == FEMALE && temp_age < 30) - playsound(get_turf(src), "white/valtos/sounds/love/shot[rand(1, 8)].ogg", 90, 1, 0) - else - playsound(get_turf(src), "white/valtos/sounds/exrp/interactions/moan_[gender == FEMALE ? "f" : "m"][rand(1, 7)].ogg", 70, 1, 0) - -/mob/living/carbon/human/proc/end_dance(mob/living/carbon/human/partner, target_dancise) - - var/message - if(gender == MALE) - - if(!istype(partner)) - target_dancise = null - - switch(target_dancise) - if(DANCE_TARGET_MOUTH) - if(!partner.wear_mask) - message = pick("сметанит прямо в рот [partner]","спустил на язычок [partner]",\ - "брызгает сметанкой в рот [partner]","заполняет рот [partner] сметанкой",\ - "обильно сметанит в рот [partner], так, что стекает изо рта",\ - "выпускает в ротик [partner] порцию густого молочка") - partner.reagents.add_reagent(/datum/reagent/consumable/nutriment/protein/semen, 100) - else - message = "сметанит на лицо [partner]" - if(DANCE_TARGET_THROAT) - if(!partner.wear_mask) - message = "засунул свой стан-батон как можно глубже в глотку [partner] и сметанит" - partner.reagents.add_reagent(/datum/reagent/consumable/nutriment/protein/semen, 1599) - else - message = "сметанит на лицо [partner]" - if(DANCE_TARGET_DANCERESS) - if(partner.is_literally_ready_to_dance() && partner.gender == FEMALE) - message = "сметанит в пельмешек [partner]" - else - message = "сметанит на животик [partner]" - if(DANCE_TARGET_DANCOR) - if(partner.is_literally_ready_to_dance()) - message = "сметанит в шоколадницу [partner]" - else - message = "сметанит на спинку [partner]" - if(DANCE_TARGET_HAND) - if(ishuman(partner)) - message = "сметанит в руку [partner]" - else - message = "сметанит на [partner]" - if(DANCE_TARGET_CHEST) - if(partner.is_literally_ready_to_dance() && partner.gender == FEMALE) - message = "сметанит на грудь [partner]" - else - message = "сметанит на шею и грудь [partner]" - if(DANCE_TO_FACE) - if(!partner.wear_mask) - message = "нещадно принуждает [partner] съесть яишницу с колбасой" - if(THIGH_DANCE) - message = "удерживает [partner] в очень крепком захвате не давая выбраться попутно смазывая лицо майонезиком" - else - message = "спустил на пол сметанку" - - dancing = 5 - dancing_tolerance += 50 - - else - message = pick("прикрывает глаза и мелко дрожит",\ - "дёргается в удовлетворении",\ - "замирает, закатив глаза",\ - "содрогается, а затем резко расслабляется",\ - "извивается в приступе сытости") - dancing -= pick(50, 55, 80, 125) - - if(gender == MALE) - if (prob(75)) - playsound(loc, "white/valtos/sounds/exrp/interactions/final_m[rand(1, 3)].ogg", 90, 1, 0) - else - playsound(loc, "white/valtos/sounds/gachi/penetration_[rand(1, 2)].ogg", 90, 1, 0) - else if(gender == FEMALE) - var/temp_age = 0 - if(ishuman(src)) - var/mob/living/carbon/human/H = src - temp_age = H.age - if (temp_age > 30) - playsound(loc, "white/valtos/sounds/exrp/interactions/final_f[rand(1, 5)].ogg", 70, 1, 0) - else - playsound(loc, "white/valtos/sounds/love/shot9.ogg", 90, 1, 0) - - visible_message(span_purple("[src] [message].")) - - SSblackbox.record_feedback("amount", "dances", 1) - - if(iscarbon(src)) - var/mob/living/carbon/C = src - var/turf/floor = get_turf(src) - if ((!locate(/obj/effect/decal/cleanable/cum) in src.loc)) - var/obj/effect/decal/cleanable/cum/spew = new(floor, C.get_static_viruses()) - spew.transfer_mob_blood_dna(src) - - multidances += 1 - if(multidances == 1) - log_combat(partner, src, "danced on") - - if(multidances > (dancing_potency/3)) - dancing_period = 100 //sex cooldown - adjust_drugginess(35) - else - dancing_period = 100 - adjust_drugginess(12) - -/mob/living/carbon/human/proc/is_dancing(mob/living/carbon/human/partner, dancise) - if(partner == last_dancer && dancise == last_dancing) - return TRUE - return FALSE - -/mob/living/carbon/human/proc/set_is_dancing(mob/living/carbon/human/partner, dancise) - last_dancer = partner - last_dancing = dancise - -#define ACTOR_DANCER (1<<0) -#define VICTIM_DANCER (1<<1) - -/mob/living/carbon/human/proc/do_dance(mob/living/carbon/human/partner, action_to_do) - - if(stat != CONSCIOUS) return - - var/message = "пританцовывает" - var/dancing_increase = 0 - var/dancing_which = ACTOR_DANCER | VICTIM_DANCER - var/dancing_target = null - var/sound_to_play - - switch(action_to_do) - if("do_dancero") - dancing_increase = 10 - dancing_target = DANCE_TARGET_MOUTH - dancing_which = VICTIM_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/bj[rand(1, 11)].ogg" - if(partner.is_dancing(src, DANCE_TARGET_MOUTH)) - if(prob(partner.dancing_potency)) - message = "зарывается языком в пельмешек [partner]" - dancing_increase += 5 - else - if(partner.gender == FEMALE) - message = "лижет пельмешек [partner]" - else if(partner.gender == MALE) - message = "посасывает стан-батон [partner]" - else - message = "лижет стан-батон [partner]" - else - if(partner.gender == FEMALE) - message = "прижимается лицом к пельмешку [partner]" - else if(partner.gender == MALE) - message = "берёт стан-батон [partner] в свой ротик" - else - message = "принимается лизать стан-батон [partner]" - partner.set_is_dancing(src, DANCE_TARGET_MOUTH) - - if ("do_facedance") - dancing_increase = 10 - dancing_target = DANCE_TARGET_MOUTH - dancing_which = ACTOR_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/oral[rand(1, 2)].ogg" - if(is_dancing(partner, DANCE_TARGET_MOUTH)) - if(gender == FEMALE) - message = "елозит своим пельмешком по лицу [partner]" - else if(gender == MALE) - message = pick("грубо исследует [partner] в рот",\ - "сильно прижимает голову [partner] к себе") - else - if(gender == FEMALE) - message = "пихает [partner] лицом в свой пельмешек" - else if(gender == MALE) - if(is_dancing(partner, DANCE_TARGET_THROAT)) - message = "достал свой стан-батон из проруби [partner]" - else - message = "просовывает свой стан-батон еще глубже в прорубь [partner]" - else - message = "елозит пельмешком по лицу [partner]" - set_is_dancing(partner, DANCE_TARGET_MOUTH) - - if ("do_throatdance") - dancing_increase = 10 - dancing_target = DANCE_TARGET_MOUTH - dancing_which = ACTOR_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/oral[rand(1, 2)].ogg" - if(is_dancing(partner, DANCE_TARGET_THROAT)) - message = pick(list("невероятно сильно ловит клёв в проруби [partner]", "топит карпика в проруби [partner]")) - if(rand(3) == 1) // 33% - partner.manual_emote("задыхается в захвате [src]") - if(iscarbon(partner)) - partner.adjustOxyLoss(1) - else if(is_dancing(partner, DANCE_TARGET_MOUTH)) - message = "суёт стан-батон глубже, заходя уже в прорубь [partner]" - - else - message = "силой запихивает свой стан-батон в прорубь [partner]" - set_is_dancing(partner , DANCE_TARGET_THROAT) - - if ("do_dancor") - dancing_increase = 10 - dancing_target = DANCE_TARGET_DANCOR - sound_to_play = "white/valtos/sounds/exrp/interactions/bang[rand(1, 3)].ogg" - if(is_dancing(partner, DANCE_TARGET_DANCOR)) - message = pick("исследует [partner] в шоколадницу",\ - "нежно исследует пещеру [partner]",\ - "всаживает стан-батон в шоколадницу [partner] по самые гренки",\ - "заходит в шоколадную фабрику [partner]") - else - message = "безжалостно прорывает шоколадницу [partner]" - set_is_dancing(partner, DANCE_TARGET_DANCOR) - - if ("do_dance") - dancing_increase = 10 - dancing_target = DANCE_TARGET_DANCERESS - sound_to_play = "white/valtos/sounds/exrp/interactions/champ[rand(1, 2)].ogg" - if(is_dancing(partner, DANCE_TARGET_DANCERESS)) - message = "проникает в пельмешек [partner]" - else - message = "резким движением погружается внутрь [partner]" - set_is_dancing(partner, DANCE_TARGET_DANCERESS) - - if ("do_mount") - dancing_increase = 10 - dancing_target = DANCE_TARGET_DANCERESS - sound_to_play = "white/valtos/sounds/exrp/interactions/bang[rand(1, 3)].ogg" - if(partner.is_dancing(src, DANCE_TARGET_DANCERESS)) - message = "скачет на стан-батоне [partner]" - else - message = "насаживает свой пельмешек на стан-батон [partner]" - partner.set_is_dancing(src, DANCE_TARGET_DANCERESS) - - if ("do_assdance") - dancing_increase = 10 - dancing_target = DANCE_TARGET_DANCOR - sound_to_play = "white/valtos/sounds/exrp/interactions/bang[rand(1, 3)].ogg" - if(partner.is_dancing(src, DANCE_TARGET_DANCOR)) - message = "по-сербски прыгает на стан-батоне [partner]" - else - message = "опускает свой шоколадный завод на стан-батон [partner]" - partner.set_is_dancing(src, DANCE_TARGET_DANCOR) - - if ("do_dancering") - dancing_increase = 10 - dancing_target = null - dancing_which = VICTIM_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/champ_fingering.ogg" - message = pick(list("анализирует пельмешек [partner]", \ - "измеряет глубину пельмешка [partner]", \ - "проверяет на прочность пельмешек [partner]")) - - if ("do_fingerdance") - dancing_increase = 10 - dancing_target = null - dancing_which = VICTIM_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/champ_fingering.ogg" - message = pick(list("анализирует шоколадницу [partner]", \ - "измеряет глубину скважины [partner]", \ - "проверяет на прочность задний привод [partner]")) - - if ("do_rimdance") - dancing_increase = 10 - dancing_target = null - dancing_which = VICTIM_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/champ_fingering.ogg" - message = "[src] вынюхивает след на заднем дворе [partner]" - - if ("do_handdance") - dancing_increase = 10 - dancing_target = DANCE_TARGET_HAND - dancing_which = VICTIM_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/bang[rand(1, 3)].ogg" - if(partner.is_dancing(src, DANCE_TARGET_HAND)) - message = pick(list("шакалит [partner]", \ - "работает рукой с головкой стан-батона [partner]", \ - "включает и выключает стан-батон [partner] быстрее")) - else - message = "нежно обхватывает стан-батон [partner] рукой" - partner.set_is_dancing(src, DANCE_TARGET_HAND) - - if ("do_breastdance") - dancing_increase = 10 - dancing_target = DANCE_TARGET_CHEST - dancing_which = ACTOR_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/bang[rand(1, 3)].ogg" - if(is_dancing(partner, DANCE_TARGET_CHEST)) - message = pick(list("исследует [partner] между горок", \ - "прокатывается у [partner] между горок")) - else - message = "взял горки [partner] рукой и включает/выключает ими свой стан-батон" - set_is_dancing(partner , DANCE_TARGET_CHEST) - - if ("do_mountdance") - dancing_increase = 1 - dancing_target = null - dancing_which = ACTOR_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/squelch[rand(1, 3)].ogg" - if(is_dancing(partner, DANCING_FACE_WITH_DANCOR)) - message = pick(list("кормит булочками [partner]", \ - "даёт покушать булочек [partner]")) - else - message = pick(list("видит, что [partner] голоден и срочно принимается кормить булочками его", \ - "хочет накормить [partner] булочками")) - set_is_dancing(partner , DANCING_FACE_WITH_DANCOR) - - if ("do_danceface") - dancing_increase = 1 - dancing_target = null - dancing_which = ACTOR_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/foot_dry[rand(1, 4)].ogg" - if(src.get_item_by_slot(ITEM_SLOT_FEET) != null) - message = pick(list("поставил [get_shoes()] подошвой на лицо [partner]", \ - "опускает свои [get_shoes()] на лицо [partner] и надавливает ими", \ - "грубо давит [get_shoes()] на лицо [partner]")) - else - message = pick(list("ставит свои оголённые ноги на лицо [partner]", \ - "опускает свои массивные ступни на лицо [partner], и мнёт ими его", \ - "выставляет ноги на лицо [partner]")) - set_is_dancing(partner , DANCING_FACE_WITH_FEET) - - if ("do_dancemouth") - dancing_increase = 1 - dancing_target = null - dancing_which = ACTOR_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/foot_wet[rand(1, 3)].ogg" - if(src.get_item_by_slot(ITEM_SLOT_FEET) != null) - message = pick(list("заставляет [partner] попробовать [get_shoes()]", \ - "даёт слизать грязь с [get_shoes()] [partner]")) - else - message = pick(list("принуждает [partner] попробовать свой грязный палец на ноге", \ - "предлагает [partner] вкусить ступню", \ - "прикрывает рот и нос [partner] ступнёй, затем ждёт пока [partner] отключится и резко отпускает ступню")) - set_is_dancing(partner , DANCING_MOUTH_WITH_FEET) - - if ("do_eggs") - dancing_increase = 1 - dancing_target = DANCE_TARGET_MOUTH - dancing_which = ACTOR_DANCER - sound_to_play = "white/valtos/sounds/exrp/interactions/nuts[rand(1, 4)].ogg" - if(is_dancing(partner, DANCE_TO_FACE)) - message = pick(list("хватает [partner] за голову и принуждает вкусить яишницы", \ - "умоляет [partner] попробовать ещё больше божественной яишенки", \ - "нещадно принимается кормить [partner] яишницей", \ - "вытаскивает всё то, что [partner] не скушал и ждёт пока тот проглотит остатки")) - else - message = pick(list("видит, что [partner] очень голоден и спешит накормить его яишницей", \ - "стоит в сантиметре от лица [partner] держа в руках омлетик, затем резко впихивает в рот [partner] благословлённый омлетик")) - set_is_dancing(partner , DANCE_TO_FACE) - - if ("do_thighs") - dancing_increase = 10 - dancing_target = THIGH_DANCE - var file = pick(list("bj10", "bj3", "foot_wet1", "foot_dry3")) - sound_to_play = "white/valtos/sounds/exrp/interactions/[file].ogg" - if(is_dancing(partner, THIGH_DANCE)) - if(gender == FEMALE) - message = pick(list("берёт в ещё более крепкий захват ногами голову [partner] блокируя его обзор целиком", \ - "обхватывает голову [partner] ногами принуждая вкусить пельменей")) - else if(gender == MALE) - message = pick(list("берёт в ещё более крепкий захват ногами голову [partner] блокируя его обзор целиком", \ - "обхватывает голову [partner] ногами ещё сильнее и начинает усиленно кормить яишницей", \ - "вставляет кусок омлетика в беспомощный рот [partner], удерживая его лицо ловким захватом ногой")) - else - message = "захватывает голову [partner] ногами" - else - message = pick(list("залезает на плечи [partner] и берёт в умелый захват своими ногами", \ - "хватает голову [partner] ногами")) - set_is_dancing(partner , THIGH_DANCE) - if(prob(15)) - partner.adjustOxyLoss(1) - - visible_message("[capitalize(src.name)] [message].") - playsound(get_turf(src), sound_to_play, 50, 1, -1) - if(dancing_which & ACTOR_DANCER) - handle_post_dance(dancing_increase, dancing_target, partner) - if(dancing_which & VICTIM_DANCER) - partner.handle_post_dance(dancing_increase, dancing_target, src) - partner.dir = get_dir(partner,src) - do_dancing_animation(get_dir(src, partner)) - -#undef ACTOR_DANCER -#undef VICTIM_DANCER - -/mob/living/carbon/human/proc/get_shoes() - var/obj/A = get_item_by_slot(ITEM_SLOT_FEET) - if(findtext_char(A.name,"the")) - return copytext_char(A.name, 3, (length(A.name)) + 1) - else - return A.name - -/mob/living/carbon/human/proc/handle_post_dance(amount, dancise, mob/living/carbon/human/partner) - if(stat != CONSCIOUS) - return - if(amount) - dancing += amount - if (dancing >= dancing_tolerance) - end_dance(partner, dancise) - else - moan() diff --git a/white/valtos/code/exrp/dance_definitions.dm b/white/valtos/code/exrp/dance_definitions.dm deleted file mode 100644 index 59e001070ba9..000000000000 --- a/white/valtos/code/exrp/dance_definitions.dm +++ /dev/null @@ -1,276 +0,0 @@ -/datum/interaction/assslap - command = "assslap" - description = "Шлёпнуть по заднице" - simple_message = "USER шлёпает TARGET по заднице!" - simple_style = "danger" - needs_physical_contact = TRUE - write_log_user = "ass-slapped" - write_log_target = "was ass-slapped by" - -/datum/interaction/assslap/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - playsound(get_turf(target), 'white/valtos/sounds/exrp/interactions/slap.ogg', 50, 1, -1) - -/datum/interaction/dancero - command = "dancero" - description = "Отполировать пельмешку" - require_user_mouth = TRUE - require_target_danceress = TRUE - write_log_user = "gave head to" - write_log_target = "was given head by" - user_not_tired = TRUE - require_target_naked = TRUE - write_log_user = "dancered" - write_log_target = "was dancered by" - -/datum/interaction/dancero/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_dancero") - -/datum/interaction/dancero/dancejob - command = "dancejob" - description = "Отполировать огурец" - require_target_dancer = TRUE - target_not_tired = TRUE - write_log_user = "dancejobed" - write_log_target = "was dancejobed by" - -/datum/interaction/dance - command = "dance" - description = "Раскромсать вареник" - require_user_dancer = TRUE - require_target_danceress = TRUE - write_log_user = "danced" - write_log_target = "was danced by" - user_not_tired = TRUE - require_user_naked = TRUE - require_target_naked = TRUE - max_distance = 0 - write_log_user = "danced" - write_log_target = "was danced by" - -/datum/interaction/dance/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_dance") - -/datum/interaction/dancor - command = "danceass" - description = "Пробить шоколадницу" - write_log_user = "valerad" - write_log_target = "was valerad by" - write_log_user = "ass-danced" - write_log_target = "was ass-danced by" - require_user_naked = TRUE - require_target_naked = TRUE - require_target_dancor = TRUE - user_not_tired = TRUE - require_user_dancer = TRUE - max_distance = 0 - -/datum/interaction/dance/dancor/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_dancor") - - -/datum/interaction/dancering - command = "dancering" - description = "Засунуть сигарету в пепельницу" - require_user_hands = TRUE - require_target_danceress = TRUE - user_not_tired = TRUE - require_target_naked = TRUE - write_log_user = "dancered" - write_log_target = "was dancered by" - -/datum/interaction/dancering/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_dancering") - -/datum/interaction/fingerdance - command = "fingerdance" - description = "Почесать шоколадный глаз" - require_user_hands = TRUE - require_target_dancor = TRUE - user_not_tired = TRUE - require_target_naked = TRUE - write_log_user = "fingerdanced" - write_log_target = "was fingerdanced by" - -/datum/interaction/fingerdance/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_fingerdance") - - -/datum/interaction/facedance - command = "facedance" - description = "Проверить глубину проруби" - require_target_mouth = TRUE - user_not_tired = TRUE - require_user_naked = TRUE - max_distance = 0 - write_log_user = "face-danced" - write_log_target = "was face-danced by" - -/datum/interaction/facedance/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_facedance") - -/datum/interaction/throatdance - command = "throatdance" - description = "Утопить муму в проруби" - require_user_dancer = TRUE - require_target_mouth = TRUE - user_not_tired = TRUE - require_user_naked = TRUE - max_distance = 0 - write_log_user = "throat-danced" - write_log_target = "was throat-danced by" - -/datum/interaction/throatdance/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_throatdance") - -/datum/interaction/handdance - command = "handdance" - description = "Потрогать ствол" - require_user_hands = TRUE - require_target_dancer = TRUE - target_not_tired = TRUE - require_target_naked = TRUE - write_log_user = "danced-off" - write_log_target = "was danced-off by" - -/datum/interaction/handdance/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_handdance") - -/datum/interaction/breastdance - command = "breastdance" - description = "Проскользить между двух горок" - require_user_dancer = TRUE - user_not_tired = TRUE - require_user_naked = TRUE - require_target_naked = TRUE - require_target_danceress = TRUE - max_distance = 0 - write_log_user = "breast-danced" - write_log_target = "was breast-danced by" - -/datum/interaction/breastdance/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_breastdance") - -/datum/interaction/mount - command = "mount" - description = "Покататься на карусели" - require_user_danceress = TRUE - require_target_dancer = TRUE - user_not_tired = TRUE - target_not_tired = TRUE - require_user_naked = TRUE - require_target_naked = TRUE - max_distance = 0 - write_log_user = "rode" - write_log_target = "was rode by" - -/datum/interaction/mount/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_mount") - -/datum/interaction/assdance - command = "assdance" - description = "Присесть пончиком на выступ" - require_user_dancor = TRUE - require_target_dancer = TRUE - user_not_tired = TRUE - target_not_tired = TRUE - require_user_naked = TRUE - require_target_naked = TRUE - max_distance = 0 - write_log_user = "assdance" - write_log_target = "was assdance by" - -/datum/interaction/assdance/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_assdance") - -/datum/interaction/rimdance - command = "rimdance" - description = "Скушать шоколад" - require_user_mouth = TRUE - require_target_dancor = TRUE - user_not_tired = TRUE - require_target_naked = TRUE - max_distance = 0 - write_log_user = "rimdanced" - write_log_target = "was rimdanced by" - -/datum/interaction/rimdance/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_rimdance") - -/datum/interaction/mountdance - command = "mountdance" - description = "Промариновать лимончик" - require_target_mouth = TRUE - require_user_dancor = TRUE - user_not_tired = TRUE - require_user_naked = TRUE - max_distance = 0 - write_log_user = "made-them-rim" - write_log_target = "was made-to-rim by" - -/datum/interaction/mountdance/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_mountdance") - -/datum/interaction/danceface - command = "danceface" - description = "Дать понюхать ноги" - require_target_mouth = TRUE - max_distance = 0 - write_log_user = "feet-faced" - write_log_target = "had feet grinded against their face by" - -/datum/interaction/danceface/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_danceface") - -/datum/interaction/dancemouth - command = "dancemouth" - description = "Угостить пальцами ног" - require_target_mouth = TRUE - max_distance = 0 - write_log_user = "feet-mouthed" - write_log_target = "had feet grinding against their tongue by" - -/datum/interaction/dancemouth/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_dancemouth") - -/datum/interaction/eggs - command = "eggs" - description = "Накормить яишницей" - require_user_naked = TRUE - require_user_dancer = TRUE - require_target_mouth = TRUE - max_distance = 0 - write_log_user = "make-them-eat-some-eggs" - write_log_target = "was made to eat eggs by" - -/datum/interaction/eggs/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_eggs") - -/datum/interaction/thighs - command = "thighs" - description = "Взять в захват ногами" - max_distance = 0 - require_user_naked = TRUE - require_target_mouth = TRUE - write_log_user = "thigh-trapped" - write_log_target = "was smothered by" - -/datum/interaction/thighs/display_interaction(mob/living/carbon/human/user, mob/living/carbon/human/target) - . = ..() - user.do_dance(target, "do_thighs") diff --git a/white/valtos/code/exrp/dance_mob.dm b/white/valtos/code/exrp/dance_mob.dm deleted file mode 100644 index 6c262a7aff96..000000000000 --- a/white/valtos/code/exrp/dance_mob.dm +++ /dev/null @@ -1,35 +0,0 @@ -/mob/living/carbon/human/Initialize() - . = ..() - dancing_potency = (prob(80) ? rand(9, 14) : pick(rand(5, 13), rand(15, 20))) - dancing_tolerance = (prob(80) ? rand(150, 300) : pick(rand(10, 100), rand(350,600))) - -/mob/proc/do_dancing_animation(dancedir) - - dir = dancedir - - var/pixel_x_diff = 0 - var/pixel_y_diff = 0 - var/final_pixel_y = initial(pixel_y) - - if(dancedir & NORTH) - pixel_y_diff = 8 - else if(dancedir & SOUTH) - pixel_y_diff = -8 - - if(dancedir & EAST) - pixel_x_diff = 8 - else if(dancedir & WEST) - pixel_x_diff = -8 - - if(pixel_x_diff == 0 && pixel_y_diff == 0) - pixel_x_diff = rand(-3,3) - pixel_y_diff = rand(-3,3) - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - animate(pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 2) - return - - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - animate(pixel_x = initial(pixel_x), pixel_y = final_pixel_y, time = 2) - -/mob/living/carbon/human/proc/is_literally_ready_to_dance() - return (!wear_suit || !(wear_suit.body_parts_covered)) && (!w_uniform || !(w_uniform.body_parts_covered)) diff --git a/white/valtos/code/exrp/interaction_interface.dm b/white/valtos/code/exrp/interaction_interface.dm deleted file mode 100644 index 8b90b36ca9ae..000000000000 --- a/white/valtos/code/exrp/interaction_interface.dm +++ /dev/null @@ -1,32 +0,0 @@ -/mob/living/carbon/human/MouseDrop_T(mob/M, mob/user) - . = ..() - - if(M == src || src == usr || M != usr) - return - - if(HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED)) - return - - if(!ishuman(user)) - return - - var/mob/living/carbon/human/H = user - - H.try_interaction(src) - -/mob/living/carbon/human/proc/try_interaction(mob/partner) - - if (!check_rights_for(client, R_ADMIN) && !check_whitelist_exrp(ckey)) - return - - var/dat = "" - - make_interactions() - for(var/interaction_key in GLOB.interactions) - var/datum/interaction/I = GLOB.interactions[interaction_key] - if(I.evaluate_user(src) && I.evaluate_target(src, partner)) - dat += I.get_action_link_for(src, partner) - - var/datum/browser/popup = new(usr, "interactions", "Взаимодействие с [partner]", 400, 300) - popup.set_content(dat) - popup.open() diff --git a/white/valtos/code/exrp/interaction_whitelist.dm b/white/valtos/code/exrp/interaction_whitelist.dm deleted file mode 100644 index c87dd6c0d5a2..000000000000 --- a/white/valtos/code/exrp/interaction_whitelist.dm +++ /dev/null @@ -1,18 +0,0 @@ -/proc/load_whitelist_exrp() - GLOB.whitelist_exrp = list() - for(var/line in world.file2list(WHITELISTEXRPFILE)) - if(!line) - continue - if(findtextEx(line,"#",1,2)) - continue - GLOB.whitelist_exrp += ckey(line) - - if(!GLOB.whitelist_exrp.len) - GLOB.whitelist_exrp = null - -/proc/check_whitelist_exrp(var/ckey) - if(!GLOB.whitelist_exrp) - return FALSE - . = (ckey in GLOB.whitelist_exrp) - -#undef WHITELISTEXRPFILE diff --git a/white/valtos/code/exrp/smetanka.dm b/white/valtos/code/exrp/smetanka.dm deleted file mode 100644 index 44b8c7ac40f6..000000000000 --- a/white/valtos/code/exrp/smetanka.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/effect/decal/cleanable/cum - name = "сметанка" - desc = "Выглядит вкусно." - density = 0 - layer = 3 - icon = 'white/valtos/icons/exrp/smetanka.dmi' - anchored = 1 - random_icon_states = list("cum1", "cum3", "cum4", "cum5", "cum6", "cum7", "cum8", "cum9", "cum10", "cum11", "cum12") - mergeable_decal = FALSE - -/obj/effect/decal/cleanable/cum/Initialize(mapload, list/datum/disease/diseases) - . = ..() - reagents.add_reagent(/datum/reagent/consumable/nutriment/protein/semen, 5) - pixel_x = rand(-12, 12) - pixel_y = rand(-12, 12) - -/obj/effect/decal/cleanable/cum/attack_hand(mob/user) - . = ..() - if(.) - return - if(ishuman(user)) - var/mob/living/carbon/human/H = user - playsound(get_turf(src), 'sound/items/drink.ogg', 50, TRUE) //slurp - H.visible_message(span_alert("[H] слизывает сметанку с пола.")) - if(reagents) - for(var/datum/reagent/R in reagents.reagent_list) - if (istype(R, /datum/reagent/consumable)) - var/datum/reagent/consumable/nutri_check = R - if(nutri_check.nutriment_factor >0) - H.adjust_nutrition(nutri_check.nutriment_factor * nutri_check.volume) - reagents.remove_reagent(nutri_check.type,nutri_check.volume) - reagents.trans_to(H, reagents.total_volume, transfered_by = user) - qdel(src) diff --git a/white/valtos/code/unsorted/butt.dm b/white/valtos/code/unsorted/butt.dm index 305ae6e0e23d..2372fe34f1ee 100644 --- a/white/valtos/code/unsorted/butt.dm +++ b/white/valtos/code/unsorted/butt.dm @@ -124,40 +124,40 @@ X.Insert(src) /mob/living/carbon/human/proc/checkbuttinspect(mob/living/carbon/user) - if(user.zone_selected == "groin") - var/obj/item/organ/butt/B = getorgan(/obj/item/organ/butt) - if(!B) - to_chat(user, span_warning("А задница-то отсутствует!")) - return - if(!w_uniform) - var/datum/component/storage/STR = B.storage_handler.GetComponent(B.pocket_storage_component_path) - if(B && STR) - user.visible_message(span_warning("[user] начинает инспектировать [user == src ? "свою задницу" : "задницу [src]"]!") , span_warning("Начинаю инспектировать [user == src ? "свою задницу" : "задницу [src]"]!")) - if(do_mob(user, src, 40)) - user.visible_message(span_warning("[user] инспектирует [user == src ? "свою задницу" : "задницу [src]"]!") , span_warning("Инспектирую [user == src ? "свою задницу" : "задницу [src]"]!")) - if (user.active_storage) - user.active_storage.close(user) - STR.orient2hud(user) - STR.show_to(user) - return TRUE - else - user.visible_message(span_warning("[user] проваливает попытку инспекции [user == src ? "своей задницы" : "задницы [src]"]!") , span_warning("Не вышло проинспектировать [user == src ? "свою задницу" : "задницу [src]"]!")) - return TRUE + var/obj/item/organ/butt/B = getorgan(/obj/item/organ/butt) + if(!B) + to_chat(user, span_warning("А задница-то отсутствует!")) + return + if(!w_uniform) + var/datum/component/storage/STR = B.storage_handler.GetComponent(B.pocket_storage_component_path) + if(B && STR) + user.visible_message(span_warning("[user] начинает инспектировать [user == src ? "свою задницу" : "задницу [src]"]!") , span_warning("Начинаю инспектировать [user == src ? "свою задницу" : "задницу [src]"]!")) + if(do_mob(user, src, 40)) + user.visible_message(span_warning("[user] инспектирует [user == src ? "свою задницу" : "задницу [src]"]!") , span_warning("Инспектирую [user == src ? "свою задницу" : "задницу [src]"]!")) + if (user.active_storage) + user.active_storage.close(user) + STR.orient2hud(user) + STR.show_to(user) + return TRUE else - to_chat(user, span_warning("Задницы нет!")) + user.visible_message(span_warning("[user] проваливает попытку инспекции [user == src ? "своей задницы" : "задницы [src]"]!") , span_warning("Не вышло проинспектировать [user == src ? "свою задницу" : "задницу [src]"]!")) return TRUE else - if(user == src) - user.visible_message(span_warning("[user] хватает себя за зад!") , span_warning("Хватаю себя за зад!")) - to_chat(user, span_warning("Надо бы снять одежду сперва!")) - else - user.visible_message(span_warning("[user] хватает [src] за задницу!") , span_warning("Хватаю задницу [src]!")) - to_chat(user, span_warning("Надо бы снять с [src] одежду!")) - to_chat(src, span_userdanger("Мой зад кто-то схватил!")) + to_chat(user, span_warning("Задницы нет!")) return TRUE + else + if(user == src) + user.visible_message(span_warning("[user] хватает себя за зад!") , span_warning("Хватаю себя за зад!")) + to_chat(user, span_warning("Надо бы снять одежду сперва!")) + else + user.visible_message(span_warning("[user] хватает [src] за задницу!") , span_warning("Хватаю задницу [src]!")) + to_chat(user, span_warning("Надо бы снять с [src] одежду!")) + to_chat(src, span_userdanger("Мой зад кто-то схватил!")) + return TRUE /mob/living/carbon/human/grabbedby(mob/living/user, supress_message = FALSE) - if (checkbuttinspect(user)) + + if (checkbuttinspect(user) && user.zone_selected == BODY_ZONE_PRECISE_GROIN) return FALSE return ..() diff --git a/white/valtos/code/unsorted/randommaint.dm b/white/valtos/code/unsorted/randommaint.dm index c5fa76917e7d..e045bb12b1f2 100644 --- a/white/valtos/code/unsorted/randommaint.dm +++ b/white/valtos/code/unsorted/randommaint.dm @@ -29,7 +29,6 @@ /obj/effect/spawner/lootdrop/gross_decal_spawner = 25, /mob/living/simple_animal/hostile/poison/giant_spider = 1, /mob/living/simple_animal/hostile/cockroach = 1, - /obj/effect/decal/cleanable/cum = 1, /obj/effect/spawner/lootdrop/space/languagebook = 1, /obj/effect/spawner/lootdrop/space/fancytool = 1, /obj/effect/spawner/lootdrop/space/fancytech = 1, diff --git a/white/valtos/code/unsorted/raper.dm b/white/valtos/code/unsorted/raper.dm deleted file mode 100644 index 02c1a2bc67e5..000000000000 --- a/white/valtos/code/unsorted/raper.dm +++ /dev/null @@ -1,342 +0,0 @@ -/datum/ai_controller/raper - blackboard = list(BB_RAPER_AGRESSIVE = FALSE,\ - BB_RAPER_ENEMIES = list(),\ - BB_RAPER_CURRENT_ATTACK_TARGET = null,\ - BB_RAPER_CURRENT_ATTACK_TARGET) - -/datum/ai_controller/raper/TryPossessPawn(atom/new_pawn) - if(!ishuman(new_pawn)) - return AI_CONTROLLER_INCOMPATIBLE - RegisterSignal(new_pawn, COMSIG_PARENT_ATTACKBY, .proc/on_attackby) - RegisterSignal(new_pawn, COMSIG_ATOM_ATTACK_HAND, .proc/on_attack_hand) - RegisterSignal(new_pawn, COMSIG_ATOM_ATTACK_PAW, .proc/on_attack_paw) - RegisterSignal(new_pawn, COMSIG_ATOM_BULLET_ACT, .proc/on_bullet_act) - RegisterSignal(new_pawn, COMSIG_ATOM_HITBY, .proc/on_hitby) - RegisterSignal(new_pawn, COMSIG_MOVABLE_CROSSED, .proc/on_Crossed) - RegisterSignal(new_pawn, COMSIG_LIVING_START_PULL, .proc/on_startpulling) - RegisterSignal(new_pawn, COMSIG_LIVING_TRY_SYRINGE, .proc/on_try_syringe) - RegisterSignal(new_pawn, COMSIG_ATOM_HULK_ATTACK, .proc/on_attack_hulk) - RegisterSignal(new_pawn, COMSIG_CARBON_CUFF_ATTEMPTED, .proc/on_attempt_cuff) - blackboard[BB_RAPER_AGRESSIVE] = TRUE //Angry cunt - return ..() //Run parent at end - -/datum/ai_controller/raper/UnpossessPawn(destroy) - UnregisterSignal(pawn, list(COMSIG_PARENT_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_MOVABLE_CROSSED, COMSIG_LIVING_START_PULL,\ - COMSIG_LIVING_TRY_SYRINGE, COMSIG_ATOM_HULK_ATTACK, COMSIG_CARBON_CUFF_ATTEMPTED)) - return ..() //Run parent at end - -/datum/ai_controller/raper/able_to_run() - var/mob/living/carbon/human/living_pawn = pawn - - if(IS_DEAD_OR_INCAP(living_pawn)) - return FALSE - return ..() - -/datum/ai_controller/raper/SelectBehaviors(delta_time) - current_behaviors = list() - var/mob/living/carbon/human/living_pawn = pawn - - if(SHOULD_RESIST(living_pawn) && DT_PROB(MONKEY_RESIST_PROB, delta_time)) - current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/resist) //BRO IM ON FUCKING FIRE BRO - return //IM NOT DOING ANYTHING ELSE BUT EXTUINGISH MYSELF, GOOD GOD HAVE MERCY. - - var/list/enemies = blackboard[BB_RAPER_ENEMIES] - - if(HAS_TRAIT(pawn, TRAIT_PACIFISM)) //Not a pacifist? lets try some combat behavior. - return - - if(length(enemies) || blackboard[BB_RAPER_AGRESSIVE]) //We have enemies or are pissed - - var/mob/living/carbon/human/selected_enemy - - for(var/mob/living/carbon/human/possible_enemy in view(MONKEY_ENEMY_VISION, living_pawn)) - if(possible_enemy == living_pawn || (!enemies[possible_enemy] && (!blackboard[BB_RAPER_AGRESSIVE] || HAS_AI_CONTROLLER_TYPE(possible_enemy, /datum/ai_controller/raper)))) //Are they an enemy? (And do we even care?) - continue - - selected_enemy = possible_enemy - break - if(selected_enemy) - if(!selected_enemy.stat && !(HAS_TRAIT(selected_enemy, TRAIT_IMMOBILIZED)) && !(HAS_TRAIT(selected_enemy, TRAIT_FLOORED)) && !(HAS_TRAIT(selected_enemy, TRAIT_HANDS_BLOCKED))) //He's up, get him! - blackboard[BB_RAPER_CURRENT_ATTACK_TARGET] = selected_enemy - current_movement_target = selected_enemy - current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/battle_screech/raper) - current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/battle_shout/raper) - current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/raper_attack_mob) - return //Focus on this - else //He's down, can we fuck him? - blackboard[BB_RAPER_CURRENT_ATTACK_TARGET] = selected_enemy - current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/fuck_mob) - return - -//When idle just kinda fuck around. -/datum/ai_controller/raper/PerformIdleBehavior(delta_time) - var/mob/living/carbon/human/living_pawn = pawn - - if(DT_PROB(25, delta_time) && (living_pawn.mobility_flags & MOBILITY_MOVE) && isturf(living_pawn.loc) && !living_pawn.pulledby) - step(living_pawn, pick(GLOB.cardinals)) - else if(DT_PROB(5, delta_time)) - INVOKE_ASYNC(living_pawn, /mob.proc/emote, pick("moan")) - else if(DT_PROB(1, delta_time)) - INVOKE_ASYNC(living_pawn, /mob.proc/emote, pick("moan","spin","flip")) - -///Reactive events to being hit -/datum/ai_controller/raper/proc/retaliate(mob/living/L) - var/list/enemies = blackboard[BB_RAPER_ENEMIES] - enemies[L] += MONKEY_HATRED_AMOUNT - -/datum/ai_controller/raper/proc/on_attackby(datum/source, obj/item/I, mob/user) - SIGNAL_HANDLER - if(I.force && I.damtype != STAMINA) - retaliate(user) - -/datum/ai_controller/raper/proc/on_attack_hand(datum/source, mob/living/L) - SIGNAL_HANDLER - if(L.a_intent == INTENT_GRAB && prob(MONKEY_RETALIATE_HARM_PROB)) - retaliate(L) - else if(L.a_intent == INTENT_DISARM && prob(MONKEY_RETALIATE_DISARM_PROB)) - retaliate(L) - -/datum/ai_controller/raper/proc/on_attack_paw(datum/source, mob/living/L) - SIGNAL_HANDLER - if(L.a_intent == INTENT_HARM && prob(MONKEY_RETALIATE_HARM_PROB)) - retaliate(L) - else if(L.a_intent == INTENT_DISARM && prob(MONKEY_RETALIATE_DISARM_PROB)) - retaliate(L) - -/datum/ai_controller/raper/proc/on_bullet_act(datum/source, obj/projectile/Proj) - SIGNAL_HANDLER - var/mob/living/carbon/human/living_pawn = pawn - if(istype(Proj , /obj/projectile/beam)||istype(Proj, /obj/projectile/bullet)) - if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) - if(!Proj.nodamage && Proj.damage < living_pawn.health && ishuman(Proj.firer)) - retaliate(Proj.firer) - -/datum/ai_controller/raper/proc/on_hitby(datum/source, atom/movable/AM, skipcatch = FALSE, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) - SIGNAL_HANDLER - if(istype(AM, /obj/item)) - var/mob/living/carbon/human/living_pawn = pawn - var/obj/item/I = AM - if(I.throwforce < living_pawn.health && ishuman(I.thrownby)) - var/mob/living/carbon/human/H = I.thrownby - retaliate(H) - -/datum/ai_controller/raper/proc/on_Crossed(datum/source, atom/movable/AM) - SIGNAL_HANDLER - var/mob/living/carbon/human/living_pawn = pawn - if(!IS_DEAD_OR_INCAP(living_pawn) && ishuman(AM)) - var/mob/living/carbon/human/in_the_way_mob = AM - in_the_way_mob.knockOver(living_pawn) - return - -/datum/ai_controller/raper/proc/on_startpulling(datum/source, atom/movable/puller, state, force) - SIGNAL_HANDLER - var/mob/living/carbon/human/living_pawn = pawn - if(!IS_DEAD_OR_INCAP(living_pawn) && prob(MONKEY_PULL_AGGRO_PROB)) // nuh uh you don't pull me! - retaliate(living_pawn.pulledby) - return TRUE - -/datum/ai_controller/raper/proc/on_try_syringe(datum/source, mob/user) - SIGNAL_HANDLER - // chance of monkey retaliation - if(prob(MONKEY_SYRINGE_RETALIATION_PROB)) - retaliate(user) - -/datum/ai_controller/raper/proc/on_attack_hulk(datum/source, mob/user) - SIGNAL_HANDLER - retaliate(user) - -/datum/ai_controller/raper/proc/on_attempt_cuff(datum/source, mob/user) - SIGNAL_HANDLER - // chance of monkey retaliation - if(prob(MONKEY_CUFF_RETALIATION_PROB)) - retaliate(user) - -/datum/ai_behavior/battle_screech/raper - screeches = list("scream", "moan") - -/datum/ai_behavior/battle_shout - var/list/shouts - -/datum/ai_behavior/battle_shout/perform(delta_time, datum/ai_controller/controller) - . = ..() - var/mob/living/carbon/human/living_pawn = controller.pawn - living_pawn.say(uppertext(pick(shouts))) - finish_action(controller, TRUE) - -/datum/ai_behavior/battle_shout/raper - shouts = list("СЕЙЧАС ТЕБЕ БУДЕТ ПРИЯТНО!!!",\ - "ИДИ СЮДА, СЛАДЕНЬКИЙ!!!",\ - "ОХ-ОХ-ОХ, Я СЕЙЧАС ОБКОНЧАЮСЬ!!!",\ - "ТЕБЕ ЭТО ОБЯЗАТЕЛЬНО ПОНРАВИТСЯ!!!") - -/datum/ai_behavior/raper_attack_mob - behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM //performs to increase frustration - -/datum/ai_behavior/raper_attack_mob/perform(delta_time, datum/ai_controller/controller) - . = ..() - - var/mob/living/carbon/human/target = controller.blackboard[BB_RAPER_CURRENT_ATTACK_TARGET] - var/mob/living/carbon/human/living_pawn = controller.pawn - - if(!target || target.stat != CONSCIOUS || HAS_TRAIT(target, TRAIT_IMMOBILIZED) || HAS_TRAIT(target, TRAIT_FLOORED) || HAS_TRAIT(target, TRAIT_HANDS_BLOCKED)) - finish_action(controller, TRUE) //Target == owned - - if(living_pawn.Adjacent(target) && isturf(target.loc) && !IS_DEAD_OR_INCAP(living_pawn)) // if right next to perp - // check if target has a weapon - var/obj/item/W - for(var/obj/item/I in target.held_items) - if(!(I.item_flags & ABSTRACT)) - W = I - break - - // if the target has a weapon, chance to disarm them - if(W && DT_PROB(MONKEY_ATTACK_DISARM_PROB, delta_time)) - living_pawn.a_intent = INTENT_DISARM - raper_attack(controller, target, delta_time) - else - living_pawn.a_intent = INTENT_GRAB - raper_attack(controller, target, delta_time) - - -/datum/ai_behavior/raper_attack_mob/finish_action(datum/ai_controller/controller, succeeded) - . = ..() - controller.blackboard[BB_RAPER_CURRENT_ATTACK_TARGET] = null - -/// attack using a held weapon otherwise bite the enemy, then if we are angry there is a chance we might calm down a little -/datum/ai_behavior/raper_attack_mob/proc/raper_attack(datum/ai_controller/controller, mob/living/target, delta_time) - - var/mob/living/carbon/human/living_pawn = controller.pawn - - if(living_pawn.next_move > world.time) - return - - living_pawn.changeNext_move(CLICK_CD_MELEE) //We play fair - - var/obj/item/weapon = living_pawn.held_items.len ? pick(living_pawn.held_items) : null - - living_pawn.face_atom(target) - - living_pawn.a_intent = INTENT_GRAB - target.grabbedby(living_pawn) - target.grippedby(living_pawn) - - // attack with weapon if we have one - if(weapon) - weapon.melee_attack_chain(living_pawn, target) - else - target.attack_hand(living_pawn) - - // no de-aggro - if(controller.blackboard[BB_RAPER_AGRESSIVE]) - return - - if(DT_PROB(MONKEY_HATRED_REDUCTION_PROB, delta_time)) - controller.blackboard[BB_RAPER_ENEMIES][target]-- - - // if we are not angry at our target, go back to idle - if(controller.blackboard[BB_RAPER_ENEMIES][target] <= 0) - var/list/enemies = controller.blackboard[BB_RAPER_ENEMIES] - enemies.Remove(target) - if(controller.blackboard[BB_RAPER_CURRENT_ATTACK_TARGET] == target) - finish_action(controller, TRUE) - -/datum/ai_behavior/fuck_mob - behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM //performs to increase frustration - -/datum/ai_behavior/fuck_mob/finish_action(datum/ai_controller/controller, succeeded) - . = ..() - controller.blackboard[BB_RAPER_CURRENT_ATTACK_TARGET] = null - controller.blackboard[BB_RAPER_FUCKING] = FALSE - -/datum/ai_behavior/fuck_mob/perform(delta_time, datum/ai_controller/controller) - . = ..() - - if(controller.blackboard[BB_RAPER_FUCKING]) - return - - var/mob/living/carbon/human/target = controller.blackboard[BB_RAPER_CURRENT_ATTACK_TARGET] - var/mob/living/carbon/human/living_pawn = controller.pawn - - controller.current_movement_target = target - - if(target.pulledby != living_pawn && !HAS_AI_CONTROLLER_TYPE(target.pulledby, /datum/ai_controller/raper)) //Dont steal from my fellow monkeys. - if(living_pawn.Adjacent(target) && isturf(target.loc)) - living_pawn.a_intent = INTENT_GRAB - target.grabbedby(living_pawn) - target.grippedby(living_pawn) - return //Do the rest next turn - - controller.current_movement_target = target - - if(living_pawn.Adjacent(target)) - living_pawn.forceMove(get_turf(target)) - for(var/i in 1 to 30 step 2) - addtimer(CALLBACK(src, .proc/try_fuck_mob, controller), i) - - else //This means we might be getting pissed! - return - -/datum/ai_behavior/fuck_mob/proc/try_fuck_mob(datum/ai_controller/controller) - var/mob/living/carbon/human/living_pawn = controller.pawn - var/mob/living/carbon/human/target = controller.blackboard[BB_RAPER_CURRENT_ATTACK_TARGET] - - controller.blackboard[BB_RAPER_FUCKING] = TRUE - - if(target && ishuman(target)) - if(target.gender == FEMALE) - target.dropItemToGround(target.wear_suit) - target.dropItemToGround(target.w_uniform) - target.drop_all_held_items() - living_pawn.do_dance(target, pick("do_dance")) - else - target.dropItemToGround(target.wear_suit) - target.dropItemToGround(target.w_uniform) - target.drop_all_held_items() - living_pawn.do_dance(target, pick("do_dancor")) - finish_action(controller, TRUE) - -/mob/living/carbon/human/raper - ai_controller = /datum/ai_controller/raper - -/mob/living/carbon/human/raper/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_STUNIMMUNE, "sosi") - ADD_TRAIT(src, TRAIT_STRONG_GRABBER, "sosi") - -/datum/ai_controller/raper/opyx - blackboard = list(BB_RAPER_AGRESSIVE = FALSE,\ - BB_RAPER_ENEMIES = list(),\ - BB_RAPER_CURRENT_ATTACK_TARGET = null,\ - BB_RAPER_CURRENT_ATTACK_TARGET) - - -/datum/ai_behavior/battle_shout/raper/opyx - shouts = list("СЕЙЧАС ТЕБЕ БУДЕТ ПРИЯТНО!!!",\ - "ИДИ СЮДА, СЛАДЕНЬКИЙ!!!",\ - "ОХ-ОХ-ОХ, Я СЕЙЧАС ОБКОНЧАЮСЬ!!!",\ - "Обязательно посмотрите главную страницу нашего сервера на вики!!!",\ - "На нашем сервере очень серьезно относятся к отыгрышу ролей!!!",\ - "Сборка нашего сервера: OnyxBay!!!",\ - "Baystation12 с классической картой космической станции и своими улучшениями!!!",\ - "Сообщить о найденных багах вы можете здесь!!!",\ - "И присоединяйтесь к нашему сообществу в Дискорде. Там вы сможете найти свежие новости, обсуждение раундов, предложить свои идеи по улучшению сервера, а также пожаловаться на другого игрока или оспорить свой бан!!!",\ - "Добро пожаловать на Chaotic Onyx!!!",\ - "Это основной сервер нашего сообщества с классическим духом бесконечного хаоса на космической станции 13!!!",\ - "Если вы хотите спокойной и размеренной игры с более серьезным подходом к отыгрышу, то заходите на наш второй сервер: Lawful Onyx!!!",\ - "Chaotic Onyx рассчитан в первую очередь на взрослых людей, которые отдают себе отчет в своих поступках и не будут специально ломать игру другим игрокам!!!",\ - "На нашем сервере запрещается играть!!!",\ - "Помните, что администраторы тоже люди и часто ошибаются!!!",\ - "Администраторы Chaotic Onyx будут выдавать баны за любые нарушения на свое усмотрение, с учетом неких внутренних норм, которые сложились со временем, предыдущих банов и дополнительных обстоятельств!!!",\ - "Срок бана, выбранный администратором может быть изменен на основании обсуждения нарушения сообществом с целью подобрать условия, наиболее удобные большинству игроков сервера!!!",\ - "Любые подобные действия караются достаточно строго!!!",\ - "Использование неприемлимых аудио-визуальных ресурсов ингейм!!!",\ - "ТЕБЕ ЭТО ОБЯЗАТЕЛЬНО ПОНРАВИТСЯ!!!") - -/mob/living/carbon/human/raper/opyx - ai_controller = /datum/ai_controller/raper/opyx - -/mob/living/carbon/human/raper/opyx/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_STUNIMMUNE, "sosi") - ADD_TRAIT(src, TRAIT_STRONG_GRABBER, "sosi") - fully_replace_character_name(null, pick("Partingglass", "Rodial", "Tatarin", "K0b0ld", "Xmaebx", "Ucnahez", "Mrpersival", "Bulatm12", "Moji04nik", "Novan13", "Panchoys", "Primudsuka", "Amiclerick", "Epicus", "Polukarpovitch", "Antigolic", "Davidkameron", "Tapko4eb", "Mellondeluna", "Sholom", "Michael Shepard", "Clockrigger"))