Petite fonction

Avatar de l’utilisateur
tosh
Messages : 2379
Inscription : 01 sept. 2007, 01:09
Localisation : Quelque part sur la planete Terre.

Petite fonction

Message par tosh »

Bonjour à tous.
Je suis en train de faire une petite fonction pour recevoir un avertissement sonor lorsque quelqu'un marque notre pseudo.
Mais je ne comprends pas du tout comment utiliser les fonctions de sound.c, ça serait juste pour jouer un son sur une courte durée.
(Là j'ai utilisé le bip system, mais j'aimerais un son un peu moins agressif :D )

Voici l'ébauche de ma fonction, qui n'est pas encore terminé :

Code : Tout sélectionner

void highlight(char *text_to_add, Uint8 channel)
{
    if(channel == CHAT_PERSONAL)// Is a PM
    {
        if(strstr(text_to_add, "[MP de") != NULL)
        {
            printf("\a");
            fflush(stdout);
        }   
    }
    else if(channel == CHAT_LOCAL) //Is a local message
    {
        char *c = strchr(text_to_add, ':');
        if(c != NULL && your_actor != NULL)
        {
            if(strstr(c, your_actor->actor_name) != NULL)
            {
                printf("\a");
                fflush(stdout);
            }
        }
    }
    else
    {
        char *c = strchr(text_to_add, ']');
        if(c != NULL && your_actor != NULL)
        {
            if(strstr(c, your_actor->actor_name) != NULL)
            {
                printf("\a");
                fflush(stdout);
            }
        }
    }
}
Elle est appelée dans multiplayers.c, dans le case RAW_TEXT.

Je compte l'améliorer un peu, histoire qu'elle gère les majuscules/minuscules, et qu'on puisse la désactiver simplement.
Merci d'avance.

EDIT : Ah, aussi j'aimerais bien convertir l'id du channel, avec le numéro réel du channel (Par exemple, channel vaux 7 pour le canal 20) pour pouvoir afficher un joli message du type "Machin t'appelle sur le canal X".
Guerrier dans l'âme.

Membre de l'équipe.
Développeur Client & Serveur.

Ackak
Messages : 7348
Inscription : 18 déc. 2005, 19:31

Re: Petite fonction

Message par Ackak »

C'est vrai que la programmation des sons n'est pas évidente.

Je n'ai pas tout regardé, mais je te conseille de te baser sur un son qui peut ressembler (comme le "Window Close") par exemple qui se trouve dans le fichier elwindows.c à la ligne 1559 (sur mon client en tout cas) :

Code : Tout sélectionner

#ifdef NEW_SOUND
                add_sound_object(get_index_for_sound_type_name("Window Close"), 0, 0, 1);
#endif // NEW_SOUND
Il va falloir aussi que tu renseignes le fichier sound/snds_client.xml se trouvant dans le client du jeu et bien sûr avoir un fichier ogg pour que le client le joue.

J'espère que cela va te permettre de te débloquer ;)
Celui qui apprend quelque chose de moi enrichit son savoir sans réduire le mien, tout comme celui qui allume sa chandelle à la mienne se donne de la lumière sans me plonger dans l'obscurité.
-- Thomas Jefferson

Avatar de l’utilisateur
tosh
Messages : 2379
Inscription : 01 sept. 2007, 01:09
Localisation : Quelque part sur la planete Terre.

Re: Petite fonction

Message par tosh »

Merci pour ces précieuses informations!
Ça marche pas mal, mais je ne comprends pas pourquoi le son est associé aux volumes des bruits, et non au volume client alors que dans le fichier sound/snds_client.xml, le type de mon alert2 est bien <type>client</type>.

Voilà ma fonction modifiée :

Code : Tout sélectionner

#ifndef ENGLISH
void highlight(char *text_to_add, Uint8 channel)
{
    if(channel == CHAT_PERSONAL)// Is a PM
    {
        if(strstr(text_to_add, "[MP de") != NULL)
        {
#ifdef NEW_SOUND
            add_sound_object(get_index_for_sound_type_name("alert2"), 0, 0, 1);
#endif    
        }   
    }
    else if(channel == CHAT_LOCAL) //Is a local message
    {
        char *c = strchr(text_to_add, ':');
        if(c != NULL && your_actor != NULL)
        {
            if(strstr(c, your_actor->actor_name) != NULL)
            {
#ifdef NEW_SOUND
                add_sound_object(get_index_for_sound_type_name("alert2"), 0, 0, 1);
#endif    
            }
        }
    }
    else
    {
        char *c = strchr(text_to_add, ']');
        if(c != NULL && your_actor != NULL)
        {
            if(strstr(c, your_actor->actor_name) != NULL)
            {
#ifdef NEW_SOUND
                add_sound_object(get_index_for_sound_type_name("alert2"), 0, 0, 1);
#endif    
            }
        }
    }
}
#endif //ENGLISH
Guerrier dans l'âme.

Membre de l'équipe.
Développeur Client & Serveur.

Répondre