Пример #1
0
static void _sync_core(s_gr_core *local, const char *node)
{
    SYNC_INT(local->teams_switched, node, "teams_switched");
    SYNC_INT(local->private, node, "private");
    SYNC_INT(local->can_start, node, "can_start");
    SYNC_INT(local->team_balanced, node, "team_balanced");
    SYNC_INT(local->min_ready_players, node, "min_ready_players");
    SYNC_INT(local->num_players, node, "players");

    {
        const char *r = local->room_name;
        SYNC_STR(local->room_name, node, "room_name");
        if (r != local->room_name)
            xml_deserialize_inplace(&local->room_name);
    }

    char *players = get_info(node, "<players>", "</players>", NULL);

    /* Loop foreach players */
    if (players != NULL)
    {
        const char *m = players;

        list_empty(local->players);

        while ((m = strstr(m, "<player")))
        {
            char *player = get_info(m, "<player", "/>", NULL);

            struct gr_core_player *p =
                calloc(1, sizeof(struct gr_core_player));

            SYNC_STR(p->nickname, player, "nickname");
            SYNC_STR(p->clan_name, player, "clanName");
            SYNC_STR(p->profile_id, player, "profile_id");
            SYNC_STR(p->online_id, player, "online_id");
            SYNC_STR(p->group_id, player, "group_id");
            SYNC_STR(p->region_id, player, "region_id");

            SYNC_INT(p->class_id, player, "class_id");
            SYNC_INT(p->team_id, player, "team_id");
            SYNC_INT(p->status, player, "status");
            SYNC_INT(p->presence, player, "presence");
            SYNC_INT(p->observer, player, "observer");
            SYNC_INT(p->experience, player, "experience");
            SYNC_INT(p->rank, player, "rank");
            SYNC_INT(p->banner.badge, player, "banner_badge");
            SYNC_INT(p->banner.mark, player, "banner_mark");
            SYNC_INT(p->banner.stripe, player, "banner_stripe");

            SYNC_FLT(p->skill, player, "skill");

            list_add(local->players, p);

            free(player);

            ++m;
        }
    }

    free(players);
}
Пример #2
0
static void handle_private_message_(const char *msg_id, const char *msg)
{

    /* Answer #2:
       <iq from='xxxxx@warface/GameClient' type='get'>
        <query xmlns='urn:cryonline:k01'>
         <message from='xxxx' nick='xxxx' message='xxxx'/>
        </query>
       </iq>
     */

    char *message = get_info(msg, "message='", "'", NULL);
    char *nick_from = get_info(msg, "<message from='", "'", NULL);
    char *jid_from = get_info(msg, "<iq from='", "'", NULL);

    /* Deserialize message */

    xml_deserialize_inplace(&message);

    /* Feedback the user what was sent */

    xmpp_ack_message(nick_from, jid_from, message, msg_id);

    /* Determine the correct command */

    if (strstr(message, "leave"))
    {
        cmd_leave();

        xmpp_send_message(nick_from, jid_from, "but whyy :(");
    }

    else if (strstr(message, "ready") || strstr(message, "take"))
    {
        cmd_ready(strstr(message, " "));

        xmpp_send_message(nick_from, jid_from, "go");
    }

    else if (strstr(message, "invite"))
    {
        cmd_invite(nick_from, 0);
    }

    else if (strstr(message, "master"))
    {
        cmd_master(nick_from);

        xmpp_send_message(nick_from, jid_from, "Yep, just a sec.");

    }

    else if (strstr(message, "whois"))
    {
        char *nickname = strchr(message, ' ');

        if (nickname == NULL)
            nickname = nick_from;
        else
            nickname++;

        cmd_whois(nickname, nick_from, jid_from);
    }

    else if (strstr(message, "missions"))
    {
        cmd_missions(nick_from, jid_from);
    }

    else if (strstr(message, "say"))
    {
        cmd_say(strchr(message, ' '));
    }

    else
    {
        int r = rand() % 4;
        const char *answer =
            r == 0 ? "I'm sorry Dave. I'm afraid I can't do that." :
            r == 1 ? "It can only be attributable to human error." :
            r == 2 ? "Just what do you think you're doing, Dave ?" :
            "Dave, stop. Stop, will you ?";

        /* Command not found */
        xmpp_send_message(nick_from, jid_from, answer);
    }

    free(jid_from);
    free(nick_from);
    free(message);
}