Русское сообщество по скриптингу

FakeIP

Утвержденные плагины для AMX Mod X администратором/модератором форума.

Модератор: Leonidddd

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только работоспособных плагинов для AMX Mod X. Новые плагины нужно выкладывать в разделе "Новые плагины".

Re: FakeIP

Сообщение RevCrew » 03 мар 2016, 20:54

Mistrick, что значит
Видно же дублирование функций.
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: FakeIP

Сообщение Mistrick » 03 мар 2016, 21:06

Найди отличия :-)
Код: Выделить всё
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <ColorChat>

#define PLUGIN "FakeIP"
#define VERSION "1.0"
#define AUTHOR "RevCrew"

const MAX_IP_FAKES = 4
const TIME 
= 1440
const IP_SIZE 
= 18 // Lyshe bol'she 4em men'she

new const PREFIX[] = "FakeIP"

new Trie:g_trie;

#define LOG_FILE "addons/amxmodx/logs/FakeIP.log"

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    g_trie = TrieCreate();
}
public plugin_end()
    TrieDestroy(g_trie);

public client_connect(id)
{
    static ip[IP_SIZE]; get_user_ip(id, ip, sizeof(ip) - 1, .without_port=1)

    new cell = 1;
    if(TrieGetCell(g_trie, ip, cell))
    {
        if(++cell > MAX_IP_FAKES)
        {
            client_print_color(0, RED, "^1[^3%s^1] IP [^3%s^1] banned for [^3%d^1] | Reason: [^4Limit IP Reached^1]",PREFIX, ip, TIME)
            log_to_file(LOG_FILE,"[%s] IP %s banned for %d.",PREFIX, ip, TIME)
            server_cmd("addip %d %s; wait;wait; writeip",TIME, ip)
            return;
        }
    }
    TrieSetCell(g_trie, ip, cell);
}

public client_disconnect(id)
{
    static ip[IP_SIZE]; get_user_ip(id, ip, sizeof(ip) - 1, .without_port=1);
    static cell
    if
(TrieGetCell(g_trie, ip, cell))
    {
        if(--cell > 0)
        {
            TrieSetCell(g_trie, ip, cell);
        }
        else
        
{
            TrieDeleteKey(g_trie, ip);
        }
    }
}
 
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: FakeIP

Сообщение RevCrew » 03 мар 2016, 21:42

Mistrick, отличия нашел, но разницы нету, новичкам даже более понятно будет :-)
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: FakeIP

Сообщение RevCrew » 04 мар 2016, 22:10

Fedcomp писал(а):Какой будет окончательный вариант?

Fedcomp, пусть будет вариант от Mistrick, он мне нравится больше :-)
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: FakeIP

Сообщение Fedcomp » 04 мар 2016, 22:14

Сильно в код не вглядывался, но утвердил
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: FakeIP

Сообщение djmelok » 04 мар 2016, 22:21

Fedcomp писал(а):
Сильно в код не вглядывался, но утвердил


Компилятор ругается на 37 строку: client_print_color, не понимает что это такое. Есть аналог этой строки ?
Аватара пользователя
djmelok
 
Сообщения: 168
Зарегистрирован: 13 ноя 2013, 02:41
Благодарил (а): 52 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: PAWN
С++\С#

Re: FakeIP

Сообщение RevCrew » 04 мар 2016, 22:35

инклуд чата, закрепи его тож

Код: Выделить всё
#if defined _colorchat_included
   #endinput
#endif
#define _colorchat_included

/* ColorChat Support */
#define NORMAL   DontChange
#define GREEN   GREY
#define RED      Red
#define BLUE   Blue
#define GREY   Grey
#define ColorChat client_print_color

#define MAX_TRANSLATION_LENGTH 2048

enum {
   DontChange = 0,
   Grey = -1,
   Red = -2,
   Blue = -3
};

#define print_team_default  DontChange
#define print_team_grey     Grey
#define print_team_red      Red
#define print_team_blue     Blue

stock client_print_color(id, sender, const fmt[], any:...)
{
   // check if id is different from 0
   if (id && !is_user_connected(id))
   {
      return 0;
   }

   if (sender < Blue || sender > 32)
   {
      sender = DontChange;
   }
   else if (sender < DontChange)
   {
      sender = -sender + 32; // align indexes to the TeamInfo ones
   }

   static const szTeamName[][] =
   {
      "",
      "TERRORIST",
      "CT"
   };

   new szMessage[191];

   new iParams = numargs();

   // Specific player code
   if (id)
   {
      if (iParams == 3)
      {
         copy(szMessage, charsmax(szMessage), fmt); // copy so message length doesn't exceed critical 192 value
      }
      else
      {
         vformat(szMessage, charsmax(szMessage), fmt, 4);
      }

      if (sender > (32 - Grey))
      {
         if (sender > (32 - Blue))
         {
            sender = id;
         }
         else
         {
            _CC_TeamInfo(id, sender, szTeamName[sender - (32 - Grey)]);
         }
      }
      _CC_SayText(id, sender, szMessage);
   }

   // Send message to all players
   else
   {
      // Figure out if at least 1 player is connected
      // so we don't execute useless useless code if not
      new iPlayers[32], iNum;
      get_players(iPlayers, iNum, "ch");
      if (!iNum)
      {
         return 0;
      }

      new iMlNumber, i, j;
      new Array:aStoreML = ArrayCreate();
      if (iParams >= 5) // ML can be used
      {
         for (j = 3; j < iParams; j++)
         {
            // retrieve original param value and check if it's LANG_PLAYER value
            if (getarg(j) == LANG_PLAYER)
            {
               i = 0;
               // as LANG_PLAYER == -1, check if next parm string is a registered language translation
               while ((szMessage[i] = getarg(j + 1, i++))) {}
               if (GetLangTransKey(szMessage) != TransKey_Bad)
               {
                  // Store that arg as LANG_PLAYER so we can alter it later
                  ArrayPushCell(aStoreML, j++);

                  // Update ML array saire so we'll know 1st if ML is used,
                  // 2nd how many args we have to alterate
                  iMlNumber++;
               }
            }
         }
      }

      // If arraysize == 0, ML is not used
      // we can only send 1 MSG_ALL message if sender != 0
      if (!iMlNumber)
      {
         if (iParams == 3)
         {
            copy(szMessage, charsmax(szMessage), fmt);
         }
         else
         {
            vformat(szMessage, charsmax(szMessage), fmt, 4);
         }
         if (0 < sender < (32 - Blue)) // if 0 is passed, need to loop
         {
            if (sender > (32 - Grey))
            {
               _CC_TeamInfo(0, sender, szTeamName[sender - (32 - Grey)]);
            }
            _CC_SayText(0, sender, szMessage);
            return 1;
         }
      }

      if (sender > (32 - Blue))
      {
         sender = 0; // use receiver index
      }

      for (--iNum; iNum >= 0; iNum--)
      {
         id = iPlayers[iNum];

         if (iMlNumber)
         {
            for (j = 0; j < iMlNumber; j++)
            {
               // Set all LANG_PLAYER args to player index ( = id )
               // so we can format the text for that specific player
               setarg(ArrayGetCell(aStoreML, j), _, id);
            }

            // format string for specific player
            vformat(szMessage, charsmax(szMessage), fmt, 4);
         }

         if (sender > (32 - Grey))
         {
            _CC_TeamInfo(id, sender, szTeamName[sender - (32 - Grey)]);
         }
         _CC_SayText(id, sender, szMessage);
      }

      ArrayDestroy(aStoreML);
   }
   return 1;
}

stock _CC_TeamInfo(iReceiver, iSender, szTeam[])
{
   static iTeamInfo = 0;
   if (!iTeamInfo)
   {
      iTeamInfo = get_user_msgid("TeamInfo");
   }
   message_begin(iReceiver ? MSG_ONE : MSG_ALL, iTeamInfo, _, iReceiver);
   write_byte(iSender);
   write_string(szTeam);
   message_end();
}

stock _CC_SayText(iReceiver, iSender, szMessage[])
{
   static iSayText = 0;
   if (!iSayText)
   {
      iSayText = get_user_msgid("SayText");
   }

   // Prevent sending format and localization strings via chat
   for (new i = 0; i < 192; i++)
   {
      if (szMessage[i] == 0) break;
      if (szMessage[i] == '%' ||
         szMessage[i] == '#')
         szMessage[i] = ' ';
   }
   
   message_begin(iReceiver ? MSG_ONE : MSG_ALL, iSayText, _, iReceiver);
   write_byte(iSender ? iSender : iReceiver);
   if (szMessage[0] > 4)
   {
      write_byte(1);
      szMessage[192 - 2 - 1] = 0;   // Two write_byte + string terminator
      write_string(szMessage);
   }
   else
   {
      szMessage[192 - 1 - 1] = 0;   // One write_byte + string terminator
      write_string(szMessage);
   }
   message_end();
}

new _translation_szBuffer[MAX_TRANSLATION_LENGTH];

stock register_dictionary_colored(const filename[])
{
   if (!register_dictionary(filename))
   {
      return 0;
   }

   new szFileName[256];
   get_localinfo("amxx_datadir", szFileName, charsmax(szFileName));
   format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename);
   new fp = fopen(szFileName, "rt");
   if (!fp)
   {
      log_amx("Failed to open %s", szFileName);
      return 0;
   }

   new szLang[3], szKey[64], TransKey:iKey;

   while (!feof(fp))
   {
      fgets(fp, _translation_szBuffer, charsmax(_translation_szBuffer));
      trim(_translation_szBuffer);

      if (_translation_szBuffer[0] == '[')
      {
         strtok(_translation_szBuffer[1], szLang, charsmax(szLang), _translation_szBuffer, 1, ']');
      }
      else if (_translation_szBuffer[0])
      {
         strbreak(_translation_szBuffer, szKey, charsmax(szKey), _translation_szBuffer, charsmax(_translation_szBuffer));
         iKey = GetLangTransKey(szKey);
         if (iKey != TransKey_Bad)
         {
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!g", "^4");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!t", "^3");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!n", "^1");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^4", "^4");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^3", "^3");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^1", "^1");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^n", "^n");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^t", "^t");
            AddTranslation(szLang, iKey, _translation_szBuffer[2]);
         }
      }
   }

   fclose(fp);
   return 1;
}

/* ML from AMXX 1.8.3 support */
#define register_dictionary register_dictionary_colored
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: FakeIP

Сообщение djmelok » 04 мар 2016, 23:06

RevCrew писал(а):инклуд чата, закрепи его тож

Код: Выделить всё
#if defined _colorchat_included
   #endinput
#endif
#define _colorchat_included

/* ColorChat Support */
#define NORMAL   DontChange
#define GREEN   GREY
#define RED      Red
#define BLUE   Blue
#define GREY   Grey
#define ColorChat client_print_color

#define MAX_TRANSLATION_LENGTH 2048

enum {
   DontChange = 0,
   Grey = -1,
   Red = -2,
   Blue = -3
};

#define print_team_default  DontChange
#define print_team_grey     Grey
#define print_team_red      Red
#define print_team_blue     Blue

stock client_print_color(id, sender, const fmt[], any:...)
{
   // check if id is different from 0
   if (id && !is_user_connected(id))
   {
      return 0;
   }

   if (sender < Blue || sender > 32)
   {
      sender = DontChange;
   }
   else if (sender < DontChange)
   {
      sender = -sender + 32; // align indexes to the TeamInfo ones
   }

   static const szTeamName[][] =
   {
      "",
      "TERRORIST",
      "CT"
   };

   new szMessage[191];

   new iParams = numargs();

   // Specific player code
   if (id)
   {
      if (iParams == 3)
      {
         copy(szMessage, charsmax(szMessage), fmt); // copy so message length doesn't exceed critical 192 value
      }
      else
      {
         vformat(szMessage, charsmax(szMessage), fmt, 4);
      }

      if (sender > (32 - Grey))
      {
         if (sender > (32 - Blue))
         {
            sender = id;
         }
         else
         {
            _CC_TeamInfo(id, sender, szTeamName[sender - (32 - Grey)]);
         }
      }
      _CC_SayText(id, sender, szMessage);
   }

   // Send message to all players
   else
   {
      // Figure out if at least 1 player is connected
      // so we don't execute useless useless code if not
      new iPlayers[32], iNum;
      get_players(iPlayers, iNum, "ch");
      if (!iNum)
      {
         return 0;
      }

      new iMlNumber, i, j;
      new Array:aStoreML = ArrayCreate();
      if (iParams >= 5) // ML can be used
      {
         for (j = 3; j < iParams; j++)
         {
            // retrieve original param value and check if it's LANG_PLAYER value
            if (getarg(j) == LANG_PLAYER)
            {
               i = 0;
               // as LANG_PLAYER == -1, check if next parm string is a registered language translation
               while ((szMessage[i] = getarg(j + 1, i++))) {}
               if (GetLangTransKey(szMessage) != TransKey_Bad)
               {
                  // Store that arg as LANG_PLAYER so we can alter it later
                  ArrayPushCell(aStoreML, j++);

                  // Update ML array saire so we'll know 1st if ML is used,
                  // 2nd how many args we have to alterate
                  iMlNumber++;
               }
            }
         }
      }

      // If arraysize == 0, ML is not used
      // we can only send 1 MSG_ALL message if sender != 0
      if (!iMlNumber)
      {
         if (iParams == 3)
         {
            copy(szMessage, charsmax(szMessage), fmt);
         }
         else
         {
            vformat(szMessage, charsmax(szMessage), fmt, 4);
         }
         if (0 < sender < (32 - Blue)) // if 0 is passed, need to loop
         {
            if (sender > (32 - Grey))
            {
               _CC_TeamInfo(0, sender, szTeamName[sender - (32 - Grey)]);
            }
            _CC_SayText(0, sender, szMessage);
            return 1;
         }
      }

      if (sender > (32 - Blue))
      {
         sender = 0; // use receiver index
      }

      for (--iNum; iNum >= 0; iNum--)
      {
         id = iPlayers[iNum];

         if (iMlNumber)
         {
            for (j = 0; j < iMlNumber; j++)
            {
               // Set all LANG_PLAYER args to player index ( = id )
               // so we can format the text for that specific player
               setarg(ArrayGetCell(aStoreML, j), _, id);
            }

            // format string for specific player
            vformat(szMessage, charsmax(szMessage), fmt, 4);
         }

         if (sender > (32 - Grey))
         {
            _CC_TeamInfo(id, sender, szTeamName[sender - (32 - Grey)]);
         }
         _CC_SayText(id, sender, szMessage);
      }

      ArrayDestroy(aStoreML);
   }
   return 1;
}

stock _CC_TeamInfo(iReceiver, iSender, szTeam[])
{
   static iTeamInfo = 0;
   if (!iTeamInfo)
   {
      iTeamInfo = get_user_msgid("TeamInfo");
   }
   message_begin(iReceiver ? MSG_ONE : MSG_ALL, iTeamInfo, _, iReceiver);
   write_byte(iSender);
   write_string(szTeam);
   message_end();
}

stock _CC_SayText(iReceiver, iSender, szMessage[])
{
   static iSayText = 0;
   if (!iSayText)
   {
      iSayText = get_user_msgid("SayText");
   }

   // Prevent sending format and localization strings via chat
   for (new i = 0; i < 192; i++)
   {
      if (szMessage[i] == 0) break;
      if (szMessage[i] == '%' ||
         szMessage[i] == '#')
         szMessage[i] = ' ';
   }
   
   message_begin(iReceiver ? MSG_ONE : MSG_ALL, iSayText, _, iReceiver);
   write_byte(iSender ? iSender : iReceiver);
   if (szMessage[0] > 4)
   {
      write_byte(1);
      szMessage[192 - 2 - 1] = 0;   // Two write_byte + string terminator
      write_string(szMessage);
   }
   else
   {
      szMessage[192 - 1 - 1] = 0;   // One write_byte + string terminator
      write_string(szMessage);
   }
   message_end();
}

new _translation_szBuffer[MAX_TRANSLATION_LENGTH];

stock register_dictionary_colored(const filename[])
{
   if (!register_dictionary(filename))
   {
      return 0;
   }

   new szFileName[256];
   get_localinfo("amxx_datadir", szFileName, charsmax(szFileName));
   format(szFileName, charsmax(szFileName), "%s/lang/%s", szFileName, filename);
   new fp = fopen(szFileName, "rt");
   if (!fp)
   {
      log_amx("Failed to open %s", szFileName);
      return 0;
   }

   new szLang[3], szKey[64], TransKey:iKey;

   while (!feof(fp))
   {
      fgets(fp, _translation_szBuffer, charsmax(_translation_szBuffer));
      trim(_translation_szBuffer);

      if (_translation_szBuffer[0] == '[')
      {
         strtok(_translation_szBuffer[1], szLang, charsmax(szLang), _translation_szBuffer, 1, ']');
      }
      else if (_translation_szBuffer[0])
      {
         strbreak(_translation_szBuffer, szKey, charsmax(szKey), _translation_szBuffer, charsmax(_translation_szBuffer));
         iKey = GetLangTransKey(szKey);
         if (iKey != TransKey_Bad)
         {
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!g", "^4");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!t", "^3");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "!n", "^1");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^4", "^4");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^3", "^3");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^1", "^1");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^n", "^n");
            replace_all(_translation_szBuffer, charsmax(_translation_szBuffer), "^^t", "^t");
            AddTranslation(szLang, iKey, _translation_szBuffer[2]);
         }
      }
   }

   fclose(fp);
   return 1;
}

/* ML from AMXX 1.8.3 support */
#define register_dictionary register_dictionary_colored


Спасибо, все получилось :thumbs_up
Аватара пользователя
djmelok
 
Сообщения: 168
Зарегистрирован: 13 ноя 2013, 02:41
Благодарил (а): 52 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: PAWN
С++\С#

Re: FakeIP

Сообщение Fedcomp » 05 мар 2016, 01:03

Под 1.8.3 (dev ветка) не скомпилировалось. Но он еще не вышел так что проблемы не вижу. Скомпилировал под 1.8.2
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: FakeIP

Сообщение djmelok » 05 мар 2016, 16:41

Не большая проблемка с плагином. Если зайти на сервер под кс №1, выйти и через минуты 2-3 зайти под кс №2 на этот же сервер, то плагин банит за фейк ип. Как исправить этот ложный бан ?
Аватара пользователя
djmelok
 
Сообщения: 168
Зарегистрирован: 13 ноя 2013, 02:41
Благодарил (а): 52 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: PAWN
С++\С#

Пред.След.

Вернуться в Утвержденные плагины

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16