Game Development Community

IRC Broken

by Jookia · in Torque Game Engine · 04/28/2007 (12:58 am) · 0 replies

I'm trying to get IRC to talk through chatHud. It doesn't work.

function IRCconnect()
{
	$irc = new TCPObject(ircObj);	
	$irc.connect("irc.centralchat.net:6667");
}

function IRCdisconnect()
{
	$irc.delete();
}

function ircObj::onConnected(%ircthis)
{
	%ircthis.send("Nick " @ $Pref::Player::Name @ "\r\n");
	%ircthis.schedule(1500, send, "Join ViperBuild\r\n");
}

function ircObj::handleClientJoin(%ircpre, %ircp)
{
	%ircname = until(%ircpre, "!");
	
	if(charAt(%ircname, 1) $= "@")
	{
		%ircname = getSubStr(%ircname, 1, strLen(%ircname) -1);
	}
	
	if(%ircname $= $Pref::Player::Name)
	{
		chatHud.addLine("\c5[IRC] Welcome to the IRC channel, " @ %ircname @ ".");
	}
	else
	{
		chatHud.addLine("\c5[IRC] " @ %ircname @ " has joined the IRC channel.");
		
		for(%irci = 1; %irci <= ircObj.nameCount; %irci++)
		{
			%irct = ircObj.name[%irci];
			
			if(%irct $= "-1" || %irct $= "")
			{
				ircObj.name[%irci] = %ircname;
				
				return;
			}
		}
	
	ircObj.name[ircObj.nameCount++] = %ircname;
	}
}

function ircObj::onLine(%ircthis, %irct)
{
	if(firstWord(%irct) $= "ERROR")
	{
		if(until(getWord(%irct, getWordCount(%irct) -3),"[") $= $Pref::Player::Name)
		{
			%ircerror = getWord(%irct, getWordCount(%irct) -2) SPC getWord(%irct, getWordCount(%irct) -1);
			chatHud.addLine("\c5[IRC] Alert: " @ %ircerror);
		}
		
		return;
	}
	
	if(charAt(%irct, 1) $= ":")
	{
		%irct = getSubStr(%irct, 1, strLen(%irct) -1);
	}
	
	%ircpre = until(%irct, " ");
	%irct = strReplace(%irct, %ircpre, "");
	%ircc = getWord(%irct, 1);
	%ircp = trim(strReplace(%irct, %ircc, ""));
	
	if(%ircc $= "PrivMsg")
	{
		ircObj::handleMsgReceived(%ircpre, %ircp);
	}
	
	if(%ircc $= "Quit")
	{
		%ircr = getSubStr(%irct, strLen(until(%irct, ":")), strLen(%irct) -1);
		
		if(%ircr $= "")
		{
			%ircr = "Quit";
		}
		
		%ircname = until(%ircpre, "!");
		chatHud.addLine("\c5[IRC] " @ %ircname @ " has left the IRC channel. (" @ %ircr @ ").");
		
		for(%irci = 1; %irci <= ircObj.nameCount; %irci++)
		{
			if(%ircname $= ircObj.name[%irci])
			{
				ircObj.name[%irci] = "-1";
			}
		}
	}
	
	if(%ircc $= "Join")
	{
		ircObj::handleClientJoin(%ircpre, %ircp);
	}
	
	if(%ircc $= "353")
	{
		ircObj::handleClientList(%ircpre, %ircp);
	}
}

function ircObj::handleClientList(%ircpre,%ircp)
{
	%ircnameList = getSubStr(%ircp, strLen(until(%ircp, ":")) +2, strLen(%ircp) -1);
	
	if(charAt(%ircnameList, 1) $= ":")
	{
		%ircnameList = getSubStr(%ircnameList, 1, strLen(%ircnameList) -1);
	}
	
	for(%irci = 0; %irci <=getWordCount(%ircnameList); %irci++)
	{
	%ircn = getWord(%ircnameList, %irci);
	%ircadded = 0;
	
		for(%irci2 = 1; %irci2 <= ircObj.nameCount; %irci2++)
		{
		%irct = ircObj.name[%irci2];
		
			if(%irct $= %ircn)
			{
				%ircadded = 1;
			}
		}
		
		if(charAt(%ircn, 1) $= "@")
		{
			%ircn = getSubStr(%ircn, 1, strLen(%ircn) -1);
		}
		
		if(!%ircadded)
		{
			ircObj.nameCount++;
			ircObj.name[ircObj.nameCount] = %ircn;
		}
	}
}

function charAt(%ircx, %ircy)
{
	return getSubStr(%ircx, %ircy -1, 1);
}

function ircObj::handleMsgReceived(%ircpre, %ircp)
{
	%ircd = until(%ircp, " ");
	%ircn = until(%ircpre, "!");
	
	%ircmessage = getSubStr(%ircp, strLen(%ircd) + 2, strLen(%ircp) -1);
	
	chatHud.addLine("\c1[IRC]" @ %ircn @ ": " @ %ircmessage);
}

function ircObj::onDisconnect(%ircthis)
{
	chatHud.addLine("\c5[IRC] You have left the IRC channel.");
	
	ircObj.send("QUIT\r\n");
	
	for(%irci = 1; %irci <= ircObj.nameCount; %irci++)
	{
		ircObj.name[%irci] = -1;
	}
	
	ircObj.nameCount = 0;
}