mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-31 09:08:30 +01:00
De-runtimes dueling pistols (#70816)
* de-runtimes dueling pistols * more refactors, pairing of unpaired guns * return
This commit is contained in:
@@ -18,6 +18,17 @@
|
||||
var/list/fired = list()
|
||||
var/countdown_length = 10
|
||||
var/countdown_step = 0
|
||||
var/pairing_code = ""
|
||||
|
||||
/datum/duel/New(new_gun_A, new_gun_B)
|
||||
pairing_code = SSnetworks.assign_random_name()
|
||||
|
||||
gun_A = new_gun_A
|
||||
gun_B = new_gun_B
|
||||
gun_A.duel = src
|
||||
gun_B.duel = src
|
||||
|
||||
. = ..()
|
||||
|
||||
/datum/duel/proc/try_begin()
|
||||
//Check if both guns are held and if so begin.
|
||||
@@ -83,7 +94,7 @@
|
||||
|
||||
|
||||
/datum/duel/proc/back_to_prep()
|
||||
message_duelists(span_notice("Positions invalid. Please move to valid positions [required_distance] steps away from each other to continue."))
|
||||
message_duelists(span_notice("Positions invalid. Please move to valid positions exactly [required_distance] steps away from each other to continue."))
|
||||
state = DUEL_PREPARATION
|
||||
confirmations.Cut()
|
||||
countdown_step = countdown_length
|
||||
@@ -128,6 +139,12 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
///For each linked gun that still exists, clear its reference to us, then delete.
|
||||
/datum/duel/proc/clear_duel()
|
||||
gun_A?.duel = null
|
||||
gun_B?.duel = null
|
||||
qdel(src)
|
||||
|
||||
/obj/item/gun/energy/dueling
|
||||
name = "dueling pistol"
|
||||
desc = "High-tech dueling pistol. Launches chaff and projectile according to preset settings."
|
||||
@@ -147,6 +164,24 @@
|
||||
setting_overlay = mutable_appearance(icon,setting_iconstate())
|
||||
add_overlay(setting_overlay)
|
||||
|
||||
/obj/item/gun/energy/dueling/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/gun/energy/dueling))
|
||||
var/obj/item/gun/energy/dueling/other_gun = W
|
||||
|
||||
if(!check_valid_duel(user, FALSE) && !other_gun.check_valid_duel(user, FALSE))
|
||||
var/datum/duel/D = new(src, other_gun)
|
||||
to_chat(user,span_notice("Pairing established. Pairing code: [D.pairing_code]"))
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/energy/dueling/examine_more(mob/user)
|
||||
. = ..()
|
||||
if(check_valid_duel(user, FALSE))
|
||||
. += "The pairing code is: [duel.pairing_code]"
|
||||
else
|
||||
. += "[src] is currently unpaired."
|
||||
|
||||
/obj/item/gun/energy/dueling/proc/setting_iconstate()
|
||||
switch(setting)
|
||||
if(DUEL_SETTING_A)
|
||||
@@ -159,6 +194,9 @@
|
||||
|
||||
/obj/item/gun/energy/dueling/attack_self(mob/living/user)
|
||||
. = ..()
|
||||
if(!check_valid_duel(user, TRUE))
|
||||
return
|
||||
|
||||
if(duel.state == DUEL_IDLE)
|
||||
duel.try_begin()
|
||||
else
|
||||
@@ -183,15 +221,13 @@
|
||||
|
||||
/obj/item/gun/energy/dueling/Destroy()
|
||||
. = ..()
|
||||
if(duel)
|
||||
if(duel.gun_A == src)
|
||||
duel.gun_A = null
|
||||
if(duel.gun_B == src)
|
||||
duel.gun_B = null
|
||||
duel = null
|
||||
duel?.clear_duel()
|
||||
|
||||
/obj/item/gun/energy/dueling/can_trigger_gun(mob/living/user)
|
||||
. = ..()
|
||||
if(!check_valid_duel(user, TRUE))
|
||||
return FALSE
|
||||
|
||||
switch(duel.state)
|
||||
if(DUEL_FIRING)
|
||||
return . && !duel.fired[src]
|
||||
@@ -209,6 +245,8 @@
|
||||
return TRUE
|
||||
|
||||
/obj/item/gun/energy/dueling/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread)
|
||||
if(!check_valid_duel(user, TRUE))
|
||||
return
|
||||
if(duel.state == DUEL_READY)
|
||||
duel.confirmations[src] = TRUE
|
||||
to_chat(user,span_notice("You confirm your readiness."))
|
||||
@@ -224,6 +262,14 @@
|
||||
var/obj/item/ammo_casing/energy/duel/D = chambered
|
||||
D.setting = setting
|
||||
|
||||
///Return a boolean of whether or not the pistol has a valid duel datum, if false optionally warn the user
|
||||
/obj/item/gun/energy/dueling/proc/check_valid_duel(mob/living/user, do_warn)
|
||||
if(!duel)
|
||||
if(do_warn)
|
||||
to_chat(user,span_warning("[src] is currently unpaired."))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/effect/temp_visual/dueling_chaff
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "shield-old"
|
||||
@@ -337,8 +383,4 @@
|
||||
. = ..()
|
||||
var/obj/item/gun/energy/dueling/gun_A = new(src)
|
||||
var/obj/item/gun/energy/dueling/gun_B = new(src)
|
||||
var/datum/duel/D = new
|
||||
gun_A.duel = D
|
||||
gun_B.duel = D
|
||||
D.gun_A = gun_A
|
||||
D.gun_B = gun_B
|
||||
new /datum/duel(gun_A, gun_B)
|
||||
|
||||
Reference in New Issue
Block a user