void Cmd_Votemap_f (edict_t * ent, char *t) { char *oldvote; if (!*t) { gi.cprintf (ent, PRINT_HIGH, "You need an argument to the vote command (name of map).\n"); return; } if (level.intermissiontime) { gi.cprintf (ent, PRINT_HIGH, "Mapvote disabled during intermission\n"); return; } // BEGIN Igor[Rock] if (level.time < mapvote_waittime->value) { gi.cprintf (ent, PRINT_HIGH, "Mapvote currently blocked - Please vote again in %d seconds\n", (int) ((float) mapvote_waittime->value + 1.0 - level.time)); } else { // END Igor[Rock] oldvote = ent->client->resp.mapvote; switch (AddVoteToMap (t, ent)) { case 0: gi.cprintf (ent, PRINT_HIGH, "You have voted on map \"%s\"\n", t); if (mv_public->value) gi.bprintf (PRINT_HIGH, "%s voted for \"%s\"\n", ent->client->pers.netname, t); break; case 1: gi.cprintf (ent, PRINT_HIGH, "You have changed your vote to map \"%s\"\n", t); if (mv_public->value) { if (FloodCheck(ent)) break; if(Q_stricmp (t, oldvote)) gi.bprintf (PRINT_HIGH,"%s changed his mind and voted for \"%s\"\n", ent->client->pers.netname, t); else gi.cprintf (ent, PRINT_HIGH, "We heard you the first time!\n"); } break; default: //error gi.cprintf (ent, PRINT_HIGH, "Map \"%s\" is not in the votelist!\n", t); break; } } return; }
static void Votemap(edict_t *ent, const char *mapname) { char *oldvote; int voteWaitTime; if (!use_mapvote->value) { gi.cprintf(ent, PRINT_HIGH, "Map voting is disabled.\n"); return; } if (!*mapname) { MapVoteMenu( ent, NULL ); return; } if (level.intermission_framenum) { gi.cprintf(ent, PRINT_HIGH, "Mapvote disabled during intermission\n"); return; } voteWaitTime = (int)(mapvote_waittime->value * HZ); if (level.realFramenum < voteWaitTime) { gi.cprintf(ent, PRINT_HIGH, "Mapvote currently blocked - Please vote again in %d seconds\n", (voteWaitTime + HZ - level.realFramenum) / HZ ); return; } oldvote = ent->client->resp.mapvote; switch (AddVoteToMap(mapname, ent)) { case 0: gi.cprintf(ent, PRINT_HIGH, "You have voted on map \"%s\"\n", mapname); if (mv_public->value) gi.bprintf(PRINT_HIGH, "%s voted for \"%s\"\n", ent->client->pers.netname, mapname); break; case 1: gi.cprintf(ent, PRINT_HIGH, "You have changed your vote to map \"%s\"\n", mapname); if (mv_public->value && !FloodCheck(ent)) { if (Q_stricmp(mapname, oldvote)) gi.bprintf(PRINT_HIGH, "%s changed his mind and voted for \"%s\"\n", ent->client->pers.netname, mapname); else gi.cprintf(ent, PRINT_HIGH, "We heard you the first time!\n"); } break; default: //error gi.cprintf(ent, PRINT_HIGH, "Map \"%s\" is not in the votelist!\n", mapname); break; } }
void UpdateChanModes(struct Luser *lptr, char *who, struct Channel *cptr, char *modes) { int add; char *tmp, *p; register char ch; struct Luser *userptr; #if defined(NICKSERVICES) && defined(CHANNELSERVICES) int cs_deoped = 0; /* was chanserv deoped? */ #endif char **modeargs; /* arguements to +l/k/o/v modes */ char tempargs[MAXLINE]; int argcnt; /* number of arguements */ int argidx; /* current index in modeargs[] */ #ifndef SAVE_TS char sendstr[MAXLINE]; #endif if (!cptr) return; assert(lptr || who); if (lptr) { SendUmode(OPERUMODE_M, "*** %s: Mode [%s] by %s!%s@%s", cptr->name, modes, lptr->nick, lptr->username, lptr->hostname); putlog(LOG3, "%s: mode change \"%s\" by %s!%s@%s", cptr->name, modes, lptr->nick, lptr->username, lptr->hostname); } else { SendUmode(OPERUMODE_M, "*** %s: Mode [%s] by %s", cptr->name, modes, who); putlog(LOG3, "%s: mode change \"%s\" by %s", cptr->name, modes, who); } if ((tmp = strchr(modes, ' '))) strcpy(tempargs, *(tmp + 1) ? tmp + 1 : ""); else tempargs[0] = '\0'; argcnt = SplitBuf(tempargs, &modeargs); /* * This routine parses the given channel modes and keeps * the corresponding lists correctly updated - also make * sure OperServ and ChanServ remain opped */ add = 0; argidx = (-1); for (tmp = modes; *tmp; ++tmp) { ch = *tmp; if (IsSpace(ch)) break; switch (ch) { case ' ': case '\n': case '\r': break; case '-': { add = 0; break; } case '+': { add = 1; break; } /* * Op/DeOp */ case 'o': { ++argidx; if (argidx >= argcnt) { /* * there are more 'o' flags than there are nicknames, * just break */ break; } if (!(userptr = FindClient(modeargs[argidx]))) break; SetChannelMode(cptr, add, MODE_O, userptr, 0); if (add) { #ifdef STATSERVICES if (lptr) ++lptr->numops; #endif } /* if (add) */ else { if (userptr == Me.osptr) { if (!FloodCheck(cptr, lptr, Me.osptr, 0)) { #ifdef SAVE_TS os_part(cptr); os_join(cptr); #else toserv(":%s MODE %s +o %s\n", n_OperServ, cptr->name, n_OperServ); #endif } if (!lptr) { putlog(LOG1, "%s: %s attempted to deop %s", cptr->name, who, n_OperServ); } else { putlog(LOG1, "%s: %s!%s@%s attempted to deop %s", cptr->name, lptr->nick, lptr->username, lptr->hostname, n_OperServ); } } #if defined(NICKSERVICES) && defined(CHANNELSERVICES) else if (userptr == Me.csptr) { cs_deoped = 1; } #endif /* defined(NICKSERVICES) && defined(CHANNELSERVICES) */ #ifdef STATSERVICES if (lptr) ++lptr->numdops; #endif } /* else if (!add) */ #if defined(NICKSERVICES) && defined(CHANNELSERVICES) cs_CheckModes(lptr, FindChan(cptr->name), !add, MODE_O, userptr); #endif break; } /* case 'o' */ /* * Voice/DeVoice */ case 'v': { ++argidx; if (argidx >= argcnt) break; if (!(userptr = FindClient(modeargs[argidx]))) break; SetChannelMode(cptr, add, MODE_V, userptr, 0); if (add) { #ifdef STATSERVICES if (lptr) ++lptr->numvoices; #endif } else { #ifdef STATSERVICES if (lptr) ++lptr->numdvoices; #endif } /* else if (!add) */ #if defined(NICKSERVICES) && defined(CHANNELSERVICES) cs_CheckModes(lptr, FindChan(cptr->name), !add, MODE_V, userptr); #endif break; } /* case 'v' */ #ifdef HYBRID7 /* HalfOp/DeHalfOp -Janos */ case 'h': { ++argidx; if (argidx >= argcnt) break; if (!(userptr = FindClient(modeargs[argidx]))) break; SetChannelMode(cptr, add, MODE_H, userptr, 0); if (add) { #ifdef STATSERVICES if (lptr) ++lptr->numhops; #endif } else { #ifdef STATSERVICES if (lptr) ++lptr->numdhops; #endif } /* else if (!add) */ #if defined(NICKSERVICES) && defined(CHANNELSERVICES) cs_CheckModes(lptr, FindChan(cptr->name), !add, MODE_H, userptr); #endif break; } /* case 'h'*/ #endif /* HYBRID7 */ /* * Channel limit */ case 'l': { if (add) { ++argidx; if (argidx >= argcnt) break; cptr->limit = atoi(modeargs[argidx]); } else cptr->limit = 0; #if defined(NICKSERVICES) && defined(CHANNELSERVICES) cs_CheckModes(lptr, FindChan(cptr->name), !add, MODE_L, 0); #endif break; } /* case 'l' */ /* * Channel key */ case 'k': { ++argidx; if (argidx >= argcnt) break; #ifndef BLOCK_ALLOCATION if (cptr->key) MyFree(cptr->key); #endif if (add) { #ifdef BLOCK_ALLOCATION strncpy(cptr->key, modeargs[argidx], KEYLEN); cptr->key[KEYLEN] = '\0'; #else cptr->key = MyStrdup(modeargs[argidx]); #endif /* BLOCK_ALLOCATION */ } else { #ifdef BLOCK_ALLOCATION cptr->key[0] = '\0'; #else cptr->key = 0; #endif /* BLOCK_ALLOCATION */ } #if defined(NICKSERVICES) && defined(CHANNELSERVICES) cs_CheckModes(lptr, FindChan(cptr->name), !add, MODE_K, 0); #endif break; } /* case 'k' */ /* * Channel forwarding target */ case 'f': { ++argidx; if (argidx >= argcnt) break; #ifndef BLOCK_ALLOCATION if (cptr->forward) MyFree(cptr->forward); #endif if (add) { #ifdef BLOCK_ALLOCATION strncpy(cptr->forward, modeargs[argidx], CHANNELLEN); cptr->forward[CHANNELLEN] = '\0'; #else cptr->forward = MyStrdup(modeargs[argidx]); #endif /* BLOCK_ALLOCATION */ } else { #ifdef BLOCK_ALLOCATION cptr->forward[0] = '\0'; #else cptr->forward = 0; #endif /* BLOCK_ALLOCATION */ } #if defined(NICKSERVICES) && defined(CHANNELSERVICES) cs_CheckModes(lptr, FindChan(cptr->name), !add, MODE_F, 0); #endif break; } /* case 'f' */ /* * Channel ban */ case 'b': { ++argidx; if (argidx >= argcnt) break; /* if it's a forwarding ban like nick!ident@host!#channel * just drop the forward channel * found by CheeToS -- jilles */ p = strchr(modeargs[argidx], '!'); if (p != NULL) { p = strchr(p + 1, '!'); if (p != NULL) *p = '\0'; } if (add) AddBan(who, cptr, modeargs[argidx]); else DeleteBan(cptr, modeargs[argidx]); if (p != NULL) *p = '!'; break; } /* case 'b' */ #ifdef GECOSBANS /* * Channel deny */ case 'd': { ++argidx; if (argidx >= argcnt) break; if (add) AddGecosBan(who, cptr, modeargs[argidx]); else DeleteGecosBan(cptr, modeargs[argidx]); break; } /* case 'd' */ #endif /* GECOSBANS */ /* * Channel exception */ case 'e': { ++argidx; if (argidx >= argcnt) break; if (add) AddException(who, cptr, modeargs[argidx]); else DeleteException(cptr, modeargs[argidx]); break; } /* case 'e' */ #ifdef HYBRID7 /* Channel invite exception -Janos */ case 'I': { ++argidx; if (argidx >= argcnt) break; if (add) AddInviteException(who, cptr, modeargs[argidx]); else DeleteInviteException(cptr, modeargs[argidx]); break; } /* case 'I' */ #endif /* HYBRID7 */ default: { int modeflag = 0; if (ch == 's') modeflag = MODE_S; else if (ch == 'p') modeflag = MODE_P; else if (ch == 'n') modeflag = MODE_N; else if (ch == 't') modeflag = MODE_T; else if (ch == 'm') modeflag = MODE_M; else if (ch == 'i') modeflag = MODE_I; else if (ch == 'r') modeflag = MODE_R; else if (ch == 'z') modeflag = MODE_Z; else if (ch == 'P') modeflag = MODE_CAPP; #if 0 /* doesn't exist in 1.0.34 */ else if (ch == 'F') modeflag = MODE_CAPF; #endif else if (ch == 'Q') modeflag = MODE_CAPQ; #ifdef HYBRID7 else if (ch == 'a') modeflag = MODE_A; #endif else if (ch == 'c') modeflag = MODE_C; else if (ch == 'g') modeflag = MODE_G; else if (ch == 'L') modeflag = MODE_CAPL; else if (ch == 'R') modeflag = MODE_CAPR; if (modeflag) { if (add) cptr->modes |= modeflag; else cptr->modes &= ~modeflag; } #if defined(NICKSERVICES) && defined(CHANNELSERVICES) if (modeflag) cs_CheckModes(lptr, FindChan(cptr->name), !add, modeflag, 0); #endif break; } /* default: */ } /* switch (*tmp) */ } /* for (tmp = modes; *tmp; ++tmp) */ MyFree(modeargs); #if defined(NICKSERVICES) && defined(CHANNELSERVICES) if ((cs_deoped) && (!FloodCheck(cptr, lptr, Me.csptr, 0))) { /* reop ChanServ */ #ifdef SAVE_TS cs_part(cptr); cs_join(FindChan(cptr->name)); #else toserv(":%s MODE %s +o %s\n", n_ChanServ, cptr->name, n_ChanServ); #endif if (!lptr) putlog(LOG1, "%s: %s attempted to deop %s", cptr->name, who, n_ChanServ); else putlog(LOG1, "%s: %s!%s@%s attempted to deop %s", cptr->name, lptr->nick, lptr->username, lptr->hostname, n_ChanServ); } #endif /* defined(NICKSERVICES) && defined(CHANNELSERVICES) */ } /* UpdateChanModes() */