Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Tastyfish
2012-02-28 15:56:02 -05:00
16 changed files with 303 additions and 58 deletions

View File

@@ -258,11 +258,16 @@
if ((M.client && M.client.holder && (M.client.holder.level >= src.level)))
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
return
M << "\red You have been kicked from the server"
log_admin("[key_name(usr)] booted [key_name(M)].")
message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1)
//M.client = null
del(M.client)
switch(alert("Are you sure?", ,"Yes", "NO, WAIT.. DAMMIT! NOT THAT BUTTON!"))
if("Yes")
if(ismob(M))
M << "\red You have been kicked from the server"
log_admin("[key_name(usr)] booted [key_name(M)].")
message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1)
//M.client = null
del(M.client)
else
src << "Looks like someone already beat you."
if (href_list["removejobban"])
if ((src.rank in list("Game Admin", "Game Master" )))
@@ -1759,6 +1764,36 @@
C.files.RefreshResearch()
owner:rnd_check_designs()
#define AUTOBANTIME 10
if(href_list["warn"])
var/mob/M = locate(href_list["warn"])
if (ismob(M))
var/client/user
if(istype(usr, /client))
user = usr
else if(istype(usr, /mob))
user = usr.client
if(!user.holder)
src << "Only administrators may use this command."
return
if(M.client && M.client.holder && (M.client.holder.level >= user.holder.level))
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
return
if(!M.client.warned)
M << "\red <B>You have been warned by an administrator. This is the only warning you will recieve.</B>"
M.client.warned = 1
message_admins("\blue [user.ckey] warned [M.ckey].")
else
AddBan(M.ckey, M.computer_id, "Autobanning due to previous warn", user.ckey, 1, AUTOBANTIME)
M << "\red<BIG><B>You have been autobanned by [user.ckey]. This is what we in the biz like to call a \"second warning\".</B></BIG>"
M << "\red This is a temporary ban; it will automatically be removed in [AUTOBANTIME] minutes."
log_admin("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
ban_unban_log_save("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
message_admins("\blue [user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
feedback_inc("ban_warn",1)
del(M.client)
///////////////////////////////////////////////////////////////////////////////////////////////Panels

View File

@@ -11,6 +11,7 @@
for(var/mob/M in mobs)
if(M.ckey)
var/color = "#e6e6e6"
i++
if(i%2 == 0)
color = "#f2f2f2"
var/real = (M.real_name == M.original_name ? M.real_name : "[M.original_name] (as [M.real_name])")
@@ -19,26 +20,32 @@
dat += "<tr align='center' bgcolor='[color]'><td>[M.name] \[[real]\] <br>[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])</td>" // Adds current name
if(isobserver(M))
dat += "<td>Ghost</td>"
if(isalien(M))
else if(isalien(M))
dat += "<td>Alien</td>"
if(islarva(M))
else if(islarva(M))
dat += "<td>Alien larva</td>"
if(ishuman(M))
else if(istajaran(M))
dat += "<td>Tajaran</td>"
else if(ishuman(M))
dat += "<td>[M.job]</td>"
if(ismetroid(M))
else if(ismetroid(M))
dat += "<td>Metroid</td>"
if(ismonkey(M))
else if(ismonkey(M))
dat += "<td>Monkey</td>"
if(isAI(M))
else if(isAI(M))
dat += "<td>AI</td>"
if(ispAI(M))
else if(ispAI(M))
dat += "<td>pAI</td>"
if(isrobot(M))
else if(isrobot(M))
dat += "<td>Cyborg</td>"
if(isanimal(M))
else if(isanimal(M))
dat += "<td>Animal</td>"
if(iscorgi(M))
else if(iscorgi(M))
dat += "<td>Corgi</td>"
else if(istype(M,/mob/new_player))
dat += "<td>New Player</td>"
else
dat += "<td>ERROR</td>"
if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job.
var/mob/living/carbon/human/H = M
@@ -81,13 +88,14 @@
"}
dat += {"<td><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
<td><A href='?src=\ref[src];boot2=\ref[M]'>Boot</A> | <A href='?src=\ref[src];newban=\ref[M]'>Ban</A> | <A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A>
<br><font size="2.5">[muting]</font><br>
<font size="2"><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A> |
<td><A href='?src=\ref[usr];priv_msg=\ref[M]'><b>PM</b></A> |
<A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A> |
<A HREF='?src=\ref[src];adminplayervars=\ref[M]'>VV</A> |
<A HREF='?src=\ref[src];adminplayersubtlemessage=\ref[M]'>SM</A> |
<A HREF='?src=\ref[src];adminplayerobservejump=\ref[M]'>JMP</A> |
<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A></font></td>
<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A></font>
<br><font size="2">[muting]</font><br>
<font size="2"><A href='?src=\ref[src];warn=\ref[M]'>Warn</A> | <A href='?src=\ref[src];boot2=\ref[M]'>Boot</A> | <A href='?src=\ref[src];newban=\ref[M]'>Ban</A> | <A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A></td>
"}
switch(is_special_character(M))
@@ -100,7 +108,7 @@
dat += "</table></body></html>"
usr << browse(dat, "window=players;size=905x480")
usr << browse(dat, "window=players;size=905x600")
//The old one
/obj/admins/proc/player_panel_old()

View File

@@ -557,8 +557,8 @@
/obj/item/weapon/gun/rapidsyringe
name = "rapid syringe gun"
icon = 'gun.dmi'
icon_state = "syringegun"
item_state = "syringegun"
icon_state = "rapidsyringegun"
item_state = "rapidsyringegun"
w_class = 3.0
throw_speed = 4
throw_range = 10

View File

@@ -19,3 +19,35 @@
origin_tech = "combat=5;materials=4;powerstorage=3"
charge_cost = 100
projectile_type = "/obj/item/projectile/energy/declone"
obj/item/weapon/gun/energy/staff
name = "staff of change"
desc = "an artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
icon = 'gun.dmi'
icon_state = "staff"
item_state = "staff"
fire_sound = 'emitter.ogg'
charge_cost = 200
projectile_type = "/obj/item/projectile/change"
origin_tech = null
var/charge_tick = 0
New()
..()
processing_objects.Add(src)
Del()
processing_objects.Remove(src)
..()
process()
charge_tick++
if(charge_tick < 4) return 0
charge_tick = 0
if(!power_supply) return 0
power_supply.give(200)
update_icon()
return 1

View File

@@ -0,0 +1,152 @@
/obj/item/projectile/change
name = "bolt of change"
icon_state = "ice_1"
damage = 0
damage_type = BURN
nodamage = 1
flag = "energy"
on_hit(var/atom/change)
wabbajack(change)
/*Bump(atom/change)
if(istype(change, /mob/living))
wabbajack(change)
else
del(src)*/
/obj/item/projectile/change/proc/wabbajack (mob/M as mob in world)
if(istype(M, /mob/living))
for(var/obj/item/W in M)
M.drop_from_slot(W)
var/randomize = pick("monkey","robot","metroid","alien")
switch(randomize)
if("monkey")
if (M.monkeyizing)
return
M.update_clothing()
M.monkeyizing = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( M.loc )
O.name = "monkey"
if (M.client)
M.client.mob = O
if(M.mind)
M.mind.transfer_to(O)
O.a_intent = "hurt"
O << "<B>You are now a monkey.</B>"
del(M)
return O
if("robot")
if (M.monkeyizing)
return
M.update_clothing()
M.monkeyizing = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
if(M.client)
M.client.screen -= M.hud_used.contents
M.client.screen -= M.hud_used.adding
M.client.screen -= M.hud_used.mon_blo
M.client.screen -= list( M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach )
M.client.screen -= list( M.zone_sel, M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach )
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( M.loc )
O.cell = new(O)
O.cell.maxcharge = 7500
O.cell.charge = 7500
O.gender = M.gender
O.invisibility = 0
O.name = "Cyborg"
O.real_name = "Cyborg"
O.lastKnownIP = M.client.address ? M.client.address : null
if (M.mind)
M.mind.transfer_to(O)
if (M.mind.assigned_role == "Cyborg")
M.mind.original = O
else if (M.mind.special_role) O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite")
else
M.mind = new /datum/mind( )
M.mind.key = M.key
M.mind.current = O
M.mind.original = O
M.mind.transfer_to(O)
if(!(O.mind in ticker.minds))
ticker.minds += O.mind//Adds them to regular mind list.
O.loc = loc
O << "<B>You are playing a Robot. A Robot can interact with most electronic objects in its view point.</B>"
O << "<B>You must follow the laws that the AI has. You are the AI's assistant to the station basically.</B>"
O << "To use something, simply double-click it."
O << {"Use say ":s to speak to fellow cyborgs and the AI through binary."}
O.job = "Cyborg"
O.mmi = new /obj/item/device/mmi(O)
O.mmi.transfer_identity(M)//Does not transfer key/client.
del(M)
return O
if("metroid")
if (M.monkeyizing)
return
M.update_clothing()
M.monkeyizing = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
if(prob(50))
var/mob/living/carbon/metroid/adult/new_metroid = new /mob/living/carbon/metroid/adult (M.loc)
if (M.client)
M.client.mob = new_metroid
if(M.mind)
M.mind.transfer_to(new_metroid)
new_metroid.a_intent = "hurt"
new_metroid << "<B>You are now an adult Metroid.</B>"
del(M)
return new_metroid
else
var/mob/living/carbon/metroid/new_metroid = new /mob/living/carbon/metroid (M.loc)
if (M.client)
M.client.mob = new_metroid
if(M.mind)
M.mind.transfer_to(new_metroid)
new_metroid.a_intent = "hurt"
new_metroid << "<B>You are now a baby Metroid.</B>"
del(M)
return new_metroid
if("alien")
if (M.monkeyizing)
return
M.update_clothing()
M.monkeyizing = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
var/alien_caste = pick("Hunter","Sentinel","Drone")
var/mob/living/carbon/alien/humanoid/new_xeno
switch(alien_caste)
if("Hunter")
new_xeno = new /mob/living/carbon/alien/humanoid/hunter (M.loc)
if("Sentinel")
new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (M.loc)
if("Drone")
new_xeno = new /mob/living/carbon/alien/humanoid/drone (M.loc)
if (M.client)
M.client.mob = new_xeno
if(M.mind)
M.mind.transfer_to(new_xeno)
new_xeno.a_intent = "hurt"
new_xeno << "<B>You are now an alien.</B>"
del(M)
return new_xeno
return

View File

@@ -23,8 +23,6 @@
explosion(target, -1, 0, 2)
return 1
/obj/item/projectile/temp
name = "freeze beam"
icon_state = "ice_2"

View File

@@ -439,8 +439,10 @@
del(H)
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if (istype(mover,/obj/item) && !istype(mover,/obj/item/weapon/dummy))
if (istype(mover,/obj/item))
var/obj/item/I = mover
if(!mover.throwing)
return ..()
if(prob(75))
I.loc = src
for(var/mob/M in viewers(src))
@@ -450,7 +452,7 @@
M.show_message("\the [I] bounces off of \the [src]'s rim!", 3)
return 0
else
return ..(mover, target, height, air_group)
return ..()
//The toilet does not need to pressurized but can only handle small items.
//You can also choke people by dunking them into the toilet.