ID:2063846
 
This is the HUD system that I used to create Elora 2

I'm releasing it as an example/snippet.

ofc it can be improved in a number of ways.

/*
KHUD
client.add_hud() | Allows you to create a ID associated with a /khud object.
client.add_container() | Allows you to create a container for /khud objects IDs.
client.hide_hud() | Hides the selected object/container from your screen.
client.show_hud() | Allows you to see the selected object/container.
client.move_hud() | Allows you to move a container and the items within the container.

TEXT
client.add_text() | Allows you to add maptext to the select khud with positioning parameters.
client.change_text() | Allows you to modify the selected khud's maptext after you've added it.
client.clean_text() | Removes the maptext from the selected khud.
client.clean_container_text() | Removes the maptext from the selected khuds.

MISC
client.layer () | Allows you to modify the selected khud's layer.
client.relocate() | Allows you to modify the screen_loc for the selected khud.
*/


// This is the engine, gl o7

proc
screen_loc_math(loc,dir,size)
var/list/A = splittext(loc,","),list/B = splittext(A[1],":"),list/C = splittext(A[2],":")
var/list/L = list(text2num(B[1]),B.len > 1 ? text2num(B[2]) : 0,text2num(C[1]),C.len > 1 ? text2num(C[2]) : 0)
switch(dir)
if(NORTH)
return "[L[1]]:[L[2]],[L[3]]:[L[4]+size]"
if(NORTHEAST)
return "[L[1]]:[L[2]+size],[L[3]]:[L[4]+size]"
if(NORTHWEST)
return "[L[1]]:[L[2]-size],[L[3]]:[L[4]+size]"
if(SOUTH)
return "[L[1]]:[L[2]],[L[3]]:[L[4]-size]"
if(SOUTHEAST)
return "[L[1]]:[L[2]+size],[L[3]]:[L[4]-size]"
if(SOUTHWEST)
return "[L[1]]:[L[2]-size],[L[3]]:[L[4]-size]"
if(EAST)
return "[L[1]]:[L[2]+size],[L[3]]:[L[4]]"
if(WEST)
return "[L[1]]:[L[2]-size],[L[3]]:[L[4]]"
return "[L[1]]:[L[2]],[L[3]]:[L[4]]"

client
var
list
containers[] = new
list
hud[] = new
moving_element = FALSE
khud/slot/interact = null
proc
layer(ID,INT)
var/khud/KHUD = src.hud[ID]
if(KHUD)
KHUD.layer = INT ? INT : KHUD.layer
change_text(ID,string,color="#FFFFFF")
var/khud/KHUD = src.hud[ID]
if(KHUD)
KHUD.overlays = list()
KHUD.overlays += build_maptext(string,"#666666",KHUD.layer + 1,KHUD.maptext_x-1,KHUD.maptext_y)
KHUD.overlays += build_maptext(string,"#666666",KHUD.layer + 1,KHUD.maptext_x+1,KHUD.maptext_y)
KHUD.overlays += build_maptext(string,"#666666",KHUD.layer + 1,KHUD.maptext_x,KHUD.maptext_y+1)
KHUD.overlays += build_maptext(string,"#666666",KHUD.layer + 1,KHUD.maptext_x,KHUD.maptext_y-1)
KHUD.overlays += build_maptext(string,KHUD.color,KHUD.layer + 2,KHUD.maptext_x,KHUD.maptext_y)
relocate(ID,SCREEN_LOC,DIR,VALUE)
var/client/c = usr.client
if(c.hud.Find(ID))
var/khud/KHUD = src.hud[ID]
if(SCREEN_LOC)
if(DIR!=null)
KHUD.screen_loc = "[screen_loc_math(SCREEN_LOC,DIR,VALUE)]"
else
KHUD.screen_loc = "[SCREEN_LOC]"
screen |= KHUD
return TRUE
add_text(ID, STRING = null, px = 0, py = 0)
var/khud/KHUD = src.hud[ID]
if(KHUD)
KHUD.overlays = list()
KHUD.overlays += build_maptext(STRING,"#000000",KHUD.layer + 1,px,py+1)
KHUD.overlays += build_maptext(STRING,"#000000",KHUD.layer + 1,px,py-1)
KHUD.overlays += build_maptext(STRING,"#000000",KHUD.layer + 1,px+1,py)
KHUD.overlays += build_maptext(STRING,"#000000",KHUD.layer + 1,px-1,py)
KHUD.overlays += build_maptext(STRING,KHUD.color,KHUD.layer + 2,px,py)

clean_text(ID)
var/khud/KHUD = src.hud[ID]
KHUD.overlays = list()
clean_container_text(ID)
var/khud/KHUD = src.containers[ID]
for(var/khud/HUD in KHUD.container)
HUD.overlays = list()
move_hud( ID , DIR = null , SIZE = 0)
if(ID && DIR && SIZE)
var/khud/KHUD = src.hud[ID]
if(KHUD.container.len > 0)
for(var/khud/HUD in KHUD.container)
HUD.screen_loc = "[screen_loc_math(KHUD.screen_loc,DIR,SIZE)]"
else
KHUD.screen_loc = "[screen_loc_math(KHUD.screen_loc,DIR,SIZE)]"
add_hud( ID , khud/KHUD , LOC = null , VISIBLE = FALSE ,LAYER )
if(!(src.hud.Find(ID)))
KHUD.ID = ID
src.hud[ID] = KHUD
if(LAYER)
KHUD.layer = LAYER
if(VISIBLE)
src.screen |= KHUD
if(LOC)
KHUD.screen_loc = "[LOC]"

add_container( ID )
if(!(src.containers.Find(ID)))
var/khud/KHUD = new
KHUD.ID = ID
src.containers[ID] = KHUD
for(var/ARG in args.Copy(2))
if(src.hud.Find(ARG))
var/khud/HUD = src.hud[ARG]
HUD.parent = KHUD
KHUD.container |= HUD
else
var/khud/KHUD = src.containers[ID]
var/khud/HUD
for(var/ARG in args.Copy(2))
if(src.hud.Find(ARG))
HUD = src.hud[ARG]
HUD.parent = KHUD
KHUD.container |= HUD


remove_container( ID )
if(src.containers.Find(ID))
var/khud/KHUD = src.containers[ID]
for(var/khud/HUD in KHUD.container)
HUD.parent = null
src.containers -= ID

hide_hud()
var/khud/KHUD
for(var/ARG in args)
if(src.containers.Find(ARG))
KHUD = src.containers[ARG]
if(KHUD)
for(var/khud/HUD in KHUD.container)
src.screen -= HUD
continue
if(src.hud.Find(ARG))
KHUD = src.hud[ARG]
if(KHUD)
src.screen -= KHUD
show_hud()
var/khud/KHUD
for(var/ARG in args)
if(src.containers.Find(ARG))
KHUD = src.containers[ARG]
if(KHUD)
for(var/khud/HUD in KHUD.container)
src.screen |= HUD
continue
if(src.hud.Find(ARG))
KHUD = src.hud[ARG]
if(KHUD)
src.screen |= KHUD
fade_hud()
var/khud/KHUD
. = args.Copy(2)
for(var/ARG in .)
if(src.containers.Find(ARG))
KHUD = src.containers[ARG]
if(KHUD)
for(var/khud/HUD in KHUD.container)
HUD.alpha = 255
animate(HUD,alpha=0,time=args[1])
spawn(args[1])
src.screen -= HUD
continue
if(src.hud.Find(ARG))
KHUD = src.hud[ARG]
if(KHUD)
KHUD.alpha = 255
animate(KHUD,alpha=0,time=args[1])
spawn(args[1])
if(KHUD.alpha==0)
src.screen -= KHUD
fade_in_hud()
var/khud/KHUD
. = args.Copy(2)
for(var/ARG in .)
if(src.containers.Find(ARG))
KHUD = src.containers[ARG]
if(KHUD)
for(var/khud/HUD in KHUD.container)
HUD.alpha = 0
animate(HUD,alpha=255,time=args[1])
src.screen |= HUD
continue
if(src.hud.Find(ARG))
KHUD = src.hud[ARG]
if(KHUD)
KHUD.alpha = 0
animate(KHUD,alpha=255,time=args[1])
src.screen |= KHUD

proc
build_maptext(string="",COLOR=null,LAYER=0,PX=0,PY=0)
var/obj/O = new/obj{maptext_width=1024;maptext_height=16}
O.maptext = "<font face=Arial>[string]"
O.color = COLOR
O.layer = LAYER
O.maptext_x = PX
O.maptext_y = PY
. = O

khud
parent_type = /obj
var
ID = ""
khud/parent = null
list
container[] = new
text
layer = 105
And this loads the entire interface for the player for (Elora 2) when called.

Load_Menu()
/*Background & Top Bar*/
client.add_hud("#background",new/khud/background,"1,1 to [maxx],[maxy]",TRUE)
client.add_hud("#topbarl",new/khud/topbar("topbarleft"),"1,[maxy]",TRUE)
client.add_hud("#topbarm",new/khud/topbar("topbarmiddle"),"2,[maxy] to [maxx-1],[maxy]",TRUE)
client.add_hud("#topbarr",new/khud/topbar("topbarright"),"[maxx],[maxy]",TRUE)

/*Build Enemy Area*/
client.add_hud("#enemyname",new/khud/text,"5:18,[maxy-5]:8",FALSE)
client.add_hud("#enemyhp",new/khud/bar("#7CFC00"),"5:18,[maxy-6]:28",FALSE)
client.add_hud("info",new/khud/text,"5:24,2:28",TRUE)
client.layer("info",300)
client.add_container(
"enemy",
"#enemyname",
"#enemytname",
"#enemyhp"
)

client.add_hud("e_hit",new/khud/symbol("hitpoints"),"5:16,4:14",FALSE)
client.add_hud("et_hit",new/khud/text,"5:20,4:2",FALSE)
client.add_text("et_hit","99");client.layer("et_hit",200)

client.add_hud("e_atk",new/khud/symbol("attack"),"6:8,4:14",FALSE)
client.add_hud("et_atk",new/khud/text,"6:12,4:2",FALSE)
client.add_text("et_atk","99");client.layer("et_atk",200)

client.add_hud("e_str",new/khud/symbol("strength"),"7,4:14",FALSE)
client.add_hud("et_str",new/khud/text,"7:4,4:2",FALSE)
client.add_text("et_str","99");client.layer("et_str",200)

client.add_hud("e_def",new/khud/symbol("defence"),"7:24,4:14",FALSE)
client.add_hud("et_def",new/khud/text,"7:28,4:2",FALSE)
client.add_text("et_def","99");client.layer("et_def",200)

client.add_hud("e_rng",new/khud/symbol("range"),"8:16,4:14",FALSE)
client.add_hud("et_rng",new/khud/text,"8:20,4:2",FALSE)
client.add_text("et_rng","99");client.layer("et_rng",200)

//client.add_hud("e_mgc",new/khud/symbol("magic"),"9:8,4:14",FALSE)
//client.add_hud("et_mgc",new/khud/text,"9:12,4:2",FALSE)
//client.add_text("et_mgc","99");client.layer("et_mgc",200)

for(var/int = 1 to 6)
client.add_hud("![int]",new/khud/slot/enemy_reward(int),"9:[((maxx-32)+(int*32))+16],[maxy-7]:56")
client.add_container(
"@enemy_slots",
"!1",
"!2",
"!3",
"!4",
"!5",
"!6"
)
client.add_container(
"@enemy_symbols",
"e_hit",
"e_atk",
"e_str",
"e_def",
"e_rng",
"e_mgc"
)
client.add_container(
"@enemy_tsymbols",
"et_hit",
"et_atk",
"et_str",
"et_def",
"et_rng",
"et_mgc"
)

client.add_hud("#win",new/khud/button/EndBattle("<font color=#ffffff>Finished",3,1),"5:18,[maxy-7]:17", FALSE)

/*MONSTER LIST*/
client.add_hud("m_1",new/khud/button/PickMonster(/mob/enemy/Rat,4,1),"4:29,[maxy]:[-23]", FALSE)
client.add_hud("m_2",new/khud/button/PickMonster(/mob/enemy/Big_Rat,4,1),"4:29,[maxy]:[-39]", FALSE)
client.add_hud("m_3",new/khud/button/PickMonster(/mob/enemy/Goblin,4,1),"4:29,[maxy]:[-55]", FALSE)
client.add_hud("m_4",new/khud/button/PickMonster(/mob/enemy/Small_Spider,4,1),"4:29,[maxy]:[-71]", FALSE)
client.add_hud("m_5",new/khud/button/PickMonster(/mob/enemy/Sheep,4,1),"4:29,[maxy]:[-87]", FALSE)
client.add_hud("m_6",new/khud/button/PickMonster(/mob/enemy/Imp,4,1),"4:29,[maxy]:[-103]", FALSE)
client.add_container(
"monster_list",
"m_1",
"m_2",
"m_3",
"m_4",
"m_5",
"m_6",
)
/*Build Buttons*/
var BY = 9
client.add_hud("#open",new/khud/button/Open("<font color=#ffffff>Inventory",7,1),"1:18,[maxy]:[BY]", TRUE)
client.add_hud("#close",new/khud/button/Close("<font color=#ffffff>Inventory",7,1),"1:18,[maxy]:[BY]", FALSE)

client.add_hud("#option",new/khud/button/OptionMenu("<font color=#ffffff>Menu",4,1),"3:20,[maxy]:[BY]", TRUE)
client.add_hud("button_help",new/khud/button/Help("<font color=#ffffff>Help",6,1),"3:20,[maxy]:[BY-16]", FALSE)
client.add_hud("button_fight",new/khud/button/Fight("<font color=#ffffff>Fight",5,1),"3:20,[maxy]:[BY-32]", FALSE)
//
client.add_hud("button_style",new/khud/button/Style("<font color=#ffffff>Set Melee EXP",3,1),"3:20,[maxy]:[BY-48]", FALSE)
client.add_hud("button_atk",new/khud/button/Style/Atk("<font color=#ffffff>Atk",6,1),"3:20,[maxy]:[BY-64]", FALSE)
client.add_hud("button_str",new/khud/button/Style/Str("<font color=#ffffff>Str",8,1),"4:20,[maxy]:[BY-64]", FALSE)
client.add_hud("button_def",new/khud/button/Style/Def("<font color=#ffffff>Def",5,1),"5:20,[maxy]:[BY-64]", FALSE)
client.add_hud("button_bal",new/khud/button/Style/Bal("<font color=#ffffff>Bal",5,1),"4:20,[maxy]:[BY-80]", FALSE)


client.add_hud("#bodyo",new/khud/button/EquipmentOpen("<font color=#ffffff>Equipment",5,1),"6:8,[maxy]:[BY]", TRUE)
client.add_hud("#bodyc",new/khud/button/EquipmentClose("<font color=#ffffff>Equipment",5,1),"6:8,[maxy]:[BY]", FALSE)

/*
client.add_hud("#magico",new/khud/button/MagicOpen("<font color=#ffffff>Magic",7,1),"8:18,[maxy]:[BY]", TRUE)
client.add_hud("#magicc",new/khud/button/MagicClose("<font color=#ffffff>Magic",7,1),"8:18,[maxy]:[BY]", FALSE)
client.add_hud("#s1",new/khud/button/Magic/Air_Bolt("",5,1),"11:10,[maxy]:[BY-42]", FALSE)
client.add_hud("#s2",new/khud/button/Magic/Air_Surge("",5,1),"12:12,[maxy]:[BY-42]", FALSE)
client.add_hud("#s3",new/khud/button/Magic/Air_Burst("",5,1),"13:14,[maxy]:[BY-42]", FALSE)
client.add_hud("#s4",new/khud/button/Magic/Air_Barrage("",5,1),"14:16,[maxy]:[BY-42]", FALSE)
client.add_hud("#s5",new/khud/button/Magic/Air_Storm("",5,1),"15:18,[maxy]:[BY-42]", FALSE)
client.add_hud("#s6",new/khud/button/Magic/Water_Bolt("",5,1),"11:10,[maxy-1]:[BY-42]", FALSE)
client.add_hud("#s7",new/khud/button/Magic/Water_Surge("",5,1),"12:12,[maxy-1]:[BY-42]", FALSE)
client.add_hud("#s8",new/khud/button/Magic/Water_Burst("",5,1),"13:14,[maxy-1]:[BY-42]", FALSE)
client.add_hud("#s9",new/khud/button/Magic/Water_Barrage("",5,1),"14:16,[maxy-1]:[BY-42]", FALSE)
client.add_hud("#s10",new/khud/button/Magic/Water_Storm("",5,1),"15:18,[maxy-1]:[BY-42]", FALSE)
client.add_hud("#s11",new/khud/button/Magic/Earth_Bolt("",5,1),"11:10,[maxy-2]:[BY-42]", FALSE)
client.add_hud("#s12",new/khud/button/Magic/Earth_Surge("",5,1),"12:12,[maxy-2]:[BY-42]", FALSE)
client.add_hud("#s13",new/khud/button/Magic/Earth_Burst("",5,1),"13:14,[maxy-2]:[BY-42]", FALSE)
client.add_hud("#s14",new/khud/button/Magic/Earth_Barrage("",5,1),"14:16,[maxy-2]:[BY-42]", FALSE)
client.add_hud("#s15",new/khud/button/Magic/Earth_Storm("",5,1),"15:18,[maxy-2]:[BY-42]", FALSE)
client.add_hud("#s16",new/khud/button/Magic/Fire_Bolt("",5,1),"11:10,[maxy-3]:[BY-42]", FALSE)
client.add_hud("#s17",new/khud/button/Magic/Fire_Surge("",5,1),"12:12,[maxy-3]:[BY-42]", FALSE)
client.add_hud("#s18",new/khud/button/Magic/Fire_Burst("",5,1),"13:14,[maxy-3]:[BY-42]", FALSE)
client.add_hud("#s19",new/khud/button/Magic/Fire_Barrage("",5,1),"14:16,[maxy-3]:[BY-42]", FALSE)
client.add_hud("#s20",new/khud/button/Magic/Fire_Storm("",5,1),"15:18,[maxy-3]:[BY-42]", FALSE)

client.add_container(
"magic_skills",
"#s1","#s2","#s3","#s4","#s5",
"#s6","#s7","#s8","#s9","#s10",
"#s11","#s12","#s13","#s14","#s15",
"#s16","#s17","#s18","#s19","#s20",
)
*/

client.add_hud("#trade",new/khud/button/Trade("<font color=#ffffff>Trade",8,1),"10:4,[maxy]:[BY]", TRUE)

/*Build ALERT*/
client.add_hud("alert",new/khud/alert,"3,3",FALSE)
client.add_text("alert","<center><b>KX",3,111)
client.add_text("alert","<b>Version 1",4,100)
client.add_text("alert","* Added Alert",4,88)
client.add_text("alert","* Added Slots",4,76)
client.add_text("alert","* Added Windows",4,64)
/*Build IMAGES*/
client.add_hud("symbol_head",new/khud/symbol("head"),"5:18,9:14",FALSE)
client.add_hud("symbol_neck",new/khud/symbol("neck"),"5:18,8:30",FALSE)
client.add_hud("symbol_torso",new/khud/symbol("torso"),"5:18,8:14",FALSE)
client.add_hud("symbol_legs",new/khud/symbol("legs"),"5:18,7:30",FALSE)
client.add_hud("symbol_feet",new/khud/symbol("feet"),"5:18,7:14",FALSE)
client.add_hud("symbol_ring",new/khud/symbol("ring"),"5:18,6:30",FALSE)
client.add_hud("symbol_mainhand",new/khud/symbol("mainhand"),"5:18,6:14",FALSE)
client.add_hud("symbol_offhand",new/khud/symbol("offhand"),"5:18,5:30",FALSE)
client.add_container(
"@symbols_e",
"symbol_head",
"symbol_neck",
"symbol_torso",
"symbol_legs",
"symbol_feet",
"symbol_ring",
"symbol_mainhand",
"symbol_offhand"
)

client.add_hud("symbol_hit",new/khud/symbol("hitpoints"),"1:8,9:14",FALSE)
client.add_hud("symbol_atk",new/khud/symbol("attack"),"1:8,8:30",FALSE)
client.add_hud("symbol_str",new/khud/symbol("strength"),"1:8,8:14",FALSE)
client.add_hud("symbol_def",new/khud/symbol("defence"),"1:8,7:30",FALSE)
client.add_hud("symbol_rng",new/khud/symbol("range"),"1:8,7:14",FALSE)
//client.add_hud("symbol_mgc",new/khud/symbol("magic"),"1:8,6:30",FALSE)
//client.add_hud("symbol_pyr",new/khud/symbol("prayer"),"1:8,6:14",FALSE)
//client.add_hud("symbol_cal",new/khud/symbol("calling"),"1:8,5:30",FALSE)
client.add_container("@symbols_s","symbol_hit","symbol_atk","symbol_str","symbol_def","symbol_rng","symbol_mgc","symbol_pyr","symbol_cal")

client.add_hud("attack",new/khud/button/Attack("<font color=#ffffff>Attack",5,1),"5:18,[maxy-7]:[BY+8]", FALSE)
client.add_hud("flee",new/khud/button/Flee("<font color=#ffffff>Flee",6,1),"7:4,[maxy-7]:[BY+8]", FALSE)

//client.add_hud("#MM",new/khud/symbol("hitpoints"),"11:8,4:14",TRUE)

client.add_hud("#mm_cursor",new/khud/button("",12,-10),"0,0",FALSE)

for(var/int = 1 to 3)
client.add_hud("#mm_label[int]",new/khud/button("",12,-10),"0,0",FALSE)
client.layer("#mm_label1",999)
client.layer("#mm_label2",999)
client.layer("#mm_label3",999)
client.show_hud("@symbols_s")

/*Build Slots*/
// 180 X 134
var pos = 0
for(var/Y = 1 to 7)
for(var/X = 1 to 4)
pos++
client.add_hud("$[pos]",new/khud/slot/inventory(pos),"[X]:[(X*2)+4],[Y+1]:[(Y*2)+20]",FALSE)
pos = 0
for(var/Y = 1 to 7)
for(var/X = 1 to 10)
pos++
client.add_hud("$$[pos]",new/khud/slot/bank(pos),"[X+5]:[X],[Y+1]:[(Y*2)+20]",FALSE)
client.add_container("@Bank","$$[pos]")
pos = 0
client.add_hud("$b1",new/khud/button/CheckItem(0,"<b><font color=#ffffff>Info",4, 0),"",FALSE)
client.add_hud("$b2",new/khud/button/DropItem(0,"<b><font color=#ffffff>Drop",3,0),"",FALSE)
client.add_hud("$b3",new/khud/button/EquipItem(0,"<b><font color=#ffffff>Equip",4,0),"",FALSE)
client.add_container("@Slots_extra","$b1","$b2","$b3")

/*Containers*/
client.add_container("@Menu","#topbarl","#topbarm","#topbarr","#background")
client.add_container(
"@Slots",
"$1","$2","$3","$4",
"$5","$6","$7","$8",
"$9","$10","$11","$12",
"$13","$14","$15","$16",
"$17","$18","$19","$20",
"$21","$22","$23","$24",
"$25","$26","$27","$28")
/*Build Inventory*/
client.add_hud("#menu",new/khud/menu,"5:14,5:28",TRUE)
client.add_hud("#menu_left",new/khud/menu,"11:4,5:28",TRUE)
client.add_hud("#small_menu",new/khud/small_menu,"1:6,5:28",TRUE)

for(var/int = 8 to 1 step -1)
pos ++
client.add_hud("main.l[int]",new/khud/text,"5:18,9:[(16+16)-(16*pos)]",FALSE)
pos = 0
for(var/int = 8 to 1 step -1)
pos ++
client.add_hud("main.lm[int]",new/khud/text,"1:24,9:[(16+16)-(16*pos)]",FALSE)
pos = 0
for(var/int = 8 to 1 step -1)
pos ++
client.add_hud("main.lr[int]",new/khud/text,"11:8,9:[(16+16)-(16*pos)]",FALSE)

client.add_container("@Menu.lines","main.l1","main.l2","main.l3","main.l4","main.l5","main.l6","main.l7","main.l8")
client.add_container("@Menu.linesm","main.lm1","main.lm2","main.lm3","main.lm4","main.lm5","main.lm6","main.lm7","main.lm8")
client.add_container("@Menu.linesr","main.lr1","main.lr2","main.lr3","main.lr4","main.lr5","main.lr6","main.lr7","main.lr8")
client.show_hud("@Menu.lines","@Menu.linesm","@Menu.linesr")
client.show_menu_lines()
client.show_menum_lines()
client.show_menur_lines()

client.update_inventory()

client.add_hud("#menub",new/khud/menu_bottom,"5:14,2:22",TRUE)

for(var/int = 1 to 12)
client.add_hud("drop[int]",new/khud/slot/drop_zone(int),"2:[((int*36)-36)+10],1:12",TRUE)

src.info("<b>Welcome to Elora!")

//world << "HUD. [client.hud.len]"

. = 0
for(var/Y = 1 to 3)
for(var/X = 1 to 3)
. ++
client.add_hud("ta_[.]",new/khud/slot/trade_self(.),"[4+X]:16,[1+Y]:24",FALSE)
client.add_hud("tb_[.]",new/khud/slot/trade_other(.),"[12+X]:22,[1+Y]:24",FALSE)

client.add_hud("t_accept",new/khud/button/Trade_Accept("Accept",3,0),"9:4,2:26",FALSE)
client.add_hud("t_decline",new/khud/button/Trade_Decline("Decline",1,0),"11:16,2:26",FALSE)

client.add_container(
"trade_self",
"ta_1","ta_2","ta_3",
"ta_4","ta_5","ta_6",
"ta_7","ta_8","ta_9",
"t_accept","t_decline"
)

client.add_container(
"trade_other",
"tb_1","tb_2","tb_3",
"tb_4","tb_5","tb_6",
"tb_7","tb_8","tb_9",
)

/*Bank system*/
client.add_hud("#banko",new/khud/button/BankOpen("<font color=#ffffff>Bank",5,1),"4:30,[maxy]:[BY]", TRUE)
client.add_hud("#bankc",new/khud/button/BankClose("<font color=#ffffff>Bank",5,1),"4:30,[maxy]:[BY]", FALSE)
/*Scoreboard*/
client.add_hud("#scoreo",new/khud/button/ScoreOpen("<font color=#ffffff>Scoreboard",3,1),"11:22,[maxy]:[BY]", TRUE)
client.add_hud("#scorec",new/khud/button/ScoreClose("<font color=#ffffff>Scoreboard",3,1),"11:22,[maxy]:[BY]", FALSE)
Adding objects to a container and then calling a command using the containers ID will effect all of the items in it :)