コード例 #1
0
ファイル: ct_chat.c プロジェクト: Clever-Boy/chocolate-doom
boolean CT_Responder(event_t * ev)
{
    char *macro;

    int sendto;

    if (!netgame)
    {
        return false;
    }
    if (ev->data1 == KEY_RALT)
    {
        altdown = (ev->type == ev_keydown);
        return false;
    }
    if (ev->data1 == KEY_RSHIFT)
    {
        shiftdown = (ev->type == ev_keydown);
        return false;
    }
    if (gamestate != GS_LEVEL || ev->type != ev_keydown)
    {
        return false;
    }
    if (!chatmodeon)
    {
        sendto = 0;
        if (ev->data1 == key_multi_msg)
        {
            sendto = CT_PLR_ALL;
        }
        else if (ev->data1 == key_multi_msgplayer[0])
        {
            sendto = CT_PLR_BLUE;
        }
        else if (ev->data1 == key_multi_msgplayer[1])
        {
            sendto = CT_PLR_RED;
        }
        else if (ev->data1 == key_multi_msgplayer[2])
        {
            sendto = CT_PLR_YELLOW;
        }
        else if (ev->data1 == key_multi_msgplayer[3])
        {
            sendto = CT_PLR_GREEN;
        }
        else if (ev->data1 == key_multi_msgplayer[4])
        {
            sendto = CT_PLR_PLAYER5;
        }
        else if (ev->data1 == key_multi_msgplayer[5])
        {
            sendto = CT_PLR_PLAYER6;
        }
        else if (ev->data1 == key_multi_msgplayer[6])
        {
            sendto = CT_PLR_PLAYER7;
        }
        else if (ev->data1 == key_multi_msgplayer[7])
        {
            sendto = CT_PLR_PLAYER8;
        }
        if (sendto == 0 || (sendto != CT_PLR_ALL && !playeringame[sendto - 1])
            || sendto == consoleplayer + 1)
        {
            return false;
        }
        CT_queueChatChar(sendto);
        chatmodeon = true;
        return true;
    }
    else
    {
        if (altdown)
        {
            if (ev->data1 >= '0' && ev->data1 <= '9')
            {
                if (ev->data1 == '0')
                {               // macro 0 comes after macro 9
                    ev->data1 = '9' + 1;
                }
                macro = chat_macros[ev->data1 - '1'];
                CT_queueChatChar(KEY_ENTER);    //send old message
                CT_queueChatChar(chat_dest[consoleplayer]);     // chose the dest.
                while (*macro)
                {
                    CT_queueChatChar(toupper(*macro++));
                }
                CT_queueChatChar(KEY_ENTER);    //send it off...
                CT_Stop();
                return true;
            }
        }
        if (ev->data1 == KEY_ENTER)
        {
            CT_queueChatChar(KEY_ENTER);
            usearti = false;
            CT_Stop();
            return true;
        }
        else if (ev->data1 == KEY_ESCAPE)
        {
            CT_queueChatChar(CT_ESCAPE);
            CT_Stop();
            return true;
        }
        else if (ev->data1 == KEY_BACKSPACE)
        {
            CT_queueChatChar(KEY_BACKSPACE);
            return true;
        }
        else if (ValidChatChar(ev->data2))
        {
            CT_queueChatChar(toupper(ev->data2));
            return true;
        }
    }
    return false;
}
コード例 #2
0
ファイル: CT_CHAT.c プロジェクト: elhobbs/heretic3ds
boolean CT_Responder(event_t *ev)
{
	char *macro;

	int sendto;

	if(!netgame)
	{
		return false;
	}
	if(ev->data1 == KEY_LALT || ev->data2 == KEY_RALT)
	{
		altdown = (ev->type == ev_keydown);
		return false;
	}
	if(ev->data1 == KEY_RSHIFT)
	{
		shiftdown = (ev->type == ev_keydown);
		return false;
	}
	if(ev->type != ev_keydown)
	{
		return false;
	}
	if(!chatmodeon)
	{
		sendto = 0;
		if(ev->data1 == CT_KEY_ALL)
		{
			sendto = CT_PLR_ALL;
		}
		else if(ev->data1 == CT_KEY_GREEN)
		{
			sendto = CT_PLR_GREEN;
		}
		else if(ev->data1 == CT_KEY_YELLOW)
		{
			sendto = CT_PLR_YELLOW;
		}
		else if(ev->data1 == CT_KEY_RED)
		{
			sendto = CT_PLR_RED;
		}
		else if(ev->data1 == CT_KEY_BLUE)
		{
			sendto = CT_PLR_BLUE;
		}
		if(sendto == 0 || (sendto != CT_PLR_ALL && !playeringame[sendto-1])
			|| sendto == consoleplayer+1)
		{
			return false;
		}
		CT_queueChatChar(sendto);
		chatmodeon = true;
		return true;
	}
	else
	{
		if(altdown)
		{
			if(ev->data1 >= '0' && ev->data1 <= '9')
			{
				if(ev->data1 == '0')
				{ // macro 0 comes after macro 9
					ev->data1 = '9'+1;
				}
				macro = chat_macros[ev->data1-'1'];
				CT_queueChatChar(KEY_ENTER); //send old message
				CT_queueChatChar(chat_dest[consoleplayer]); // chose the dest.
				while(*macro)
				{
					CT_queueChatChar(toupper(*macro++));
				}
				CT_queueChatChar(KEY_ENTER); //send it off...
				CT_Stop();
				return true;
			}
		}
		if(ev->data1 == KEY_ENTER)
		{
			CT_queueChatChar(KEY_ENTER);
			CT_Stop();
			return true;
		}
		else if(ev->data1 == KEY_ESCAPE)
		{
			CT_queueChatChar(CT_ESCAPE);
			CT_Stop();
			return true;
		}
		else if(ev->data1 >= 'a' && ev->data1 <= 'z')
		{
			CT_queueChatChar(ev->data1-32);
			return true;
		}
		else if(shiftdown)
		{
			if(ev->data1 == '1')
			{
				CT_queueChatChar('!');
				return true;
			}
			else if(ev->data1 == '/')
			{
				CT_queueChatChar('?');
				return true;
			}
		}
		else
		{
			if(ev->data1 == ' ' || ev->data1 == ',' || ev->data1 == '.'
			|| (ev->data1 >= '0' && ev->data1 <= '9') || ev->data1 == '\''
			|| ev->data1 == KEY_BACKSPACE || ev->data1 == '-' || ev->data1 == '=')
			{
				CT_queueChatChar(ev->data1);
				return true;
			}
		}
	}
	return false;
}