Reee mirror bot. Hard syncs some missed PR stuff + maps (#5951)
* maps and tgui * missed defines and helpsers * controller things * datums * game folder stuff * module things * icons * stragglers * map sync and updating wew lad
This commit is contained in:
@@ -73,7 +73,7 @@
|
||||
var/task = href_list["editrights"]
|
||||
var/skip
|
||||
if(task == "activate" || task == "deactivate")
|
||||
skip = 1
|
||||
skip = TRUE
|
||||
if(!CONFIG_GET(flag/admin_legacy_system) && CONFIG_GET(flag/protect_legacy_admins) && task == "rank")
|
||||
if(admin_ckey in GLOB.protected_admins)
|
||||
to_chat(usr, "<span class='admin prefix'>Editing the rank of this admin is blocked by server configuration.</span>")
|
||||
@@ -82,20 +82,20 @@
|
||||
if(D.rank in GLOB.protected_ranks)
|
||||
to_chat(usr, "<span class='admin prefix'>Editing the flags of this rank is blocked by server configuration.</span>")
|
||||
return
|
||||
if(check_rights(R_DBRANKS, 0))
|
||||
if(check_rights(R_DBRANKS, FALSE))
|
||||
if(!skip)
|
||||
if(!SSdbcore.Connect())
|
||||
to_chat(usr, "<span class='danger'>Unable to connect to database, changes are temporary only.</span>")
|
||||
use_db = "Temporary"
|
||||
if(!use_db)
|
||||
use_db = FALSE
|
||||
else
|
||||
use_db = alert("Permanent changes are saved to the database for future rounds, temporary changes will affect only the current round", "Permanent or Temporary?", "Permanent", "Temporary", "Cancel")
|
||||
if(use_db == "Cancel")
|
||||
return
|
||||
if(use_db == "Permanent")
|
||||
use_db = 1
|
||||
use_db = TRUE
|
||||
admin_ckey = sanitizeSQL(admin_ckey)
|
||||
else
|
||||
use_db = 0
|
||||
use_db = FALSE
|
||||
if(task != "add")
|
||||
D = GLOB.admin_datums[admin_ckey]
|
||||
if(!D)
|
||||
@@ -124,19 +124,20 @@
|
||||
edit_admin_permissions()
|
||||
|
||||
/datum/admins/proc/add_admin(use_db)
|
||||
. = sanitizeSQL(ckey(input("New admin's ckey","Admin ckey") as text|null))
|
||||
. = ckey(input("New admin's ckey","Admin ckey") as text|null)
|
||||
if(!.)
|
||||
return 0
|
||||
return FALSE
|
||||
if(. in GLOB.admin_datums+GLOB.deadmins)
|
||||
to_chat(usr, "<span class='danger'>[.] is already an admin.</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(use_db)
|
||||
. = sanitizeSQL(.)
|
||||
var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (ckey, rank) VALUES ('[.]', 'NEW ADMIN')")
|
||||
if(!query_add_admin.warn_execute())
|
||||
return 0
|
||||
return FALSE
|
||||
var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, adminckey, adminip, operation, log) VALUES ('[SQLtime()]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'add admin', 'New admin added: [.]')")
|
||||
if(!query_add_admin_log.warn_execute())
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/datum/admins/proc/remove_admin(admin_ckey, use_db, datum/admins/D)
|
||||
if(alert("Are you sure you want to remove [admin_ckey]?","Confirm Removal","Do it","Cancel") == "Do it")
|
||||
@@ -175,7 +176,7 @@
|
||||
rank_names[R.name] = R
|
||||
var/new_rank = input("Please select a rank", "New rank") as null|anything in rank_names
|
||||
if(new_rank == "*New Rank*")
|
||||
new_rank = sanitizeSQL(ckeyEx(input("Please input a new rank", "New custom rank") as text|null))
|
||||
new_rank = ckeyEx(input("Please input a new rank", "New custom rank") as text|null)
|
||||
if(!new_rank)
|
||||
return
|
||||
R = rank_names[new_rank]
|
||||
@@ -186,6 +187,7 @@
|
||||
R = new(new_rank) //blank new admin_rank
|
||||
GLOB.admin_ranks += R
|
||||
if(use_db)
|
||||
new_rank = sanitizeSQL(new_rank)
|
||||
if(!R)
|
||||
var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_ranks")] (rank, flags, exclude_flags, can_edit_rights) VALUES ('[new_rank]', '0', '0', '0')")
|
||||
if(!query_add_rank.warn_execute())
|
||||
@@ -208,7 +210,8 @@
|
||||
if(D) //they were previously an admin
|
||||
D.disassociate() //existing admin needs to be disassociated
|
||||
D.rank = R //set the admin_rank as our rank
|
||||
D.associate()
|
||||
var/client/C = GLOB.directory[admin_ckey]
|
||||
D.associate(C)
|
||||
else
|
||||
D = new(R, admin_ckey, TRUE) //new admin
|
||||
message_admins("[key_name_admin(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]")
|
||||
|
||||
@@ -96,6 +96,17 @@ the new instance inside the host to be updated to the template's stats.
|
||||
if(adapt_ready > 0)
|
||||
stat("Adaptation Ready: [round(adapt_ready/10, 0.1)]s")
|
||||
|
||||
|
||||
/mob/camera/disease/examine(mob/user)
|
||||
..()
|
||||
if(isobserver(user))
|
||||
to_chat(user, "<span class='notice'>[src] has [points]/[total_points] adaptation points.</span>")
|
||||
to_chat(user, "<span class='notice'>[src] has the following unlocked:</span>")
|
||||
for(var/A in purchased_abilities)
|
||||
var/datum/disease_ability/B = A
|
||||
if(istype(B))
|
||||
to_chat(user, "<span class='notice'>[B.name]</span>")
|
||||
|
||||
/mob/camera/disease/say(message)
|
||||
return
|
||||
|
||||
|
||||
@@ -86,5 +86,6 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
|
||||
return TRUE
|
||||
|
||||
#undef CHALLENGE_TELECRYSTALS
|
||||
#undef CHALLENGE_TIME_LIMIT
|
||||
#undef CHALLENGE_MIN_PLAYERS
|
||||
#undef CHALLENGE_SHUTTLE_DELAY
|
||||
|
||||
@@ -137,6 +137,9 @@
|
||||
/datum/gas/pluoxium = new/datum/tlv(-1, -1, 135, 140) // Partial pressure, kpa
|
||||
)
|
||||
|
||||
/obj/machinery/airalarm/unlocked
|
||||
locked = FALSE
|
||||
|
||||
/obj/machinery/airalarm/engine
|
||||
name = "engine air alarm"
|
||||
locked = FALSE
|
||||
|
||||
@@ -253,3 +253,68 @@
|
||||
/obj/item/clothing/shoes/bronze/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50)
|
||||
|
||||
/obj/item/clothing/shoes/wheelys
|
||||
name = "Wheely-Heels"
|
||||
desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel
|
||||
icon_state = "wheelys"
|
||||
item_state = "wheelys"
|
||||
actions_types = list(/datum/action/item_action/wheelys)
|
||||
var/wheelToggle = FALSE //False means wheels are not popped out
|
||||
var/obj/vehicle/ridden/scooter/wheelys/W
|
||||
|
||||
/obj/item/clothing/shoes/wheelys/Initialize()
|
||||
. = ..()
|
||||
W = new /obj/vehicle/ridden/scooter/wheelys(null)
|
||||
|
||||
/obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action)
|
||||
if(!isliving(user))
|
||||
return
|
||||
if(!istype(user.get_item_by_slot(slot_shoes), /obj/item/clothing/shoes/wheelys))
|
||||
to_chat(user, "<span class='warning'>You must be wearing the wheely-heels to use them!</span>")
|
||||
return
|
||||
if(!(W.is_occupant(user)))
|
||||
wheelToggle = FALSE
|
||||
if(wheelToggle)
|
||||
W.unbuckle_mob(user)
|
||||
wheelToggle = FALSE
|
||||
return
|
||||
W.forceMove(get_turf(user))
|
||||
W.buckle_mob(user)
|
||||
wheelToggle = TRUE
|
||||
|
||||
/obj/item/clothing/shoes/wheelys/dropped(mob/user)
|
||||
if(wheelToggle)
|
||||
W.unbuckle_mob(user)
|
||||
wheelToggle = FALSE
|
||||
..()
|
||||
|
||||
/obj/item/clothing/shoes/wheelys/Destroy()
|
||||
QDEL_NULL(W)
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/shoes/kindleKicks
|
||||
name = "Kindle Kicks"
|
||||
desc = "They'll sure kindle something in you, and it's not childhood nostalgia..."
|
||||
icon_state = "kindleKicks"
|
||||
item_state = "kindleKicks"
|
||||
actions_types = list(/datum/action/item_action/kindleKicks)
|
||||
var/lightCycle = 0
|
||||
var/active = FALSE
|
||||
|
||||
/obj/item/clothing/shoes/kindleKicks/ui_action_click(mob/user, action)
|
||||
if(active)
|
||||
return
|
||||
active = TRUE
|
||||
set_light(2, 3, rgb(rand(0,255),rand(0,255),rand(0,255)))
|
||||
addtimer(CALLBACK(src, .proc/lightUp), 5)
|
||||
|
||||
/obj/item/clothing/shoes/kindleKicks/proc/lightUp(mob/user)
|
||||
if(lightCycle < 15)
|
||||
set_light(2, 3, rgb(rand(0,255),rand(0,255),rand(0,255)))
|
||||
lightCycle += 1
|
||||
addtimer(CALLBACK(src, .proc/lightUp), 5)
|
||||
else
|
||||
set_light(0)
|
||||
lightCycle = 0
|
||||
active = FALSE
|
||||
@@ -144,9 +144,11 @@ interface with the mining shuttle at the landing site if a mobile beacon is also
|
||||
return
|
||||
if(!no_restrictions)
|
||||
var/static/list/disallowed_turf_types = typecacheof(list(
|
||||
/turf/closed,
|
||||
/turf/open/lava,
|
||||
/turf/closed/indestructible,
|
||||
/turf/open/indestructible,
|
||||
)) - typecacheof(list(
|
||||
/turf/closed/mineral,
|
||||
))
|
||||
|
||||
if(!is_mining_level(T.z))
|
||||
@@ -231,7 +233,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also
|
||||
if(BAD_COORDS)
|
||||
to_chat(user, "<span class='warning'>Location is too close to the edge of the station's scanning range. Move several paces away and try again.</span>")
|
||||
if(BAD_TURF)
|
||||
to_chat(user, "<span class='warning'>The landing zone contains turfs unsuitable for a base.</span>")
|
||||
to_chat(user, "<span class='warning'>The landing zone contains turfs unsuitable for a base. Make sure you've removed all walls and dangerous terrain from the landing zone.</span>")
|
||||
|
||||
/obj/item/device/assault_pod/mining/unrestricted
|
||||
name = "omni-locational landing field designator"
|
||||
@@ -248,6 +250,13 @@ interface with the mining shuttle at the landing site if a mobile beacon is also
|
||||
width = 9
|
||||
height = 9
|
||||
|
||||
/obj/docking_port/mobile/auxillary_base/takeoff(list/old_turfs, list/new_turfs, list/moved_atoms, rotation, movement_direction, old_dock, area/underlying_old_area)
|
||||
for(var/i in new_turfs)
|
||||
var/turf/place = i
|
||||
if(istype(place, /turf/closed/mineral))
|
||||
place.ScrapeAway()
|
||||
return ..()
|
||||
|
||||
obj/docking_port/stationary/public_mining_dock
|
||||
name = "public mining base dock"
|
||||
id = "disabled" //The Aux Base has to leave before this can be used as a dock.
|
||||
|
||||
@@ -22,27 +22,7 @@
|
||||
maxHealth = 400
|
||||
health = 400
|
||||
icon_state = "alienq"
|
||||
var/datum/action/small_sprite/smallsprite = new/datum/action/small_sprite()
|
||||
|
||||
/datum/action/small_sprite
|
||||
name = "Toggle Giant Sprite - Others will always see you as giant"
|
||||
button_icon_state = "smallqueen"
|
||||
background_icon_state = "bg_alien"
|
||||
var/small = 0
|
||||
|
||||
/datum/action/small_sprite/Trigger()
|
||||
..()
|
||||
if(!small)
|
||||
var/image/I = image(icon = 'icons/mob/alien.dmi' , icon_state = "alienq", loc = owner)
|
||||
I.override = 1
|
||||
I.pixel_x -= owner.pixel_x
|
||||
I.pixel_y -= owner.pixel_y
|
||||
owner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic, "smallqueen", I)
|
||||
|
||||
small = 1
|
||||
else
|
||||
owner.remove_alt_appearance("smallqueen")
|
||||
small = 0
|
||||
var/datum/action/small_sprite/smallsprite = new/datum/action/small_sprite/queen()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/royal/queen/Initialize()
|
||||
//there should only be one queen
|
||||
|
||||
@@ -163,10 +163,10 @@
|
||||
for(var/turf in obscuredTurfs)
|
||||
var/turf/t = turf
|
||||
if(!t.obscured)
|
||||
t.obscured = image('icons/effects/cameravis.dmi', t, null, LIGHTING_LAYER+1)
|
||||
t.obscured = image('icons/effects/cameravis.dmi', t, null, BYOND_LIGHTING_LAYER+0.1)
|
||||
t.obscured.pixel_x = -t.pixel_x
|
||||
t.obscured.pixel_y = -t.pixel_y
|
||||
t.obscured.plane = LIGHTING_PLANE+1
|
||||
t.obscured.plane = BYOND_LIGHTING_PLANE+0.1
|
||||
obscured += t.obscured
|
||||
|
||||
#undef UPDATE_BUFFER
|
||||
|
||||
@@ -38,11 +38,11 @@ Difficulty: Medium
|
||||
spacewalk = TRUE
|
||||
attacktext = "chomps"
|
||||
attack_sound = 'sound/magic/demon_attack1.ogg'
|
||||
icon = 'icons/mob/lavaland/64x64megafauna.dmi'
|
||||
icon_state = "dragon"
|
||||
icon_living = "dragon"
|
||||
icon_dead = "dragon_dead"
|
||||
friendly = "stares down"
|
||||
icon = 'icons/mob/lavaland/64x64megafauna.dmi'
|
||||
speak_emote = list("roars")
|
||||
armour_penetration = 40
|
||||
melee_damage_lower = 40
|
||||
@@ -61,8 +61,10 @@ Difficulty: Medium
|
||||
score_type = DRAKE_SCORE
|
||||
deathmessage = "collapses into a pile of bones, its flesh sloughing away."
|
||||
death_sound = 'sound/magic/demon_dies.ogg'
|
||||
var/datum/action/small_sprite/smallsprite = new/datum/action/small_sprite/drake()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/Initialize()
|
||||
smallsprite.Grant(src)
|
||||
. = ..()
|
||||
internal = new/obj/item/device/gps/internal/dragon(src)
|
||||
|
||||
@@ -380,6 +382,7 @@ Difficulty: Medium
|
||||
obj_damage = 80
|
||||
melee_damage_upper = 30
|
||||
melee_damage_lower = 30
|
||||
mouse_opacity = MOUSE_OPACITY_ICON
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
loot = list()
|
||||
crusher_loot = list()
|
||||
|
||||
@@ -96,6 +96,9 @@
|
||||
var/update_overlay = -1
|
||||
var/icon_update_needed = FALSE
|
||||
|
||||
/obj/machinery/power/apc/unlocked
|
||||
locked = FALSE
|
||||
|
||||
/obj/machinery/power/apc/highcap/five_k
|
||||
cell_type = /obj/item/stock_parts/cell/upgraded/plus
|
||||
|
||||
|
||||
@@ -132,9 +132,9 @@
|
||||
icon_state = "rpcoil[anchored]"
|
||||
|
||||
/obj/machinery/power/tesla_coil/research/attackby(obj/item/W, mob/user, params)
|
||||
. = ..()
|
||||
if(default_deconstruction_screwdriver(user, "rpcoil_open[anchored]", "rpcoil[anchored]", W))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/grounding_rod
|
||||
name = "grounding rod"
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
to_chat(user, "<span class='warning'>You feel yourself radically changing your slime type...</span>")
|
||||
if(do_after(user, 120, target = user))
|
||||
to_chat(user, "<span class='warning'>You feel different!</span>")
|
||||
user.set_species(/datum/species/jelly/slime)
|
||||
user.set_species(pick(/datum/species/jelly/slime, /datum/species/jelly/stargazer))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You stop the transformation.</span>")
|
||||
|
||||
@@ -870,8 +870,9 @@
|
||||
force = 6
|
||||
materials = list(MAT_METAL=500)
|
||||
throwforce = 10
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
throw_speed = 0.1
|
||||
throw_range = 28
|
||||
glide_size = 2
|
||||
flags_1 = CONDUCT_1
|
||||
max_amount = 60
|
||||
turf_type = /turf/open/floor/sepia
|
||||
|
||||
@@ -150,6 +150,7 @@
|
||||
log_game("[key_name(user)] has emagged the emergency shuttle in \
|
||||
[COORD(src)] [time] seconds before launch.")
|
||||
obj_flags |= EMAGGED
|
||||
SSshuttle.emergency.movement_force = list("KNOCKDOWN" = 60, "THROW" = 20)//YOUR PUNY SEATBELTS can SAVE YOU NOW, MORTAL
|
||||
var/datum/species/S = new
|
||||
for(var/i in 1 to 10)
|
||||
// the shuttle system doesn't know who these people are, but they
|
||||
|
||||
@@ -146,3 +146,44 @@
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
//Wheelys
|
||||
/obj/vehicle/ridden/scooter/wheelys
|
||||
name = "Wheely-Heels"
|
||||
desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either."
|
||||
icon = null
|
||||
density = FALSE
|
||||
|
||||
/obj/vehicle/ridden/scooter/wheelys/Initialize()
|
||||
. = ..()
|
||||
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
|
||||
D.vehicle_move_delay = 0
|
||||
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
|
||||
/obj/vehicle/ridden/scooter/wheelys/post_unbuckle_mob(mob/living/M)
|
||||
if(!has_buckled_mobs())
|
||||
to_chat(M, "<span class='notice'>You pop the Wheely-Heel's wheels back into place.</span>")
|
||||
moveToNullspace()
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/ridden/scooter/wheelys/post_buckle_mob(mob/living/M)
|
||||
to_chat(M, "<span class='notice'>You pop out the Wheely-Heel's wheels.</span>")
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/ridden/scooter/wheelys/Collide(atom/A)
|
||||
. = ..()
|
||||
if(A.density && has_buckled_mobs())
|
||||
var/mob/living/H = buckled_mobs[1]
|
||||
var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals))
|
||||
unbuckle_mob(H)
|
||||
H.throw_at(throw_target, 4, 3)
|
||||
H.Knockdown(30)
|
||||
H.adjustStaminaLoss(10)
|
||||
var/head_slot = H.get_item_by_slot(slot_head)
|
||||
if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat)))
|
||||
H.adjustBrainLoss(1)
|
||||
H.updatehealth()
|
||||
visible_message("<span class='danger'>[src] crashes into [A], sending [H] flying!</span>")
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
Reference in New Issue
Block a user