TG: - Added a rudimentary transformation section to the options panel (show player

panel verb). This allows rudimentary mob type changes to any mob. These are
however generic and non-mob-specific, as they only copy over some of the most
needed variables, such as the three name variables, dna and mind. They do not,
for instance, create a MMI for cyborgs. A note of this is also added to the
player panel.
- Once you click one of the links a popup will appear asking you whether you'd
like to delete the old mob of the player (yes or no) or cancel this
transformation.

Screenshot:
http://www.kamletos.si/options%20panel%20rudamentary%20transformation.PNG
Revision: r3534
Author: 	 baloh.matevz
This commit is contained in:
Erthilo
2012-05-06 21:01:19 +01:00
parent 097b08fa25
commit 28f7a58905
5 changed files with 154 additions and 1 deletions

View File

@@ -894,6 +894,7 @@
#include "code\modules\mob\mob_grab.dm" #include "code\modules\mob\mob_grab.dm"
#include "code\modules\mob\mob_helpers.dm" #include "code\modules\mob\mob_helpers.dm"
#include "code\modules\mob\mob_movement.dm" #include "code\modules\mob\mob_movement.dm"
#include "code\modules\mob\mob_transformation_simple.dm"
#include "code\modules\mob\say.dm" #include "code\modules\mob\say.dm"
#include "code\modules\mob\screen.dm" #include "code\modules\mob\screen.dm"
#include "code\modules\mob\transform_procs.dm" #include "code\modules\mob\transform_procs.dm"

View File

@@ -144,12 +144,15 @@ proc/process_ghost_teleport_locs()
music = "music/escape.ogg" music = "music/escape.ogg"
/area/shuttle/escape/station /area/shuttle/escape/station
name = "Emergency Shuttle Station"
icon_state = "shuttle2" icon_state = "shuttle2"
/area/shuttle/escape/centcom /area/shuttle/escape/centcom
name = "Emergency Shuttle Centcom"
icon_state = "shuttle" icon_state = "shuttle"
/area/shuttle/escape/transit // the area to pass through for 3 minute transit /area/shuttle/escape/transit // the area to pass through for 3 minute transit
name = "Emergency Shuttle Transit"
icon_state = "shuttle" icon_state = "shuttle"
/area/shuttle/escape_pod1 /area/shuttle/escape_pod1

View File

@@ -65,6 +65,76 @@ var/global/BSACooldown = 0
alert("You cannot perform this action. You must be of a higher administrative rank!") alert("You cannot perform this action. You must be of a higher administrative rank!")
return return
if(href_list["simplemake"])
if(!href_list["mob"])
usr << "Invalid mob"
return
var/mob/M = locate(href_list["mob"])
if(!M || !ismob(M))
usr << "Cannot find mob"
return
var/delmob = 0
var/option = alert("Delete old mob?","Message","Yes","No","Cancel")
if(option == "Cancel")
return
if(option == "Yes")
delmob = 1
log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]")
message_admins("\blue [key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]", 1)
switch(href_list["simplemake"])
if("observer")
M.change_mob_type( /mob/dead/observer , null, null, delmob)
if("drone")
M.change_mob_type( /mob/living/carbon/alien/humanoid/drone , null, null, delmob)
if("hunter")
M.change_mob_type( /mob/living/carbon/alien/humanoid/hunter , null, null, delmob)
if("queen")
M.change_mob_type( /mob/living/carbon/alien/humanoid/queen , null, null, delmob)
if("sentinel")
M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob)
if("larva")
M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob)
if("human")
M.change_mob_type( /mob/living/carbon/human , null, null, delmob)
if("metroid")
M.change_mob_type( /mob/living/carbon/metroid , null, null, delmob)
if("adultmetroid")
M.change_mob_type( /mob/living/carbon/metroid/adult , null, null, delmob)
if("monkey")
M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob)
if("robot")
M.change_mob_type( /mob/living/silicon/robot , null, null, delmob)
if("cat")
M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob)
if("runtime")
M.change_mob_type( /mob/living/simple_animal/cat/Runtime , null, null, delmob)
if("corgi")
M.change_mob_type( /mob/living/simple_animal/corgi , null, null, delmob)
if("ian")
M.change_mob_type( /mob/living/simple_animal/corgi/Ian , null, null, delmob)
if("crab")
M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob)
if("coffee")
M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob)
if("parrot")
M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob)
if("drprofessor")
M.change_mob_type( /mob/living/simple_animal/parrot/DrProfessor , null, null, delmob)
if("constructarmoured")
M.change_mob_type( /mob/living/simple_animal/constructarmoured , null, null, delmob)
if("constructbuilder")
M.change_mob_type( /mob/living/simple_animal/constructbuilder , null, null, delmob)
if("constructwraith")
M.change_mob_type( /mob/living/simple_animal/constructwraith , null, null, delmob)
if("shade")
M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob)
if(href_list["view_player_info"]) if(href_list["view_player_info"])
show_player_info(href_list["view_player_info"]) show_player_info(href_list["view_player_info"])
@@ -885,6 +955,11 @@ var/global/BSACooldown = 0
if (href_list["sendtoprison"]) if (href_list["sendtoprison"])
if ((src.rank in list( "Moderator", "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) if ((src.rank in list( "Moderator", "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/confirm = alert(usr, "Send to admin prison for the round?", "Message", "Yes", "No")
if(confirm != "Yes")
return
var/mob/M = locate(href_list["sendtoprison"]) var/mob/M = locate(href_list["sendtoprison"])
if (ismob(M)) if (ismob(M))
if(istype(M, /mob/living/silicon/ai)) if(istype(M, /mob/living/silicon/ai))
@@ -954,6 +1029,11 @@ var/global/BSACooldown = 0
if (href_list["tdome1"]) if (href_list["tdome1"])
if ((src.rank in list( "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) if ((src.rank in list( "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/confirm = alert(usr, "Confirm?", "Message", "Yes", "No")
if(confirm != "Yes")
return
var/mob/M = locate(href_list["tdome1"]) var/mob/M = locate(href_list["tdome1"])
if (ismob(M)) if (ismob(M))
if(istype(M, /mob/living/silicon/ai)) if(istype(M, /mob/living/silicon/ai))
@@ -980,6 +1060,11 @@ var/global/BSACooldown = 0
if (href_list["tdome2"]) if (href_list["tdome2"])
if ((src.rank in list( "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) if ((src.rank in list( "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/confirm = alert(usr, "Confirm?", "Message", "Yes", "No")
if(confirm != "Yes")
return
var/mob/M = locate(href_list["tdome2"]) var/mob/M = locate(href_list["tdome2"])
if (ismob(M)) if (ismob(M))
if(istype(M, /mob/living/silicon/ai)) if(istype(M, /mob/living/silicon/ai))
@@ -1006,6 +1091,11 @@ var/global/BSACooldown = 0
if (href_list["tdomeadmin"]) if (href_list["tdomeadmin"])
if ((src.rank in list( "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) if ((src.rank in list( "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/confirm = alert(usr, "Confirm?", "Message", "Yes", "No")
if(confirm != "Yes")
return
var/mob/M = locate(href_list["tdomeadmin"]) var/mob/M = locate(href_list["tdomeadmin"])
if (ismob(M)) if (ismob(M))
if(istype(M, /mob/living/silicon/ai)) if(istype(M, /mob/living/silicon/ai))
@@ -1340,6 +1430,11 @@ var/global/BSACooldown = 0
if (href_list["getmob"]) if (href_list["getmob"])
if(rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master")) if(rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master"))
var/confirm = alert(usr, "Confirm?", "Message", "Yes", "No")
if(confirm != "Yes")
return
var/mob/M = locate(href_list["getmob"]) var/mob/M = locate(href_list["getmob"])
usr.client.Getmob(M) usr.client.Getmob(M)
else else

View File

@@ -15,7 +15,8 @@
if(facehugger.stat == CONSCIOUS) if(facehugger.stat == CONSCIOUS)
var/image/activeIndicator = image('alien.dmi', loc = facehugger, icon_state = "facehugger_active") var/image/activeIndicator = image('alien.dmi', loc = facehugger, icon_state = "facehugger_active")
activeIndicator.override = 1 activeIndicator.override = 1
client.images += activeIndicator if(client)
client.images += activeIndicator
/mob/living/carbon/alien/IsAdvancedToolUser() /mob/living/carbon/alien/IsAdvancedToolUser()
return has_fine_manipulation return has_fine_manipulation

View File

@@ -0,0 +1,53 @@
//This proc is the most basic of the procs. All it does is make a new mob on the same tile and transfer over a few variables.
//Returns the new mob
//Note that this proc does NOT do MMI related stuff!
/mob/proc/change_mob_type(var/new_type = null, var/turf/location = null, var/new_name = null as text, var/delete_old_mob = 0 as num)
if(istype(src,/mob/new_player))
usr << "\red cannot convert players who have not entered yet."
return
if(!new_type)
new_type = input("Mob type path:", "Mob type") as text|null
if(istext(new_type))
new_type = text2path(new_type)
if( !ispath(new_type) )
usr << "Invalid type path (new_type = [new_type]) in change_mob_type(). Contact a coder."
return
if( new_type == /mob/new_player )
usr << "\red cannot convert into a new_player mob type."
return
var/mob/M = null
if( !isnull(location) && isturf(location))
M = new new_type( location )
else
M = new new_type( src.loc )
if(!M || !ismob(M))
usr << "Type path is not a mob (new_type = [new_type]) in change_mob_type(). Contact a coder."
return
if( istext(new_name) )
M.name = new_name
M.original_name = new_name
M.real_name = new_name
else
M.name = src.name
M.original_name = src.original_name
M.real_name = src.real_name
M.dna = src.dna
M.ckey = src.ckey
if(mind)
mind.transfer_to(M)
if(delete_old_mob)
spawn(1)
del(src)
return M