diff --git a/code/controllers/subsystem/shuttles/emergency.dm b/code/controllers/subsystem/shuttles/emergency.dm index 4b9d061cd8a..157e199b2ad 100644 --- a/code/controllers/subsystem/shuttles/emergency.dm +++ b/code/controllers/subsystem/shuttles/emergency.dm @@ -43,7 +43,10 @@ else return - SSshuttle.emergencyLastCallLoc = signalOrigin + if(prob(70)) + SSshuttle.emergencyLastCallLoc = signalOrigin + else + SSshuttle.emergencyLastCallLoc = null priority_announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlecalled.ogg', "Priority") @@ -56,6 +59,8 @@ if(prob(70)) SSshuttle.emergencyLastCallLoc = signalOrigin + else + SSshuttle.emergencyLastCallLoc = null priority_announce("The emergency shuttle has been recalled.[SSshuttle.emergencyLastCallLoc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlerecalled.ogg', "Priority") /* diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 958edb93f01..42fad40c682 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -111,7 +111,7 @@ user << "It is empty." /obj/item/toy/crayon/spraycan/attack_self(mob/living/user as mob) - var/choice = input(user,"Spraycan options") in list("Toggle Cap","Change Drawing","Change Color","Cancel") + var/choice = input(user,"Spraycan options") as null|anything in list("Toggle Cap","Change Drawing","Change Color") switch(choice) if("Toggle Cap") user << "You [capped ? "Remove" : "Replace"] the cap of the [src]" diff --git a/code/game/objects/items/devices/recaller.dm b/code/game/objects/items/devices/recaller.dm index 1fdf9794b96..b5bed586c4c 100644 --- a/code/game/objects/items/devices/recaller.dm +++ b/code/game/objects/items/devices/recaller.dm @@ -31,15 +31,16 @@ if(user.mind in (ticker.mode.A_bosses | ticker.mode.B_bosses)) dat += "Give this device to another member of your organization to use.
" else - dat += "Register Device
" + dat += "Register Device
" else var/gang_size = ((gang == "A")? (ticker.mode.A_gang.len + ticker.mode.A_bosses.len) : (ticker.mode.B_gang.len + ticker.mode.B_bosses.len)) var/gang_territory = ((gang == "A")? ticker.mode.A_territory.len : ticker.mode.B_territory.len) var/points = ((gang == "A") ? ticker.mode.gang_points.A : ticker.mode.gang_points.B) - dat += "Registration: [(gang == "A")? gang_name("A") : gang_name("B")] Gang [boss ? "Administrator" : "Member"]
" + dat += "Registration: [(gang == "A")? gang_name("A") : gang_name("B")] Gang [boss ? "Administrator" : "Lieutenant"]
" dat += "Organization Size: [gang_size]
" dat += "Station Control: [round((gang_territory/start_state.num_territories)*100, 1)]%
" + dat += "Summon Gang to Your Location
" dat += "Recall Emergency Shuttle
" dat += "
" dat += "Influence: [points]
" @@ -99,6 +100,12 @@ add_fingerprint(usr) + if(href_list["register"]) + register_device(usr) + + else if(!gang) //Gangtool must be registered before you can use the functions below + return + if(href_list["purchase"]) var/points = ((gang == "A") ? ticker.mode.gang_points.A : ticker.mode.gang_points.B) var/item_type @@ -144,12 +151,34 @@ switch(href_list["choice"]) if("recall") recall(usr) - if("register") - register_device(usr) - + if("ping") + ping_gang(usr) attack_self(usr) + +/obj/item/device/gangtool/proc/ping_gang(var/mob/user) + if(!user) + return + var/area/location = get_area(user) + if(location && location.z != 1) + user << "\icon[src]Error: Signal out of range of station." + return + var/list/members = list() + if(gang == "A") + members += ticker.mode.A_bosses | ticker.mode.A_gang + else if(gang == "B") + members += ticker.mode.B_bosses | ticker.mode.B_gang + if(members.len) + for(var/datum/mind/ganger in members) + ganger.current << "[user] summons the gang to [location]!" + log_game("[key_name(user)] summoned the [gang_name(gang)] Gang ([gang]) to [location].") + + /obj/item/device/gangtool/proc/register_device(var/mob/user) + if(jobban_isbanned(user, "gangster") || jobban_isbanned(user, "Syndicate")) + user << "\icon[src] ACCESS DENIED: Blacklisted user." + return 0 + var/promoted if(user.mind in (ticker.mode.A_gang | ticker.mode.A_bosses)) ticker.mode.A_tools += src @@ -185,26 +214,39 @@ if(recalling || !can_use(user)) return - var/turf/userturf = get_turf(user) - if(userturf.z != 1) - user << "\icon[src]Error: Device out of range of station communication arrays." - return + recalling = 1 + loc << "\icon[src]Generating shuttle recall order with codes retrieved from last call signal..." - if(SSshuttle.emergency.mode == SHUTTLE_CALL) - recalling = 1 - loc << "\icon[src]Generating shuttle recall order with codes retrieved from last call signal..." - sleep(rand(10,30)) - loc << "\icon[src]Shuttle recall order generated. Accessing station long-range communication arrays..." - sleep(rand(10,30)) - loc << "\icon[src]Comm arrays accessed. Broadcasting recall signal..." - sleep(rand(10,30)) + sleep(rand(10,30)) + + if(SSshuttle.emergency.mode != SHUTTLE_CALL) //Shuttle can only be recalled when it's moving to the station + user << "\icon[src]Emergency shuttle cannot be recalled at this time." recalling = 0 - log_game("[key_name(user)] has recalled the shuttle with a gangtool.") - message_admins("[key_name_admin(user)] has recalled the shuttle with a gangtool.", 1) - if(!SSshuttle.cancelEvac(user)) - loc << "\icon[src]No response recieved. Emergency shuttle cannot be recalled at this time." return - user << "\icon[src]Emergency shuttle cannot be recalled at this time." + loc << "\icon[src]Shuttle recall order generated. Accessing station long-range communication arrays..." + + sleep(rand(10,30)) + + var/turf/userturf = get_turf(user) + if(userturf.z != 1) //Shuttle can only be recalled while on station + user << "\icon[src]Error: Device out of range of station communication arrays." + recalling = 0 + return + var/datum/station_state/end_state = new /datum/station_state() + end_state.count() + if((100 * start_state.score(end_state)) < 70) //Shuttle cannot be recalled if the station is too damaged + user << "\icon[src]Error: Station communication systems compromised. Unable to establish connection." + recalling = 0 + return + loc << "\icon[src]Comm arrays accessed. Broadcasting recall signal..." + + sleep(rand(10,30)) + + recalling = 0 + log_game("[key_name(user)] has tried to recall the shuttle with a gangtool.") + message_admins("[key_name_admin(user)] has tried to recall the shuttle with a gangtool.", 1) + if(!SSshuttle.cancelEvac(user)) + loc << "\icon[src]No response recieved. Emergency shuttle cannot be recalled at this time." /obj/item/device/gangtool/proc/can_use(mob/living/carbon/human/user) if(!istype(user))