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

Вопросы и обсуждение конкурсов

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

Вопросы и обсуждение конкурсов

Сообщение DJ_WEST » 12 янв 2012, 12:03

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

Re: Вопросы и обсуждение конкурсов

Сообщение DJ_WEST » 23 янв 2012, 20:54

Почему мне засчитали ошибку - "указания порта", хотя по условию этого оговорено не было (Пункт "2")

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

Где здесь указано, что должен выводиться порт?
Если исходить из цитаты ниже эта "ошибка" не должна была учитываться по скольку в условии этого не было оговорено

Если это не было указано, значит это не было нужно. Следовательно, порт уже отсебятина.
Если не вкурсе поясняю, при значении именно квара сервера "макс плаерс" = допустим "8", или просто меньше "32", цикл получает дополнительные итерации что создает излишнюю нагрузку на сервер (нагрузки возникают при проверке энтити не имеющих к игроку никакого отношения на is_user_connected(), по скольку свободные слоты занимают именно они!) + нужно учитывать проверки производимые самой функцией ...

Функция Вы должны зарегистрироваться, чтобы видеть ссылки.:
[pawn]
  1. static cell AMX_NATIVE_CALL is_user_connected(AMX *amx, cell *params) /* 1 param */

  2. {

  3.         int index = params[1];

  4.  

  5.         if (index < 1 || index > gpGlobals->maxClients)

  6.                 return 0;

  7.  

  8.         CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);

  9.  

  10.         return (pPlayer->ingame ? 1 : 0);

  11. }
[/pawn]
Соответственно, проверка идет только по игрокам, иначе сразу 0.
The edict indices in the range 1 to gpGlobals->maxClients are reserved for players; all networked, non-player entities will be assigned to an index higher than gpGlobals->maxClients.

Вы должны зарегистрироваться, чтобы видеть ссылки..

Вопросов об оптимизации не было, главное - рабочий плагин без ошибок.
При инициализации квара ему присваивается уровень допуска = флаг "a", затем в самой функции идет повторная проверка на уровень допуска (см. ниже)

Здесь нет ошибки. При регистрации команды через register_clcmd с указанием флага доступа никаких стандартных проверок нет, это лишь аргумент, который потом передается в хук функции, указанную в register_clcmd. Сама же проверка доступа:
[pawn]
  1.         if (!cmd_access(id, level, cid, 1))

  2.                 return PLUGIN_HANDLED
[/pawn]
В прибавлении числа к таску нету необходимости - это совершенно бесполезная операция

Это никак не влияет на работу плагина. И ничего грубого здесь нет, насчет бесполезности можно поспорить. Если у тебя в плагине будет куча тасков в разных функциях и все по id игрока, ты не сможешь сделать для них remove, потому что не укажешь какой именно нужно убрать.

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

Re: Вопросы и обсуждение конкурсов

Сообщение TurangaLeela » 23 янв 2012, 21:16

DJ_WEST,

По поводу тасков знаю, но если ремув таск не предусмотрен в коде - эти "+ - define" - бесполезны.

А насчет уровня допуска на консольную - все прекрасно работает по условию, лично проверял - ставил уровень допуска "a", и обычный игрок не мог ее активировать :zzz:

Все верно функция - is_user_connected() - делает проверки 0 < id <= max_clients (для каждой энтити запроса, в данном случае может делать их очень много, лично в моем случае "8" игроков на сервере - "32 - 8 = 24!" лишние проверки)

По поводу условия - да там небыло написано что нужен порт, НО и не было отрицания этого, следовательно - на мое усмотрение ...

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

Re: Вопросы и обсуждение конкурсов

Сообщение quckly » 23 янв 2012, 21:25

По поводе 1 конкурса. Почему
[pawn]
  1. RegisterHam(Ham_CS_Restart, "func_fall", "RoundStart4", 1 );

  2. RegisterHam(Ham_CS_Restart, "func_door", "RoundStart4", 1 );

  3. RegisterHam(Ham_CS_Restart, "func_breakeble", "RoundStart4", 1 );
[/pawn]
нерабочий ?

Добавлено спустя 6 минут:
TurangaLeela, лооол
В таск необходимо указывать уникальный ID.
Сам DJ_WEST решил сделать макс число игроков хардкорно прописав их в плагине, и я не стал изменять на get_maxplayers() ибо так было задумано автором.
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Вопросы и обсуждение конкурсов

Сообщение TurangaLeela » 23 янв 2012, 21:26

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

Re: Вопросы и обсуждение конкурсов

Сообщение quckly » 23 янв 2012, 21:40

is_user_connected(id) все равно возвратит 0

Вы должны зарегистрироваться, чтобы видеть ссылки. ... &go=search
id - A unique id to assign to the task.
Вот нашел ссылку почитай: Вы должны зарегистрироваться, чтобы видеть ссылки. ... t=set_task
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Вопросы и обсуждение конкурсов

Сообщение TurangaLeela » 23 янв 2012, 21:51

quckly, во 1х глянь icq, во 2х:
remove_task - Removes all tasks with given id.
Syntax:
remove_task ( id = 0, outside = 0 )
Type:
Native
Notes:
If outside var is set then a task can be removed also when was set in another plugin.


Таск обьявленный в плагине является внутренней функцией (даже вне зависимости от public), что означает что только в этом плагине его ID имеет вес. Уникальный ID необходим только в том случае если в коде нужна его инициализация (по игроку допустим, при этом на 1м игроке может висеть неограниченное кол-во тасков с id-игрока) или возможно его отключение в родном или побочных плагинах. Если же рассматривать ситуацию конкурса - задаем таск на игрока с биндом клавиш (отключение не предусмотрено, уникальный ID = id/игрока) - Смысла числовых манипуляций нету ... А че там пишут ... хзхз. Лично у меня достаточно опыта для рассмотрения и анализа данной ситуации.
Последний раз редактировалось TurangaLeela 23 янв 2012, 23:15, всего редактировалось 1 раз.
Аватара пользователя
TurangaLeela
 
Сообщения: 930
Зарегистрирован: 24 авг 2010, 11:19
Откуда: Некрополь у Кремлёвской стены
Благодарил (а): 10 раз.
Поблагодарили: 266 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life
Valve Hammer Editor 3.5
C | C++ | Java

Re: Вопросы и обсуждение конкурсов

Сообщение DJ_WEST » 23 янв 2012, 22:28

По поводу тасков знаю, но если ремув таск не предусмотрен в коде - эти "+ - define" - бесполезны.

Может быть, но опять же это никак не влияет на работу.
А насчет уровня допуска на консольную - все прекрасно работает по условию, лично проверял - ставил уровень допуска "a", и обычный игрок не мог ее активировать

Ок, я закомментировал:
[pawn]
  1.        // if (!cmd_access(id, level, cid, 1))

  2.         //        return PLUGIN_HANDLED
[/pawn]
Флаг "a" в register_clcmd остался. Захожу на сервер:
] amx_who
Clients on server:
# nick authid userid imm res access
1 amx-x.ru STEAM_ID_LAN 1 ML_NO ML_NO z
Total 1
] amx_showip
NAME - IP
amx-x.ru

У меня флаг z, я могу использовать amx_showip. Версия AMXX: AMX Mod X 1.8.1.3746.
Может в каких-то последних сборках такое уже и сделали, не смотрел, но гляну позже.
Все верно функция - is_user_connected() - делает проверки 0 < id <= max_clients (для каждой энтити запроса, в данном случае может делать их очень много, лично в моем случае "8" игроков на сервере - "32 - 8 = 24!" лишние проверки)

Можно, конечно, оптимизировать, но опять же вопрос бы не в оптимизации, а в исправлении ошибок и работоспособности плагина. К тому же, это смешная нагрузка на самом деле.
Причина этого решения мне известна - это просто заговор ... (тот же что и занижает оценки за мои работы)

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

Re: Вопросы и обсуждение конкурсов

Сообщение TurangaLeela » 24 янв 2012, 02:03

DJ_WEST,
В общем, по не понятным мне причинам сейчас не получилось блокировать консольную только по условию. Хотя пару месяцев назад тестировал и все прекрасно работало (мб какие-то настройки были, не помню систему сносил щас все с "0"). По этому признаю полное и безоговорочное поражение и прошу снять мою кандидатуру с участия в конкурсе -> сдвинуть почетные позиции

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

Re: Вопросы и обсуждение конкурсов

Сообщение PRoSToTeM@ » 26 янв 2012, 16:51

quckly писал(а):По поводе 1 конкурса. Почему
[pawn]
  1. RegisterHam(Ham_CS_Restart, "func_fall", "RoundStart4", 1 );

  2. RegisterHam(Ham_CS_Restart, "func_door", "RoundStart4", 1 );

  3. RegisterHam(Ham_CS_Restart, "func_breakeble", "RoundStart4", 1 );
[/pawn]
нерабочий ?

На карте этих объектов может не быть.
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

Re: Вопросы и обсуждение конкурсов

Сообщение quckly » 26 янв 2012, 17:21

Этот код будет работать для большинства карт, также можно хукнуть эту функцию на все обьекты, которые спавнятся.
// Ham_CS_Restart - почему то не работает тоже

[pawn]
  1. register_event("RoundTime", "RoundBegin", "bc", "2&Start")
[/pawn]
Вызывается 2 раза, также вызывается при подключении других игроков.
Последний раз редактировалось quckly 26 янв 2012, 17:26, всего редактировалось 1 раз.
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Пред.След.

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

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

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