Просмотр полной версии : [Include] Pickup Stop Flood (Анти повторный подбора пикапов)
vasyok28
27.02.2017, 03:42
Описание: Инклюд предотвращает повторный вызов пикапа. Чтобы пикап повторно сработал нужно отойти от него на определенное расстояние. Инклюд в реализации довольно прост, любой скриптер сможет реализовать такую систему, данное решение скорей всего для новичков. Писал несколько месяцев назад, сегодня вспомнил про него и решил поделится.
Подключение:
После
#include <a_samp>
#include <streamer> (Не обязательно)
Добавить
#include <pickup_stop_flood>
Ссылки:
pastebin: тык (http://pastebin.com/X6SA0wpY)
yandex: тык (https://yadi.sk/d/2nt-cSul3EhcwC)
Важно: Этот фикс не вызывает пикап через определенное количество секунд, а срабатывает исключительно на определенное расстояние (расстояние можно менять в самом инклюде).
П.С Писал для себя, возможно где-то есть в интернете похожий принцип, тогда уж извините и снесите тему.
static bool:sf__PlayerPickUp[MAX_PLAYERS char];
Вот интересно ты создал static bool:sf__PlayerPickUp[MAX_PLAYERS char]; как char
есть ли разница использовать его как sf__PlayerPickUp[playerid] = false; или же sf__PlayerPickUp{playerid} = false;
for(new i, p = GetPlayerPoolSize()+1; i < p; i++)
Чем for(new i, p = GetPlayerPoolSize()+1; i < p; i++) лучше этого for(new i, p = GetPlayerPoolSize(); i <= p; i++)
Ну да это мелочи, прост видел подобную ситуацию в уроках Кортеза
new Float:sf__p_x, Float:sf__p_y, Float:sf__p_z;
В таймере лучше уже static
И да не люблю нагружать мод лишними таймерами, за старание + конечно
Вот интересно ты создал static bool:sf__PlayerPickUp[MAX_PLAYERS char]; как char
есть ли разница использовать его как sf__PlayerPickUp[playerid] = false; или же sf__PlayerPickUp{playerid} = false;
Естественно есть. Найди на форуме статью о char и прочти. Там всё описано
vasyok28
27.02.2017, 13:19
1. Привык использовать bool+char исключительно только в иклюдах, и чтобы не словить переполнение массив, типа чтобы не превышать размер. Без разницы что использовать ([] или {})
2. Тут уже по привычки, в свое время читал как работают условие, может я не прав в данном случае, но я вижу твое условие как меньше или равно (< || ==) Две условие. (Но скорей всего моя привычка)
3. Насчет static не знаю, может быть, но все равно переменные будут видны только в теле цикла. Насчет таймеров тоже так думал, но это если запустить мод на калькуляторе, на крайняк можно и общий таймер засунуть проверку и поставить еще проверку на иклюду.
- - - Добавлено - - -
Хотя насчет [] и {} загнул, опечаточка получается в инклюде размер массив указал, а вот обращаюсь не к байтам массива, поправьте меня если я не прав
vovandolg
27.02.2017, 13:19
Без разницы что использовать ([] или {})
На сколько я знаю если ты "зачаровал" массив то и юзать его надо в дальнейшем через {} такие скобки,
по крайней мере будут косяки если не правильно скобки ставить(из личного опыта).
Так что есть разница.
Nexius_Tailer
27.02.2017, 17:25
Чем for(new i, p = GetPlayerPoolSize()+1; i < p; i++) лучше этого for(new i, p = GetPlayerPoolSize(); i <= p; i++)
Ну да это мелочи, прост видел подобную ситуацию в уроках Кортеза
Не особая разница. Лучше уже вообще вот так:
for(new i = GetPlayerPoolSize(); i != -1; --i)
По коду:
for(new i, p = GetPlayerPoolSize()+1; i < p; i++) // <-
{
if(!IsPlayerConnected(i) || sf__PlayerPickUp[i] == false) continue;
new Float:sf__p_x, Float:sf__p_y, Float:sf__p_z; // <-
Не надо так. Переменные будут создаваться и удаляться по началу и завершению каждой итерации, что в разы всё замедлит. Создавать их лучше до или в шапке цикла, пример:
for(new i, p = GetPlayerPoolSize()+1, Float:sf__p_x, Float:sf__p_y, Float:sf__p_z; i < p; i++) // <-
{
if(!IsPlayerConnected(i) || sf__PlayerPickUp[i] == false) continue;
//...
Вот это, как я понимаю, определение расстояния по x и y:
if(floatsqroot(floatadd(floatpower(sf__x[i]-sf__p_x, 2), floatpower(sf__y[i]-sf__p_y, 2))) > LossPickup)
Для этого давно есть готовая функция VectorSize:
if(VectorSize(sf__x[i] - sf__p_x, sf__y[i] - sf__p_y, 0.0) > LossPickup)
А так в целом неплохо, молодец)
vasyok28
27.02.2017, 18:13
Не особая разница. Лучше уже вообще вот так:
for(new i = GetPlayerPoolSize(); i != -1; --i)
По коду:
for(new i, p = GetPlayerPoolSize()+1; i < p; i++) // <-
{
if(!IsPlayerConnected(i) || sf__PlayerPickUp[i] == false) continue;
new Float:sf__p_x, Float:sf__p_y, Float:sf__p_z; // <-
Не надо так. Переменные будут создаваться и удаляться по началу и завершению каждой итерации, что в разы всё замедлит. Создавать их лучше до или в шапке цикла, пример:
for(new i, p = GetPlayerPoolSize()+1, Float:sf__p_x, Float:sf__p_y, Float:sf__p_z; i < p; i++) // <-
{
if(!IsPlayerConnected(i) || sf__PlayerPickUp[i] == false) continue;
//...
Вот это, как я понимаю, определение расстояния по x и y:
if(floatsqroot(floatadd(floatpower(sf__x[i]-sf__p_x, 2), floatpower(sf__y[i]-sf__p_y, 2))) > LossPickup)
Для этого давно есть готовая функция VectorSize:
if(VectorSize(sf__x[i] - sf__p_x, sf__y[i] - sf__p_y, 0.0) > LossPickup)
А так в целом неплохо, молодец)
Насчет переменных тупанул жестко) И про расстояние тоже) Пасиб
Вася опыта наберется :pardon: с этого поста, не ну а как еще, часто вкладывайте свои работы, вас будут делать замечание, давать годные советы
Вася опыта наберется :pardon: с этого поста, не ну а как еще, часто вкладывайте свои работы, вас будут делать замечание, давать годные советы
Как ещё? Смотреть чужие темы и изучать советы, что давали там? А не забивать форум однотипными темами.
Это к слову о "часто выкладывайте свои работы". Выкладывать нужно лишь годное. Иначе рано или поздно вас просто пошлют, а ваши темы удалят, если они не будут иметь пользы и будут создаваться лишь для того, чтоб получить советы
Nexius_Tailer
28.02.2017, 14:24
Как ещё? Смотреть чужие темы и изучать советы, что давали там? А не забивать форум однотипными темами.
Это к слову о "часто выкладывайте свои работы". Выкладывать нужно лишь годное. Иначе рано или поздно вас просто пошлют, а ваши темы удалят, если они не будут иметь пользы и будут создаваться лишь для того, чтоб получить советы
Нигде не подписано самим автором, что он "сливает"/выкидывает (что в принципе одно и тоже) нам какую-то работу как мусор. Скорее всего это действительно имеет какой-то интерес для какой-то части пользователей. А не выкладывание тем и опыт лишь на чужих противоречит друг другу: не будет тем, не будет и материала, который можно изучать. Так что это как-бы звенья одной цепи.
Нигде не подписано самим автором, что он "сливает"/выкидывает (что в принципе одно и тоже) нам какую-то работу как мусор. Скорее всего это действительно имеет какой-то интерес для какой-то части пользователей. А не выкладывание тем и опыт лишь на чужих противоречит друг другу: не будет тем, не будет и материала, который можно изучать. Так что это как-бы звенья одной цепи.
Речь шла о том, что не стоит выкладывать вообще всё подряд. Представь, что сейчас каждый из новичков на форуме выложит свою версию антифлуда пикапов с целью услышать то, что можно было бы услышать зайдя, например, в эту тему. Кому от этого лучше станет? Никому.
Я призываю пользоваться поиском, прежде чем что-то выкладывать. Не стоит забывать, что этот форум создан не для того, чтоб обучить Pawn конкретного Васю Пупкина. Не превращайте этот форум в очередной p-i, где можно найти миллион нерабочих аналогов одной системы
vasyok28
28.02.2017, 17:47
Речь шла о том, что не стоит выкладывать вообще всё подряд. Представь, что сейчас каждый из новичков на форуме выложит свою версию антифлуда пикапов с целью услышать то, что можно было бы услышать зайдя, например, в эту тему. Кому от этого лучше станет? Никому.
Я призываю пользоваться поиском, прежде чем что-то выкладывать. Не стоит забывать, что этот форум создан не для того, чтоб обучить Pawn конкретного Васю Пупкина. Не превращайте этот форум в очередной p-i, где можно найти миллион нерабочих аналогов одной системы
Ваша логика железная, вроде понято написал, что делал для себя, и решил поделится может кому понадобится. Допустим я не хожу по форумам и беру чужие работы, а делаю сам, мне проще написать самому, чем разобратся в чужом коде. Если вас не устраивает тема, приймиите меры, зачем тогда модераторы на форуме? Мне както все равно на плюсики минусы, и отзывы.
Вроде в посте написал:
П.С Писал для себя, возможно где-то есть в интернете похожий принцип, тогда уж извините и снесите тему.
vovandolg
28.02.2017, 19:01
П.С Писал для себя, возможно где-то есть в интернете похожий принцип, тогда уж извините и снесите тему.
Чтобы такого не было, надо было поиск тут заюзать))
Если не ошибаюсь то по этой теме один мэн написал инклуд, а другой мануал(в нём разные варианты все кидали).
Эмм, стоп. С чего кто-то взял, что я говорю сейчас конкретно про автора темы? Моё "замечание" было направлено в сторону данного высказывания
...не ну а как еще, часто вкладывайте свои работы, вас будут делать замечание, давать годные советы
и сделано оно было для того, чтоб люди, которые впоследствии прочтут эту тему, не решили, что подход "лить любой код на форум без разбора" - верное решение. Вот и всё.
А тема с фиксом пикапов не такая уж и заезженная, поэтому и такая реализация имеет место быть. Я только не уверен в том, что VectorSize будет шустрее старого-доброго IsPlayerInRangeOfPoint. Но, в целом, такой реализации в виде готового инклуда на форуме не было, так что к автору претензий по поводу уникальности быть не может.
Nexius_Tailer
01.03.2017, 01:50
и делано оно было для того, чтоб люди, которые впоследствии прочтут эту тему, не решили, что подход "лить любой код на форум без разбора" - верное решение. Вот и всё.
Так это и ежу понятно)
Но вот только не думаю что те, кто выкладывает реальный треш, вообще что-либо читают где-то там в комментариях. Набиватели постов и плюсов были всегда, но это никак не относится к иному большинству.
Я только не уверен в том, что VectorSize будет шустрее старого-доброго IsPlayerInRangeOfPoint. Но, в целом, такой реализации в виде готового инклуда на форуме не было, так что к автору претензий по поводу уникальности быть не может.
IsPlayerInRangeOfPoint будет быстрее, но у автора не та ситуация. Он без z координаты расстояние сверял
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot