mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-23 08:31:57 +00:00
Added an admin verb that ends the round smoothly, displaying the end round card.
Wizard learned spells are now properly displayed at round.
Antags added to gamemodes they don't belong in, now properly update the gamemode's antag template, allowing their things to be displayed at round end.
Fixed a typo in the apprentice pebble spawn-in calling it an 'artificer pebble' in deadchat.
90 lines
2.8 KiB
Plaintext
90 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)
|
|
if(mind)
|
|
LAZYDISTINCTADD(mind.learned_spells, spell_to_add)
|
|
return TRUE
|
|
|
|
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)
|
|
LAZYDISTINCTADD(mind.learned_spells, spell_to_add)
|
|
return TRUE
|
|
|
|
/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)
|