AMX MOD X
Пятница, 08.08.2025, 06:39:21



Приветствую Вас Гость | RSS
[ Главная ] [ Модификация admin.amxx - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Модификация admin.amxx
makSuSДата: Воскресенье, 15.06.2008, 19:59:58 | Сообщение # 1
Подполковник
Группа: Пользователи
Сообщений: 111
Репутация: 0
Статус: Не в сети
хотелось бы изменить admin.amxx для добавления админки только по IP или Nick, если добавляется админ по IP, то сделать, чтобы игрок не проверялся на онлайн, в users.ini не писался порт и настоящий ник админа которому принадлежит этот IP.
Пример - пишем в консоле:
amx_addadmin "10.57.9.150" "" "abcdefghijklmnopqrstu" "ip"
мы дали админку человеку который заходит с IP 10.57.9.150, в users.ini пишется:
"10.57.9.150:27005" "" "abcdefghijklmnopqrstu" "de" ; The BIG
исходный код:
Code
public addadminfn(id, level, cid)
{
     if (!cmd_access(id, level, cid, 3))
      return PLUGIN_HANDLED

     new idtype = ADMIN_STEAM | ADMIN_LOOKUP

     if (read_argc() >= 5)
     {
      new t_arg[16]
      read_argv(4, t_arg, 15)

      if (equali(t_arg, "steam") || equali(t_arg, "steamid") || equali(t_arg, "auth"))
      {
       idtype = ADMIN_STEAM
      }
      else if (equali(t_arg, "ip"))
      {
       idtype = ADMIN_IPADDR
      }
      else if (equali(t_arg, "name") || equali(t_arg, "nick"))
      {
       idtype = ADMIN_NAME

       if (equali(t_arg, "name"))
        idtype |= ADMIN_LOOKUP
      } else {
       console_print(id, "[%s] Unknown id type ^"%s^", use one of: steamid, ip, name", PLUGINNAME, t_arg)
       return PLUGIN_HANDLED
      }
     }

     new arg[33]
     read_argv(1, arg, 32)
     new player = -1

     if (idtype & ADMIN_STEAM)
     {
      if (containi(arg, "STEAM_0:") == -1)
      {
       idtype |= ADMIN_LOOKUP
       player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS)
      } else {
       new _steamid[44]
       static _players[32], _num, _pv
       get_players(_players, _num)
       for (new _i=0; _i<_num; _i++)
       {
        _pv = _players[_i]
        get_user_authid(_pv, _steamid, sizeof(_steamid)-1)
        if (!_steamid[0])
         continue
        if (equal(_steamid, arg))
        {
         player = _pv
         break
        }
       }
       if (player < 1)
       {
        idtype &= ~ADMIN_LOOKUP
       }
      }
     }
     else if (idtype & ADMIN_NAME)
     {
      player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS)

      if (player)
       idtype |= ADMIN_LOOKUP
      else
       idtype &= ~ADMIN_LOOKUP
     }
     else if (idtype & ADMIN_IPADDR)
     {
      new len = strlen(arg)
      new dots, chars

      for (new i = 0; i < len; i++)
      {
       if (arg[i] == '.')
       {
        if (!chars || chars > 3)
         break

        if (++dots > 3)
         break

        chars = 0
       } else {
        chars++
       }

       if (dots != 3 || !chars || chars > 3)
       {
        idtype |= ADMIN_LOOKUP
        player = find_player("dh", arg)
       }
      }
     }

     if (idtype & ADMIN_LOOKUP && !player)
     {
      console_print(id, "%L", id, "CL_NOT_FOUND")
      return PLUGIN_HANDLED
     }

     new flags[64]
     read_argv(2, flags, 63)

     new password[64]
     if (read_argc() >= 4)
      read_argv(3, password, 63)

     new auth[33]
     new Comment[33]; // name of player to pass to comment field
     if (idtype & ADMIN_LOOKUP)
     {
      get_user_name(player, Comment, sizeof(Comment)-1)
      if (idtype & ADMIN_STEAM)
      {
       get_user_authid(player, auth, 32)
      }
      else if (idtype & ADMIN_IPADDR)
      {
       get_user_ip(player, auth, 32)
      }
      else if (idtype & ADMIN_NAME)
      {
       get_user_name(player, auth, 32)
      }
     } else {
      copy(auth, 32, arg)
     }

     new type[16], len

     if (idtype & ADMIN_STEAM)
      len += format(type[len], 15-len, "c")
     else if (idtype & ADMIN_IPADDR)
      len += format(type[len], 15-len, "d")

     if (strlen(password) > 0)
      len += format(type[len], 15-len, "a")
     else
      len += format(type[len], 15-len, "e")

     AddAdmin(id, auth, flags, password, type, Comment)
     cmdReload(id, ADMIN_CFG, 0)

     if (player > 0)
     {
      new name[32]
      get_user_info(player, "name", name, 31)
      accessUser(player, name)
     }

     return PLUGIN_HANDLED
}

я его переделал вот так:

Code
public addadminfn(id, level, cid)
{
     if (!cmd_access(id, level, cid, 3))
      return PLUGIN_HANDLED

     new idtype = ADMIN_IPADDR | ADMIN_LOOKUP

     if (read_argc() >= 5)
     {
      new t_arg[16]
      read_argv(4, t_arg, 15)

      if (equali(t_arg, "IPADDR") || equali(t_arg, "ip") || equali(t_arg, "auth"))
      {
       idtype = ADMIN_IPADDR
      }
      else if (equali(t_arg, "name") || equali(t_arg, "name"))
      {
       idtype = ADMIN_NAME

       if (equali(t_arg, "name"))
        idtype |= ADMIN_LOOKUP
      } else {
       console_print(id, "[%s] Unknown id type ^"%s^", use one of: steamid, ip, name", PLUGINNAME, t_arg)
       return PLUGIN_HANDLED
      }
     }

     new arg[33]
     read_argv(1, arg, 32)
     new player = -1

     if (idtype & ADMIN_NAME)
     {
      player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS)

      if (player)
       idtype |= ADMIN_LOOKUP
      else
       idtype &= ~ADMIN_LOOKUP
     }
     else if (idtype & ADMIN_IPADDR)
     {
      new len = strlen(arg)
      new dots, chars

      for (new i = 0; i < len; i++)
      {
       if (arg[i] == '.')
       {
        if (!chars || chars > 3)
         break

        if (++dots > 3)
         break

        chars = 0
       } else {
        chars++
       }

       if (dots != 3 || !chars || chars > 3)
       {
        idtype |= ADMIN_LOOKUP
        player = find_player("dh", arg)
       }
      }
     }

     if (idtype & ADMIN_LOOKUP && !player)
     {
      console_print(id, "%L", id, "CL_NOT_FOUND")
      return PLUGIN_HANDLED
     }

     new flags[64]
     read_argv(2, flags, 63)

     new password[64]
     if (read_argc() >= 4)
      read_argv(3, password, 63)

     new auth[33]
     new Comment[33]; // name of player to pass to comment field
     if (idtype & ADMIN_LOOKUP)
     {
      get_user_name(player, Comment, sizeof(Comment)-1)
      if (idtype & ADMIN_IPADDR)
      {
       get_user_ip(player, auth, 32)
      }
      else if (idtype & ADMIN_NAME)
      {
       get_user_name(player, auth, 32)
      }
     } else {
      copy(auth, 32, arg)
     }

     new type[16], len

     if (idtype & ADMIN_IPADDR)
      len += format(type[len], 15-len, "d")

     if (strlen(password) > 0)
      len += format(type[len], 15-len, "a")
     else
      len += format(type[len], 15-len, "e")

     AddAdmin(id, auth, flags, password, type, Comment)
     cmdReload(id, ADMIN_CFG, 0)

     if (player > 0)
     {
      new name[32]
      get_user_info(player, "name", name, 31)
      accessUser(player, name)
     }

     return PLUGIN_HANDLED
}

так же прошу оптимизировать код, ибо добавление админа по Steam_ID вообще не нужно


Сообщение отредактировал makSuS - Воскресенье, 15.06.2008, 20:04:26
 
slogicДата: Понедельник, 16.06.2008, 23:43:20 | Сообщение # 2
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Чтобы не писался порт, надо использовать get_user_ip(player, auth, 32, 1)
 
makSuSДата: Вторник, 17.06.2008, 00:01:47 | Сообщение # 3
Подполковник
Группа: Пользователи
Сообщений: 111
Репутация: 0
Статус: Не в сети
а как комментарий при добавлении по IP убрать? и проверку онлайна добавляемого админа
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2025