mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
RL in IRC Update:
- The soymilk + enzyme reaction to create tofu will now make multiple pieces of tofu depending on how much you are mixing together instead of just 1 no matter how much you mix together. - Deleted some garbage code that I'm no longer going to implement (at least not any time soon). - Candy Corn nutriment value reduced to something sensible rather then AUTO FAT - By popular admin request, Guest accounts are not allowed to be any head of staff, the AI, or any security position. Unfortunately, that means if your BYOND name begins with "Guest-", you can't be those positions either. However, that's your own problem. I'll enable the config.txt setup for it later. - Napalm actually works now. It's Aluminum + Plasma + Sulfuric Acid. It creates a relatively short but intense fire over an area and will spread like a normal toxin's fire. - Incendiary grenades redone into a normal chem grenade that makes napalm. Old style incendiary grenade code removed since it didn't work anyway. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@750 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -554,6 +554,12 @@ datum
|
|||||||
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
|
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
|
||||||
reagent_state = LIQUID
|
reagent_state = LIQUID
|
||||||
|
|
||||||
|
napalm
|
||||||
|
name = "Napalm RG-218"
|
||||||
|
id = "napalm"
|
||||||
|
description = "A plasma based variant of napalm that burns violently upon exposure to oxygen."
|
||||||
|
reagent_state = LIQUID
|
||||||
|
|
||||||
radium
|
radium
|
||||||
name = "Radium"
|
name = "Radium"
|
||||||
id = "radium"
|
id = "radium"
|
||||||
@@ -1112,64 +1118,7 @@ datum
|
|||||||
data++
|
data++
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
/*
|
|
||||||
addiction //Is a generic "addiction" reagent that is produced by any chemical that is addictive.
|
|
||||||
name = "Addiction" // It should never be seen by the player since it only exists inside the body.
|
|
||||||
id = "addiction"
|
|
||||||
description = "Raw addiction. Patented by the Robust Softdrinks Corporation."
|
|
||||||
reagent_state = SOLID
|
|
||||||
on_mob_life(var/mob/M)
|
|
||||||
if(!M) M = holder.my_atom
|
|
||||||
if(M.reagents.has_reagent("opium") || M.reagents.has_reagent("morphine")) //Addictive substances goes here.
|
|
||||||
M.reagents.add_reagent("addiction", 1) //If you if have the substance, it adds another to balance out metabolism
|
|
||||||
else //If you don't, you start stuffering withdrawls.
|
|
||||||
if(!M:stuttering)
|
|
||||||
M:stuttering = 1
|
|
||||||
M:stuttering += 2
|
|
||||||
M:confused += 2
|
|
||||||
if(!data) data = 1
|
|
||||||
switch(data)
|
|
||||||
if(10 to 30)
|
|
||||||
M:toxloss++
|
|
||||||
M.make_jittery(2)
|
|
||||||
if(31 to INFINITY)
|
|
||||||
M:toxloss++
|
|
||||||
M.make_jittery(10)
|
|
||||||
..() //It also starts working out of your system.
|
|
||||||
return
|
|
||||||
|
|
||||||
opium
|
|
||||||
name = "Opium"
|
|
||||||
id = "opium"
|
|
||||||
description = "A mildly addictive narcotic analgesic."
|
|
||||||
reagent_state = SOLID
|
|
||||||
on_mob_life(var/mob/M)
|
|
||||||
if(!M) M = holder.my_atom
|
|
||||||
if(prob(50)) M:fireloss -= 2
|
|
||||||
if(prob(50)) M:bruteloss -= 2
|
|
||||||
M.reagents.add_reagent("addiction", 1) //It's addictive? A shock!
|
|
||||||
..()
|
|
||||||
return
|
|
||||||
|
|
||||||
morphine
|
|
||||||
name = "Morphine"
|
|
||||||
id = "morphine"
|
|
||||||
description = "A refined form of opium. It is a powerful narcotic analgesic."
|
|
||||||
reagent_state = LIQUID
|
|
||||||
on_mob_life(var/mob/M)
|
|
||||||
if(!M) M = holder.my_atom
|
|
||||||
if(prob(50)) M:fireloss -= 5
|
|
||||||
if(prob(50)) M:bruteloss -= 5
|
|
||||||
M.reagents.add_reagent("addiction", 2) //2x addictive for 3x the effect.
|
|
||||||
var/overdose = 0
|
|
||||||
if(!data) data = 1
|
|
||||||
if(data > 100) overdose = 1 //Oh no! An overdose
|
|
||||||
if(overdose == 1)
|
|
||||||
M:toxloss += 50
|
|
||||||
data = 0
|
|
||||||
..()
|
|
||||||
return
|
|
||||||
*/
|
|
||||||
|
|
||||||
/////////////////////////Food Reagents////////////////////////////
|
/////////////////////////Food Reagents////////////////////////////
|
||||||
// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food
|
// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food
|
||||||
|
|||||||
@@ -285,25 +285,22 @@ datum
|
|||||||
napalm
|
napalm
|
||||||
name = "Napalm"
|
name = "Napalm"
|
||||||
id = "napalm"
|
id = "napalm"
|
||||||
result = null
|
result = "napalm"
|
||||||
required_reagents = list("aluminium" = 1, "plasma" = 1, "acid" = 1 )
|
required_reagents = list("aluminium" = 1, "plasma" = 1, "acid" = 1 )
|
||||||
result_amount = null
|
result_amount = 1
|
||||||
on_reaction(var/datum/reagents/holder, var/created_volume)
|
on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||||
var/location = get_turf(holder.my_atom)
|
var/location = get_turf(holder.my_atom.loc)
|
||||||
for(var/turf/simulated/floor/target_tile in range(1,location))
|
for(var/turf/simulated/floor/target_tile in range(1,location))
|
||||||
if(target_tile.parent && target_tile.parent.group_processing)
|
if(target_tile.parent && target_tile.parent.group_processing)
|
||||||
target_tile.parent.suspend_group_processing()
|
target_tile.parent.suspend_group_processing()
|
||||||
|
|
||||||
var/datum/gas_mixture/napalm = new
|
var/datum/gas_mixture/napalm = new
|
||||||
var/datum/gas/volatile_fuel/fuel = new
|
|
||||||
|
|
||||||
fuel.moles = 15
|
napalm.toxins = 2 * created_volume
|
||||||
napalm.trace_gases += fuel
|
|
||||||
|
|
||||||
target_tile.assume_air(napalm)
|
target_tile.assume_air(napalm)
|
||||||
|
|
||||||
spawn (0) target_tile.hotspot_expose(700, 400)
|
spawn (0) target_tile.hotspot_expose(700, 400)
|
||||||
|
holder.del_reagent("napalm")
|
||||||
return
|
return
|
||||||
|
|
||||||
smoke
|
smoke
|
||||||
@@ -337,13 +334,6 @@ datum
|
|||||||
required_reagents = list("ethanol" = 1, "chlorine" = 3, "water" = 1)
|
required_reagents = list("ethanol" = 1, "chlorine" = 3, "water" = 1)
|
||||||
result_amount = 1
|
result_amount = 1
|
||||||
|
|
||||||
morphine
|
|
||||||
name = "Morphine"
|
|
||||||
id = "morphine"
|
|
||||||
result = "morphine"
|
|
||||||
required_reagents = list("opium" = 10, "enzyme" = 2)
|
|
||||||
result_amount = 5
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// foam and foam precursor
|
// foam and foam precursor
|
||||||
@@ -468,6 +458,7 @@ datum
|
|||||||
result_amount = 1
|
result_amount = 1
|
||||||
on_reaction(var/datum/reagents/holder, var/created_volume)
|
on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||||
var/location = get_turf(holder.my_atom)
|
var/location = get_turf(holder.my_atom)
|
||||||
|
for(var/i = 1, i <= created_volume, i++)
|
||||||
new /obj/item/weapon/reagent_containers/food/snacks/tofu(location)
|
new /obj/item/weapon/reagent_containers/food/snacks/tofu(location)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -117,7 +117,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/chem_grenade/metalfoam
|
/obj/item/weapon/chem_grenade/metalfoam
|
||||||
name = "metal foam grenade"
|
name = "Metal-Foam Grenade"
|
||||||
desc = "Used for emergency sealing of air breaches."
|
desc = "Used for emergency sealing of air breaches."
|
||||||
icon_state = "chemg3"
|
icon_state = "chemg3"
|
||||||
stage = 2
|
stage = 2
|
||||||
@@ -134,8 +134,26 @@
|
|||||||
beakers += B1
|
beakers += B1
|
||||||
beakers += B2
|
beakers += B2
|
||||||
|
|
||||||
|
/obj/item/weapon/chem_grenade/incendiary
|
||||||
|
name = "Incendiary Grenade"
|
||||||
|
desc = "Used for clearing rooms of living things."
|
||||||
|
icon_state = "chemg3"
|
||||||
|
stage = 2
|
||||||
|
|
||||||
|
New()
|
||||||
|
..()
|
||||||
|
var/obj/item/weapon/reagent_containers/glass/B1 = new(src)
|
||||||
|
var/obj/item/weapon/reagent_containers/glass/B2 = new(src)
|
||||||
|
|
||||||
|
B1.reagents.add_reagent("aluminium", 25)
|
||||||
|
B2.reagents.add_reagent("plasma", 25)
|
||||||
|
B2.reagents.add_reagent("acid", 25)
|
||||||
|
|
||||||
|
beakers += B1
|
||||||
|
beakers += B2
|
||||||
|
|
||||||
/obj/item/weapon/chem_grenade/cleaner
|
/obj/item/weapon/chem_grenade/cleaner
|
||||||
name = "cleaner grenade"
|
name = "Cleaner Grenade"
|
||||||
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
|
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
|
||||||
icon_state = "chemg3"
|
icon_state = "chemg3"
|
||||||
stage = 2
|
stage = 2
|
||||||
@@ -755,7 +773,7 @@
|
|||||||
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
||||||
user << "\red you can't add anymore to [target]."
|
user << "\red you can't add anymore to [target]."
|
||||||
return
|
return
|
||||||
var/trans = src.reagents.trans_to(target, 1)
|
var/trans = src.reagents.trans_to(target, 5)
|
||||||
user << "\blue You transfer [trans] units of the condiment to [target]."
|
user << "\blue You transfer [trans] units of the condiment to [target]."
|
||||||
|
|
||||||
|
|
||||||
@@ -1388,7 +1406,7 @@
|
|||||||
icon_state = "candy_corn"
|
icon_state = "candy_corn"
|
||||||
New()
|
New()
|
||||||
..()
|
..()
|
||||||
reagents.add_reagent("nutriment", 10)
|
reagents.add_reagent("nutriment", 4)
|
||||||
bitesize = 2
|
bitesize = 2
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/chips
|
/obj/item/weapon/reagent_containers/food/snacks/chips
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
var/allow_ai = 1 // allow ai job
|
var/allow_ai = 1 // allow ai job
|
||||||
var/hostedby = null
|
var/hostedby = null
|
||||||
var/respawn = 1
|
var/respawn = 1
|
||||||
|
var/guest_jobban = 1
|
||||||
|
|
||||||
var/server
|
var/server
|
||||||
var/banappeals
|
var/banappeals
|
||||||
@@ -165,6 +166,9 @@
|
|||||||
if ("banappeals")
|
if ("banappeals")
|
||||||
config.banappeals = value
|
config.banappeals = value
|
||||||
|
|
||||||
|
if ("guest_jobban")
|
||||||
|
config.guest_jobban = text2num(value)
|
||||||
|
|
||||||
if ("probability")
|
if ("probability")
|
||||||
var/prob_pos = findtext(value, " ")
|
var/prob_pos = findtext(value, " ")
|
||||||
var/prob_name = null
|
var/prob_name = null
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"/obj/item/weapon/smokebomb",
|
"/obj/item/weapon/smokebomb",
|
||||||
"/obj/item/weapon/smokebomb",
|
"/obj/item/weapon/smokebomb",
|
||||||
"/obj/item/weapon/pen/sleepypen",
|
"/obj/item/weapon/pen/sleepypen",
|
||||||
"/obj/item/weapon/incendiarygrenade")
|
"/obj/item/weapon/chem_grenade/incendiary")
|
||||||
cost = 20
|
cost = 20
|
||||||
containertype = "/obj/crate"
|
containertype = "/obj/crate"
|
||||||
containername = "Special Ops crate"
|
containername = "Special Ops crate"
|
||||||
@@ -217,9 +217,9 @@
|
|||||||
"/obj/item/weapon/tank/plasma",
|
"/obj/item/weapon/tank/plasma",
|
||||||
"/obj/item/weapon/tank/plasma",
|
"/obj/item/weapon/tank/plasma",
|
||||||
"/obj/item/weapon/tank/plasma",
|
"/obj/item/weapon/tank/plasma",
|
||||||
"/obj/item/weapon/incendiarygrenade",
|
"/obj/item/weapon/chem_grenade/incendiary",
|
||||||
"/obj/item/weapon/incendiarygrenade",
|
"/obj/item/weapon/chem_grenade/incendiary",
|
||||||
"/obj/item/weapon/incendiarygrenade",
|
"/obj/item/weapon/chem_grenade/incendiary",
|
||||||
"/obj/item/clothing/gloves/stungloves")
|
"/obj/item/clothing/gloves/stungloves")
|
||||||
cost = 25
|
cost = 25
|
||||||
containertype = "/obj/crate/secure/weapon"
|
containertype = "/obj/crate/secure/weapon"
|
||||||
|
|||||||
@@ -14,20 +14,6 @@
|
|||||||
flags = FPRINT | TABLEPASS | ONBELT | USEDELAY
|
flags = FPRINT | TABLEPASS | ONBELT | USEDELAY
|
||||||
var/datum/effects/system/bad_smoke_spread/smoke
|
var/datum/effects/system/bad_smoke_spread/smoke
|
||||||
|
|
||||||
/obj/item/weapon/incendiarygrenade
|
|
||||||
desc = "It is set to detonate in 3 seconds."
|
|
||||||
name = "incendiary grenade"
|
|
||||||
icon = 'grenade.dmi'
|
|
||||||
icon_state = "flashbang"
|
|
||||||
var/state = null
|
|
||||||
var/firestrength = 100
|
|
||||||
var/det_time = 20.0
|
|
||||||
w_class = 2.0
|
|
||||||
item_state = "flashbang"
|
|
||||||
throw_speed = 4
|
|
||||||
throw_range = 20
|
|
||||||
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
|
|
||||||
|
|
||||||
/obj/item/weapon/mustardbomb
|
/obj/item/weapon/mustardbomb
|
||||||
desc = "It is set to detonate in 4 seconds."
|
desc = "It is set to detonate in 4 seconds."
|
||||||
name = "mustard gas bomb"
|
name = "mustard gas bomb"
|
||||||
@@ -67,19 +53,6 @@
|
|||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/weapon/incendiarygrenade/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
||||||
if (istype(W, /obj/item/weapon/screwdriver))
|
|
||||||
if (src.det_time == 60)
|
|
||||||
src.det_time = 30
|
|
||||||
user.show_message("\blue You set the incendiary grenade for a 3 second detonation time.")
|
|
||||||
src.desc = "It is set to detonate in 3 seconds."
|
|
||||||
else
|
|
||||||
src.det_time = 60
|
|
||||||
user.show_message("\blue You set the incendiary grenade for a 6 second detonation time.")
|
|
||||||
src.desc = "It is set to detonate in 6 seconds."
|
|
||||||
src.add_fingerprint(user)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/smokebomb/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
|
/obj/item/weapon/smokebomb/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
|
||||||
if (user.equipped() == src)
|
if (user.equipped() == src)
|
||||||
if (!( src.state ))
|
if (!( src.state ))
|
||||||
@@ -97,31 +70,6 @@
|
|||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/weapon/incendiarygrenade/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
|
|
||||||
if (user.equipped() == src)
|
|
||||||
if (!( src.state ))
|
|
||||||
user << "\red You prime the incendiary grenade! [det_time/10] seconds!"
|
|
||||||
src.state = 1
|
|
||||||
src.icon_state = "flashbang1"
|
|
||||||
playsound(src.loc, 'armbomb.ogg', 75, 1, -3)
|
|
||||||
spawn( src.det_time )
|
|
||||||
prime()
|
|
||||||
return
|
|
||||||
user.dir = get_dir(user, target)
|
|
||||||
user.drop_item()
|
|
||||||
var/t = (isturf(target) ? target : target.loc)
|
|
||||||
walk_towards(src, t, 3)
|
|
||||||
src.add_fingerprint(user)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/incendiarygrenade/attack_paw(mob/user as mob)
|
|
||||||
return src.attack_hand(user)
|
|
||||||
|
|
||||||
/obj/item/weapon/incendiarygrenade/attack_hand()
|
|
||||||
walk(src, null, null)
|
|
||||||
..()
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/item/weapon/smokebomb/attack_paw(mob/user as mob)
|
/obj/item/weapon/smokebomb/attack_paw(mob/user as mob)
|
||||||
return src.attack_hand(user)
|
return src.attack_hand(user)
|
||||||
|
|
||||||
@@ -149,37 +97,6 @@
|
|||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/weapon/incendiarygrenade/proc/prime()
|
|
||||||
playsound(src.loc, 'bamf.ogg', 75, 1, -2)
|
|
||||||
var/turf/T = src.loc
|
|
||||||
var/turf/Tx1 = src.x + 1
|
|
||||||
var/turf/Txm1 = src.x - 1
|
|
||||||
var/turf/Ty1 = src.y + 1
|
|
||||||
var/turf/Tym1 = src.y - 1
|
|
||||||
for(var/turf/simulated/floor/target_tile in list(T,Tx1,Txm1,Ty1,Tym1))
|
|
||||||
if(target_tile.parent && target_tile.parent.group_processing)
|
|
||||||
target_tile.parent.suspend_group_processing()
|
|
||||||
|
|
||||||
var/datum/gas_mixture/napalm = new
|
|
||||||
var/datum/gas/volatile_fuel/fuel = new
|
|
||||||
|
|
||||||
fuel.moles = 15
|
|
||||||
napalm.trace_gases += fuel
|
|
||||||
|
|
||||||
target_tile.assume_air(napalm)
|
|
||||||
|
|
||||||
spawn target_tile.hotspot_expose(700, 400)
|
|
||||||
|
|
||||||
for(var/obj/blob/B in view(8,src))
|
|
||||||
var/damage = round(30/(get_dist(B,src)+1))
|
|
||||||
B.health -= damage
|
|
||||||
B.update()
|
|
||||||
|
|
||||||
sleep(10)
|
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/smokebomb/attack_self(mob/user as mob)
|
/obj/item/weapon/smokebomb/attack_self(mob/user as mob)
|
||||||
if (!src.state)
|
if (!src.state)
|
||||||
user << "\red You prime the smoke bomb! [det_time/10] seconds!"
|
user << "\red You prime the smoke bomb! [det_time/10] seconds!"
|
||||||
@@ -191,18 +108,6 @@
|
|||||||
return
|
return
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/weapon/incendiarygrenade/attack_self(mob/user as mob)
|
|
||||||
if (!src.state)
|
|
||||||
user << "\red You prime the incendiary grenade! [det_time/10] seconds!"
|
|
||||||
src.state = 1
|
|
||||||
src.icon_state = "flashbang1"
|
|
||||||
add_fingerprint(user)
|
|
||||||
spawn( src.det_time )
|
|
||||||
prime()
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/mustardbomb/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
/obj/item/weapon/mustardbomb/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
if (istype(W, /obj/item/weapon/screwdriver))
|
if (istype(W, /obj/item/weapon/screwdriver))
|
||||||
if (src.det_time == 80)
|
if (src.det_time == 80)
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ var
|
|||||||
|
|
||||||
/proc/jobban_isbanned(mob/M, rank)
|
/proc/jobban_isbanned(mob/M, rank)
|
||||||
if(M)
|
if(M)
|
||||||
|
if (rank == "Captain" || rank == "AI" || rank == "Head of Personnel" || rank == "Head of Security" || rank == "Chief Engineer" || rank == "Research Director" || rank == "Warden" || rank == "Detective" || rank == "Chief Medical Officer")
|
||||||
|
if(IsGuestKey(M.key)/* && config.guest_jobban*/)
|
||||||
|
return 1
|
||||||
if (jobban_keylist.Find(text("[M.ckey] - [rank]")))
|
if (jobban_keylist.Find(text("[M.ckey] - [rank]")))
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -68,8 +68,13 @@ NORESPAWN
|
|||||||
# set a hosted by name for unix platforms
|
# set a hosted by name for unix platforms
|
||||||
HOSTEDBY Yournamehere
|
HOSTEDBY Yournamehere
|
||||||
|
|
||||||
|
# Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
|
||||||
|
# Set to 1 to jobban them from those positions, set to 0 to allow them.
|
||||||
|
GUEST_JOBBAN 1
|
||||||
|
|
||||||
# set a server location for world reboot. Don't include the byond://, just give the address and port.
|
# set a server location for world reboot. Don't include the byond://, just give the address and port.
|
||||||
# SERVER ss13.example.com:2506
|
# SERVER ss13.example.com:2506
|
||||||
|
|
||||||
#Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
|
#Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
|
||||||
#BANAPPEALS http://justanotherday.example.com
|
#BANAPPEALS http://justanotherday.example.com
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user