dawn/notes/
dawn/src/
dawn/src/docs/
/**************************************************************************/
// whofmt.cpp - various formats for the who list
/***************************************************************************
 * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt                    *
 * >> A number of people have contributed to the Dawn codebase, with the   *
 *    majority of code written by Michael Garratt - www.dawnoftime.org     *
 * >> To use this source code, you must fully comply with the dawn license *
 *    in licenses.txt... In particular, you may not remove this copyright  *
 *    notice.                                                              *
 **************************************************************************/
#include "include.h"
#include "channels.h"
/**************************************************************************/
// example whoformat function - about as simple as it gets
char *whoformat_just_names( char_data *ch, char_data *wch, bool two_column)
{
	return wch->name;
}

/**************************************************************************/
char *whoformat_dawn ( char_data *ch, char_data *wch, bool two_column)
{
	static char return_buf[MSL*2];
    char const *clss;
	char bracket_col[10]; // [ colour
    char left_bracket[20]; // L, ! or [ 
    char right_bracket[20]; // ! or ]
    char buf[MSL];
    char buf2[MSL];
    char wizitext[40]; 
	char incogtext[20]; 
	char whoclass[20]; 

	return_buf[0]='\0'; // clear the initial return string

	char name[MIL];
	{
		strcpy(name, wch->name);
		// generate the name displayed
		// put the afk message or title depending on if they are afk
		if(IS_SET(wch->comm, COMM_AFK) && wch->pcdata 
			&& !IS_NULLSTR(wch->pcdata->afk_message))
		{
			strcat(name, FORMATF(" (%s)", wch->pcdata->afk_message));
		}else if(!GAMESETTING3(GAMESET3_WHO_TITLE_DISABLED)){
			// concat the title
			strcat(name, FORMATF(" %s", wch->pcdata->title));
		}
	}

	// Figure out what to print for clss.
	clss="***";
    switch ( wch->level )
    {
		default: clss="***";break;
		case MAX_LEVEL - 0 : clss = "IMP";     break;
		case MAX_LEVEL - 1 : clss = "CRE";     break;
		case MAX_LEVEL - 2 : clss = "SUP";     break;
		case MAX_LEVEL - 3 : clss = "DEI";     break;
		case MAX_LEVEL - 4 : clss = "GUA";     break;
		case MAX_LEVEL - 5 : clss = "IMM";     break;
		case MAX_LEVEL - 6 : clss = "DEM";     break;
		case MAX_LEVEL - 7 : clss = "ANG";     break;
		case MAX_LEVEL - 8 : clss = "AVA";     break;
	}
    
	if(wch->level==ABSOLUTE_MAX_LEVEL && ABSOLUTE_MAX_LEVEL!=MAX_LEVEL){
		if(wch->pcdata && wch->pcdata->who_text && c_str_len(wch->pcdata->who_text)==3){
			clss=wch->pcdata->who_text;
		}else{
			clss="***";
		}
	}

	// alternate 3 tier imm ranking system (IMP, ADM, IMM)
	if(GAMESETTING4(GAMESET4_3TIER_IMMRANKS_IN_WHO)){
		switch ( wch->level )
		{
			case MAX_LEVEL - 0 : clss = "IMP";     break;
			case MAX_LEVEL - 1 : clss = "ADM";     break;
			case MAX_LEVEL - 2 : clss = "ADM";     break;
			case MAX_LEVEL - 3 : clss = "IMM";     break;
			case MAX_LEVEL - 4 : clss = "IMM";     break;
			case MAX_LEVEL - 5 : clss = "IMM";     break;
			case MAX_LEVEL - 6 : clss = "IMM";     break;
			case MAX_LEVEL - 7 : clss = "IMM";     break;
			case MAX_LEVEL - 8 : clss = "IMM";     break;
			default: break; // leave as is
		}
	}

	// push onto morts new/***/clan prefix titles
	if( wch->level<LEVEL_IMMORTAL){
		if ((IS_NEWBIE_SUPPORT(ch) || IS_IMMORTAL(ch))
			&& IS_NEWBIE(wch))
			clss="new";
		else if (two_column && (is_same_clan(ch,wch)||IS_IMMORTAL(ch))){
			sprintf(whoclass,"%s%s",
				wch->clan->color_str(),
				wch->clan->who_cat());
			clss=whoclass;
		}else{
			clss = "***";
		}
	}

	if ( wch->level>=LEVEL_IMMORTAL){
        strcpy( bracket_col, "`=\x83");
    }else if (IS_IRC(wch)){
        strcpy( bracket_col, "`=\x97");
    }else{
        strcpy( bracket_col, "`=\x96"); 
	}

	// incog level 
	if (IS_IMMORTAL(ch) && get_trust(ch)>= wch->incog_level && wch->incog_level > 0){
		if (two_column){
			if (wch->incog_level == LEVEL_IMMORTAL){
				sprintf(incogtext, "(Ic)");
			}else{
				sprintf(incogtext, "(Ic%d)",wch->incog_level );
			}
		}else{
			if (wch->incog_level == LEVEL_IMMORTAL){
				sprintf(incogtext, " (Incog)");
			}else{
				sprintf(incogtext, " (Incog %d)",wch->incog_level );
			}
		}
	}else{
		incogtext[0]= '\0';
	}


	// wizi level
	wizitext[0]='\0';
	if ( IS_IMMORTAL(ch) )
	{
		char iw[30], ow[30], w[30];

		if(wch->iwizi){
			if(wch->iwizi!=LEVEL_IMMORTAL){
				sprintf(iw,"`#%sI%d`&", IS_OOC(wch)?"`=\x88":"`=\x89", wch->iwizi);
			}else{
				sprintf(iw,"`#%sI`&", IS_OOC(wch)?"`=\x88":"`=\x89");
			}
		}else{
			iw[0]='\0';
		}
		if(wch->owizi){
			if(wch->owizi!=LEVEL_IMMORTAL){
				sprintf(ow,"`#%sO%d`&", IS_OOC(wch)?"`=\x90":"`=\x88", wch->owizi);
			}else{
				sprintf(ow,"`#%sO`&", IS_OOC(wch)?"`=\x90":"`=\x88");
			}
		}else{
			ow[0]='\0';
		}

		if(wch->invis_level){
			if (two_column){
				if (wch->invis_level == LEVEL_IMMORTAL){
					sprintf(w, "Wz");
				}else{
					sprintf(w, "Wz%d", wch->invis_level);
				}
			}else{
				if (wch->invis_level == LEVEL_IMMORTAL){
					sprintf(w, "Wizi");
				}else{
					sprintf(w, "Wizi %d", wch->invis_level);
				}
			}
		}else{
			w[0]='\0';
		}

		
		// generate the wizitext
		sprintf(wizitext,"%s%s%s",iw, ow, w);
		if(!IS_NULLSTR(wizitext)){
			sprintf(wizitext,"(%s%s%s)",iw, ow, w);
		}else{
			wizitext[0]='\0';
		}
	}

	
	//  %colour%[%colour
	sprintf(left_bracket,"%s%s%s",
		bracket_col,
		(	IS_SET(wch->act, PLR_LOG) 
			&& !IS_IMMORTAL(wch)
			&& IS_ADMIN(ch)
		)	? 
			("`#`=\x87L`^") // L instead of [
			:(	IS_SET(wch->comm,COMM_NOCHANNELS) 
				&& (IS_IMMORTAL(ch) 
				|| IS_SET(ch->comm, COMM_CANNOCHANNEL)) 
			 )	?"`#`M!`^" :
			(IS_IMMORTAL(ch) && IS_IMMORTAL(wch) 
				&& !IS_SET(wch->comm, COMM_WHOVIS)) ? "<":"[",
			(wch->level>=LEVEL_IMMORTAL)?"`=\x82":"`=\x81"
		);

	sprintf(right_bracket,"%s%s`#%s",
		bracket_col,
		( IS_SET(wch->comm,COMM_NOCHANNELS) // no channeled bracket
		&& (IS_IMMORTAL(ch) 
		|| IS_SET(ch->comm, COMM_CANNOCHANNEL)) )?"`#`=\x86!`^":
			(IS_IMMORTAL(ch) && IS_IMMORTAL(wch) 
				&& !IS_SET(wch->comm, COMM_WHOVIS)) ? ">":"]",
         (IS_IMMORTAL(ch) && IS_IMMORTAL(wch) 
		 && !IS_SET(wch->comm, COMM_WHOVIS)) ? "`#`=\x91" : "");


	if (two_column){
 // Format it up //%[%*%]#  %new%i%w%b%a%o%O%P%i%h%s%Q%C%l%o%q
	sprintf( buf, "%s%s%s%s%s`^%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
		left_bracket,
		clss,
		right_bracket,
        ((IS_IMMORTAL(ch)||HAS_IMMTALK_NAME(ch))? (HAS_IMMTALK_NAME(wch)?"`#`=\x92#`&":" ") :" "),        
		wch->name,
        (IS_IMMORTAL(ch) && (wch->level>=LEVEL_IMMORTAL) 
			&& IS_SET(wch->comm, COMM_NEWBIE_SUPPORT)) ? 
			" (Newbie Support!)" : "",
		incogtext,
		wizitext,
        IS_SET(wch->comm, COMM_BUILDING) ? " [Build]" : "",
		IS_SET(wch->comm, COMM_CODING) ? " [Code]" : "",
        IS_SET(wch->comm, COMM_AFK) ? " `#`=\x84[AFK]`^": "",
         (!IS_IMMORTAL(wch) && IS_OOC(wch))? " `#`=^(in OOC)`^" : "",
		 (!IS_IMMORTAL(wch) && IS_OLCAREA(wch->in_room->area))? " `#`=&(OLC AREA)`&" : "",
         (IS_IMMORTAL(ch) && HAS_CONFIG(wch, CONFIG_ACTIVE))? " `#`=\x93<A>`&" : "",		 
		 (IS_IMMORTAL(ch) && IS_AFFECTED(wch, AFF_INVISIBLE))? " (I)" : "",
         (IS_IMMORTAL(ch) && IS_AFFECTED(wch, AFF_HIDE))?      " (H)"  : "",
         (IS_IMMORTAL(ch) && IS_AFFECTED(wch, AFF_SNEAK))?     " (S)" : "",
         (IS_IMMORTAL(ch) && IS_SET(wch->act, PLR_QUESTER))? " `#`=\x95(" "`=\x94" "Q`=\x95)`&" : "",
		 ((IS_IMMORTAL(ch) || HAS_CONFIG(ch, CONFIG_COURTMEMBER)) && HAS_CONFIG(wch, CONFIG_COURTMEMBER))? " `#`=\x95(" "`=\x94" "T`=\x95)`&" : "",
		 ((IS_IMMORTAL(ch) || HAS_CONFIG(ch, CONFIG_BARD_COUNCIL))&& HAS_CONFIG(wch, CONFIG_BARD_COUNCIL))? " `#`=\x95(" "`=\x94" "B`=\x95)`&" : "",
		 (IS_LINKDEAD(wch)?" `#`=\x85[LD]`^":""),
			!HAS_CHANNELOFF(wch, CHANNEL_QUIET)
			&& HAS_CHANNELOFF(wch, CHANNEL_OOC)? " `#`=O(ooc off)`^" : 
					HAS_CHANNELOFF(wch, CHANNEL_CHAT)? " `#`=O(chat off)`^" : "",
		 HAS_CHANNELOFF(wch, CHANNEL_QUIET)? " `#`=\x84(q)`^" : "",
		 (( IS_IMMORTAL(ch) || IS_NEWBIE_SUPPORT(ch)) && HAS_CONFIG(wch, CONFIG_NONEWBIE )) ? "`#`=E(no new)`^" : ""  );
	}else{
 // Format it up //idl%[%*%]# %new%i%w%b%a%o%O%i%h%s%Q%C%B%l%o%q%newbie
	sprintf( buf, "%s%s%s%s%s`^%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
		left_bracket,
		clss,
		right_bracket,
		((IS_IMMORTAL(ch)||HAS_IMMTALK_NAME(ch))? (HAS_IMMTALK_NAME(wch)?"`#`=\x92#`&":" ") :" "),
        name,
        (IS_IMMORTAL(ch) && (wch->level>=LEVEL_IMMORTAL) 
			&& IS_SET(wch->comm, COMM_NEWBIE_SUPPORT)) ? 
			" (Newbie Support!)" : "",
		incogtext,
		wizitext,
        IS_SET(wch->comm, COMM_BUILDING) ? " [Building]" : "",
        IS_SET(wch->comm, COMM_CODING) ? " [Coding]" : "",
        IS_SET(wch->comm, COMM_AFK) ? " `#`=\x84[AFK]`^" : "",
         (!IS_IMMORTAL(wch) && IS_OOC(wch))? " `#`=^(in OOC)`^" : "",
		 (!IS_IMMORTAL(wch) && wch->in_room && IS_OLCAREA(wch->in_room->area))? " `#`=&(OLC AREA)`x" : "",
         (IS_IMMORTAL(ch) && HAS_CONFIG(wch, CONFIG_ACTIVE))? " `#`=\x93<A>`&" : "",		 
         (IS_IMMORTAL(ch) && IS_AFFECTED(wch, AFF_INVISIBLE))? " (I)" : "",
         (IS_IMMORTAL(ch) && IS_AFFECTED(wch, AFF_HIDE))?      " (H)"  : "",
         (IS_IMMORTAL(ch) && IS_AFFECTED(wch, AFF_SNEAK))?     " (S)" : "",
         (IS_IMMORTAL(ch) && IS_SET(wch->act, PLR_QUESTER))? " `#`=\x95(" "`=\x94" "Q`=\x95)`&" : "",
		 ((IS_IMMORTAL(ch) || HAS_CONFIG(ch, CONFIG_COURTMEMBER))&& HAS_CONFIG(wch, CONFIG_COURTMEMBER))? " `#`=\x95(" "`=\x94" "T`=\x95)`&" : "",
		 ((IS_IMMORTAL(ch) || HAS_CONFIG(ch, CONFIG_BARD_COUNCIL))&& HAS_CONFIG(wch, CONFIG_BARD_COUNCIL))? " `#`=\x95(" "`=\x94" "B`=\x95)`&" : "",
		 (IS_LINKDEAD(wch)?" `#`=\x85[LD]`^":""),
			!HAS_CHANNELOFF(wch, CHANNEL_QUIET)
			&& HAS_CHANNELOFF(wch, CHANNEL_OOC)? " `#`=O(ooc off)`^" : 
				HAS_CHANNELOFF(wch, CHANNEL_CHAT)? " `#`=O(chat off)`^" : "",
		 HAS_CHANNELOFF(wch, CHANNEL_QUIET)? " `#`=\x84(quiet)`^" : "",
		 (( IS_IMMORTAL(ch) || IS_NEWBIE_SUPPORT(ch)) && HAS_CONFIG(wch, CONFIG_NONEWBIE )) ? "`#`=E(no new)`^" : ""  );
	}

	if (IS_ADMIN(ch) && HAS_MSP(wch)){
		strcat(buf," `#`=\x95(" "`=\x94" "M`=\x95)`^");
	}
	if (IS_ADMIN(ch) && HAS_MXP(wch)){
		strcat(buf," `#`=\x95(" "`=\x94" "X`=\x95)`^");
	}
#ifdef MCCP_ENABLED
	if (IS_ADMIN(ch) && wch->desc && wch->desc->out_compress){
		strcat(buf," `#`=\x95(" "`=\x94" "C`=\x95)`^");
	}
#endif
	if(IS_ADMIN(ch) && HAS_CONFIG(wch,CONFIG_PRACSYS_TESTER)){
		strcat(buf," `#`=\x095(`=\x094PT`=\x095)`^");
	}
		
    // put on the clan details if required 
    if ( !two_column && wch->clan>0
		&& ( is_same_clan(ch,wch) ||IS_IMMORTAL(ch) )
	   )
    {
		if (IS_IMMORTAL(ch))
		{
			if (c_str_len(buf)>40)
			{
				sprintf( buf2, "%s %s", buf, 
					wch->clan->cwho_name());
			}
			else
			{
				sprintf( buf2, "%s %s", str_width(buf,40), 
					wch->clan->cwho_name());
			}
		}
		else
		{
			if (c_str_len(buf)>25)
			{
				sprintf( buf2, "%s %s", buf, wch->clan->cwho_name());					
			}
			else
			{
				sprintf( buf2, "%s %s", str_width(buf,25),
					wch->clan->cwho_name());					
			}
		}	
        strcat(return_buf,buf2);
    }
    else
    {
        strcat(return_buf,buf);
    }

	// on the dedicated pkill style muds, show which area each player is in
    if(	GAMESETTING5(GAMESET5_DEDICATED_PKILL_STYLE_MUD)		
		&& wch->in_room
		&& wch->level<LEVEL_IMMORTAL 
        && wch->in_room->area 
		&& wch->in_room->area->name)
	{
        sprintf(buf,"`x(%s)", wch->in_room->area->name);
        strcat(return_buf,buf);
    }

	// reset colour back for next line
	strcat(return_buf,"`x");
	return (return_buf);
}
/**************************************************************************/
// storm who format
char *whoformat_storm( char_data *ch, char_data *wch, bool two_column)
{
	static char return_buf[MSL*2];
	char const *clss;
	char align_txt[MIL];
	char immtitle[MIL];
	char title[MIL];
	char level[MIL];
	// -----
	char w0[MIL];
	char w1[MIL];
	char w2[MIL];
	char w3[MIL];
	char w4[MIL];
	char w5[MIL];
	//
	w0[0] = '\0';
	w1[0] = '\0';
	w2[0] = '\0';
	w3[0] = '\0';
	w4[0] = '\0';
	w5[0] = '\0';
	title[0] = '\0';
	immtitle[0] = '\0';
	level[0] = '\0';

	// Ripped right out of whoformat_dawn:
	return_buf[0] = '\0';
	align_txt[0] = '\0';


	// Level, if you're the same clan, or immortal.
	if(IS_IMMORTAL(ch) || is_same_clan(wch,ch)){
		sprintf(level,"`c%s`B%3d`c%s",	
			(IS_IMMORTAL(ch) && IS_IMMORTAL(wch) 
				&& !IS_SET(wch->comm, COMM_WHOVIS)) ? "<":"[",
			wch->level,
			(IS_IMMORTAL(ch) && IS_IMMORTAL(wch) 
				&& !IS_SET(wch->comm, COMM_WHOVIS)) ? ">":"]");
	}else{
			if(ch == wch) 
				sprintf(level,"`G<`B%3d`G>",wch->level);
			else if(IS_NEWBIE(wch) )
				sprintf(level,"`c[`GNeW`c]`x");
			else
				sprintf(level,"`c[   ]`X");
	}
		

	{ //Align stuff
		// get the inner text
		char *t="";
		switch(wch->tendency){
			case 3: case 2:				t="`WLaW"; break;
			case 1: case 0: case -1: 	t="`BBaL"; break;
			case -2: case -3:			t="`RChS"; break;
			default:					t="error"; break;
		}
		// get the inner text
		char oc='x';
		switch(wch->alliance){
			case 3: case 2:				oc='W'; break;
			case 1: case 0: case -1: 	oc='B'; break;
			case -2: case -3:			oc='R'; break;
			default:					t="terr"; break;
		}
		sprintf(align_txt,"`%c`#<%s`^>", oc, t);
	}

	//by graham for immtitle
	char it[MIL];
	
//	if(HAS_CONFIG2(wch,CONFIG2_GUEST)){
	if(false){
		strcpy(it, "`CGUEST`x"); // the default GUEST immtitle 
	}else{
		if(IS_NULLSTR(wch->pcdata->immtitle)){
			strcpy(it, "     "); // the default immtitle for now
		}else{
			strcpy(it, wch->pcdata->immtitle);
		}
	}
	if (wch->level >= LEVEL_IMMORTAL)
	{
		int half;
		int sechalf;
		if (c_str_len(it) == 6){
			sprintf(immtitle, "`C%-6s", it);
		}else{
			half = ((7 - c_str_len(it)) / 2);
			sechalf = (7 - (half + c_str_len(it)));
			sprintf(immtitle, "%*c%s%*c", half,' ',it,sechalf,' ');
		}
	}else if(wch->clan != NULL){
		sprintf(immtitle," %-5s ",wch->clan->cwho_name());
	}else if(wch->level < LEVEL_IMMORTAL){
		sprintf(immtitle," %-5s ",capitalize(race_table[wch->race]->short_name));
	}

	clss="***";	
	// Figure what to Print for Class
	switch(wch->level)
	{
		default:
			if(IS_NEWBIE_SUPPORT(wch) && IS_NEWBIE(ch))
				clss = "`W+++";
			else if(IS_NEWBIE_SUPPORT(ch) && IS_NEWBIE(wch))
				clss = "`G+++";
			else if(IS_IMMORTAL(ch) && IS_NEWBIE(wch))
				clss = "`SNeW";
			else
				clss = class_table[wch->clss].short_name; // temp test
				//clss = "***";
			if(wch == ch)
				clss = class_table[wch->clss].short_name;
			if(IS_IMMORTAL(ch))
				clss = class_table[wch->clss].short_name;
			{
		case MAX_LEVEL + 1: //clss = "***";
			if(wch->pcdata && wch->pcdata->who_text &&
			c_str_len(wch->pcdata->who_text) == 3){
				clss = wch->pcdata->who_text;
				break;
			}else{
				//clss = "***";
				break;
			}
		case MAX_LEVEL - 0: clss = "`SIMP"; break;
		case MAX_LEVEL - 1: clss = "`BCRE"; break;
		case MAX_LEVEL - 2: clss = "`WSUP"; break;
		case MAX_LEVEL - 3: clss = "`WDEI"; break;
		case MAX_LEVEL - 4: clss = "`WGOD"; break;
		case MAX_LEVEL - 5: clss = "`WIMM"; break;
		case MAX_LEVEL - 6: clss = "`WDEM"; break;
		case MAX_LEVEL - 7: clss = "`WANG"; break;
		case MAX_LEVEL - 8: clss = "`WAVA"; break;
		case LEVEL_HERO: clss = "`CHrO"; break;
			}
	}
	
	if(HAS_CHANNELOFF(wch, CHANNEL_QUIET)) strcat(w0,"`GQ");  
	else if IS_SET(wch->comm, COMM_CODING)  strcat(w0,"`GC");  
	else if IS_SET(wch->comm, COMM_BUILDING)  strcat(w0,"`GB");  
	else strcat(w0,"`G-");

	if IS_AFFECTED(wch, AFF_INVISIBLE)  strcat(w1,"`SI");  
	else if IS_AFFECTED(wch, AFF_SNEAK)  strcat(w1,"`SS");  
	else if IS_AFFECTED(wch, AFF_HIDE)  strcat(w1,"`SH");  
	else strcat(w1, "`S-");

	if( IS_KILLER(wch) ) strcat(w2,"`R`FK`x");
	else if( IS_THIEF(wch) ) strcat(w2,"`S`FT`x");
	else if (IS_NEWBIE_SUPPORT(wch) ) strcat(w2,"`SN");
	else if (IS_JAILED(wch) ) strcat(w2,"`CJ");
	else strcat(w2, "`Y-");

	if IS_SET(wch->pcdata->council, COUNCIL_HEADBALANCE)  strcat(w3,"`WB");    // B
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADSUPPORT)  strcat(w3,"`WS");    // S
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADRP)  strcat(w3,"`WP");         // P
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADREALM)  strcat(w3,"`WR");      // R
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADSTORYLINE)  strcat(w3,"`WT");   //T
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADCLAN)  strcat(w3,"`YC");       // N
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADLAW)  strcat(w3,"`WL");        // L
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADMYTHOS)  strcat(w3,"`WY");     // Y
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADCODE)  strcat(w3,"`WC");       // C
	else if IS_SET(wch->pcdata->council, COUNCIL_CODE)  strcat(w3,"`RC");           // C
	else if IS_SET(wch->pcdata->council, COUNCIL_ADMIN)  strcat(w3,"`RA");          // A
	else if IS_SET(wch->pcdata->council, COUNCIL_LAW)  strcat(w3,"`RL");            // L
	else if IS_SET(wch->pcdata->council, COUNCIL_CLAN)  strcat(w3,"`MC");           // N
	else if IS_SET(wch->pcdata->council, COUNCIL_MYTHOS)  strcat(w3,"`RT");			// T
	else if IS_SET(wch->pcdata->council, COUNCIL_REALM)  strcat(w3,"`RR");          // R
	else if IS_SET(wch->pcdata->council, COUNCIL_RP)  strcat(w3,"`RP");             // P
	else if IS_SET(wch->pcdata->council, COUNCIL_SUPPORT)  strcat(w3,"`RS");        // S
	else if IS_SET(wch->pcdata->council, COUNCIL_BALANCE)  strcat(w3,"`RB");        // B
	else strcat(w3, "`R-");

	if (wch->iwizi)  strcat(w4,"`CI");  
	else if (wch->owizi)  strcat(w4,"`CO");  
	else if (wch->invis_level)  strcat(w4,"`CW");  
	else if (wch->incog_level)  strcat(w4,"`RI");  
	else strcat(w4, "`C-");

	if( false){//HAS_CONFIG2(wch,CONFIG2_MUDBALL) ){
//		if(IS_SET(wch->dyn,DYN_MUDBALL_TEAM_RED) && mudball->game_in_progress){
			strcat(w5,"`RM");
//		}else if(IS_SET(wch->dyn,DYN_MUDBALL_TEAM_BLUE) && mudball->game_in_progress){
			strcat(w5,"`BM");
//		}else{
			strcat(w5,"`WM");
//		}
	}else 
	if(IS_SET(wch->act, PLR_QUESTER)){
		strcat(w5,"`BQ");
	}else{
		strcat(w5, "`B-");
	}

	// Title & AFK text
	if IS_SET(wch->comm, COMM_AFK){
		if(IS_NULLSTR(wch->pcdata->afk_message)){
			strcat(title,"`xIs `BAFK`Y!`x");
		}else{
			sprintf(title,"`xIs `BAFK`Y!`x %s ",wch->pcdata->afk_message);
		}
	}else if(!IS_NULLSTR(wch->pcdata->title)){
		strcat(title,wch->pcdata->title);
	}else{
		strcat(title," ");
	}

	sprintf(return_buf,"%s`c[%s`X%s`X%s`c] `c[%s%s%s%s%s%s`c]%s %s `x%s`x",
		level,
		align_txt,
		immtitle,
		clss,
		w0, w1, w2, w3, w4, w5,
		(IS_IMMORTAL(ch) && IS_IMMORTAL(wch) && !IS_SET(wch->comm, COMM_WHOVIS))?"`=\x91":"`x",
		wch->name,
		title);

	// Tada.
	return(return_buf);
}
/**************************************************************************/
//-Whoformat EndlessDreams -Balo-
/**************************************************************************/

char *whoformat_endless( char_data *ch, char_data *wch, bool two_column)
{
	static char return_buf[MSL*2];
	char title[MIL];
	// -----
	char w0[MIL];
	char w1[MIL];
	char w2[MIL];
	char w3[MIL];
	char w4[MIL];
	//
	w0[0] = '\0';
	w1[0] = '\0';
	w2[0] = '\0';
	w3[0] = '\0';
	w4[0] = '\0';
	title[0] = '\0';

	return_buf[0] = '\0';

	
	if(HAS_CHANNELOFF(wch, CHANNEL_QUIET)) strcat(w0,"`GQ");  
	else if IS_SET(wch->comm, COMM_CODING)  strcat(w0,"`GC");  
	else if IS_SET(wch->comm, COMM_BUILDING)  strcat(w0,"`GB");  
	else strcat(w0,"`G-");

	if IS_AFFECTED(wch, AFF_INVISIBLE)  strcat(w1,"`SI");  
	else if IS_AFFECTED(wch, AFF_SNEAK)  strcat(w1,"`SS");  
	else if IS_AFFECTED(wch, AFF_HIDE)  strcat(w1,"`SH");  
	else strcat(w1, "`S-");

	if IS_SET(wch->pcdata->council, COUNCIL_HEADBALANCE)  strcat(w2,"`WB");    // B
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADSUPPORT)  strcat(w2,"`WS");    // S
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADRP)  strcat(w2,"`WP");         // P
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADREALM)  strcat(w2,"`WR");      // R
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADSTORYLINE)  strcat(w2,"`WT");   //T
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADCLAN)  strcat(w2,"`WN");       // N
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADLAW)  strcat(w2,"`WL");        // L
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADMYTHOS)  strcat(w2,"`WY");     // Y
	else if IS_SET(wch->pcdata->council, COUNCIL_HEADCODE)  strcat(w2,"`WC");       // C
	else if IS_SET(wch->pcdata->council, COUNCIL_CODE)  strcat(w2,"`RC");           // C
	else if IS_SET(wch->pcdata->council, COUNCIL_ADMIN)  strcat(w2,"`RA");          // A
	else if IS_SET(wch->pcdata->council, COUNCIL_LAW)  strcat(w2,"`RL");            // L
	else if IS_SET(wch->pcdata->council, COUNCIL_CLAN)  strcat(w2,"`RC");           // N
	else if IS_SET(wch->pcdata->council, COUNCIL_MYTHOS)  strcat(w2,"`RT");			// T
	else if IS_SET(wch->pcdata->council, COUNCIL_REALM)  strcat(w2,"`RR");          // R
	else if IS_SET(wch->pcdata->council, COUNCIL_RP)  strcat(w2,"`RP");             // P
	else if IS_SET(wch->pcdata->council, COUNCIL_SUPPORT)  strcat(w2,"`RS");        // S
	else if IS_SET(wch->pcdata->council, COUNCIL_BALANCE)  strcat(w2,"`RB");        // B
	else if IS_NEWBIE_SUPPORT(wch) strcat(w2, "`SN");	//N
	else strcat(w2, "`R-");

	if (wch->iwizi)  strcat(w3,"`CI");  
	else if (wch->owizi)  strcat(w3,"`CO");  
	else if (wch->invis_level)  strcat(w3,"`CW");  
	else if (wch->incog_level)  strcat(w3,"`RI");  
	else strcat(w3, "`C-");


	if(IS_SET(wch->act, PLR_QUESTER)){
		strcat(w4,"`BQ");
	}else{
		strcat(w4, "`B-");
	}

	// Title & AFK text
	if IS_SET(wch->comm, COMM_AFK){
		if(IS_NULLSTR(wch->pcdata->afk_message)){
			strcat(title,"`xIs `BAFK`Y!`x");
		}else{
			sprintf(title,"`xIs `BAFK`Y!`x %s ",wch->pcdata->afk_message);
		}
	}else if(!IS_NULLSTR(wch->pcdata->title)){
		strcat(title,wch->pcdata->title);
	}else{
		strcat(title," ");
	}

	sprintf(return_buf," `c[%s%s%s%s%s`c]%s %s `x%s`x",

		w0, w1, w2, w3, w4,
		(IS_IMMORTAL(ch) && IS_IMMORTAL(wch) && !IS_SET(wch->comm, COMM_WHOVIS))?"`=\x91":"`x",
		wch->name,
		title);


	return(return_buf);
}
/**************************************************************************/
//-Whoformat Whispers of Times Lost -Ixliam-
/**************************************************************************/
char *whoformat_wotl ( char_data *ch, char_data *wch, bool two_column)
{
	 static char return_buf[MSL*2];
    char const *clss;
	 char bracket_col[10]; // [ colour
    char left_bracket[20]; // L, ! or [ 
    char right_bracket[20]; // ! or ]
    char buf[MSL];
    char buf2[MSL];
    char wizitext[40]; 
	 char incogtext[20];
	 char whoclass[20];

	return_buf[0]='\0'; // clear the initial return string

	char name[MIL];
	{
//	   	if(!IS_NULLSTR( wch->pcdata->pretitle)) {
//			strcpy(name, wch->pcdata->pretitle);
//			strcat(name, FORMATF(" %s", wch->name));
//		}
//		else 
		strcpy(name, wch->name);
		// generate the name displayed
		// put the afk message or title depending on if they are afk
		if(IS_SET(wch->comm, COMM_AFK) && wch->pcdata 
			&& !IS_NULLSTR(wch->pcdata->afk_message))
		{
			strcat(name, FORMATF(" (%s)", wch->pcdata->afk_message));
		}else if(!GAMESETTING3(GAMESET3_WHO_TITLE_DISABLED)){
			// concat the title
			strcat(name, FORMATF(" %s", wch->pcdata->title));
		}
	}

	// Figure out what to print for clss.
	clss="***";
    switch ( wch->level )
    {
		default: clss="***";break;
		case MAX_LEVEL - 0 : clss = "IMP";     break;
		case MAX_LEVEL - 1 : clss = "CRE";     break;
		case MAX_LEVEL - 2 : clss = "SUP";     break;
		case MAX_LEVEL - 3 : clss = "DEI";     break;
		case MAX_LEVEL - 4 : clss = "GUA";     break;
		case MAX_LEVEL - 5 : clss = "IMM";     break;
		case MAX_LEVEL - 6 : clss = "DEM";     break;
		case MAX_LEVEL - 7 : clss = "ANG";     break;
		case MAX_LEVEL - 8 : clss = "AVA";     break;
	}
    
	if(wch->level==ABSOLUTE_MAX_LEVEL && ABSOLUTE_MAX_LEVEL!=MAX_LEVEL){
		if(wch->pcdata && wch->pcdata->who_text && c_str_len(wch->pcdata->who_text)==3){
			clss=wch->pcdata->who_text;
		}else{
			clss="***";
		}
	}

	// alternate 3 tier imm ranking system (IMP, ADM, IMM)
	if(GAMESETTING4(GAMESET4_3TIER_IMMRANKS_IN_WHO)){
		switch ( wch->level )
		{
			case MAX_LEVEL - 0 : clss = "IMP";     break;
			case MAX_LEVEL - 1 : clss = "ADM";     break;
			case MAX_LEVEL - 2 : clss = "ADM";     break;
			case MAX_LEVEL - 3 : clss = "IMM";     break;
			case MAX_LEVEL - 4 : clss = "IMM";     break;
			case MAX_LEVEL - 5 : clss = "IMM";     break;
			case MAX_LEVEL - 6 : clss = "IMM";     break;
			case MAX_LEVEL - 7 : clss = "IMM";     break;
			case MAX_LEVEL - 8 : clss = "IMM";     break;
			default: break; // leave as is
		}
	}

	// push onto morts new/***/clan prefix titles
	if( wch->level<LEVEL_IMMORTAL)
	{
//		if (IS_VAMPIRE(wch) &&
//			(IS_VAMPIRE (ch) || IS_IMMORTAL(ch)
//			|| wch == ch))
//			clss="`#`RVam`^";
//		else
//		if (IS_WEREWOLF(wch) && (IS_WEREWOLF (ch) || IS_IMMORTAL(ch) || wch == ch))
//			clss="`#`CWlf`^";
//		else
		if ((IS_NEWBIE_SUPPORT(ch) || IS_IMMORTAL(ch)) && IS_NEWBIE(wch))
			clss="`#`Gnew`^";
		else
		if (IS_NEWBIE_SUPPORT(wch) && IS_NEWBIE(ch))
			clss="`#`C+++`^";
		else
		if (IS_NEWBIE_SUPPORT(wch) && IS_IMMORTAL(ch))
		{
			clss = class_table[wch->clss].short_name;
			sprintf(whoclass,"`#`G%s`^", clss);
			clss=whoclass;
		}
		else
		if (IS_NEWBIE_SUPPORT(wch) && is_same_clan(ch,wch))
		{
			clss = class_table[wch->clss].short_name;
			sprintf(whoclass,"`#`G%s`^", clss);
			clss=whoclass;
		}
		else
		if (IS_NEWBIE_SUPPORT(wch) && wch==ch)
		{
			clss = class_table[wch->clss].short_name;
			sprintf(whoclass,"`#`S%s`^", clss);
			clss=whoclass;
		}
		else
		if (is_same_clan(ch,wch) || IS_IMMORTAL(ch))
		{
			clss = class_table[wch->clss].short_name;
			sprintf(whoclass,"`#`S%s`^", clss);
			clss=whoclass;
		}
		else
		if (wch==ch)
		{
			clss = class_table[wch->clss].short_name;
			sprintf(whoclass,"`#`S%s`^", clss);
			clss=whoclass;
		}
		else
		if (IS_NEWBIE_SUPPORT(wch) && IS_NEWBIE_SUPPORT(ch))
			clss = "`#`G+++`^";
		else clss = "***";
	}

	if ( wch->level>=LEVEL_IMMORTAL)
	{
        strcpy( bracket_col, "`=\x83");
   }
	else if (IS_IRC(wch))
	{
        strcpy( bracket_col, "`=\x97");
   }
	else
	{
        strcpy( bracket_col, "`=\x96"); 
	}

	// incog level 
	if (IS_IMMORTAL(ch) && get_trust(ch)>= wch->incog_level && wch->incog_level > 0)
	{
		if (wch->incog_level == LEVEL_IMMORTAL)
		{
				sprintf(incogtext, " (Incog)");
		}
		else
		{
			sprintf(incogtext, " (Incog %d)",wch->incog_level );
		}
	}
	else
	{
		incogtext[0]= '\0';
	}

	// wizi level
	wizitext[0]='\0';
	if ( IS_IMMORTAL(ch) )
	{
		char iw[30], ow[30], w[30];

		if(wch->iwizi){
			if(wch->iwizi!=LEVEL_IMMORTAL){
				sprintf(iw,"`#%sI%d`&", IS_OOC(wch)?"`=\x88":"`=\x89", wch->iwizi);
			}else{
				sprintf(iw,"`#%sI`&", IS_OOC(wch)?"`=\x88":"`=\x89");
			}
		}else{
			iw[0]='\0';
		}
		if(wch->owizi){
			if(wch->owizi!=LEVEL_IMMORTAL){
				sprintf(ow,"`#%sO%d`&", IS_OOC(wch)?"`=\x90":"`=\x88", wch->owizi);
			}else{
				sprintf(ow,"`#%sO`&", IS_OOC(wch)?"`=\x90":"`=\x88");
			}
		}else{
			ow[0]='\0';
		}

		if(wch->invis_level)
		{
				if (wch->invis_level == LEVEL_IMMORTAL)
				{
					sprintf(w, "Wizi");
				}
				else
				{
					sprintf(w, "Wizi %d", wch->invis_level);
				}
		}
		else
			{
				w[0]='\0';
			}
                                                      		
		// generate the wizitext
		sprintf(wizitext,"%s%s%s",iw, ow, w);
		if(!IS_NULLSTR(wizitext)){
			sprintf(wizitext,"(%s%s%s)",iw, ow, w);
		}else{
			wizitext[0]='\0';
		}
	}
	
	//  %colour%[%colour
	sprintf(left_bracket,"%s%s%s",
		bracket_col,
		(	IS_SET(wch->act, PLR_LOG) 
			&& !IS_IMMORTAL(wch)
			&& IS_ADMIN(ch)
		)	? 
			("`#`=\x87L`^") // L instead of [
			:(	IS_SET(wch->comm,COMM_NOCHANNELS) 
				&& (IS_IMMORTAL(ch) 
				|| IS_SET(ch->comm, COMM_CANNOCHANNEL)) 
			 )	?"`#`M!`^" :
			(IS_IMMORTAL(ch) && IS_IMMORTAL(wch) 
				&& !IS_SET(wch->comm, COMM_WHOVIS)) ? "<":"[",
			(wch->level>=LEVEL_IMMORTAL)?"`=\x82":"`=\x81"
		);

	sprintf(right_bracket,"%s%s`#%s",
		bracket_col,
		( IS_SET(wch->comm,COMM_NOCHANNELS) // no channeled bracket
		&& (IS_IMMORTAL(ch) 
		|| IS_SET(ch->comm, COMM_CANNOCHANNEL)) )?"`#`=\x86!`^":
			(IS_IMMORTAL(ch) && IS_IMMORTAL(wch) 
				&& !IS_SET(wch->comm, COMM_WHOVIS)) ? ">":"]",
         (IS_IMMORTAL(ch) && IS_IMMORTAL(wch) 
		 && !IS_SET(wch->comm, COMM_WHOVIS)) ? "`#`=\x91" : "");

 // Format it up //idl%[%*%]# %new%i%w%b%a%o%O%i%h%s%Q%C%B%l%o%q%newbie
	sprintf( buf, "%s%s%s%s%s`^%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
		left_bracket,
		clss,
		right_bracket,
		((IS_IMMORTAL(ch)||HAS_IMMTALK_NAME(ch))? (HAS_IMMTALK_NAME(wch)?"`#`=\x92#`&":" ") :" "),
        name,
        (IS_IMMORTAL(ch) && (wch->level>=LEVEL_IMMORTAL) && IS_SET(wch->comm, COMM_NEWBIE_SUPPORT)) ? 
			" (Newbie Support!)" : "",
		incogtext,
		wizitext,
        IS_SET(wch->comm, COMM_BUILDING) ? " [Building]" : "",
        IS_SET(wch->comm, COMM_CODING) ? " [Coding]" : "",
        IS_SET(wch->comm, COMM_AFK) ? " `#`=\x84[AFK]`^" : "",
         (!IS_IMMORTAL(wch) && IS_OOC(wch))? " `#`=^(in OOC)`^" : "",
		 (!IS_IMMORTAL(wch) && wch->in_room && IS_OLCAREA(wch->in_room->area))? " `#`=&(OLC AREA)`x" : "",
         (IS_IMMORTAL(ch) && HAS_CONFIG(wch, CONFIG_ACTIVE))? " `#`=\x93<A>`&" : "",		 
         (IS_IMMORTAL(ch) && IS_AFFECTED(wch, AFF_INVISIBLE))? " (I)" : "",
         (IS_IMMORTAL(ch) && IS_AFFECTED(wch, AFF_HIDE))?      " (H)"  : "",
         (IS_IMMORTAL(ch) && IS_AFFECTED(wch, AFF_SNEAK))?     " (S)" : "",
         (IS_IMMORTAL(ch) && IS_SET(wch->act, PLR_QUESTER))? " `#`=\x95(" "`=\x94" "Q`=\x95)`&" : "",
		 ((IS_IMMORTAL(ch) || HAS_CONFIG(ch, CONFIG_COURTMEMBER))&& HAS_CONFIG(wch, CONFIG_COURTMEMBER))? " `#`=\x95(" "`=\x94" "T`=\x95)`&" : "",
		 ((IS_IMMORTAL(ch) || HAS_CONFIG(ch, CONFIG_BARD_COUNCIL))&& HAS_CONFIG(wch, CONFIG_BARD_COUNCIL))? " `#`=\x95(" "`=\x94" "B`=\x95)`&" : "",
		 (IS_LINKDEAD(wch)?" `#`=\x85[LD]`^":""),
			!HAS_CHANNELOFF(wch, CHANNEL_QUIET)
			&& HAS_CHANNELOFF(wch, CHANNEL_OOC)? " `#`=O(ooc off)`^" : 
				HAS_CHANNELOFF(wch, CHANNEL_CHAT)? " `#`=O(chat off)`^" : "",
		 HAS_CHANNELOFF(wch, CHANNEL_QUIET)? " `#`=\x84(quiet)`^" : "",
		 (( IS_IMMORTAL(ch) || IS_NEWBIE_SUPPORT(ch)) && HAS_CONFIG(wch, CONFIG_NONEWBIE )) ? "`#`=E(no new)`^" : ""  );

	
    // put on the clan details if required 
    if (wch->clan>0)
   {
		if( (is_name( "Coven", wch->clan->notename()) && ( is_same_clan(wch, ch) || IS_IMMORTAL(ch))) 
		    || (is_name( "Coven", ch->clan->notename()) && wch == ch ) ) 
		{

			if (c_str_len(buf)>40)
			{
				sprintf( buf2, "%s `#`W[`RT`rhe `RC`roven`W]`^", buf );
			}
			else
			{
				sprintf( buf2, "%s `#`W[`RT`rhe `RC`roven`W]`^", str_width(buf,40));
			}
		}else 

		if( (is_name( "MoonShadow", wch->clan->notename()) && ( is_same_clan(wch, ch) || IS_IMMORTAL(ch))) 
		    || (is_name( "MoonShadow", ch->clan->notename()) && wch == ch ) ) 
		{

			if (c_str_len(buf)>40)
			{
				sprintf( buf2, "%s `#`W[`CM`Soon`CS`Shadow`W]`^", buf );
			}
			else
			{
				sprintf( buf2, "%s `#`W[`CM`Soon`CS`Shadow`W]`^", str_width(buf,40));
			}
		}else 
			if (c_str_len(buf)>40)
			{
				sprintf( buf2, "%s %s", buf, 
					wch->clan->cwho_name());
			}
			else
			{
				sprintf( buf2, "%s %s", str_width(buf,40), 
					wch->clan->cwho_name());
			}

        strcat(return_buf,buf2);
    }
    else
    {
        strcat(return_buf,buf);
    }

	// reset colour back for next line
	strcat(return_buf,"`x");
	return (return_buf);
}
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/