forked from tgstation/tgstation
-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adds hookas #1124
Open
mcbalaam
wants to merge
13
commits into
ss220club:master
Choose a base branch
from
mcbalaam:bar-stuff
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Adds hookas #1124
Changes from 1 commit
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
f162508
добавляет кальяны - итерация 1
mcbalaam 123ad7d
исправляю косяки, добавил использование еды
mcbalaam f3a532d
и ещё правочки
mcbalaam 7f5e1b4
а так?
mcbalaam 98d468e
увы.
mcbalaam 15512e2
тьфу на тебя
mcbalaam eed0401
ну же
mcbalaam 9908058
??
mcbalaam 617e773
ReallyMad
mcbalaam f1ec248
guh
mcbalaam c697569
sssssss
mcbalaam a6f67b6
теперь можно использовать мундштук не на z, а через ЛКМ (олсо чинит р…
mcbalaam 6dbfb33
делаем кальянчики подешевле
mcbalaam File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
/datum/modpack/bar_hookahs | ||
/// A string name for the modpack. Used for looking up other modpacks in init. | ||
name = "bar_hookahs" | ||
/// A string desc for the modpack. Can be used for modpack verb list as description. | ||
desc = "its useless" | ||
/// A string with authors of this modpack. | ||
author = "User" | ||
|
||
/datum/modpack/bar_hookahs/pre_initialize() | ||
. = ..() | ||
|
||
/datum/modpack/bar_hookahs/initialize() | ||
. = ..() | ||
|
||
/datum/modpack/bar_hookahs/post_initialize() | ||
. = ..() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
#include "_bar_hookahs.dm" | ||
|
||
#include "code/bar_hookahs.dm" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,345 @@ | ||
#define INTERNAL_VOLUME 50 | ||
#define MAX_FUEL 30 | ||
#define FUEL_PER_COAL 30 | ||
#define FUEL_CONSUME_INTERVAL 30 SECONDS | ||
#define INHALE_VOLUME 4 | ||
#define SPREAD_VOLUME 1 | ||
#define INHALE_COOLDOWN 5 SECONDS | ||
#define COUGH_STAMINA_LOSS 5 | ||
|
||
/obj/machinery/hookah | ||
name = "кальян" | ||
desc = "Простой стеклянный водный кальян." | ||
icon = 'modular_bandastation/bar_hookahs/icons/hookah.dmi' | ||
icon_state = "hookah" | ||
max_integrity = 50 | ||
integrity_failure = 0 | ||
anchored = FALSE | ||
can_be_unanchored = TRUE | ||
|
||
pixel_y = 10 | ||
|
||
var/mutable_appearance/pipe_overlay | ||
var/obj/item/reagent_container | ||
var/obj/item/hookah_mouthpiece/this_mouthpiece | ||
var/datum/mouthpiece_attachment/attachment | ||
var/fuel = 0 | ||
var/lit = FALSE | ||
var/last_fuel_consume = 0 | ||
var/mutable_appearance/coal_overlay | ||
var/mutable_appearance/coal_lit_overlay | ||
var/mutable_appearance/lit_emissive | ||
var/particle_type | ||
var/datum/light_source/glow_light | ||
|
||
/obj/machinery/hookah/examine() | ||
. = ..() | ||
. += "<span class='info'>ALT+ЛКМ погасит кальян, ALT+ПКМ очистит ёмкость.</span>" | ||
if(lit) | ||
. += "<span class='info'>Кальян зажжён.</span>" | ||
|
||
/datum/mouthpiece_attachment | ||
var/obj/machinery/hookah/this_hookah | ||
var/atom/attached_to | ||
VAR_PRIVATE | ||
datum/beam/beam | ||
/datum/mouthpiece_attachment/New( | ||
obj/machinery/hookah/this_hookah, | ||
atom/attached_to | ||
) | ||
src.this_hookah = this_hookah | ||
src.attached_to = attached_to | ||
beam = this_hookah.Beam( | ||
attached_to, | ||
icon = 'icons/effects/beam.dmi', | ||
icon_state = "1-full", | ||
beam_color = COLOR_BLACK, | ||
layer = BELOW_MOB_LAYER, | ||
override_origin_pixel_y = 0, | ||
) | ||
|
||
/datum/mouthpiece_attachment/Destroy(force) | ||
this_hookah = null | ||
attached_to = null | ||
QDEL_NULL(beam) | ||
return ..() | ||
|
||
/obj/machinery/hookah/Initialize(mapload) | ||
. = ..() | ||
pipe_overlay = mutable_appearance('modular_bandastation/bar_hookahs/icons/hookah.dmi', "pipe") | ||
this_mouthpiece = new(src) | ||
this_mouthpiece.source_hookah = src | ||
update_appearance(UPDATE_OVERLAYS) | ||
create_reagents(INTERNAL_VOLUME, TRANSPARENT) | ||
reagent_container = src | ||
coal_overlay = mutable_appearance(icon, "coal") | ||
coal_lit_overlay = mutable_appearance(icon, "coal_lit") | ||
lit_emissive = emissive_appearance(icon, "lit_overlay", src, alpha = src.alpha) | ||
|
||
/obj/machinery/hookah/update_overlays() | ||
. = ..() | ||
if(this_mouthpiece in contents) | ||
. += pipe_overlay | ||
if(fuel > 0) | ||
. += coal_overlay | ||
if(lit) | ||
. += coal_lit_overlay | ||
. += lit_emissive | ||
|
||
/obj/machinery/hookah/proc/return_mouthpiece(mouthpiece) | ||
var/obj/item/hookah_mouthpiece/current_mouthpiece = mouthpiece | ||
if(current_mouthpiece.source_hookah != src) | ||
return FALSE | ||
if(this_mouthpiece in contents) | ||
return FALSE | ||
current_mouthpiece.forceMove(src) | ||
update_appearance(UPDATE_OVERLAYS) | ||
return TRUE | ||
|
||
/obj/machinery/hookah/update_appearance() | ||
. = ..() | ||
if(this_mouthpiece in contents) | ||
QDEL_NULL(attachment) | ||
|
||
/obj/machinery/hookah/attack_hand(mob/user, list/modifiers) | ||
. = ..() | ||
if(.) | ||
return | ||
if(this_mouthpiece in contents) | ||
user.put_in_hands(this_mouthpiece) | ||
this_mouthpiece.source_hookah = src | ||
to_chat(user, span_notice("Вы берёте мундштук в руку.")) | ||
update_appearance(UPDATE_OVERLAYS) | ||
attachment = new(src, user) | ||
else | ||
balloon_alert(user, "уже занято!") | ||
|
||
/obj/machinery/hookah/proc/try_light(obj/item/O, mob/user) | ||
if(lit) | ||
to_chat(user, span_warning("Кальян уже зажжён!")) | ||
return | ||
if(!fuel) | ||
to_chat(user, span_warning("В кальяне нет углей!")) | ||
return | ||
var/msg = O.ignition_effect(src, user) | ||
if(msg) | ||
visible_message(msg) | ||
ignite() | ||
return TRUE | ||
|
||
/obj/machinery/hookah/attackby(obj/item/this_item, mob/user, params) | ||
if(istype(this_item, /obj/item/hookah_mouthpiece)) | ||
return_mouthpiece(this_item) | ||
return | ||
if(istype(this_item, /obj/item/hookah_coals)) | ||
if(fuel + FUEL_PER_COAL > MAX_FUEL) | ||
to_chat(user, span_warning("В кальяне уже достаточно углей!")) | ||
return | ||
fuel += FUEL_PER_COAL | ||
qdel(this_item) | ||
to_chat(user, span_notice("Вы добавляете угли в кальян.")) | ||
return | ||
if(istype(this_item, /obj/item/reagent_containers)) | ||
var/obj/item/reagent_containers/container = this_item | ||
if(!container.reagents.total_volume) | ||
to_chat(user, span_warning("[container] пуст!")) | ||
return | ||
if(!reagent_container) | ||
to_chat(user, span_warning("В кальяне нет контейнера для жидкости!")) | ||
return | ||
var/transferred = container.reagents.trans_to(reagent_container, container.amount_per_transfer_from_this) | ||
user.visible_message(span_notice("[user] переливает что-то в кальян."), span_notice("Вы перелили [transferred] единиц жидкости в кальян.")) | ||
return | ||
if(try_light(this_item, user)) | ||
return | ||
return ..() | ||
|
||
/obj/item/hookah_mouthpiece | ||
name = "кальянный мундштук" | ||
desc = "Мундштук, выполненный из какого-то лёгкого металла. На его ручке что-то выгравировано." | ||
icon = 'modular_bandastation/bar_hookahs/icons/hookah.dmi' | ||
icon_state = "mouthpiece" | ||
w_class = WEIGHT_CLASS_SMALL | ||
var/obj/machinery/hookah/source_hookah | ||
var/datum/beam/beam | ||
var/last_inhale = 0 | ||
var/particle_type | ||
|
||
/obj/item/hookah_mouthpiece/Initialize(mapload, obj/machinery/hookah/hookah) | ||
. = ..() | ||
if(hookah) | ||
source_hookah = hookah | ||
|
||
/obj/item/hookah_mouthpiece/Destroy() | ||
if(source_hookah) | ||
source_hookah = null | ||
QDEL_NULL(source_hookah.attachment) | ||
stop_smoke() | ||
return ..() | ||
|
||
/obj/item/hookah_mouthpiece/dropped(mob/user) | ||
. = ..() | ||
if(source_hookah) | ||
source_hookah.return_mouthpiece(src) | ||
|
||
/obj/item/hookah_mouthpiece/pickup(mob/user) | ||
. = ..() | ||
|
||
/obj/item/hookah_coals | ||
name = "угли для кальяна" | ||
desc = "Плотные угольки, филигранно обработанные до состояния кубика." | ||
icon = 'modular_bandastation/bar_hookahs/icons/hookah.dmi' | ||
icon_state = "coals" | ||
custom_premium_price = PAYCHECK_CREW * 1.5 | ||
|
||
/obj/item/hookah_coals/examine() | ||
. = ..() | ||
. += "<span class='info'>В кучке три кубика.</span>" | ||
|
||
/obj/machinery/hookah/process() | ||
if(!lit || !fuel) | ||
return PROCESS_KILL | ||
|
||
if(world.time > last_fuel_consume + FUEL_CONSUME_INTERVAL) | ||
fuel = max(fuel - 1, 0) | ||
last_fuel_consume = world.time | ||
if(fuel <= 0) | ||
put_out() | ||
return PROCESS_KILL | ||
|
||
if(attachment) | ||
var/atom/attached_to = attachment.attached_to | ||
if(!(get_dist(src, attached_to) <= 1 && isturf(attached_to.loc))) | ||
if(ismob(attached_to)) | ||
var/mob/user = attached_to | ||
user.dropItemToGround(this_mouthpiece) | ||
to_chat(user, span_warning("Вы отпускаете мундштук.")) | ||
QDEL_NULL(attachment) | ||
|
||
/obj/machinery/hookah/click_alt(mob/user) | ||
if(!lit) | ||
return CLICK_ACTION_BLOCKING | ||
to_chat(user, span_notice("Вы начинаете тушить кальян...")) | ||
if(!do_after(user, 2 SECONDS, src)) | ||
return CLICK_ACTION_BLOCKING | ||
put_out() | ||
return CLICK_ACTION_SUCCESS | ||
|
||
/obj/machinery/hookah/proc/ignite() | ||
lit = TRUE | ||
START_PROCESSING(SSmachines, src) | ||
visible_message(span_notice("Угли внутри кальяна медленно багровеют.")) | ||
update_appearance() | ||
set_light(2, 1, LIGHT_COLOR_ORANGE) | ||
|
||
/obj/machinery/hookah/proc/put_out() | ||
lit = FALSE | ||
visible_message(span_notice("Угли внутри кальяна возвращают свой привычный цвет.")) | ||
update_appearance() | ||
if(!fuel) | ||
STOP_PROCESSING(SSmachines, src) | ||
set_light(0) | ||
|
||
/obj/machinery/hookah/click_alt_secondary(mob/user) | ||
if(!reagent_container) | ||
return CLICK_ACTION_BLOCKING | ||
if(!do_after(user, 2 SECONDS, src)) | ||
return CLICK_ACTION_BLOCKING | ||
reagent_container.reagents.clear_reagents() | ||
to_chat(user, span_notice("Вы очистили внутреннее хранилище реагентов кальяна.")) | ||
return CLICK_ACTION_SUCCESS | ||
|
||
/obj/item/hookah_mouthpiece/attack_self(mob/living/carbon/human/user) | ||
if(!source_hookah || !source_hookah.lit) | ||
return ..() | ||
|
||
user.visible_message(span_notice("[user] затягивается из кальяна."), span_notice("Вы затягиваетесь...")) | ||
if(!do_after(user, 2 SECONDS, src)) | ||
return | ||
if(!source_hookah.reagent_container.reagents.total_volume) | ||
to_chat(user, span_warning("В кальяне нет жидкости!")) | ||
return | ||
inhale_smoke(user) | ||
|
||
/obj/item/hookah_mouthpiece/proc/inhale_smoke(mob/living/carbon/human/user) | ||
if(!source_hookah.reagent_container || !source_hookah.reagent_container.reagents.total_volume) | ||
to_chat(user, span_warning("В кальяне нет жидкости!")) | ||
return | ||
source_hookah.particle_type = /particles/smoke/cig/big | ||
source_hookah.add_shared_particles(source_hookah.particle_type) | ||
|
||
var/datum/reagents/these_reagents = source_hookah.reagent_container.reagents | ||
var/transferred = these_reagents.trans_to(user, INHALE_VOLUME, methods = INHALE) | ||
playsound(src, 'sound/effects/bubbles/bubbles.ogg', 20) | ||
if(transferred) | ||
to_chat(user, span_notice("Вы вдыхаете дым из кальяна.")) | ||
if(world.time < (last_inhale + INHALE_COOLDOWN)) | ||
to_chat(user, span_warning("Вы вдыхаете слишком резко и закашливаетесь!")) | ||
user.emote("cough") | ||
user.adjustStaminaLoss(COUGH_STAMINA_LOSS) | ||
last_inhale = world.time | ||
var/datum/effect_system/fluid_spread/smoke/chem/puff = new | ||
puff.set_up(1, SPREAD_VOLUME, location = source_hookah.loc, carry = reagents) | ||
puff.start() | ||
addtimer(CALLBACK(src, PROC_REF(stop_smoke)), 2 SECONDS) | ||
|
||
/obj/item/hookah_mouthpiece/proc/stop_smoke() | ||
if(source_hookah.particle_type) | ||
source_hookah.remove_shared_particles(source_hookah.particle_type) | ||
source_hookah.particle_type = null | ||
|
||
/obj/machinery/hookah/proc/break_hookah() | ||
if(lit) | ||
put_out() | ||
fuel = 0 | ||
new /obj/item/shard(get_turf(src)) | ||
if(reagent_container && reagent_container.reagents?.total_volume) | ||
reagent_container.reagents.expose(get_turf(src), TOUCH) | ||
if(this_mouthpiece) | ||
qdel(this_mouthpiece) | ||
qdel(src) | ||
|
||
/obj/machinery/hookah/Destroy() | ||
if(reagent_container && reagent_container != src) | ||
QDEL_NULL(reagent_container) | ||
if(particle_type) | ||
remove_shared_particles(particle_type) | ||
set_light(0) | ||
return ..() | ||
|
||
/obj/machinery/hookah/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir) | ||
. = ..() | ||
if(. && atom_integrity <= 0) | ||
break_hookah() | ||
|
||
#undef INTERNAL_VOLUME | ||
#undef MAX_FUEL | ||
#undef FUEL_PER_COAL | ||
#undef FUEL_CONSUME_INTERVAL | ||
#undef INHALE_VOLUME | ||
#undef SPREAD_VOLUME | ||
#undef INHALE_COOLDOWN | ||
#undef COUGH_STAMINA_LOSS | ||
|
||
|
||
/obj/machinery/vending/cigarette/New() | ||
premium += list( | ||
/obj/item/hookah_coals = 3, | ||
) | ||
. = ..() | ||
|
||
/datum/supply_pack/misc/hookah_kit | ||
name = "Набор для кальяна" | ||
desc = "Комплект для любителей подымыть и культурно расслабиться. Наполнение не включено." | ||
cost = 500 | ||
contains = list( | ||
/obj/machinery/hookah, | ||
/obj/item/hookah_coals, | ||
/obj/item/hookah_coals, | ||
/obj/item/hookah_coals | ||
) | ||
crate_name = "ящик с набором для кальяна" | ||
|
||
/obj/machinery/hookah/wrench_act(mob/living/user, obj/item/tool) | ||
default_unfasten_wrench(user, tool, time = 2 SECONDS) | ||
return ITEM_INTERACT_SUCCESS |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
все названия в ru_names.toml
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
принято