mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-01-03 05:52:17 +00:00
Clean up commit history, bugfixes, etc.
This commit is contained in:
@@ -262,6 +262,21 @@ steam.start() -- spawns the effect
|
||||
projectiles -= proj
|
||||
*/
|
||||
|
||||
// Burnt Food Smoke (Specialty for Cooking Failures)
|
||||
/obj/effect/effect/smoke/bad/burntfood
|
||||
color = "#000000"
|
||||
time_to_live = 600
|
||||
|
||||
/obj/effect/effect/smoke/bad/burntfood/process()
|
||||
for(var/mob/living/L in get_turf(src))
|
||||
affect(L)
|
||||
|
||||
/obj/effect/effect/smoke/bad/burntfood/affect(var/mob/living/L) // This stuff is extra-vile.
|
||||
if (!..())
|
||||
return 0
|
||||
if(L.needs_to_breathe())
|
||||
L.emote("cough")
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// 'Elemental' smoke
|
||||
/////////////////////////////////////////////
|
||||
@@ -376,6 +391,9 @@ steam.start() -- spawns the effect
|
||||
|
||||
/datum/effect/effect/system/smoke_spread/bad
|
||||
smoke_type = /obj/effect/effect/smoke/bad
|
||||
|
||||
/datum/effect/effect/system/smoke_spread/bad/burntfood
|
||||
smoke_type = /obj/effect/effect/smoke/bad/burntfood
|
||||
|
||||
/datum/effect/effect/system/smoke_spread/noxious
|
||||
smoke_type = /obj/effect/effect/smoke/bad/noxious
|
||||
|
||||
@@ -433,6 +433,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/condiment/spacespice
|
||||
name = "space spices"
|
||||
desc = "An exotic blend of spices for cooking. Definitely not worms."
|
||||
icon = 'icons/obj/food_syn.dmi'
|
||||
icon_state = "spacespicebottle"
|
||||
possible_transfer_amounts = list(1,40) //for clown turning the lid off
|
||||
amount_per_transfer_from_this = 1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Chaos cake
|
||||
|
||||
/datum/recipe/microwave/chaoscake_layerone
|
||||
/datum/recipe/chaoscake_layerone
|
||||
reagents = list("flour" = 300,"milk" = 200, "sugar" = 100, "egg" = 30)
|
||||
fruit = list("poisonberries" = 15, "cherries" = 15)
|
||||
items = list(
|
||||
@@ -11,7 +11,7 @@
|
||||
)
|
||||
result = /obj/structure/chaoscake
|
||||
|
||||
/datum/recipe/microwave/chaoscake_layertwo
|
||||
/datum/recipe/chaoscake_layertwo
|
||||
reagents = list("flour" = 300, "milk" = 200, "sugar" = 100, "egg" = 30, )
|
||||
fruit = list("vanilla" = 15, "banana" = 15)
|
||||
items = list(
|
||||
@@ -22,7 +22,7 @@
|
||||
)
|
||||
result = /obj/item/weapon/chaoscake_layer
|
||||
|
||||
/datum/recipe/microwave/chaoscake_layerthree
|
||||
/datum/recipe/chaoscake_layerthree
|
||||
reagents = list("flour" = 240, "milk" = 150, "sugar" = 80, "egg" = 24, "deathbell" = 100)
|
||||
fruit = list("grapes" = 30)
|
||||
items = list(
|
||||
@@ -32,7 +32,7 @@
|
||||
)
|
||||
result = /obj/item/weapon/chaoscake_layer/three
|
||||
|
||||
/datum/recipe/microwave/chaoscake_layerfour
|
||||
/datum/recipe/chaoscake_layerfour
|
||||
reagents = list("flour" = 240, "milk" = 150, "sugar" = 80, "egg" = 24, "milkshake" = 300)
|
||||
fruit = list("rice" = 30)
|
||||
items = list(
|
||||
@@ -42,13 +42,13 @@
|
||||
)
|
||||
result = /obj/item/weapon/chaoscake_layer/four
|
||||
|
||||
/datum/recipe/microwave/chaoscake_layerfive
|
||||
/datum/recipe/chaoscake_layerfive
|
||||
reagents = list("flour" = 180, "milk" = 100, "sugar" = 60, "egg" = 18, "blood" = 300)
|
||||
fruit = list("tomato" = 20)
|
||||
items = list() //supposed to be made with lobster, still has to be ported.
|
||||
result = /obj/item/weapon/chaoscake_layer/five
|
||||
|
||||
/datum/recipe/microwave/chaoscake_layersix
|
||||
/datum/recipe/chaoscake_layersix
|
||||
reagents = list("flour" = 180, "milk" = 100, "sugar" = 60, "egg" = 18, "sprinkles" = 10)
|
||||
fruit = list("apple" = 30)
|
||||
items = list(
|
||||
@@ -61,7 +61,7 @@
|
||||
)
|
||||
result = /obj/item/weapon/chaoscake_layer/six
|
||||
|
||||
/datum/recipe/microwave/chaoscake_layerseven
|
||||
/datum/recipe/chaoscake_layerseven
|
||||
reagents = list("flour" = 120, "milk" = 50, "sugar" = 40, "egg" = 12, "devilskiss" = 200)
|
||||
fruit = list("potato" = 10)
|
||||
items = list(
|
||||
@@ -71,7 +71,7 @@
|
||||
)
|
||||
result = /obj/item/weapon/chaoscake_layer/seven
|
||||
|
||||
/datum/recipe/microwave/chaoscake_layereight
|
||||
/datum/recipe/chaoscake_layereight
|
||||
reagents = list("flour" = 120, "milk" = 50, "sugar" = 40, "egg" = 12, "cream" = 200)
|
||||
fruit = list("lemon" = 10)
|
||||
items = list(
|
||||
@@ -81,7 +81,7 @@
|
||||
)
|
||||
result = /obj/item/weapon/chaoscake_layer/eight
|
||||
|
||||
/datum/recipe/microwave/chaoscake_layernine
|
||||
/datum/recipe/chaoscake_layernine
|
||||
reagents = list("water" = 100, "blood" = 100)
|
||||
fruit = list("goldapple" = 50)
|
||||
items = list()
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
return 0
|
||||
else if(I.is_crowbar() || I.is_screwdriver()) // You can't cook tools, dummy.
|
||||
return 0
|
||||
else if(!istype(check) && !istype(check, /obj/item/weapon/holder))
|
||||
else if(!istype(check) && !istype(check, /obj/item/weapon/holder))
|
||||
to_chat(user, "<span class='warning'>That's not edible.</span>")
|
||||
return 0
|
||||
|
||||
@@ -368,21 +368,27 @@
|
||||
//If cookwork has gone from above to below 0, then this item finished cooking
|
||||
finish_cooking(CI)
|
||||
|
||||
else if (!CI.burned && CI.cookwork > CI.max_cookwork * CI.overcook_mult)
|
||||
else if (!CI.burned && CI.cookwork > min(CI.max_cookwork * CI.overcook_mult, CI.max_cookwork + 30))
|
||||
burn_food(CI)
|
||||
|
||||
// Gotta hurt.
|
||||
for(var/obj/item/weapon/holder/H in CI.container.contents)
|
||||
var/mob/living/M = H.held_mob
|
||||
if (M)
|
||||
M.apply_damage(rand(1,3), mobdamagetype, "chest")
|
||||
if(M)
|
||||
M.apply_damage(rand(1,3) * (1/M.mob_size), mobdamagetype, pick(BP_ALL)) // Allows special handling for mice/smaller mobs.
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/appliance/process()
|
||||
if (cooking_power > 0 && cooking)
|
||||
for (var/i in cooking_objs)
|
||||
do_cooking_tick(i)
|
||||
if(cooking_power > 0 && cooking)
|
||||
var/all_done_cooking = TRUE
|
||||
for(var/datum/cooking_item/CI in cooking_objs)
|
||||
do_cooking_tick(CI)
|
||||
if(CI.max_cookwork > 0)
|
||||
all_done_cooking = FALSE
|
||||
if(all_done_cooking)
|
||||
cooking = FALSE
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/appliance/proc/finish_cooking(var/datum/cooking_item/CI)
|
||||
@@ -540,10 +546,16 @@
|
||||
|
||||
// Produce nasty smoke.
|
||||
visible_message("<span class='danger'>\The [src] vomits a gout of rancid smoke!</span>")
|
||||
var/datum/effect/effect/system/smoke_spread/bad/smoke = new /datum/effect/effect/system/smoke_spread/bad
|
||||
var/datum/effect/effect/system/smoke_spread/bad/burntfood/smoke = new /datum/effect/effect/system/smoke_spread/bad/burntfood
|
||||
playsound(src, 'sound/effects/smoke.ogg', 20, 1)
|
||||
smoke.attach(src)
|
||||
smoke.set_up(10, 0, get_turf(src), 300)
|
||||
smoke.start()
|
||||
|
||||
// Set off fire alarms!
|
||||
var/obj/machinery/firealarm/FA = locate() in get_area(src)
|
||||
if(FA)
|
||||
FA.alarm()
|
||||
|
||||
/obj/machinery/appliance/attack_hand(var/mob/user)
|
||||
if (cooking_objs.len)
|
||||
@@ -675,7 +687,7 @@
|
||||
/datum/cooking_item
|
||||
var/max_cookwork
|
||||
var/cookwork
|
||||
var/overcook_mult = 5
|
||||
var/overcook_mult = 3 // How long it takes to overcook. This is max_cookwork x overcook mult. If you're changing this, mind that at 3x, a max_cookwork of 30 becomes 90 ticks for the purpose of burning, and a max_cookwork of 4 only has 12 before burning!
|
||||
var/result_type = 0
|
||||
var/obj/item/weapon/reagent_containers/cooking_container/container = null
|
||||
var/combine_target = null
|
||||
|
||||
@@ -5,11 +5,12 @@
|
||||
var/optimal_power = 0.1//cooking power at 100%
|
||||
|
||||
var/loss = 1 //Temp lost per proc when equalising
|
||||
var/resistance = 320000 //Resistance to heating. combines with active power usage to determine how long heating takes
|
||||
var/resistance = 32000 //Resistance to heating. combines with active power usage to determine how long heating takes. 32k by default.
|
||||
|
||||
var/light_x = 0
|
||||
var/light_y = 0
|
||||
cooking_power = 0
|
||||
mobdamagetype = BURN
|
||||
|
||||
/obj/machinery/appliance/cooker/examine(var/mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
var/string = "It contains....</br>"
|
||||
for (var/atom/movable/A in contents)
|
||||
string += "[A.name] </br>"
|
||||
. += "<span class='notice'>string</span>"
|
||||
. += "<span class='notice'>[string]</span>"
|
||||
if (reagents.total_volume)
|
||||
. += "<span class='notice'>It contains [reagents.total_volume]u of reagents.</span>"
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
if(!user.unEquip(I))
|
||||
return
|
||||
I.forceMove(src)
|
||||
to_chat(user, "<span class='notice'>You put the [I] into the [src]</span>")
|
||||
to_chat(user, "<span class='notice'>You put the [I] into the [src].</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/cooking_container/verb/empty()
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Has [cook_type] \the [victim] ([victim.ckey]) in \a [src]</font>")
|
||||
victim.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been [cook_type] in \a [src] by [user.name] ([user.ckey])</font>")
|
||||
msg_admin_attack("[key_name_admin(user)] [cook_type] \the [victim] ([victim.ckey]) in \a [src]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)",ckey=key_name(user),ckey_target=key_name(victim))
|
||||
msg_admin_attack("[key_name_admin(user)] [cook_type] \the [victim] ([victim.ckey]) in \a [src]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
//Coat the victim in some oil
|
||||
oil.trans_to(victim, 40)
|
||||
|
||||
@@ -9,6 +9,16 @@
|
||||
can_burn_food = 1
|
||||
stat = POWEROFF
|
||||
|
||||
appliancetype = GRILL
|
||||
|
||||
active_power_usage = 4 KILOWATTS
|
||||
idle_power_usage = 2 KILOWATTS
|
||||
|
||||
// Grill is faster to heat and setup than the rest.
|
||||
optimal_temp = 120 + T0C
|
||||
min_temp = 60 + T0C
|
||||
resistance = 8 KILOWATTS // Very fast to heat up.
|
||||
|
||||
container_type = /obj/item/weapon/reagent_containers/cooking_container/grill
|
||||
|
||||
/obj/machinery/appliance/grill/toggle_power()
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
if(!open)
|
||||
if(!stat)
|
||||
icon_state = "ovenclosed_on"
|
||||
if(cooking == TRUE)
|
||||
icon_state = "ovenclosed_cooking"
|
||||
else
|
||||
icon_state = "ovenclosed_on"
|
||||
else
|
||||
icon_state = "ovenclosed_off"
|
||||
else
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/circuit_item_capacity = 1 //how many items does the circuit add to max number of items
|
||||
var/item_level = 0 // items microwave can handle, 0 foodstuff, 1 materials
|
||||
var/global/list/acceptable_items // List of the items you can put in
|
||||
var/global/list/datum/recipe/microwave/available_recipes // List of the recipes you can use
|
||||
var/global/list/available_recipes // List of the recipes you can use
|
||||
var/global/list/acceptable_reagents // List of the reagents you can put in
|
||||
|
||||
var/global/max_n_of_items = 20
|
||||
@@ -42,15 +42,14 @@
|
||||
|
||||
if(!available_recipes)
|
||||
available_recipes = new
|
||||
for (var/type in (typesof(/datum/recipe/microwave)-/datum/recipe/microwave))
|
||||
var/datum/recipe/test = new type
|
||||
if((test.appliance & appliancetype))
|
||||
available_recipes += test
|
||||
else
|
||||
qdel(test)
|
||||
for(var/T in (typesof(/datum/recipe)-/datum/recipe))
|
||||
var/datum/recipe/type = T
|
||||
if((initial(type.appliance) & appliancetype))
|
||||
available_recipes += new type
|
||||
|
||||
acceptable_items = new
|
||||
acceptable_reagents = new
|
||||
for (var/datum/recipe/microwave/recipe in available_recipes)
|
||||
for (var/datum/recipe/recipe in available_recipes)
|
||||
for (var/item in recipe.items)
|
||||
acceptable_items |= item
|
||||
for (var/reagent in recipe.reagents)
|
||||
@@ -266,7 +265,7 @@
|
||||
abort()
|
||||
return
|
||||
|
||||
var/datum/recipe/microwave/recipe = select_recipe(available_recipes,src)
|
||||
var/datum/recipe/recipe = select_recipe(available_recipes,src)
|
||||
var/obj/cooked
|
||||
if(!recipe)
|
||||
dirty += 1
|
||||
@@ -279,7 +278,6 @@
|
||||
muck_finish()
|
||||
cooked = fail()
|
||||
cooked.forceMove(src.loc)
|
||||
return
|
||||
else if(has_extra_item())
|
||||
if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2)
|
||||
abort()
|
||||
@@ -287,7 +285,6 @@
|
||||
broke()
|
||||
cooked = fail()
|
||||
cooked.forceMove(src.loc)
|
||||
return
|
||||
else
|
||||
if(!wzhzhzh(40)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 5)
|
||||
abort()
|
||||
@@ -295,24 +292,21 @@
|
||||
stop()
|
||||
cooked = fail()
|
||||
cooked.forceMove(src.loc)
|
||||
return
|
||||
else
|
||||
var/halftime = round(recipe.time*4/10/2) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was round(recipe.time/20/2))
|
||||
if(!wzhzhzh(halftime))
|
||||
abort()
|
||||
return
|
||||
if(!wzhzhzh(halftime))
|
||||
abort()
|
||||
cooked = fail()
|
||||
cooked.forceMove(src.loc)
|
||||
return
|
||||
cooked = recipe.make_food(src)
|
||||
abort()
|
||||
if(cooked)
|
||||
cooked.forceMove(src.loc)
|
||||
return
|
||||
|
||||
//Making multiple copies of a recipe
|
||||
var/halftime = round(recipe.time*4/10/2) // VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was round(recipe.time/20/2))
|
||||
if(!wzhzhzh(halftime))
|
||||
abort()
|
||||
return
|
||||
recipe.before_cook(src)
|
||||
if(!wzhzhzh(halftime))
|
||||
abort()
|
||||
cooked = fail()
|
||||
cooked.forceMove(loc)
|
||||
recipe.after_cook(src)
|
||||
return
|
||||
|
||||
var/result = recipe.result
|
||||
var/valid = 1
|
||||
var/list/cooked_items = list()
|
||||
@@ -326,10 +320,11 @@
|
||||
AM.forceMove(temp)
|
||||
|
||||
valid = 0
|
||||
recipe.after_cook(src)
|
||||
recipe = select_recipe(available_recipes,src)
|
||||
if(recipe && recipe.result == result)
|
||||
sleep(2)
|
||||
valid = 1
|
||||
sleep(2)
|
||||
|
||||
for(var/r in cooked_items)
|
||||
var/atom/movable/R = r
|
||||
@@ -347,7 +342,7 @@
|
||||
|
||||
dispose(0) //clear out anything left
|
||||
stop()
|
||||
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num) // Whoever named this proc is fucking literally Satan. ~ Z
|
||||
@@ -388,14 +383,16 @@
|
||||
|
||||
/obj/machinery/microwave/proc/abort()
|
||||
operating = FALSE // Turn it off again aferwards
|
||||
icon_state = "mw"
|
||||
if(icon_state == "mw1")
|
||||
icon_state = "mw"
|
||||
updateUsrDialog()
|
||||
soundloop.stop()
|
||||
|
||||
/obj/machinery/microwave/proc/stop()
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
operating = FALSE // Turn it off again aferwards
|
||||
icon_state = "mw"
|
||||
if(icon_state == "mw1")
|
||||
icon_state = "mw"
|
||||
updateUsrDialog()
|
||||
soundloop.stop()
|
||||
|
||||
@@ -440,10 +437,14 @@
|
||||
var/amount = 0
|
||||
for (var/obj/O in (((contents - ffuu) - component_parts) - circuit))
|
||||
amount++
|
||||
if (O.reagents)
|
||||
if(O.reagents)
|
||||
var/id = O.reagents.get_master_reagent_id()
|
||||
if (id)
|
||||
if(id)
|
||||
amount+=O.reagents.get_reagent_amount(id)
|
||||
if(istype(O, /obj/item/weapon/holder))
|
||||
var/obj/item/weapon/holder/H = O
|
||||
if(H.held_mob)
|
||||
qdel(H.held_mob)
|
||||
qdel(O)
|
||||
src.reagents.clear_reagents()
|
||||
ffuu.reagents.add_reagent("carbon", amount)
|
||||
@@ -478,10 +479,14 @@
|
||||
|
||||
if(!do_after(usr, 1 SECONDS, target = src))
|
||||
return
|
||||
|
||||
if(operating)
|
||||
to_chat(usr, "<span class='warning'>You can't do that, [src] door is locked!</span>")
|
||||
return
|
||||
|
||||
usr.visible_message(
|
||||
"<span class='notice'>[usr] opened [src] and has taken out [english_list(contents)].</span>" ,
|
||||
"<span class='notice'>You have opened [src] and taken out [english_list(contents)].</span>"
|
||||
"<span class='notice'>[usr] opened [src] and has taken out [english_list(((contents-component_parts)-circuit))].</span>" ,
|
||||
"<span class='notice'>You have opened [src] and taken out [english_list(((contents-component_parts)-circuit))].</span>"
|
||||
)
|
||||
dispose()
|
||||
|
||||
@@ -504,3 +509,32 @@
|
||||
/obj/machinery/microwave/advanced/Initialize()
|
||||
..()
|
||||
reagents.maximum_volume = 1000
|
||||
|
||||
/datum/recipe/splat // We use this to handle cooking mice or other smaller/similar-size mobs in a microwave. Janky but it works better than snowflake code to handle the same thing.
|
||||
items = list(
|
||||
/obj/item/weapon/holder
|
||||
)
|
||||
result = /obj/effect/decal/cleanable/blood/gibs
|
||||
|
||||
/datum/recipe/splat/before_cook(obj/container)
|
||||
if(istype(container, /obj/machinery/microwave))
|
||||
var/obj/machinery/microwave/M = container
|
||||
M.muck_start()
|
||||
playsound(container.loc, 'sound/items/drop/flesh.ogg', 100, 1)
|
||||
. = ..()
|
||||
|
||||
/datum/recipe/splat/make_food(obj/container)
|
||||
for(var/obj/item/weapon/holder/H in container)
|
||||
if(H.held_mob)
|
||||
to_chat(H.held_mob, "<span class='danger'>You hear an earsplitting humming and your head aches!</span>")
|
||||
qdel(H.held_mob)
|
||||
H.held_mob = null
|
||||
qdel(H)
|
||||
|
||||
. = ..()
|
||||
|
||||
/datum/recipe/splat/after_cook(obj/container)
|
||||
if(istype(container, /obj/machinery/microwave))
|
||||
var/obj/machinery/microwave/M = container
|
||||
M.muck_finish()
|
||||
. = ..()
|
||||
@@ -30,12 +30,13 @@
|
||||
*
|
||||
* */
|
||||
|
||||
// Recipe type defines. Used to determine what machine makes them. TODO: Add Grill to the list.
|
||||
// Recipe type defines. Used to determine what machine makes them.
|
||||
#define MICROWAVE 0x1
|
||||
#define FRYER 0x2
|
||||
#define OVEN 0x4
|
||||
#define CANDYMAKER 0x8
|
||||
#define CEREALMAKER 0x10
|
||||
#define GRILL 0x8
|
||||
#define CANDYMAKER 0x10
|
||||
#define CEREALMAKER 0x20
|
||||
|
||||
/datum/recipe
|
||||
var/list/reagents // Example: = list("berryjuice" = 5) // do not list same reagent twice
|
||||
@@ -319,3 +320,10 @@
|
||||
else //okay, let's select the most complicated recipe
|
||||
sortTim(possible_recipes, /proc/cmp_recipe_complexity_dsc)
|
||||
return possible_recipes[1]
|
||||
|
||||
// Both of these are just placeholders to allow special behavior for mob holders, but you can do other things in here later if you feel like it.
|
||||
/datum/recipe/proc/before_cook(obj/container) // Called Before the Microwave starts delays and cooking stuff
|
||||
|
||||
|
||||
/datum/recipe/proc/after_cook(obj/container) // Called When the Microwave is finished.
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
qdel(CR)
|
||||
|
||||
//////////////////////// FOOD
|
||||
var/list/food_recipes = typesof(/datum/recipe/microwave) - /datum/recipe/microwave
|
||||
var/list/food_recipes = typesof(/datum/recipe) - /datum/recipe
|
||||
//Build a useful list
|
||||
for(var/Rp in food_recipes)
|
||||
//Lists don't work with datum-stealing no-instance initial() so we have to.
|
||||
|
||||
Reference in New Issue
Block a user