
   /*
     ,------------------------------------------------------------
     |    Ghostchat for AMX
     |-------------------------------------------------
     | Author:      NetRipper
     |              #Choke @ (irc.)Quakenet(.org)
     |              ghostchat@netripper.tmfweb.nl
     |
     | Description: Plugin to let dead people read what alive people say
     |              or to let dead and alive people chat with eachother.
     |              You can also make only HLTV read chat of the living.
     |              Plugin can be disabled from any console by an admin.
     |
     | Commands:    amx_ghostchat 0 // Plugin disabled
     |              amx_ghostchat 1 // Dead can read living
     |              amx_ghostchat 2 // Dead and living read eachother
     |              amx_ghostchat 3 // Only HLTV can read the living
     |
     | Access:      Everyone can use amx_ghostchat to retrieve status
     |              Admin Level B needed to _change_ ghostchat status
     |              Server  console  access (won't give response but does
   work)
     |
     | Thanks to:   PsychoGuard for his idea of dead reading alive.
     |              [WHO]Them for making the ghostchat plugin for AM.
     |
     | Changes:     Monday 2nd June 2003, v0.4:
     |              - Fixed server crash (!!)
     |              - Changed default to mode 3 (HLTV only)
     |              -    Changed    log   file   to   AMX's   log   files
   (amx/logs/admin%m%d.log)
     |              Wednesday 20th April 2003, v0.3:
     |              - Removed a little bug where lines starting with the
     |               '[' character were ignored by the plugin.
     |              - Added a [G] tag before *ALIVE* or *DEAD* so people
     |                know   it's  the  result  of  a  plugin  (some  get
   confused).
     |              - Added a reponse to any line with [G] in it, so when
     |                people ask what [G] means, they get an automated
     |                response asking to use amx_ghostchat for status.
     |              Tuesday 29th April 2003:
     |              - Everyone can use the amx_ghostchat to get status
     |              - A 3rd mode has been added, 'HLTV can read living'
     |              Sunday 27th April 2003, v0.2:
     |              - Fixed displaying empty messages or msg's with [
     |              - Changed client_print() with a real message, so
     |                color gets added depending on team.
     |              - Fixed bug where HLTV or clients console gets
     |                f*cked due to a missing newline.
     |              Saturday 26th April 2003, v0.1:
     |              - First release
     `-------------------
   */
   #include <amxmod>
   #include <amxmisc>
   // Ghostchat disabled by default
   new ghostchat = 3; // Set to let HLTV see alive chat by default.
   new gmsgSayText;
   new logfilename[256];
   // Return current setting or set new value
   public handle_ghostchat(id,level,cid) {
       // No switches given
       if (read_argc() < 2) {
           new status[55];
           if (ghostchat == 1) {
               copy(status, 55, "Dead can read alive");
           }
           else if (ghostchat == 2) {
               copy(status, 55, "Dead and alive can read eachother");
           }
           else if (ghostchat == 3) {
               copy(status, 55, "HLTV can read chat of the living");
           }
           else {
               copy(status, 55, "Disabled");
           }
           client_print(id,print_console,"[AMX] Ghostchat status: %s (NOT
   TEAMSAY)", status);
           if (cmd_access(id,ADMIN_LEVEL_B,cid,0))
              client_print(id,print_console,"[AMX]    Ghostchat    usage:
   amx_ghostchat  0(disabled),  1(Dead  can read alive), 2(Dead and alive
   can chat), 3(Only HLTV can read alive)");
           return PLUGIN_HANDLED;
       }
       // If you don't have enough rights, you can't change anything
       if (!cmd_access(id,ADMIN_LEVEL_B,cid,0))
           return PLUGIN_HANDLED;

       new arg[2];
       read_argv(1,arg,2);
       if (equal(arg,"0",1)) {
           ghostchat = 0;
           client_print(0,print_chat,"[AMX]  Ghostchat  - Plugin has been
   disabled");
       }
       else if (equal(arg,"1",1)) {
           ghostchat = 1;
           client_print(0,print_chat,"[AMX]  Ghostchat  - Dead people can
   read the chat of the living (NOT TEAMSAY)!");
       }
       else if (equal(arg,"2",1)) {
           ghostchat = 2;
           client_print(0,print_chat,"[AMX]  Ghostchat  - Dead and living
   people can talk to eachother (NOT TEAMSAY)!");
       }
       else if (equal(arg,"3",1)) {
           ghostchat = 3;
           client_print(0,print_chat,"[AMX]  Ghostchat  -  HLTV  can read
   chat of the living (NOT TEAMSAY)!");
       }
       new authid[16],name[32];
       get_user_authid(id,authid,16);
       get_user_name(id,name,32);
       log_to_file(logfilename,"Ghostchat: ^"%s<%d><%s><>^" amx_ghostchat
   %s",name,get_user_userid(id),authid,arg);
       return PLUGIN_HANDLED;
   }
   public handle_say(id) {
       // If plugin is disabled, skip the code
       if (ghostchat <= 0)
          return PLUGIN_CONTINUE;
       // Gather information
       new is_alive = is_user_alive(id);
       new message[129];
       read_argv(1,message,128);
       new name[33];
       get_user_name(id,name,32);
       new player_count = get_playersnum();
       new players[32];
       get_players(players, player_count, "c");
       // Clients sometimes send empty messages, or a message containig a
   '[', ignore those.
       if (equal(message,"")) return PLUGIN_CONTINUE;
       if (equal(message,"[")) return PLUGIN_CONTINUE;
       // Response to a specific query
       if (containi(message,"[G]") != -1)
           client_print(id,print_chat,"[AMX]     Ghostchat     -     Type
   amx_ghostchat in console for current status");

       //  Format  the  messages,  the  %c (2) adds the color. The client
   decides what color
       // it gets by looking at team.
       if  (is_alive) format(message, 127, "%c[G]*ALIVE*%s :    %s^n", 2,
   name, message);
       else  format(message,  127,  "%c[G]*DEAD*%s  :    %s^n",  2, name,
   message);
       // Check all players wether they should receive the message or not
       for (new i = 0; i < player_count; i++) {
         if (is_alive && !is_user_alive(players[i])) {
            // Talking person alive, current receiver dead
            if ((ghostchat == 3 && is_user_hltv(players[i])) || ghostchat
   <= 2) {
                // Either HLTV mode is enabled and current player is HLTV
                // or one of the other modes is enabled...
                message_begin(MSG_ONE,gmsgSayText,{0,0,0},players[i]);
                write_byte(id);
                write_string(message);
                message_end();
            }
         }
         else  if (!is_alive && is_user_alive(players[i]) && ghostchat ==
   2) {
            // Talking person is dead, current receiver alive
            message_begin(MSG_ONE,gmsgSayText,{0,0,0},players[i]);
            write_byte(id);
            write_string(message);
            message_end();
         }
       }
       return PLUGIN_CONTINUE;
   }
   public plugin_init() {
       register_plugin("Ghostchat", "0.3", "NetRipper");
       register_clcmd("say", "handle_say");
       register_concmd("amx_ghostchat", "handle_ghostchat",-1,"<mode>");
       gmsgSayText = get_user_msgid("SayText");
       get_time("addons/amx/logs/admin%m%d.log",logfilename,255)
       return PLUGIN_CONTINUE;
   }
