//VEHICLE DEFAULT HANDLING /obj/vehicle/proc/generate_actions() return /obj/vehicle/proc/generate_action_type(actiontype) var/datum/action/vehicle/A = new actiontype if(!istype(A)) return A.vehicle_target = src return A /obj/vehicle/proc/initialize_passenger_action_type(actiontype) autogrant_actions_passenger += actiontype for(var/i in occupants) grant_passenger_actions(i) //refresh /obj/vehicle/proc/initialize_controller_action_type(actiontype, control_flag) LAZYINITLIST(autogrant_actions_controller["[control_flag]"]) autogrant_actions_controller["[control_flag]"] += actiontype for(var/i in occupants) grant_controller_actions(i) //refresh /obj/vehicle/proc/grant_action_type_to_mob(actiontype, mob/m) if(isnull(occupants[m]) || !actiontype) return FALSE LAZYINITLIST(occupant_actions[m]) if(occupant_actions[m][actiontype]) return TRUE var/datum/action/action = generate_action_type(actiontype) action.Grant(m) occupant_actions[m][action.type] = action return TRUE /obj/vehicle/proc/remove_action_type_from_mob(actiontype, mob/m) if(isnull(occupants[m]) || !actiontype) return FALSE LAZYINITLIST(occupant_actions[m]) if(occupant_actions[m][actiontype]) var/datum/action/action = occupant_actions[m][actiontype] action.Remove(m) occupant_actions[m] -= actiontype return TRUE /obj/vehicle/proc/grant_passenger_actions(mob/M) for(var/v in autogrant_actions_passenger) grant_action_type_to_mob(v, M) /obj/vehicle/proc/remove_passenger_actions(mob/M) for(var/v in autogrant_actions_passenger) remove_action_type_from_mob(v, M) /obj/vehicle/proc/grant_controller_actions(mob/M) if(!istype(M) || isnull(occupants[M])) return FALSE for(var/i in GLOB.bitflags) if(occupants[M] & i) grant_controller_actions_by_flag(M, i) return TRUE /obj/vehicle/proc/remove_controller_actions(mob/M) if(!istype(M) || isnull(occupants[M])) return FALSE for(var/i in GLOB.bitflags) remove_controller_actions_by_flag(M, i) return TRUE /obj/vehicle/proc/grant_controller_actions_by_flag(mob/M, flag) if(!istype(M)) return FALSE for(var/v in autogrant_actions_controller["[flag]"]) grant_action_type_to_mob(v, M) return TRUE /obj/vehicle/proc/remove_controller_actions_by_flag(mob/M, flag) if(!istype(M)) return FALSE for(var/v in autogrant_actions_controller["[flag]"]) remove_action_type_from_mob(v, M) return TRUE /obj/vehicle/proc/cleanup_actions_for_mob(mob/M) if(!istype(M)) return FALSE for(var/path in occupant_actions[M]) stack_trace("Leftover action type [path] in vehicle type [type] for mob type [M.type] - THIS SHOULD NOT BE HAPPENING!") var/datum/action/action = occupant_actions[M][path] action.Remove(M) occupant_actions[M] -= path occupant_actions -= M return TRUE //ACTION DATUMS /datum/action/vehicle check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUN | AB_CHECK_CONSCIOUS icon_icon = 'icons/mob/actions/actions_vehicle.dmi' button_icon_state = "vehicle_eject" var/obj/vehicle/vehicle_target /datum/action/vehicle/sealed var/obj/vehicle/sealed/vehicle_entered_target /datum/action/vehicle/sealed/climb_out name = "Climb Out" desc = "Climb out of your vehicle!" button_icon_state = "car_eject" /datum/action/vehicle/sealed/climb_out/Trigger() if(..() && istype(vehicle_entered_target)) vehicle_entered_target.mob_try_exit(owner, owner) /datum/action/vehicle/ridden var/obj/vehicle/ridden/vehicle_ridden_target /datum/action/vehicle/sealed/remove_key name = "Remove key" desc = "Take your key out of the vehicle's ignition" button_icon_state = "car_removekey" /datum/action/vehicle/sealed/remove_key/Trigger() vehicle_entered_target.remove_key(owner) //CLOWN CAR ACTION DATUMS /datum/action/vehicle/sealed/horn name = "Honk Horn" desc = "Honk your classy horn." button_icon_state = "car_horn" var/hornsound = 'sound/items/carhorn.ogg' var/last_honk_time /datum/action/vehicle/sealed/horn/Trigger() if(world.time - last_honk_time > 20) vehicle_entered_target.visible_message("[vehicle_entered_target] loudly honks") to_chat(owner, "You press the vehicle's horn.") playsound(vehicle_entered_target, hornsound, 75) last_honk_time = world.time /datum/action/vehicle/sealed/horn/clowncar/Trigger() if(world.time - last_honk_time > 20) vehicle_entered_target.visible_message("[vehicle_entered_target] loudly honks") to_chat(owner, "You press the vehicle's horn.") last_honk_time = world.time if(vehicle_target.inserted_key) vehicle_target.inserted_key.attack_self(owner) //The key plays a sound else playsound(vehicle_entered_target, hornsound, 75) /datum/action/vehicle/sealed/DumpKidnappedMobs name = "Dump kidnapped mobs" desc = "Dump all objects and people in your car on the floor." button_icon_state = "car_dump" /datum/action/vehicle/sealed/DumpKidnappedMobs/Trigger() vehicle_entered_target.visible_message("[vehicle_entered_target] starts dumping the people inside of it.") vehicle_entered_target.DumpSpecificMobs(VEHICLE_CONTROL_KIDNAPPED) /datum/action/vehicle/sealed/RollTheDice name = "Press a colorful button" desc = "Press one of those colorful buttons on your display panel!" button_icon_state = "car_rtd" /datum/action/vehicle/sealed/RollTheDice/Trigger() if(istype(vehicle_entered_target, /obj/vehicle/sealed/car/clowncar)) var/obj/vehicle/sealed/car/clowncar/C = vehicle_entered_target C.RollTheDice(owner)