/* vi: set ts=4 sw=4 ai: */
/*
* ct_ignore.c
*
* Lotos v1.2.3 : (c) 1999-2003 Pavol Hluchy (Lopo)
* last update : 30.1.2003
* email : lotos@losys.sk
* homepage : lotos.losys.sk
*/
#ifndef __CT_IGNORE_C__
#define __CT_IGNORE_C__ 1
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "define.h"
#include "prototypes.h"
#include "obj_ur.h"
#include "ct_ignore.h"
#include "comvals.h"
#include "val_ign.h"
/*** Switch ignoring all on and off ***/
void toggle_ignall(UR_OBJECT user)
{
set_crash();
if (!user->ignore.all) {
write_user(user,"You are now ignoring everyone.\n");
if (user->vis) vwrite_room_except(user->room,user,"%s~RS is now ignoring everyone.\n",user->recap);
else vwrite_room_except(user->room,user,"%s~RS is now ignoring everyone.\n",invisname);
user->ignore.all=1;
return;
}
write_user(user,"You will now hear everyone again.\n");
if (user->vis) vwrite_room_except(user->room,user,"%s~RS is listening again.\n",user->recap);
else vwrite_room_except(user->room,user,"%s~RS is listening again.\n",invisname);
user->ignore.all=0;
}
/* displays what the user is currently listening to/ignoring */
void show_ignlist(UR_OBJECT user)
{
set_crash();
write_user(user, ascii_tline);
if (user->ignore.all) {
write_user(user,"~CT|~RS Momentalne ignorujes ~OL~FRvsetko~RS ~CT|\n");
write_user(user, ascii_bline);
return;
}
vwrite_user(user,"~CT|~RS Ignoring shouts : ~OL%-3s~RS Ignoring tells : ~OL%-3s~RS Ignoring logons : ~OL%-3s~RS ~CT|\n", noyes2[user->ignore.shouts],noyes2[user->ignore.tells],noyes2[user->ignore.logons]);
vwrite_user(user,"~CT|~RS Ignoring pictures : ~OL%-3s~RS Ignoring greets : ~OL%-3s~RS Ignoring beeps : ~OL%-3s~RS ~CT|\n", noyes2[user->ignore.pics],noyes2[user->ignore.greets],noyes2[user->ignore.beeps]);
if (user->level>=WIZ) vwrite_user(user,"~CT|~RS Ignoring wiztells : ~OL%-3s~RS Ign. transports : ~OL%-3s~RS Ignoring funs : ~OL%-3s~RS ~CT|\n", noyes2[user->ignore.wiz], noyes2[user->ignore.transp], noyes2[user->ignore.funs]);
else vwrite_user(user,"~CT|~RS Ign. transports : ~OL%-3s~RS Ignoring funs : ~OL%-3s~RS ~CT|\n", noyes2[user->ignore.transp], noyes2[user->ignore.funs]);
write_user(user, ascii_bline);
}
/*** set to ignore/listen to a user ***/
void set_igusers(UR_OBJECT user)
{
UR_OBJECT u;
int i=0;
set_crash();
if (word_count<3) {
show_igusers(user);
return;
}
if (!(u=get_user_name(user,word[2]))) {
write_user(user,notloggedon);
return;
}
if (user==u) {
write_user(user,"Nemozes ignorovat seba !\n");
return;
}
for (i=0; i<MAX_IGNORES; ++i) {
if (!strcmp(user->ignoreuser[i],u->name)) {
vwrite_user(user,"You once again listen to %s\n",user->ignoreuser[i]);
user->ignoreuser[i][0]='\0';
return;
}
if (!user->ignoreuser[i][0]) {
strcpy(user->ignoreuser[i],u->name);
vwrite_user(user,"You will now ignore tells from %s\n",user->ignoreuser[i]);
return;
}
}
write_user(user,"You have ignored the maximum amount of users already.\n");
}
/*** Allows a user to listen to everything again ***/
void user_listen(UR_OBJECT user)
{
int yes=0;
set_crash();
if (user->ignore.all) {
user->ignore.all=0;
yes=1;
}
if (user->ignore.tells) {
user->ignore.tells=0;
yes=1;
}
if (user->ignore.shouts) {
user->ignore.shouts=0;
yes=1;
}
if (user->ignore.pics) {
user->ignore.pics=0;
yes=1;
}
if (user->ignore.logons) {
user->ignore.logons=0;
yes=1;
}
if (user->ignore.wiz) {
user->ignore.wiz=0;
yes=1;
}
if (user->ignore.greets) {
user->ignore.greets=0;
yes=1;
}
if (user->ignore.beeps) {
user->ignore.beeps=0;
yes=1;
}
if (user->ignore.transp) {
user->ignore.transp=0;
yes=1;
}
if (user->ignore.funs) {
user->ignore.funs=0;
yes=1;
}
if (yes) {
write_user(user,"You listen to everything again.\n");
if (user->vis) {
vwrite_room_except(user->room,user,"%s is now listening to you all again.\n",user->name);
}
return;
}
write_user(user,"You are already listening to everything.\n");
}
void set_ign_word(UR_OBJECT user)
{
char *pp;
set_crash();
if (word_count<3) {
if (user->ign_word!=NULL)
vwrite_user(user, "Teraz ignorujes slovo '%s'.\n", user->ign_word);
else vwrite_user(user, "Teraz neignorujes ziadne slovo.\n");
return;
}
if (user->ign_word) {
if (!strcmp(word[2], "-cancel")) {
free(user->ign_word);
user->ign_word=NULL;
write_user(user, "Odteraz neignorujes ziadne slovo.\n");
return;
}
pp=(char *)realloc(user->ign_word, strlen(word[2])+1);
if (pp!=NULL) {
user->ign_word=NULL;
vwrite_user(user, "Odteraz ignorujes slovo '%s'\n", word[2]);
user->ign_word=pp;
strcpy(user->ign_word, word[2]);
}
else {
write_user(user, "~FR~OLCHYBA~RS: nemozem realokovat pamat !\n");
write_user(user, "Doterajsie slovo nebolo zmenene !\n");
write_syslog(ERRLOG, 1, "pri alokacii pamate v set_ign_word() pre %s, %s\n",
user->name, word[3]);
}
return;
}
if (!strcmp(word[2], "off")) {
write_user(user, "Ved neignorujes ziadne slovo !\n");
return;
}
user->ign_word=strdup(word[2]);
vwrite_user(user, "Odteraz ignorujes slovo '%s'.\n", user->ign_word);
}
void set_ignores(UR_OBJECT user)
{
int i=0, ignattrval=-1;
set_crash();
if (word_count<2) goto IGN_JUMP;
strtolower(word[1]);
while (ignstr[i].type[0]!='*') {
if (!strcmp(ignstr[i].type, word[1])) {
ignattrval=i;
break;
}
++i;
}
IGN_JUMP:
if (ignattrval==-1) {
i=0;
write_user(user, "Polozky, ktore mozes ignorovat:\n");
while (ignstr[i].type[0]!='*') {
if (i!=IGN_WIZ || user->level>=WIZ)
vwrite_user(user, "~FT%s~RS : %s\n", ignstr[i].type, ignstr[i].desc);
i++;
}
}
write_user(user, "\n");
switch (ignattrval) {
case IGN_SHOW:
show_ignlist(user);
return;
case IGN_ALL:
toggle_ignall(user);
return;
case IGN_TELLS:
switch(user->ignore.tells) {
case 0: user->ignore.tells=1;
write_user(user,"You will now ignore tells.\n");
break;
case 1: user->ignore.tells=0;
write_user(user,"You will now hear tells.\n");
break;
}
return;
case IGN_SHOUTS:
switch(user->ignore.shouts) {
case 0: user->ignore.shouts=1;
write_user(user,"You will now ignore shouts.\n");
break;
case 1: user->ignore.shouts=0;
write_user(user,"You will now hear shouts.\n");
break;
}
return;
case IGN_PICS:
switch(user->ignore.pics) {
case 0: user->ignore.pics=1;
write_user(user,"You will now ignore pictures.\n");
break;
case 1: user->ignore.pics=0;
write_user(user,"You will now see pictures.\n");
break;
}
return;
case IGN_LOGONS:
switch(user->ignore.logons) {
case 0: user->ignore.logons=1;
write_user(user,"You will now ignore all logons and logoffs.\n");
break;
case 1: user->ignore.logons=0;
write_user(user,"You will now see all logons and logoffs.\n");
break;
}
return;
case IGN_WIZ:
if (user->level<WIZ) {
write_user(user, "Nemas na to level !\n");
return;
}
switch(user->ignore.wiz) {
case 0: user->ignore.wiz=1;
write_user(user,"You will now ignore all wiztells and wizemotes.\n");
break;
case 1: user->ignore.wiz=0;
write_user(user,"You will now listen to all wiztells and wizemotes.\n");
break;
}
return;
case IGN_GREETS:
switch(user->ignore.greets) {
case 0: user->ignore.greets=1;
write_user(user,"You will now ignore all greets.\n");
break;
case 1: user->ignore.greets=0;
write_user(user,"You will now see all greets.\n");
break;
}
return;
case IGN_BEEPS:
switch(user->ignore.beeps) {
case 0: user->ignore.beeps=1;
write_user(user,"You will now ignore all beeps from users.\n");
break;
case 1: user->ignore.beeps=0;
write_user(user,"You will now hear all beeps from users.\n");
break;
}
return;
case IGN_TRANSP:
switch(user->ignore.transp) {
case 0: user->ignore.transp=1;
write_user(user,"You will now ignore all transports.\n");
break;
case 1: user->ignore.transp=0;
write_user(user,"You will now hear all transports.\n");
break;
}
return;
case IGN_USER:
set_igusers(user);
return;
case IGN_WORD:
set_ign_word(user);
return;
case IGN_FUNS:
switch(user->ignore.funs) {
case 0: user->ignore.funs=1;
write_user(user,"You will now ignore funs.\n");
break;
case 1: user->ignore.funs=0;
write_user(user,"You will now hear funs.\n");
break;
}
return;
}
}
#endif /* __CT_IGNORE_C__ */