ID:1969651
 
(See the best response by Ter13.)
client
var
screen_objects/chat_objects
chatObject1;chatObject2;chatObject3;chatObject4;chatObject5;chatObject6;
chatObject7;chatObject8;chatObject9;chatObject10;chatObject11;chatObject12;
chatObject13;chatObject14;chatObject15;chatObject16;chatObject17;chatObject18;
chatObject19;chatObject20;chatObject21;chatObject22;chatObject23;chatObject24;

list
messages
chat_objects = list()
chat_objects_used = list()

verb
Chat(var/string as text|null)
set hidden=TRUE
if(findtext(string,1,2) == " " || !string){CloseChat();return}
for(var/client/clients in sao_online)
clients._applyMessages(src,string)
CloseChat()
OpenChat()
set hidden = 1
winset(src,"ClientInterface.input1","is-visible=true")
winset(src,"ClientInterface.input1","focus=true")
CloseChat()
set hidden = 1
winset(src,"ClientInterface.input1","is-visible=false")
winset(src,"ClientInterface.map1","focus=true")
winset(src,"ClientInterface.input1","text=")
proc
_applyMessages(client/messenger, string)
if(!messages)
messages=list()
for(var/i = 0, i<24, i++)
if(i==0)continue
messages["[i]"] = ""
if(!messages.Find("24"))
messages["24"] = ""
var/messages_maxed = messages["24"]
if(istext(messages_maxed) && length(messages_maxed) > 0)
messages["24"] = ""
var/swap = ""
for(var/i = messages.len, i>0, i--)
if(i==1)continue
swap = messages["[i]"]
messages["[i]"] = messages["[i-1]"]
messages["[i-1]"] = swap
messages["1"] = "<b><font color=black>[messenger.mob]</font><font color=black>: [string]</b></font>"
chatObject1.maptext = messages["1"]
chatObject2.maptext = messages["2"]
chatObject3.maptext = messages["3"]
chatObject4.maptext = messages["4"]
chatObject5.maptext = messages["5"]
chatObject6.maptext = messages["6"]
chatObject7.maptext = messages["7"]
chatObject8.maptext = messages["8"]
chatObject9.maptext = messages["9"]
chatObject10.maptext = messages["10"]
chatObject11.maptext = messages["11"]
chatObject12.maptext = messages["12"]
chatObject13.maptext = messages["13"]
chatObject14.maptext = messages["14"]
chatObject15.maptext = messages["15"]
chatObject16.maptext = messages["16"]
chatObject17.maptext = messages["17"]
chatObject18.maptext = messages["18"]
chatObject19.maptext = messages["19"]
chatObject20.maptext = messages["20"]
chatObject21.maptext = messages["21"]
chatObject22.maptext = messages["22"]
chatObject23.maptext = messages["23"]
chatObject24.maptext = messages["24"]

proc
function_generateHud(client/viewer)
var/mob/myMob = viewer.mob
if(!myMob.splashscreen_void)
myMob.splashscreen_void = new(viewer, _special = "SOUTHWEST to NORTHEAST")
viewer.chatObject24=new(viewer,_special = "WEST+1,CENTER+3");
viewer.chatObject23=new(viewer,_special = "WEST+1,CENTER+3:16")
viewer.chatObject22=new(viewer,_special = "WEST+1,CENTER+2");
viewer.chatObject21=new(viewer,_special = "WEST+1,CENTER+2:-16")
viewer.chatObject20=new(viewer,_special = "WEST+1,CENTER+1");
viewer.chatObject19=new(viewer,_special = "WEST+1,CENTER+1:-16")
viewer.chatObject18=new(viewer,_special = "WEST+1,CENTER");
viewer.chatObject17=new(viewer,_special = "WEST+1,CENTER:-16")
viewer.chatObject16=new(viewer,_special = "WEST+1,CENTER-1");
viewer.chatObject15=new(viewer,_special = "WEST+1,CENTER-1:-16")
viewer.chatObject14=new(viewer,_special = "WEST+1,CENTER-2");
viewer.chatObject13=new(viewer,_special = "WEST+1,CENTER-2:-16")
viewer.chatObject12=new(viewer,_special = "WEST+1,CENTER-3");
viewer.chatObject11=new(viewer,_special = "WEST+1,CENTER-3:-16")
viewer.chatObject10=new(viewer,_special = "WEST+1,CENTER-4");
viewer.chatObject9=new(viewer,_special = "WEST+1,CENTER-4:-16")
viewer.chatObject8=new(viewer,_special = "WEST+1,CENTER-5");
viewer.chatObject7=new(viewer,_special = "WEST+1,CENTER-5:-16")
viewer.chatObject6=new(viewer,_special = "WEST+1,CENTER-6");
viewer.chatObject5=new(viewer,_special = "WEST+1,CENTER-6:-16")
viewer.chatObject4=new(viewer,_special = "WEST+1,CENTER-7");
viewer.chatObject3=new(viewer,_special = "WEST+1,CENTER-7:-16")
viewer.chatObject2=new(viewer,_special = "WEST+1,CENTER-8");
viewer.chatObject1=new(viewer,_special = "WEST+1,CENTER-8:-16")


Okay I am going to start by apologizing for this wall of code. I know it's a hassle to look through but I need help with handling chat. So basically what's happening is once my viewer hits chatObject23 it, pardon my French, get's all fucked up. Here's a picture for lack of ability to explain what's happening without giving a wall of text on top of the wall of code.

This shows chatObject 1 - 22
Pic#1

This shows chatObject 23
Pic#2

This shows chatObject 24
Pic#3



Best response
Don't use an object per message. Use a single object and add/remove messages from its maptext.
Why can't I ever just simplify what I do. Lmfao. Thanks for the help don't know why I didn't start out with that method.
#define HUD_LAYER 10
#define MAX_MESSAGES 25

client
var
mapchat/mapchat = new()
New()
. = ..()
if(.)
screen += mapchat

mapchat
parent_type = /obj
screen_loc = "WEST,SOUTH"
layer = HUD_LAYER
maptext_width = 480
maptext_height = 320

var
message_buffer = ""
list/message_sizes = list()
proc
AddMessage(msg)
var/removing = message_sizes.len-MAX_MESSAGES+1
message_sizes += length(msg)
if(removing>0)
var/trim_offset = 1
for(var/pos in 1 to removing)
trim_offset += message_sizes[pos]
message_sizes.Cut(1,removing+1)
message_buffer = "[copytext(message_buffer,trim_offset,0)][msg]"
else
message_buffer = "[message_buffer][msg]"
maptext = "<DIV valign='bottom'>[message_buffer]<BR></DIV>"


The above snippet should demonstrate the concept. You'll probably also want to store the time that each message was sent as well as create a tracker that will hide old messages over time, but that should be trivial.