mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
Added a certain admin request (#29782)
* surprise * fix * moved to its own file * I can't into basic math * warnings * formalities * let the gamemode be free * separation * gne
This commit is contained in:
@@ -430,3 +430,6 @@ var/global_poltergeist_cooldown = 300 //30s by default, badmins can var-edit thi
|
||||
|
||||
var/list/all_machines = list()
|
||||
var/list/machinery_rating_cache = list() // list of type path -> number
|
||||
|
||||
var/runescape_pvp = FALSE
|
||||
var/runescape_skull_display = FALSE
|
||||
|
||||
@@ -94,6 +94,9 @@
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been [what_done] by [user_txt][object_txt].[intent_txt][addition_txt]</font>")
|
||||
target.LAssailant = (iscarbon(user) ? user : null)
|
||||
|
||||
if (ismob(user) && ismob(target))
|
||||
target.assaulted_by(user)
|
||||
|
||||
var/log_msg = "<span class='danger'>[user_txt] [what_done] [target_txt][object_txt][intent_txt].</span>[addition_txt] ([formatJumpTo(user, "JMP")])"
|
||||
log_attack(log_msg)
|
||||
if (admin_warn)
|
||||
|
||||
@@ -226,6 +226,7 @@ proc/add_logs(mob/user, mob/target, what_done, var/admin=1, var/object=null, var
|
||||
target.LAssailant = null
|
||||
else
|
||||
target.LAssailant = user
|
||||
target.assaulted_by(user)
|
||||
if(admin)
|
||||
log_attack("<font color='red'>[user ? "[user.name][(ismob(user) && user.ckey) ? "([user.ckey])" : ""]" : "NON-EXISTANT SUBJECT"] [what_done] [target ? "[target.name][(ismob(target) && target.ckey)? "([target.ckey])" : ""]" : "NON-EXISTANT SUBJECT"][object ? " with [object]" : " "]. [addition]</font>")
|
||||
|
||||
|
||||
@@ -174,6 +174,7 @@ var/list/arcane_tomes = list()
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
@@ -328,6 +328,7 @@ var/runedec = 0 // Rune cap ?
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
if(isobserver(M))
|
||||
if(M.invisibility != 0)
|
||||
M.invisibility = 0
|
||||
|
||||
@@ -196,6 +196,7 @@
|
||||
target.LAssailant = null
|
||||
else
|
||||
target.LAssailant = assailant
|
||||
target.assaulted_by(assailant)
|
||||
while(do_mob(assailant, target, 5 SECONDS))
|
||||
if(!isvampire(assailant))
|
||||
to_chat(assailant, "<span class='warning'>Your fangs have disappeared!</span>")
|
||||
|
||||
@@ -29,6 +29,8 @@ var/datum/controller/gameticker/ticker
|
||||
var/datum/religion/chap_rel // Official religion of chappy
|
||||
var/list/datum/religion/religions = list() // Religion(s) in the game
|
||||
|
||||
var/list/runescape_skulls = list() // Keeping track of the runescape skulls that appear over mobs when enabled
|
||||
|
||||
var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
|
||||
|
||||
var/hardcore_mode = 0 //If set to nonzero, hardcore mode is enabled (current hardcore mode features: damage from hunger)
|
||||
@@ -443,6 +445,12 @@ var/datum/controller/gameticker/ticker
|
||||
nanocoins_lastchange = world.time + rand(3000,15000)
|
||||
nanocoins_rates = (rand(1,30))/10
|
||||
|
||||
//runescape skull updates
|
||||
if (runescape_skull_display)
|
||||
for (var/entry in runescape_skulls)
|
||||
var/datum/runescape_skull_data/the_data = runescape_skulls[entry]
|
||||
the_data.process()
|
||||
|
||||
/*emergency_shuttle.process()*/
|
||||
watchdog.check_for_update()
|
||||
|
||||
|
||||
@@ -254,6 +254,7 @@ obj/machinery/gibber/New()
|
||||
src.occupant.LAssailant = null
|
||||
else
|
||||
src.occupant.LAssailant = user
|
||||
occupant.assaulted_by(user)
|
||||
|
||||
src.occupant.death(1)
|
||||
src.occupant.ghostize(0)
|
||||
|
||||
@@ -213,6 +213,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = chassis.occupant
|
||||
M.assaulted_by(chassis.occupant)
|
||||
log_message("Drilled through [target]")
|
||||
occupant_message("<span class='red'><b>You drill into \the [target].</b></span>")
|
||||
chassis.visible_message("<span class='red'><b>[chassis] drills into \the [target]!</b></span>", "You hear a drill breaking something.")
|
||||
|
||||
@@ -1001,6 +1001,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
add_fingerprint(user)
|
||||
//if(clumsy_check(user) && prob(50))
|
||||
@@ -1329,6 +1330,7 @@ var/global/list/image/blood_overlays = list()
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
log_attack("[user.name] ([user.ckey]) Attempted to restrain [M.name] ([M.ckey]) with \the [src].")
|
||||
return TRUE
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
if(!clown_check(user))
|
||||
return
|
||||
|
||||
@@ -52,6 +52,7 @@ effective or pretty fucking useless.
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
else
|
||||
to_chat(M, "<span class='danger'>You feel a sudden, electric jolt travel through your head.</span>")
|
||||
|
||||
@@ -14,6 +14,7 @@ obj/item/borg/stun/attack(mob/M as mob, mob/living/silicon/robot/user as mob)
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
user.cell.charge -= 30
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
return 0//proceed as normally (put wrap in box)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You can't wrap that.</span>")
|
||||
|
||||
|
||||
|
||||
/obj/item/stack/package_wrap/afterattack(var/attacked, mob/user as mob, var/proximity_flag)
|
||||
var/atom/movable/target = attacked
|
||||
@@ -119,6 +119,7 @@
|
||||
H.LAssailant = null
|
||||
else
|
||||
H.LAssailant = user
|
||||
H.assaulted_by(user)
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) used the [src.name] to wrap [H.name] ([H.ckey])</font>")
|
||||
use(2)
|
||||
return 1
|
||||
|
||||
@@ -764,6 +764,8 @@ var/global/list/alcatraz_stuff = list(
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
|
||||
if(!iscarbon(M))
|
||||
return
|
||||
|
||||
@@ -120,6 +120,7 @@
|
||||
target.LAssailant = null
|
||||
else
|
||||
target.LAssailant = user
|
||||
target.assaulted_by(user)
|
||||
playsound(src,'sound/items/defib.ogg',50,1)
|
||||
charges--
|
||||
update_icon()
|
||||
|
||||
@@ -169,6 +169,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
if(inuse)
|
||||
return 0
|
||||
|
||||
@@ -102,6 +102,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
target.overlays += image('icons/obj/assemblies.dmi', "plastic-explosive2")
|
||||
to_chat(user, "Bomb has been planted. Timer counting down from [timer].")
|
||||
spawn(timer*10)
|
||||
|
||||
@@ -348,6 +348,7 @@
|
||||
H.LAssailant = null
|
||||
else
|
||||
H.LAssailant = user
|
||||
H.assaulted_by(user)
|
||||
qdel(H)
|
||||
return TRUE
|
||||
|
||||
@@ -382,6 +383,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
var/t = user.zone_sel.selecting
|
||||
if (t == LIMB_HEAD)
|
||||
@@ -471,6 +473,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
if(prob(15))
|
||||
M.Knockdown(3)
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
msg_admin_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
|
||||
@@ -214,6 +214,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
/obj/item/weapon/melee/baton/throw_impact(atom/hit_atom)
|
||||
if(prob(50))
|
||||
@@ -243,6 +244,7 @@
|
||||
L.LAssailant = null
|
||||
else
|
||||
L.LAssailant = foundmob
|
||||
L.assaulted_by(foundmob)
|
||||
|
||||
/obj/item/weapon/melee/baton/emp_act(severity)
|
||||
if(bcell)
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
for(var/mob/O in viewers(M))
|
||||
@@ -177,6 +178,7 @@
|
||||
target.LAssailant = null
|
||||
else
|
||||
target.LAssailant = user
|
||||
target.assaulted_by(user)
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -895,11 +895,15 @@ var/global/floorIsLava = 0
|
||||
<A href='?src=\ref[src];secretsfun=thebees'>Unleash THE BEES onto the crew</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (WARNING: extremely lame and DANGEROUS!)</A><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=togglerunescapepvp'>Toggle Maint-Only PvP</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=togglerunescapeskull'>Toggle Skull icon appearing over aggressors</A><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=massbomber'>Turn all players into Bomberman</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=bomberhurt'>Make Bomberman Bombs actually hurt players</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=bomberdestroy'>Make Bomberman Bombs actually destroy structures</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=bombernohurt'>Make Bomberman Bombs harmless to players (default)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=bombernodestroy'>Make Bomberman Bombs harmless to the environment (default)</A><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=mechanics_motivator'>Incentivize Mechanics to do their job</A><BR>
|
||||
<B>Final Solutions</B><BR>
|
||||
<I>(Warning, these will end the round!)</I><BR>
|
||||
|
||||
@@ -3972,6 +3972,35 @@
|
||||
for(var/i = 1 to choice)
|
||||
world << sound('sound/effects/explosionfar.ogg')
|
||||
sleep(rand(2, 10)) //Sleep 0.2 to 1 second
|
||||
if("togglerunescapepvp")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","RSPVP")
|
||||
runescape_pvp = !runescape_pvp
|
||||
if(runescape_pvp)
|
||||
message_admins("[key_name_admin(usr)] has enabled Maint-Only PvP.")
|
||||
log_admin("[key_name_admin(usr)] has enabled Maint-Only PvP.")
|
||||
for (var/mob/player in player_list)
|
||||
to_chat(player, "<span class='userdanger'>WARNING: Wilderness mode is now enabled; players can only harm one another in maintenance areas!</span>")
|
||||
else
|
||||
message_admins("[key_name_admin(usr)] has disabled Maint-Only PvP.")
|
||||
log_admin("[key_name_admin(usr)] has disabled Maint-Only PvP.")
|
||||
for (var/mob/player in player_list)
|
||||
to_chat(player, "<span class='userdanger'>WARNING: Wilderness mode is now disabled; players can only harm one another anywhere!</span>")
|
||||
if("togglerunescapeskull")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","RSSKL")
|
||||
runescape_skull_display = !runescape_skull_display
|
||||
if(runescape_skull_display)
|
||||
message_admins("[key_name_admin(usr)] has enabled Skull icons appearing over aggressors.")
|
||||
log_admin("[key_name_admin(usr)] has enabled Skull icon appearing over aggressors.")
|
||||
else
|
||||
message_admins("[key_name_admin(usr)] has disabled Skull icon appearing over aggressors.")
|
||||
log_admin("[key_name_admin(usr)] has disabled Skull icon appearing over aggressors.")
|
||||
if (ticker)
|
||||
for (var/entry in ticker.runescape_skulls)
|
||||
var/datum/runescape_skull_data/the_data = ticker.runescape_skulls[entry]
|
||||
ticker.runescape_skulls -= entry
|
||||
qdel(the_data)
|
||||
if("massbomber")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","BBM")
|
||||
|
||||
@@ -279,6 +279,9 @@
|
||||
winset(src, "rpane.round_end", "is-visible=false")
|
||||
winset(src, "rpane.last_round_end", "is-visible=false")
|
||||
|
||||
if (runescape_pvp)
|
||||
to_chat(src, "<span class='userdanger'>WARNING: Wilderness mode is enabled; players can only harm one another in maintenance areas!</span>")
|
||||
|
||||
clear_credits() //Otherwise these persist if the client doesn't close the game between rounds
|
||||
|
||||
if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them.
|
||||
|
||||
@@ -37,6 +37,11 @@
|
||||
living_mob_list -= src
|
||||
dead_mob_list += src
|
||||
stat_collection.add_death_stat(src)
|
||||
if (runescape_skull_display && ticker)//we died, begone skull
|
||||
if ("\ref[src]" in ticker.runescape_skulls)
|
||||
var/datum/runescape_skull_data/the_data = ticker.runescape_skulls["\ref[src]"]
|
||||
ticker.runescape_skulls -= "\ref[src]"
|
||||
qdel(the_data)
|
||||
if(client)
|
||||
client.color = initial(client.color)
|
||||
for(var/obj/item/I in src)
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
LAssailant = null
|
||||
else
|
||||
LAssailant = M
|
||||
assaulted_by(M)
|
||||
log_attack("[M.name] ([M.ckey]) bitten by [src.name] ([src.ckey])")
|
||||
return
|
||||
|
||||
@@ -176,6 +177,7 @@
|
||||
LAssailant = null
|
||||
else
|
||||
LAssailant = M
|
||||
assaulted_by(M)
|
||||
log_attack("[src.name] ([src.ckey]) kicked by [M.name] ([M.ckey])")
|
||||
|
||||
/mob/living/carbon/human/attack_hand(var/mob/living/carbon/human/M)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
G.synch()
|
||||
target.LAssailant = src
|
||||
target.grabbed_by(src)
|
||||
target.assaulted_by(src)
|
||||
|
||||
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
visible_message("<span class='warning'>[src] grabs [target] passively!</span>")
|
||||
|
||||
@@ -1399,6 +1399,7 @@ Thanks.
|
||||
return
|
||||
|
||||
tmob.LAssailant = src
|
||||
tmob.assaulted_by(src, TRUE)
|
||||
|
||||
now_pushing = 0
|
||||
spawn(0)
|
||||
@@ -1557,6 +1558,10 @@ Thanks.
|
||||
to_chat(src, "<span class='warning'>You can't do that now!</span>")
|
||||
return FAILED_THROW
|
||||
|
||||
if(runescape_pvp && is_pacified())
|
||||
to_chat(src, "<span class='warning'>As such, throwing items is also forbidden outside of maintenance areas.</span>")
|
||||
return FAILED_THROW
|
||||
|
||||
if(target.type == /obj/abstract/screen)
|
||||
return FAILED_THROW
|
||||
|
||||
@@ -1592,6 +1597,7 @@ Thanks.
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = usr
|
||||
M.assaulted_by(usr)
|
||||
qdel(G)
|
||||
if(!item)
|
||||
return FAILED_THROW //Grab processing has a chance of returning null
|
||||
|
||||
@@ -160,6 +160,7 @@
|
||||
src.LAssailant = null
|
||||
else
|
||||
src.LAssailant = M
|
||||
assaulted_by(M)
|
||||
|
||||
/*
|
||||
Ear and eye protection
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
var/mob/M = AM
|
||||
to_chat(src, "<span class='danger'>You are too depressed to push [M] out of \the way.</span>")
|
||||
M.LAssailant = src
|
||||
M.assaulted_by(src)
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
var/mob/M = AM
|
||||
to_chat(src, "<span class='danger'>You are too depressed to push [M] out of \the way.</span>")
|
||||
M.LAssailant = src
|
||||
M.assaulted_by(src)
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -1073,6 +1073,7 @@ Use this proc preferably at the end of an equipment loadout
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = usr
|
||||
M.assaulted_by(usr, TRUE)
|
||||
|
||||
/mob/verb/stop_pulling()
|
||||
set name = "Stop Pulling"
|
||||
@@ -2119,6 +2120,12 @@ mob/proc/on_foot()
|
||||
alphas.Remove(source_define)
|
||||
|
||||
/mob/proc/is_pacified(var/message = VIOLENCE_SILENT,var/target,var/weapon)
|
||||
if (runescape_pvp)
|
||||
var/area/A = get_area(src)
|
||||
if (!istype(A, /area/maintenance) && !is_type_in_list(A,non_standard_maint_areas))
|
||||
to_chat(src, "<span class='danger'>You must enter maintenance to attack other players!</span>")
|
||||
return TRUE
|
||||
|
||||
if(status_flags & UNPACIFIABLE)
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -207,8 +207,8 @@
|
||||
statpanel("[P.panel]","",P)
|
||||
*/
|
||||
|
||||
//The last mob/living/carbon to push/drag/grab this mob (mostly used by slimes friend recognition)
|
||||
var/mob/living/carbon/LAssailant = null
|
||||
//The last mob/living/carbon to push/drag/grab/harm this mob
|
||||
var/mob/LAssailant = null
|
||||
|
||||
//Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button
|
||||
var/list/spell/spell_list = list()
|
||||
|
||||
@@ -150,7 +150,7 @@ var/paperwork_library
|
||||
t = replacetext(t, "\[time\]", "[worldtime2text()]")
|
||||
|
||||
// tables ported from Baystation12 : https://github.com/Baystation12/Baystation12
|
||||
|
||||
|
||||
t = replacetext(t, "\[table\]", "<table border=1 cellspacing=0 cellpadding=3 style='border: 1px solid black;'>")
|
||||
t = replacetext(t, "\[/table\]", "</td></tr></table>")
|
||||
t = replacetext(t, "\[row\]", "</td><tr>")
|
||||
@@ -310,6 +310,7 @@ var/paperwork_library
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
if(reagents && reagents.total_volume)
|
||||
reagents.trans_to(M,50)
|
||||
|
||||
|
||||
@@ -235,6 +235,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
B.reagents.trans_to(M, inject_amount)
|
||||
|
||||
|
||||
@@ -185,6 +185,7 @@ var/list/impact_master = list()
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = firer
|
||||
M.assaulted_by(firer)
|
||||
else
|
||||
log_attack("<font color='red'>[key_name(firer)] shot [key_name(M)] with a [type]</font>")
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[key_name(firer)]</b> shot <b>[key_name(M)]</b> with a <b>[type]</b>"
|
||||
@@ -195,6 +196,7 @@ var/list/impact_master = list()
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = firer
|
||||
M.assaulted_by(firer)
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN/(no longer exists)</b> shot <b>UNKNOWN/(no longer exists)</b> with a <b>[type]</b>"
|
||||
msg_admin_attack("UNKNOWN/(no longer exists) shot UNKNOWN/(no longer exists) with a [type]. Wait what the fuck?")
|
||||
@@ -293,6 +295,7 @@ var/list/impact_master = list()
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = firer
|
||||
M.assaulted_by(firer)
|
||||
|
||||
if(!A)
|
||||
return 1
|
||||
@@ -308,6 +311,7 @@ var/list/impact_master = list()
|
||||
BM.LAssailant = null
|
||||
else
|
||||
BM.LAssailant = firer
|
||||
BM.assaulted_by(firer)
|
||||
|
||||
var/turf/A_turf = get_turf(A) //Store the location of A for later use in case it is destroyed in bullet_act()
|
||||
|
||||
|
||||
@@ -240,6 +240,7 @@ var/list/beam_master = list()
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = firer_mob
|
||||
M.assaulted_by(firer_mob)
|
||||
else
|
||||
log_attack("<font color='red'>[key_name(firer_mob)] shot [key_name(M)] with a [type]</font>")
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[key_name(firer_mob)]</b> shot <b>[key_name(M)]</b> with a <b>[type]</b>"
|
||||
@@ -250,6 +251,7 @@ var/list/beam_master = list()
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = firer_mob
|
||||
M.assaulted_by(firer_mob)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -852,6 +854,7 @@ var/list/laser_tag_vests = list(/obj/item/clothing/suit/tag/redtag, /obj/item/cl
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = firer
|
||||
M.assaulted_by(firer)
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN/(no longer exists)</b> shot <b>[key_name(M)]</b> with a <b>[type]</b>"
|
||||
msg_admin_attack("UNKNOWN/(no longer exists) shot [key_name(M)] with a [type] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
if(reagents.total_volume) //Deal with the reagents in the food
|
||||
reagents.reaction(M, INGEST)
|
||||
|
||||
@@ -131,6 +131,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
//The reagents in the bottle splash all over the target, thanks for the idea Nodrak
|
||||
if(src.reagents)
|
||||
@@ -173,6 +174,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
if(reagents.total_volume)
|
||||
if (ishuman(M))
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>[trans] units injected. [reagents.total_volume] units remaining in [src].</span>")
|
||||
|
||||
@@ -171,8 +171,9 @@ var/list/anomaly_power_utilizers = list()
|
||||
foundmob.attack_log += "\[[time_stamp()]\]<font color='red'> Touched [L.name] ([L.ckey]) with thrown [name] ([inserted_battery.battery_effect.effecttype])</font>"
|
||||
L.attack_log += "\[[time_stamp()]\]<font color='orange'> Touched by [istype(foundmob) ? foundmob.name : ""] ([istype(foundmob) ? foundmob.ckey : ""]) with thrown [name] ([inserted_battery.battery_effect.effecttype])</font>"
|
||||
log_attack("<font color='red'>[istype(foundmob) ? foundmob.name : ""] ([istype(foundmob) ? foundmob.ckey : ""]) touched [L.name] ([L.ckey]) with thrown [name] ([inserted_battery.battery_effect.effecttype])</font>" )
|
||||
if(!istype(foundmob))
|
||||
if(istype(foundmob))
|
||||
L.LAssailant = foundmob
|
||||
L.assaulted_by(foundmob)
|
||||
else
|
||||
L.LAssailant = null
|
||||
|
||||
@@ -199,6 +200,7 @@ var/list/anomaly_power_utilizers = list()
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
M.assaulted_by(user)
|
||||
|
||||
/obj/item/weapon/anodevice/proc/shutdown_emission()
|
||||
if(activated)
|
||||
|
||||
87
code/modules/runescape/runescape_pvp.dm
Normal file
87
code/modules/runescape/runescape_pvp.dm
Normal file
@@ -0,0 +1,87 @@
|
||||
|
||||
var/list/non_standard_maint_areas = list(
|
||||
/area/construction/qmaint,
|
||||
/area/vox_trading_post/maintroom,
|
||||
/area/vox_trading_post/solars,
|
||||
/area/research_outpost/maint,
|
||||
/area/research_outpost/maintstore2
|
||||
)
|
||||
|
||||
/datum/runescape_skull_data
|
||||
var/holder_ref
|
||||
var/last_fight
|
||||
var/skull_timer = 20 MINUTES
|
||||
var/image/skull
|
||||
var/list/victim_refs = list()
|
||||
var/name = "skull data"
|
||||
|
||||
/datum/runescape_skull_data/New(var/mob/M,var/first_victim)
|
||||
if (!ticker)
|
||||
return
|
||||
if (!M)
|
||||
qdel(src)
|
||||
return
|
||||
holder_ref = "\ref[M]"
|
||||
name = M.name//for easier VV debugging
|
||||
ticker.runescape_skulls[holder_ref] = src
|
||||
skull = image('icons/mob/hud.dmi',M,"runescape_skull")
|
||||
skull.plane = LIGHTING_PLANE
|
||||
skull.layer = NARSIE_GLOW
|
||||
skull.pixel_y = 20 * PIXEL_MULTIPLIER
|
||||
skull.appearance_flags = RESET_COLOR|RESET_ALPHA|TILE_BOUND|RESET_TRANSFORM
|
||||
just_fought(first_victim)
|
||||
|
||||
/datum/runescape_skull_data/Destroy()
|
||||
for (var/client/C in clients)//just to be sure
|
||||
C.images -= skull
|
||||
skull = null
|
||||
..()
|
||||
|
||||
/datum/runescape_skull_data/proc/just_fought(var/victim_ref)
|
||||
last_fight = world.time
|
||||
if (victim_ref)
|
||||
victim_refs[victim_ref] = world.time
|
||||
process()
|
||||
|
||||
/datum/runescape_skull_data/proc/process()
|
||||
for (var/client/C in clients)
|
||||
C.images -= skull
|
||||
var/mob/holder = locate(holder_ref)
|
||||
if (!holder || holder.gcDestroyed)
|
||||
ticker.runescape_skulls -= holder_ref
|
||||
qdel(src)
|
||||
return
|
||||
if (world.time >= last_fight + skull_timer)
|
||||
ticker.runescape_skulls -= holder_ref
|
||||
else
|
||||
for (var/client/C in clients)
|
||||
C.images += skull
|
||||
|
||||
|
||||
/mob/proc/assaulted_by(var/mob/M,var/weak_assault=FALSE)
|
||||
//might be nice to move the LAssailant stuff here at some point
|
||||
|
||||
if (M == src)
|
||||
return
|
||||
|
||||
|
||||
if (!ticker)
|
||||
return
|
||||
if ("\ref[src]" in ticker.runescape_skulls)
|
||||
var/datum/runescape_skull_data/the_data = ticker.runescape_skulls["\ref[src]"]
|
||||
if ("\ref[M]" in the_data.victim_refs)
|
||||
if (the_data.victim_refs["\ref[M]"] + 5 MINUTES > world.time)//if we attacked M in the last 5 minutes, do not skull M
|
||||
return
|
||||
M.just_fought(src,weak_assault)
|
||||
|
||||
/mob/proc/just_fought(var/mob/M,var/weak_assault=FALSE)
|
||||
if (!runescape_skull_display || weak_assault)
|
||||
return
|
||||
if (!ticker)
|
||||
return
|
||||
|
||||
if ("\ref[src]" in ticker.runescape_skulls)
|
||||
var/datum/runescape_skull_data/the_data = ticker.runescape_skulls["\ref[src]"]
|
||||
the_data.just_fought("\ref[M]")
|
||||
else
|
||||
new /datum/runescape_skull_data(src,"\ref[M]")
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 10 KiB |
@@ -2488,6 +2488,7 @@
|
||||
#include "code\modules\research\xenoarchaeology\tools\tools_excdrill.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\tools_locater.dm"
|
||||
#include "code\modules\research\xenoarchaeology\tools\tools_pickaxe.dm"
|
||||
#include "code\modules\runescape\runescape_pvp.dm"
|
||||
#include "code\modules\scripting\Errors.dm"
|
||||
#include "code\modules\scripting\IDE.dm"
|
||||
#include "code\modules\scripting\Options.dm"
|
||||
|
||||
Reference in New Issue
Block a user