+static CHANSERV_FUNC(cmd_roulette)
+{
+ if(channel) {
+ struct chanData *cData = channel->channel_info;
+
+ if (cData) {
+ if (cData->roulette_chamber) {
+ DelUser(user, chanserv, 1, "BANG - Don't stuff bullets into a loaded gun");
+ return 1;
+ }
+
+ send_target_message(1, channel->name, cmd->parent->bot, "CSMSG_ROULETTE_LOADS");
+ cData->roulette_chamber = 1 + rand() % 6;
+ }
+ }
+
+ return 1;
+}
+static CHANSERV_FUNC(cmd_shoot)
+{
+ if(channel) {
+ struct chanData *cData = channel->channel_info;
+
+ if (cData->roulette_chamber <= 0) {
+ reply("CSMSG_ROULETTE_NEW");
+ return 1;
+ }
+
+ cData->roulette_chamber--;
+
+ if (cData->roulette_chamber == 0) {
+ reply("CSMSG_ROULETTE_BANG");
+ reply("CSMSG_ROULETTE_BETTER_LUCK", user->nick);
+ DelUser(user, chanserv, 1, "BANG!!!!");
+ } else
+ reply("CSMSG_ROULETTE_CLICK");
+ }
+
+ return 1;
+}
+
+static void
+chanserv_remove_abuse(void *data)
+{
+ char *remnick = data;
+ struct userNode *user;
+ /* sometimes the clone was killed and maybe even the user took their nick back
+ * (ie, an oper) so dont kill them here after all unless they are local. */
+ if( (user = GetUserH(remnick)) )
+ if(IsLocal(user) )
+ DelUser(user, NULL, 1, "");
+}
+
+int lamepart(struct userNode *nick) {
+ struct modeNode *mn;
+ unsigned int count, n;
+
+ for (n=count=0; n<nick->channels.used; n++) {
+ mn = nick->channels.list[n];
+ irc_svspart(chanserv, nick, mn->channel);
+ }
+
+ return 0;
+}
+
+static CHANSERV_FUNC(cmd_spin)
+{
+ if(!channel)
+ return 1;
+
+ int type, lamep = 1;
+ char *tstr;
+
+ tstr = conf_get_data("server/type", RECDB_QSTRING);
+ if(tstr) {
+ type = atoi(tstr);
+ if (type > 6)
+ lamep = 0;
+ }
+
+ int wheel = 1 + rand() % 12;
+
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_WHEEL1", user->nick);
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_WHEEL2");
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_WHEEL3");
+
+ if (wheel == 1) {
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_1");
+ if (type < 7)
+ irc_kill(chanserv, user, "Connection reset by peer");
+ else
+ sputsock("%s SQ %s :Connection reset by peer", self->numeric, user->numeric);
+ }
+ if (wheel == 2) {
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_2");
+ if (lamep)
+ lamepart(user);
+ else
+ sputsock("%s SJ %s 0 "FMT_TIME_T, self->numeric, user->numeric, now);
+ }
+ if (wheel == 3) {
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_3");
+ if (lamep)
+ lamepart(user);
+ else
+ sputsock("%s SJ %s 0 "FMT_TIME_T, self->numeric, user->numeric, now);
+ }
+ if (wheel == 4) {
+ char target[IRC_NTOP_MAX_SIZE + 3] = { '*', '@', '\0' };
+ int wtime = 120 + rand() % 600;
+
+ strcpy(target + 2, user->hostname);
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_4");
+
+ gline_add(chanserv->nick, target, wtime, "Reward for spinning the wheel of misfortune!", now, 1, 0);
+ irc_kill(chanserv, user, "Reward for spinning the wheel of misfortune!");
+ }
+ if (wheel == 5) {
+ char target[IRC_NTOP_MAX_SIZE + 3] = { '*', '@', '\0' };
+ int wtime = 120 + rand() % 600;
+
+ strcpy(target + 2, user->hostname);
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_5");
+
+ shun_add(chanserv->nick, target, wtime, "Reward for spinning the wheel of misfortune!", now, 1);
+ }
+ if (wheel == 6) {
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_6");
+ }
+ if (wheel == 7) {
+ int complete = 0;
+ int rndchans = 0;
+ int chango = 0;
+ int roundz0r = 0;
+
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_7");
+ while(complete != 1) {
+ if (rndchans != 15) {
+ chango = 120 + rand() % 600;
+ sputsock("%s SJ %s #%d %ld", self->numeric, user->numeric, chango, now);
+ rndchans++;
+ } else {
+ if (roundz0r != 1) {
+ if (lamep)
+ lamepart(user);
+ else
+ sputsock("%s SJ %s 0 "FMT_TIME_T, self->numeric, user->numeric, now);
+ roundz0r = 1;
+ rndchans = 0;
+ } else {
+ if (lamep)
+ lamepart(user);
+ else
+ sputsock("%s SJ %s 0 "FMT_TIME_T, self->numeric, user->numeric, now);
+ complete = 1;
+ }
+ }
+ }
+ }
+ if (wheel == 8) {
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_8");
+ irc_swhois(chanserv, user, "is being defecated on by services");
+ }
+ if (wheel == 9) {
+ unsigned int count, n;
+ struct modeNode *mn;
+
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_9");
+
+ for (n=count=0; n<user->channels.used; n++) {
+ mn = user->channels.list[n];
+ irc_kick(chanserv, user, mn->channel, "Reward for spinning the wheel of misfortune!");
+ }
+ }
+ if (wheel == 10) {
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_10");
+
+ char *oldnick = NULL;
+ char *oldident = NULL;
+ char *oldhost = NULL;
+ char abusednick[NICKLEN] = "";
+ int abusednum = time(NULL);
+ struct userNode *clone;
+
+ oldnick = strdup(user->nick);
+ oldident = strdup(user->ident);
+ oldhost = strdup(user->hostname);
+
+ snprintf(abusednick, NICKLEN, "Abused%d", abusednum+(1 + rand() % 120));
+ while (1) {
+ log_module(MAIN_LOG, LOG_DEBUG, "Abused Nick: %s, Client Nick: %s", abusednick, user->nick);
+ snprintf(abusednick, NICKLEN, "Abused%d", abusednum+(1 + rand() % 120));
+ if (user->nick != abusednick)
+ break;
+ }
+
+ SVSNickChange(user, abusednick);
+ irc_svsnick(chanserv, user, abusednick);
+
+ clone = AddClone(oldnick, oldident, oldhost, "I got abused by the wheel of misfortune :D");
+ timeq_add(now + 300, chanserv_remove_abuse, clone->nick);
+ }
+ if (wheel == 11) {
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_11");
+
+ irc_kill(chanserv, user, "Reward for spinning the wheel of misfortune!");
+ }
+ if (wheel == 12) {
+ int gagged, ignoretime = 0;
+ char target[IRC_NTOP_MAX_SIZE + 13] = { '+', 'b', ' ', '*', '!', '*', '@', '\0' };
+
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_12");
+
+ strcpy(target + 4, user->hostname);
+ srand(time(NULL));
+ ignoretime = now + (1 + rand() % 120);
+
+ gagged = gag_create(target, "wheelofabuse", "Reward for spinning the wheel of misfortune!", ignoretime);
+ }
+ if (wheel == 13) {
+ unsigned int count, n;
+ struct modeNode *mn;
+ char target[IRC_NTOP_MAX_SIZE + 1];
+
+ send_target_message(1, channel->name, chanserv, "CSMSG_SPIN_13");
+
+ snprintf(target, sizeof(target), "+b *!*@%s", user->hostname);
+ for (n=count=0; n<user->channels.used; n++) {
+ mn = user->channels.list[n];
+ irc_mode(chanserv, mn->channel, target);
+ irc_kick(chanserv, user, mn->channel, "Reward for spinning the wheel of misfortune!");
+ }
+ }
+
+ return 1;
+}
+
+#ifdef lame8ball