mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-01 13:02:02 +00:00
This implements UDP Logging with GELF. It will allow full text search over all the logs and attributes sent over GELF to the log server.
116 lines
4.1 KiB
Plaintext
116 lines
4.1 KiB
Plaintext
/obj/item/weapon/gun/launcher/grenade
|
|
name = "grenade launcher"
|
|
desc = "A bulky pump-action grenade launcher. Holds up to 6 grenades in a revolving magazine."
|
|
icon_state = "riotgun"
|
|
item_state = "riotgun"
|
|
w_class = 4
|
|
force = 10
|
|
|
|
fire_sound = 'sound/weapons/empty.ogg'
|
|
fire_sound_text = "a metallic thunk"
|
|
recoil = 0
|
|
throw_distance = 7
|
|
release_force = 5
|
|
|
|
var/obj/item/weapon/grenade/chambered
|
|
var/list/grenades = new/list()
|
|
var/max_grenades = 5 //holds this + one in the chamber
|
|
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
|
|
|
//revolves the magazine, allowing players to choose between multiple grenade types
|
|
/obj/item/weapon/gun/launcher/grenade/proc/pump(mob/M as mob)
|
|
playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1)
|
|
|
|
var/obj/item/weapon/grenade/next
|
|
if(grenades.len)
|
|
next = grenades[1] //get this first, so that the chambered grenade can still be removed if the grenades list is empty
|
|
if(chambered)
|
|
grenades += chambered //rotate the revolving magazine
|
|
chambered = null
|
|
if(next)
|
|
grenades -= next //Remove grenade from loaded list.
|
|
chambered = next
|
|
M << "<span class='warning'>You pump [src], loading \a [next] into the chamber.</span>"
|
|
else
|
|
M << "<span class='warning'>You pump [src], but the magazine is empty.</span>"
|
|
update_icon()
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/examine(mob/user)
|
|
if(..(user, 2))
|
|
var/grenade_count = grenades.len + (chambered? 1 : 0)
|
|
user << "Has [grenade_count] grenade\s remaining."
|
|
if(chambered)
|
|
user << "\A [chambered] is chambered."
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/proc/load(obj/item/weapon/grenade/G, mob/user)
|
|
if(grenades.len >= max_grenades)
|
|
user << "<span class='warning'>[src] is full.</span>"
|
|
return
|
|
user.remove_from_mob(G)
|
|
G.loc = src
|
|
grenades.Insert(1, G) //add to the head of the list, so that it is loaded on the next pump
|
|
user.visible_message("[user] inserts \a [G] into [src].", "<span class='notice'>You insert \a [G] into [src].</span>")
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/proc/unload(mob/user)
|
|
if(grenades.len)
|
|
var/obj/item/weapon/grenade/G = grenades[grenades.len]
|
|
grenades.len--
|
|
user.put_in_hands(G)
|
|
user.visible_message("[user] removes \a [G] from [src].", "<span class='notice'>You remove \a [G] from [src].</span>")
|
|
else
|
|
user << "<span class='warning'>[src] is empty.</span>"
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/attack_self(mob/user)
|
|
pump(user)
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/attackby(obj/item/I, mob/user)
|
|
if((istype(I, /obj/item/weapon/grenade)))
|
|
load(I, user)
|
|
else
|
|
..()
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/attack_hand(mob/user)
|
|
if(user.get_inactive_hand() == src)
|
|
unload(user)
|
|
else
|
|
..()
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/consume_next_projectile()
|
|
if(chambered)
|
|
chambered.det_time = 10
|
|
chambered.activate(null)
|
|
return chambered
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/handle_post_fire(mob/user)
|
|
message_admins("[key_name_admin(user)] fired a grenade ([chambered.name]) from a grenade launcher ([src.name]).")
|
|
log_game("[key_name_admin(user)] used a grenade ([chambered.name]).",ckey=key_name(user))
|
|
chambered = null
|
|
|
|
//Underslung grenade launcher to be used with the Z8
|
|
/obj/item/weapon/gun/launcher/grenade/underslung
|
|
name = "underslung grenade launcher"
|
|
desc = "Not much more than a tube and a firing mechanism, this grenade launcher is designed to be fitted to a rifle."
|
|
w_class = 3
|
|
force = 5
|
|
max_grenades = 0
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/underslung/attack_self()
|
|
return
|
|
|
|
//load and unload directly into chambered
|
|
/obj/item/weapon/gun/launcher/grenade/underslung/load(obj/item/weapon/grenade/G, mob/user)
|
|
if(chambered)
|
|
user << "<span class='warning'>[src] is already loaded.</span>"
|
|
return
|
|
user.remove_from_mob(G)
|
|
G.loc = src
|
|
chambered = G
|
|
user.visible_message("[user] load \a [G] into [src].", "<span class='notice'>You load \a [G] into [src].</span>")
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/underslung/unload(mob/user)
|
|
if(chambered)
|
|
user.put_in_hands(chambered)
|
|
user.visible_message("[user] removes \a [chambered] from [src].", "<span class='notice'>You remove \a [chambered] from [src].</span>")
|
|
chambered = null
|
|
else
|
|
user << "<span class='warning'>[src] is empty.</span>" |