05/04/2010, 16:12
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:
Edit Artix : ajout des balises Code
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