Communauté Eggdrop

Version complète : Code serveur Bahamut
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour, je sais que je suis pas dans la bonne section du forum mais j'aurai aimé savoir si une personne pourrai m'aider à corriger le m_mode sur un serveur Bahamut (derniere version bahamut-1.8.6).

Soucis rencontré, quand je suis opérateur, je peux mass mode op/voice/deop/devoice et mode en flood.

J'aimerai qu'en fait, ca ne flood pas, si la personne a un certain mode sur lui ou sur un autre utilisateur et un mode existant sur le salon, qu'il ignore celui-ci et si cas contraire que ca mette le mode en conséquent.

Merci de m'aider :)

Le code ci-dessous:

Code :
int m_mode(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
    int         mcount = 0, chanop=0;
    aChannel   *chptr;
    int subparc = 2;
    
    /* Now, try to find the channel in question */
    if (parc > 1)
    {
        chptr = find_channel(parv[1], NullChn);
        if (chptr == NullChn)
            return m_umode(cptr, sptr, parc, parv);
    }
    else
    {
        sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
                   me.name, parv[0], "MODE");
        return 0;
    }
    
    if (!check_channelname(sptr, (unsigned char *) parv[1]))
        return 0;

    if (MyClient(sptr) && !IsOper(sptr))
    {
        if (is_chan_op(sptr, chptr))
            chanop = 1;
    }
        else
        chanop = 2;
    if (parc < 3)
    {
        *modebuf = *parabuf = '\0';
        modebuf[1] = '\0';
        channel_modes(sptr, modebuf, parabuf, chptr);
        sendto_one(sptr, rpl_str(RPL_CHANNELMODEIS), me.name, parv[0],
                   chptr->chname, modebuf, parabuf);
        sendto_one(sptr, rpl_str(RPL_CREATIONTIME), me.name, parv[0],
                   chptr->chname, chptr->channelts);
        return 0;
    }

    if(IsServer(cptr) && IsDigit(parv[2][0]))
    {
        ts_val modets = atol(parv[2]);
        if(modets != 0 && (modets > chptr->channelts))
            return 0;
        subparc++;
    }

    mcount = set_mode(cptr, sptr, chptr, chanop, parc - subparc, parv + subparc,
                      modebuf, parabuf);

    if (strlen(modebuf) > (size_t) 1)
        switch (mcount)
        {
            case 0:
                break;
            case -1:
                if (MyClient(sptr))
                    sendto_one(sptr,
                           err_str(ERR_CHANOPRIVSNEEDED),
                           me.name, parv[0], chptr->chname);
                else
                    ircstp->is_fake++;
                break;
            default:
                sendto_channel_butserv_me(chptr, sptr,
                                      ":%s MODE %s %s %s", parv[0],
                                      chptr->chname, modebuf,
                                      parabuf);
                sendto_serv_butone(cptr, ":%s MODE %s %ld %s %s", parv[0],
                                   chptr->chname, chptr->channelts, modebuf,
                                   parabuf);
        }
    return 0;
}

Edit Artix : ajout des balises Code