Code serveur Bahamut
#1
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
  Répondre   Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)