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

Новогодний конкурс #2 (до 20.01.12)

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

Новогодний конкурс #2 (до 20.01.12)

Сообщение DJ_WEST » 13 янв 2012, 13:47

Описание:
Суть данного конкурса - исправить логические ошибки в AMXX плагине для Counter-Strike 1.6. Данный плагин успешно компилируется (без ошибок и предупреждений), но должным образом не функционирует.

Что должен выполнять плагин:
1. При amx_bind "1" биндить всем зашедшим игрокам на клавишу F1 команду quit.
2. При написании игроком в консоль команды amx_showip, ему в консоль должен вывестись список имен и IP-адресов игроков, которые в данный момент на сервере. У игрока должен быть флаг доступа "a" (иммунитет).

Необходимо найти логические, синтаксические и другие ошибки в плагине. Причем структура плагина не должна меняться, к примеру, если используется цикл for, то его не нужно менять на другой цикл while или заменять функцией get_players. Но можно добавлять код, если он нужен для стабильной работы плагина. Возможны, неправильные функции, аргументы, логика, проверки и т.д. Победители определяются на основании того, кто больше всего нашел ошибок в плагине, и соответственно, кто сделал это быстрее всех.

В ответе указать код всего плагина уже с исправлениями, а в комментариях рядом указать какая была ошибка!

Плагин:
[pawn]
  1.  

  2. #include <amxmodx>

  3.  

  4. #define PLUGIN "Новогодний конкурс"

  5. #define VERSION "2.0"

  6. #define AUTHOR "amx-x.ru"

  7.  

  8. #define MAX_PLAYERS 32

  9.  

  10. new g_CvarBind

  11.  

  12. public plugin_init()

  13. {

  14.         register_plugin(PLUGIN, VERSION, AUTHOR)

  15.         register_clcmd("amx_showip", "Show_IP", _, "ADMIN_IMMUNITY")

  16.        

  17.         g_CvarBind = register_cvar("amx_bind", "1")

  18. }

  19.  

  20. public client_putinserver(id)

  21.         set_task(10.0, "Start_Bind")

  22.  

  23. public Start_Bimd(id)

  24. {

  25.         if (!get_pcvar_flags(g_CvarBind))

  26.                 client_cmd(id, "bind G1 quit")

  27. }

  28.  

  29. public Show_IP(id)

  30. {

  31.         new s_IP[32], s_Name[32]

  32.        

  33.         client_print(id, print_console, "IP - NAME")

  34.        

  35.         for (new i_Player = 1; i_Player < MAX_PLAYERS; i_Player++)

  36.         {

  37.                 get_user_ip(i_Player, s_IP, charsmax(s_IP))

  38.                 get_user_name(id, s_Name, charsmax(s_Name))

  39.                 client_print(id, print_chat, "%s - %s", s_Name, s_IP)

  40.         }

  41. }
[/pawn]

Лог компиляции:
Код: Выделить всё
Welcome to the AMX Mod X 1.76-300 Compiler.
Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team

Header size:            348 bytes
Code size:              808 bytes
Data size:              488 bytes
Stack/heap size:      16384 bytes; estimated max. usage=75 cells (300 bytes)
Total requirements:   18028 bytes
Done.


Призы:
[align=center]Steam-купон со скидкой 50% на игру Left 4 Dead 2*
l4d2_50.png

Steam-купон со скидкой 50% на игру Nuclear Dawn*
nucleardawn_50.png

Steam-купон со скидкой 50% на игру Blood Bowl Legendary Edition*
bloodbowl_50.png
[/align]

1 место - выбирает один любой купон.
2 место - выбирает один любой купон из двух оставшихся.
3 место - получает оставшийся купон.

* Для получения приза необходим аккаунт в системе Steam. Приз отсылается по почте.
Активировать купон необходимо до 1 марта 2012 года.


Выкладывать ответы с кодом необходимо под тегом [hide]. Содержимое ответа будет видно только администратору и модератору. Один пользователь имеет право ответить в теме - только один раз, все повторные ответы не засчитываются. Поэтому заранее нужно максимально ответить наибольшее количество вариантов. Ответы после указанного ниже времени не засчитываются. Принять участие может любой зарегистрированный пользователь форума, кроме администраторов и модераторов.

Использовать фейк-аккаунты и клоны запрещено - бан.

Флудить запрещено, только ответы по теме. Для вопросов и обсуждения есть тема:
Вы должны зарегистрироваться, чтобы видеть ссылки.

Конкурс продлится до 20.01.2012 21:00.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Новогодний конкурс #2

Сообщение quckly » 13 янв 2012, 14:26

[pawn]
  1. #include <amxmodx>

  2. #include <amxmisc>

  3.  

  4. #define PLUGIN "Новогодний конкурс"

  5. #define VERSION "2.0"

  6. #define AUTHOR "amx-x.ru"

  7.  

  8. #define MAX_PLAYERS 32

  9.  

  10. #define TASK_BIND       74100

  11.  

  12. new g_CvarBind

  13.  

  14. public plugin_init()

  15. {

  16.         register_plugin(PLUGIN, VERSION, AUTHOR)

  17.        

  18.         register_clcmd("amx_showip", "Show_IP", ADMIN_IMMUNITY, "Show all players IPs") // Вместо флага тут описиание команды

  19.        

  20.         g_CvarBind = register_cvar("amx_bind", "1")

  21. }

  22.  

  23. public client_putinserver(id)

  24.         set_task(10.0, "Start_Bind", TASK_BIND+id) // нету посылки id игрока

  25.  

  26. public Start_Bind(id) // Не правельное имя функции

  27. {

  28.         id -= TASK_BIND;

  29.         // Нету проверки на то, что игрок в игре

  30.         if(is_user_connected(id) && get_pcvar_num(g_CvarBind)) // Не та функция получения значения квара, лишнее отрицание

  31.                 client_cmd(id, "bind F1 quit") // Не правельная кнопка

  32. }

  33.  

  34. public Show_IP(id, level, cid) // Маловато аргументов

  35. {

  36.         // Нету проверки на флаг

  37.         if (!cmd_access(id, level, cid, 1))

  38.                 return PLUGIN_HANDLED

  39.        

  40.         new s_IP[32], s_Name[32]

  41.        

  42.         client_print(id, print_console, "NAME - IP") // Наверное наоборот лучше

  43.        

  44.         for (new i_Player = 1; i_Player <= /* нету равно */ MAX_PLAYERS; i_Player++)

  45.         {

  46.                 if(!is_user_connected(i_Player)) // Не хватает проверки

  47.                         continue;

  48.                

  49.                 get_user_ip(i_Player, s_IP, charsmax(s_IP), 1) // Без порта

  50.        

  51.                 get_user_name(i_Player, s_Name, charsmax(s_Name)) // id вместо i_Player

  52.        

  53.                 client_print(id, print_console, "%s - %s", s_Name, s_IP) // вывод должен быть в консоль

  54.         }

  55.        

  56.         return PLUGIN_HANDLED

  57. }
[/pawn]
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Новогодний конкурс #2

Сообщение l0pa » 13 янв 2012, 14:51

[pawn]
  1.  

  2.  

  3. #include <amxmodx>

  4.  

  5. #define PLUGIN "Новогодний конкурс"

  6. #define VERSION "2.0"

  7. #define AUTHOR "amx-x.ru"

  8.  

  9. #define MAX_PLAYERS 32

  10.  

  11. new g_CvarBind

  12.  

  13. public plugin_init()

  14. {

  15.         register_plugin(PLUGIN, VERSION, AUTHOR)

  16.         register_clcmd("amx_showip", "Show_IP", _, "ADMIN_IMMUNITY")

  17.        

  18.         g_CvarBind = register_cvar("amx_bind", "1")

  19. }

  20.  

  21. public client_putinserver(id)

  22. {

  23.         set_task(10.0, "Start_Bind", id)

  24. }

  25.  

  26. public Start_Bind(id)

  27. {

  28.         if (!get_pcvar_num(g_CvarBind))

  29.                 client_cmd(id, "bind F1 quit")

  30. }

  31.  

  32. public Show_IP(id)

  33. {

  34.         new s_IP[32], s_Name[32]

  35.        

  36.         client_print(id, print_console, "IP - NAME")

  37.        

  38.         for (new i_Player = 1; i_Player < MAX_PLAYERS; i_Player++)

  39.         {

  40.                 get_user_ip(i_Player, s_IP, charsmax(s_IP))

  41.                 get_user_name(id, s_Name, charsmax(s_Name))

  42.                 client_print(id, print_console, "%s - %s", s_Name, s_IP)

  43.         }

  44. }

  45.  
[/pawn]
//Что знал, то исправил. Не проверял, надеюсь будет роботать)
Уровень програмирования на Pawn - почти максимальный.
Аватара пользователя
l0pa
 
Сообщения: 99
Зарегистрирован: 01 ноя 2011, 20:36
Благодарил (а): 17 раз.
Поблагодарили: 7 раз.
Языки программирования: Counter-Strike 1.6

Re: Новогодний конкурс #2

Сообщение Mon[str] » 13 янв 2012, 15:11

[pawn]
  1. #include <amxmodx>

  2.  

  3. #define PLUGIN "Новогодний конкурс"

  4. #define VERSION "2.0"

  5. #define AUTHOR "amx-x.ru"

  6.  

  7. #define MAX_PLAYERS 32

  8.  

  9. new g_CvarBind

  10.  

  11.  

  12. public plugin_init()

  13. {

  14.         register_plugin(PLUGIN, VERSION, AUTHOR)

  15.  

  16.         register_concmd("amx_showip", "Show_IP",ADMIN_IMMUNITY, "Command", _) //1 ошибка не правильно поставлен флаг(Исправлено).

  17.  

  18.         g_CvarBind = register_cvar("amx_bind", "1")

  19. }

  20.  

  21. public client_putinserver(id)

  22.         set_task(10.0, "Start_Bind", id) //2 и 3 ошибка - 2 в функции Start_Bind и Start_Bimd разные(Исправлено). 3 ошибка в set_task не передано id следовательно Start_Bind не имеет индекса(Исправлено)

  23.  

  24. public Start_Bind(id)

  25. {

  26.         if(get_pcvar_num(g_CvarBind) == 1) //4 и 5 ошибка - 4 не правильно указана функци получения квара(Исправлено). 5 Не правильно сделана проверка(Исправлено).

  27.                 client_cmd(id, "bind F1 quit") //6 ошибка "bind G1 quit" написано не првильно(Исправлено).

  28. }

  29.  

  30. public Show_IP(id)

  31. {

  32.         new s_IP[32], s_Name[32]

  33.  

  34.         client_print(id, print_console, "IP - NAME")

  35.  

  36.         for(new i_Player = 1; i_Player <= MAX_PLAYERS; i_Player++) // 7 ошибка - i_Player < MAX_PLAYERS записано не правильно так как имакс игроков 32 а тут 31(Исправлено).

  37.         {

  38.                 if(!is_user_connected(i_Player))

  39.                         continue

  40.  

  41.                 get_user_name(i_Player, s_Name, charsmax(s_Name)) // 8 ошибка "id"(Исправлено).

  42.                 get_user_ip(i_Player, s_IP, charsmax(s_IP))

  43.  

  44.                 client_print(id, print_console, "%s - %s", s_Name, s_IP) //9 ошибка сказано список в консоль а написано в чат(Исправлено).

  45.         }

  46. }

  47.  

  48. /*И того 9 ошибок которых я насчитал.

  49. Извенясь если в коментариях допускал орфографические ошибки - торопился.*/
[/pawn]
Последний раз редактировалось Mon[str] 13 янв 2012, 18:32, всего редактировалось 3 раз(а).
Аватара пользователя
Mon[str]
 
Сообщения: 1166
Зарегистрирован: 26 июл 2011, 12:12
Откуда: Россия -> Иркутская область
Благодарил (а): 99 раз.
Поблагодарили: 273 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
C++

Re: Новогодний конкурс #2

Сообщение TurangaLeela » 13 янв 2012, 15:46

[pawn]
  1.  

  2. #include <amxmodx>

  3.  

  4. #define PLUGIN "Новогодний конкурс"

  5. #define VERSION "2.1"

  6. #define AUTHOR "amx-x.ru" // Turanga_Leela [13.01.2012]

  7.  

  8. #define Timer 10.0      // Time to start REbind

  9. #define Command "quit"  // Binded command

  10.  

  11. /*

  12.         Указывать ошибки было влом, по этому только так =)

  13.         Обращаю ваше внимание на то что пришлось 2 раза выполнить проверку на бота - во всем виноват ТАСК! (на случай дисконнекта)

  14. */

  15.  

  16. enum _:PLUGIN_DATA

  17. {

  18.         cvar_Bind,

  19.         _MaxPlayers,

  20.         bit_InGame,

  21.         bit_Bot

  22. }

  23.  

  24. new g_plugin_data[PLUGIN_DATA]

  25.  

  26. public plugin_init()

  27. {

  28.         g_plugin_data[cvar_Bind] = register_cvar("amx_bind", "1")

  29.         g_plugin_data[_MaxPlayers] = get_maxplayers()

  30.        

  31.         register_plugin(PLUGIN, VERSION, AUTHOR)

  32.         register_clcmd("amx_showip", "Show_IP", ADMIN_IMMUNITY)

  33. }

  34.  

  35. public client_connect(id)

  36. {

  37.         g_plugin_data[bit_InGame] |= 1 << (id - 1)

  38.        

  39.         if(is_user_bot(id))

  40.         {

  41.                 g_plugin_data[bit_Bot] |= 1 << (id - 1)

  42.         }

  43. }

  44.  

  45. public client_disconnect(id)

  46. {

  47.         g_plugin_data[bit_InGame] ^= 1 << (id - 1)

  48.         g_plugin_data[bit_Bot] &= ~(1 << (id - 1))

  49. }

  50.  

  51. public client_putinserver(id)

  52. {

  53.         if(get_pcvar_num(g_plugin_data[cvar_Bind]) && 1 << (id - 1) & ~g_plugin_data[bit_Bot])

  54.         {

  55.                 set_task(Timer, "Start_Bind", id)

  56.         }

  57. }

  58.  

  59. public Start_Bind(id)

  60. {

  61.         if(g_plugin_data[bit_InGame] & 1 << (id - 1) && 1 << (id - 1) & ~g_plugin_data[bit_Bot])

  62.         {

  63.                 client_cmd(id, "unbind F1")

  64.                 client_cmd(id, "bind F1 %s", Command)

  65.         }

  66. }

  67.  

  68. public Show_IP(id)

  69. {

  70.         new

  71.        

  72.         s_IP[32],

  73.         s_Name[32]

  74.        

  75.         client_print(id, print_console, "IP - NAME")

  76.  

  77.         for(new i_Player = 1; i_Player <= g_plugin_data[_MaxPlayers]; i_Player++)

  78.         {

  79.                 if(1 << (i_Player - 1) & g_plugin_data[bit_InGame])

  80.                 {

  81.                         get_user_ip(i_Player, s_IP, charsmax(s_IP))

  82.                         get_user_name(i_Player, s_Name, charsmax(s_Name))

  83.                        

  84.                         client_print(id, print_console, "%s - %s", s_IP, s_Name)       

  85.                 }      

  86.         }

  87.        

  88.         return PLUGIN_HANDLED

  89. }

  90.  
[/pawn]
Аватара пользователя
TurangaLeela
 
Сообщения: 930
Зарегистрирован: 24 авг 2010, 11:19
Откуда: Некрополь у Кремлёвской стены
Благодарил (а): 10 раз.
Поблагодарили: 266 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life
Valve Hammer Editor 3.5
C | C++ | Java

Re: Новогодний конкурс #2

Сообщение mazdan » 13 янв 2012, 16:39

ну что-то типа того :D
На победу не претендую, но задание интересное :D жаль потестить не могу будет ли работать :D
[pawn]
  1.          

  2.         #include <amxmodx>

  3.          

  4.         #define PLUGIN "Новогодний конкурс"

  5.         #define VERSION "2.0"

  6.         #define AUTHOR "amx-x.ru"

  7.          

  8.         #define MAX_PLAYERS 32

  9.          

  10.         new g_CvarBind

  11.          

  12.         public plugin_init()

  13.         {

  14.                 register_plugin(PLUGIN, VERSION, AUTHOR)

  15.                 register_clcmd("amx_showip", "Show_IP", ADMIN_IMMUNITY, "показывалка айпи") //тут поменял немножко. команда, ф-я. доступ, коммент.

  16.                

  17.                 g_CvarBind = register_cvar("amx_bind", "1")

  18.         }

  19.          

  20.         public client_putinserver(id)

  21.                 set_task(10.0, "Start_Bind",id) //не указан id задания

  22.          

  23.         public Start_Bimd(id)

  24.         {

  25.                                 if (is_user_connected(id)) { // если так можно (меняется немного структура) но игрок мог покинуть сервер :D или как вариант добавить см. ниже

  26.                 if (!get_pcvar_num(g_CvarBind)) // нам же нужна циферка (ну я надеюсь) :D

  27.                         client_cmd(id, "bind ^"F1^" ^"quit^"") // исправлена точка G на точку F :D я на всякий случай добавил бы кавычки ещё (не знаю насколько актуально, но проверить не могу - работа :D)

  28.                                                 }

  29.         }

  30.          

  31.         public Show_IP(id)

  32.         {

  33.                 new s_IP[32], s_Name[32]

  34.                

  35.                 client_print(id, print_console, "NAME - IP") // + поменял местами IP и Ник  (или тут или в строке 41) по мне удобнее с ника

  36.                

  37.                 for (new i_Player = 1; i_Player <= MAX_PLAYERS; i_Player++) //до 32, а не 31

  38.                 {

  39.                                                 if (is_user_connected(i_Player)) { // если нельзя запрашивать список игроков get_player то так

  40.                         get_user_ip(i_Player, s_IP, charsmax(s_IP))

  41.                         get_user_name(i_Player, s_Name, charsmax(s_Name)) //нам надо чужие ники, а не 32 раза наш ник

  42.                         client_print(id, print_console, "%s - %s", s_Name, s_IP) // в консоль, а не в чат

  43.                                                 }

  44.                 }

  45.         }

  46.                 // если нельзя ставить условие (строка 25), то добавляем такой код

  47.                 public client_disconnect(id)

  48.                 {

  49.                 if (task_exists(id)) //если проверки не будет, то ничего страшного не произойдет

  50.                 remove_task(id)

  51.                 }
[/pawn]
я не пишу плагины на заказ!
Аватара пользователя
mazdan
 
Сообщения: 739
Зарегистрирован: 12 окт 2010, 14:44
Благодарил (а): 121 раз.
Поблагодарили: 211 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Новогодний конкурс #2

Сообщение inf » 14 янв 2012, 17:30

как-то так.
[pawn]
  1.  

  2. #include <amxmodx>

  3.  

  4. #define PLUGIN "Новогодний конкурс"

  5. #define VERSION "2.0"

  6. #define AUTHOR "amx-x.ru"

  7.  

  8. #define MAX_PLAYERS 32

  9. #define PLAYER_OFFSET 1337

  10.  

  11. new g_CvarBind

  12.  

  13. public plugin_init()

  14. {

  15.         register_plugin(PLUGIN, VERSION, AUTHOR)

  16.         register_clcmd("amx_showip", "Show_IP");

  17.        

  18.         g_CvarBind = register_cvar("amx_bind", "1")

  19. }

  20.  

  21. public client_putinserver(id)

  22. {

  23.         if(get_pcvar_num(g_CvarBind) != 1)

  24.                 return PLUGIN_CONTINUE;

  25.        

  26.         set_task(10.0, "Start_Bind", id + PLAYER_OFFSET);

  27.        

  28.         return PLUGIN_CONTINUE;

  29. }

  30.  

  31. public Start_Bind(taskId)

  32. {

  33.         new id = taskId - PLAYER_OFFSET;

  34.        

  35.         if(!is_user_connected(id))

  36.         {

  37.                 return PLUGIN_CONTINUE;

  38.         }

  39.        

  40.         client_cmd(id, "bind F1 quit");

  41.         return PLUGIN_CONTINUE;

  42. }

  43.  

  44. public Show_IP(id)

  45. {

  46.         if(!(get_user_flags(id) & ADMIN_IMMUNITY))

  47.         {

  48.                 return PLUGIN_HANDLED;

  49.         }

  50.    

  51.         static s_IP[16], s_Name[33];

  52.        

  53.         client_print(id, print_console, "IP - NAME");

  54.        

  55.         for (new i_Player = 1; i_Player <= MAX_PLAYERS; i_Player++)

  56.         {

  57.                 if(!is_user_connected(i_Player)) continue;

  58.                

  59.                 get_user_ip(i_Player, s_IP, charsmax(s_IP), 1);

  60.                 get_user_name(id, s_Name, charsmax(s_Name))

  61.                 client_print(id, print_console, "%s - %s", s_IP, s_Name);

  62.         }

  63.        

  64.         return PLUGIN_HANDLED;

  65. }

  66.  
[/pawn]
[align=center][steam] [cyberarena]
[starladder][/align]
Аватара пользователя
inf
 
Сообщения: 25
Зарегистрирован: 13 янв 2010, 18:22
Откуда: kieff
Благодарил (а): 18 раз.
Поблагодарили: 2 раз.
Языки программирования: CS 1.6

Re: Новогодний конкурс #2

Сообщение fifayer » 14 янв 2012, 22:59

[pawn]
  1.  #include <amxmodx>

  2.  

  3. #define PLUGIN "Новогодний конкурс"

  4. #define VERSION "2.0"

  5. #define AUTHOR "amx-x.ru"

  6.  

  7. #define MAX_PLAYERS 32

  8.  

  9. new g_CvarBind

  10.  

  11. public plugin_init()

  12. {

  13.         register_plugin(PLUGIN, VERSION, AUTHOR)

  14.         register_clcmd("amx_showip", "Show_IP", ADMIN_IMMUNITY)

  15.        

  16.         g_CvarBind = register_cvar("amx_bind", "1")

  17. }

  18.  

  19. public client_putinserver(id)

  20. {

  21.         if (get_pcvar_num(g_CvarBind) == 1) // Должны получать значение квара. а также значение было негативное

  22.                 set_task(10.0, "Start_Bind",id)

  23. }

  24.  

  25. public Start_Bind(id) // Синтаксическая ошибка

  26. {

  27.         client_cmd(id, "bind ^"F1^" ^"quit^"") // Также ошибка, было G1

  28. }

  29.  

  30. public Show_IP(id)

  31. {

  32.         if(get_user_flags(id) & ADMIN_IMMUNITY) // Добавил проверку на доступ

  33.         {

  34.                 new s_IP[32], s_Name[32]

  35.                

  36.                 client_print(id, print_console, "^"IP^" - ^"NAME^"")

  37.                

  38.                 for (new i =1; i <= MAX_PLAYERS; i++)

  39.                 {

  40.                         if (is_user_connected(i)) // Проверил есть ли игрок на сервере, чтобы вводить его в список

  41.                         {

  42.                                 get_user_ip(i, s_IP, charsmax(s_IP))

  43.                                 get_user_name(i, s_Name, charsmax(s_Name)) // Исправил, чтобы брало ник игрока с цикла

  44.                                 client_print(id, print_console, "%d. ^"%s^" - ^"%s^"",i,s_IP, s_Name) // Вывод в консоль а не чат, также айпи с ником поменял местами. добавил номер игрока

  45.                         }

  46.                 }

  47.         }      

  48.         else

  49.         {

  50.                 client_print(id, print_console, "you have no access!")

  51.         }

  52.         return PLUGIN_HANDLED

  53. }
[/pawn]
Последний раз редактировалось fifayer 17 янв 2012, 16:57, всего редактировалось 1 раз.
Аватара пользователя
fifayer
 
Сообщения: 278
Зарегистрирован: 27 дек 2010, 16:42
Благодарил (а): 103 раз.
Поблагодарили: 30 раз.
Языки программирования: Counter-Strike 1.6

Re: Новогодний конкурс #2

Сообщение plamont_old » 17 янв 2012, 15:07

[pawn]
  1. #include <amxmodx>

  2.  

  3. #define PLUGIN "Новогодний конкурс"

  4. #define VERSION "2.0"

  5. #define AUTHOR "amx-x.ru"

  6.  

  7. #define MAX_PLAYERS 32

  8.  

  9. new g_CvarBind;

  10.  

  11. public plugin_init(){

  12.         register_plugin(PLUGIN,VERSION,AUTHOR)

  13.         register_clcmd("amx_showip","Show_IP",ADMIN_IMMUNITY);

  14.         g_CvarBind = register_cvar("amx_bind","1");

  15. }

  16.  

  17. public client_putinserver(id)

  18.         set_task(10.0,"Start_Bind",id);

  19.  

  20. public client_disconnect(id){

  21.         if(task_exists(id))

  22.                 remove_task(id);

  23.  }

  24.  

  25. public Start_Bind(id){

  26.         if(get_pcvar_num(g_CvarBind))

  27.                 client_cmd(id,"bind F1 quit");

  28. }

  29.  

  30. public Show_IP(id){

  31.         new s_IP[16],s_Name[MAX_PLAYERS];

  32.         for(new i_Player = 0; i_Player < MAX_PLAYERS; i_Player++){

  33.                 if(is_user_connected(i_Player)){

  34.                         get_user_ip(i_Player,s_IP,charsmax(s_IP),1);

  35.                         get_user_name(i_Player,s_Name,charsmax(s_Name));

  36.                         console_print(id,"IP - NAME");

  37.                         console_print(id,"%s - %s",s_Name,s_IP);

  38.                 }

  39.         }

  40.         return PLUGIN_HANDLED;

  41. }
[/pawn]
Ошибки:
1. грубая ошибка в register_clcmd
2. неверный индекс у определения имени
3. неверная проверка на кварбинд
4. в цикле 32 игрока значит начинать нужно с 0
5. вывод в чат, а нужно в консоль.)
6. неверный бинд
7. показывать ip без порта, 3 аргумент должно равняется единицей.

Оптимизация
1. Размер массива для ip - слишком большой
2. Проверка присутствие игрока на сервере
3. Удаление запущенной задачи у игрока при дисконекте
4. Массивы заменены define
Аватара пользователя
plamont_old
 
Сообщения: 180
Зарегистрирован: 24 июн 2011, 16:49
Благодарил (а): 3 раз.
Поблагодарили: 40 раз.
Опыт программирования: Меньше месяца

Re: Новогодний конкурс #2 (до 20.01.12)

Сообщение Arwel » 18 янв 2012, 20:17

[pawn]
  1. #include <amxmodx>

  2.  

  3.  

  4.  

  5. #define PLUGIN "Новогодний конкурс"

  6.  

  7. #define VERSION "2.0"

  8.  

  9. #define AUTHOR "amx-x.ru"

  10.  

  11.  

  12.  

  13. #define MAX_PLAYERS 32

  14.  

  15.  

  16.  

  17. new g_CvarBind

  18.  

  19.  

  20.  

  21. public plugin_init()

  22.  

  23. {

  24.  

  25.         register_plugin(PLUGIN, VERSION, AUTHOR)

  26.  

  27.         register_clcmd("amx_showip", "Show_IP", ADMIN_IMMUNITY)//ошибка с аргументами и кавычки

  28.  

  29.        

  30.  

  31.         g_CvarBind = register_cvar("amx_bind", "1")

  32.  

  33. }

  34.  

  35.  

  36.  

  37. public client_putinserver(id)

  38.  

  39.         set_task(10.0, "Start_Bind",id)//передача айди

  40.  

  41.  

  42.  

  43. public Start_Bind(id)//Bimd

  44.  

  45. {

  46.  

  47.         if (get_pcvar_num(g_CvarBind))//pcvar_flags + логическая ошбика (если квар g_CvarBind равен нулю, забиндить)

  48.  

  49.                 client_cmd(id, "bind F1 quit")//G1

  50.  

  51. }

  52.  

  53.  

  54.  

  55. public Show_IP(id)

  56.  

  57. {

  58.  

  59.         new s_IP[32], s_Name[32]

  60.  

  61.        

  62.  

  63.         client_print(id, print_console, "IP - NAME")

  64.  

  65.        

  66.  

  67.         for (new i_Player = 1; i_Player < MAX_PLAYERS; i_Player++)

  68.  

  69.         {

  70.                        

  71.                 if(is_user_connected(i_Player)){//проверка на законекченсть игрока

  72.                        

  73.                         get_user_ip(i_Player, s_IP, charsmax(s_IP))

  74.  

  75.                         get_user_name(i_Player, s_Name, charsmax(s_Name))//должно быть i_Player

  76.  

  77.                         client_print(id, print_console, "%s - %s", s_Name, s_IP)//print_chat :D

  78.                 }

  79.  

  80.         }

  81.  

  82. }
[/pawn]
Аватара пользователя
Arwel
 
Сообщения: 34
Зарегистрирован: 09 сен 2011, 14:13
Благодарил (а): 5 раз.
Поблагодарили: 4 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

След.

Вернуться в Новости

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

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