//Config stuff #define SUPPLY_DOCKZ 2 //Z-level of the Dock. #define SUPPLY_STATIONZ 1 //Z-level of the Station. #define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station #define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock //Supply packs are in /code/defines/obj/supplypacks.dm //Computers are in /code/game/machinery/computer/supply.dm var/datum/controller/supply/supply_controller = new() var/list/mechtoys = list( /obj/item/toy/prize/ripley, /obj/item/toy/prize/fireripley, /obj/item/toy/prize/deathripley, /obj/item/toy/prize/gygax, /obj/item/toy/prize/durand, /obj/item/toy/prize/honk, /obj/item/toy/prize/marauder, /obj/item/toy/prize/seraph, /obj/item/toy/prize/mauler, /obj/item/toy/prize/odysseus, /obj/item/toy/prize/phazon ) /obj/item/weapon/paper/manifest name = "supply manifest" var/is_copy = 1 /area/supply/station name = "Supply Shuttle" icon_state = "shuttle3" requires_power = 0 base_turf = /turf/space /area/supply/dock name = "Supply Shuttle" icon_state = "shuttle3" requires_power = 0 base_turf = /turf/space /obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY name = "\improper plastic flaps" desc = "Completely impassable - or are they?" icon = 'icons/obj/stationobjs.dmi' //Change this. icon_state = "plasticflaps" density = 0 anchored = 1 layer = MOB_LAYER plane = MOB_PLANE explosion_resistance = 5 var/list/mobs_can_pass = list( /mob/living/bot, /mob/living/simple_animal/slime, /mob/living/simple_animal/mouse, /mob/living/silicon/robot/drone ) /obj/structure/plasticflaps/attackby(obj/item/P, mob/user) if(istype(P, /obj/item/weapon/wirecutters)) playsound(src, P.usesound, 50, 1) user << "You start to cut the plastic flaps." if(do_after(user, 10 * P.toolspeed)) user << "You cut the plastic flaps." var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) A.amount = 4 qdel(src) return else return /obj/structure/plasticflaps/CanPass(atom/A, turf/T) if(istype(A) && A.checkpass(PASSGLASS)) return prob(60) var/obj/structure/bed/B = A if (istype(A, /obj/structure/bed) && B.has_buckled_mobs())//if it's a bed/chair and someone is buckled, it will not pass return 0 if(istype(A, /obj/vehicle)) //no vehicles return 0 var/mob/living/M = A if(istype(M)) if(M.lying) return ..() for(var/mob_type in mobs_can_pass) if(istype(A, mob_type)) return ..() return issmall(M) return ..() /obj/structure/plasticflaps/ex_act(severity) switch(severity) if (1) qdel(src) if (2) if (prob(50)) qdel(src) if (3) if (prob(5)) qdel(src) /obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates name = "airtight plastic flaps" desc = "Heavy duty, airtight, plastic flaps." /obj/structure/plasticflaps/mining/New() //set the turf below the flaps to block air var/turf/T = get_turf(loc) if(T) T.blocks_air = 1 ..() /obj/structure/plasticflaps/mining/Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor var/turf/T = get_turf(loc) if(T && istype(T, /turf/simulated/floor)) T.blocks_air = 0 ..() /* /obj/effect/marker/supplymarker icon_state = "X" icon = 'icons/misc/mark.dmi' name = "X" invisibility = 101 anchored = 1 opacity = 0 */ /datum/supply_order var/ordernum var/datum/supply_packs/object = null var/orderedby = null var/comment = null /datum/exported_crate var/name var/value /datum/controller/supply //supply points var/points = 50 var/points_per_process = 1.5 var/points_per_slip = 2 var/points_per_platinum = 5 // 5 points per sheet var/points_per_phoron = 5 var/points_per_money = 0.02 //control var/ordernum var/list/shoppinglist = list() var/list/requestlist = list() var/list/supply_packs = list() var/list/exported_crates = list() //shuttle movement var/movetime = 1200 var/datum/shuttle/ferry/supply/shuttle /datum/controller/supply/New() ordernum = rand(1,9000) for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) var/datum/supply_packs/P = new typepath() supply_packs[P.name] = P // Supply shuttle ticker - handles supply point regeneration // This is called by the process scheduler every thirty seconds /datum/controller/supply/proc/process() points += points_per_process //To stop things being sent to CentCom which should not be sent to centcomm. Recursively checks for these types. /datum/controller/supply/proc/forbidden_atoms_check(atom/A) if(isliving(A)) return 1 if(istype(A,/obj/item/weapon/disk/nuclear)) return 1 if(istype(A,/obj/machinery/nuclearbomb)) return 1 if(istype(A,/obj/item/device/radio/beacon)) return 1 for(var/i=1, i<=A.contents.len, i++) var/atom/B = A.contents[i] if(.(B)) return 1 //Sellin /datum/controller/supply/proc/sell() var/area/area_shuttle = shuttle.get_location_area() if(!area_shuttle) return callHook("sell_shuttle", list(area_shuttle)); var/phoron_count = 0 var/plat_count = 0 var/money_count = 0 exported_crates = list() for(var/atom/movable/MA in area_shuttle) if(MA.anchored) continue // Must be in a crate! if(istype(MA,/obj/structure/closet/crate)) var/oldpoints = points var/oldphoron = phoron_count var/oldplatinum = plat_count var/oldmoney = money_count var/obj/structure/closet/crate/CR = MA callHook("sell_crate", list(CR, area_shuttle)) points += CR.points_per_crate var/find_slip = 1 for(var/atom in CR) // Sell manifests var/atom/A = atom if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) var/obj/item/weapon/paper/manifest/slip = A if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense points += points_per_slip find_slip = 0 continue // Sell phoron and platinum if(istype(A, /obj/item/stack)) var/obj/item/stack/P = A switch(P.get_material_name()) if("phoron") phoron_count += P.get_amount() if("platinum") plat_count += P.get_amount() //Sell spacebucks if(istype(A, /obj/item/weapon/spacecash)) var/obj/item/weapon/spacecash/cashmoney = A money_count += cashmoney.worth var/datum/exported_crate/EC = new /datum/exported_crate() EC.name = CR.name EC.value = points - oldpoints EC.value += (phoron_count - oldphoron) * points_per_phoron EC.value += (plat_count - oldplatinum) * points_per_platinum EC.value += (money_count - oldmoney) * points_per_money exported_crates += EC qdel(MA) points += phoron_count * points_per_phoron points += plat_count * points_per_platinum points += money_count * points_per_money //Buyin /datum/controller/supply/proc/buy() if(!shoppinglist.len) return var/orderedamount = shoppinglist.len var/area/area_shuttle = shuttle.get_location_area() if(!area_shuttle) return var/list/clear_turfs = list() for(var/turf/T in area_shuttle) if(T.density) continue var/contcount for(var/atom/A in T.contents) if(!A.simulated) continue contcount++ if(contcount) continue clear_turfs += T for(var/S in shoppinglist) if(!clear_turfs.len) break var/i = rand(1,clear_turfs.len) var/turf/pickedloc = clear_turfs[i] clear_turfs.Cut(i,i+1) shoppinglist -= S var/datum/supply_order/SO = S var/datum/supply_packs/SP = SO.object var/obj/A = new SP.containertype(pickedloc) A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" //supply manifest generation begin var/obj/item/weapon/paper/manifest/slip if(!SP.contraband) slip = new /obj/item/weapon/paper/manifest(A) slip.is_copy = 0 slip.info = "