Files
Aurora.3/code/modules/spell_system/spells/spells.dm
Geeves 52923bc322 More Ghostspawners (#8909)
Posibrains are now in the ghost spawner menu. Activating them is now a one-and-done deal, as they remain open in the ghost spawner until someone disables it or someone spawns in.
    Syndicate Cyborgs have been added to the ghost spawner menu, and will remain in a boot-up state until someone spawns into it.
    Syndicate Cyborg eye overlays have been fixed.
    Wizard Familiars have been added to the ghost spawner menu, same as above.
    Mining Drones have been added to the ghost spawner menu, one swipe is all you need, until someone joins in as them.
2020-05-25 19:22:53 +03:00

91 lines
2.8 KiB
Plaintext

/datum/mind
var/list/learned_spells
/mob/Life()
..()
if(LAZYLEN(spell_masters))
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
spell_master.update_spells(0, src)
/mob/LateLogin()
..()
if(spell_masters)
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
spell_master.toggle_open(1)
client.screen -= spell_master
/mob/Stat()
. = ..()
if(. && LAZYLEN(spell_list))
for(var/spell/S in spell_list)
if((!S.connected_button) || !statpanel(S.panel))
continue //Not showing the noclothes spell
switch(S.charge_type)
if(Sp_RECHARGE)
statpanel(S.panel,"[S.charge_counter/10.0]/[S.charge_max/10]",S.connected_button)
if(Sp_CHARGES)
statpanel(S.panel,"[S.charge_counter]/[S.charge_max]",S.connected_button)
if(Sp_HOLDVAR)
statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S.connected_button)
/hook/clone/proc/restore_spells(var/mob/H)
if(H.mind && H.mind.learned_spells)
for(var/spell/spell_to_add in H.mind.learned_spells)
H.add_spell(spell_to_add)
/mob/proc/add_spell(var/spell/spell_to_add, var/spell_base = "wiz_spell_ready", var/master_type = /obj/screen/movable/spell_master)
if(isobserver(usr)) // we spawned in via ghost spawner, so set our thing to this so we don't screw up
usr = src
if(!spell_masters)
spell_masters = list()
if(spell_masters.len)
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
if(spell_master.type == master_type)
LAZYADD(spell_list, spell_to_add)
spell_master.add_spell(spell_to_add)
return 1
var/obj/screen/movable/spell_master/new_spell_master = new master_type //we're here because either we didn't find our type, or we have no spell masters to attach to
if(client)
src.client.screen += new_spell_master
new_spell_master.spell_holder = src
new_spell_master.add_spell(spell_to_add)
if(spell_base)
new_spell_master.icon_state = spell_base
spell_masters.Add(new_spell_master)
LAZYADD(spell_list, spell_to_add)
if(mind)
if(!mind.learned_spells)
mind.learned_spells = list()
mind.learned_spells += spell_to_add
return 1
/mob/proc/remove_spell(var/spell/spell_to_remove)
if(!spell_to_remove || !istype(spell_to_remove))
return
if(!(spell_to_remove in spell_list))
return
if(!spell_masters || !spell_masters.len)
return
if(mind && mind.learned_spells)
mind.learned_spells.Remove(spell_to_remove)
LAZYREMOVE(spell_list, spell_to_remove)
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
spell_master.remove_spell(spell_to_remove)
return 1
/mob/proc/silence_spells(var/amount = 0)
if(!(amount >= 0))
return
if(!spell_masters || !spell_masters.len)
return
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
spell_master.silence_spells(amount)